From fc2fa7fb79329ea1b16b8d5015f62a4d4bd6c3ab Mon Sep 17 00:00:00 2001 From: Deji Akingunola Date: Tue, 24 Jul 2007 02:24:50 +0000 Subject: [PATCH] - Update to 0.6.0 --- .cvsignore | 2 +- sources | 2 +- tracker-handler.py | 285 +++++++++++++++++++++++++++++++++++++++++++++ tracker.spec | 88 +++++++------- 4 files changed, 331 insertions(+), 46 deletions(-) create mode 100644 tracker-handler.py diff --git a/.cvsignore b/.cvsignore index 1246847..258f5a6 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -tracker-0.5.4.tar.gz +tracker-0.6.0.tar.bz2 diff --git a/sources b/sources index 008a49f..548963a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -724208e1b2d235148499672b44181298 tracker-0.5.4.tar.gz +c7b52531533482593ba6260603c175a3 tracker-0.6.0.tar.bz2 diff --git a/tracker-handler.py b/tracker-handler.py new file mode 100644 index 0000000..aba8ac7 --- /dev/null +++ b/tracker-handler.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# This handler was originaly created by Mikkel Kamstrup (c) 2006 and updated by Eugenio Cutolo (eulin) +# +# This program can be distributed under the terms of the GNU GPL version 2 or later. +# See the file COPYING. +# + +import gnome +import gobject +from gettext import gettext as _ + +import re, cgi +import os.path +import dbus + +import deskbar +from deskbar.Handler import SignallingHandler +from deskbar.Match import Match + +#Edit this var for change the numer of output results +MAX_RESULTS = 10 + +def _check_requirements (): + try: + import dbus + try : + if getattr(dbus, 'version', (0,0,0)) >= (0,41,0): + import dbus.glib + + # Check that Tracker can be started via dbus activation, we will have trouble if it's not + bus = dbus.SessionBus() + proxy_obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') + dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus') + activatables = dbus_iface.ListActivatableNames() + if not "org.freedesktop.Tracker" in activatables: + return (deskbar.Handler.HANDLER_IS_NOT_APPLICABLE, "Tracker is not activatable via dbus", None) + + except: + return (deskbar.Handler.HANDLER_IS_NOT_APPLICABLE, "Python dbus.glib bindings not found.", None) + return (deskbar.Handler.HANDLER_IS_HAPPY, None, None) + except: + return (deskbar.Handler.HANDLER_IS_NOT_APPLICABLE, "Python dbus bindings not found.", None) + +HANDLERS = { + "TrackerSearchHandler" : { + "name": "Search for files using Tracker Search Tool", + "description": _("Search all of your documents (using Tracker), as you type"), + "requirements" : _check_requirements, + }, + "TrackerLiveSearchHandler" : { + "name": "Search for files using Tracker(live result)", + "description": _("Search all of your documents (using Tracker live), as you type"), + "requirements" : _check_requirements, + "categories" : { + "develop" : { + "name": _("Development Files"), + }, + "music" : { + "name": _("Music"), + }, + "images" : { + "name": _("Images"), + }, + "videos" : { + "name": _("Videos"), + }, + }, + }, +} + +#For now description param it's not used +TYPES = { + "Conversations" : { + "description": (_("See conversations %s") % "%(publisher)s" ) + "\n%(base)s", + "category": "conversations", + }, + "Email" : { + "description": (_("Email from %s") % "%(publisher)s" ) + "\n%(title)s", + "category": "emails", + "action" : "evolution %(uri)s", + "icon" : "stock_mail", + }, + "Music" : { + "description": _("Listen to music %s\nin %s") % ("%(base)s", "%(dir)s"), + "category": "music", + }, + "Documents" : { + "description": _("See document %s\nin %s") % ("%(base)s", "%(dir)s"), + "category": "documents", + }, + "Development Files" : { + "description": _("Open file %s\nin %s") % ("%(base)s", "%(dir)s"), + "category": "develop", + }, + "Images" : { + "description": _("View image %s\nin %s") % ("%(base)s", "%(dir)s"), + "category": "images", + }, + "Videos" : { + "description": _("Watch video %s\nin %s") % ("%(base)s", "%(dir)s"), + "category": "videos", + }, + "Other Files" : { + "description": _("Open file %s\nin %s") % ("%(base)s", "%(dir)s"), + "category": "files", + }, + "Extra" : { + "description": _("See more result with t-s-t"), + }, +} + + +#STATIC HANDLER--------------------------------- + +class TrackerFileMatch (Match): + def __init__(self, backend, **args): + deskbar.Match.Match.__init__(self, backend, **args) + + def action(self, text=None): + gobject.spawn_async(["tracker-search-tool", self.name], flags=gobject.SPAWN_SEARCH_PATH) + + def get_verb(self): + return _("Search "+self.name+" with Tracker Search Tool") + + def get_category (self): + return "actions" + +class TrackerSearchHandler(deskbar.Handler.Handler): + def __init__(self): + deskbar.Handler.Handler.__init__(self, ("system-search", "tracker")) + + def query(self, query): + return [TrackerFileMatch(self, name=query)] + +#LIVE HANDLER--------------------------------- + +class TrackerMoreMatch (Match): + def __init__(self, backend, qstring, category="files", **args): + Match.__init__(self, backend, **args) + self._icon = deskbar.Utils.load_icon("tracker") + self.qstring = qstring + self.category = category + + def get_verb(self): + return TYPES["Extra"]["description"] + + def get_category (self): + try: + return TYPES[self.category]["category"] + except: + pass + + def action(self, text=None): + gobject.spawn_async(["tracker-search-tool", self.qstring], flags=gobject.SPAWN_SEARCH_PATH) + +class TrackerLiveFileMatch (Match): + def __init__(self, handler,result=None, **args): + Match.__init__ (self, handler,name=result["name"], **args) + + self.result = result + self.fullpath = result['uri'] + self.init_names() + + self.result["base"] = self.base + self.result["dir"] = self.dir + + # Set the match icon + try: + self._icon = deskbar.Utils.load_icon(TYPES[result['type']]["icon"]) + except: + self._icon = deskbar.Utils.load_icon_for_file(result['uri']) + + print result + + def get_name(self, text=None): + try: + return self.result + except: + pass + + def get_verb(self): + try: + return TYPES[self.result["type"]]["description"] + except: + return _("Open file %s\nin %s") % ("%(base)s", "%(dir)s") + + def get_hash(self, text=None): + try: + return self.result['uri'] + except: + pass + + def action(self, text=None): + if TYPES[self.result["type"]].has_key("action"): + cmd = TYPES[self.result["type"]]["action"] + cmd = map(lambda arg : arg % self.result, cmd.split()) # we need this to handle spaces correctly + print "Opening Tracker hit with command:", cmd + try: + # deskbar >= 2.17 + deskbar.Utils.spawn_async(cmd) + except AttributeError: + # deskbar <= 2.16 + gobject.spawn_async(args, flags=gobject.SPAWN_SEARCH_PATH) + else: + try: + # deskbar >= 2.17 + deskbar.Utils.url_show ("file://"+cgi.escape(self.result['uri'])) + except AttributeError: + gnome.url_show("file://"+cgi.escape(self.result['uri'])) + print "Opening Tracker hit:", self.result['uri'] + + def get_category (self): + try: + return TYPES[self.result["type"]]["category"] + except: + return "files" + + def init_names (self): + #print "Parsing «%r»" % self.fullpath + dirname, filename = os.path.split(self.fullpath) + if filename == '': #We had a trailing slash + dirname, filename = os.path.split(dirname) + + #Reverse-tilde-expansion + home = os.path.normpath(os.path.expanduser('~')) + regexp = re.compile(r'^%s(/|$)' % re.escape(home)) + dirname = re.sub(regexp, r'~\1', dirname) + + self.dir = dirname + self.base = filename + + +class TrackerLiveSearchHandler(SignallingHandler): + def __init__(self): + SignallingHandler.__init__(self, "tracker") + bus = dbus.SessionBus() + self.tracker = bus.get_object('org.freedesktop.Tracker','/org/freedesktop/tracker') + self.search_iface = dbus.Interface(self.tracker, 'org.freedesktop.Tracker.Search') + self.keywords_iface = dbus.Interface(self.tracker, 'org.freedesktop.Tracker.Keywords') + self.files_iface = dbus.Interface(self.tracker, 'org.freedesktop.Tracker.Files') + self.set_delay (500) + + def recieve_hits (self, qstring, hits, max): + matches = [] + self.results = {} + + for info in hits: + output = {} + output['name'] = os.path.basename(info[0]) + output['uri'] = str(cgi.escape(info[0])) + output['type'] = info[1] + if TYPES.has_key(output['type']) == 0: + output['type'] = "Other Files" + try: + self.results[output['type']].append(output) + except: + self.results[output['type']] = [output] + + if output["type"] == "Email": + output["title"] = cgi.escape(info[3]) + output["publisher"] = cgi.escape(info[4]) + + for key in self.results.keys(): + for res in self.results[key][0:MAX_RESULTS]: + matches.append(TrackerLiveFileMatch(self,res)) + #if len(self.results[key]) > MAX_RESULTS: + # matches.append( TrackerMoreMatch(self,qstring,key) ) + self.emit_query_ready(qstring, matches) + print "Tracker response for %s, - %s hits returned, %s shown" % (qstring, len(hits), len(matches)) + + def recieve_error (self, error): + print "*** Tracker dbus error:", error + + def query (self, qstring, max): + if qstring.count("tag:") == 0: + self.search_iface.TextDetailed (-1, "Files", qstring, 0,10, reply_handler=lambda hits : self.recieve_hits(qstring, hits, max), error_handler=self.recieve_error) + self.search_iface.TextDetailed (-1, "Emails", qstring, 0,10, reply_handler=lambda hits : self.recieve_hits(qstring, hits, max), error_handler=self.recieve_error) + print "Tracker query:", qstring + else: + if self.tracker.GetVersion() == 502: + self.search_iface.Query(-1,"Files",["File.Format"],"",qstring.replace("tag:",""),"",False,0,100, reply_handler=lambda hits : self.recieve_hits(qstring, hits, max), error_handler=self.recieve_error) + elif self.tracker.GetVersion() == 503: + self.search_iface.Query(-1,"Files",["File:Mime"],"",qstring.replace("tag:",""),"",False,0,100, reply_handler=lambda hits : self.recieve_hits(qstring, hits, max), error_handler=self.recieve_error) + print "Tracker tag query:", qstring.replace("tag:","") diff --git a/tracker.spec b/tracker.spec index 811c9ad..4861f9f 100644 --- a/tracker.spec +++ b/tracker.spec @@ -1,20 +1,21 @@ -Summary: An object database, tag/metadata database, search tool and indexer -Name: tracker -Version: 0.5.4 -Release: 6%{?dist} -License: GPL -Group: Applications/System -URL: http://www.gnome.org/~jamiemcc/tracker/ -Source0: http://www.gnome.org/~jamiemcc/tracker/tracker-%{version}.tar.gz -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: gmime-devel, poppler-devel, gettext, file-devel -BuildRequires: gnome-desktop-devel, gamin-devel -BuildRequires: libexif-devel, libgsf-devel, gstreamer-devel -BuildRequires: desktop-file-utils, intltool, deskbar-applet +Summary: An object database, tag/metadata database, search tool and indexer +Name: tracker +Version: 0.6.0 +Release: 1%{?dist} +License: GPL +Group: Applications/System +URL: http://www.gnome.org/~jamiemcc/tracker/ +Source0: http://www.gnome.org/~jamiemcc/tracker/tracker-0.6.0.tar.bz2 +Source1: tracker-handler.py +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: gmime-devel, poppler-devel, gettext +BuildRequires: gnome-desktop-devel, gamin-devel +BuildRequires: libexif-devel, libgsf-devel, gstreamer-devel +BuildRequires: desktop-file-utils, intltool, deskbar-applet %if "%fedora" >= "6" -BuildRequires: sqlite-devel +BuildRequires: sqlite-devel %else -BuildRequires: dbus-devel, dbus-glib +BuildRequires: dbus-devel, dbus-glib %endif %description @@ -33,20 +34,20 @@ It has the ability to index, store, harvest metadata. retrieve and search all types of files and other first class objects %package devel -Summary: Headers for developing programs that will use %{name} -Group: Development/Libraries -Requires: %{name} = %{version}-%{release} -Requires: pkgconfig -Requires: dbus-glib-devel +Summary: Headers for developing programs that will use %{name} +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig +Requires: dbus-glib-devel %description devel This package contains the static libraries and header files needed for developing with tracker %package search-tool -Summary: Tracker search tool(s) -Group: User Interface/Desktops -Requires: %{name} = %{version}-%{release} +Summary: Tracker search tool(s) +Group: User Interface/Desktops +Requires: %{name} = %{version}-%{release} %description search-tool Graphical frontend to tracker search facilities. This has dependencies on @@ -54,36 +55,36 @@ GNOME libraries %prep %setup -q +cp -pr %{SOURCE1} python/deskbar-handler/ # remove shebangs from the python files as none should be executable scripts sed -e '/^#!\//,1 d' -i python/deskbar-handler/*.py %build %if "%fedora" >= "6" -%configure --disable-static --enable-external-sqlite +%configure --disable-static --enable-external-sqlite \ + --enable-preferences --enable-deskbar-applet %else -%configure --disable-static +%configure --disable-static --enable-preferences \ + --enable-deskbar-applet %endif # Disable rpath sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool -# make %{?_smp_mflags} fails -make +make %{?_smp_mflags} - %install rm -rf %{buildroot} -make DESTDIR=%{buildroot} \ - DESKBAR_HANDLER_DIR=%{_libdir}/deskbar-applet/handlers install +make DESTDIR=%{buildroot} install # Add an autostart for trackerd (for KDE) mkdir -p %{buildroot}%{_datadir}/autostart cp -pr trackerd.desktop %{buildroot}%{_datadir}/autostart/ -desktop-file-install --delete-original \ - --vendor="fedora" \ - --dir=%{buildroot}%{_datadir}/applications \ - %{buildroot}%{_datadir}/applications/%{name}-search-tool.desktop +desktop-file-install --delete-original \ + --vendor="fedora" \ + --dir=%{buildroot}%{_datadir}/applications \ + %{buildroot}%{_datadir}/applications/%{name}-search-tool.desktop rm -rf %{buildroot}%{_libdir}/*.la @@ -99,39 +100,38 @@ rm -rf %{buildroot} %files -f %{name}.lang %defattr(-, root, root, -) %doc AUTHORS ChangeLog COPYING NEWS README -%{_bindir}/htmless %{_bindir}/o3totxt %{_bindir}/tracker* +%exclude %{_bindir}/tracker-preferences %exclude %{_bindir}/tracker-search-tool %exclude %{_bindir}/tracker-thumbnailer %{_datadir}/tracker/ %{_datadir}/dbus-1/services/tracker.service %{_libdir}/*.so.* %{_libdir}/tracker/ -%{_mandir}/man1/tracker*.1.gz -%{_datadir}/autostart/*.desktop +%{_mandir}/*/tracker*.gz %{_sysconfdir}/xdg/autostart/trackerd.desktop %files devel %defattr(-, root, root, -) %{_includedir}/tracker* +%{_includedir}/libtracker-gtk/ %{_libdir}/*.so %{_libdir}/pkgconfig/*.pc %files search-tool %defattr(-, root, root, -) +%{_bindir}/tracker-preferences %{_bindir}/tracker-search-tool %{_bindir}/tracker-thumbnailer -%{_datadir}/pixmaps/tracker/ -%{_datadir}/applications/*.desktop %{_libdir}/deskbar-applet/handlers/*.py* +%{_datadir}/icons/*/*/apps/tracker.* +%{_datadir}/applications/*.desktop +%{_datadir}/autostart/*.desktop %changelog -* Fri Mar 30 2007 Deji Akingunola - 0.5.4-6 -- Ship both autostart desktop files in the main package (BZ #233323) - -* Tue Feb 13 2007 Deji Akingunola - 0.5.4-3 -- Package the deskbar plugin properly (BZ #228308) +* Mon Jul 23 2007 Deji Akingunola - 0.6.0-1 +- Update to 0.6.0 * Mon Jan 29 2007 Deji Akingunola - 0.5.4-2 - Split out tracker-search-tool sub-packages, for the GUI facility