Ë
    Î£j�*  ã                   óö   — d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZ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  e j<                  «       Z G d„ de«      Z  G d„ de	«      Z!y)é    N)ÚPath)ÚQObjectÚQtÚ
pyqtSignal)ÚQFrameÚQMessageBoxÚQProgressDialogÚQVBoxLayout)ÚImportServiceÚnormalize_vpk_paths)Údelete_particle_modsÚprune_selections)ÚStructureValidatorÚValidationResult)Úapply_particle_selectionsÚget_mod_particles)ÚConflictMatrix)Úconfirm_actionÚshow_messagec                   óL   — e Zd Z e«       Z eee«      Z ee«      Z ee«      Z	y)ÚVPKProcessWorkerN)
Ú__name__Ú
__module__Ú__qualname__r   ÚfinishedÚintÚstrÚprogressÚerrorÚsuccess© ó    úDC:\Users\pivot\Documents\cueki\casual-preloader\gui\mod_drop_zone.pyr   r      s'   „ Ù‹|€HÙ˜#˜sÓ#€HÙ�s‹O€EÙ˜‹o�Gr"   r   c                   ó    ‡ — e Zd Z ee«      Z e«       Zdˆ fd„	Zd„ Zd„ Z	d„ Z
dededef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 )ÚModDropZonec                 ó~  •— t         ‰| �  |«       d | _        || _        | j	                  d«       | j                  «        d| _        d | _        t        «       | _	        | j                  j                  j                  | j                  «       | j                  j                  j                  | j                  «       | j                  j                  j                  | j                   «       | j                  j"                  j                  | j$                  «       || _        t)        «       | _        t-        «       | _        y )NTF)ÚsuperÚ__init__Úconflict_matrixÚsettingsÚsetAcceptDropsÚsetup_uiÚ
processingÚprogress_dialogr   Úworkerr   ÚconnectÚon_process_finishedr   Úupdate_progressr   Ú
show_errorr    Úshow_successÚrescan_callbackr   Ú	validatorr   Úservice)ÚselfÚparentr*   r5   Ú	__class__s       €r#   r(   zModDropZone.__init__   sà   ø€ Ü‰Ñ˜Ô Ø#ˆÔØ ˆŒØ×Ñ˜DÔ!Ø�‰ŒØˆŒØ#ˆÔÜ&Ó(ˆŒØ�‰×Ñ×$Ñ$ T×%=Ñ%=Ô>Ø�‰×Ñ×$Ñ$ T×%9Ñ%9Ô:Ø�‰×Ñ×!Ñ! $§/¡/Ô2Ø�‰×Ñ×#Ñ# D×$5Ñ$5Ô6Ø.ˆÔÜ+Ó-ˆŒÜ$“ˆ�r"   c                 ó
  — t        | «      }|j                  dddd«       t        | j                  «      | _        | j                  j
                  j                  | j                  «       |j                  | j                  «       y )Nr   )	r
   ÚsetContentsMarginsr   r*   r)   Úmod_delete_requestedr0   Údelete_particle_modÚ	addWidget)r8   Úlayouts     r#   r,   zModDropZone.setup_ui.   sg   € Ü˜TÓ"ˆØ×!Ñ! ! Q¨¨1Ô-ô  .¨d¯m©mÓ<ˆÔØ×Ñ×1Ñ1×9Ñ9¸$×:RÑ:RÔSØ×Ñ˜×-Ñ-Õ.r"   c                 óÈ  — t        | dd|› d�«      sy t        |g«      \  }}|s)t        j                  |d¬«       | j	                  |«       y | j
                  r`t        | j
                  j                  |g«      | j
                  _        t        | j
                  j                  |g«      | j
                  _        | j                  «        | j                  j                  «        y )NzConfirm Deletionu=   The following particle mod will be permanently deleted:

â€¢ z

Are you sure?T)Ú
stack_info)r   r   Úlogr   r3   r*   r   Úmatrix_selectionsÚmatrix_selections_simpleÚupdate_matrixÚaddon_updatedÚemit)r8   Úmod_namer    Úmessages       r#   r>   zModDropZone.delete_particle_mod7   sÅ   € ÜØØØMÈhÈZÐWhÐiô
ð
 ä/°°
Ó;Ñˆ�ÙÜ�I‰I�g¨$ˆIÔ/Ø�O‰O˜GÔ$Øð �=Š=Ü.>Ø—‘×/Ñ/°(°ó/ˆD�M‰MÔ+ô 6FØ—‘×6Ñ6¸¸
ó6ˆD�M‰MÔ2ð 	×ÑÔØ×Ñ×ÑÕ!r"   c                 óL   — | j                   j                  «       }t        |«      S ©N)r)   Úget_selected_particlesr   )r8   Ú
selectionss     r#   r   z%ModDropZone.apply_particle_selectionsQ   s!   € Ø×)Ñ)×@Ñ@ÓBˆ
Ü(¨Ó4Ð4r"   Úvalidation_resultÚ	item_nameÚreturnc                 óÈ  — |j                   s�d|› d�}|dj                  d„ |j                  D «       «      z  }|j                  r*|dz  }|dj                  d„ |j                  D «       «      z  }| j	                  t
        j                  j                  d|«       y|j                  r=d	|› d�}|dj                  d
„ |j                  D «       «      z  }|dz  }t        | d|«      S y)NzCannot process 'z':

Ú
c              3   ó&   K  — | ]	  }d |› �–— Œ y­w©u   â€¢ Nr!   )Ú.0r   s     r#   Ú	<genexpr>z9ModDropZone.validate_and_show_warnings.<locals>.<genexpr>Y   s   è ø€ Ð"XÑ?W°e T¨%¨¤>Ñ?Wùó   ‚z

Warnings:
c              3   ó&   K  — | ]	  }d |› �–— Œ y­wrU   r!   ©rV   Úwarnings     r#   rW   z9ModDropZone.validate_and_show_warnings.<locals>.<genexpr>]   s   è ø€ Ð&bÑGa¸G¨¨g¨YÔ'7ÑGaùrX   zInvalid StructureFzWarnings found for 'c              3   ó&   K  — | ]	  }d |› �–— Œ y­wrU   r!   rZ   s     r#   rW   z9ModDropZone.validate_and_show_warnings.<locals>.<genexpr>e   s   è ø€ Ð$`ÑE_¸' t¨G¨9Ô%5ÑE_ùrX   z!

Do you want to continue anyway?zValidation WarningsT)	Úis_validÚjoinÚerrorsÚwarningsÚ_show_messager   ÚIconÚCriticalr   )r8   rO   rP   Ú	error_msgÚwarning_msgs        r#   Úvalidate_and_show_warningsz&ModDropZone.validate_and_show_warningsU   sæ   € à ×)Ò)Ø*¨9¨+°VÐ<ˆIØ˜Ÿ™Ñ"XÐ?P×?WÒ?WÓ"XÓXÑXˆIà ×)Ò)ØÐ.Ñ.�	Ø˜TŸY™YÑ&bÐGX×GaÒGaÓ&bÓbÑb�	à×Ñœ{×/Ñ/×8Ñ8Ð:MÈyÔYØð ×%Ò%Ø0°°¸6ÐBˆKØ˜4Ÿ9™9Ñ$`ÐEV×E_ÒE_Ó$`Ó`Ñ`ˆKØÐ@Ñ@ˆKä! $Ð(=¸{ÓKÐKàr"   c                 óÂ   — t        «       \  }}|s| j                  j                  «        y t        |j	                  «       «      }| j                  j                  ||«       y rL   )r   r)   Úclear_matrixÚlistÚkeysrF   )r8   Úmod_particlesÚall_particlesÚmodss       r#   rF   zModDropZone.update_matrixl   sP   € ä'8Ó':Ñ$ˆ�}áà× Ñ ×-Ñ-Ô/Øä�M×&Ñ&Ó(Ó)ˆØ×Ñ×*Ñ*¨4°Õ?r"   c                 óŠ   — | j                   r7| j                   j                  |«       | j                   j                  |«       y y rL   )r.   ÚsetValueÚsetLabelText)r8   ÚvaluerJ   s      r#   r2   zModDropZone.update_progressx   s8   € Ø×ÒØ× Ñ ×)Ñ)¨%Ô0Ø× Ñ ×-Ñ-¨gÕ6ð  r"   c                 óZ   — | j                  t        j                  j                  d|«       y )NÚError)ra   r   rb   rc   ©r8   rJ   s     r#   r3   zModDropZone.show_error}   s    € Ø×Ñœ;×+Ñ+×4Ñ4°g¸wÕGr"   c                 óZ   — | j                  t        j                  j                  d|«       y )NÚSuccess)ra   r   rb   ÚInformationrt   s     r#   r4   zModDropZone.show_success€   s    € Ø×Ñœ;×+Ñ+×7Ñ7¸ÀGÕLr"   c                 ó    — t        | |||«       y rL   )r   )r8   ÚiconÚtitlerJ   s       r#   ra   zModDropZone._show_messageƒ   s   € Ü�T˜4 ¨Õ0r"   c                 óž   — | j                   r| j                   j                  «        | j                  «        | j                  «        d| _        y )NF)r.   ÚcloserF   r5   r-   )r8   s    r#   r1   zModDropZone.on_process_finished†   s<   € Ø×ÒØ× Ñ ×&Ñ&Ô(Ø×ÑÔØ×ÑÔØˆ�r"   c                 ó\  — | j                   j                  || j                  j                  j                  ¬«      \  }}|D ]*  \  }}| j                  j
                  j	                  |«       Œ, |r™| j                  j	                  «        t        |«      dk(  r,| j                  j                  j	                  d|d   › �«       nEdj                  |«      }| j                  j                  j	                  dt        |«      › d|› �«       | j                  j                  j	                  «        y )N)Úprogress_callbacké   zSuccessfully processed r   z,
z items:
)r7   Úprocess_dropped_itemsr/   r   rH   r   rG   Úlenr    r^   r   )r8   Údropped_pathsÚsuccessful_itemsÚfailed_itemsrP   rd   Ú
items_texts          r#   r€   z!ModDropZone.process_dropped_items�   s  € à)-¯©×)KÑ)KØØ"Ÿk™k×2Ñ2×7Ñ7ð *Ló *
Ñ&Ð˜,ó %1Ñ ˆI�yØ�K‰K×Ñ×"Ñ" 9Õ-ð %1ñ Ø×Ñ×#Ñ#Ô%ÜÐ#Ó$¨Ò)Ø—‘×#Ñ#×(Ñ(Ð+BÐCSÐTUÑCVÐBWÐ)XÕYà"ŸZ™ZÐ(8Ó9�
Ø—‘×#Ñ#×(Ñ(Ð+BÄ3ÐGWÓCXÐBYÐYbÐcmÐbnÐ)oÔpà�‰×Ñ×!Ñ!Õ#r"   c                 óà  — |j                  «       j                  «       rÐ|j                  «       j                  «       D ]®  }|j                  «       }t	        |«      }|j                  «       j                  d«      s0|j                  «       s |j                  «       j                  d«      sŒm|j                  «        | j                  dd«       | j                  «       j                  | «        y  y y )Nú.vpkú.zipÚdragOverT)ÚmimeDataÚhasUrlsÚurlsÚtoLocalFiler   ÚlowerÚendswithÚis_dirÚacceptÚsetPropertyÚstyleÚpolish)r8   ÚeventÚurlÚ	file_pathÚpath_objs        r#   ÚdragEnterEventzModDropZone.dragEnterEvent£   s¯   € Ø�>‰>Ó×#Ñ#Ô%Ø—~‘~Ó'×,Ñ,Ö.�ØŸO™OÓ-�	Ü 	›?�ð —O‘OÓ%×.Ñ.¨vÔ6Ø—O‘OÔ%Ø—O‘OÓ%×.Ñ.¨vÕ6Ø—L‘L”NØ×$Ñ$ Z°Ô6Ø—J‘J“L×'Ñ'¨Ô-Ùñ /ð &r"   c                 óf   — | j                  dd«       | j                  «       j                  | «       y )Nr‰   F)r’   r“   r”   )r8   r•   s     r#   ÚdragLeaveEventzModDropZone.dragLeaveEvent²   s&   € Ø×Ñ˜ UÔ+Ø�
‰
‹×Ñ˜DÕ!r"   c                 ó\  — | j                   r,| j                  t        j                  j                  dd«       y | j                  dd«       | j                  «       j                  | «       g }g }|j                  «       j                  «       D �]ÿ  }|j                  «       }t        |«      }|j                  «       rJ| j                  j                  |«      }| j                  ||j                   «      sŒg|j#                  |«       Œy|j%                  «       j'                  d«      r¤|j                   j)                  d«      dkD  r:| j                  t        j                  j                  dd	|j                   › d
�«       Œð| j                  j+                  |«      }| j                  ||j,                  «      s�Œ)|j#                  |«       �Œ<|j%                  «       j'                  d«      rl|j                   j)                  d«      dkD  r;| j                  t        j                  j                  dd	|j                   › d
�«       �Œ´|j#                  |«       �ŒÇ| j                  t        j                  j                  dd|j                   › d�«       �Œ |j/                  t1        |«      «       |sy t3        d„ |D «       «      }t3        d„ |D «       «      }	t3        d„ |D «       «      }
|r	|	r|
rd}d}n|r	|	s|
rd}d}n|rd}d}n|	rd}d}nd}d}d| _         t5        |ddd| «      | _        | j6                  j9                  |«       | j6                  j;                  t<        j>                  j@                  «       | j6                  jC                  d«       | j6                  jE                  d«       | j6                  jG                  d «       | j6                  jI                  d d!«       | j6                  jK                  «        tM        jN                  | jP                  |fd¬"«      }|jS                  «        y )#NzProcessing in Progressz2Please wait for the current operation to complete.r‰   Frˆ   Ú.r   zInvalid FilenamezFile 'zC' contains multiple periods.

Please rename the file and try again.r‡   zUnsupported File TypezFile type not supported: z0

Supported types: VPK files, folders, ZIP filesc              3   óV   K  — | ]!  }|j                   j                  «       d k(  –— Œ# y­w)r‡   N©ÚsuffixrŽ   ©rV   Úitems     r#   rW   z(ModDropZone.dropEvent.<locals>.<genexpr>î   ó#   è ø€ ÐNÁ¸�d—k‘k×'Ñ'Ó)¨VÕ3Áùó   ‚')c              3   óV   K  — | ]!  }|j                   j                  «       d k(  –— Œ# y­w)rˆ   NrŸ   r¡   s     r#   rW   z(ModDropZone.dropEvent.<locals>.<genexpr>ï   r£   r¤   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wrL   )r�   r¡   s     r#   rW   z(ModDropZone.dropEvent.<locals>.<genexpr>ð   s   è ø€ ÐA±=¨4˜Ÿ™Ÿ±=ùs   ‚zProcessing Mixed ItemszProcessing files...zProcessing ItemszProcessing items...zProcessing VPKszProcessing VPK files...zProcessing ZIP FileszProcessing ZIP files...zProcessing FolderszProcessing folders...TÚCancelr   éd   i  éK   )ÚtargetÚargsÚdaemon)*r-   ra   r   rb   ÚWarningr’   r“   r”   rŠ   rŒ   r�   r   r�   r6   Úvalidate_folderrf   ÚnameÚappendrŽ   r�   ÚcountÚvalidate_zipÚstemÚextendr   Úanyr	   r.   ÚsetWindowTitleÚsetWindowModalityr   ÚWindowModalityÚWindowModalÚsetAutoCloseÚsetMinimumDurationÚsetCancelButtonÚsetFixedSizeÚshowÚ	threadingÚThreadr€   Ústart)r8   r•   Údropped_itemsÚ	vpk_pathsr–   Ú	item_pathr˜   rO   Úhas_vpkÚhas_zipÚ
has_folderÚdialog_titleÚdialog_textÚprocess_threads                 r#   Ú	dropEventzModDropZone.dropEvent¶   s¥  € Ø�?Š?Ø×Ñœ{×/Ñ/×7Ñ7Ð9QØSôUàà×Ñ˜ UÔ+Ø�
‰
‹×Ñ˜DÔ!ð ˆØˆ	à—>‘>Ó#×(Ñ(×*ˆCØŸ™Ó)ˆIÜ˜I“ˆHð �‰Ô à$(§N¡N×$BÑ$BÀ8Ó$LÐ!Ø×6Ñ6Ð7HÈ(Ï-É-ÔXØØ×$Ñ$ XÕ.Ø—‘Ó"×+Ñ+¨FÔ3à—=‘=×&Ñ& sÓ+¨aÒ/Ø×&Ñ&¤{×'7Ñ'7×'?Ñ'?ÐASØ)/°·±¨ð ?Oð (PôQð à$(§N¡N×$?Ñ$?ÀÓ$IÐ!Ø×6Ñ6Ð7HÈ(Ï-É-ÔXÙØ×$Ñ$ XÖ.Ø—‘Ó"×+Ñ+¨FÔ3à—=‘=×&Ñ& sÓ+¨aÒ/Ø×&Ñ&¤{×'7Ñ'7×'?Ñ'?ÐASØ)/°·±¨ð ?Oð (PôQñ Ø× Ñ  Ö*à×"Ñ"¤;×#3Ñ#3×#;Ñ#;Ð=TØ%>¸x¿}¹}¸oð NTð $UôVñ ðG +ðL 	×ÑÔ0°Ó;Ô<áØäÑNÁÓNÓNˆÜÑNÁÓNÓNˆÜÑA±=ÓAÓAˆ
á‘w¡:Ø3ˆLØ/‰KÙ™'¡ZØ-ˆLØ/‰KÙØ,ˆLØ3‰KÙØ1ˆLØ3‰Kà/ˆLØ1ˆKð ˆŒÜ.¨{¸HÀaÈÈdÓSˆÔØ×Ñ×+Ñ+¨LÔ9Ø×Ñ×.Ñ.¬r×/@Ñ/@×/LÑ/LÔMØ×Ñ×)Ñ)¨%Ô0Ø×Ñ×/Ñ/°Ô2Ø×Ñ×,Ñ,¨TÔ2Ø×Ñ×)Ñ)¨#¨rÔ2Ø×Ñ×!Ñ!Ô#ä"×)Ñ)Ø×-Ñ-ØÐ!Øô
ˆð
 	×ÑÕr"   )NNN)r   r   r   r   r   Úmod_droppedrG   r(   r,   r>   r   r   Úboolrf   rF   r2   r3   r4   ra   r1   r€   r™   r›   rË   Ú__classcell__)r:   s   @r#   r%   r%      sz   ø„ Ù˜S“/€KÙ“L€Mõ'ò"/ò"ò45ðÐ<Lð ÐY\ð Ðaeó ò.
@ò7ò
HòMò1ò ò$ò,ò"ö\r"   r%   )"Úloggingr¿   Úpathlibr   ÚPyQt6.QtCorer   r   r   ÚPyQt6.QtWidgetsr   r   r	   r
   Úcore.services.importerr   r   Úcore.services.particlesr   r   Úcore.structure_validatorr   r   Úcore.util.pcf_path_walkr   r   Úgui.conflict_matrixr   Úgui.dialogsr   r   Ú	getLoggerrC   r   r%   r!   r"   r#   Ú<module>rÚ      sV   ðÛ Û Ý ç 0Ñ 0ß MÓ Mç Eß Jß Iß PÝ .ß 4à€g×ÑÓ€ô�wô ôy�&õ yr"   