Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Fomin <fominde@gmail.com>2011-10-02 00:25:01 +0400
committerDenis Fomin <fominde@gmail.com>2011-10-02 00:25:01 +0400
commitb41ce1722f49051c4693c703f4035caa96a083e5 (patch)
tree9b7940529e88205976724ea80195df446d49a283 /hamster
parent585a4fdea4a24071bc5181046f9a8708c2a6d07d (diff)
Hamster plugin added
Diffstat (limited to 'hamster')
-rw-r--r--hamster/__init__.py1
-rw-r--r--hamster/hamster.py112
-rw-r--r--hamster/manifest.ini9
3 files changed, 122 insertions, 0 deletions
diff --git a/hamster/__init__.py b/hamster/__init__.py
new file mode 100644
index 0000000..42f5779
--- /dev/null
+++ b/hamster/__init__.py
@@ -0,0 +1 @@
+from hamster import HamsterIntegrationPlugin
diff --git a/hamster/hamster.py b/hamster/hamster.py
new file mode 100644
index 0000000..c720db2
--- /dev/null
+++ b/hamster/hamster.py
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+
+import dbus
+import gobject
+import datetime as dt
+from common import gajim
+from common import ged
+from common import dbus_support
+
+from plugins import GajimPlugin
+from plugins.helpers import log_calls, log
+from common.pep import ACTIVITIES
+
+HAMSTAER_INTERFACE = 'org.gnome.Hamster'
+SUBACTIVITIES = []
+subactivity_ = [ACTIVITIES[x].keys() for x in ACTIVITIES.keys()]
+for x in subactivity_ :
+ SUBACTIVITIES = SUBACTIVITIES + x
+SUBACTIVITIES = set(SUBACTIVITIES)
+SUBACTIVITIES.remove('category')
+XMPP_ACTIVITIES = set(ACTIVITIES.keys())
+
+class HamsterIntegrationPlugin(GajimPlugin):
+
+ @log_calls('HamsterIntegrationPlugin')
+ def init(self):
+ self.description = _('Integration with project hamster\n'
+ 'see https://trac.gajim.org/ticket/6993\n'
+ 'and http://projecthamster.wordpress.com/about/')
+ self.config_dialog = None
+ self.events_handlers = {}
+
+ @log_calls('HamsterIntegrationPlugin')
+ def activate(self):
+ if not dbus_support.supported:
+ return
+
+ self.bus = dbus_support.session_bus.SessionBus()
+ try:
+ self.session_presence = self.bus.get_object(HAMSTAER_INTERFACE,
+ '/org/gnome/Hamster')
+ except:
+ gajim.log.debug('Hamster D-Bus service not found')
+ return
+
+ self.active = True
+ self.bus.add_signal_receiver(self.hamster_facts_changed, 'FactsChanged',
+ HAMSTAER_INTERFACE)
+ gajim.ged.register_event_handler('our-show', ged.POSTGUI,
+ self.on_our_status)
+ self.pep_dict ={}
+
+ @log_calls('HamsterIntegrationPlugin')
+ def deactivate(self):
+ if not dbus_support.supported or not self.active:
+ return
+
+ self.active = False
+ self.bus.remove_signal_receiver(self.hamster_facts_changed, "FactsChanged",
+ dbus_interface=HAMSTAER_INTERFACE)
+
+ def hamster_facts_changed(self, *args, **kw):
+ # get hamster tags
+ facts = self.session_presence.GetTodaysFacts(
+ dbus_interface=HAMSTAER_INTERFACE)
+
+ if self.from_dbus_fact(facts[-1])['end_time']:
+ accounts = gajim.connections.keys()
+ for account in accounts:
+ if gajim.account_is_connected(account):
+ connection = gajim.connections[account]
+ connection.retract_activity()
+ return
+
+ last_fact = self.from_dbus_fact(facts[-1])
+ tags = set(last_fact['tags'])
+
+ activity = "Other"
+ activity_candidates = XMPP_ACTIVITIES.intersection(tags)
+ if len(activity_candidates) >= 1:
+ activity=list(activity_candidates)[0]
+ subactivity = 'other'
+ subactivity_candidates = SUBACTIVITIES.intersection(tags)
+ if len(subactivity_candidates) >= 1:
+ subactivity=list(subactivity_candidates)[0]
+
+ # send activity
+ accounts = gajim.connections.keys()
+ for account in accounts:
+ if gajim.account_is_connected(account):
+ connection = gajim.connections[account]
+ connection.send_activity(activity, subactivity,
+ last_fact['fact'])
+
+ def from_dbus_fact(self, fact):
+ '''unpack the struct into a proper dict'''
+ return dict(fact = fact[4],
+ start_time = dt.datetime.utcfromtimestamp(fact[1]),
+ end_time = dt.datetime.utcfromtimestamp(fact[2]) if fact[2] else None,
+ description = fact[3],
+ activity_id = fact[5],
+ category = fact[6],
+ tags = fact[7],
+ date = dt.datetime.utcfromtimestamp(fact[8]).date(),
+ delta = dt.timedelta(days = fact[9] // (24 * 60 * 60),
+ seconds = fact[9] % (24 * 60 * 60)),
+ id = fact[0])
+
+ def on_our_status(self, network_event):
+ gajim.ged.remove_event_handler('our-show', ged.POSTGUI,
+ self.on_our_status)
+ gobject.timeout_add(10000, self.hamster_facts_changed)
diff --git a/hamster/manifest.ini b/hamster/manifest.ini
new file mode 100644
index 0000000..f9e457d
--- /dev/null
+++ b/hamster/manifest.ini
@@ -0,0 +1,9 @@
+[info]
+name: Hamstar integration
+short_name: hamstar_integration
+version: 0.1
+description: Integration with project hamster
+ see https://trac.gajim.org/ticket/6993
+ and http://projecthamster.wordpress.com/about/
+authors: Denis Fomin <fominde@gmail.com>
+homepage: http://trac-plugins.gajim.org/wiki/