[BB10] Feedly support & Guide
|
|
@ -48,7 +48,7 @@ Page {
|
|||
|
||||
Container {
|
||||
|
||||
preferredWidth: display.pixelSize.width
|
||||
preferredWidth: app.width
|
||||
verticalAlignment: VerticalAlignment.Center
|
||||
|
||||
Container {
|
||||
|
|
|
|||
|
|
@ -43,8 +43,10 @@ Page {
|
|||
onCreationCompleted: {
|
||||
var nv = {name:"Netvibes", icon:"asset:///nv.png", type:1};
|
||||
var or = {name:"Old Reader", icon:"asset:///oldreader.png", type:2};
|
||||
var fe = {name:"Feedly", icon:"asset:///feedly.png", type:3};
|
||||
theDataModel.append(nv);
|
||||
theDataModel.append(or);
|
||||
theDataModel.append(fe);
|
||||
}
|
||||
|
||||
verticalAlignment: VerticalAlignment.Top
|
||||
|
|
@ -66,17 +68,25 @@ Page {
|
|||
onTriggered: {
|
||||
var chosenItem = dataModel.data(indexPath);
|
||||
if (chosenItem.type == 1) {
|
||||
// Netvibes
|
||||
nav.reconnectFetcher(1);
|
||||
var obj = nvSignInDialog.createObject(); obj.code = 400;
|
||||
var index = nav.indexOf(nav.top);
|
||||
nav.insert(index, obj); nav.navigateTo(nav.at(index));
|
||||
}
|
||||
if (chosenItem.type == 2) {
|
||||
// Old Reader
|
||||
nav.reconnectFetcher(2);
|
||||
var obj = oldReaderSignInDialog.createObject(); obj.code = 400;
|
||||
var index = nav.indexOf(nav.top);
|
||||
nav.insert(index, obj); nav.navigateTo(nav.at(index));
|
||||
}
|
||||
if (chosenItem.type == 3) {
|
||||
// Feedly
|
||||
nav.reconnectFetcher(3);
|
||||
utils.resetQtWebKit();
|
||||
fetcher.getConnectUrl(20);
|
||||
}
|
||||
}
|
||||
|
||||
accessibility.name: "Accounts list"
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ Page {
|
|||
var doInit = settings.signinType!=type;
|
||||
settings.signinType = type;
|
||||
|
||||
if (!dm.busy)
|
||||
if (dm.busy)
|
||||
dm.cancel();
|
||||
if (doInit)
|
||||
fetcher.init();
|
||||
|
|
@ -94,9 +94,8 @@ Page {
|
|||
progressIndicator.hide();
|
||||
//notification.show(qsTr("Failed to load page content :-("));
|
||||
// Do something here.....
|
||||
notification.show(qsTr("Failed to load page content :-("));
|
||||
//notification.show(qsTr("Failed to load page content :-("));
|
||||
//nav.pop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -116,7 +115,7 @@ Page {
|
|||
Container {
|
||||
background: utils.plainBase()
|
||||
preferredHeight: utils.du(0.25)
|
||||
preferredWidth: display.pixelSize.width
|
||||
preferredWidth: app.width
|
||||
}
|
||||
|
||||
ProgressPanel {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,41 @@ Page {
|
|||
Container {
|
||||
ScrollView {
|
||||
Container {
|
||||
Header {
|
||||
title: qsTr("Version %1").arg("2.1")
|
||||
}
|
||||
|
||||
Container {
|
||||
leftPadding: utils.du(2)
|
||||
rightPadding: utils.du(2)
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
|
||||
LogItem {
|
||||
title: 'Sync read articles'
|
||||
description: "Previously, unread as well as read articles were synced. With this new option comes possiblity to disable syncing read articles. It will speed up synchronization, but read articles will not be accessible form Kaktus.";
|
||||
}
|
||||
|
||||
LogItem {
|
||||
title: 'Sort order for list of articles'
|
||||
description: 'New settings option enabling specific sort order for list of articles. Possible values: Recent first, Oldest first.'
|
||||
}
|
||||
|
||||
LogItem {
|
||||
title: 'Mark above as read'
|
||||
description: 'Context menu for list of articles has new option for marking all above articles as read.'
|
||||
}
|
||||
|
||||
LogItem {
|
||||
title: 'Old Reader: Like & Liked articles tab'
|
||||
description: 'New context option to Like/Unlike article. So called "Slow" tab is now replaced by Liked articles tab.'
|
||||
}
|
||||
|
||||
LogItem {
|
||||
title: 'Old Reader: Enable social features'
|
||||
description: 'New option to enable/disable Old Reader\'s social features. If enabled, following features will be visible: Following folder, Sharing article with followers, Like/Unlike option, Liked articles tab.'
|
||||
}
|
||||
}
|
||||
Header {
|
||||
title: qsTr("Version %1").arg("2.0")
|
||||
}
|
||||
|
|
@ -43,14 +78,7 @@ Page {
|
|||
title: 'Old Reader support'
|
||||
description: 'Old Reader is supported as new feed aggreagator.'
|
||||
}
|
||||
}
|
||||
|
||||
Container {
|
||||
leftPadding: utils.du(2)
|
||||
rightPadding: utils.du(2)
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
|
||||
|
||||
LogItem {
|
||||
title: 'Many small improvements and bug fixes'
|
||||
description: 'Many improvements, like performance optimization and UI polishing were made.'
|
||||
|
|
|
|||
29
qml/bb10/Dot.qml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Copyright (C) 2015 Michal Kosciesza <michal@mkiol.net>
|
||||
*
|
||||
* This file is part of Kaktus.
|
||||
*
|
||||
* Kaktus 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.
|
||||
*
|
||||
* Kaktus 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 Kaktus. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import bb.cascades 1.2
|
||||
|
||||
ImageView {
|
||||
property bool active
|
||||
imageSource: active ? "asset:///dot-active.png" : "asset:///dot-inactive.png"
|
||||
preferredHeight: utils.du(5)
|
||||
preferredWidth: utils.du(5)
|
||||
minHeight: utils.du(5)
|
||||
minWidth: utils.du(5)
|
||||
}
|
||||
|
|
@ -20,7 +20,6 @@
|
|||
import bb.cascades 1.2
|
||||
import bb.system 1.0
|
||||
import com.kdab.components 1.0
|
||||
import net.mkiol.kaktus 1.0
|
||||
|
||||
KaktusPage {
|
||||
|
||||
|
|
@ -47,6 +46,10 @@ KaktusPage {
|
|||
return settings.signinType<10 ? qsTr("Saved") : qsTr("Starred");
|
||||
case 5:
|
||||
return qsTr("Slow");
|
||||
case 6:
|
||||
return qsTr("Liked");
|
||||
case 7:
|
||||
return qsTr("Shared");
|
||||
default:
|
||||
return root.title;
|
||||
}
|
||||
|
|
@ -59,7 +62,7 @@ KaktusPage {
|
|||
|
||||
expandableArea {
|
||||
content: SegmentedControl {
|
||||
preferredWidth: display.pixelSize.width
|
||||
preferredWidth: app.width
|
||||
Option {
|
||||
text: qsTr("All")
|
||||
value: false
|
||||
|
|
@ -74,7 +77,9 @@ KaktusPage {
|
|||
settings.showOnlyUnread = selectedValue;
|
||||
}
|
||||
}
|
||||
expanded: true
|
||||
//expanded: settings.viewMode == 4 || settings.viewMode == 6 ? false : true
|
||||
expanded: false
|
||||
indicatorVisibility: settings.viewMode == 4 || settings.viewMode == 6 ? TitleBarExpandableAreaIndicatorVisibility.Hidden : TitleBarExpandableAreaIndicatorVisibility.Default
|
||||
toggleArea: TitleBarExpandableAreaToggleArea.EntireTitleBar
|
||||
}
|
||||
}
|
||||
|
|
@ -84,17 +89,6 @@ KaktusPage {
|
|||
AbstractItemModel {
|
||||
id: bbEntryModel
|
||||
sourceModel: entryModel
|
||||
},
|
||||
//Double click Timer
|
||||
QTimer {
|
||||
id: dclickTimer
|
||||
singleShot: true
|
||||
interval: 400
|
||||
onTimeout: {
|
||||
// One click
|
||||
console.log("onTriggered: one");
|
||||
oneClick();
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
|
|
@ -109,10 +103,10 @@ KaktusPage {
|
|||
Qt.barWasPresed = false;
|
||||
Qt.isLight = utils.isLight();
|
||||
|
||||
if (!settings.getHint1Done()) {
|
||||
/*if (!settings.getHint1Done()) {
|
||||
notification.show(qsTr("One-tap to open article, double-tap to mark as read"));
|
||||
settings.setHint1Done(true);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
onNeedToResetModel: {
|
||||
|
|
@ -131,7 +125,7 @@ KaktusPage {
|
|||
property variant chosenItem
|
||||
property int chosenIndex
|
||||
|
||||
function oneClick() {
|
||||
function clickHandler() {
|
||||
// Not allowed while Syncing
|
||||
if (dm.busy || fetcher.busy || dm.removerBusy) {
|
||||
notification.show(qsTr("Please wait until current task is complete."));
|
||||
|
|
@ -203,7 +197,7 @@ KaktusPage {
|
|||
}
|
||||
|
||||
function itemType(data, indexPath) {
|
||||
return (data.uid == "daterow" ? 'header' : 'item');
|
||||
return (data.uid == "daterow" ? 'header' : data.uid == 'last' ? 'last' : 'item');
|
||||
}
|
||||
|
||||
listItemComponents: [
|
||||
|
|
@ -213,13 +207,25 @@ KaktusPage {
|
|||
title: ListItemData.title
|
||||
}
|
||||
},
|
||||
|
||||
ListItemComponent {
|
||||
type: "last"
|
||||
|
||||
Container {
|
||||
preferredWidth: Qt.app.width
|
||||
bottomPadding: Qt.utils.du(15)
|
||||
}
|
||||
},
|
||||
|
||||
ListItemComponent {
|
||||
type: "item"
|
||||
|
||||
KaktusEntryItem {
|
||||
id: item
|
||||
|
||||
|
||||
property bool showMarkedAsRead: Qt.settings.viewMode!=4 &&
|
||||
Qt.settings.viewMode!=6 &&
|
||||
Qt.settings.viewMode!=7
|
||||
title: ListItemData.title
|
||||
defaultFeedIcon: ListItemData.feedIcon === "http://s.theoldreader.com/icons/user_icon.png"
|
||||
feedTitle: ListItemData.feedTitle
|
||||
|
|
@ -268,8 +274,10 @@ KaktusPage {
|
|||
ListItem.onInitializedChanged: {
|
||||
setIconBgColor();
|
||||
var index = item.ListItem.indexInSection;
|
||||
if (index == Qt.entryModel.count() - 1) {
|
||||
Qt.entryModel.createItems(index + 1, Qt.settings.offsetLimit);
|
||||
// Last item is dummy, so checking count-2
|
||||
if (index == Qt.entryModel.count() - 2) {
|
||||
//console.log(">> index:",index,"uid:",ListItemData.uid,"title:",ListItemData.title);
|
||||
Qt.entryModel.createItems(index + 2, Qt.settings.offsetLimit);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -284,6 +292,7 @@ KaktusPage {
|
|||
ActionSet {
|
||||
id: actionSet
|
||||
ActionItem {
|
||||
id: markReadAction
|
||||
title: ListItemData.read == 0 ? qsTr("Mark as read") : qsTr("Mark as unread")
|
||||
enabled: ListItemData.read < 2
|
||||
imageSource: ListItemData.read == 0 ? "asset:///read.png" : "asset:///unread.png"
|
||||
|
|
@ -299,6 +308,25 @@ KaktusPage {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (!enabled)
|
||||
actionSet.remove(markReadAction);
|
||||
}
|
||||
}
|
||||
ActionItem {
|
||||
id: markAboveAction
|
||||
title: qsTr("Mark above as read")
|
||||
enabled: item.showMarkedAsRead && item.ListItem.indexInSection > 1
|
||||
imageSource: "asset:///readabove.png"
|
||||
onTriggered: {
|
||||
Qt.entryModel.setAboveAsRead(item.ListItem.indexInSection);
|
||||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (!enabled)
|
||||
actionSet.remove(markAboveAction);
|
||||
}
|
||||
}
|
||||
ActionItem {
|
||||
title: ListItemData.readlater == 0 ? Qt.settings.signinType<10 ? qsTr("Save") : qsTr("Star") : Qt.settings.signinType<10 ? qsTr("Unsave") : qsTr("Unstar")
|
||||
|
|
@ -315,10 +343,41 @@ KaktusPage {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
ActionItem {
|
||||
id: likeAction
|
||||
|
||||
property bool enabled2: Qt.settings.signinType >= 10 &&
|
||||
Qt.settings.signinType < 20 &&
|
||||
Qt.settings.showBroadcast
|
||||
|
||||
title: ListItemData.liked ? qsTr("Unlike") : qsTr("Like")
|
||||
enabled: enabled2 && !Qt.isLight
|
||||
imageSource: ListItemData.liked == 0 ? "asset:///like.png" : "asset:///unlike.png"
|
||||
onTriggered: {
|
||||
if (!ListItemData.liked) {
|
||||
Qt.entryModel.setData(item.ListItem.indexInSection, "liked", true, "");
|
||||
return;
|
||||
}
|
||||
if (ListItemData.liked) {
|
||||
Qt.entryModel.setData(item.ListItem.indexInSection, "liked", false, "");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (!enabled2)
|
||||
actionSet.remove(likeAction);
|
||||
}
|
||||
}
|
||||
|
||||
ActionItem {
|
||||
id: shareAction
|
||||
|
||||
property bool enabled2: Qt.settings.signinType >= 10 && ListItemData.feedId.substring(0,4) !== "user"
|
||||
property bool enabled2: Qt.settings.signinType >= 10 &&
|
||||
Qt.settings.signinType < 20 &&
|
||||
Qt.settings.showBroadcast &&
|
||||
ListItemData.feedId.substring(0,4) !== "user"
|
||||
|
||||
title: ListItemData.broadcast ? Qt.isLight ? qsTr("Unshare (only in pro edition)") : qsTr("Unshare") : Qt.isLight ? qsTr("Share (only in pro edition)") : qsTr("Share with followers")
|
||||
enabled: enabled2 && !Qt.isLight
|
||||
|
|
@ -346,10 +405,11 @@ KaktusPage {
|
|||
onTriggered: {
|
||||
chosenItem = dataModel.data(indexPath);
|
||||
chosenIndex = indexPath[0];
|
||||
|
||||
if (chosenItem.uid == "daterow")
|
||||
|
||||
if (chosenItem.uid == "daterow" || chosenItem.uid == "last")
|
||||
return;
|
||||
|
||||
// Expander clicked
|
||||
if (Qt.barWasPressed) {
|
||||
Qt.barWasPressed = false;
|
||||
// Expander was clicked, so emitting colapse signal
|
||||
|
|
@ -357,6 +417,7 @@ KaktusPage {
|
|||
return;
|
||||
}
|
||||
|
||||
// Star cklicked
|
||||
if (Qt.starWasPressed) {
|
||||
Qt.starWasPressed = false;
|
||||
if (chosenItem.readlater < 2) {
|
||||
|
|
@ -371,29 +432,9 @@ KaktusPage {
|
|||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//console.log("onTriggered");
|
||||
if (dclickTimer.active) {
|
||||
//console.log("onTriggered: double");
|
||||
//console.log("image",chosenItem.image);
|
||||
// Double click
|
||||
dclickTimer.stop();
|
||||
// Marking as read / unread
|
||||
if (chosenItem.read < 2) {
|
||||
if (chosenItem.read == 0) {
|
||||
entryModel.setData(indexPath, "read", 1, "");
|
||||
Qt.nav.top.refreshActions();
|
||||
return;
|
||||
}
|
||||
if (chosenItem.read == 1) {
|
||||
entryModel.setData(indexPath, "read", 0, "");
|
||||
Qt.nav.top.refreshActions();
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dclickTimer.start();
|
||||
}
|
||||
|
||||
// Item cklicked
|
||||
clickHandler();
|
||||
}
|
||||
|
||||
accessibility.name: "Entry list"
|
||||
|
|
@ -401,8 +442,9 @@ KaktusPage {
|
|||
|
||||
ViewPlaceholder {
|
||||
text: fetcher.busy ? qsTr("Wait until Sync finish.") :
|
||||
settings.viewMode==4 ? settings.signinType<10 ? qsTr("No saved items") : qsTr("No starred items") :
|
||||
settings.showOnlyUnread ? qsTr("No unread items") : qsTr("No items")
|
||||
settings.viewMode==4 ? app.isNetvibes || app.isFeedly ? qsTr("No saved items") : qsTr("No starred items") :
|
||||
settings.viewMode==6 ? qsTr("No liked items") : settings.showOnlyUnread ? qsTr("No unread items") : qsTr("No items")
|
||||
|
||||
visible: bbEntryModel.count==0
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,13 +78,6 @@ KaktusPage {
|
|||
headerMode: ListHeaderMode.None
|
||||
}
|
||||
|
||||
/*leadingVisual: Container {
|
||||
preferredHeight: 100
|
||||
preferredWidth: 100
|
||||
background: Color.Cyan
|
||||
}*/
|
||||
//preferredHeight: display.pixelSize.height-utils.du(10)
|
||||
|
||||
listItemComponents: [
|
||||
ListItemComponent {
|
||||
type: ""
|
||||
|
|
@ -133,7 +126,7 @@ KaktusPage {
|
|||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (Qt.settings.signinType < 10)
|
||||
if (Qt.app.isOldReader || Qt.app.isFeedly)
|
||||
actionSet.remove(unreadAction);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
103
qml/bb10/FeedlySignInDialog.qml
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* Copyright (C) 2015 Michal Kosciesza <michal@mkiol.net>
|
||||
*
|
||||
* This file is part of Kaktus.
|
||||
*
|
||||
* Kaktus 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.
|
||||
*
|
||||
* Kaktus 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 Kaktus. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import bb.cascades 1.2
|
||||
import "const.js" as Theme
|
||||
|
||||
Page {
|
||||
id: root
|
||||
|
||||
property bool menuEnabled: false
|
||||
property int code
|
||||
|
||||
function disconnectSignals() {
|
||||
}
|
||||
|
||||
titleBar: TitleBar {
|
||||
title: qsTr("Account")
|
||||
}
|
||||
|
||||
ScrollView {
|
||||
|
||||
Container {
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
|
||||
Header {
|
||||
title: qsTr("Feedly")
|
||||
}
|
||||
|
||||
Container {
|
||||
leftPadding: utils.du(2)
|
||||
rightPadding: utils.du(2)
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
|
||||
Container {
|
||||
preferredWidth: display.pixelSize.width
|
||||
|
||||
layout: StackLayout {
|
||||
orientation: LayoutOrientation.LeftToRight
|
||||
}
|
||||
|
||||
Container {
|
||||
topPadding: utils.du(1)
|
||||
ImageView {
|
||||
imageSource: "asset:///feedly.png"
|
||||
verticalAlignment: VerticalAlignment.Top
|
||||
preferredWidth: 46
|
||||
minWidth: 46
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Container {
|
||||
minWidth: utils.du(2)
|
||||
}
|
||||
|
||||
Button {
|
||||
text: qsTr("Sign in")
|
||||
verticalAlignment: VerticalAlignment.Center
|
||||
preferredWidth: display.pixelSize.width
|
||||
onClicked: {
|
||||
utils.resetQtWebKit();
|
||||
fetcher.getConnectUrl(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
actions: [
|
||||
ActionItem {
|
||||
id: action1
|
||||
title: qsTr("Sign in")
|
||||
imageSource: "asset:///save_folder.png"
|
||||
ActionBar.placement: ActionBarPlacement.OnBar
|
||||
onTriggered: {
|
||||
accept();
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
function accept() {
|
||||
utils.resetQtWebKit();
|
||||
fetcher.getConnectUrl(3);
|
||||
}
|
||||
}
|
||||
207
qml/bb10/Guide.qml
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
/*
|
||||
* Copyright (C) 2015 Michal Kosciesza <michal@mkiol.net>
|
||||
*
|
||||
* This file is part of Kaktus.
|
||||
*
|
||||
* Kaktus 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.
|
||||
*
|
||||
* Kaktus 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 Kaktus. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import bb.cascades 1.2
|
||||
import bb.device 1.2
|
||||
import net.mkiol.kaktus 1.0
|
||||
|
||||
Sheet {
|
||||
id: root
|
||||
|
||||
property bool clickable: false
|
||||
property int progress: 0
|
||||
|
||||
onOpened: {
|
||||
progress = 0;
|
||||
clickable = false;
|
||||
timer.start();
|
||||
}
|
||||
|
||||
onProgressChanged: {
|
||||
if (progress > 9) {
|
||||
root.close();
|
||||
}
|
||||
}
|
||||
|
||||
attachedObjects: [
|
||||
QTimer {
|
||||
id: timer
|
||||
interval: 2000
|
||||
onTimeout: {
|
||||
root.clickable = true;
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Page {
|
||||
Container {
|
||||
background: Color.Black
|
||||
preferredWidth: app.width
|
||||
preferredHeight: app.height
|
||||
leftPadding: utils.du(5)
|
||||
rightPadding: utils.du(5)
|
||||
|
||||
layout: DockLayout {
|
||||
}
|
||||
|
||||
Container {
|
||||
verticalAlignment: VerticalAlignment.Top
|
||||
horizontalAlignment: HorizontalAlignment.Center
|
||||
preferredHeight: utils.du(10)
|
||||
layout: DockLayout {}
|
||||
|
||||
Container {
|
||||
verticalAlignment: VerticalAlignment.Bottom
|
||||
layout: StackLayout {
|
||||
orientation: LayoutOrientation.LeftToRight
|
||||
}
|
||||
|
||||
Dot {
|
||||
active: root.progress>=0
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=1
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=2
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=3
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=4
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=5
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=6
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=7
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=8
|
||||
}
|
||||
Dot {
|
||||
active: root.progress>=9
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Container {
|
||||
verticalAlignment: VerticalAlignment.Center
|
||||
horizontalAlignment: HorizontalAlignment.Center
|
||||
|
||||
Label {
|
||||
text: root.progress == 0 ? qsTr("Hi,\nThis guide will explain you how to use basic features of Kaktus.") :
|
||||
root.progress == 1 ? qsTr("Kaktus is working in sync mode.\n\nAll titles and descriptions of new articles are fetched once during synchronization. Content of the articles are fetched only when caching option is turn on.") :
|
||||
root.progress == 2 ? app.isFeedly ? qsTr("There are 4 view modes.\n\nYou can switch between these modes by selecting appropriate tab.") : qsTr("There are 5 view modes.\n\nYou can switch between these modes by selecting appropriate tabs.") :
|
||||
root.progress == 3 ? app.isNetvibes ? qsTr("Mode #1\n\nLists all your Netvibes tabs. Feeds are grouped by the tabs they belong to and articles are grouped in the feeds.") : qsTr("Mode #1\n\nLists all your folders. Feeds are grouped by the folders they belong to and articles are grouped in the feeds.") :
|
||||
root.progress == 4 ? app.isNetvibes ? qsTr("Mode #2\n\nLists all your Netvibes tabs. Articles are grouped by the tabs they belong to.") : qsTr("Mode #2\n\nLists all your folders. Articles are grouped by the folders they belong to.") :
|
||||
root.progress == 5 ? qsTr("Mode #3\n\nLists all articles from all your feeds in one list. Items are ordered by publication date.") :
|
||||
root.progress == 6 ? app.isNetvibes || app.isFeedly ? qsTr("Mode #4\n\nLists all articles you have saved.") : qsTr("Mode #4\n\nLists all articles you have starred.") :
|
||||
root.progress == 7 ? app.isNetvibes ? qsTr("Mode #5 \"Slow\"\n\nList articles from less frequently updated feeds. A feed is considered \"slow\" when it publishes less than 5 articles in a month.") : qsTr("Mode #5\n\nLists all articles you have liked.") :
|
||||
root.progress == 8 ? qsTr("Top bar contains network indicator.\n\nThis indicator enables you to switch between the online and offline mode. In the offline mode, Kaktus will only use local cache to get web pages and images, so network connection won't be needed.") :
|
||||
root.progress == 9 ? qsTr("That's all!\n\nIf you want to see this guide one more time, click Show User Guide on the settings page.") :
|
||||
""
|
||||
textStyle.textAlign: TextAlign.Center
|
||||
textStyle.base: SystemDefaults.TextStyles.TitleText
|
||||
textStyle.color: Color.White
|
||||
multiline: true
|
||||
}
|
||||
|
||||
Container {
|
||||
preferredHeight: utils.du(4)
|
||||
preferredWidth: utils.du(4)
|
||||
}
|
||||
|
||||
Container {
|
||||
horizontalAlignment: HorizontalAlignment.Center
|
||||
layout: StackLayout {
|
||||
orientation: LayoutOrientation.LeftToRight
|
||||
}
|
||||
|
||||
ImageView {
|
||||
visible: root.progress == 1
|
||||
imageSource: "asset:///sync.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: root.progress == 2 || root.progress == 3
|
||||
imageSource: "asset:///vm0.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: root.progress == 2 || root.progress == 4
|
||||
imageSource: "asset:///vm1.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: root.progress == 2 || root.progress == 5
|
||||
imageSource: "asset:///vm3.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: root.progress == 2 || root.progress == 6
|
||||
imageSource: "asset:///vm4.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: app.isNetvibes ? root.progress == 2 || root.progress == 7 : false
|
||||
imageSource: "asset:///vm5.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: app.isOldReader ? root.progress == 2 || root.progress == 7 : false
|
||||
imageSource: "asset:///vm6.png"
|
||||
}
|
||||
ImageView {
|
||||
visible: root.progress == 8
|
||||
imageSource: "asset:///network-online.png"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Container {
|
||||
visible: root.clickable && root.progress == 0
|
||||
verticalAlignment: VerticalAlignment.Bottom
|
||||
horizontalAlignment: HorizontalAlignment.Center
|
||||
preferredHeight: utils.du(10)
|
||||
Label {
|
||||
text: qsTr("Tap anywhere to continue")
|
||||
textStyle.textAlign: TextAlign.Center
|
||||
textStyle.base: SystemDefaults.TextStyles.BodyText
|
||||
textStyle.color: Color.Gray
|
||||
}
|
||||
}
|
||||
|
||||
onTouch: {
|
||||
if (root.clickable && event.touchType == TouchType.Up) {
|
||||
|
||||
if (root.progress==6 && app.isFeedly) {
|
||||
root.progress++;
|
||||
}
|
||||
|
||||
if (root.progress==9) {
|
||||
// Help finished
|
||||
settings.helpDone = true;
|
||||
console.log("Help finished")
|
||||
}
|
||||
|
||||
progress++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,11 +23,12 @@ import "const.js" as Theme
|
|||
|
||||
Container {
|
||||
id: root
|
||||
|
||||
|
||||
property alias title: titleLabel.text
|
||||
|
||||
background: Qt.utils.background() //Qt.utils.plainBase()
|
||||
preferredWidth: Qt.display.pixelSize.width
|
||||
preferredWidth: Qt.app.width
|
||||
|
||||
|
||||
layout: DockLayout {}
|
||||
|
||||
|
|
@ -37,7 +38,7 @@ Container {
|
|||
background: Qt.utils.plainBase()
|
||||
minHeight: 2
|
||||
maxHeight: minHeight
|
||||
minWidth: Qt.display.pixelSize.width
|
||||
minWidth: Qt.app.width
|
||||
maxWidth: minWidth
|
||||
}
|
||||
|
||||
|
|
@ -47,7 +48,7 @@ Container {
|
|||
background: Qt.utils.plainBase()
|
||||
minHeight: 1
|
||||
maxHeight: minHeight
|
||||
minWidth: Qt.display.pixelSize.width
|
||||
minWidth: Qt.app.width
|
||||
maxWidth: minWidth
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ Container {
|
|||
signal starClicked
|
||||
|
||||
background: pressed ? Qt.utils.plainBase() : Qt.utils.background()
|
||||
preferredWidth: Qt.display.pixelSize.width
|
||||
preferredWidth: Qt.app.width
|
||||
bottomPadding: last ? Qt.utils.du(15) : 0
|
||||
|
||||
function setIconBgColor() {
|
||||
|
|
@ -83,7 +83,7 @@ Container {
|
|||
background: Qt.utils.plainBase()
|
||||
minHeight: 2
|
||||
maxHeight: minHeight
|
||||
minWidth: Qt.display.pixelSize.width
|
||||
minWidth: Qt.app.width
|
||||
maxWidth: minWidth
|
||||
}
|
||||
|
||||
|
|
@ -162,7 +162,7 @@ Container {
|
|||
|
||||
Container {
|
||||
verticalAlignment: VerticalAlignment.Top
|
||||
preferredWidth: Qt.display.pixelSize.width
|
||||
preferredWidth: Qt.app.width
|
||||
Label {
|
||||
id: titleLabel
|
||||
textStyle.base: SystemDefaults.TextStyles.PrimaryText
|
||||
|
|
@ -200,7 +200,7 @@ Container {
|
|||
// Image
|
||||
Container {
|
||||
id: imageContainer
|
||||
leftPadding: image.width<Qt.display.pixelSize.width-2*Qt.utils.du(2) ? Qt.utils.du(2) : 0
|
||||
leftPadding: image.width<Qt.app.width-2*Qt.utils.du(2) ? Qt.utils.du(2) : 0
|
||||
topPadding: Qt.utils.du(2)
|
||||
bottomPadding: 0
|
||||
|
||||
|
|
@ -210,8 +210,8 @@ Container {
|
|||
id: image
|
||||
doSizeCheck: true
|
||||
scalingMethod: ScalingMethod.AspectFit
|
||||
preferredWidth: image.width>Qt.display.pixelSize.width ? Qt.display.pixelSize.width : image.width
|
||||
maxWidth: image.width>Qt.display.pixelSize.width ? Qt.display.pixelSize.width : image.width
|
||||
preferredWidth: image.width>Qt.app.width ? Qt.app.width : image.width
|
||||
maxWidth: image.width>Qt.app.width ? Qt.app.width : image.width
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -248,7 +248,10 @@ Container {
|
|||
}
|
||||
|
||||
Container {
|
||||
visible: (!root.hidden || root.expanded) && (root.annotations != "" || root.broadcast)
|
||||
//visible: (!root.hidden || root.expanded) && (root.annotations != "" || root.broadcast)
|
||||
|
||||
visible: Qt.settings.showBroadcast && (!root.hidden || root.expanded) && (root.broadcast || root.annotations!="")
|
||||
|
||||
layout: StackLayout {
|
||||
orientation: LayoutOrientation.LeftToRight
|
||||
}
|
||||
|
|
@ -262,11 +265,21 @@ Container {
|
|||
]
|
||||
background: border.imagePaint*/
|
||||
|
||||
/*ImageView {
|
||||
preferredHeight: Qt.utils.du(6)
|
||||
preferredWidth: Qt.utils.du(6)
|
||||
minHeight: Qt.utils.du(6)
|
||||
minWidth: Qt.utils.du(6)
|
||||
visible: root.liked
|
||||
imageSource: Application.themeSupport.theme.colorTheme.style == VisualStyle.Bright ? "asset:///like-text.png" : "asset:///like.png"
|
||||
}*/
|
||||
|
||||
ImageView {
|
||||
preferredHeight: Qt.utils.du(6)
|
||||
preferredWidth: Qt.utils.du(6)
|
||||
minHeight: Qt.utils.du(6)
|
||||
minWidth: Qt.utils.du(6)
|
||||
visible: root.broadcast || root.annotations != ""
|
||||
imageSource: root.broadcast ?
|
||||
Application.themeSupport.theme.colorTheme.style == VisualStyle.Bright ? "asset:///share-text.png" : "asset:///share.png" :
|
||||
Application.themeSupport.theme.colorTheme.style == VisualStyle.Bright ? "asset:///comment-text.png" : "asset:///comment.png"
|
||||
|
|
@ -331,7 +344,7 @@ Container {
|
|||
|
||||
Label {
|
||||
verticalAlignment: VerticalAlignment.Center
|
||||
preferredWidth: Qt.display.pixelSize.width
|
||||
preferredWidth: Qt.app.width
|
||||
textStyle.base: SystemDefaults.TextStyles.SubtitleText
|
||||
textStyle.fontWeight: FontWeight.W100
|
||||
textStyle.color: root.hidden ? Qt.utils.secondaryText() : Qt.utils.text()
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ Container {
|
|||
background: Qt.utils.plainBase()
|
||||
minHeight: 2
|
||||
maxHeight: minHeight
|
||||
minWidth: Qt.display.pixelSize.width
|
||||
minWidth: Qt.app.width
|
||||
maxWidth: minWidth
|
||||
}
|
||||
|
||||
|
|
@ -88,7 +88,7 @@ Container {
|
|||
Container {
|
||||
layout: DockLayout {}
|
||||
|
||||
preferredWidth: Qt.display.pixelSize.width
|
||||
preferredWidth: Qt.app.width
|
||||
|
||||
Container {
|
||||
rightPadding: Qt.utils.du(5)
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ NavigationPane {
|
|||
|
||||
property bool fetcherBusyStatus: false
|
||||
|
||||
//property int oldViewMode
|
||||
|
||||
onPopTransitionEnded: {
|
||||
if (nav.top.menuEnabled)
|
||||
Application.menuEnabled = true;
|
||||
|
|
@ -72,6 +74,7 @@ NavigationPane {
|
|||
Qt.cache = cache;
|
||||
Qt.dm = dm;
|
||||
Qt.display = display;
|
||||
Qt.app = app;
|
||||
Qt.utils = utils;
|
||||
Qt.nav = nav;
|
||||
Qt.settings = settings;
|
||||
|
|
@ -84,6 +87,8 @@ NavigationPane {
|
|||
settings.dashboardInUseChanged.connect(resetView);
|
||||
settings.viewModeChanged.connect(resetView);
|
||||
settings.signedInChanged.connect(settingsSignedInChanged);
|
||||
settings.showBroadcastChanged.connect(settingsShowBroadcastChanged);
|
||||
settings.allowedOrientationsChanged.connect(settingsAllowedOrientationsChanged);
|
||||
|
||||
settings.themeChanged.connect(setTheme);
|
||||
|
||||
|
|
@ -93,6 +98,8 @@ NavigationPane {
|
|||
dm.busyChanged.connect(dmBusyChanged);
|
||||
dm.busyChanged.connect(dmBusyChanged);
|
||||
dm.removerBusyChanged.connect(dmRemoverBusyChanged);
|
||||
|
||||
settingsAllowedOrientationsChanged();
|
||||
|
||||
db.init();
|
||||
}
|
||||
|
|
@ -181,6 +188,32 @@ NavigationPane {
|
|||
fetcher.cancel(); dm.cancel();
|
||||
settings.reset();
|
||||
db.init();
|
||||
} else {
|
||||
if (!settings.helpDone) {
|
||||
guide.open();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function settingsShowBroadcastChanged() {
|
||||
//console.log("settingsShowBroadcastChanged", settings.viewMode, settings.showBroadcast );
|
||||
if (settings.viewMode > 5 && !settings.showBroadcast) {
|
||||
settings.viewMode = 4;
|
||||
}
|
||||
|
||||
app.refreshTabs();
|
||||
}
|
||||
|
||||
function settingsAllowedOrientationsChanged() {
|
||||
switch (settings.allowedOrientations) {
|
||||
case 1:
|
||||
OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.DisplayPortrait;
|
||||
break;
|
||||
case 2:
|
||||
OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.DisplayLandscape;
|
||||
break;
|
||||
default:
|
||||
OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.All;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -265,11 +298,16 @@ NavigationPane {
|
|||
var obj = oldReaderSignInDialog.createObject(); obj.code = code; nav.push(obj);
|
||||
return;
|
||||
}
|
||||
if (type == 20) {
|
||||
var obj = feedlySignInDialog.createObject(); obj.code = code; nav.push(obj);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
// Unknown error
|
||||
notification.show(qsTr("An unknown error occurred! :-("));
|
||||
resetView();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -362,10 +400,12 @@ NavigationPane {
|
|||
reconnectFetcher(1);
|
||||
else if (type == 10)
|
||||
reconnectFetcher(2);
|
||||
else if (type == 20)
|
||||
reconnectFetcher(3);
|
||||
}
|
||||
|
||||
|
||||
utils.setRootModel();
|
||||
|
||||
|
||||
switch (settings.viewMode) {
|
||||
case 0:
|
||||
case 1:
|
||||
|
|
@ -379,10 +419,14 @@ NavigationPane {
|
|||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
nav.insert(0, entryPage.createObject());
|
||||
nav.navigateTo(nav.at(0));
|
||||
break;
|
||||
}
|
||||
|
||||
//oldViewMode = newViewMode;
|
||||
}
|
||||
|
||||
attachedObjects: [
|
||||
|
|
@ -420,6 +464,10 @@ NavigationPane {
|
|||
id: oldReaderSignInDialog
|
||||
source: "OldReaderSignInDialog.qml"
|
||||
},
|
||||
ComponentDefinition {
|
||||
id: feedlySignInDialog
|
||||
source: "FeedlySignInDialog.qml"
|
||||
},
|
||||
ComponentDefinition {
|
||||
id: tabPage
|
||||
source: "TabPage.qml"
|
||||
|
|
|
|||
|
|
@ -86,6 +86,14 @@ Page {
|
|||
}
|
||||
|
||||
attachedObjects: [
|
||||
/*ActionItem {
|
||||
id: guideAction
|
||||
title: qsTr("Guide")
|
||||
ActionBar.placement: ActionBarPlacement.OnBar
|
||||
onTriggered: {
|
||||
guide.open();
|
||||
}
|
||||
},*/
|
||||
ReadAllDialog {
|
||||
id: readAllDialog
|
||||
onOk: {
|
||||
|
|
@ -146,6 +154,7 @@ Page {
|
|||
removeAction(actions[0]);
|
||||
}
|
||||
|
||||
//addAction(guideAction);
|
||||
addAction(markAllAsReadAction);
|
||||
if (settings.signinType < 10)
|
||||
addAction(markAllAsUnreadAction);
|
||||
|
|
|
|||
|
|
@ -27,7 +27,9 @@ Tab {
|
|||
viewMode==2 ? qsTr("All feeds") :
|
||||
viewMode==3 ? qsTr("All articles") :
|
||||
viewMode==4 ? settings.signinType<10 ? qsTr("Saved") : qsTr("Starred") :
|
||||
viewMode==5 ? utils.isLight() ? qsTr("Slow (only in pro edition)") : qsTr("Slow") : ""
|
||||
viewMode==5 ? utils.isLight() ? qsTr("Slow (only in pro edition)") : qsTr("Slow") :
|
||||
viewMode==6 ? utils.isLight() ? qsTr("Liked (only in pro edition)") : qsTr("Liked") :
|
||||
viewMode==7 ? utils.isLight() ? qsTr("Shared (only in pro edition)") : qsTr("Shared") : ""
|
||||
|
||||
/*description: viewMode==0 ? qsTr("All your tabs, feeds & articles") :
|
||||
viewMode==1 ? qsTr("All tabs & articles") :
|
||||
|
|
@ -38,7 +40,8 @@ Tab {
|
|||
|
||||
imageSource: "asset:///vm"+viewMode+".png"
|
||||
|
||||
enabled: utils.isLight() ? settings.signedIn && !fetcher.busy && viewMode!=5 : settings.signedIn && !fetcher.busy
|
||||
enabled: utils.isLight() ? settings.signedIn && !fetcher.busy && viewMode<5 :
|
||||
settings.signedIn && !fetcher.busy
|
||||
|
||||
onTriggered: {
|
||||
settings.viewMode = viewMode;
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ Container {
|
|||
|
||||
layout: DockLayout {}
|
||||
|
||||
preferredWidth: display.pixelSize.width
|
||||
minWidth: display.pixelSize.width
|
||||
maxWidth: display.pixelSize.width
|
||||
preferredWidth: app.width
|
||||
minWidth: app.width
|
||||
maxWidth: app.width
|
||||
preferredHeight: utils.du(10)
|
||||
|
||||
background: utils.plain()
|
||||
|
|
@ -118,9 +118,9 @@ Container {
|
|||
id: indicator
|
||||
horizontalAlignment: HorizontalAlignment.Left
|
||||
verticalAlignment: VerticalAlignment.Bottom
|
||||
preferredWidth: display.pixelSize.width
|
||||
minWidth: display.pixelSize.width
|
||||
maxWidth: display.pixelSize.width
|
||||
preferredWidth: app.width
|
||||
minWidth: app.width
|
||||
maxWidth: app.width
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -46,7 +46,8 @@ Page {
|
|||
ScrollView {
|
||||
Container {
|
||||
Header {
|
||||
title: settings.signinType < 10 ? "Netvibes" : "Old Reader"
|
||||
title: app.isNetvibes ? "Netvibes":
|
||||
app.isOldReader ? "Old Reader" : "Feedly"
|
||||
}
|
||||
|
||||
Container {
|
||||
|
|
@ -57,7 +58,12 @@ Page {
|
|||
|
||||
TextLabel {
|
||||
text: settings.signedIn ? qsTr("Signed in with") : qsTr("Not signed in")
|
||||
value: settings.signedIn ? settings.signinType == 0 ? settings.getUsername() : settings.signinType == 1 ? "Twitter" : settings.signinType == 2 ? "Facebook" : settings.signinType == 10 ? settings.getUsername() : "" : ""
|
||||
value: settings.signedIn ?
|
||||
settings.signinType==0 ? settings.getUsername() :
|
||||
settings.signinType==1 ? "Twitter" :
|
||||
settings.signinType==2 ? "Facebook" :
|
||||
settings.signinType==10 ? settings.getUsername() :
|
||||
settings.signinType==20 ? settings.getProvider() : "" : ""
|
||||
enabled: settings.signedIn
|
||||
buttonText: qsTr("Sign out")
|
||||
onClicked: {
|
||||
|
|
@ -69,7 +75,7 @@ Page {
|
|||
text: settings.signedIn && utils.defaultDashboardName() !== "" ? qsTr("Dashboard in use") : qsTr("Dashboard not selected")
|
||||
value: settings.signedIn && utils.defaultDashboardName() !== "" ? utils.defaultDashboardName() : ""
|
||||
buttonText: settings.signedIn ? qsTr("Change") : ""
|
||||
visible: settings.signinType < 10
|
||||
visible: app.isNetvibes
|
||||
onClicked: {
|
||||
utils.setDashboardModel();
|
||||
nav.push(dashboardPage.createObject());
|
||||
|
|
@ -79,7 +85,6 @@ Page {
|
|||
|
||||
Header {
|
||||
title: qsTr("Syncronization")
|
||||
visible: settings.signinType >= 10
|
||||
}
|
||||
|
||||
Container {
|
||||
|
|
@ -87,11 +92,11 @@ Page {
|
|||
rightPadding: utils.du(2)
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
visible: settings.signinType >= 10
|
||||
visible: app.isOldReader || app.isFeedly
|
||||
|
||||
DropDown {
|
||||
title: qsTr("Sync timeframe")
|
||||
enabled: settings.signinType >= 10
|
||||
enabled: app.isOldReader || app.isFeedly
|
||||
|
||||
selectedIndex: {
|
||||
var retention = settings.getRetentionDays();
|
||||
|
|
@ -147,10 +152,21 @@ Page {
|
|||
multiline: true
|
||||
textStyle.base: SystemDefaults.TextStyles.SubtitleText
|
||||
textStyle.color: utils.secondaryText()
|
||||
text: qsTr("Most recent articles will be syncronized according to the defined timeframe. " + "Regardless of the value, all starred, liked and shared items will be synced as well. " + "Be aware, this parameter has significant impact on the speed of synchronization.")
|
||||
text: qsTr("Most recent articles will be syncronized according to the defined timeframe.") + " " +
|
||||
(settings.signinType < 20 ? qsTr("Regardless of the value, all starred, liked and shared items will be synced as well.") : qsTr("Regardless of the value, all saved items will be synced as well.")) + " " +
|
||||
qsTr("Be aware, this parameter has significant impact on the speed of synchronization.")
|
||||
}
|
||||
|
||||
ToggleComponent {
|
||||
text: qsTr("Sync read articles")
|
||||
description: qsTr("In addition to unread also read articles will be synced. Disabling this option will speed up synchronization, but read articles will not be accessible form Kaktus.")
|
||||
checked: settings.syncRead
|
||||
onCheckedChanged: {
|
||||
settings.syncRead = checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Header {
|
||||
title: qsTr("Cache")
|
||||
}
|
||||
|
|
@ -249,70 +265,25 @@ Page {
|
|||
rightPadding: utils.du(2)
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
|
||||
/*DropDown {
|
||||
* title: qsTr("Language")
|
||||
* options: [
|
||||
* Option {
|
||||
* selected: settings.locale === ""
|
||||
* value: ""
|
||||
* text: qsTr("Default")
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "cs"
|
||||
* value: "cs"
|
||||
* text: "Čeština"
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "en"
|
||||
* value: "en"
|
||||
* text: "English"
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "fa"
|
||||
* value: "fa"
|
||||
* text: "فارسی"
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "nl"
|
||||
* value: "nl"
|
||||
* text: "Nederlands"
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "pl"
|
||||
* value: "pl"
|
||||
* text: "Polski"
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "ru"
|
||||
* value: "ru"
|
||||
* text: "Русский"
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.locale === "tr"
|
||||
* value: "tr"
|
||||
* text: "Türkçe"
|
||||
* }
|
||||
* ]
|
||||
* onSelectedOptionChanged: {
|
||||
* if (settings.locale != selectedOption.value) {
|
||||
* settings.locale = selectedOption.value;
|
||||
* notification.show(qsTr("Changes will take effect after you restart Kaktus."));
|
||||
* }
|
||||
*
|
||||
* }
|
||||
}*/
|
||||
|
||||
//ViewModeDropDown {}
|
||||
|
||||
/*ToggleComponent {
|
||||
* text: qsTr("Show only unread articles")
|
||||
* checked: settings.showOnlyUnread
|
||||
*
|
||||
* onCheckedChanged: {
|
||||
* settings.showOnlyUnread = checked;
|
||||
* }
|
||||
}*/
|
||||
|
||||
DropDown {
|
||||
title: qsTr("Sort order for list of articles")
|
||||
options: [
|
||||
Option {
|
||||
selected: settings.showOldestFirst == value
|
||||
value: false
|
||||
text: qsTr("Recent first")
|
||||
},
|
||||
Option {
|
||||
selected: settings.showOldestFirst == value
|
||||
value: true
|
||||
text: qsTr("Oldest first")
|
||||
}
|
||||
]
|
||||
onSelectedOptionChanged: {
|
||||
settings.showOldestFirst = selectedOption.value;
|
||||
}
|
||||
}
|
||||
|
||||
ToggleComponent {
|
||||
text: qsTr("Read mode")
|
||||
|
|
@ -333,50 +304,24 @@ Page {
|
|||
settings.showTabIcons = checked;
|
||||
}
|
||||
}
|
||||
|
||||
/*ToggleComponent {
|
||||
* text: qsTr("Power save mode")
|
||||
* description: qsTr("When the phone or app goes to the idle state, " + "all opened web pages will be closed to lower power consumption.")
|
||||
* checked: settings.powerSaveMode
|
||||
*
|
||||
* onCheckedChanged: {
|
||||
* settings.powerSaveMode = checked;
|
||||
* }
|
||||
}*/
|
||||
|
||||
/*DropDown {
|
||||
* title: qsTr("Orientation")
|
||||
* options: [
|
||||
* Option {
|
||||
* selected: settings.allowedOrientations == value
|
||||
* value: 0
|
||||
* text: qsTr("Dynamic")
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.allowedOrientations == value
|
||||
* value: 1
|
||||
* text: qsTr("Portrait")
|
||||
* },
|
||||
* Option {
|
||||
* selected: settings.allowedOrientations == value
|
||||
* value: 2
|
||||
* text: qsTr("Landscape")
|
||||
* }
|
||||
* ]
|
||||
* onSelectedOptionChanged: {
|
||||
* settings.allowedOrientations = selectedOption.value;
|
||||
* }
|
||||
}*/
|
||||
|
||||
ToggleComponent {
|
||||
text: qsTr("Enable social features")
|
||||
enabled: app.isOldReader
|
||||
checked: settings.showBroadcast
|
||||
description: qsTr("Following Old Reader's social features will be enabled: Following folder, Sharing article with followers, Like option, Liked tab.")
|
||||
|
||||
onCheckedChanged: {
|
||||
settings.showBroadcast = checked;
|
||||
}
|
||||
|
||||
visible: enabled
|
||||
}
|
||||
|
||||
DropDown {
|
||||
title: qsTr("Theme")
|
||||
visible: utils.checkOSVersion(10, 3)
|
||||
options: [
|
||||
/*Option {
|
||||
* selected: settings.theme == value
|
||||
* value: 0
|
||||
* text: qsTr("Default")
|
||||
},*/
|
||||
Option {
|
||||
selected: settings.theme == value
|
||||
value: 1
|
||||
|
|
@ -394,6 +339,30 @@ Page {
|
|||
settings.theme = selectedOption.value;
|
||||
}
|
||||
}
|
||||
|
||||
DropDown {
|
||||
title: qsTr("Orientation")
|
||||
options: [
|
||||
Option {
|
||||
selected: settings.allowedOrientations == value
|
||||
value: 0
|
||||
text: qsTr("Dynamic")
|
||||
},
|
||||
Option {
|
||||
selected: settings.allowedOrientations == value
|
||||
value: 1
|
||||
text: qsTr("Portrait")
|
||||
},
|
||||
Option {
|
||||
selected: settings.allowedOrientations == value
|
||||
value: 2
|
||||
text: qsTr("Landscape")
|
||||
}
|
||||
]
|
||||
onSelectedOptionChanged: {
|
||||
settings.allowedOrientations = selectedOption.value;
|
||||
}
|
||||
}
|
||||
|
||||
DropDown {
|
||||
title: enabled ? qsTr("Offline viewer style") : qsTr("Offline viewer (only in pro edition)")
|
||||
|
|
@ -440,27 +409,27 @@ Page {
|
|||
}
|
||||
}
|
||||
|
||||
/*Header {
|
||||
Header {
|
||||
title: qsTr("Other")
|
||||
}
|
||||
|
||||
Container {
|
||||
horizontalAlignment: HorizontalAlignment.Center
|
||||
|
||||
leftPadding: ui.du(2)
|
||||
rightPadding: ui.du(2)
|
||||
topPadding: ui.du(2)
|
||||
bottomPadding: ui.du(2)
|
||||
leftPadding: utils.du(2)
|
||||
rightPadding: utils.du(2)
|
||||
topPadding: utils.du(2)
|
||||
bottomPadding: utils.du(2)
|
||||
|
||||
Button {
|
||||
text: qsTr("Show User Guide")
|
||||
|
||||
onClicked: {
|
||||
//guide.show();
|
||||
notification.show("Not implemented yet :-(");
|
||||
guide.open();
|
||||
}
|
||||
}
|
||||
|
||||
}*/
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ Page {
|
|||
id: textArea
|
||||
hintText: "Want to add a note?"
|
||||
input.submitKey: SubmitKey.Submit
|
||||
preferredHeight: Qt.display.pixelSize.height
|
||||
preferredHeight: Qt.app.height
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@ SystemDialog {
|
|||
signal cancel
|
||||
|
||||
title: qsTr("Signing out")
|
||||
body: settings.signinType < 10 ?
|
||||
qsTr("Disconnect Kaktus from your Netvibes account?") :
|
||||
qsTr("Disconnect Kaktus from your Old Reader account?")
|
||||
body: app.isNetvibes ? qsTr("Disconnect Kaktus from your Netvibes account?") :
|
||||
app.isOldReader ? qsTr("Disconnect Kaktus from your Old Reader account?") :
|
||||
app.isFeedly ? qsTr("Disconnect Kaktus from your Feedly account?") : ""
|
||||
|
||||
onFinished: {
|
||||
if (value==SystemUiResult.ConfirmButtonSelection) {
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ KaktusPage {
|
|||
id: item
|
||||
text: ListItemData.uid === "subscriptions" ? qsTr("Subscriptions") :
|
||||
ListItemData.uid === "friends" ? qsTr("Following") :
|
||||
ListItemData === "global.uncategorized" ? qsTr("Uncategorized") :
|
||||
ListItemData.title
|
||||
imageSource: ListItemData.uid === "friends" ? Application.themeSupport.theme.colorTheme.style === VisualStyle.Bright ? "asset:///contact-text.png" : "asset:///contact.png" : ListItemData.iconUrl === "" ? "" : Qt.cache.getUrlbyUrl(ListItemData.iconUrl)
|
||||
imageBackgroundVisible: false
|
||||
|
|
@ -126,7 +127,7 @@ KaktusPage {
|
|||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (Qt.settings.signinType < 10)
|
||||
if (Qt.app.isOldReader || Qt.app.isFeedly)
|
||||
actionSet.remove(unreadAction);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ Page {
|
|||
|
||||
property variant g_settings: settings
|
||||
property double viewPort: settings.fontSize==1 ? 1.0 : settings.fontSize==2 ? 2.0 : 0.5
|
||||
property int imgWidth: display.pixelSize.width / viewPort
|
||||
property int imgWidth: app.width / viewPort
|
||||
|
||||
signal updateViewPort
|
||||
|
||||
|
|
@ -154,7 +154,7 @@ Page {
|
|||
ActionItem {
|
||||
title: stared ? settings.signinType < 10 ? qsTr("Unsave") : qsTr("Unstar") : settings.signinType < 10 ? qsTr("Save") : qsTr("Star")
|
||||
ActionBar.placement: ActionBarPlacement.OnBar
|
||||
imageSource: stared ? "asset:///star-selected.png" : "asset:///star.png"
|
||||
imageSource: stared ? "asset:///unsave.png" : "asset:///save.png"
|
||||
onTriggered: {
|
||||
entryModel.setData(index, "readlater", stared ? 0 : 1, "");
|
||||
stared = !stared;
|
||||
|
|
@ -180,10 +180,31 @@ Page {
|
|||
data = root.onlineUrl;
|
||||
}
|
||||
},
|
||||
ActionItem {
|
||||
id: likeAction
|
||||
property bool enabled2: app.isOldReader && settings.showBroadcast
|
||||
title: root.liked ?
|
||||
Qt.isLight ? qsTr("Unlike (only in pro edition)") : qsTr("Unlike") :
|
||||
Qt.isLight ? qsTr("Like (only in pro edition)") : qsTr("Like")
|
||||
enabled: enabled2 && !Qt.isLight
|
||||
imageSource: root.liked ? "asset:///unlike.png" : "asset:///like.png"
|
||||
onTriggered: {
|
||||
entryModel.setData(index, "liked", !root.liked, "");
|
||||
root.liked = !root.liked;
|
||||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (!enabled2)
|
||||
root.removeAction(likeAction);
|
||||
}
|
||||
},
|
||||
ActionItem {
|
||||
id: shareAction
|
||||
title: settings.signinType >= 10 ? root.broadcast ? Qt.isLight ? qsTr("Unshare (only in pro edition)") : qsTr("Unshare") : Qt.isLight ? qsTr("Share (only in pro edition)") : qsTr("Share with followers") : qsTr("Share with followers")
|
||||
enabled: settings.signinType >= 10 && !Qt.isLight
|
||||
property bool enabled2: app.isOldReader && settings.showBroadcast
|
||||
title: root.broadcast ?
|
||||
Qt.isLight ? qsTr("Unshare (only in pro edition)") : qsTr("Unshare") :
|
||||
Qt.isLight ? qsTr("Share (only in pro edition)") : qsTr("Share with followers")
|
||||
enabled: enabled2 && !Qt.isLight
|
||||
imageSource: root.broadcast ? "asset:///unsharefollowers.png" : "asset:///sharefollowers.png"
|
||||
onTriggered: {
|
||||
if (root.broadcast) {
|
||||
|
|
@ -194,6 +215,11 @@ Page {
|
|||
}
|
||||
root.broadcast = !root.broadcast;
|
||||
}
|
||||
|
||||
onCreationCompleted: {
|
||||
if (!enabled2)
|
||||
root.removeAction(shareAction);
|
||||
}
|
||||
},
|
||||
ActionItem {
|
||||
title: qsTr("Browser")
|
||||
|
|
@ -323,12 +349,6 @@ Page {
|
|||
verticalAlignment: VerticalAlignment.Top
|
||||
horizontalAlignment: HorizontalAlignment.Left
|
||||
|
||||
/*Container {
|
||||
background: utils.plainBase()
|
||||
preferredHeight: utils.du(0.25)
|
||||
preferredWidth: display.pixelSize.width
|
||||
}*/
|
||||
|
||||
ProgressPanel {
|
||||
id: progressIndicator
|
||||
open: false
|
||||
|
|
|
|||
BIN
qml/bb10/dot-active.png
Normal file
|
After Width: | Height: | Size: 735 B |
BIN
qml/bb10/dot-inactive.png
Normal file
|
After Width: | Height: | Size: 936 B |
BIN
qml/bb10/feedly.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 954 B After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.2 KiB |
|
|
@ -23,10 +23,18 @@ import bb.device 1.2
|
|||
TabbedPane {
|
||||
id: app
|
||||
|
||||
property bool isNetvibes: settings.signinType >= 0 && settings.signinType < 10
|
||||
property bool isOldReader: settings.signinType >= 10 && settings.signinType < 20
|
||||
property bool isFeedly: settings.signinType >= 20 && settings.signinType < 30
|
||||
|
||||
property int width: display.pixelSize.width
|
||||
property int height: display.pixelSize.height
|
||||
|
||||
showTabsOnActionBar: false
|
||||
|
||||
onCreationCompleted: {
|
||||
settings.signedInChanged.connect(refreshTabs);
|
||||
//settings.showBroadcastChanged.connect(refreshTabs);
|
||||
refreshTabs();
|
||||
}
|
||||
|
||||
|
|
@ -40,18 +48,28 @@ TabbedPane {
|
|||
}
|
||||
}
|
||||
|
||||
onSidebarStateChanged: {
|
||||
//console.log("onSidebarStateChanged",sidebarState);
|
||||
//sidebarState = SidebarState.VisibleCompact
|
||||
}
|
||||
|
||||
attachedObjects: [
|
||||
Guide {
|
||||
id: guide
|
||||
},
|
||||
KaktusNavigation {
|
||||
id: nav
|
||||
},
|
||||
Notification {
|
||||
id: notification
|
||||
},
|
||||
OrientationHandler {
|
||||
onOrientationChanged: {
|
||||
console.log("onOrientationChanged");
|
||||
if (orientation == UIOrientation.Portrait) {
|
||||
app.width = display.pixelSize.width;
|
||||
app.height = display.pixelSize.height;
|
||||
} else if (orientation == UIOrientation.Landscape) {
|
||||
app.height = display.pixelSize.width;
|
||||
app.width = display.pixelSize.height;
|
||||
}
|
||||
}
|
||||
},
|
||||
ComponentDefinition {
|
||||
id: kaktusTab
|
||||
source: "KaktusTab.qml"
|
||||
|
|
@ -127,7 +145,12 @@ TabbedPane {
|
|||
addTab(1);
|
||||
addTab(3);
|
||||
addTab(4);
|
||||
addTab(5);
|
||||
|
||||
if (app.isNetvibes)
|
||||
addTab(5);
|
||||
else if (app.isOldReader && settings.showBroadcast)
|
||||
addTab(6);
|
||||
|
||||
setActiveTab();
|
||||
} else {
|
||||
activeTab = addTab(settings.viewMode);
|
||||
|
|
@ -156,6 +179,8 @@ TabbedPane {
|
|||
activeTab = tabs[3];
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
activeTab = tabs[4];
|
||||
break;
|
||||
default :
|
||||
|
|
|
|||
BIN
qml/bb10/read-text.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
qml/bb10/readabove-text.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
qml/bb10/readabove.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
qml/bb10/unlike-text.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
qml/bb10/unlike.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
qml/bb10/unread-text.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
qml/bb10/vm6.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
qml/bb10/vm6d.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
|
|
@ -40,7 +40,7 @@ Page {
|
|||
if (code == 0) {
|
||||
fetcher.checkCredentials();
|
||||
} else {
|
||||
if (! dm.busy)
|
||||
if (dm.busy)
|
||||
dm.cancel();
|
||||
if (doInit)
|
||||
fetcher.init();
|
||||
|
|
|
|||
|
|
@ -375,10 +375,10 @@ ListItem {
|
|||
Item {
|
||||
// Broadcast
|
||||
anchors.left: parent.left; anchors.right: parent.right
|
||||
visible: settings.showBroadcast && (!root.hidden || root.expanded) && (root.broadcast || root.annotations!="" || root.liked)
|
||||
visible: settings.showBroadcast && (!root.hidden || root.expanded) && (root.broadcast || root.annotations!="")
|
||||
height: Math.max(broadcastImage.height, broadcastLabel.height)
|
||||
|
||||
Image {
|
||||
/*Image {
|
||||
id: likeImage
|
||||
visible: root.liked
|
||||
anchors.left: parent.left; anchors.top: parent.top
|
||||
|
|
@ -386,12 +386,12 @@ ListItem {
|
|||
height: Theme.iconSizeSmall
|
||||
source: root.down ? "image://icons/like?"+Theme.secondaryHighlightColor :
|
||||
root.hidden ? "image://icons/like?"+Theme.secondaryColor : "image://icons/like?"+Theme.primaryColor
|
||||
}
|
||||
}*/
|
||||
|
||||
Image {
|
||||
id: broadcastImage
|
||||
visible: root.broadcast || root.annotations!=""
|
||||
anchors.left: root.liked ? likeImage.right : parent.left; anchors.top: parent.top
|
||||
anchors.left: parent.left; anchors.top: parent.top
|
||||
width: Theme.iconSizeSmall
|
||||
height: Theme.iconSizeSmall
|
||||
source: root.broadcast ? root.down ? "image://theme/icon-m-share?"+Theme.secondaryHighlightColor :
|
||||
|
|
|
|||
|
|
@ -156,9 +156,9 @@ Page {
|
|||
Component.onCompleted: {
|
||||
//console.log("image:",model.image);
|
||||
// Dynamic creation of new items if last item is compleated
|
||||
if (index==entryModel.count()-1) {
|
||||
if (index==entryModel.count()-2) {
|
||||
//console.log(index);
|
||||
entryModel.createItems(index+1,index+settings.offsetLimit);
|
||||
entryModel.createItems(index+2,index+settings.offsetLimit);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -313,7 +313,7 @@ Page {
|
|||
}
|
||||
|
||||
description: qsTr("After sync the content of all items will be downloaded "+
|
||||
"and cached for access in the Offline mode.")
|
||||
"and cached for access in the offline mode.")
|
||||
}
|
||||
|
||||
SectionHeader {
|
||||
|
|
|
|||
|
|
@ -190,11 +190,11 @@ Page {
|
|||
if (!listItem.last) {
|
||||
if (settings.viewMode == 0) {
|
||||
utils.setFeedModel(uid);
|
||||
pageStack.push(Qt.resolvedUrl("FeedPage.qml"),{"title": model.uid=="subscriptions" ? qsTr("Subscriptions") : model.uid=="friends" ? qsTr("Following") : title, "index": model.index});
|
||||
pageStack.push(Qt.resolvedUrl("FeedPage.qml"),{"title": model.uid=="subscriptions" ? qsTr("Subscriptions") : model.uid=="friends" ? qsTr("Following") : model.uid=="global.uncategorized" ? qsTr("Uncategorized") : title, "index": model.index});
|
||||
}
|
||||
if (settings.viewMode == 1) {
|
||||
utils.setEntryModel(uid);
|
||||
pageStack.push(Qt.resolvedUrl("EntryPage.qml"),{"title": model.uid=="subscriptions" ? qsTr("Subscriptions") : model.uid=="friends" ? qsTr("Following") : title, "readlater": false});
|
||||
pageStack.push(Qt.resolvedUrl("EntryPage.qml"),{"title": model.uid=="subscriptions" ? qsTr("Subscriptions") : model.uid=="friends" ? qsTr("Following") : model.uid=="global.uncategorized" ? qsTr("Uncategorized") : title, "readlater": false});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||