[gnome-documents] query: use arrays and join() to simplify code



commit 0ab456521533881749639ae35a4b57785454a75b
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Wed Nov 14 11:26:12 2012 -0500

    query: use arrays and join() to simplify code
    
    Instead of appending && and || manually.

 src/query.js   |   52 ++++++++++++++++++----------------------------------
 src/sources.js |   16 ++++++++++------
 2 files changed, 28 insertions(+), 40 deletions(-)
---
diff --git a/src/query.js b/src/query.js
index ba66f50..f4be70b 100644
--- a/src/query.js
+++ b/src/query.js
@@ -65,69 +65,53 @@ const QueryBuilder = new Lang.Class({
 
     buildFilterLocal: function() {
         let path;
-        let desktopURI;
-        let downloadsURI;
-        let documentsURI;
+        let filters = [];
 
         path = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP);
         if (path)
-            desktopURI = Gio.file_new_for_path(path).get_uri();
-        else
-            desktopURI = '';
+            filters.push('(fn:contains (nie:url(?urn), "%s"))'.format(Gio.file_new_for_path(path).get_uri()));
 
         path = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOCUMENTS);
         if (path)
-            documentsURI = Gio.file_new_for_path(path).get_uri();
-        else
-            documentsURI = '';
+            filters.push('(fn:contains (nie:url(?urn), "%s"))'.format(Gio.file_new_for_path(path).get_uri()));
 
         path = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD);
         if (path)
-            downloadsURI = Gio.file_new_for_path(path).get_uri();
-        else
-            downloadsURI = '';
+            filters.push('(fn:contains (nie:url(?urn), "%s"))'.format(Gio.file_new_for_path(path).get_uri()));
 
-        let filter =
-            ('((fn:contains (nie:url(?urn), "%s")) || ' +
-             ' (fn:contains (nie:url(?urn), "%s")) || ' +
-             ' (fn:contains (nie:url(?urn), "%s")) || ' +
-             ' (fn:starts-with (nao:identifier(?urn), "gd:collection:local:")))').format(desktopURI, documentsURI, downloadsURI);
+        filters.push('(fn:starts-with (nao:identifier(?urn), "gd:collection:local:"))');
 
-        return filter;
+        return '(' + filters.join(' || ') + ')';
     },
 
     buildFilterNotLocal: function() {
-        let sparql = '(';
+        if (Global.sourceManager.getItemsCount() == 0)
+            return '(false)';
+
         let sources = Global.sourceManager.getItems();
+        let filters = [];
 
         for (idx in sources) {
             let source = sources[idx];
             if (!source.builtin)
-                sparql += source.getFilter() + ' || ';
+                filters.push(source.getFilter());
         }
 
-        sparql += 'false)';
-
-        return sparql;
+        return '(' + filters.join(' || ') + ')';
     },
 
     _buildFilterString: function(currentType) {
-        let sparql = 'FILTER (';
+        let filters = [];
 
-        sparql += Global.searchMatchManager.getFilter();
-        sparql += ' && ';
-        sparql += Global.sourceManager.getFilter();
-        sparql += ' && ';
-        sparql += Global.searchCategoryManager.getFilter();
+        filters.push(Global.searchMatchManager.getFilter());
+        filters.push(Global.sourceManager.getFilter());
+        filters.push(Global.searchCategoryManager.getFilter());
 
         if (currentType) {
-            sparql += ' && ';
-            sparql += currentType.getFilter();
+            filters.push(currentType.getFilter());
         }
 
-        sparql += ')';
-
-        return sparql;
+        return 'FILTER (' + filters.join(' && ') + ')';
     },
 
     _buildOptional: function() {
diff --git a/src/sources.js b/src/sources.js
index c42c31b..93f8e2b 100644
--- a/src/sources.js
+++ b/src/sources.js
@@ -57,14 +57,18 @@ const Source = new Lang.Class({
     },
 
     getFilter: function() {
-        if (this.id == SourceStock.LOCAL)
-            return Global.queryBuilder.buildFilterLocal();
+        let filters = [];
 
-        if (this.id == SourceStock.ALL)
-            return '(' + Global.queryBuilder.buildFilterLocal() + ' || '
-                    + Global.queryBuilder.buildFilterNotLocal() + ')';
+        if (this.id == SourceStock.LOCAL) {
+            filters.push(Global.queryBuilder.buildFilterLocal());
+        } else if (this.id == SourceStock.ALL) {
+            filters.push(Global.queryBuilder.buildFilterLocal());
+            filters.push(Global.queryBuilder.buildFilterNotLocal());
+        } else {
+            filters.push(this._buildFilterResource());
+        }
 
-        return this._buildFilterResource();
+        return '(' + filters.join(' || ') + ')';
     },
 
     _buildFilterResource: function() {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]