Skip to content
Snippets Groups Projects
Commit 08118d28 authored by Dicson's avatar Dicson
Browse files

NowListenPlugin added

parent 1d1822a6
No related branches found
No related tags found
No related merge requests found
from now_listen import NowListenPlugin
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="window1">
<child>
<object class="GtkVBox" id="now_listen_config_vbox">
<property name="visible">True</property>
<property name="border_width">9</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">Format string:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="format_sting">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="label" translatable="yes">%title - song name
%artist - artist
%album - album</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Legend:&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
[info]
name: Now Listen
short_name: now-listen
version: 0.1
description: Copy tune info to conversation input box, at cursor position
authors = Denis Fomin <fominde@gmail.com>
homepage = http://trac-plugins.gajim.org/wiki
# -*- coding: utf-8 -*-
import gtk
import gobject
from common import gajim
from plugins import GajimPlugin
from plugins.helpers import log_calls
from plugins.gui import GajimPluginConfigDialog
from plugins.plugin import GajimPluginException
from common import dbus_support
if dbus_support.supported:
from music_track_listener import MusicTrackListener
class NowListenPlugin(GajimPlugin):
@log_calls('NowListenPlugin')
def init(self):
self.config_dialog = NowListenPluginConfigDialog(self)
self.gui_extension_points = {'chat_control_base':
(self.connect_with_chat_control, self.disconnect_from_chat_control)}
self.config_default_values = {
'format_string': ('Now listen:"%title" by %artist from %album', '')}
self.controls = []
self.first_run = True
self.music_track_changed_signal = None
@log_calls('NowListenPlugin')
def connect_with_chat_control(self, chat_control):
#if not dbus_support.supported:
#return
if self.first_run:
# ALT + N
gtk.binding_entry_add_signal(chat_control.msg_textview,
gtk.keysyms.n, gtk.gdk.MOD1_MASK, 'mykeypress',
int, gtk.keysyms.n, gtk.gdk.ModifierType, gtk.gdk.MOD1_MASK)
self.first_run = False
self.chat_control = chat_control
control = Base(self, self.chat_control)
self.controls.append(control)
@log_calls('NowListenPlugin')
def disconnect_from_chat_control(self, chat_control):
for control in self.controls:
control.disconnect_from_chat_control()
self.controls = []
@log_calls('NowListenPlugin')
def activate(self):
if not dbus_support.supported:
raise GajimPluginException("python-dbus is missing!")
listener = MusicTrackListener.get()
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)
@log_calls('NowListenPlugin')
def deactivate(self):
if hasattr(self, 'chat_control'):
gtk.binding_entry_remove(self.chat_control.msg_textview,
gtk.keysyms.n, gtk.gdk.MOD1_MASK)
self.first_run = True
if dbus_support.supported:
listener = MusicTrackListener.get()
if self.music_track_changed_signal:
listener.disconnect(self.music_track_changed_signal)
self.music_track_changed_signal = None
def music_track_changed(self, unused_listener, music_track_info,
account=None):
is_paused = hasattr(music_track_info, 'paused') and \
music_track_info.paused == 0
if not music_track_info or is_paused:
self.artist = self.title = self.source = ''
else:
self.artist = music_track_info.artist
self.title = music_track_info.title
self.source = music_track_info.album
class Base(object):
def __init__(self, plugin, chat_control):
self.plugin = plugin
self.chat_control = chat_control
self.id_ = chat_control.msg_textview.connect('mykeypress',
self.on_insert)
self.chat_control.handlers[self.id_] = self.chat_control.msg_textview
def disconnect_from_chat_control(self):
if self.chat_control.handlers[self.id_].handler_is_connected(self.id_):
self.chat_control.handlers[self.id_].disconnect(self.id_)
del self.chat_control.handlers[self.id_]
def on_insert(self, widget, event_keyval, event_keymod):
"""
Insert text to conversation input box, at cursor position
"""
# construct event instance from binding
event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) # it's always a key-press here
event.keyval = event_keyval
event.state = event_keymod
event.time = 0 # assign current time
if event.keyval != gtk.keysyms.n:
return
if event.state != gtk.gdk.MOD1_MASK: # ALT+N
return
if self.plugin.artist == self.plugin.title == self.plugin.source == '':
tune_string = 'paused or stopped'
else:
tune_string = self.plugin.config['format_string'].replace(
'%artist', self.plugin.artist).replace(
'%title', self.plugin.title).replace('%album',self.plugin.source)
text = tune_string.rstrip() + ' '
message_buffer = self.chat_control.msg_textview.get_buffer()
message_buffer.insert_at_cursor(text)
self.chat_control.msg_textview.grab_focus()
class NowListenPluginConfigDialog(GajimPluginConfigDialog):
def init(self):
self.GTK_BUILDER_FILE_PATH = self.plugin.local_file_path(
'config_dialog.ui')
self.xml = gtk.Builder()
#self.xml.set_translation_domain(i18n.APP)
self.xml.add_objects_from_file(self.GTK_BUILDER_FILE_PATH,
['now_listen_config_vbox'])
self.config_vbox = self.xml.get_object('now_listen_config_vbox')
self.child.pack_start(self.config_vbox)
self.format_sting = self.xml.get_object('format_sting')
self.xml.connect_signals(self)
self.connect('hide', self.on_hide)
def on_run(self):
self.format_sting.set_text(self.plugin.config['format_string'])
def on_hide(self, widget):
self.plugin.config['format_string'] = self.format_sting.get_text()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment