Ejemplo n.º 1
0
import gtk
import gnome.ui
import atexit

try:
	from dockmanager.dockmanager import DockManagerItem, DockManagerSink, DOCKITEM_IFACE
	from zeitgeist.client import ZeitgeistClient
	from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation, StorageState
	from signal import signal, SIGTERM
	from sys import exit
except ImportError, e:
	exit()

try:
	CLIENT = ZeitgeistClient()
	version = [int(x) for x in CLIENT.get_version()]
	MIN_VERSION = [0, 3, 1, 0]
	if version < MIN_VERSION:
		print "PLEASE USE ZEITGEIST 0.3.1 or above"
		exit()

except RuntimeError, e:
	print "Unable to connect to Zeitgeist, won't send events. Reason: '%s'" %e
	exit()

INTERPRETATION = {
		"http://zeitgeist-project.com/schema/1.0/core#VisitEvent":"OPENED",
		"http://zeitgeist-project.com/schema/1.0/core#ModifyEvent":"SAVED",
		"http://zeitgeist-project.com/schema/1.0/core#CreateEvent":"CREATED"
		}
Ejemplo n.º 2
0
import time
import datetime
import logging

gaj_path = '/home/jendrik/projects/RedNotebook/ref/gnome-activity-journal/'
sys.path.insert(0, gaj_path)
sys.path.insert(0, os.path.join(gaj_path, 'src'))

import gtk
import gobject

try:
	import zeitgeist
	from zeitgeist.client import ZeitgeistClient
	CLIENT = ZeitgeistClient()
	if CLIENT.get_version() < [0, 3, 1, 99]:
		logging.info('Zeitgeist version too old. You need at least 0.3.2')
		zeitgeist = None
	else:
		from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation, \
										ResultType, TimeRange
		from widgets import Item
		from common import shade_gdk_color, combine_gdk_color, get_gtk_rgba
		from daywidgets import DayPartWidget
except ImportError, e:
	logging.info('Zeitgeist not available')
	zeitgeist = None
except RuntimeError, e:
	logging.error("Unable to connect to Zeitgeist: %s" % e)
	zeitgeist = None
	
Ejemplo n.º 3
0
import time
import datetime
import logging

gaj_path = '/home/jendrik/projects/RedNotebook/ref/gnome-activity-journal/'
sys.path.insert(0, gaj_path)
sys.path.insert(0, os.path.join(gaj_path, 'src'))

import gtk
import gobject

try:
    import zeitgeist
    from zeitgeist.client import ZeitgeistClient
    CLIENT = ZeitgeistClient()
    if CLIENT.get_version() < [0, 3, 1, 99]:
        logging.info('Zeitgeist version too old. You need at least 0.3.2')
        zeitgeist = None
    else:
        from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation, \
                                        ResultType, TimeRange
        from widgets import Item
        from common import shade_gdk_color, combine_gdk_color, get_gtk_rgba
        from daywidgets import DayPartWidget
except ImportError, e:
    logging.info('Zeitgeist not available')
    zeitgeist = None
except RuntimeError, e:
    logging.error("Unable to connect to Zeitgeist: %s" % e)
    zeitgeist = None
                raise SystemExit
            else:
                print _("Attempting to restart Zeitgeist...")
                self._restarted = True
                CLIENT._iface.Quit()
                self._extension.reconnect()
                return self.__getattr__(name)

try:
    CLIENT = ZeitgeistClient()
except RuntimeError, e:
    print "%s: %s" % (_("ERROR"), _("Unable to connect to Zeitgeist:"))
    print "%s" % e
    CLIENT = CLIENT_VERSION = CLIENT_EXTENSION = None
else:
    CLIENT_VERSION = CLIENT.get_version()
    CLIENT_EXTENSION = ClientExtension()

STORE = None

try:
    BUS = dbus.SessionBus()
except Exception:
    BUS = None

# Telepathy

TELEPATHY = None

# Hamster
Ejemplo n.º 5
0
class Zeitgeist(modules.ThreadedModule):


    def __init__(self):
        """ Constructor """
        handlers = {
                        consts.MSG_EVT_APP_QUIT:     self.onModUnloaded,
                        consts.MSG_EVT_NEW_TRACK:    self.onNewTrack,
                        consts.MSG_EVT_MOD_LOADED:   self.onModLoaded,
                        consts.MSG_EVT_APP_STARTED:  self.onModLoaded,
                        consts.MSG_EVT_MOD_UNLOADED: self.onModUnloaded,
                   }

        modules.ThreadedModule.__init__(self, handlers)


    # --== Message handlers ==--


    def onModLoaded(self):
        """ The module has been loaded """
        self.client = None

        try:
            from zeitgeist.client import ZeitgeistClient
            from zeitgeist.datamodel import Event

            self.client = ZeitgeistClient()
            if self.client.get_version() >= [0, 3, 2, 999]:
                self.client.register_data_source("Pogo", "Pogo", "Play your music",
                            [Event.new_for_values(actor="application://pogo.desktop")])
        except:
            logger.info('[%s] Could not create Zeitgeist client\n\n%s' % (MOD_INFO[modules.MODINFO_NAME], traceback.format_exc()))


    def onModUnloaded(self):
        """ The module has been unloaded """
        self.client = None


    def onNewTrack(self, track):
        """ Send track information to Zeitgeist """
        if self.client is None:
            return

        from zeitgeist.datamodel import Interpretation

        if hasattr(Interpretation, 'ACCESS_EVENT'):
            event_type = Interpretation.ACCESS_EVENT
        else:
            event_type = Interpretation.OPEN_EVENT

        self.send_to_zeitgeist(track, event_type)


    def send_to_zeitgeist(self, track, event_type):
        """
        Other players (e.g. Rhythmbox) log the playing of individual files, but
        we want to log albums.

        Maybe it would be better to log individual files, but then we would have
        to distinguish between Manifestation.USER_ACTIVITY and
        Manifestation.SCHEDULED_ACTIVITY.

        Another possible addition would be logging Interpretation.LEAVE_EVENT.
        """
        import mimetypes, os.path

        from zeitgeist.datamodel import Event, Subject, Interpretation, Manifestation

        mime, encoding = mimetypes.guess_type(track.getFilePath(), strict=False)

        title = track.getTitle()
        album = track.getAlbum()
        artist = track.getArtist()
        uri = track.getURI()
        origin = os.path.dirname(uri)

        # Handle "unknown" tags
        if 'unknown' in title.lower():
            title = track.getBasename()
        if 'unknown' in album.lower():
            album = ''
        if 'unknown' in artist.lower():
            artist = ''

        subject = Subject.new_for_values(
            uri            = origin,
            text           = ' - '.join([part for part in [artist, album] if part]),
            mimetype       = mime,
            manifestation  = unicode(Manifestation.FILE_DATA_OBJECT),
            interpretation = unicode(Interpretation.AUDIO),
            origin         = origin,
        )

        event = Event.new_for_values(
            actor          = "application://pogo.desktop",
            subjects       = [subject,],
            interpretation = unicode(event_type),
            timestamp      = int(time.time() * 1000),
        )

        self.client.insert_event(event)