summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2015-04-25 08:38:43 +0200
committerTomasz Sterna <tomek@xiaoka.com>2015-04-25 08:38:43 +0200
commit55a97fbc8cfd51dafeda9849b00a49fa813c8b4d (patch)
treeda0ad4e9774c9c8b7c846e715aaf3ab601fe283a
parent78f037bd6f6c15e71d7a3b6c096c51c8f4345641 (diff)
parenta3bbbfaf8b7c73ed4c57e7d535032e55963d501d (diff)
Merge pull request #56 from smurfy/store-improvements
Store improvements
-rw-r--r--app/pebblestoreview.cpp88
-rw-r--r--app/pebblestoreview.h7
-rw-r--r--app/qml/pages/AppStorePage.qml61
3 files changed, 142 insertions, 14 deletions
diff --git a/app/pebblestoreview.cpp b/app/pebblestoreview.cpp
index 0ea5c14..717eff3 100644
--- a/app/pebblestoreview.cpp
+++ b/app/pebblestoreview.cpp
@@ -57,6 +57,14 @@ void PebbleStoreView::gotoWatchApps()
setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("appstore/watchapps").toString()));
}
+void PebbleStoreView::searchQuery(QString query)
+{
+ QString baseUrl = this->storeConfigObject.value("webviews").toObject().value("appstore/search/query").toString();
+ baseUrl = baseUrl.replace("?q", "?query"); //fix wrong param name
+ baseUrl = baseUrl.replace("$$query$$", query);
+ setUrl(prepareUrl(baseUrl));
+}
+
void PebbleStoreView::fetchData(QUrl url)
{
QNetworkRequest request;
@@ -65,9 +73,55 @@ void PebbleStoreView::fetchData(QUrl url)
this->m_networkManager->get(request);
}
+void PebbleStoreView::addToLocker(QJsonObject data)
+{
+ QUrl url(data.value("links").toObject().value("add").toString());
+ QString token("Bearer " + this->accessToken());
+ QNetworkRequest request;
+ request.setUrl(url);
+ request.setRawHeader("Cache-Control", "no-cache");
+ request.setRawHeader("Authorization", token.toUtf8());
+ this->m_networkManager->post(request, "");
+}
+
+void PebbleStoreView::removeFromLocker(QJsonObject data)
+{
+ QUrl url(data.value("links").toObject().value("remove").toString());
+ QString token("Bearer " + this->accessToken());
+ QNetworkRequest request;
+ request.setUrl(url);
+ request.setRawHeader("Cache-Control", "no-cache");
+ request.setRawHeader("Authorization", token.toUtf8());
+ this->m_networkManager->post(request, "");
+}
+
+void PebbleStoreView::showLocker()
+{
+ QUrl url(this->storeConfigObject.value("links").toObject().value("users/app_locker").toString());
+ QString token("Bearer " + this->accessToken());
+ QNetworkRequest request;
+ request.setUrl(url);
+ request.setRawHeader("Cache-Control", "no-cache");
+ request.setRawHeader("Authorization", token.toUtf8());
+ this->m_networkManager->get(request);
+}
+
+void PebbleStoreView::showMe()
+{
+ QUrl url(this->storeConfigObject.value("links").toObject().value("users/me").toString());
+ QString token("Bearer " + this->accessToken());
+ QNetworkRequest request;
+ request.setUrl(url);
+ request.setRawHeader("Cache-Control", "no-cache");
+ request.setRawHeader("Authorization", token.toUtf8());
+ this->m_networkManager->get(request);
+}
+
void PebbleStoreView::onNetworkReplyFinished(QNetworkReply* reply)
{
- qDebug()<<"Download finished";
+ qDebug()<<"Download finished"<<reply->request().url();
+
+ //Config url
if (reply->request().url() == this->m_configUrl) {
QJsonDocument jsonResponse = QJsonDocument::fromJson(reply->readAll());
QJsonObject jsonObject = jsonResponse.object();
@@ -78,7 +132,16 @@ void PebbleStoreView::onNetworkReplyFinished(QNetworkReply* reply)
} else {
setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("onboarding/get_some_apps").toString()));
}
- } else {
+ //Add download to locker
+ } else if (!this->downloadObject.isEmpty() && reply->request().url() == this->downloadObject.value("links").toObject().value("add").toString()) {
+ qDebug()<<reply->readAll();
+ this->m_downloadInProgress = false;
+ emit downloadInProgressChanged();
+ //Remove from locker
+ } else if (!this->downloadObject.isEmpty() && reply->request().url() == this->downloadObject.value("links").toObject().value("remove").toString()) {
+ qDebug()<<reply->readAll();
+ //PBW file
+ } else if (!this->downloadObject.isEmpty() && reply->request().url() == this->downloadObject.value("pbw_file").toString()) {
QDir dataDir(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
QFile file(dataDir.absoluteFilePath("apps") + "/" + this->downloadObject.value("uuid").toString() + ".pbw");
file.open(QIODevice::WriteOnly);
@@ -86,9 +149,15 @@ void PebbleStoreView::onNetworkReplyFinished(QNetworkReply* reply)
file.close();
qDebug()<<this->downloadObject;
-
- this->m_downloadInProgress = false;
- emit downloadInProgressChanged();
+ this->addToLocker(this->downloadObject);
+ //Locker
+ } else if (reply->request().url() == this->storeConfigObject.value("links").toObject().value("users/app_locker").toString()) {
+ qDebug()<<reply->readAll();
+ //Me
+ } else if (reply->request().url() == this->storeConfigObject.value("links").toObject().value("users/me").toString()) {
+ qDebug()<<reply->readAll();
+ } else {
+ qDebug()<<"Unknown download finished!";
}
}
@@ -127,10 +196,10 @@ void PebbleStoreView::onNavigationRequested(QWebNavigationRequest* request)
if (reg.indexIn(urlStr) > -1) {
QString methodStr = reg.cap(1);
QString argsStr = QUrl::fromPercentEncoding(reg.cap(2).toUtf8());
- emit call(methodStr, argsStr);
+ QJsonDocument jsonResponse = QJsonDocument::fromJson(argsStr.toUtf8());
+ QJsonObject jsonObject = jsonResponse.object();
+ qDebug()<<"Call"<<methodStr<<jsonObject;
if (methodStr == "loadAppToDeviceAndLocker") {
- QJsonDocument jsonResponse = QJsonDocument::fromJson(argsStr.toUtf8());
- QJsonObject jsonObject = jsonResponse.object();
QJsonObject data = jsonObject.value("data").toObject();
qDebug()<<"download"<<data.value("title").toString()<<data.value("pbw_file").toString();
this->downloadObject = data;;
@@ -138,6 +207,9 @@ void PebbleStoreView::onNavigationRequested(QWebNavigationRequest* request)
emit downloadInProgressChanged();
fetchData(QUrl(data.value("pbw_file").toString()));
emit downloadPebbleApp(data.value("title").toString(), data.value("pbw_file").toString());
+ } else if (methodStr == "setNavBarTitle") {
+ QJsonObject data = jsonObject.value("data").toObject();
+ emit titleChanged(data.value("title").toString());
}
}
}
diff --git a/app/pebblestoreview.h b/app/pebblestoreview.h
index a19b43d..551b863 100644
--- a/app/pebblestoreview.h
+++ b/app/pebblestoreview.h
@@ -25,6 +25,7 @@ public:
public slots:
void gotoWatchFaces();
void gotoWatchApps();
+ void searchQuery(QString query);
void logout();
private slots:
@@ -35,7 +36,7 @@ signals:
void accessTokenChanged(const QString & accessToken);
void downloadPebbleApp(const QString & downloadTitle, const QString & downloadUrl);
void downloadInProgressChanged();
- void call(const QString &, const QString &);
+ void titleChanged(const QString & title);
private:
QNetworkAccessManager* m_networkManager;
@@ -47,6 +48,10 @@ private:
QUrl prepareUrl(QString baseUrl);
void fetchData(QUrl url);
+ void addToLocker(QJsonObject data);
+ void removeFromLocker(QJsonObject data);
+ void showLocker();
+ void showMe();
};
#endif // PEBBLESTOREVIEW_H
diff --git a/app/qml/pages/AppStorePage.qml b/app/qml/pages/AppStorePage.qml
index 680ac50..82a8542 100644
--- a/app/qml/pages/AppStorePage.qml
+++ b/app/qml/pages/AppStorePage.qml
@@ -7,6 +7,8 @@ import org.nemomobile.configuration 1.0
Page {
id: page
+ property bool showSearch;
+
ConfigurationGroup {
id: settings
path: "/org/pebbled/settings"
@@ -24,7 +26,16 @@ Page {
MenuItem {
text: qsTr("Logout")
onClicked: {
- webview.logout();
+ remorse.execute(qsTr("Logging out..."), function() {
+ webview.logout();
+ });
+ }
+ }
+
+ MenuItem {
+ text: showSearch ? qsTr("Hide search") : qsTr("Show search");
+ onClicked: {
+ showSearch = !showSearch;
}
}
}
@@ -32,33 +43,65 @@ Page {
Column {
id: column
width: page.width
- spacing: Theme.paddingLarge
PageHeader {
+ id: pageHeadTitle
title: qsTr("Pebble Appstore")
}
+ SearchField {
+ width: parent.width
+ visible: webview.loggedin && showSearch
+ id: searchField
+ onTextChanged: {
+ var q = searchField.text.trim();
+ if (q.length >= 2) {
+ webview.searchQuery(q);
+ }
+ }
+ }
+
Row {
anchors.horizontalCenter: parent.horizontalCenter
- visible: webview.loggedin;
+ visible: webview.loggedin
+
+ IconButton {
+ id: backButton
+ enabled: webview.canGoBack
+ icon.source: "image://theme/icon-m-back"
+ onClicked: {
+ webview.goBack();
+ }
+ }
+
Button {
- text: qsTr("WatchApps")
+ text: qsTr("Apps")
+ width: (page.width - loadingIndicator.width - backButton.width - Theme.paddingMedium) / 2
onClicked: {
webview.gotoWatchApps();
}
}
+
Button {
- text: qsTr("WatchFaces")
+ text: qsTr("Faces")
+ width: (page.width - loadingIndicator.width - backButton.width - Theme.paddingMedium) / 2
onClicked: {
webview.gotoWatchFaces();
}
}
+
+ BusyIndicator {
+ id: loadingIndicator
+ running: webview.loading
+ size: BusyIndicatorSize.Medium
+ }
}
Column {
id: download
visible: webview.downloadInProgress
width: parent.width
+ spacing: Theme.paddingLarge
Label {
anchors.horizontalCenter: parent.horizontalCenter
@@ -74,6 +117,10 @@ Page {
}
}
+ RemorsePopup {
+ id: remorse
+ }
+
PebbleStoreView {
id: webview
visible: !webview.downloadInProgress
@@ -93,6 +140,10 @@ Page {
onDownloadPebbleApp: {
downloadLabel.text = qsTr("Downloading %1...").arg(downloadTitle)
}
+
+ onTitleChanged: {
+ pageHeadTitle.title = title;
+ }
}
}