
    @};d'                         d dl Z d dlZd dlmZmZmZmZ d dlmZ d dlZ ej                  d ej                                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 G d dej2                  ej4                        Zy)    N)GioGLibGObjectPeas)RB	rhythmboxartisttitlealbumzrb:stream-song-artistzrb:stream-song-titlezrb:stream-song-albumzorg.freedesktop.DBus.Propertiesz)org.freedesktop.Telepathy.MissionControl5z)/org/freedesktop/Telepathy/AccountManagerz(org.freedesktop.Telepathy.AccountManagerz!org.freedesktop.Telepathy.Accountzim.pidgin.purple.PurpleServicez/im/pidgin/purple/PurpleObjectz im.pidgin.purple.PurpleInterfacec                       e Zd Zd Z ej
                  ej                        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)IMStatusPlugin)typec                 B    t         j                  j                  |        y N)r   Object__init__selfs    B/usr/lib/x86_64-linux-gnu/rhythmbox/plugins/im-status/im-status.pyr   zIMStatusPlugin.__init__:   s    NNT"    c           	      F   i | _         t        j                  j                  }d}d }t        j                  j                  |||t        t        t        d       | j                   d<   t        j                  j                  |||t        t        t        d       | j                   d<   y )Nr   purple	mc5_props)proxiesr   BusTypeSESSION	DBusProxynew_for_bus_syncPURPLE_BUS_NAMEPURPLE_OBJ_PATHPURPLE_IFACE_NAMEMC5_BUS_NAMEMC5_AM_OBJ_PATHPROPERTIES_IFACE_NAME)r   bus_typeflags
iface_infos       r   _init_dbus_proxiesz!IMStatusPlugin._init_dbus_proxies=   s    DL{{""HEJ ]];;HeZ.ARTXZDLL # > >xPZ+_>SUY![DLLr   c                    | j                   }|j                  j                  }|j                  d| j                        | _        |j                  d| j                        | _        |j                  d| j                        | _	        d | _
        d | _        d | _        d | _        | j                          | j                          |j!                         r | j#                  |j%                                y y )Nzplaying-song-changedzplaying-changedzplaying-song-property-changed)objectpropsshell_playerconnectplaying_entry_changedpsc_idplaying_changedpc_idplaying_song_property_changedpspc_idcurrent_entrycurrent_artistcurrent_titlecurrent_albumr(   save_statusget_playing	set_entryget_playing_entryr   shellsps      r   do_activatezIMStatusPlugin.do_activateH   s    KKE		!	!B::5#99;DK::0#335DJ::>#AACDL DDDD	~~
nnb**-. r   c                 $   | j                   }|j                  j                  }|j                  | j                         |j                  | j
                         |j                  | j                         | j                  | j                          y y r   )	r*   r+   r,   
disconnectr/   r1   r3   r4   restore_statusr<   s      r   do_deactivatezIMStatusPlugin.do_deactivate]   sg    KKE		!	!BMM4;;MM4::MM4<< %
 &r   c                 v    |r | j                  |j                                y d | _        | j                          y r   )r:   r;   r4   rB   )r   r>   playings      r   r0   zIMStatusPlugin.playing_changedg   s.    
nnb**-.d
r   c                 H    |j                         r| j                  |       y y r   )r9   r:   )r   r>   entrys      r   r.   z$IMStatusPlugin.playing_entry_changedn   s    	~~
nne r   c                    d}|j                         r|t        t        fv r
|| _        d}nO|j                         r|t        t
        fv r
|| _        d}n'|j                         r|t        t        fv r	|| _	        d}|r| j                          y y )NFT)r9   NORMAL_SONG_ARTISTSTREAM_SONG_ARTISTr5   NORMAL_SONG_TITLESTREAM_SONG_TITLEr6   NORMAL_SONG_ALBUMSTREAM_SONG_ALBUMr7   
set_status)r   r>   uripropertyoldnewrelevants          r   r2   z,IMStatusPlugin.playing_song_property_changedr   s    H	~~X*<>P)QQdh		x,=?P+QQdh		x,=?P+QQdh
oo r   c                     t        j                  || j                        ry | j                  d k(  r| j                          || _        || j	                          y | j                          y r   )rbentry_equalr4   r8   rB   set_status_from_entry)r   rG   s     r   r:   zIMStatusPlugin.set_entry   s[    	~~eT//0T!
D}
!r   c                 f   | j                   }|j                  d      }| j                  j                  t        j
                  j                        | _        | j                  j                  t        j
                  j                        | _	        | j                  j                  t        j
                  j                        | _        | j                  j                         j                  j                  t        j                  j                   k(  r| j                  s%|j#                  | j                  t$              | _        | j                  s%|j#                  | j                  t&              | _	        | j                  s%|j#                  | j                  t(              | _        | j+                          y )Ndb)r*   get_propertyr4   
get_stringr   RhythmDBPropTypeARTISTr5   TITLEr6   ALBUMr7   get_entry_typer+   categoryRhythmDBEntryCategorySTREAMentry_request_extra_metadatarJ   rL   rN   rO   )r   r=   rZ   s      r   rX   z$IMStatusPlugin.set_status_from_entry   s2   KKE			T	"B,,778K8K8R8RSD++66r7J7J7P7PQD++66r7J7J7P7PQD((*0099R=U=U=\=\\   ==t?Q?QSef ==t?Q?QSde ==t?Q?QSdeOOr   c                    | j                   | j                  | j                  d}| j                   r6| j                  rt        d      |z  }n\| j                  rPt        d      |z  }nA| j                  rt        d      |z  }n&| j                  rt        d      |z  }nt        d      }| j	                         | j                  |       y )N)r	   r   r
   u   ♫ %(artist)s - %(title)s ♫u   ♫ %(artist)s - %(album)s ♫u   ♫ %(album)s ♫u   ♫ %(title)s ♫u   ♫ Listening to music... ♫)r5   r7   r6   _set_mc5_statusset_purple_status)r   subs
new_statuss      r   rO   zIMStatusPlugin.set_status   s    %%####D
 			 89D@
 89D@
			 )*T1j			 )*T1j56j$J'r   c                 X    | j                         | _        | j                         | _        y r   )get_mc5_status	saved_mc5get_purple_statussaved_purpler   s    r   r8   zIMStatusPlugin.save_status   s#    ((+DN..1Dr   c                     | j                   d k7  r| j                  | j                          | j                  d k7  r| j                  | j                         y y r   )rn   rh   rp   ri   r   s    r   rB   zIMStatusPlugin.restore_status   sG    ~~
4>>*D 
d//0 !r   c           
         	 | j                   d   }|j                  dt        d      D ]  }t        j                  j                  t        j                  j                  dd t        |t        d       }|j                  dt        d      }t        j                  d|d   |d   |f      }|j                  dt        d|        y # t        j                  $ r!}t        d	t!        |      z          Y d }~y d }~ww xY w)
Nr   (ss)ValidAccountsr   RequestedPresencez(uss)   z(ssv)GError while setting status: )r   GetMC5_AM_IFACE_NAMEr   r   r   r   r   r"   r$   MC5_ACCT_IFACE_NAMEr   VariantSetGErrorprintstr)r   rk   proxyacct_obj_path
acct_proxystatusvstatuses           r   rh   zIMStatusPlugin.set_mc5_status   s    6ll;'e 99V->P 
S-]]33CKK4G4GD4@-4I4Q
 (;=PQ,,wF1Iz(JKw 35H'R
S ;; 6+c!f4556s   B>C C5C00C5c           
         	 | j                   d   }d}|j                  dt        d      D ]o  }t        j                  j                  t        j                  j                  dd t        |t        d       }|j                  dt        d      }d}|d   d	k7  sj|d   c S  |ry		 y # t        j                  $ r!}t        d
t        |      z          Y d }~y d }~ww xY w)Nr   Frs   rt   r   ru   T    rw   )r   rx   ry   r   r   r   r   r   r"   r$   rz   r   r}   r~   r   )r   r   
got_statusr   r   retr   s          r   rm   zIMStatusPlugin.get_mc5_status   s    6ll;'ej !99V->P 	-]]33S[[5H5H!T5A=5JDR
 nnV%8:MN
q6R<Q-	 
 
  ;; 6+c!f4556s$   BB! B! B! !C4CCc                     	 | j                   d   }|j                         }|j                  d||       |j                  d|       y # t        j
                  $ r!}t        dt        |      z          Y d }~y d }~ww xY w)Nr   z(is)(i)rw   )r   PurpleSavedstatusGetCurrentPurpleSavedstatusSetMessagePurpleSavedstatusActivater   r}   r~   r   )r   rk   r   r   r   s        r   ri   z IMStatusPlugin.set_purple_status   sn    6ll8$e002f''
C%%eV4;; 6+c!f4556s   AA A;A66A;c                     	 | j                   d   }|j                         }|j                  d|      S # t        j                  $ r!}t        dt        |      z          Y d }~y d }~ww xY w)Nr   r   rw   )r   r   PurpleSavedstatusGetMessager   r}   r~   r   )r   r   r   r   s       r   ro   z IMStatusPlugin.get_purple_status   sb    6ll8$e002f..uf==;; 6+c!f4556s   03 A'A""A'N)__name__
__module____qualname____gtype_name__r   rQ   r   r*   r   r(   r?   rC   r0   r.   r2   r:   rX   rO   r8   rB   rh   rm   ri   ro    r   r   r   r   6   sn    #.70&#	[/*""(>216".6r   r   )rV   gigi.repositoryr   r   r   r   r   gettextinstall
locale_dirrI   rK   rM   rJ   rL   rN   r$   r"   r#   ry   rz   r   r    r!   r   Activatabler   r   r   r   <module>r      s   : 
 	 2 2   ]R]]_ -   , + + 9 :=> 9 226 Kgnnd&6&6 Kr   