
    ?g5                     
   d dl mZmZ d dlZd dlZd dlZ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ZdZdZd	Z G d
 dej$                  j&                        Zedk(  r ed        ed        ej,                         Zej1                  eej2                  j4                        Zeej2                  j8                  k7  r e       Zn ed        e        ej@                  jC                  dd      Z"e"jG                          yy)    )GioGLibN)DBusGMainLoop)ElementTree)setproctitlezorg.Cinnamon.Slideshowz/org/Cinnamon/Slideshow	directoryxmlc                   n   e Zd Zd Zej
                  j                  edd      d        Zej
                  j                  edd      d        Z	ej
                  j                  edd      d        Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y)CinnamonSlideshowc                    t         j                  j                  t        t        j                               }t         j                  j
                  j                  | |t               t        j                  d      | _
        t        j                  d      | _        | j                  j                  d      r| j                  j                  dd       g | _        g | _        d| _        d| _        | j                  j%                  d      | _        d| _        | j                  j+                  d	      | _        d | _        d| _        y )
N)busz)org.cinnamon.desktop.background.slideshow)schemazorg.cinnamon.desktop.backgroundslideshow-pausedFpicture-urir   delay)dbusserviceBusNameSLIDESHOW_DBUS_NAME
SessionBusObject__init__SLIDESHOW_DBUS_PATHr   Settingsslideshow_settingsbackground_settingsget_booleanset_booleanimage_playlistused_image_playlistimages_readyupdate_in_progress
get_stringcurrent_image	update_idget_intloop_counterfolder_monitorfolder_monitor_id)selfbus_names     </usr/share/cinnamon/cinnamon-slideshow/cinnamon-slideshow.pyr   zCinnamonSlideshow.__init__   s    <<''(;AR'S$$T85HI"%,,6a"b#&<<7X#Y ""../AB##//0BEJ #% !"'!55@@O 33;;GD"!"     )in_signatureout_signaturec                 $    | j                          y N)setup_slideshowr*   s    r,   beginzCinnamonSlideshow.begin(   s    r-   c                     | j                   dkD  r&t        j                  | j                          d| _         t        j	                          y Nr   )r%   r   source_removemlquitr4   s    r,   endzCinnamonSlideshow.end,   s0    >>At~~.DN
	r-   c                     | j                   dkD  r&t        j                  | j                          d| _         | j                  j	                  d      | _        | j                          y )Nr   r   )r%   r   r8   r   r&   r'   start_mainloopr4   s    r,   getNextImagezCinnamonSlideshow.getNextImage4   sL    >>At~~.DN 33;;GDr-   c                     | j                          | j                          | j                          | j                  t        k(  r| j                          | j                          y r2   )load_settingsconnect_signalsgather_imagescollection_type$BACKGROUND_COLLECTION_TYPE_DIRECTORYconnect_folder_monitorr=   r4   s    r,   r3   z!CinnamonSlideshow.setup_slideshow=   sM    #GG'')r-   c                     |d|S )N:// )r*   typepaths      r,   format_sourcezCinnamonSlideshow.format_sourceE   s     $''r-   c                    | j                   j                  d      | _        | j                   j                  d      | _        d| _        d | _        | j                  dk7  rfd| j                  v rW| j                  j                  d      \  | _        | _        t        j                  j                  | j
                        | _        y y y )Nrandom-orderimage-sourcer.   rG   )r   r   random_orderr#   
collectioncollection_pathrC   splitosrJ   
expanduserr4   s    r,   r@   zCinnamonSlideshow.load_settingsI   s     33??O11<<^L!#??b Udoo%=;???;P;PQV;W8T!4#7#%77#5#5d6J6J#KD  &> r-   c                     | j                   j                  d| j                         | j                   j                  d| j                         | j                  j                  d| j
                         y )Nzchanged::image-sourcezchanged::random-orderzchanged::picture-uri)r   connecton_slideshow_source_changedon_random_order_changedr   on_picture_uri_changedr4   s    r,   rA   z!CinnamonSlideshow.connect_signalsR   sY    ''(?AaAab''(?A]A]^  (()?A\A\]r-   c                     t        j                  | j                        }|j                  dd       | _        | j                  j                  d| j                        | _        y )Nr   changed)r   file_new_for_pathrQ   monitor_directoryr(   rV   on_monitored_folder_changedr)   )r*   folder_paths     r,   rE   z(CinnamonSlideshow.connect_folder_monitorW   sN    ++D,@,@A);;AtD!%!4!4!<!<YHhHh!ir-   c                 |    | j                   dkD  r-| j                  j                  | j                          d| _         y y r7   )r)   r(   
disconnectr4   s    r,   disconnect_folder_monitorz+CinnamonSlideshow.disconnect_folder_monitor\   s7    !!A%**4+A+AB%&D" &r-   c                    | j                   t        k(  rxt        j                  | j                        }|j                  d       rG|j                  dt        j                  j                  t        j                  d | j                  d        y y | j                   t        k(  r9| j                  | j                        }|D ]  }|d   }| j                  |        y y )Nz4standard::name,standard::type,standard::content-typefilename)rC   rD   r   r\   rQ   query_existsenumerate_children_asyncFileQueryInfoFlagsNONEr   PRIORITY_LOWgather_images_cbBACKGROUND_COLLECTION_TYPE_XMLparse_xml_backgrounds_listadd_image_to_playlist)r*   folder_at_pathpicturespicturerd   s        r,   rB   zCinnamonSlideshow.gather_imagesa   s    #GG 2243G3GHN**40778n8;8N8N8S8S8<8I8I8<8<8M8M8<> 1 !!%CC66t7K7KLH# 5":.**845 Dr-   c                      g |j                  |      f fd	j                  dt        j                  d        y )Nc                     | j                  |      }}t        |      dk7  r5|j                  |      }j                  dt        j
                  d d        y j                  d        j                  |       y )Nr   d   )next_files_finishlenextendnext_files_asyncr   ri   closeensure_file_is_image)	objres	user_datafiles	file_list	all_files
enumeratoron_next_file_completer*   s	        r,   r   zACinnamonSlideshow.gather_images_cb.<locals>.on_next_file_completev   sm    ))#.E!I5zQ%,,U3	++C1B1BDJ_aef  &)))4r-   rs   )enumerate_children_finishrw   r   ri   )r*   rz   r{   r|   r   r   r   s   `   @@@r,   rj   z"CinnamonSlideshow.gather_images_cbs   sE    	2237
6? 	5 	5 	##C):):DBWYbcr-   c                    |D ]  }|j                         }|t        j                  j                  us0|j	                         }|j                  d      sR| j                  | j                  dz   |j                         z           y )Nimage/)	get_file_typer   FileType	DIRECTORYget_content_type
startswithrm   rQ   get_name)r*   r~   item	file_typefile_contentss        r,   ry   z&CinnamonSlideshow.ensure_file_is_image   ss     	]D**,I 6 66 $ 5 5 7 ++G4..t/C/Cc/IDMMO/[\	]r-   c                     t        j                  |      }|j                         }| j                  j	                  |       | j
                  t        k(  r| j                  j                          d| _        y )NT)	r   r\   get_urir   appendrC   rD   sortr!   )r*   	file_pathr   	image_uris       r,   rm   z'CinnamonSlideshow.add_image_to_playlist   sZ    %%i0MMO	""9-#GG$$& r-   c                    | j                   dkD  r&t        j                  | j                          d| _         | j                          g | _        g | _        d| _        | j                  j                  d      | _	        d| _
        d | _        | j                  dk7  rdd| j                  v rV| j                  j                  d      \  | _        | _
        t        j                  j                  | j                        | _
        | j                  t         k(  r| j#                          | j%                          | j                  j'                  d      | _        | j+                          y )Nr   FrN   r.   rG   r   )r%   r   r8   rb   r   r    r!   r   r#   rP   rQ   rC   rR   rS   rJ   rT   rD   rE   rB   r&   r'   r=   r*   settingskeys      r,   rW   z-CinnamonSlideshow.on_slideshow_source_changed   s   >>At~~.DN&&( #% !11<<^L!#??b Udoo%=;???;P;PQV;W8T!4#7#%77#5#5d6J6J#KD #GG'') 33;;GDr-   c                    	 |t         j                  j                  k(  r|j                         }| j                  j                  |      dkD  r)| j                  j                  |      }| j                  |= nF| j                  j                  |      dkD  r(| j                  j                  |      }| j                  |= |t         j                  j                  k(  r|j                         }|j                  dt         j                  j                  d       }|j                         }	|	t         j                  j                  ur4|j!                         }
|
j#                  d      r| j%                  |       y y y y #  Y y xY w)Nr   z%standard::type,standard::content-typer   )r   FileMonitorEventDELETEDr   r   countindexr    CREATEDget_path
query_inforg   rh   r   r   r   r   r   rm   )r*   monitorfile1file2
event_typefile_uriindex_to_remover   	file_infor   r   s              r,   r^   z-CinnamonSlideshow.on_monitored_folder_changed   sF   	S11999 ==?&&,,X6:&*&9&9&?&?&IO++O<--33H=A&*&>&>&D&DX&NO00AS11999!NN,	!,,-TVYVlVlVqVqswx	%335	CLL$:$::$-$>$>$@M$//8229= 9 ;	 :	s   E0E6 6E:c                 D    | j                   j                  d      | _        y )NrM   )r   r   rO   r   s      r,   rX   z)CinnamonSlideshow.on_random_order_changed   s     33??Or-   c                     | j                   ry | j                  j                  d      | j                  k7  r| j                  j                  dd       y y )Nr   zslideshow-enabledF)r"   r   r#   r$   r   r   r   s      r,   rY   z(CinnamonSlideshow.on_picture_uri_changed   sJ    ""''22=ATEWEWW''334GO Xr-   c                 D   | j                   dkD  r&t        j                  | j                          d| _         | j                  s&t        j                  d| j
                        | _         y | j                  | j                  j                  d      k\  rX| j                  j                  d      s=d| _        | j                          t        j                  d| j
                        | _         y | j                  dz   | _        t        j                  d| j
                        | _         y )Nr      r   r   <   )r%   r   r8   r!   timeout_add_secondsr=   r'   r   r&   r   update_backgroundr4   s    r,   r=   z CinnamonSlideshow.start_mainloop   s    >>At~~.DN  !55a9L9LMDN  D$;$;$C$CG$LLUYUlUlUxUx  zL  VM$%!&&(!%!9!9"d>Q>Q!R$($5$5$9!!%!9!9"d>Q>Q!Rr-   c                     | j                   ry d| _         t        | j                        dk(  r| j                          | j	                         }|#| j
                  j                  d|       || _        d| _         y )NTr   r   F)r"   ru   r   %move_used_images_to_original_playlistget_next_image_from_listr   
set_stringr$   )r*   
next_images     r,   r   z#CinnamonSlideshow.update_background   so    """&t""#q(668224
!$$//zJ!+D"'r-   c                     | j                   r<t        j                  dt        | j                        dz
        }| j                  |   }nd}| j                  |   }| j                  ||       |S )Nr   r   )rO   randomrandintru   r   move_image_to_used_playlistr*   r   r   s      r,   r   z*CinnamonSlideshow.get_next_image_from_list   se    NN1c$*=*=&>&BCE''.EE''.E((6r-   c                 p    | j                   j                  |       | j                  j                  |       y r2   )r   popr    r   r   s      r,   r   z-CinnamonSlideshow.move_image_to_used_playlist   s*    &  ''.r-   c                     | j                   | _        | j                  t        k(  r| j                  j	                          g | _         y r2   )r    r   rC   rD   r   r4   s    r,   r   z7CinnamonSlideshow.move_used_images_to_original_playlist   s9    "66#GG$$&#% r-   c                 <    |j                  d      }|d   |d   f}|S )N_r      )	partition)r*   
localeCodelocs      r,   splitLocaleCodez!CinnamonSlideshow.splitLocaleCode   s)    ""3'1vs1v
r-   c                     d}d}|D ]?  }|d   }|d   }|dk(  r|r|}|d   |d   k(  s$|d   |d   k(  r|c S |d   dk(  s<|}d}A |S )Nr.   Fr   r   r.   r.   TrH   )r*   namesr   resultmainLocFoundwpwpLocwpNames           r,   getLocalWallpaperNamez'CinnamonSlideshow.getLocalWallpaperName  s~     	(BqEEUF ##FqSV#8s1v%!M1X^#F#'L	( r-   c                 B   	 d}| j                  t        j                         d         }g }d}t        |      }t	        j
                  |j                               }|j                          |j                  dk(  r|D ]z  }|j                  dk(  s|j                  d      dk7  s)d|i}	g }
|D ]  }t        |j                        t        k(  s |j                  d	k7  r|j                  |	|j                  <   I|j                  }|j                  }||v r | j                  |j                  |            nd
}|
j                  ||f        | j                  |
|      |	d	<   d|	v s|	d   dk7  st         j"                  j%                  |	d         st!        j&                  |	d   t         j(                        s=|	d	   dk(  r%t         j"                  j+                  |	d         |	d	<   |j                  |	       } |S # t,        $ r}t/        |       g cY d }~S d }~ww xY w)Nz*{http://www.w3.org/XML/1998/namespace}langr   F
wallpapers	wallpaperdeletedtruemetadataFilenamer   rd   r.   )r   locale	getlocaleopenr   
fromstringreadrx   taggetrI   strtextattribr   r   rS   rJ   existsaccessR_OKbasename	Exceptionprint)r*   rd   locAttrNamer   r{   subLocaleFoundfrootNodewallpaperNodewallpaperDatar   proppropAttrr   locNamedetails                   r,   rl   z,CinnamonSlideshow.parse_xml_backgrounds_list  s)   	FK&&v'7'7'9!'<=CC"NXA"--affh7HGGI|||+%- 6M$((K7M<M<Mi<X\b<b)7(B "$1 DD#DHH~4#'88v#5>BiiM$(($;/3{{H-1YYFalpxaxd.B.B8<<P[C\.]  GG$)LL'61B$CD 150J0J5RU0Vf-%6=;TXZ;Z_a_f_f_m_mn{  }G  oH  `I  NP  NW  NW  Xe  fp  Xq  su  sz  sz  N{,V4:8:8H8HWaIb8cf 5JJ}5%6& J 	&MI	sJ   BG> G> ''G> BG> %G> ."G> 'G> ;AG> >	HHHHN)!__name__
__module____qualname__r   r   r   methodr   r5   r;   r>   r3   rK   r@   rA   rE   rb   rB   rj   ry   rm   rW   r^   rX   rY   r=   r   r   r   r   r   r   rl   rH   r-   r,   r   r      s   #, 
\\,2RP Q 
\\,2RP Q 
\\,2RP Q(L^
j
'
5$d]!(,PPS ( 
/&
" r-   r   __main__zcinnamon-slideshowT)set_as_defaultz#cinnamon-slideshow already running.)$gi.repositoryr   r   r   dbus.service	dbus.glibdbus.mainloop.glibr   r   rS   r   	xml.etreer   r   r   r   rD   rk   r   r   r   r   r   
sessionBusrequest_namer   NAME_FLAG_DO_NOT_QUEUErequestREQUEST_NAME_REPLY_EXISTS	slideshowr   r:   MainLoopnewr9   runrH   r-   r,   <module>r     s    $ $ $ ,   ! %. / '2 $!& c++ cL	 z%&& #J%%&9488;Z;Z[G$((444%'	34			4	&BFFH r-   