+
    Ki)  c                   s    ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHtH	t	 ^ RI
Ht ^ RIHt ^ RIHtHtHt ^ RIHt ^ R	IHt ^ R
IHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RI H!t! ^ RI"H#t#H$t$ ^ RI%H&t&H't'  ! R R]4      t(R# )i    )OrderedDict)deepcopy)gettext)GioGLibGtk)write_game_config)add_game)GAME_INSTALLEDGAME_UPDATEDGame)ModelessDialog)DEFAULT_INSTALLERS)clean_rom_nameguess_platformsearch_tosec_by_md5)download_lutris_media)	AsyncCall)logger)get_path_cache)gtk_safeslugify)get_md5_hashget_md5_in_zipc                   s   a a ] tR t^t oRV3R lV 3R llltV3R lV 3R lltR t]R 4       tR t	R t
R	 tR
 tR tR tR tR tRtVtV ;t# )ImportGameDialogc                s   < V ^8  d   QhRR/# )   returnN Zformat__classdict__   "C/usr/lib/python3.14/site-packages/lutris/gui/dialogs/game_import.py__annotate__ImportGameDialog.__annotate__   s     Y Yd Y    c                sP  < \         SV `  \        R 4      V^
R7       Wn        / V n        / V n        / V n        / V n        / V n        / V n	        RV n
        RV n        V P                  RR4       \        P                  ! 4       V n        V P!                  V P                  4       \        P"                  ! V P%                  V4      R7      pVP'                  \        P(                  P*                  \        P(                  P,                  4       \        P.                  ! \        P0                  P2                  VR7      pV P5                  4       P7                  VRR^4       V P9                  \        P:                  \        P<                  P>                  4      V n         \        PB                  ! R4      w  rVV P@                  PE                  R	V P                  WV\        PF                  PH                  4       V PK                  4        \M        V PN                  V PP                  4      V n        R# )
zImport a game)parentZborder_widthNi  i0  )child)Zshadow_typer$   TZEscapeclicked))super__init___filesprogress_labelschecksum_labelsdescription_labelscategory_labelserror_labelslaunch_buttonsplatformsearch_callZset_size_requestr   Z
AccelGroupacceleratorsZadd_accel_groupZScrolledWindowget_file_labels_listboxZ
set_policyZ
PolicyTypeZNEVERZ	AUTOMATICZFrameZ
ShadowTypeZ	ETCHED_INZget_content_area
pack_startZ
add_buttonZ
STOCK_STOPResponseTypeCANCELclose_buttonZaccelerator_parseZadd_acceleratorZ
AccelFlagsZVISIBLEZshow_allr   search_checksumssearch_result_finished)selfr)   r#   ZscrolledwindowZframekeyZmod	__class__s   &&&    r   r'   ZImportGameDialog.__init__   s   ?+FL
!!"$! c3'NN,T../++$2N2Nu2UV!!#.."6"68P8PQ		cnn&>&>nU**5$a@ OOCNNC<L<L<S<ST((2)))T5F5FRUR`R`RhRhi$T%:%:D<W<WXr"   c                s8   < V ^8  d   QhRS[ P                  RR/# )r   responser   N)r   r5   r   r   r   r    r!   2   s!     . .C,<,< . .r"   c                s:  < V\         P                  P                  \         P                  P                  \         P                  P                  39   d9   V P
                  '       d'   V P
                  P                  P                  4        R # \        SV `%  W4       R # N)
r   r5   ZCLOSEr6   ZDELETE_EVENTr1   stop_requestZsetr&   on_response)r:   Zdialogr=   r<   s   &&&r   r@   ZImportGameDialog.on_response2   sj    ((..0@0@0G0GIYIYIfIfgg  --113F-r"   c                s   \         P                  ! R R7      pVP                  \         P                  P                  4       V EF,  p\         P
                  ! 4       p\         P                  ! \         P                  P                  ^R7      pVP                  ^4       VP                  ^4       \         P                  ! \         P                  P                  R7      p\         P                  ! \         P                  P                  R7      pVP                  VR R ^4       WpP                   V&   \         P                  ! V\         P                  P                  ^ R7      pVP#                  R 4       VP                  VR R ^4       \         P                  ! \         P                  P                  R7      p	VP                  V	R R ^4       WP$                  V&   \         P                  ! R \         P                  P                  R7      p
VP                  V
R R ^4       WP&                  V&   \         P                  ! R \         P                  P                  R7      pVP                  VR R ^4       WP(                  V&   \         P                  ! R \         P                  P                  ^ R7      pVP#                  R 4       VP                  VR R ^4       WP*                  V&   VP                  VR R ^ 4       \         P,                  ! \/        R4      \         P                  P0                  R	R
7      pVP3                  VR	R	^ 4       WP4                  V&   VP7                  V4       VP7                  V4       EK/  	  V# )T)Zvexpand)orientationZspacing)rA   )halign)rB   xalign)no_show_allrB   )rD   rB   rC   ZLaunchF)ZvalignZ	sensitive)r   ZListBoxZset_selection_modeZSelectionModeZNONEZ
ListBoxRowZBoxZOrientationZ
HORIZONTALZset_margin_leftZset_margin_rightZVERTICALZLabelZAlignZSTARTr4   r,   Zset_line_wrapr*   r+   r-   r.   ZButtonr(   ZCENTERZpack_endr/   Zadd)r:   r)   ZlistboxZ	file_pathZrowZhboxZvboxZdescription_labelZfile_path_labelZprogress_labelZchecksum_labelZcategory_labelerror_labellaunch_buttons   &&            r   r3   Z(ImportGameDialog.get_file_labels_listbox:   sc   ++d+""3#4#4#9#9:I.."C77s'A'A1MD  $!!"%77s'?'?@D #		 AOO-tT1=1B##I.!ii	#))//RSTO))$/OOOT4; YYciioo>NOOND$:.<  + YY4		PNOOND$:.<  + YY4		PNOOND$:.<  +))SYY__UVWK%%d+OOKtQ7+6i(OOD$a0JJq{399;K;KW\]MMM-q9-:	*GGDMKKQ R r"   c                sr    V P                   ;'       d%    V P                   P                  P                  4       # r>   )r1   r?   Zis_set)r:   s   &r   search_stoppingZ ImportGameDialog.search_stoppingh   s+    JJD$4$4$A$A$H$H$JJr"   c                sp  a aaaa \        4       oV 3R  loV3R loVVV V3R lp\        4       pS P                   FJ  oS P                  '       d    V#  S! S\	        R4      4       V! S4      pS! SR4       V'       g   KF  W2S&   KL  	  V#   \
         d   pRTR. /.p Rp?L4Rp?ii ; i  S! SR4       i ; i)c                 sD   <a a \         P                  ! V VV3R  l4       R# )c                  sh   < SP                   S ,          P                  R \        S4      ,          4      # )	<i>%s</i>)r*   
set_markupr   filepathZmessager:   s   r   Z<lambda>ZJImportGameDialog.search_checksums.<locals>.show_progress.<locals>.<lambda>r   s'    $"6"6x"@"K"KKZbcjZkLk"lr"   N)r   Zidle_addrJ   s   ffr   show_progressZ8ImportGameDialog.search_checksums.<locals>.show_progresso   s     MMlmr"   c                 s`   < SP                  4        F  w  rW 8X  g   K  \        V4      u # 	  R # r>   )itemsr
   )rK   game_idZ	game_pathgame_path_caches   &  r   get_existing_gameZ<ImportGameDialog.search_checksums.<locals>.get_existing_gamet   s.    &5&;&;&="(=( '> r"   c                 s  < S! V 4      pV'       d   R VP                   RVR. /.# S! V \        R4      4       V P                  4       P                  R4      '       d   \	        V 4      pM\        V 4      pSP                  '       d   R# S! S\        R4      4       \        V4      pV'       g   \        \        R4      4      hV# )namegameromszCalculating checksum...z.zipNz$Looking up checksum on Lutris.net...z!This ROM could not be identified.)	rQ   r(   ZlowerZendswithr   r   rG   r   RuntimeError)rK   Zexisting_gamemd5resultfilenamerP   r:   rL   s   &   r   search_singleZ8ImportGameDialog.search_checksums.<locals>.search_single{   s    -h7M  !3!3V]FTVWXX(A&?$@A~~((00$X."8,###(A&L$MN(-F"1%H#IJJMr"   zLooking for installed game...errorrS   N )r   r    r)   rG   r(   	Exception)	r:   rX   resultsrV   rY   rW   rO   rP   rL   s	   f    @@@@r   r8   Z!ImportGameDialog.search_checksumsl   s    (*	n
		 	* -

H### ,h*I(JK&x0 h+v$*! #   8"E62678 h+s*   BB'B"B*"B''B**B5c                s   R V n         V P                  P                  \        P                  4       V'       d   \
        P                  ! V4       R # VP                  4        F(  w  r4V F  pV P                  WS4      '       g   K   K&  	  K*  	  R # r>   )	r1   r7   Z	set_labelr   ZSTOCK_CLOSEr   rY   rM   
import_rom)r:   r\   rY   rW   rV   rom_sets   &&&   r   r9   Z'ImportGameDialog.search_result_finished   sc    ##COO4LL 'H!??755 " !0r"   c           	     s    V P                   V,          P                  4        RV9   d
   VR,          hRV9   d.   VR,          pV P                  W#4       V P                  W#4       R# VR,           Fv  pV P	                  W!VR,          4       V P                  W4      p\        V4      p\        P                  ! V4       \        P                  ! V4       V P                  W#4        R# 	  R	#   \         dy   p\        P                  ! \        R4      T4       T P                  T,          pTP                  R\!        \#        T4      4      ,          4       TP%                  4         Rp?R	# Rp?ii ; i)
z^Tries to install a specific ROM, or reports failure. Returns True if
successful, False if not.rY   rR   TrS   rU   zFailed to import a ROM: %sz/<span style="italic" foreground="red">%s</span>NF)r*   Zhidedisplay_existing_game_infoenable_game_launchdisplay_new_game_infor   r
   r   Zfirer	   r[   r   Z	exceptionr(   r.   rI   r   Zstrshow)r:   r^   rW   rR   romrN   ZexrE   s   &&&     r   r]   ZImportGameDialog.import_rom   s9   	  *//1'!g&& v//?''7v**8c%jI--:G}##D)!!$'''7 '   	Q;<bA++H5K""#TW_`cdf`gWh#hi	s&   A#C, 'A?C, (C, ,E/7A-E**E/c                s    V P                   V,          pVP                  R 4       VP                  RV P                  V4       R# )Tr%   N)r/   Zset_sensitiveZconnecton_launch_clicked)r:   rW   rR   rF      &&& r   r`   Z#ImportGameDialog.enable_game_launch   s8    ++H5##D)i)?)?Fr"   c                s    \         P                  P                  4       pVP                  VP                  4       V P                  4        R # r>   )r   ZApplicationZget_defaultZlaunchZlaunch_ui_delegateZdestroy)r:   Z_buttonrR   Zapplicationre   r   rd   Z"ImportGameDialog.on_launch_clicked   s1     oo113K223r"   c                sx   V P                   V,          pVP                  R \        R4      ,          4       VP                  4        V P                  V,          pVP                  RVP
                  ,          4       VP                  pV P                  V,          pVP                  V4       VP                  4        R# )rH   z Game already installed in Lutris	<b>%s</b>N)	r+   rI   r(   rb   r,   rQ   r0   r-   set_text)r:   rW   rR   labelcategorys   &&&  r   r_   Z+ImportGameDialog.display_existing_game_info   s    $$X.q)K'LLM

''1tyy01==$$X.x 

r"   c                s   V P                   V,          pVP                  V4       VP                  4        V P                  V,          pVP	                  R VR,          ,          4       VR,          R,          pV P
                  V,          pVP                  V4       VP                  4        \        V4      V n        V P                  '       g   \        \        R4      V,          4      hR# )rf   rQ   ri   z'The platform '%s' is unknown to Lutris.N)
r+   rg   rb   r,   rI   r-   r   r0   rT   r(   )r:   rW   r^   Zchecksumrh   ri   s   &&&&  r   ra   Z&ImportGameDialog.display_new_game_info   s    $$X.x 

''1wv67:&v.$$X.x 

&w/}}}q!JKhVWW r"   c                s   \        VR ,          4      p\        P                  ! RV4        \        \        V P
                  ,          4      pTR,          P                  4        F  w  rgTR8X  g   K  Y$R,          T&   K  	  \        T4      p\        Y4      p	\        TTR,          TR^T: RTR,          : 2T	R	7      p
\        T4       T
#   \         d,   p\        \        R4      T P
                  ,          4      ThRp?ii ; i)
rQ   zInstalling %sz?Lutris does not have a default installer for the '%s' platform.NrR   rc   runnerrZ   Z-)rQ   rj   slugZ	directoryZ	installedZinstaller_slug
configpath)r   r   Zinfor   r   r0   ZKeyErrorrT   r(   rM   r   r   r   r   )r:   r^   rK   rQ   Z	installerrY   r;   Zvaluerk   rl   rN   s   &&&        r   r   ZImportGameDialog.add_game   s    gfo.OT*	 !3DMM!BCI $F+113JC~)1&!#& 4 t}&t7
X&&*Ih,?@!
 	d#)  	STW[WdWdd	s    C	 	C?&C::C?)r2   r-   r+   r7   r,   r.   r)   r/   r0   r*   r1   r>   )Z__name__Z
__module__Z__qualname__Z__firstlineno__r'   r@   r3   ZpropertyrG   r8   r9   r]   r`   rd   r_   ra   r   Z__static_attributes__Z__classdictcell__Z__classcell__)r<   r   s   @@r   r   r      sg     Y Y8. .,\ K K4l>G
	X r"   r   N))Zcollectionsr    Zcopyr   r   r(   Zgi.repositoryr   r   r   Zlutris.configr   Zlutris.database.gamesr   Zlutris.gamer   r	   r
   Zlutris.gui.dialogsr   Z"lutris.scanners.default_installersr   Zlutris.scanners.tosecr   r   r   Zlutris.services.lutrisr   Zlutris.util.jobsr   Zlutris.util.logr   Zlutris.util.path_cacher   Zlutris.util.stringsr   r   Zlutris.util.systemr   r   r   r   r"   r   <module>rm      sL    #    ( ( + * : : - A U U 8 & " 1 1 ;y~ yr"   