def activate(self, shell): self.shell = shell self.player = shell.get_player() self.skype = SkypeRhythmboxMediator(self.got_ringHi,self.got_ringLo) self.skype.sk_hooking() self.pc_id = self.player.connect('playing-changed', self.playing_changed) self.psc_id = self.player.connect('playing-song-changed', self.song_changed) self.pspc_id = self.player.connect('playing-song-property-changed', self.song_property_changed) self.skypeEvent = False self.hist_mood = None #gui self.dialog = None self.txFormat = None self.txPause = None #for configuration self.conf_client = gconf.client_get_default() self.mood_msg = None self.pause_msg = None self.loadConfig()
class RhythmboxSkypeMoodNotifier(rb.Plugin): def __init__(self): rb.Plugin.__init__(self) def activate(self, shell): self.shell = shell self.player = shell.get_player() self.skype = SkypeRhythmboxMediator(self.got_ringHi,self.got_ringLo) self.skype.sk_hooking() self.pc_id = self.player.connect('playing-changed', self.playing_changed) self.psc_id = self.player.connect('playing-song-changed', self.song_changed) self.pspc_id = self.player.connect('playing-song-property-changed', self.song_property_changed) self.skypeEvent = False self.hist_mood = None #gui self.dialog = None self.txFormat = None self.txPause = None #for configuration self.conf_client = gconf.client_get_default() self.mood_msg = None self.pause_msg = None self.loadConfig() def deactivate(self,shell): self.skype.setMood(self.skype.getOldMood()) if(self.skype): self.skype.sk_unHooking() self.skype.deref() if(self.player): self.player = None self.shell.get_player().disconnect (self.pspc_id) self.shell.get_player().disconnect (self.psc_id) self.shell.get_player().disconnect (self.pc_id) self.hist_mood = None del self.skypeEvent del self.pspc_id del self.psc_id del self.pc_id del self.shell del self.player del self.skype #gui del self.dialog del self.txFormat del self.txPause #for configuration del self.conf_client del self.mood_msg del self.pause_msg # routine returns: # 1 : play # 2 : stop # 3 : paused def playerStatus(self): retval = 0 if self.player.props.playing : retval = 1 else : entry = self.player.get_playing_entry() if entry is None : retval = 2 else : retval = 3 return retval def got_ringHi(self) : # toggle pause here so that # it won't garbage in gaat inspection self.player.pause() self.skypeEvent = True def got_ringLo(self) : self.skypeEvent = False self.player.play() def playing_changed(self, player, playing) : db = self.shell.get_property('db') entry = player.get_playing_entry() self.gaat(db,entry) def song_changed(self, player, entry): db = self.shell.get_property('db') self.gaat(db,entry) def song_property_changed(self, player, uri, prop, old_val, new_val): db = self.shell.get_property('db') entry = player.get_playing_entry() self.gaat(db,entry) # Get Attributes And Transform # a single point of entry where we manipulate # everything to simplify modifications in the # future def gaat(self,db, entry): if db is None : self.skype.setMood(self.skype.getOldMood()) return if entry is None: self.skype.setMood(self.skype.getOldMood()) return artist = None album = None title = None #experimental from :: Library - Radio station = None artist = db.entry_get(entry, rhythmdb.PROP_ARTIST) album = db.entry_get(entry, rhythmdb.PROP_ALBUM) title = db.entry_get(entry, rhythmdb.PROP_TITLE) #TODO:find a nice solution to this one # quick and dirty hack for ubuntu 10.10 netbook if hasattr(entry.get_entry_type(), 'props') : if (entry.get_entry_type().props.category == rhythmdb.ENTRY_STREAM) : station = title artist = db.entry_request_extra_metadata(entry,STRM_SONG_ARTIST) album = db.entry_request_extra_metadata(entry,STRM_SONG_ALBUM) title = db.entry_request_extra_metadata(entry,STRM_SONG_TITLE) else : if (entry.get_entry_type().category == rhythmdb.ENTRY_STREAM) : station = title artist = db.entry_request_extra_metadata(entry,STRM_SONG_ARTIST) album = db.entry_request_extra_metadata(entry,STRM_SONG_ALBUM) title = db.entry_request_extra_metadata(entry,STRM_SONG_TITLE) #filter input by using cgi.escape #proposed fix for issue 01 @ github by koze artist = cgi.escape(artist) album = cgi.escape(album) title = cgi.escape(title) formatted_mood = self.format_resp(artist, title, album) if (station is not None) : formatted_mood = "%s :: %s" % (station,formatted_mood) if (self.skypeEvent and self.playerStatus() == 1 ) : self.skype.fSetMood(formatted_mood) self.hist_mood = formatted_mood self.skypeEvent = False return if self.playerStatus() == 1 : pass if self.playerStatus() == 2 : formatted_mood = self.skype.getOldMood() elif self.playerStatus() == 3 : formatted_mood = self.pause_msg if not (self.hist_mood == formatted_mood) : self.skype.setMood(formatted_mood) self.hist_mood = formatted_mood self.skypeEvent = False return def format_resp(self, artist, title, album): retval = Template(self.mood_msg) if artist is None : artist = '' if title is None : title = '' if album is None : album = '' return retval.substitute(TITLE=title, ARTIST=artist, ALBUM=album) def create_configure_dialog(self, dialog=None): axdic = { 'on_btnCancel_clicked' : self.hideDialog, 'on_btnSave_clicked' : self.saveConfigFromDialog } if not dialog: glade_file = self.find_file("pref.dialog") gladexml = gtk.glade.XML(glade_file) gladexml.signal_autoconnect(axdic) self.dialog = gladexml.get_widget('dialog1') self.txFormat = gladexml.get_widget('txFormat') self.txPause = gladexml.get_widget('txPause') if self.mood_msg is None : self.mood_msg = CONF_VAL_DEFAULT_MOOD if self.pause_msg is None : self.mood_msg = CONF_VAL_DEFAULT_PAUSE self.txFormat.set_text(self.mood_msg) self.txPause.set_text(self.pause_msg) return self.dialog def loadConfig(self): self.mood_msg = self.conf_client.get_string(CONF_KEY_MOOD) self.pause_msg = self.conf_client.get_string(CONF_KEY_PAUSE) if self.mood_msg is None: self.conf_client.add_dir(CONF_KEY_MOOD,gconf.CLIENT_PRELOAD_NONE) self.conf_client.set_string(CONF_KEY_MOOD,CONF_VAL_DEFAULT_MOOD) self.mood_msg = self.conf_client.get_string(CONF_KEY_MOOD) if self.pause_msg is None: self.conf_client.add_dir(CONF_KEY_PAUSE,gconf.CLIENT_PRELOAD_NONE) self.conf_client.set_string(CONF_KEY_PAUSE,CONF_VAL_DEFAULT_PAUSE) self.pause_msg = self.conf_client.get_string(CONF_KEY_PAUSE) #load listeners self.conf_client.notify_add(CONF_KEY_MOOD,self.newMoodSetup) self.conf_client.notify_add(CONF_KEY_PAUSE,self.newPauseSetup) def newMoodSetup(self, client, *args, **kwargs): self.mood_msg = client.get_string(CONF_KEY_MOOD) def newPauseSetup(self, client, *args, **kwargs): self.pause_msg = client.get_string(CONF_KEY_PAUSE) def saveConfigFromDialog(self,widget): self.conf_client.set_string(CONF_KEY_MOOD,self.txFormat.get_text()) self.conf_client.set_string(CONF_KEY_PAUSE,self.txPause.get_text()) self.dialog.hide() def hideDialog(self,widget): self.dialog.hide()