
    8f#7                        d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlZd	d
lmZ d	dlmZ d	dlmZmZ  G d dej<                        Zy)    )annotationsN)defaultdict)Path)DictListOptionalSequenceUnioncast)	QtWidgets)QApplication)WizardRunnerState   )WizardInstallerDialog)make_interpreter)make_ini_tweaksmerge_ini_tweaksc                  ^    e Zd ZU 	  ej                  d      Z ej                  d      Zded<   ded<   ded<    fd	Zdd
Z	d Z
ddZd Zd Zd Zd Zd Zd dZd!dZ	 	 	 	 	 	 d"dZ	 	 	 	 d#dZd!dZd!dZ	 	 	 	 	 	 	 	 d$dZg df	 	 	 	 	 d%dZd&dZ	 	 	 	 	 	 	 	 	 	 d'dZd(dZ xZS ))WizardInstallerzselect([0-9]+)-descriptionzselect([0-9]+)-option([0-9]+)mobase.IOrganizer
_organizerzDict[str, List[str]]_installerOptionsbool_installerUsedc                "    t         |           y N)super__init__)self	__class__s    nC:\Program Files (x86)/Steam/steamapps/common/Skyrim Special Edition/MO2/plugins\installer_wizard\installer.pyr   zWizardInstaller.__init__)   s        c                    || _         y)NT)r   )r   	organizers     r!   initzWizardInstaller.init,   s    #r"   c                     yNzBAIN Wizard Installer r   s    r!   namezWizardInstaller.name0   s    &r"   c                $    | j                  d      S r'   trr)   s    r!   localizedNamezWizardInstaller.localizedName3   s    ww.//r"   c                     y)NHolt59r(   r)   s    r!   authorzWizardInstaller.author6   s    r"   c                $    | j                  d      S )Nz5Installer for BAIN archive containing wizard scripts.r,   r)   s    r!   descriptionzWizardInstaller.description9   s    wwNOOr"   c                0    t        j                  ddd      S )Nr   r      )mobaseVersionInfor)   s    r!   versionzWizardInstaller.version<   s    !!!Q**r"   c                V    | j                   j                  | j                         d      S )Nenabled)r   pluginSettingr*   r)   s    r!   isActivezWizardInstaller.isActive?   s    ,,TYY[)DDr"   c                    t        j                  ddd      t        j                  ddd      t        j                  ddd      t        j                  d	d
d      gS )Nr:   zcheck to enable this pluginTprefer_fomodz2prefer FOMOD installer over this one when possibleprefer_omodz1prefer OMOD installer over this one when possibleFpriorityzpriority of this installerx   )r6   PluginSettingr)   s    r!   settingszWizardInstaller.settingsB   sd      ,I4P  D
   C   -I3O
 	
r"   c                r    t        t        | j                  j                  | j	                         d            S )Nr@   )r   intr   r;   r*   r)   s    r!   r@   zWizardInstaller.priorityU   s&    C66tyy{JOPPr"   c                     y)NFr(   r)   s    r!   isManualInstallerz!WizardInstaller.isManualInstallerX   s    r"   c                   d| _         i | _        |rj|j                  | j                               }i }t	        t
              }|j                         D ]  \  }}t        j                  j                  |      }	|	r(t        |	j                  d            }
t        |      ||
<   t        j                  j                  |      }|sqt        |j                  d            }
t        |j                  d            }t        |      ||
   |<    |j                         D ]^  \  }}g | j                  |<   ||v st        ||   j                               D ]&  }| j                  |   j!                  ||   |          ( ` y y )NFr   r5   )r   r   pluginSettingsr*   r   dictitemsr   RE_DESCRIPTIONmatchrE   groupstr	RE_OPTIONsortedkeysappend)r   archivereinstallationcurrent_modrC   descriptionsoptionssettingvaluemdescselectmoptindexkdescdescs                  r!   onInstallationStartz#WizardInstaller.onInstallationStart[   sb    $!#"11$))+>H ,.L1<T1BG"*.."2 
8'66<<WE Q0F+.u:L(&0066w? A/F

1.E-0ZGFOE*
8  ,113 St/1&&t,G#!'(;(;(=!> S..t4;;GEN5<QRSS% r"   c           	        |t         j                  j                  k7  s| j                  r|sy |j	                  | j                                t        | j                        D ]q  \  }}|j                  | j                         d| d|       t        | j                  |         D ],  \  }}|j                  | j                         d| d| |       . s y )Nr\   z-descriptionz-option)	r6   InstallResultSUCCESSr   clearPluginSettingsr*   	enumerater   setPluginSetting)r   resultnew_modir`   ioptopts          r!   onInstallationEndz!WizardInstaller.onInstallationEnd|   s     f**222&&##DIIK0 !7!78 	VGAt$$TYY[F1#\2JDQ&t'='=d'CD V	c((qc6OQTUV	Vr"   c                8    | j                   j                  d      S )NzFomod Installerr   isPluginEnabledr)   s    r!   _hasFomodInstallerz"WizardInstaller._hasFomodInstaller   s    ../@AAr"   c                8    | j                   j                  d      S )NzOmod Installerro   r)   s    r!   _hasOmodInstallerz!WizardInstaller._hasOmodInstaller   s    ../?@@r"   c                    	 |j                  dt        j                  j                        }|r|S t	        |      dk(  r2t        |d   x}t        j                        r| j                  |||      S y )N
wizard.txtr   r   )findr6   FileTreeEntryFILElen
isinstance	IFileTree_getWizardArchiveBase)r   tree	data_namecheckerentryroots         r!   r|   z%WizardInstaller._getWizardArchiveBase   sg    
	 		,(<(<(A(ABKt9>j$q'/$F<L<LM--dIwGGr"   )pngjpgjpeggifbmpinic                @    	 g dfd}|j                  |       S )Nc                    |j                         r"|j                        rj                  |       t        j                  j
                  S r   )isFile	hasSuffixrS   r6   r{   CONTINUE)pathr   entries
extensionss     r!   fnz0WizardInstaller._getEntriesToExtract.<locals>.fn   s5    ||~%//*"=u%##,,,r"   )r   rO   r   zmobase.FileTreeEntry)walk)r   r}   r   r   r   s     ` @r!   _getEntriesToExtractz$WizardInstaller._getEntriesToExtract   s&    
		 /1	-
 			"r"   c                   	 | j                   j                         j                         j                         }| j                   j	                         j                  t        j                        }| j                  |||      }|sy|j                  d      }|r;| j                         r+| j                   j                  | j                         d      ryy)NFzfomod/ModuleConfig.xmlr>   T)r   managedGamedataDirectorydirNamegameFeaturesgameFeaturer6   ModDataCheckerr|   existsrq   r;   r*   )r   r}   r~   r   basefomods         r!   isArchiveSupportedz"WizardInstaller.isArchiveSupported   s    		 OO//1??AIIK	 //..0<<V=R=RS ))$	7C 45'')--diik>J r"   c                P   	 | j                   j                         j                         j                         }| j                   j	                         j                  t        j                        }| j                  |||      }|r|st        j                  j                  S |j                  d      }|t        j                  j                  S | j                  |      }	| j                         j                  |g|	z   d      }
t        |
      t        |	      dz   k7  rt        j                  j                   S t#        || j                         }|
d   t%        | j                   ||j'                  t)              t+                     |t-        |	|
dd  d      D ci c]9  \  }}|j/                  d      s#t)        |j1                               t)        |      ; c}}| j2                  | j5                               }|j6                  j9                  fd	       |j;                         t<        j>                  j@                  jB                  k(  r|jE                  |jG                         t        jH                  jJ                         |jM                         }|jO                         D ]`  }|j                  |      }|rtQ        |t        jR                        s tU        d
| dtV        jX                         P|j[                  |       b |j]                         j_                         D ]:  \  }}|j                  |      }|stU        d| d       )|ja                  ||       < |jc                         j_                         D ]<  \  }}|r	|j                  |      }|s|je                  d      jg                  |       > |ji                         }|j_                         D ]  \  }}|j                  |      }d }|r|	jk                  |      }|
|dz      }|s)t)        |      jl                  d   jo                         dk(  r|jq                  |d      }n1|jq                  tr        j0                  ju                  d|      d      }| j                         jw                  |      }|sty        |      }nt{        |t)        |            }t}        |d      5 }|j                  |       d d d         d| _@        t        |j                               | _        |S |j                         rR|jE                  |jG                         t        jH                  jJ                         t        j                  j                  S t        j                  j                  S c c}}w # 1 sw Y   xY w)Nru   F)silentr   r   T)strictz.inic                 .    t        j                         S r   )os	startfile)scripts   r!   <lambda>z)WizardInstaller.install.<locals>.<lambda>-  s    BLL( r"   zSubPackage z not found in the archive.)filezPlugin z not found, cannot rename.optionalz
ini tweaks)replace_if_existsz
INI Tweaksw)Fr   r   r   r   r   r   r6   r   r|   rc   NOT_ATTEMPTEDrv   r   _managerextractFilesry   FAILEDr   r   make_top_level_contextr   r   zipendswithr   r   _parentWidgetscriptButtonClickedconnectexecr   QDialog
DialogCodeAcceptedupdater*   GuessQualityUSERcreateOrphanTreesubpackagesrz   r{   printsysstderrmergerenamesrK   movepluginsaddDirectoryinserttweaksr^   partsloweraddFiler   join
createFiler   r   openwriter   rJ   selectedOptionsisManualRequestedMANUAL_REQUESTEDCANCELED)r   r*   r}   r8   nexus_idr~   r   r   wizard
to_extractpathsinterpreterr   r   dialognew_tree
subpackageoriginalnewpluginr:   	alltweaksfilenamer   o_entry
o_filenamer^   filepathdatafpr   s                                 @r!   installzWizardInstaller.install   s   	& OO//1??AIIK	 //..0<<V=R=RS ))$	7C7''555<(>''555..t4
 ,,fX
-B5,Qu:Z1,,''...&tT__=q&OO..tF|=N=PQ $'z59T#JE4}}V, UZZ\"DJ.
 "" 
 	""**(	
 ;;=I--88AAAKKv':':'?'?@ ,,.H$002 &
		*- Juf6F6F$G%j\1KL ZZ u%& "(!1!7!7!9 *# h/GH:-GHIeS)* $*>>#3#9#9#; D$MM&1E  ))*5<<UCD I$-OO$5 # &"--1,0
&,,W5E "'uqy!1J d8n2215;;=M$,,X,NE %,,\8<PT - E  ==?55e<!*62D+FD4DED(C( #BHHTN# #9#@ #'D%)&*@*@*B%CD"O %%'KKv':':'?'?@''888 ''000Mj# #s   >VVV%	c                .    t        j                  d|      S )Nr   )r   	translate)r   rZ   s     r!   r-   zWizardInstaller.tr  s     %%&7??r"   )r$   r   )returnrO   )r   rE   )r   r   )rT   rO   rU   r   rV   Optional[mobase.IModInterface])rh   zmobase.InstallResultri   r   )r}   mobase.IFileTreer~   rO   r   zmobase.ModDataCheckerr   zOptional[mobase.IFileTree])r}   r   r   zSequence[str]r   zlist[mobase.FileTreeEntry])r}   r   r   r   )
r*   zmobase.GuessedStringr}   r   r8   rO   r   rE   r   z-Union[mobase.InstallResult, mobase.IFileTree])rZ   rO   r   rO   )__name__
__module____qualname__recompilerL   rP   __annotations__r   r%   r*   r.   r1   r3   r8   r<   rC   r@   rG   ra   rm   rq   rs   r|   r   r   r   r-   __classcell__)r    s   @r!   r   r      sX     RZZ =>N

;<I!! ,+'0P+E
&QSS S 4	SBV*V5SV BA$14?T	#8 %P " 
$	4#J^1"^1 ^1 	^1
 ^1 
7^1@@r"   r   ) 
__future__r   r   r   r   collectionsr   pathlibr   typingr   r   r   r	   r
   r   PyQt6r   PyQt6.QtWidgetsr   wizard.runnerr   r6   r   r   runnerr   utilsr   r   IPluginInstallerSimpler   r(   r"   r!   <module>r      sH    " 	 	 
 #  > >  ( +  ) $ 4x@f33 x@r"   