Exemple #1
0
	def __init__(self):
		gobject.GObject.__init__(self)

		self._images = []
		query = """
SELECT
	?url
	tracker:coalesce(?date1, ?date2, ?date3, '')
	?size
	(
		SELECT GROUP_CONCAT(nao:prefLabel(?tag), ' ')
		WHERE {
			?img nao:hasTag ?tag.
		}
	)
WHERE {
	?img a nfo:Image;
		nie:url ?url;
		nfo:fileSize ?size.

	OPTIONAL { ?img nie:contentCreated ?date1 }
	OPTIONAL { ?img nie:created ?date2 }
	OPTIONAL { ?img nfo:fileLastModified ?date3 }
}
		"""
		for r in tracker.query(query):
			url = str(r[0])
			date = str(r[1])
			size = int(r[2])
			tags = str(r[3]).split(' ')
			self._images.append(Image(url, tags=tags, date=date, size=size))
Exemple #2
0
	def __init__(self):
		gtk.Dialog.__init__(self, "Tags",
			None,
			gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
			(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))

		self.removing = []

		result = tracker.query(queries["all tags and counts"])
		all_tags = [(str(x[1]), int(x[2]), str(x[3])) for x in result]
		all_tags = sorted(all_tags,cmp=lambda x,y: cmp(x[1],y[1]))

		self.store = gtk.ListStore(str,int,str)
		view = gtk.TreeView(self.store)
		view.set_headers_visible(True)
		renderer = gtk.CellRendererText()
		column_titles = ["Tag", "Nr. of Files","Description"]
		for title,idx in zip(column_titles,range(len(column_titles))):
			col = gtk.TreeViewColumn(title,renderer,text=idx)
			col.set_resizable(True)
			col.set_sort_column_id(idx)
			view.append_column(col)
		scroll = gtk.ScrolledWindow()
		scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
		scroll.add(view)
		self.vbox.pack_start(scroll)

		for tag, freq, descr in all_tags:
			self.store.append((tag, freq, descr))

		self.show_all()

		response = self.run()

		self.destroy()
Exemple #3
0
	def __init__(self,paths,store):
		gtk.Dialog.__init__(self, "Tags",
			None,
			gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
			(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))

		self.store = store

		self.removing = []

		result = tracker.query(queries["all tags and counts"])
		all_tags = [(str(x[1]), int(x[2])) for x in result]
		all_tags = sorted(all_tags,cmp=lambda x,y: cmp(x[1],y[1]))

		self.entry = gtk.Entry()
		completion = gtk.EntryCompletion()
		self.entry.set_completion(completion)
		self.entry.connect("activate",self._entry_activate)
		comp_store = gtk.ListStore(str)
		completion.set_model(comp_store)
		completion.set_text_column(0)
		completion.set_inline_selection(False)
		completion.set_inline_completion(False)
		completion.set_match_func(self._match_func,None)
		completion.connect("match-selected",self._match_selected)
		completion.connect("cursor-on-match",lambda c,m,i: None)
		completion.connect("insert-prefix",lambda c,p: None)
		for tag,freq in all_tags:
			comp_store.append([tag])
		self.vbox.pack_start(self.entry)
		self.entry.show()

		common_tags = []
		for path in paths:
			iter =  self.store.get_iter(path)
			filename = self.store.get_value(iter,0)
			result = tracker.query(queries["tags for file"] % filename)
			file_tags = [str(x[0]) for x in result]
			if common_tags:
				common_tags = [x for x in common_tags if x in file_tags ]
			else:
				common_tags = file_tags

		for tag in common_tags:
			button = gtk.Button(label="Remove tag %s" % tag)
			button.connect("clicked",lambda b, t=tag: self._remove_tag(b,t))
			self.vbox.pack_start(button)
			button.show()

		response = self.run()

		if response == gtk.RESPONSE_ACCEPT:
			new_tags = []
			if self.entry.get_text():
				new_tags = [x.strip() for x in self.entry.get_text().split(",")]
			for path in paths:
				iter =  self.store.get_iter(path)
				filename = self.store.get_value(iter,0)
				result = tracker.query(queries["tags for file"] % filename)
				file_tags = [str(x[0]) for x in result]

				for tag in self.removing:
					tracker.update(queries["remove tag from file"] % (tag, filename))

				for tag in new_tags:
					if tag in file_tags or tag == "":
						continue
					if tag in all_tags:
						tracker.update(queries["add existing tag"] % (filename,tag))
					else:
						tracker.update(queries["add nonexisting tag"] % (tag, filename))

				result = tracker.query(queries["tags for file"] % filename)
				file_tags = [str(x[0]) for x in result]
				self.store.set(iter, 3, ", ".join(file_tags))
		self.destroy()