[gnome-documents/wip/abono/sort-by: 1/2] query, view: Change the ORDER BY clause
- From: Alessandro Bono <abono src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-documents/wip/abono/sort-by: 1/2] query, view: Change the ORDER BY clause
- Date: Wed, 4 Nov 2015 22:17:06 +0000 (UTC)
commit 2852eb16d32bf66d3186ff9e71b372d2d8d88136
Author: Alessandro Bono <shadow openaliasbox org>
Date: Mon Oct 19 21:43:11 2015 +0200
query, view: Change the ORDER BY clause
src/query.js | 35 +++++++++++++++++++++++++++++------
src/trackerController.js | 19 ++++++++++++++++---
src/view.js | 19 ++++++++++---------
3 files changed, 55 insertions(+), 18 deletions(-)
---
diff --git a/src/query.js b/src/query.js
index f1dd34b..a1f09f6 100644
--- a/src/query.js
+++ b/src/query.js
@@ -19,6 +19,7 @@
*
*/
+const Gd = imports.gi.Gd;
const GdPrivate = imports.gi.GdPrivate;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
@@ -124,7 +125,7 @@ const QueryBuilder = new Lang.Class({
return whereSparql;
},
- _buildQueryInternal: function(global, flags, offsetController) {
+ _buildQueryInternal: function(global, flags, offsetController, sortFlag) {
let whereSparql = this._buildWhere(global, flags);
let tailSparql = '';
@@ -138,9 +139,31 @@ const QueryBuilder = new Lang.Class({
step = offsetController.getOffsetStep();
}
+ let sortType;
+ let sortBy;
+ switch (sortFlag) {
+ case Gd.MainColumns.PRIMARY_TEXT:
+ sortType = 'ASC';
+ sortBy = '?title';
+ break;
+ case Gd.MainColumns.SECONDARY_TEXT:
+ sortType = 'ASC';
+ sortBy = '?author';
+ break;
+ case Gd.MainColumns.MTIME:
+ sortType = 'DESC';
+ sortBy = '?mtime';
+ break;
+ default:
+ sortType = 'DESC';
+ sortBy = '?mtime';
+ break;
+ }
+
tailSparql +=
- 'ORDER BY DESC (?mtime)' +
+ 'ORDER BY ' + sortType + ' (' + sortBy + ')' +
('LIMIT %d OFFSET %d').format(step, offset);
+ log(tailSparql);
}
let sparql =
@@ -148,8 +171,8 @@ const QueryBuilder = new Lang.Class({
'nie:url(?urn) ' + // uri
'nfo:fileName(?urn)' + // filename
'nie:mimeType(?urn)' + // mimetype
- 'nie:title(?urn) ' + // title
- 'tracker:coalesce(nco:fullname(?creator), nco:fullname(?publisher), \'\') ' + // author
+ 'nie:title(?urn) AS ?title ' + // title
+ 'tracker:coalesce(nco:fullname(?creator), nco:fullname(?publisher), \'\') AS ?author ' + //
author
'tracker:coalesce(nfo:fileLastModified(?urn), nie:contentLastModified(?urn)) AS ?mtime ' + //
mtime
'nao:identifier(?urn) ' + // identifier
'rdf:type(?urn) ' + // type
@@ -168,8 +191,8 @@ const QueryBuilder = new Lang.Class({
return this._createQuery(sparql);
},
- buildGlobalQuery: function(flags, offsetController) {
- return this._createQuery(this._buildQueryInternal(true, flags, offsetController));
+ buildGlobalQuery: function(flags, offsetController, sortFlag) {
+ return this._createQuery(this._buildQueryInternal(true, flags, offsetController, sortFlag));
},
buildCountQuery: function(flags) {
diff --git a/src/trackerController.js b/src/trackerController.js
index 3a71a4c..8d88520 100644
--- a/src/trackerController.js
+++ b/src/trackerController.js
@@ -27,6 +27,7 @@ const Query = imports.query;
const Utils = imports.utils;
const WindowMode = imports.windowMode;
+const Gd = imports.gi.Gd;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const _ = imports.gettext.gettext;
@@ -120,6 +121,7 @@ const TrackerController = new Lang.Class({
this._querying = false;
this._isStarted = false;
this._refreshPending = false;
+ this._sortBy = Gd.MainColumns.MTIME;
// useful for debugging
this._lastQueryTime = 0;
@@ -272,6 +274,14 @@ const TrackerController = new Lang.Class({
this._refreshPending = true;
},
+ setSortBy: function(sortBy) {
+ if(this._sortBy == sortBy)
+ return;
+
+ this._sortBy = sortBy;
+ this._refreshInternal();
+ },
+
start: function() {
if (this._isStarted)
return;
@@ -310,7 +320,8 @@ const TrackerCollectionsController = new Lang.Class({
flags = Query.QueryFlags.COLLECTIONS;
return Application.queryBuilder.buildGlobalQuery(flags,
- Application.offsetCollectionsController);
+ Application.offsetCollectionsController,
+ this._sortBy);
},
});
@@ -328,7 +339,8 @@ const TrackerDocumentsController = new Lang.Class({
getQuery: function() {
return Application.queryBuilder.buildGlobalQuery(Query.QueryFlags.DOCUMENTS,
- Application.offsetDocumentsController);
+ Application.offsetDocumentsController,
+ this._sortBy);
},
});
@@ -367,6 +379,7 @@ const TrackerSearchController = new Lang.Class({
getQuery: function() {
return Application.queryBuilder.buildGlobalQuery(Query.QueryFlags.SEARCH,
- Application.offsetSearchController);
+ Application.offsetSearchController,
+ this._sortBy);
},
});
diff --git a/src/view.js b/src/view.js
index 969ee8e..bcc20b0 100644
--- a/src/view.js
+++ b/src/view.js
@@ -353,15 +353,6 @@ const ViewContainer = new Lang.Class({
this.view.connect('view-selection-changed',
Lang.bind(this, this._onViewSelectionChanged));
- // connect to settings change for list/grid view
- let viewSettingsId = Application.application.connect('action-state-changed::view-as',
- Lang.bind(this, this._updateTypeForSettings));
- this._updateTypeForSettings();
-
- this._sortSettingsId = Application.application.connect('action-state-changed::sort-by',
- Lang.bind(this, this._updateSortForSettings));
- this._updateSortForSettings();
-
// setup selection controller => view
Application.selectionController.connect('selection-mode-changed',
Lang.bind(this, this._onSelectionModeChanged));
@@ -404,6 +395,15 @@ const ViewContainer = new Lang.Class({
// this will create the model if we're done querying
this._onQueryStatusChanged();
+ // connect to settings change for list/grid view
+ let viewSettingsId = Application.application.connect('action-state-changed::view-as',
+ Lang.bind(this, this._updateTypeForSettings));
+ this._updateTypeForSettings();
+
+ this._sortSettingsId = Application.application.connect('action-state-changed::sort-by',
+ Lang.bind(this, this._updateSortForSettings));
+ this._updateSortForSettings();
+
this.connect('destroy', Lang.bind(this,
function() {
Application.application.disconnect(viewSettingsId);
@@ -424,6 +424,7 @@ const ViewContainer = new Lang.Class({
let sortColumn = Application.settings.get_enum('sort-by');
let sortType = sortColumn != Gd.MainColumns.MTIME ?
Gtk.SortType.ASCENDING : Gtk.SortType.DESCENDING;
+ this._trackerController.setSortBy(sortColumn);
this._model.set_sort_column_id(sortColumn, sortType);
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]