From ec743754ca2ad5a4b0e745eb64325a1b1ae3ec9d Mon Sep 17 00:00:00 2001 From: Tshepang Lekhonkhobe Date: Mon, 31 May 2010 07:26:09 +0200 Subject: [PATCH 3/3] TST: make history persistent --- src/tracker-search-tool/tracker-entry.gs | 38 ++++++++++++++++++++---- src/tracker-search-tool/tracker-result-grid.gs | 9 ++---- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/tracker-search-tool/tracker-entry.gs b/src/tracker-search-tool/tracker-entry.gs index 4ea9c3c..00b0633 100644 --- a/src/tracker-search-tool/tracker-entry.gs +++ b/src/tracker-search-tool/tracker-entry.gs @@ -27,10 +27,15 @@ uses /* wait 0.5s after each keystroke before performing a search */ const static RUN_DELAY : int = 500 +/* acceptable length of string for history */ +const static TOO_SHORT : int = 2 + class TrackerSearchEntry : ComboBoxEntry implements Gtk.Activatable id_invoker : uint = 0 entry : Entry history : list of string + histfilename : string + histfile : FileStream prop Query : TrackerQuery @@ -56,8 +61,21 @@ class TrackerSearchEntry : ComboBoxEntry implements Gtk.Activatable if p0 is EntryIconPosition.SECONDARY entry.text = "" + histfilename = Path.build_filename (Environment.get_user_data_dir(), + "tracker", "history", null) + var temp = "" history = new list of string + /* load history from file */ + try + FileUtils.get_contents(histfilename, out temp) + for item in temp.split("\n") + if item.len() > TOO_SHORT + prepend_text(item) + history.add(item) + except e : FileError + print (e.message) + def private entry_changed () if entry.text is null Query.SearchTerms = "" @@ -80,26 +98,34 @@ class TrackerSearchEntry : ComboBoxEntry implements Gtk.Activatable Query.SearchTerms = EscapeSparql (txt, true) + history_handler(txt) + return false + + def history_handler (text : string) /* remove leading and trailing whitespace before inserting items into * history; this avoids having both "term" and " term " in there; */ - txt = txt.strip() + var txt = text.strip() /* ensure that accented chars are represented the same way to * avoid duplicated entries in history */ txt = txt.normalize(-1, NormalizeMode.NFC) - if txt.len() > 2 - /* do not store items in history */ + if txt.len() > TOO_SHORT + + /* do not store duplicate items in history */ for item in history if txt == item - return false + return history.add(txt) prepend_text(txt) - - return false + histfile = FileStream.open(histfilename, "a") + if (FileStream.open(histfilename, "a") != null) + histfile.printf("%s\n", txt) + else + print("error: '%s' is not writable", histfilename) def sync_action_properties (action : Action) return diff --git a/src/tracker-search-tool/tracker-result-grid.gs b/src/tracker-search-tool/tracker-result-grid.gs index f1ee1ff..0941844 100644 --- a/src/tracker-search-tool/tracker-result-grid.gs +++ b/src/tracker-search-tool/tracker-result-grid.gs @@ -59,6 +59,7 @@ class TrackerResultGrid : ScrolledWindow _query.ClearSearchResults += def () store.clear () + def GetSelectedPath () : TreePath? if iconview.get_selected_items () is not null return (Gtk.TreePath) iconview.get_selected_items ().data @@ -69,8 +70,8 @@ class TrackerResultGrid : ScrolledWindow def GetSelectedUri () : weak string iter : TreeIter uri : weak string - var path = GetSelectedPath () + if path is not null store.get_iter (out iter, path) store.get (iter, ResultColumns.Uri, out uri); @@ -131,9 +132,7 @@ class TrackerResultGrid : ScrolledWindow var id = results[i] var mime = results[i+2] i += 3 - - - + if uri.has_prefix ("file://") has_results = true @@ -160,8 +159,6 @@ class TrackerResultGrid : ScrolledWindow iconview.select_path (path) - - def ActivateUri (path : TreePath) iter : TreeIter is_dir : bool = false -- 1.7.1