
    Eg                         d dl Z  e j                  dd       d dlmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlZd dlZ G d	 d
ej                         Zy)    NCvcz1.0)Gtk)trackersutils)PlaybackStatus)MarqueeLabel)TransparentButtonc                   n     e Zd ZdZ fdZd ZddZddZddZd Z	ddZ
d	 Zd
 Zd ZddZd Z xZS )PlayerControlz
    Provides info and controls for any active music or other media player.  It is a
    a direct child of the AudioPanel, and is only shown if there is an active mpris
    interface we can connect to.
    c                     t         t        |   t        j                  j
                         t        j                  | _        | j                  j                         | _
        | j                  r| j                          y y )Norientation)superr   __init__r   Orientation
HORIZONTAL
singletonsMediaPlayerWatcherwatcherget_best_playerplayerbuild_layout)self	__class__s    0/usr/share/cinnamon-screensaver/playerControl.pyr   zPlayerControl.__init__   sX    mT+8R8R+S!44ll224;;     c                 
   | j                   j                         }t        j                  t        j                  j
                        }|j                  d       t        j                  t        j                  j                        }| j                  |ddd       |j                  |ddd       |j                  t        j                  j                         t        dt        j                  j                        | _        | j                  j!                          t#        j$                         j'                  | j                  d| j(                         |j                  | j                  ddd       t        | j+                  |      t        j                  j                        | _        | j,                  j!                          t#        j$                         j'                  | j,                  d| j.                         |j                  | j,                  ddd       t        dt        j                  j                        | _        | j0                  j!                          t#        j$                         j'                  | j0                  d| j2                         |j                  | j0                  ddd       | j5                  |       t6        j8                  | j                  | j,                  | j0                  gz   t6        _        t        j                  t        j                  j                        }| j                  |ddd       |j                  t        j                  j                         t;        d	      | _        | j<                  j?                         jA                  d
       |j                  | j<                  ddd       t;        d	      | _!        | jB                  j?                         jA                  d       |jE                  | jB                  ddd       | jG                          t#        j$                         j'                  | j                   d| jH                         t#        j$                         j'                  | j                   d| jJ                         | jI                  | j                   |       | jK                  | j                          t#        j$                         j'                  | d| jL                         y )Nr   T   r   zmedia-skip-backward-symbolicclickedzmedia-skip-forward-symbolic    	tracknamealbumartiststatus-changedzmetadata-changeddestroy)'r   get_playback_statusr   Boxr   r   set_homogeneousVERTICAL
pack_start
set_valignAlignCENTERr	   IconSizeBUTTONprevious_buttonshowr   con_tracker_getconnecton_previous_clickedget_play_pause_icon_nameplay_pause_buttonon_play_pause_clickednext_buttonon_next_clickedupdate_buttonsstatusfocusWidgetsr   track_name_labelget_style_context	add_classalbum_artist_labelpack_endshow_allon_playback_status_changedon_metadata_changedon_widget_destroy)r   player_status
button_boxvboxs       r   r   zPlayerControl.build_layout   s   779 WW)C)CD
""4(ww3??#;#;<dD!,
D$2		(()01OQTQ]Q]QdQde!!#  "**4+?+?+4+/+C+C	E 	d22D$B!243P3PQ^3_adamamatat!u##%  "**4+A+A+4+/+E+E	G 	d44dD!D,-JCLLL_L_`  "**4+;+;+4+/+?+?	A 	d..dA>M*$11T5I5I595K5K595E5E5G G ww3??#;#;<dD!,		(() ,R 0//1;;KH--tT1=".r"2113==mLd--tT1=  "**4;;+;+/+J+J	L 	  "**4;;+=+/+C+C	E 	'']C  -  "**4+4+/+A+A	Cr   c                 8    | j                   j                          y N)r   go_previousr   buttondatas      r   r4   z!PlayerControl.on_previous_clickedg   s    !r   c                 8    | j                   j                          y rJ   )r   go_nextrL   s      r   r9   zPlayerControl.on_next_clickedj   s    r   c                 8    | j                   j                          y rJ   )r   
play_pauserL   s      r   r7   z#PlayerControl.on_play_pause_clickedm   s     r   c                 8    |t         j                  k(  rd}|S d}|S )Nzmedia-playback-pause-symboliczmedia-playback-start-symbolic)r   Playing)r   r;   	icon_names      r   r5   z&PlayerControl.get_play_pause_icon_namep   s*    ^+++7I  8Ir   c                 &    | j                  |       y rJ   )r:   )r   r   r;   rN   s       r   rC   z(PlayerControl.on_playback_status_changedx   s    F#r   c                 $    | j                          y)z@
        Update labels when the player metadata changes
        N)update_labels)r   r   s     r   rD   z!PlayerControl.on_metadata_changed{   s     	r   c                 B   | j                   j                  | j                  j                                | j                  j	                         }| j                  j                         }|dk7  rV|dk7  rQ| j                  j                  | j                  j	                         d| j                  j                                y|dk7  r| j                  j                  |       y|dk7  r| j                  j                  |       y| j                  j                  d       y)zR
        Construct the track and artist-album labels as well as possible.
        r!   z - N)r=   set_textr   get_track_nameget_artist_nameget_album_namer@   )r   artist_name
album_names      r   rX   zPlayerControl.update_labels   s     	&&t{{'A'A'CDkk113[[//1
"r!1##,,$++:U:U:WY]YdYdYsYsYu-vwB##,,[92##,,Z8##,,R0r   c                    | j                   j                  | j                  j                                | j                  j                  | j                  j                                | j                  j                  | j                  j                                | j                  |      }t        j                  j                  |t        j                  j                        }| j                   j                  |       y)zG
        Updates the player buttons based on the current state
        N)r6   set_sensitiver   get_can_play_pauser8   get_can_go_nextr0   get_can_go_previousr5   r   Imagenew_from_icon_namer.   r/   	set_image)r   r;   rU   images       r   r:   zPlayerControl.update_buttons   s     	,,T[[-K-K-MN&&t{{'B'B'DE**4;;+J+J+LM11&9			,,Y8K8KL((/r   c                     t        j                         j                  | j                  d| j                         t        j                         j                  | d| j
                         y )Nr$   r%   )r   r2   
disconnectr   rC   rE   )r   widgetrN   s      r   rE   zPlayerControl.on_widget_destroy   sT      "--dkk.>.2.M.M	O 	  "--d.7.2.D.D	Fr   c                     | j                   duS )z\
        Checked by the AudioPanel, whether or not this widget should be displayed.
        N)r   )r   s    r   should_showzPlayerControl.should_show   s     {{$&&r   rJ   )__name__
__module____qualname____doc__r   r   r4   r9   r7   r5   rC   rD   rX   r:   rE   rm   __classcell__)r   s   @r   r   r      sH    
 FCP"!$1$0F'r   r   )girequire_versiongi.repositoryr   datetimeutilr   r   dbusdepot.mediaPlayerWatcherr   widgets.marqueeLabelr   widgets.transparentButtonr	   r   r;   r'   r    r   r   <module>r|      sF    
   5%       7 - 7  ]'CGG ]'r   