Add sorting options in the articles list
parent
779639baf1
commit
64eddbadc6
|
@ -54,4 +54,6 @@ DISTFILES += \
|
||||||
qml/types/ServerSettings.qml \
|
qml/types/ServerSettings.qml \
|
||||||
rpm/harbour-wallaread.changes \
|
rpm/harbour-wallaread.changes \
|
||||||
qml/pages/ServerPageShowDialog.qml \
|
qml/pages/ServerPageShowDialog.qml \
|
||||||
qml/types/ServerPageShowPreferences.qml
|
qml/types/ServerPageShowPreferences.qml \
|
||||||
|
qml/types/ServerPageSortPreferences.qml \
|
||||||
|
qml/pages/ServerPageSortDialog.qml
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
.import QtQuick.LocalStorage 2.0 as Storage
|
.import QtQuick.LocalStorage 2.0 as Storage
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Exposed variable
|
Exposed variables
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var ArticlesFilter = {
|
var ArticlesFilter = {
|
||||||
|
@ -32,6 +32,12 @@ var ArticlesFilter = {
|
||||||
Starred: 4
|
Starred: 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ArticlesSort = {
|
||||||
|
Created: 1,
|
||||||
|
Updated: 2,
|
||||||
|
Domain: 3
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Timer management, used for the various setTimeout() calls
|
Timer management, used for the various setTimeout() calls
|
||||||
*/
|
*/
|
||||||
|
@ -380,7 +386,7 @@ function syncDeletedArticles( props, cb )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getArticles( serverId, cb, filter )
|
function getArticles( serverId, cb, filter, sortOrder, sortAsc )
|
||||||
{
|
{
|
||||||
var db = getDatabase();
|
var db = getDatabase();
|
||||||
|
|
||||||
|
@ -389,6 +395,7 @@ function getArticles( serverId, cb, filter )
|
||||||
var articles = new Array
|
var articles = new Array
|
||||||
var err = null;
|
var err = null;
|
||||||
var where = "";
|
var where = "";
|
||||||
|
var order = "";
|
||||||
|
|
||||||
if ( filter & ArticlesFilter.Read )
|
if ( filter & ArticlesFilter.Read )
|
||||||
where += " AND archived=1";
|
where += " AND archived=1";
|
||||||
|
@ -398,8 +405,22 @@ function getArticles( serverId, cb, filter )
|
||||||
if ( filter & ArticlesFilter.Starred )
|
if ( filter & ArticlesFilter.Starred )
|
||||||
where += " AND starred=1";
|
where += " AND starred=1";
|
||||||
|
|
||||||
|
if ( sortOrder === ArticlesSort.Created )
|
||||||
|
order = " ORDER BY created";
|
||||||
|
else if ( sortOrder === ArticlesSort.Updated )
|
||||||
|
order = " ORDER BY updated"
|
||||||
|
else if ( sortOrder === ArticlesSort.Domain )
|
||||||
|
order = " ORDER BY domain"
|
||||||
|
|
||||||
|
if ( order.length > 0 ) {
|
||||||
|
if ( sortAsc )
|
||||||
|
order += " ASC"
|
||||||
|
else
|
||||||
|
order += " DESC"
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var res = tx.executeSql( "SELECT * FROM articles WHERE server=?" + where, [ serverId ] );
|
var res = tx.executeSql( "SELECT * FROM articles WHERE server=?" + where + order, [ serverId ] );
|
||||||
for ( var i = 0; i < res.rows.length; ++i ) {
|
for ( var i = 0; i < res.rows.length; ++i ) {
|
||||||
articles.push( res.rows[i] );
|
articles.push( res.rows[i] );
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ ListModel {
|
||||||
property bool showAll: false
|
property bool showAll: false
|
||||||
property bool showRead: false
|
property bool showRead: false
|
||||||
property bool showStarred: false
|
property bool showStarred: false
|
||||||
|
property int sortOrder: WallaBase.ArticlesSort.Created
|
||||||
|
property bool sortAsc: true
|
||||||
|
|
||||||
signal error( string message )
|
signal error( string message )
|
||||||
|
|
||||||
|
@ -48,7 +50,7 @@ ListModel {
|
||||||
filter |= WallaBase.ArticlesFilter.Starred
|
filter |= WallaBase.ArticlesFilter.Starred
|
||||||
}
|
}
|
||||||
|
|
||||||
WallaBase.getArticles( serverId, onArticlesLoaded, filter )
|
WallaBase.getArticles( serverId, onArticlesLoaded, filter, sortOrder, sortAsc )
|
||||||
}
|
}
|
||||||
|
|
||||||
function onArticlesLoaded( articles, err ) {
|
function onArticlesLoaded( articles, err ) {
|
||||||
|
|
|
@ -32,7 +32,6 @@ Page {
|
||||||
|
|
||||||
property int serverId
|
property int serverId
|
||||||
property alias server: server
|
property alias server: server
|
||||||
property alias showPreferences: showPreferences
|
|
||||||
|
|
||||||
Server {
|
Server {
|
||||||
id: server
|
id: server
|
||||||
|
@ -51,6 +50,10 @@ Page {
|
||||||
id: showPreferences
|
id: showPreferences
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ServerPageSortPreferences {
|
||||||
|
id: sortPreferences
|
||||||
|
}
|
||||||
|
|
||||||
ArticlesModel {
|
ArticlesModel {
|
||||||
id: articlesModel
|
id: articlesModel
|
||||||
|
|
||||||
|
@ -273,6 +276,18 @@ Page {
|
||||||
model: articlesModel
|
model: articlesModel
|
||||||
|
|
||||||
PullDownMenu {
|
PullDownMenu {
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr( "Sort: " ) + sortPreferences.getVisibleDescription()
|
||||||
|
onClicked: {
|
||||||
|
var dlg = pageStack.push( Qt.resolvedUrl( "ServerPageSortDialog.qml" ), { preferences: sortPreferences } )
|
||||||
|
dlg.accepted.connect ( function() {
|
||||||
|
articlesModel.sortOrder = sortPreferences.sortOrder
|
||||||
|
articlesModel.sortAsc = sortPreferences.sortAsc
|
||||||
|
serverPage.updateArticlesList()
|
||||||
|
} )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MenuItem {
|
MenuItem {
|
||||||
text: qsTr( "Show: " ) + showPreferences.getVisibleDescription()
|
text: qsTr( "Show: " ) + showPreferences.getVisibleDescription()
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* WallaRead - A Wallabag 2+ client for SailfishOS
|
||||||
|
* © 2017 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
*
|
||||||
|
* This file is part of WallaRead.
|
||||||
|
*
|
||||||
|
* WallaRead is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* WallaRead is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with WallaRead. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
import Sailfish.Silica 1.0
|
||||||
|
|
||||||
|
import "../js/WallaBase.js" as WallaBase
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: serverSortDialog
|
||||||
|
allowedOrientations: Orientation.All
|
||||||
|
canAccept: true
|
||||||
|
|
||||||
|
property variant preferences
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
if ( preferences.sortOrder === WallaBase.ArticlesSort.Created )
|
||||||
|
sortComboBox.currentIndex = 0
|
||||||
|
else if ( preferences.sortOrder === WallaBase.ArticlesSort.Updated )
|
||||||
|
sortComboBox.currentIndex = 1
|
||||||
|
else if ( preferences.sortOrder === WallaBase.ArticlesSort.Domain )
|
||||||
|
sortComboBox.currentIndex = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
onDone: {
|
||||||
|
if ( result === DialogResult.Accepted ) {
|
||||||
|
if ( sortComboBox.currentItem.text === "Created" )
|
||||||
|
preferences.sortOrder = WallaBase.ArticlesSort.Created
|
||||||
|
else if ( sortComboBox.currentItem.text === "Updated" )
|
||||||
|
preferences.sortOrder = WallaBase.ArticlesSort.Updated
|
||||||
|
else if ( sortComboBox.currentItem.text === "Domain" )
|
||||||
|
preferences.sortOrder = WallaBase.ArticlesSort.Domain
|
||||||
|
|
||||||
|
preferences.sortAsc = sortAscSwitch.checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SilicaFlickable {
|
||||||
|
anchors.fill: parent
|
||||||
|
contentHeight: column.height
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
Column {
|
||||||
|
id: column
|
||||||
|
width: parent.width
|
||||||
|
|
||||||
|
DialogHeader {
|
||||||
|
acceptText: qsTr( "Sort view" )
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox {
|
||||||
|
id: sortComboBox
|
||||||
|
width: parent.width
|
||||||
|
label: qsTr( "Sort order" )
|
||||||
|
|
||||||
|
menu: ContextMenu {
|
||||||
|
MenuItem { text: "Created" }
|
||||||
|
MenuItem { text: "Updated" }
|
||||||
|
MenuItem { text: "Domain" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextSwitch {
|
||||||
|
id: sortAscSwitch
|
||||||
|
width: parent.width
|
||||||
|
checked: preferences.sortAsc
|
||||||
|
text: qsTr( "Sort Ascending" )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* WallaRead - A Wallabag 2+ client for SailfishOS
|
||||||
|
* © 2017 Grégory Oestreicher <greg@kamago.net>
|
||||||
|
*
|
||||||
|
* This file is part of WallaRead.
|
||||||
|
*
|
||||||
|
* WallaRead is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* WallaRead is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with WallaRead. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
import "../js/WallaBase.js" as WallaBase
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
property int sortOrder: WallaBase.ArticlesSort.Created
|
||||||
|
property bool sortAsc: true
|
||||||
|
|
||||||
|
function getVisibleDescription() {
|
||||||
|
var ret = ""
|
||||||
|
|
||||||
|
if ( sortOrder === WallaBase.ArticlesSort.Created )
|
||||||
|
ret = qsTr( "Created" )
|
||||||
|
else if ( sortOrder === WallaBase.ArticlesSort.Updated )
|
||||||
|
ret = qsTr( "Updated" )
|
||||||
|
else if ( sortOrder === WallaBase.ArticlesSort.Domain )
|
||||||
|
ret = qsTr( "Domain" )
|
||||||
|
|
||||||
|
ret += " "
|
||||||
|
|
||||||
|
if ( sortAsc )
|
||||||
|
ret += "asc."
|
||||||
|
else
|
||||||
|
ret += "desc."
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
}
|
|
@ -60,22 +60,6 @@
|
||||||
<source>Deleting</source>
|
<source>Deleting</source>
|
||||||
<translation>Suppression</translation>
|
<translation>Suppression</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Show unstarred articles</source>
|
|
||||||
<translation>Afficher les articles hors favoris</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show only starred articles</source>
|
|
||||||
<translation>Seulement afficher les articles en favoris</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show unread articles</source>
|
|
||||||
<translation>Afficher les articles non lus</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show read articles</source>
|
|
||||||
<translation>Afficher les articles lus</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Article URL</source>
|
<source>Article URL</source>
|
||||||
<translation>URL de l'article</translation>
|
<translation>URL de l'article</translation>
|
||||||
|
@ -88,6 +72,10 @@
|
||||||
<source>Show: </source>
|
<source>Show: </source>
|
||||||
<translation>Afficher : </translation>
|
<translation>Afficher : </translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sort: </source>
|
||||||
|
<translation>Tri : </translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ServerPageShowDialog</name>
|
<name>ServerPageShowDialog</name>
|
||||||
|
@ -123,6 +111,36 @@
|
||||||
<translation>tous</translation>
|
<translation>tous</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>ServerPageSortDialog</name>
|
||||||
|
<message>
|
||||||
|
<source>Sort view</source>
|
||||||
|
<translation>Trier la liste</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sort order</source>
|
||||||
|
<translation>Ordre de tri</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sort Ascending</source>
|
||||||
|
<translation>Trier par ordre croissant</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>ServerPageSortPreferences</name>
|
||||||
|
<message>
|
||||||
|
<source>Created</source>
|
||||||
|
<translation>Création</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Updated</source>
|
||||||
|
<translation>Modification</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Domain</source>
|
||||||
|
<translation>Domaine</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ServerSettings</name>
|
<name>ServerSettings</name>
|
||||||
<message>
|
<message>
|
||||||
|
|
|
@ -52,22 +52,6 @@
|
||||||
<source>Article URL</source>
|
<source>Article URL</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Show unstarred articles</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show only starred articles</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show unread articles</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Show read articles</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Refresh</source>
|
<source>Refresh</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -88,6 +72,10 @@
|
||||||
<source>Show: </source>
|
<source>Show: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sort: </source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ServerPageShowDialog</name>
|
<name>ServerPageShowDialog</name>
|
||||||
|
@ -123,6 +111,36 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>ServerPageSortDialog</name>
|
||||||
|
<message>
|
||||||
|
<source>Sort view</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sort order</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sort Ascending</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>ServerPageSortPreferences</name>
|
||||||
|
<message>
|
||||||
|
<source>Created</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Updated</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Domain</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ServerSettings</name>
|
<name>ServerSettings</name>
|
||||||
<message>
|
<message>
|
||||||
|
|
Loading…
Reference in New Issue