+
    Kiq  c                   s    R t ^ RIt^ RIHtHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^R	IHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$ R
 t%R t& ! R R]PN                  4      t(R# )z Store object for a list of gamesN)SetUnion)GLibGObjectGtk)settings)sql)"get_all_installed_game_for_service	get_games)	StoreItem)gtk_safe)COL_IDCOL_INSTALLEDCOL_INSTALLED_ATCOL_INSTALLED_AT_TEXTCOL_LASTPLAYEDCOL_LASTPLAYED_TEXTCOL_MEDIA_PATHSCOL_NAMECOL_PLATFORMCOL_PLAYTIMECOL_PLAYTIME_TEXT
COL_RUNNERCOL_RUNNER_HUMAN_NAMECOL_SLUGCOL_SORTNAMECOL_YEARc                 sP     V P                  4       pV#   \         d    T p T# i ; iN)ZlowerZAttributeError)valueZouts   & ;/usr/lib/python3.14/site-packages/lutris/gui/views/store.py	try_lowerr   #   s4    kkm J  Js    %%c                s   V P                  W4      pV P                  W#4      pVf	   Vf   ^ ;rEM)Vf   \        V4      ! 4       pMVf   \        V4      ! 4       p\        V4      p\        V4      pWE8  d   RM	WE8X  d   ^ M^pV^ 8X  dR   \        V P                  V\        4      4      p\        V P                  V\        4      4      p WE8  d   RM	WE8X  d   ^ M^pV^ 8X  d?   \        V P                  V\
        4      4      p\        V P                  V\
        4      4      p WE8  d   R# WE8X  d   ^ # ^#   \         d    ^ p Lgi ; i  \         d     ^ # i ; i)z#Sorting function for the game storei)Z	get_valueZtyper   r   	TypeErrorr   )ZmodelZrow1Zrow2Zsort_colZvalue1Zvalue2Zdiffs   &&&&   r   	sort_funcr    +   s;   __T,F__T,F~&.	f	fvFvF26+;aDqy5??4>?5??4>?	263CaD qy5??41FGH5??41FGH_rFv/?!FQF  	D	  s0   D0 E &E .E 0E ?E EEc                   s~   a a ] tR t^Ht oV 3R lt]R 4       tR tR tR t	V3R lR lt
R tR	 tR
 tR tRtVtV ;t# )	GameStorec                sN  < \         SV `  4        Wn        W n        . V n        R V n        / V n        \        P                  ! \        \        \        \        \        P                  \        \        \        \        \        \        \        \        \        \        \        4      V n        R# )FN)Zsuper__init__serviceservice_media_installed_games_installed_games_accessed_icon_updatesr   Z	ListStorestrr   ZTYPE_PYOBJECTintZboolZfloatstore)selfr#   r$   	__class__s   &&&r   r"   ZGameStore.__init__I   sw    * ").&]]!!!

    c                s   V P                   ;'       g    ^ p\        P                  ! 4       V n         V P                   V,
          ^8  d*   \        RR/R7       Uu. uF  q"R,          NK  	  upV n        V P                  # u upi )i    	installedZ1Zfiltersslug)r&   timer   r%   )r+   Zprevious_accessZgs   &  r   installed_game_slugsZGameStore.installed_game_slugsd   sp    88==A)-&))O;a?8A;X[J\8]$^8]1vYY8]$^D!$$$ %_s   A>c                sX    V P                    F  pV\        ,          V8X  g   K  Vu # 	  R # r   )r*   r   )r+   r0   	model_row   && r   get_row_by_slugZGameStore.get_row_by_slugl   s#    I"d*   $r-   c                s    V'       g   R # V P                    F#  p V\        ,          \        V4      8X  d   Vu # K%  	  R #   \         d      R # i ; ir   )r*   r   r(   r   )r+   _idr3   r4   r   get_row_by_idZGameStore.get_row_by_idq   sK    IV$C0$$ 1 $  s   A  AAc                s    V P                  V4      pV'       d(   V P                  P                  VP                  4       R# R# )zRemove a game from the view.N)r7   r*   ZremoveZiter)r+   r6   rowr4   r   remove_gameZGameStore.remove_game{   s0      %JJchh' r-   c                sJ   < V ^8  d   QhRS[ RS[S[S[,          R3,          /# )i   db_gameZreturnN)dictr   r    r)   )Zformat__classdict__s   "r   Z__annotate__ZGameStore.__annotate__   s(     $ $d $uSXt^'< $r-   c                sf   \        WP                  V P                  4      pV P                  VP                  4      pV'       g    RV9   d   V P                  VR,          4      pV'       g   R# \        4       p\        VP                  4      V\        &   VP                  V\        &   VP                  V\        &   VP                  '       d   VP                  MVP                  V\        &   \        P                  '       d   VP!                  4       M. V\"        &   VP$                  V\&        &   VP(                  V\*        &   VP,                  V\.        &   VP0                  V\2        &   VP4                  V\6        &   VP8                  V\:        &   VP<                  V\>        &   VP@                  V\B        &   VPD                  V\F        &   VPH                  V\J        &   VPL                  V\N        &   \Q        4       pVPS                  4        F)  w  rgW6,          V8w  g   K  WsV&   VPU                  V4       K+  	  V# )zUpdate game information
Return the indices of the row that were updated, or an empty set if no change
was made, or None if the game could not be found.

service_idN)+r	   r#   r$   r7   idr;   r(   r   r0   r   namer   sortnamer   r   
SHOW_MEDIAget_media_pathsr   yearr   runnerr   runner_textr   platformr   
lastplayedr   lastplayed_textr   r.   r   installed_atr   installed_at_textr   playtimer   playtime_textr   ZsetZitemsZadd)r+   r:   
store_itemr8   Z
new_valuesZchanged_indicesZidxr   s   &&      r   updateZGameStore.update   s   
 wd6H6HI
  /|w.$$W\%:;CV
 /
6)
8)
8:D:M:M:M:#6#6S]SbSb
< FNFYFYFYj&@&@&B_a
?#)
8!+!2!2
:,6,B,B
()#-#6#6
< %/%:%:
>"*4*D*D
&'$.$8$8
=!'1'>'>
#$,6,H,H
()#-#6#6
< (2(@(@
$%%$**,JCx5  C##C( - r-   c                sh    \        WP                  V P                  4      pV P                  V4       R# )zAdd a game to the storeN)r	   r#   r$   add_item)r+   r:   rM   r4   r   add_gameZGameStore.add_game   s$    wd6H6HI
j!r-   c                s"   V P                   P                  VP                  VP                  VP                  VP
                  '       d   VP
                  MVP                  \        P                  '       d   VP                  4       M. VP                  VP                  VP                  \        VP                  4      VP                  VP                  VP                   VP"                  VP$                  VP&                  VP(                  34       R # r   )r*   Zappendr>   r0   r?   r@   r   rA   rB   rC   rD   rE   r
   rF   rG   rH   r.   rI   rJ   rK   rL   )r+   rM   s   &&r   rO   ZGameStore.add_item   s    

'1':':':
##
080C0C0C
**,!!&&,,-%%**$$'',,##((!	
r-   c                sB   / pV'       d   V'       d   \        V4      pV F{  pVed   RV9   d]   VR,          p\        W@P                  V P                  4      pVP	                  VP                  V4      4       V P                  V4       Kj  V P                  V4       K}  	  R# )zAdd games to the store, but preload their installed-game data
all at once, for faster database access. This should be used if all or almost all
games are being loaded.Nappid)r   r	   r#   r$   Zapply_installed_game_dataZgetrO   rP   )r+   db_gamesr=   Zinstalled_db_gamesr:   rQ   rM   s   &&&    r   add_preloaded_gamesZGameStore.add_preloaded_games   s    
  (!CJ!OG!-'W2D(&wd>P>PQ
445G5K5KE5RSj)g&  r-   c                sd   V P                   '       dA   \        P                  ! \        P                  R RV P                   RVP
                  /R7      pM3\        P                  ! \        P                  RRVP                  /R7      pV F$  p\        P                  ! V P                  V4       K&  	  R# )Zservice_gamesr#   rQ   r/   Zgamesr>   T)
r#   r   Zfiltered_queryr   ZDB_PATHrQ   r>   r   Zidle_addrN   )r+   ZgamerR   r:   s   &&  r   on_game_updatedZGameStore.on_game_updated   s    <<<))  #T\\7DJJGH ))(*:*:GtUYU\U\o_HGMM$++w/  r-   )r'   r%   r&   r#   r$   r*   )Z__name__Z
__module__Z__qualname__Z__firstlineno__r"   Zpropertyr2   r5   r7   r9   rN   rP   rO   rS   rT   Z__static_attributes__Z__classdictcell__Z__classcell__)r,   r<   s   @@r   r!   r!   H   sQ     
6 % %!
($ $L"

,'$ r-   r!   ))Z__doc__r1   Ztypingr    r   Zgi.repositoryr   r   r   Zlutrisr   Zlutris.databaser   Zlutris.database.gamesr   r   Zlutris.gui.views.store_itemr	   Zlutris.util.stringsr
   Z r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    ZObjectr!   ) r-   r   <module>rU      sZ    &   , ,   O 1 (    (:X Xr-   