Implemented sync-time capturing and offline detection
This commit is contained in:
parent
4341b2bd01
commit
52132195a5
7 changed files with 81 additions and 6 deletions
|
@ -1,6 +1,7 @@
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import Sailfish.Silica 1.0
|
import Sailfish.Silica 1.0
|
||||||
import Nemo.Configuration 1.0
|
import Nemo.Configuration 1.0
|
||||||
|
import Nemo.Notifications 1.0
|
||||||
import harbour.nextcloudnotes.notesapi 1.0
|
import harbour.nextcloudnotes.notesapi 1.0
|
||||||
import "pages"
|
import "pages"
|
||||||
|
|
||||||
|
@ -89,6 +90,15 @@ ApplicationWindow
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Notification {
|
||||||
|
id: offlineNotification
|
||||||
|
expireTimeout: 0
|
||||||
|
appName: "Nextcloud " + qsTr("Notes")
|
||||||
|
summary: qsTr("Offline")
|
||||||
|
body: qsTr("Synced") + ": " + new Date(notesApi.lastSync).toLocaleString(Qt.locale())
|
||||||
|
Component.onDestruction: close(Notification.Expired)
|
||||||
|
}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
id: autoSyncTimer
|
id: autoSyncTimer
|
||||||
interval: appSettings.autoSyncInterval * 1000
|
interval: appSettings.autoSyncInterval * 1000
|
||||||
|
@ -120,6 +130,11 @@ ApplicationWindow
|
||||||
sslVerify: !account.doNotVerifySsl
|
sslVerify: !account.doNotVerifySsl
|
||||||
dataFile: appSettings.currentAccount !== "" ? StandardPaths.data + "/" + appSettings.currentAccount + ".json" : ""
|
dataFile: appSettings.currentAccount !== "" ? StandardPaths.data + "/" + appSettings.currentAccount + ".json" : ""
|
||||||
Component.onCompleted: getAllNotes()
|
Component.onCompleted: getAllNotes()
|
||||||
|
onNetworkAccessibleChanged: {
|
||||||
|
console.log("Device is " + (networkAccessible ? "online" : "offline"))
|
||||||
|
networkAccessible ? offlineNotification.close(Notification.Closed) : offlineNotification.publish()
|
||||||
|
}
|
||||||
|
onLastSyncChanged: account.update = lastSync
|
||||||
}
|
}
|
||||||
|
|
||||||
initialPage: Component { NotesPage { } }
|
initialPage: Component { NotesPage { } }
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
NotesApi::NotesApi(QObject *parent) : QObject(parent)
|
NotesApi::NotesApi(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
m_online = m_manager.networkAccessible() == QNetworkAccessManager::Accessible;
|
||||||
mp_model = new NotesModel(this);
|
mp_model = new NotesModel(this);
|
||||||
mp_modelProxy = new NotesProxyModel(this);
|
mp_modelProxy = new NotesProxyModel(this);
|
||||||
mp_modelProxy->setSourceModel(mp_model);
|
mp_modelProxy->setSourceModel(mp_model);
|
||||||
|
@ -225,16 +226,21 @@ void NotesApi::verifyUrl(QUrl url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotesApi::onNetworkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible) {
|
void NotesApi::onNetworkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible) {
|
||||||
qDebug() << m_manager.networkAccessible();
|
m_online = accessible == QNetworkAccessManager::Accessible;
|
||||||
emit networkAccessibleChanged(accessible == QNetworkAccessManager::Accessible);
|
//qDebug() << m_online;
|
||||||
|
emit networkAccessibleChanged(m_online);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NotesApi::replyFinished(QNetworkReply *reply) {
|
void NotesApi::replyFinished(QNetworkReply *reply) {
|
||||||
if (reply->error() == QNetworkReply::NoError) {
|
if (reply->error() == QNetworkReply::NoError) {
|
||||||
QByteArray data = reply->readAll();
|
QByteArray data = reply->readAll();
|
||||||
QJsonDocument json = QJsonDocument::fromJson(data);
|
QJsonDocument json = QJsonDocument::fromJson(data);
|
||||||
if (mp_model)
|
if (mp_model) {
|
||||||
mp_model->fromJsonDocument(json);
|
if (mp_model->fromJsonDocument(json)) {
|
||||||
|
m_lastSync = QDateTime::currentDateTimeUtc();
|
||||||
|
emit lastSyncChanged(m_lastSync);
|
||||||
|
}
|
||||||
|
}
|
||||||
//qDebug() << data;
|
//qDebug() << data;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -56,7 +56,10 @@ public:
|
||||||
void setDataFile(QString dataFile);
|
void setDataFile(QString dataFile);
|
||||||
|
|
||||||
Q_PROPERTY(bool networkAccessible READ networkAccessible NOTIFY networkAccessibleChanged)
|
Q_PROPERTY(bool networkAccessible READ networkAccessible NOTIFY networkAccessibleChanged)
|
||||||
bool networkAccessible() const { return m_manager.networkAccessible() == QNetworkAccessManager::Accessible; }
|
bool networkAccessible() const { return m_online; }
|
||||||
|
|
||||||
|
Q_PROPERTY(QDateTime lastSync READ lastSync NOTIFY lastSyncChanged)
|
||||||
|
QDateTime lastSync() const { return m_lastSync; }
|
||||||
|
|
||||||
Q_PROPERTY(bool ready READ ready NOTIFY readyChanged)
|
Q_PROPERTY(bool ready READ ready NOTIFY readyChanged)
|
||||||
bool ready() const;
|
bool ready() const;
|
||||||
|
@ -83,6 +86,7 @@ signals:
|
||||||
void pathChanged(QString path);
|
void pathChanged(QString path);
|
||||||
void dataFileChanged(QString dataFile);
|
void dataFileChanged(QString dataFile);
|
||||||
void networkAccessibleChanged(bool accessible);
|
void networkAccessibleChanged(bool accessible);
|
||||||
|
void lastSyncChanged(QDateTime lastSync);
|
||||||
void readyChanged(bool ready);
|
void readyChanged(bool ready);
|
||||||
void busyChanged(bool busy);
|
void busyChanged(bool busy);
|
||||||
|
|
||||||
|
@ -97,6 +101,8 @@ private slots:
|
||||||
void saveToFile(QModelIndex,QModelIndex,QVector<int>);
|
void saveToFile(QModelIndex,QModelIndex,QVector<int>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_online;
|
||||||
|
QDateTime m_lastSync;
|
||||||
QUrl m_url;
|
QUrl m_url;
|
||||||
QNetworkAccessManager m_manager;
|
QNetworkAccessManager m_manager;
|
||||||
QNetworkRequest m_request;
|
QNetworkRequest m_request;
|
||||||
|
|
|
@ -81,7 +81,7 @@ bool NotesModel::fromJsonDocument(const QJsonDocument &jdoc) {
|
||||||
}
|
}
|
||||||
else if (jdoc.isObject()) {
|
else if (jdoc.isObject()) {
|
||||||
qDebug() << "- It's a single object...";
|
qDebug() << "- It's a single object...";
|
||||||
return insertNote(jdoc.object()) >= 0;
|
insertNote(jdoc.object()) >= 0;
|
||||||
}
|
}
|
||||||
else if (jdoc.isEmpty()) {
|
else if (jdoc.isEmpty()) {
|
||||||
qDebug() << "- Empty JSON document.";
|
qDebug() << "- Empty JSON document.";
|
||||||
|
|
|
@ -609,4 +609,19 @@ You can also use other markdown syntax inside them.</source>
|
||||||
<translation>Ich benutze diese Option auf eigene Gefahr</translation>
|
<translation>Ich benutze diese Option auf eigene Gefahr</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>harbour-nextcloudnotes</name>
|
||||||
|
<message>
|
||||||
|
<source>Offline</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Notes</source>
|
||||||
|
<translation type="unfinished">Notizen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Synced</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
|
@ -609,4 +609,19 @@ You can also use other markdown syntax inside them.</source>
|
||||||
<translation>Ditt användarnamn och lösenord överförs okrypterat över nätverket när du aktiverar det här alternativet.</translation>
|
<translation>Ditt användarnamn och lösenord överförs okrypterat över nätverket när du aktiverar det här alternativet.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>harbour-nextcloudnotes</name>
|
||||||
|
<message>
|
||||||
|
<source>Offline</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Notes</source>
|
||||||
|
<translation type="unfinished">Anteckningar</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Synced</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
|
@ -749,4 +749,22 @@ You can also use other markdown syntax inside them.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>harbour-nextcloudnotes</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../qml/harbour-nextcloudnotes.qml" line="96"/>
|
||||||
|
<source>Notes</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../qml/harbour-nextcloudnotes.qml" line="97"/>
|
||||||
|
<source>Offline</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../qml/harbour-nextcloudnotes.qml" line="98"/>
|
||||||
|
<source>Synced</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|
Loading…
Reference in a new issue