Ë
    Î£j÷?  ã                   óD  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZ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m Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,  e jZ                  «       Z. G d„ de«      Z/ddefd„Z0d„ Z1dd„Z2y)é    N)ÚPath)Úcast)ÚRateLimitExceededExceedsMaxWait)ÚQtÚ
pyqtSignal)ÚQCursor)ÚQApplicationÚQDialogÚQFileDialogÚ	QGroupBoxÚQHBoxLayoutÚQLabelÚ	QLineEditÚQMessageBoxÚQProgressDialogÚQPushButtonÚ
QTabWidgetÚQVBoxLayoutÚQWidget)ÚNameResolutionError)Ú
Sourcemods)Ú
check_modsÚdownload_mods)Úimport_userdataÚis_valid_userdata_folder)Úsettings)Ú InvalidSourcemodInstallationPathÚauto_detect_sourcemodÚvalidate_game_directory)ÚBUTTON_STYLE_ALTÚFONT_SIZE_HEADERc                   ór   ‡ — e Zd Z ee«      Zdˆ fd„	Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zˆ xZS )ÚFirstTimeSetupDialogc                 ó  •— t         ‰| �  |«       d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        | j                  d«       | j                  dd«       | j                  d«       | j                  «        y )NzFirst Time SetupiŠ  iD  T)ÚsuperÚ__init__Úimport_status_labelÚuserdata_import_editÚvalidation_labelÚbrowse_buttonÚtf_path_editÚfinish_buttonÚtf_directoryÚimport_userdata_pathÚsetWindowTitleÚsetFixedSizeÚsetModalÚsetup_ui)ÚselfÚparentÚ	__class__s     €úGC:\Users\pivot\Documents\cueki\casual-preloader\gui\first_time_setup.pyr&   zFirstTimeSetupDialog.__init__,   s„   ø€ Ü‰Ñ˜Ô Ø#'ˆÔ Ø$(ˆÔ!Ø $ˆÔØ!ˆÔØ ˆÔØ!ˆÔØ)-ˆÔØ15ˆÔ!à×ÑÐ.Ô/Ø×Ñ˜#˜sÔ#Ø�‰�dÔà�‰�ó    c                 óŽ  — t        | «      }t        d«      }|j                  dt        › d�«       |j	                  t
        j                  j                  «       |j                  |«       t        «       }| j                  «       }|j                  |d«       | j                  «       }|j                  |d«       |j                  |«       t        «       }|j                  «        t        d«      }|j                   j#                  | j$                  «       |j                  |«       t        d«      | _        | j&                  j)                  dd	«       | j&                  j                   j#                  | j*                  «       | j&                  j-                  d
«       |j                  | j&                  «       |j/                  |«       y )Nz!Welcome to the casual pre-loader!zfont-size: z"; font-weight: bold; margin: 10px;zTF2 DirectoryzImport Previous SettingsÚCancelzFinish SetupÚprimaryTF)r   r   ÚsetStyleSheetr!   ÚsetAlignmentr   ÚAlignmentFlagÚAlignCenterÚ	addWidgetr   Úcreate_tf_directory_tabÚaddTabÚcreate_import_tabr   Ú
addStretchr   ÚclickedÚconnectÚrejectr,   ÚsetPropertyÚfinish_setupÚ
setEnabledÚ	addLayout)r3   ÚlayoutÚwelcome_labelÚ
tab_widgetÚtf_tabÚ
import_tabÚbutton_layoutÚcancel_buttons           r6   r2   zFirstTimeSetupDialog.setup_ui=   sm  € Ü˜TÓ"ˆô ÐBÓCˆØ×#Ñ# kÔ2BÐ1CÐCeÐ$fÔgØ×"Ñ"¤2×#3Ñ#3×#?Ñ#?Ô@Ø×Ñ˜Ô'ô  “\ˆ
Ø×-Ñ-Ó/ˆØ×Ñ˜& /Ô2Ø×+Ñ+Ó-ˆ
Ø×Ñ˜*Ð&@ÔAà×Ñ˜Ô$ô $›ˆØ× Ñ Ô"ä# HÓ-ˆØ×Ñ×%Ñ% d§k¡kÔ2Ø×Ñ Ô.ä(¨Ó8ˆÔØ×Ñ×&Ñ& y°$Ô7Ø×Ñ×"Ñ"×*Ñ*¨4×+<Ñ+<Ô=Ø×Ñ×%Ñ% eÔ,Ø×Ñ × 2Ñ 2Ô3à×Ñ˜Õ'r7   c                 óì  — t        «       }t        |«      }t        d«      }|j                  d«       |j	                  d«       |j                  |«       t        d«      }t        «       }t        «       }t        «       | _	        | j                  j                  d«       | j                  j                  d«       | j                  j                  j                  | j                  «       t        d«      | _        | j                   j#                  t$        «       | j                   j&                  j                  | j(                  «       |j                  | j                  «       |j                  | j                   «       |j+                  |«       t        d«      }|j#                  t$        «       |j&                  j                  | j,                  «       |j                  |«       t        d«      | _        | j.                  j                  d«       |j                  | j.                  «       |j1                  |«       |j                  |«       |j                  t3        | «      «       |j5                  «        |S )	Nu½   Please select your Team Fortress 2 'tf' directory.
This is usually located in:
â€¢ Steam/steamapps/common/Team Fortress 2/tf/
â€¢ ~/.steam/steam/steamapps/common/Team Fortress 2/tf/ (Linux)Té
   ztf/ DirectoryzSelect your tf/ directory...ÚBrowsezAuto-Detect TF2 InstallationÚ )r   r   r   ÚsetWordWrapÚ	setMarginr?   r   r   r   r+   ÚsetReadOnlyÚsetPlaceholderTextÚtextChangedrE   Úvalidate_setupr   r*   r;   r    rD   Úbrowse_tf_dirrJ   Úauto_detect_tf2_dirr)   Ú	setLayoutÚmods_download_grouprC   )r3   ÚtabrK   ÚinstructionsÚtf_groupÚ	tf_layoutÚ
dir_layoutÚauto_detect_buttons           r6   r@   z,FirstTimeSetupDialog.create_tf_directory_tab_   sõ  € Ü‹iˆÜ˜SÓ!ˆäðNó
ˆð 	× Ñ  Ô&Ø×Ñ˜rÔ"Ø×Ñ˜Ô&ô ˜_Ó-ˆÜ“Mˆ	ô !“]ˆ
Ü%›KˆÔØ×Ñ×%Ñ% dÔ+Ø×Ñ×,Ñ,Ð-KÔLØ×Ñ×%Ñ%×-Ñ-¨d×.AÑ.AÔBä(¨Ó2ˆÔØ×Ñ×(Ñ(Ô)9Ô:Ø×Ñ×"Ñ"×*Ñ*¨4×+=Ñ+=Ô>à×Ñ˜T×.Ñ.Ô/Ø×Ñ˜T×/Ñ/Ô0Ø×Ñ˜JÔ'ô )Ð)GÓHÐØ×(Ñ(Ô)9Ô:Ø×"Ñ"×*Ñ*¨4×+CÑ+CÔDØ×ÑÐ.Ô/ô !' r£
ˆÔØ×Ñ×)Ñ)¨$Ô/Ø×Ñ˜D×1Ñ1Ô2à×Ñ˜9Ô%Ø×Ñ˜Ô"ð 	×ÑÔ,¨TÓ2Ô3à×ÑÔØˆ
r7   c                 óH  — t        «       }t        |«      }t        d«      }|j                  d«       |j	                  d«       |j                  |«       t        d«      }t        «       }t        «       }|j                  t        d«      «       t        «       | _	        | j                  j                  d«       | j                  j                  d«       t        d«      }|j                  t        «       |j                  j!                  | j"                  «       |j                  | j                  «       |j                  |«       |j%                  |«       t        d«      }|j                  t        «       |j                  j!                  | j&                  «       |j                  |«       |j)                  |«       |j                  |«       t        d	«      | _        | j*                  j                  d«       |j                  | j*                  «       |j-                  «        |S )
Na#  If you have previously used this preloader, you can import your data.
Select the previous installation's 'userdata' folder - your mods, settings, and addon
metadata will be copied into the new install.
This is optional - you can skip this step if this is your first time using the preloader.TrS   zImport Previous InstallationzPrevious userdata folder:z-Optional: Select previous userdata/ folder...rT   zClear Import SelectionsrU   )r   r   r   rV   rW   r?   r   r   r   r(   rX   rY   r   r;   r    rD   rE   Úbrowse_userdata_folderrJ   Úclear_import_selectionsr^   r'   rC   )	r3   r`   rK   ra   Úimport_groupÚimport_layoutÚuserdata_layoutÚuserdata_browse_buttonÚclear_imports_buttons	            r6   rB   z&FirstTimeSetupDialog.create_import_tab”   sÁ  € Ü‹iˆÜ˜SÓ!ˆäðhó
ˆð 	× Ñ  Ô&Ø×Ñ˜rÔ"Ø×Ñ˜Ô&ô !Ð!?Ó@ˆÜ#›ˆô &›-ˆØ×!Ñ!¤&Ð)DÓ"EÔFÜ$-£KˆÔ!Ø×!Ñ!×-Ñ-¨dÔ3Ø×!Ñ!×4Ñ4Ð5dÔeä!,¨XÓ!6ÐØ×,Ñ,Ô-=Ô>Ø×&Ñ&×.Ñ.¨t×/JÑ/JÔKà×!Ñ! $×";Ñ";Ô<Ø×!Ñ!Ð"8Ô9Ø×Ñ Ô0ô  +Ð+DÓEÐØ×*Ñ*Ô+;Ô<Ø×$Ñ$×,Ñ,¨T×-IÑ-IÔJØ×ÑÐ 4Ô5à×Ñ˜}Ô-Ø×Ñ˜Ô&ô $*¨"£:ˆÔ Ø× Ñ ×,Ñ,¨TÔ2Ø×Ñ˜×1Ñ1Ô2à×ÑÔØˆ
r7   c                 óÆ   — t        j                  | d«      }|rI| j                  �<t        |«      | _        | j                  j                  |«       | j                  «        y y y )NzSelect tf/ Directory)r   ÚgetExistingDirectoryr+   r   r-   ÚsetTextÚvalidate_directory©r3   Ú	directorys     r6   r\   z"FirstTimeSetupDialog.browse_tf_dirÆ   sV   € Ü×4Ñ4°TÐ;QÓRˆ	Ù˜×*Ñ*Ð6Ü $ Y£ˆDÔØ×Ñ×%Ñ% iÔ0Ø×#Ñ#Õ%ð 7ˆ9r7   c                 ó¬   — t        j                  | d«      }|r<t        |«      | _        | j                  j                  |«       | j                  «        y y )Nz Select Previous userdata/ Folder)r   ro   r   r.   r(   rp   Úupdate_import_statusrr   s     r6   rg   z+FirstTimeSetupDialog.browse_userdata_folderÍ   sI   € Ü×4Ñ4°TÐ;]Ó^ˆ	ÙÜ(,¨Y«ˆDÔ%Ø×%Ñ%×-Ñ-¨iÔ8Ø×%Ñ%Õ'ð r7   c                 óT  — 	 t        «       | _        | j                  j                  t	        | j                  «      «       t        | j                  | j                  «       t        j                  | dd| j                  › �«       y # t        $ r t        j                  | dd«       Y y w xY w)NzAuto-Detection SuccessfulzFound TF2 installation at:
zAuto-Detection Failedz[Could not automatically detect TF2 installation.
Please manually select your tf/ directory.)
r   r-   r+   rp   Ústrr   r)   r   Úinformationr   ©r3   s    r6   r]   z(FirstTimeSetupDialog.auto_detect_tf2_dirÕ   s–   € ð		RÜ 5Ó 7ˆDÔØ×Ñ×%Ñ%¤c¨$×*;Ñ*;Ó&<Ô=ä# D×$5Ñ$5°t×7LÑ7LÔMÜ×#Ñ# DÐ*EÐIeÐfj×fwÑfwÐexÐGyÕzøÜ/ò 	RÜ×#Ñ# DÐ*Að%QöRð	Rús   ‚BB Â B'Â&B'c                 óf   — d | _         | j                  j                  «        | j                  «        y ©N)r.   r(   Úclearru   ry   s    r6   rh   z,FirstTimeSetupDialog.clear_import_selectionsâ   s(   € Ø$(ˆÔ!Ø×!Ñ!×'Ñ'Ô)Ø×!Ñ!Õ#r7   c                 óf   — t        | j                  | j                  «      }| j                  «        |S r{   )r   r-   r)   r[   )r3   Úresults     r6   rq   z'FirstTimeSetupDialog.validate_directoryç   s+   € Ü(¨×):Ñ):¸D×<QÑ<QÓRˆØ×ÑÔØˆr7   c                 óî  — g }| j                   �r)t        | j                   «      }|j                  «       s|j                  d«       nòt	        |«      s|j                  d«       nÕg }|dz  dz  j                  «       r|j                  d«       |dz  dz  j                  «       r|j                  d«       |dz  dz  j                  «       r|j                  d«       |dz  d	z  j                  «       r|j                  d	«       |r$|j                  d
dj                  |«      z   «       n|j                  d«       |s|j                  d«       | j                  j                  dj                  |«      «       y )NzSelected folder does not existzJSelected folder is not a valid userdata/ folder (missing data/ or config/)ÚdataÚmodszmods/zmodsinfo.jsonÚconfigzapp_settings.jsonzaddon_metadata.jsonzWill import: z, z5No importable files found in selected userdata folderz,No import folder selected (this is optional)Ú
)
r.   r   ÚexistsÚappendr   Úis_dirÚis_fileÚjoinr'   rp   )r3   Ústatus_partsÚuserdata_pathÚfounds       r6   ru   z)FirstTimeSetupDialog.update_import_statusì   sD  € Øˆà×$Ó$Ü  ×!:Ñ!:Ó;ˆMØ ×'Ñ'Ô)Ø×#Ñ#Ð$DÕEÜ-¨mÔ<Ø×#Ñ#Ø`õð �Ø! FÑ*¨VÑ3×;Ñ;Ô=Ø—L‘L Ô)Ø! FÑ*¨_Ñ<×EÑEÔGØ—L‘L Ô1Ø! HÑ,Ð/BÑB×KÑKÔMØ—L‘LÐ!4Ô5Ø! HÑ,Ð/DÑD×MÑMÔOØ—L‘LÐ!6Ô7áØ ×'Ñ'¨¸$¿)¹)ÀEÓ:JÑ(JÕKà ×'Ñ'Ð(_Ô`áØ×ÑÐ NÔOà× Ñ ×(Ñ(¨¯©°<Ó)@ÕAr7   c                 óœ   — t        | j                  xr | j                  j                  «       «      }| j                  j	                  |«       y r{   )Úboolr-   r†   r,   rI   )r3   Útf_valids     r6   r[   z#FirstTimeSetupDialog.validate_setup  s:   € Ü˜×)Ñ)ÒH¨d×.?Ñ.?×.FÑ.FÓ.HÓIˆØ×Ñ×%Ñ% hÕ/r7   c                 ó\  — | j                   st        j                  | dd«       y t        | j                   «      st        j                  | dd«       y | j                  r_t        | j                  «      \  }}|s-t        j                  | dddj                  |«      z   dz   «       n|rt        j                  d	|«       	 | j                  rt        j                  «        nIt        j                  t        j                  j                  | j                   t        j                  d
¬«       d
t        _        t        j                  «        | j"                  j%                  | j                   «       | j'                  «        y # t         $ r%}t        j                  | dd|› d�«       Y d }~Œ_d }~ww xY w)NzSetup IncompletezPlease select a TF2 directory.zInvalid Directoryz(The selected TF2 directory is not valid.zImport ErrorzFailed to import userdata:
rƒ   z(

Setup will continue without importing.z+Userdata import completed with warnings: %sT)ÚnameÚ	game_pathÚ	sourcemodÚactivatezSettings ErrorzFailed to save settings:
z/

Setup completed but settings may not persist.)r-   r   Úwarningr   r.   r   rˆ   Úlogr   Ú_load_settingsÚcreate_profiler   ÚDEFAULTr�   Údone_initial_setupÚsave_settingsÚ	ExceptionÚsetup_completedÚemitÚaccept)r3   ÚsuccessÚwarningsÚes       r6   rH   z!FirstTimeSetupDialog.finish_setup  sn  € Ø× Ò Ü×Ñ Ð&8Ð:ZÔ[Øô ' t×'8Ñ'8Ô9Ü×Ñ Ð&9Ð;eÔfØð ×$Ò$Ü /°×0IÑ0IÓ JÑˆG�XÙÜ×#Ñ#Ø˜.Ø2°T·Y±Y¸xÓ5HÑHØBñCõñ
 Ü—‘ÐIÈ8ÔTð	à×(Ò(Ü×'Ñ'Õ)ä×'Ñ'¬Z×-?Ñ-?×-DÑ-DÐPT×PaÑPaÔmw×mÑmð  KOõ  Pà*.ŒHÔ'Ü×"Ñ"Ô$ð 	×Ñ×!Ñ! $×"3Ñ"3Ô4Ø�‰�øô ò 	Ü×ÑØÐ&Ø,¨Q¨CÐ/`Ða÷ñ ûð	ús   Â>B	E= Å=	F+ÆF&Æ&F+r{   )Ú__name__Ú
__module__Ú__qualname__r   r   rœ   r&   r2   r@   rB   r\   rg   r]   rh   rq   ru   r[   rH   Ú__classcell__)r5   s   @r6   r#   r#   )   sO   ø„ Ù  Ó&€Oõò" (òD3òj0òd&ò(ò
Rò$ò
ò
Bò@0ö'r7   r#   Úreturnc                 óâ   — t        | «      }|j                  «       t        j                  j                  k(  rt        t        |j                  «      S t        j                  d«       t        d«      ‚)NzUser cancelled setupé   )r#   Úexecr
   Ú
DialogCodeÚAcceptedr   r   r-   r•   ÚdebugÚ
SystemExit)r4   Údialogs     r6   Úrun_first_time_setupr¯   :  sP   € Ü! &Ó)€Fà‡{�{ƒ}œ×*Ñ*×3Ñ3Ò3Ü”D˜&×-Ñ-Ó.Ð.ä‡I�IÐ$Ô%Ü
�Q‹-Ðr7   c                 ó¢  ‡ ‡— t        d«      }t        «       }t        d«      }|j                  d«       |j	                  t
        j                  j                  «       |j                  |«       t        d«      Š‰j                  t        «       ‰j                  j                  ˆˆ fd„«       |j                  ‰«       |j                  |«       |S )NzRecommended Mods (Optional)z{This collection contains TF2 particles + addons that have been personally fixed by me to work with this preloader (~77 MB).TzDownload cueki's Modsc                  ó   •— t        ‰‰ «      S r{   )Údownload_cueki_mods)Údownload_mods_buttonÚparent_dialogs   €€r6   Ú<lambda>z%mods_download_group.<locals>.<lambda>R  s   ø€ Ô1DÀ]ÐThÔ1ir7   )r   r   r   rV   r<   r   r=   r>   r?   r   r;   r    rD   rE   r^   )r´   Ú
mods_groupÚmods_layoutÚmods_descriptionr³   s   `   @r6   r_   r_   D  s±   ù€ ÜÐ8Ó9€JÜ“-€Käð	6óÐð × Ñ  Ô&Ø×!Ñ!¤"×"2Ñ"2×">Ñ">Ô?Ø×ÑÐ*Ô+ä&Ð'>Ó?ÐØ×&Ñ&Ô'7Ô8Ø× Ñ ×(Ñ(Ô)iÔjØ×ÑÐ.Ô/à×Ñ˜Ô%ØÐr7   c                 ó
  — d}d}|rx|j                  «       }|j                  d«       |j                  d«       |j                  t	        t
        j                  j                  «      «       t        j                  «        d }	 	 t        |«      }|�Út%        dd	d
d| «      }|j'                  d«       |j)                  t
        j*                  j,                  «       |j/                  d
«       |j1                  d
«       t        j                  «        |j3                  «        t5        ||j0                  |j6                  t        j                  |j8                  «       |j;                  «        t=        | t>        «      setA        | d«      r| jC                  «        nH| jE                  «       r8tA        | jE                  «       d«      r| jE                  «       jC                  «        |�t        jF                  | dd«       nÜt        | «      }|jI                  t        jJ                  jL                  «       |j'                  d«       |j                  d«       |jO                  t        jP                  jR                  «      }	|jO                  dt        jT                  jV                  «      }
|jY                  |	«       |j[                  «        |j]                  «       |
u }|rU|j                  d«       |j                  |«       |j                  t	        t
        j                  j                   «      «       	 |rtg        | |d¬«      S y # t        $ rˆ d}t        j                  |«       t        j                  | d|«       Y |rU|j                  d«       |j                  |«       |j                  t	        t
        j                  j                   «      «       yyt"        $ rˆ d}t        j                  |«       t        j                  | d|«       Y |rU|j                  d«       |j                  |«       |j                  t	        t
        j                  j                   «      «       yyw xY w# t^        $ r½}t        ja                  d«       |r|j;                  «        dtc        |«      je                  «       vrt        j                  | dd|› �«       Y d }~|rU|j                  d«       |j                  |«       |j                  t	        t
        j                  j                   «      «       yyd }~ww xY w# |rU|j                  d«       |j                  |«       |j                  t	        t
        j                  j                   «      «       w w xY w)NFrU   zDownloading...zYGithub ratelimit exceeded, not checking for new mod releases (wait a while and try again)zDownload FailedTzhCould not connect to github, not checking for new mod releases (ensure you're connected to the internet)z$Downloading cueki's mods (~77 MB)...r9   r   éd   zDownloading ModsÚrefresh_allzDownload Completez=cueki's mods have been successfully downloaded and installed!z2cueki's mods are already installed and up to date!zDownload Again AnywayÚ	cancelledzFailed to download mods: )Úforce)4ÚtextrI   rp   Ú	setCursorr   r   ÚCursorShapeÚ
WaitCursorr	   ÚprocessEventsr   r   r•   Úerrorr   ÚcriticalÚArrowCursorr   r   r/   ÚsetWindowModalityÚWindowModalityÚWindowModalÚsetMinimumDurationÚsetValueÚshowr   ÚsetLabelTextÚwasCanceledÚcloseÚ
isinstancer#   Úhasattrr»   r4   rx   ÚsetIconÚIconÚInformationÚ	addButtonÚStandardButtonÚOkÚ
ButtonRoleÚ
ActionRoleÚsetDefaultButtonr©   ÚclickedButtonr›   Ú	exceptionrw   Úlowerr²   )r4   Úbuttonr½   Úretry_forcedÚoriginal_textÚprogressÚupdateÚmsgÚmsg_boxÚok_btnÚ	again_btnr¡   s               r6   r²   r²   Y  sV  € à€Là€MÙØŸ™›ˆØ×Ñ˜%Ô Ø�‰Ð'Ô(Ø×Ñœ¤§¡×!:Ñ!:Ó;Ô<Ü×"Ñ"Ô$à€HðGBð	Ü Ó&ˆFð Ðä&Ð'MÈxÐYZÐ\_ÐagÓhˆHØ×#Ñ#Ð$6Ô7Ø×&Ñ&¤r×'8Ñ'8×'DÑ'DÔEØ×'Ñ'¨Ô*Ø×Ñ˜aÔ Ü×&Ñ&Ô(à�M‰MŒOÜ˜& (×"3Ñ"3°X×5JÑ5JÌL×LfÑLfÐhp×h|Ñh|Ô}Ø�N‰NÔô ˜&Ô"6Ô7Ü�v˜}Ô-Ø×"Ñ"Õ$Ø—‘”¤W¨V¯]©]«_¸mÔ%LØ—‘“×+Ñ+Ô-àÐÜ×#Ñ#ØØ#ØOõô " &Ó)ˆGØ�O‰OœK×,Ñ,×8Ñ8Ô9Ø×"Ñ"Ð#6Ô7Ø�O‰OÐPÔQØ×&Ñ&¤{×'AÑ'A×'DÑ'DÓEˆFØ×)Ñ)Ð*AÄ;×CYÑCY×CdÑCdÓeˆIØ×$Ñ$ VÔ,Ø�L‰LŒNØ"×0Ñ0Ó2°iÐ?ˆLñ  Ø×Ñ˜dÔ#Ø�N‰N˜=Ô)Ø×ÑœW¤R§^¡^×%?Ñ%?Ó@ÕAáä" 6¨6¸Ô>Ð>ð øôM /ò 	ØmˆCÜ�I‰I�cŒNÜ× Ñ  Ð):¸CÔ@àñx Ø×Ñ˜dÔ#Ø�N‰N˜=Ô)Ø×ÑœW¤R§^¡^×%?Ñ%?Ó@ÕAð ôw #ò 	Ø}ˆCÜ�I‰I�cŒNÜ× Ñ  Ð):¸CÔ@àñl Ø×Ñ˜dÔ#Ø�N‰N˜=Ô)Ø×ÑœW¤R§^¡^×%?Ñ%?Ó@ÕAð ðw	ûôX ò Ü�‰Ð'Ô(áØ�N‰NÔàœc !›fŸl™l›nÑ,Ü× Ñ ØØ!Ø+¨A¨3Ð/ôó áØ×Ñ˜dÔ#Ø�N‰N˜=Ô)Ø×ÑœW¤R§^¡^×%?Ñ%?Ó@ÕAð ûðûñ Ø×Ñ˜dÔ#Ø�N‰N˜=Ô)Ø×ÑœW¤R§^¡^×%?Ñ%?Ó@ÕAð úsW   ÂL= ÂIQ  Ì=7QÍ4Q  Ï6QÐQ  ÑQÑQ  Ñ 	T&Ñ)AT!ÓT) Ô!T&Ô&T) Ô)AVr{   )NNF)3ÚloggingÚpathlibr   Útypingr   Úgithub.GithubExceptionr   ÚPyQt6.QtCorer   r   ÚPyQt6.QtGuir   ÚPyQt6.QtWidgetsr	   r
   r   r   r   r   r   r   r   r   r   r   r   Úurllib3.exceptionsr   Úcore.constantsr   Úcore.download_modsr   r   Úcore.services.setupr   r   Úcore.settingsr   Úcore.util.sourcemodr   r   r   Ú	gui.themer    r!   Ú	getLoggerr•   r#   r¯   r_   r²   © r7   r6   Ú<module>rö      s�   ðÛ Ý Ý å Bß 'Ý ÷÷ ÷ õ õ" 3å %ß 8ß IÝ "÷ñ ÷
 9à€g×ÑÓ€ôN˜7ô Nñb¨ó òô*X?r7   