move music track listener things from roster_window.py to gajim.py. see #3643

This commit is contained in:
Yann Leboulanger 2009-09-09 13:26:53 +02:00
parent 377a777823
commit 44e98585ed
4 changed files with 55 additions and 56 deletions

View File

@ -219,7 +219,7 @@ class Connection(ConnectionHandlers):
# We are doing disconnect at so many places, better use one function in all # We are doing disconnect at so many places, better use one function in all
def disconnect(self, on_purpose=False): def disconnect(self, on_purpose=False):
gajim.interface.roster.music_track_changed(None, None, self.name) gajim.interface.music_track_changed(None, None, self.name)
self.on_purpose = on_purpose self.on_purpose = on_purpose
self.connected = 0 self.connected = 0
self.time_to_reconnect = None self.time_to_reconnect = None

View File

@ -899,8 +899,8 @@ class ConnectionDisco:
track = listener.get_playing_track() track = listener.get_playing_track()
if gajim.config.get_per('accounts', self.name, if gajim.config.get_per('accounts', self.name,
'publish_tune'): 'publish_tune'):
gajim.interface.roster.music_track_changed(listener, gajim.interface.music_track_changed(listener, track,
track, self.name) self.name)
break break
if features.__contains__(common.xmpp.NS_VCARD): if features.__contains__(common.xmpp.NS_VCARD):
self.vcard_supported = True self.vcard_supported = True

View File

@ -156,6 +156,7 @@ except exceptions.DatabaseMalformed:
else: else:
from common import dbus_support from common import dbus_support
if dbus_support.supported: if dbus_support.supported:
from music_track_listener import MusicTrackListener
import dbus import dbus
if os.name == 'posix': # dl module is Unix Only if os.name == 'posix': # dl module is Unix Only
@ -243,6 +244,7 @@ from common import helpers
from common import optparser from common import optparser
from common import dataforms from common import dataforms
from common import passwords from common import passwords
from common import pep
gajimpaths = common.configpaths.gajimpaths gajimpaths = common.configpaths.gajimpaths
@ -2961,6 +2963,48 @@ class Interface:
### Other Methods ### Other Methods
################################################################################ ################################################################################
def enable_music_listener(self):
if not self.music_track_changed_signal:
listener = MusicTrackListener.get()
self.music_track_changed_signal = listener.connect(
'music-track-changed', self.music_track_changed)
track = listener.get_playing_track()
self.music_track_changed(listener, track)
def disable_music_listener(self):
listener = MusicTrackListener.get()
listener.disconnect(self.music_track_changed_signal)
self.music_track_changed_signal = None
def music_track_changed(self, unused_listener, music_track_info, account=''):
if account == '':
accounts = gajim.connections.keys()
else:
accounts = [account]
if music_track_info is None:
artist = ''
title = ''
source = ''
elif hasattr(music_track_info, 'paused') and music_track_info.paused == 0:
artist = ''
title = ''
source = ''
else:
artist = music_track_info.artist
title = music_track_info.title
source = music_track_info.album
for acct in accounts:
if acct not in gajim.connections:
continue
if not gajim.account_is_connected(acct):
continue
if not gajim.connections[acct].pep_supported:
continue
if gajim.connections[acct].music_track_info == music_track_info:
continue
pep.user_send_tune(acct, artist, title, source)
gajim.connections[acct].music_track_info = music_track_info
def read_sleepy(self): def read_sleepy(self):
'''Check idle status and change that status if needed''' '''Check idle status and change that status if needed'''
if not self.sleeper.poll(): if not self.sleeper.poll():
@ -3516,6 +3560,12 @@ class Interface:
except Exception: except Exception:
pass pass
gobject.timeout_add_seconds(5, remote_init) gobject.timeout_add_seconds(5, remote_init)
self.music_track_changed_signal = None
for account in gajim.connections:
if gajim.config.get_per('accounts', account, 'publish_tune') and \
dbus_support.supported:
self.enable_music_listener()
break
if __name__ == '__main__': if __name__ == '__main__':
def sigint_cb(num, stack): def sigint_cb(num, stack):

View File

@ -62,7 +62,6 @@ from message_window import MessageWindowMgr
from common import dbus_support from common import dbus_support
if dbus_support.supported: if dbus_support.supported:
from music_track_listener import MusicTrackListener
import dbus import dbus
from common.xmpp.protocol import NS_COMMANDS, NS_FILE, NS_MUC from common.xmpp.protocol import NS_COMMANDS, NS_FILE, NS_MUC
@ -1762,38 +1761,6 @@ class RosterWindow:
except Exception: except Exception:
pass pass
def music_track_changed(self, unused_listener, music_track_info,
account=''):
if account == '':
accounts = gajim.connections.keys()
if music_track_info is None:
artist = ''
title = ''
source = ''
elif hasattr(music_track_info, 'paused') and music_track_info.paused == 0:
artist = ''
title = ''
source = ''
else:
artist = music_track_info.artist
title = music_track_info.title
source = music_track_info.album
if account == '':
for account in accounts:
if not gajim.account_is_connected(account):
continue
if not gajim.connections[account].pep_supported:
continue
if gajim.connections[account].music_track_info == music_track_info:
continue
pep.user_send_tune(account, artist, title, source)
gajim.connections[account].music_track_info = music_track_info
elif account in gajim.connections and \
gajim.connections[account].pep_supported:
if gajim.connections[account].music_track_info != music_track_info:
pep.user_send_tune(account, artist, title, source)
gajim.connections[account].music_track_info = music_track_info
def connected_rooms(self, account): def connected_rooms(self, account):
if account in gajim.gc_connected[account].values(): if account in gajim.gc_connected[account].values():
return True return True
@ -3354,21 +3321,14 @@ class RosterWindow:
act = widget.get_active() act = widget.get_active()
gajim.config.set_per('accounts', account, 'publish_tune', act) gajim.config.set_per('accounts', account, 'publish_tune', act)
if act: if act:
listener = MusicTrackListener.get() gajim.interface.enable_music_listener()
if not self.music_track_changed_signal:
self.music_track_changed_signal = listener.connect(
'music-track-changed', self.music_track_changed)
track = listener.get_playing_track()
self.music_track_changed(listener, track)
else: else:
# disable it only if no other account use it # disable it only if no other account use it
for acct in gajim.connections: for acct in gajim.connections:
if gajim.config.get_per('accounts', acct, 'publish_tune'): if gajim.config.get_per('accounts', acct, 'publish_tune'):
break break
else: else:
listener = MusicTrackListener.get() gajim.interface.disable_music_listener()
listener.disconnect(self.music_track_changed_signal)
self.music_track_changed_signal = None
if gajim.connections[account].pep_supported: if gajim.connections[account].pep_supported:
# As many implementations don't support retracting items, we send a # As many implementations don't support retracting items, we send a
@ -6190,7 +6150,6 @@ class RosterWindow:
self.xml = gtkgui_helpers.get_glade('roster_window.glade') self.xml = gtkgui_helpers.get_glade('roster_window.glade')
self.window = self.xml.get_widget('roster_window') self.window = self.xml.get_widget('roster_window')
self.hpaned = self.xml.get_widget('roster_hpaned') self.hpaned = self.xml.get_widget('roster_hpaned')
self.music_track_changed_signal = None
gajim.interface.msg_win_mgr = MessageWindowMgr(self.window, self.hpaned) gajim.interface.msg_win_mgr = MessageWindowMgr(self.window, self.hpaned)
gajim.interface.msg_win_mgr.connect('window-delete', gajim.interface.msg_win_mgr.connect('window-delete',
self.on_message_window_delete) self.on_message_window_delete)
@ -6411,16 +6370,6 @@ class RosterWindow:
self._toggeling_row = False self._toggeling_row = False
self.setup_and_draw_roster() self.setup_and_draw_roster()
for account in gajim.connections:
if gajim.config.get_per('accounts', account, 'publish_tune') and \
dbus_support.supported:
listener = MusicTrackListener.get()
self.music_track_changed_signal = listener.connect(
'music-track-changed', self.music_track_changed)
track = listener.get_playing_track()
self.music_track_changed(listener, track)
break
if gajim.config.get('show_roster_on_startup'): if gajim.config.get('show_roster_on_startup'):
self.window.show_all() self.window.show_all()
else: else: