- Update to 0.6.0

This commit is contained in:
Deji Akingunola 2007-07-24 02:24:50 +00:00
parent 5b636d6126
commit fc2fa7fb79
4 changed files with 331 additions and 46 deletions

View File

@ -1 +1 @@
tracker-0.5.4.tar.gz
tracker-0.6.0.tar.bz2

View File

@ -1 +1 @@
724208e1b2d235148499672b44181298 tracker-0.5.4.tar.gz
c7b52531533482593ba6260603c175a3 tracker-0.6.0.tar.bz2

285
tracker-handler.py Normal file
View File

@ -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") % "<i>%(publisher)s</i>" ) + "\n<b>%(base)s</b>",
"category": "conversations",
},
"Email" : {
"description": (_("Email from %s") % "<i>%(publisher)s</i>" ) + "\n<b>%(title)s</b>",
"category": "emails",
"action" : "evolution %(uri)s",
"icon" : "stock_mail",
},
"Music" : {
"description": _("Listen to music %s\nin %s") % ("<b>%(base)s</b>", "<i>%(dir)s</i>"),
"category": "music",
},
"Documents" : {
"description": _("See document %s\nin %s") % ("<b>%(base)s</b>", "<i>%(dir)s</i>"),
"category": "documents",
},
"Development Files" : {
"description": _("Open file %s\nin %s") % ("<b>%(base)s</b>", "<i>%(dir)s</i>"),
"category": "develop",
},
"Images" : {
"description": _("View image %s\nin %s") % ("<b>%(base)s</b>", "<i>%(dir)s</i>"),
"category": "images",
},
"Videos" : {
"description": _("Watch video %s\nin %s") % ("<b>%(base)s</b>", "<i>%(dir)s</i>"),
"category": "videos",
},
"Other Files" : {
"description": _("Open file %s\nin %s") % ("<b>%(base)s</b>", "<i>%(dir)s</i>"),
"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 <b>"+self.name+"</b> 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") % ("<b>%(base)s</b>", "<i>%(dir)s</i>")
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:","")

View File

@ -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 <dakingun@gmail.com> - 0.5.4-6
- Ship both autostart desktop files in the main package (BZ #233323)
* Tue Feb 13 2007 Deji Akingunola <dakingun@gmail.com> - 0.5.4-3
- Package the deskbar plugin properly (BZ #228308)
* Mon Jul 23 2007 Deji Akingunola <dakingun@gmail.com> - 0.6.0-1
- Update to 0.6.0
* Mon Jan 29 2007 Deji Akingunola <dakingun@gmail.com> - 0.5.4-2
- Split out tracker-search-tool sub-packages, for the GUI facility