diff options
| -rw-r--r-- | app/pebblestoreview.cpp | 88 | ||||
| -rw-r--r-- | app/pebblestoreview.h | 7 | ||||
| -rw-r--r-- | app/qml/pages/AppStorePage.qml | 61 |
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; + } } } |
