diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | app/pebblestoreview.cpp | 38 | ||||
| -rw-r--r-- | app/pebblestoreview.h | 6 | ||||
| -rw-r--r-- | app/qml/pages/AppStorePage.qml | 1 | ||||
| -rw-r--r-- | app/translations/pebble-es.ts | 75 | ||||
| -rw-r--r-- | app/translations/pebble-ja_JP.ts | 24 | ||||
| -rw-r--r-- | app/translations/pebble-nl_NL.ts | 67 | ||||
| -rw-r--r-- | app/translations/pebble-pl.ts | 110 | ||||
| -rw-r--r-- | app/translations/pebble-zh_CN.ts | 78 | ||||
| -rw-r--r-- | app/translations/pebble.ts | 67 | ||||
| -rw-r--r-- | daemon/jskitmanager.cpp | 8 | ||||
| -rw-r--r-- | daemon/jskitobjects.cpp | 64 | ||||
| -rw-r--r-- | daemon/jskitobjects.h | 11 | ||||
| -rw-r--r-- | daemon/watchconnector.cpp | 106 | ||||
| -rw-r--r-- | daemon/watchconnector.h | 10 | ||||
| -rw-r--r-- | rpm/pebble.changes | 14 | ||||
| -rw-r--r-- | rpm/pebble.spec | 2 | ||||
| -rw-r--r-- | rpm/pebble.yaml | 2 |
18 files changed, 492 insertions, 193 deletions
@@ -1,6 +1,6 @@ pebbled ======= -[](https://gitter.im/smokku/pebble?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[](https://gitter.im/smokku/pebble?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) . [](https://flattr.com/submit/auto?user_id=smoku&url=http://github.com/smokku/pebble&title=pebble&language=&tags=github&category=software) Unofficial Pebble watch support for SailfishOS/Jolla diff --git a/app/pebblestoreview.cpp b/app/pebblestoreview.cpp index 717eff3..17d690f 100644 --- a/app/pebblestoreview.cpp +++ b/app/pebblestoreview.cpp @@ -11,8 +11,18 @@ PebbleStoreView::PebbleStoreView() this->m_networkManager = new QNetworkAccessManager(this); connect(this->m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onNetworkReplyFinished(QNetworkReply*))); +} + +void PebbleStoreView::fetchConfig() +{ + qDebug()<<this->m_hardwarePlatform; + + if (this->m_hardwarePlatform == "aplite") { + this->m_configUrl = QUrl("https://boot.getpebble.com/api/config/android/v1/3"); + } else { + this->m_configUrl = QUrl("https://boot.getpebble.com/api/config/android/v3/1?app_version=3.4.0"); + } - this->m_configUrl = QUrl("https://boot.getpebble.com/api/config/android/v1/3"); this->m_downloadInProgress = false; emit downloadInProgressChanged(); @@ -31,10 +41,25 @@ void PebbleStoreView::setAccessToken(const QString &accessToken) emit accessTokenChanged(accessToken); } +QString PebbleStoreView::hardwarePlatform() const +{ + return this->m_hardwarePlatform; +} + +void PebbleStoreView::setHardwarePlatform(const QString &hardwarePlatform) +{ + this->m_hardwarePlatform = hardwarePlatform; + emit hardwarePlatformChanged(hardwarePlatform); + + //We need to refetch the config after a platform change + this->fetchConfig(); +} + + void PebbleStoreView::logout() { setAccessToken(""); - setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("authentication").toString())); + setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("authentication/sign_in").toString())); } bool PebbleStoreView::loggedin() @@ -128,7 +153,7 @@ void PebbleStoreView::onNetworkReplyFinished(QNetworkReply* reply) this->storeConfigObject = jsonObject.value("config").toObject(); if (this->m_accessToken.isEmpty()) { - setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("authentication").toString())); + setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("authentication/sign_in").toString())); } else { setUrl(prepareUrl(this->storeConfigObject.value("webviews").toObject().value("onboarding/get_some_apps").toString())); } @@ -164,9 +189,12 @@ void PebbleStoreView::onNetworkReplyFinished(QNetworkReply* reply) QUrl PebbleStoreView::prepareUrl(QString baseUrl) { baseUrl = baseUrl.replace("$$user_id$$", "ZZZ"); - baseUrl = baseUrl.replace("$$phone_id$$", "XXX"); - baseUrl = baseUrl.replace("$$pebble_id$$", "YYY"); + baseUrl = baseUrl.replace("$$phone_id$$", "XXX"); //Unique phone id + baseUrl = baseUrl.replace("$$pebble_id$$", "YYY"); //official APP puts serial here + baseUrl = baseUrl.replace("$$pebble_color$$", "64"); + baseUrl = baseUrl.replace("$$hardware$$", this->m_hardwarePlatform); baseUrl = baseUrl.replace("$$access_token$$", this->m_accessToken); + baseUrl = baseUrl.replace("$$extras$$", ""); qDebug()<<baseUrl; diff --git a/app/pebblestoreview.h b/app/pebblestoreview.h index 551b863..24b7807 100644 --- a/app/pebblestoreview.h +++ b/app/pebblestoreview.h @@ -16,11 +16,14 @@ public: Q_PROPERTY(bool loggedin READ loggedin NOTIFY accessTokenChanged) Q_PROPERTY(bool downloadInProgress READ downloadInProgress NOTIFY downloadInProgressChanged) Q_PROPERTY(QString accessToken READ accessToken WRITE setAccessToken NOTIFY accessTokenChanged) + Q_PROPERTY(QString hardwarePlatform READ hardwarePlatform WRITE setHardwarePlatform NOTIFY hardwarePlatformChanged) bool loggedin(); bool downloadInProgress(); QString accessToken() const; void setAccessToken(const QString &accessToken); + QString hardwarePlatform() const; + void setHardwarePlatform(const QString &hardwarePlatform); public slots: void gotoWatchFaces(); @@ -34,6 +37,7 @@ private slots: signals: void accessTokenChanged(const QString & accessToken); + void hardwarePlatformChanged(const QString & hardwarePlatform); void downloadPebbleApp(const QString & downloadTitle, const QString & downloadUrl); void downloadInProgressChanged(); void titleChanged(const QString & title); @@ -42,11 +46,13 @@ private: QNetworkAccessManager* m_networkManager; QUrl m_configUrl; QString m_accessToken; + QString m_hardwarePlatform; QJsonObject downloadObject; QJsonObject storeConfigObject; bool m_downloadInProgress; QUrl prepareUrl(QString baseUrl); + void fetchConfig(); void fetchData(QUrl url); void addToLocker(QJsonObject data); void removeFromLocker(QJsonObject data); diff --git a/app/qml/pages/AppStorePage.qml b/app/qml/pages/AppStorePage.qml index 4993b1b..58e854d 100644 --- a/app/qml/pages/AppStorePage.qml +++ b/app/qml/pages/AppStorePage.qml @@ -134,6 +134,7 @@ Page { } accessToken: settings.storeAccessToken + hardwarePlatform: pebbled.info.platform onAccessTokenChanged: { settings.storeAccessToken = accessToken; diff --git a/app/translations/pebble-es.ts b/app/translations/pebble-es.ts index 6b667e4..4d1ef89 100644 --- a/app/translations/pebble-es.ts +++ b/app/translations/pebble-es.ts @@ -75,47 +75,47 @@ <context> <name>AppStorePage</name> <message> - <location filename="../qml/pages/AppStorePage.qml" line="27"/> + <location filename="../qml/pages/AppStorePage.qml" line="28"/> <source>Logout</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="29"/> + <location filename="../qml/pages/AppStorePage.qml" line="30"/> <source>Logging out...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Hide search</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Show search</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="49"/> + <location filename="../qml/pages/AppStorePage.qml" line="50"/> <source>Pebble Appstore</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="78"/> + <location filename="../qml/pages/AppStorePage.qml" line="79"/> <source>Apps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="86"/> + <location filename="../qml/pages/AppStorePage.qml" line="87"/> <source>Faces</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="109"/> + <location filename="../qml/pages/AppStorePage.qml" line="110"/> <source>Downloading...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="141"/> + <location filename="../qml/pages/AppStorePage.qml" line="143"/> <source>Downloading %1...</source> <translation type="unfinished"></translation> </message> @@ -161,18 +161,10 @@ <translation type="unfinished"></translation> </message> <message> - <source>Version</source> - <translation type="obsolete">Versión</translation> - </message> - <message> <location filename="../qml/pages/Disclaimer.qml" line="41"/> <source>PayPal Donate</source> <translation type="unfinished"></translation> </message> - <message> - <source>Bugs?</source> - <translation type="obsolete">¿Errores?</translation> - </message> </context> <context> <name>InstallAppDialog</name> @@ -425,62 +417,87 @@ Si esto tarda mucho, comprueba que el reloj esté emparejado correctamente.</tra <context> <name>WatchPage</name> <message> - <location filename="../qml/pages/WatchPage.qml" line="34"/> + <location filename="../qml/pages/WatchPage.qml" line="41"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="40"/> + <location filename="../qml/pages/WatchPage.qml" line="47"/> <source>Ping</source> <translation>Ping</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="46"/> + <location filename="../qml/pages/WatchPage.qml" line="53"/> <source>Sync Time</source> <translation>Ajustar hora</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="78"/> + <location filename="../qml/pages/WatchPage.qml" line="119"/> <source>Installed applications</source> <translation>Aplicaciones instaladas</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="68"/> + <location filename="../qml/pages/WatchPage.qml" line="109"/> <source>Your firmware is too old to support SDKv2 applications</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="116"/> + <location filename="../qml/pages/WatchPage.qml" line="67"/> + <source>SMS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="72"/> + <source>E-Mail</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="77"/> + <source>FB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="82"/> + <source>Twt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="87"/> + <source>Music</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="157"/> <source>Uninstalling</source> <translation>Desinstalando</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(empty slot)</source> <translation>(hueco libre)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(slot in use by unknown app)</source> <translation>(hueco en uso)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="197"/> + <location filename="../qml/pages/WatchPage.qml" line="238"/> <source>Install app...</source> <translation>Instalar app...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="202"/> + <location filename="../qml/pages/WatchPage.qml" line="243"/> <source>Companion app missing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="215"/> + <location filename="../qml/pages/WatchPage.qml" line="256"/> <source>Configure...</source> <translation>Configurar...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="220"/> + <location filename="../qml/pages/WatchPage.qml" line="261"/> <source>Uninstall</source> <translation>Desinstalar</translation> </message> diff --git a/app/translations/pebble-ja_JP.ts b/app/translations/pebble-ja_JP.ts index 8c544ec..f6f3142 100644 --- a/app/translations/pebble-ja_JP.ts +++ b/app/translations/pebble-ja_JP.ts @@ -69,53 +69,53 @@ <message> <location filename="../qml/pages/AppConfigDialog.qml" line="75"/> <source>No configuration settings available</source> - <translation type="unfinished"></translation> + <translation>利用可能な設定はありません。</translation> </message> </context> <context> <name>AppStorePage</name> <message> - <location filename="../qml/pages/AppStorePage.qml" line="27"/> + <location filename="../qml/pages/AppStorePage.qml" line="28"/> <source>Logout</source> <translation>ログアウト</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="29"/> + <location filename="../qml/pages/AppStorePage.qml" line="30"/> <source>Logging out...</source> <translation>ログアウトしています...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Hide search</source> <translation>検索バーを隠す</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Show search</source> <translation>検索バーを開く</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="49"/> + <location filename="../qml/pages/AppStorePage.qml" line="50"/> <source>Pebble Appstore</source> - <translation type="unfinished">Pebbleアプリストア</translation> + <translation>Pebbleアプリストア</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="78"/> + <location filename="../qml/pages/AppStorePage.qml" line="79"/> <source>Apps</source> <translation>アプリ</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="86"/> + <location filename="../qml/pages/AppStorePage.qml" line="87"/> <source>Faces</source> <translation>フェイス</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="109"/> + <location filename="../qml/pages/AppStorePage.qml" line="110"/> <source>Downloading...</source> <translation>ダウンロード中...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="141"/> + <location filename="../qml/pages/AppStorePage.qml" line="143"/> <source>Downloading %1...</source> <translation>ダウンロード中 %1...</translation> </message> @@ -463,7 +463,7 @@ If it can't be found please check it's available and paired in Bluetoo <message> <location filename="../qml/pages/WatchPage.qml" line="119"/> <source>Installed applications</source> - <translation>アプリケーションをインストール</translation> + <translation>インストール済みのアプリ</translation> </message> <message> <location filename="../qml/pages/WatchPage.qml" line="157"/> diff --git a/app/translations/pebble-nl_NL.ts b/app/translations/pebble-nl_NL.ts index 1ab4dd3..319e1bb 100644 --- a/app/translations/pebble-nl_NL.ts +++ b/app/translations/pebble-nl_NL.ts @@ -75,47 +75,47 @@ <context> <name>AppStorePage</name> <message> - <location filename="../qml/pages/AppStorePage.qml" line="27"/> + <location filename="../qml/pages/AppStorePage.qml" line="28"/> <source>Logout</source> <translation>Afmelden</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="29"/> + <location filename="../qml/pages/AppStorePage.qml" line="30"/> <source>Logging out...</source> <translation>Bezig met afmelden...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Hide search</source> <translation>Zoeken verbergen</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Show search</source> <translation>Zoeken tonen</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="49"/> + <location filename="../qml/pages/AppStorePage.qml" line="50"/> <source>Pebble Appstore</source> <translation>Pebble Appstore</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="78"/> + <location filename="../qml/pages/AppStorePage.qml" line="79"/> <source>Apps</source> <translation>Apps</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="86"/> + <location filename="../qml/pages/AppStorePage.qml" line="87"/> <source>Faces</source> <translation>Faces</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="109"/> + <location filename="../qml/pages/AppStorePage.qml" line="110"/> <source>Downloading...</source> <translation>Bezig met downloaden...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="141"/> + <location filename="../qml/pages/AppStorePage.qml" line="143"/> <source>Downloading %1...</source> <translation>Bezig met downloaden %1...</translation> </message> @@ -417,62 +417,87 @@ Als hij niet gevonden kan worden, controleer dan of hij beschikbaar en gekoppeld <context> <name>WatchPage</name> <message> - <location filename="../qml/pages/WatchPage.qml" line="34"/> + <location filename="../qml/pages/WatchPage.qml" line="41"/> <source>Info</source> <translation>Info</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="40"/> + <location filename="../qml/pages/WatchPage.qml" line="47"/> <source>Ping</source> <translation>Ping</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="46"/> + <location filename="../qml/pages/WatchPage.qml" line="53"/> <source>Sync Time</source> <translation>Tijd syncen</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="78"/> + <location filename="../qml/pages/WatchPage.qml" line="119"/> <source>Installed applications</source> <translation>Geïnstalleerde applicaties</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="68"/> + <location filename="../qml/pages/WatchPage.qml" line="109"/> <source>Your firmware is too old to support SDKv2 applications</source> <translation>Uw firmware is te oud om SDKv2-applicaties te ondersteunen</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="116"/> + <location filename="../qml/pages/WatchPage.qml" line="67"/> + <source>SMS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="72"/> + <source>E-Mail</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="77"/> + <source>FB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="82"/> + <source>Twt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="87"/> + <source>Music</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="157"/> <source>Uninstalling</source> <translation>Bezig met de-installeren</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(empty slot)</source> <translation>(leeg vak)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(slot in use by unknown app)</source> <translation>(vak gebruikt door onbekende app)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="197"/> + <location filename="../qml/pages/WatchPage.qml" line="238"/> <source>Install app...</source> <translation>App installeren...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="202"/> + <location filename="../qml/pages/WatchPage.qml" line="243"/> <source>Companion app missing</source> <translation>Bijbehorende app ontbreekt</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="215"/> + <location filename="../qml/pages/WatchPage.qml" line="256"/> <source>Configure...</source> <translation>Instellen...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="220"/> + <location filename="../qml/pages/WatchPage.qml" line="261"/> <source>Uninstall</source> <translation>De-installeren</translation> </message> diff --git a/app/translations/pebble-pl.ts b/app/translations/pebble-pl.ts index 12970b3..f3d39cb 100644 --- a/app/translations/pebble-pl.ts +++ b/app/translations/pebble-pl.ts @@ -75,47 +75,47 @@ <context> <name>AppStorePage</name> <message> - <location filename="../qml/pages/AppStorePage.qml" line="27"/> + <location filename="../qml/pages/AppStorePage.qml" line="28"/> <source>Logout</source> <translation>Wyloguj</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="29"/> + <location filename="../qml/pages/AppStorePage.qml" line="30"/> <source>Logging out...</source> <translation>Wylogowywanie...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Hide search</source> <translation>Schowaj wyszukiwanie</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Show search</source> <translation>Pokaż wyszukiwanie</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="49"/> + <location filename="../qml/pages/AppStorePage.qml" line="50"/> <source>Pebble Appstore</source> <translation>Pebble Appstore</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="78"/> + <location filename="../qml/pages/AppStorePage.qml" line="79"/> <source>Apps</source> <translation>Aplikacje</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="86"/> + <location filename="../qml/pages/AppStorePage.qml" line="87"/> <source>Faces</source> <translation>Cyferblaty</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="109"/> + <location filename="../qml/pages/AppStorePage.qml" line="110"/> <source>Downloading...</source> <translation>Pobieranie...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="141"/> + <location filename="../qml/pages/AppStorePage.qml" line="143"/> <source>Downloading %1...</source> <translation>Pobieranie %1...</translation> </message> @@ -161,53 +161,10 @@ <translation>Kod aktywacyjny</translation> </message> <message> - <source>Version</source> - <translation type="obsolete">Wersja</translation> - </message> - <message> - <source>All Rights Reserved.</source> - <translation type="obsolete">Wszelkie prawa zastrzeżone.</translation> - </message> - <message> - <source>Support</source> - <translation type="obsolete">Wsparcie</translation> - </message> - <message> - <source>Your donations help justify development time.</source> - <translation type="obsolete">Dotacje pomagają uzasadnić czas poświęcony na rozwój aplikacji.</translation> - </message> - <message> <location filename="../qml/pages/Disclaimer.qml" line="41"/> <source>PayPal Donate</source> <translation>Dotacja PayPal</translation> </message> - <message> - <source>Bugs?</source> - <translation type="obsolete">Błędy?</translation> - </message> - <message> - <source>Open Bug Tracker</source> - <translation type="obsolete">Otwórz Bug Tracker</translation> - </message> - <message> - <source>Forum Thread</source> - <translation type="obsolete">Wątek na forum</translation> - </message> - <message> - <source>Send issue e-mail to developer</source> - <translation type="obsolete">Wyślij zgłoszenie e-mail do developera</translation> - </message> -</context> -<context> - <name>FirmwareUpgrade</name> - <message> - <source>Firmware upgrade</source> - <translation type="vanished">Aktualizacja firmware</translation> - </message> - <message> - <source>Begin upgrade</source> - <translation type="vanished">Rozpocznij aktualizację</translation> - </message> </context> <context> <name>InstallAppDialog</name> @@ -460,62 +417,87 @@ Jeśli nie zostaje znaleziony sprawdź czy jest w zasięgu i czy jest sparowany <context> <name>WatchPage</name> <message> - <location filename="../qml/pages/WatchPage.qml" line="34"/> + <location filename="../qml/pages/WatchPage.qml" line="41"/> <source>Info</source> <translation>Info</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="40"/> + <location filename="../qml/pages/WatchPage.qml" line="47"/> <source>Ping</source> <translation>Ping</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="46"/> + <location filename="../qml/pages/WatchPage.qml" line="53"/> <source>Sync Time</source> <translation>Synch.Czas</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="78"/> + <location filename="../qml/pages/WatchPage.qml" line="119"/> <source>Installed applications</source> <translation>Zainstalowane aplikacje</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="68"/> + <location filename="../qml/pages/WatchPage.qml" line="109"/> <source>Your firmware is too old to support SDKv2 applications</source> <translation>Twój firmware jest zbyt stary aby obsłużyć aplikacje SDKv2</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="116"/> + <location filename="../qml/pages/WatchPage.qml" line="67"/> + <source>SMS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="72"/> + <source>E-Mail</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="77"/> + <source>FB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="82"/> + <source>Twt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="87"/> + <source>Music</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="157"/> <source>Uninstalling</source> <translation>Odinstalowywanie</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(empty slot)</source> <translation>(pusty slot)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(slot in use by unknown app)</source> <translation>(slot w użyciu przez nieznaną aplikację)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="197"/> + <location filename="../qml/pages/WatchPage.qml" line="238"/> <source>Install app...</source> <translation>Zainstaluj aplikację...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="202"/> + <location filename="../qml/pages/WatchPage.qml" line="243"/> <source>Companion app missing</source> <translation>Brakuje companion app</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="215"/> + <location filename="../qml/pages/WatchPage.qml" line="256"/> <source>Configure...</source> <translation>Konfiguruj...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="220"/> + <location filename="../qml/pages/WatchPage.qml" line="261"/> <source>Uninstall</source> <translation>Odinstaluj</translation> </message> diff --git a/app/translations/pebble-zh_CN.ts b/app/translations/pebble-zh_CN.ts index 3ed3326..30829f6 100644 --- a/app/translations/pebble-zh_CN.ts +++ b/app/translations/pebble-zh_CN.ts @@ -75,47 +75,47 @@ <context> <name>AppStorePage</name> <message> - <location filename="../qml/pages/AppStorePage.qml" line="27"/> + <location filename="../qml/pages/AppStorePage.qml" line="28"/> <source>Logout</source> <translation>退出</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="29"/> + <location filename="../qml/pages/AppStorePage.qml" line="30"/> <source>Logging out...</source> <translation>退出中...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Hide search</source> <translation>隐藏搜索框</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Show search</source> <translation>显示搜索框</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="49"/> + <location filename="../qml/pages/AppStorePage.qml" line="50"/> <source>Pebble Appstore</source> <translation>Pebble 应用商店</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="78"/> + <location filename="../qml/pages/AppStorePage.qml" line="79"/> <source>Apps</source> <translation>应用</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="86"/> + <location filename="../qml/pages/AppStorePage.qml" line="87"/> <source>Faces</source> <translation>表盘</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="109"/> + <location filename="../qml/pages/AppStorePage.qml" line="110"/> <source>Downloading...</source> <translation>下载中...</translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="141"/> + <location filename="../qml/pages/AppStorePage.qml" line="143"/> <source>Downloading %1...</source> <translation>下载 %1...</translation> </message> @@ -167,17 +167,6 @@ </message> </context> <context> - <name>FirmwareUpgrade</name> - <message> - <source>Firmware upgrade</source> - <translation type="vanished">固件升级</translation> - </message> - <message> - <source>Begin upgrade</source> - <translation type="vanished">开始升级</translation> - </message> -</context> -<context> <name>InstallAppDialog</name> <message> <location filename="../qml/pages/InstallAppDialog.qml" line="18"/> @@ -428,62 +417,87 @@ If it can't be found please check it's available and paired in Bluetoo <context> <name>WatchPage</name> <message> - <location filename="../qml/pages/WatchPage.qml" line="34"/> + <location filename="../qml/pages/WatchPage.qml" line="41"/> <source>Info</source> <translation>信息</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="40"/> + <location filename="../qml/pages/WatchPage.qml" line="47"/> <source>Ping</source> <translation>Ping</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="46"/> + <location filename="../qml/pages/WatchPage.qml" line="53"/> <source>Sync Time</source> <translation>同步时间</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="78"/> + <location filename="../qml/pages/WatchPage.qml" line="119"/> <source>Installed applications</source> <translation>已安装应用</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(slot in use by unknown app)</source> <translation>(插槽在被不明应用程序使用中)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="68"/> + <location filename="../qml/pages/WatchPage.qml" line="109"/> <source>Your firmware is too old to support SDKv2 applications</source> <translation>你的固件太老不支持SDK v2版本的应用</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="116"/> + <location filename="../qml/pages/WatchPage.qml" line="67"/> + <source>SMS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="72"/> + <source>E-Mail</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="77"/> + <source>FB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="82"/> + <source>Twt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="87"/> + <source>Music</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="157"/> <source>Uninstalling</source> <translation>卸载中...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(empty slot)</source> <translation>(空槽)</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="197"/> + <location filename="../qml/pages/WatchPage.qml" line="238"/> <source>Install app...</source> <translation>安装应用...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="202"/> + <location filename="../qml/pages/WatchPage.qml" line="243"/> <source>Companion app missing</source> <translation>配套应用缺失</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="215"/> + <location filename="../qml/pages/WatchPage.qml" line="256"/> <source>Configure...</source> <translation>配置...</translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="220"/> + <location filename="../qml/pages/WatchPage.qml" line="261"/> <source>Uninstall</source> <translation>卸载</translation> </message> diff --git a/app/translations/pebble.ts b/app/translations/pebble.ts index e6ae583..77df5e0 100644 --- a/app/translations/pebble.ts +++ b/app/translations/pebble.ts @@ -75,47 +75,47 @@ <context> <name>AppStorePage</name> <message> - <location filename="../qml/pages/AppStorePage.qml" line="27"/> + <location filename="../qml/pages/AppStorePage.qml" line="28"/> <source>Logout</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="29"/> + <location filename="../qml/pages/AppStorePage.qml" line="30"/> <source>Logging out...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Hide search</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="36"/> + <location filename="../qml/pages/AppStorePage.qml" line="37"/> <source>Show search</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="49"/> + <location filename="../qml/pages/AppStorePage.qml" line="50"/> <source>Pebble Appstore</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="78"/> + <location filename="../qml/pages/AppStorePage.qml" line="79"/> <source>Apps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="86"/> + <location filename="../qml/pages/AppStorePage.qml" line="87"/> <source>Faces</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="109"/> + <location filename="../qml/pages/AppStorePage.qml" line="110"/> <source>Downloading...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/AppStorePage.qml" line="141"/> + <location filename="../qml/pages/AppStorePage.qml" line="143"/> <source>Downloading %1...</source> <translation type="unfinished"></translation> </message> @@ -416,62 +416,87 @@ If it can't be found please check it's available and paired in Bluetoo <context> <name>WatchPage</name> <message> - <location filename="../qml/pages/WatchPage.qml" line="34"/> + <location filename="../qml/pages/WatchPage.qml" line="41"/> <source>Info</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="40"/> + <location filename="../qml/pages/WatchPage.qml" line="47"/> <source>Ping</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="46"/> + <location filename="../qml/pages/WatchPage.qml" line="53"/> <source>Sync Time</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="78"/> + <location filename="../qml/pages/WatchPage.qml" line="119"/> <source>Installed applications</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="68"/> + <location filename="../qml/pages/WatchPage.qml" line="109"/> <source>Your firmware is too old to support SDKv2 applications</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="116"/> + <location filename="../qml/pages/WatchPage.qml" line="67"/> + <source>SMS</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="72"/> + <source>E-Mail</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="77"/> + <source>FB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="82"/> + <source>Twt</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="87"/> + <source>Music</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/WatchPage.qml" line="157"/> <source>Uninstalling</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(empty slot)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="188"/> + <location filename="../qml/pages/WatchPage.qml" line="229"/> <source>(slot in use by unknown app)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="197"/> + <location filename="../qml/pages/WatchPage.qml" line="238"/> <source>Install app...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="202"/> + <location filename="../qml/pages/WatchPage.qml" line="243"/> <source>Companion app missing</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="215"/> + <location filename="../qml/pages/WatchPage.qml" line="256"/> <source>Configure...</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../qml/pages/WatchPage.qml" line="220"/> + <location filename="../qml/pages/WatchPage.qml" line="261"/> <source>Uninstall</source> <translation type="unfinished"></translation> </message> diff --git a/daemon/jskitmanager.cpp b/daemon/jskitmanager.cpp index 2da1986..a24ab10 100644 --- a/daemon/jskitmanager.cpp +++ b/daemon/jskitmanager.cpp @@ -155,8 +155,12 @@ void JSKitManager::startJsApp() // Shims for compatibility... QJSValue result = _engine->evaluate( - "function XMLHttpRequest() { return Pebble.createXMLHttpRequest(); }\n" - ); + "function XMLHttpRequest() { return Pebble.createXMLHttpRequest(); }\n\ + function setInterval(func, time) { return Pebble.setInterval(func, time); }\n\ + function clearInterval(id) { Pebble.clearInterval(id); }\n\ + function setTimeout(func, time) { return Pebble.setTimeout(func, time); }\n\ + function clearTimeout(id) { Pebble.clearTimeout(id); }\n\ + "); Q_ASSERT(!result.isError()); // Polyfills... diff --git a/daemon/jskitobjects.cpp b/daemon/jskitobjects.cpp index 01a7e20..d9ef02f 100644 --- a/daemon/jskitobjects.cpp +++ b/daemon/jskitobjects.cpp @@ -4,6 +4,7 @@ #include <QAuthenticator> #include <QBuffer> #include <QDir> +#include <QTimerEvent> #include <QCryptographicHash> #include <limits> #include "jskitobjects.h" @@ -38,6 +39,69 @@ void JSKitPebble::removeEventListener(const QString &type, QJSValue function) } } +int JSKitPebble::setInterval(QJSValue expression, int delay) +{ + qCDebug(l) << "Setting interval for " << delay << "ms: " << expression.toString(); + if (expression.isString() || expression.isCallable()) { + int timerId = startTimer(delay); + _intervals.insert(timerId, expression); + qCDebug(l) << "Timer id: " << timerId; + return timerId; + } + return -1; +} + +void JSKitPebble::clearInterval(int timerId) +{ + qCDebug(l) << "Killing interval " << timerId ; + killTimer(timerId); + _intervals.remove(timerId); +} + +int JSKitPebble::setTimeout(QJSValue expression, int delay) +{ + qCDebug(l) << "Setting timeout for " << delay << "ms: " << expression.toString(); + if (expression.isString() || expression.isCallable()) { + int timerId = startTimer(delay); + _timeouts.insert(timerId, expression); + return timerId; + } + return -1; +} + +void JSKitPebble::clearTimeout(int timerId) +{ + qCDebug(l) << "Killing timeout " << timerId ; + killTimer(timerId); + _timeouts.remove(timerId); +} + +void JSKitPebble::timerEvent(QTimerEvent *event) +{ + int id = event->timerId(); + QJSValue expression; // find in either intervals or timeouts + if (_intervals.contains(id)) + expression = _intervals.value(id); + else if (_timeouts.contains(id)) { + expression = _timeouts.value(id); + killTimer(id); // timeouts don't repeat + } + else { + qCWarning(l) << "Unknown timer event"; + killTimer(id); // interval nor timeout exist. kill the timer + return; + } + + if (expression.isCallable()) { // call it if it's a function + QJSValue result = expression.call().toString(); + qCDebug(l) << "Timer function result: " << result.toString(); + } + else { // otherwise evaluate it + QJSValue result = _mgr->engine()->evaluate(expression.toString()); + qCDebug(l) << "Timer expression result: " << result.toString(); + } +} + uint JSKitPebble::sendAppMessage(QJSValue message, QJSValue callbackForAck, QJSValue callbackForNack) { QVariantMap data = message.toVariant().toMap(); diff --git a/daemon/jskitobjects.h b/daemon/jskitobjects.h index 43e1c30..9f5308f 100644 --- a/daemon/jskitobjects.h +++ b/daemon/jskitobjects.h @@ -19,6 +19,12 @@ public: Q_INVOKABLE void addEventListener(const QString &type, QJSValue function); Q_INVOKABLE void removeEventListener(const QString &type, QJSValue function); + Q_INVOKABLE int setInterval(QJSValue expression, int delay); + Q_INVOKABLE void clearInterval(int timerId); + + Q_INVOKABLE int setTimeout(QJSValue expression, int delay); + Q_INVOKABLE void clearTimeout(int timerId); + Q_INVOKABLE uint sendAppMessage(QJSValue message, QJSValue callbackForAck = QJSValue(), QJSValue callbackForNack = QJSValue()); Q_INVOKABLE void showSimpleNotificationOnPebble(const QString &title, const QString &body); @@ -32,6 +38,9 @@ public: void invokeCallbacks(const QString &type, const QJSValueList &args = QJSValueList()); +protected: + void timerEvent(QTimerEvent *event); + private: QJSValue buildAckEventObject(uint transaction, const QString &message = QString()) const; @@ -39,6 +48,8 @@ private: AppInfo _appInfo; JSKitManager *_mgr; QHash<QString, QList<QJSValue>> _callbacks; + QHash<int, QJSValue> _intervals; + QHash<int, QJSValue> _timeouts; }; class JSKitConsole : public QObject diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp index 9993a38..1701972 100644 --- a/daemon/watchconnector.cpp +++ b/daemon/watchconnector.cpp @@ -53,6 +53,7 @@ QVariantMap WatchConnector::WatchVersions::toMap() const map.insert("bootloader", this->bootLoaderBuild.toTime_t()); map.insert("serial", this->serialNumber); map.insert("address", this->address.toHex()); + map.insert("platform", this->hardwarePlatform); map.insertMulti("firmware", this->main.toMap()); map.insertMulti("firmware", this->safe.toMap()); } @@ -89,10 +90,14 @@ WatchConnector::WatchConnector(QObject *parent) : hardwareMapping.insert(BIANCA, HWMap(APLITE, "v2_0")); hardwareMapping.insert(SNOWY_EVT2, HWMap(BASALT, "snowy_evt2")); hardwareMapping.insert(SNOWY_DVT, HWMap(BASALT, "snowy_dvt")); + hardwareMapping.insert(BOBBY_SMILES, HWMap(BASALT, "snowy_s3")); + hardwareMapping.insert(SPALDING_EVT, HWMap(CHALK, "spalding_evt")); + hardwareMapping.insert(SPALDING, HWMap(CHALK, "spalding")); hardwareMapping.insert(TINTIN_BB, HWMap(APLITE, "bigboard")); hardwareMapping.insert(TINTIN_BB2, HWMap(APLITE, "bb2")); hardwareMapping.insert(SNOWY_BB, HWMap(BASALT, "snowy_bb")); hardwareMapping.insert(SNOWY_BB2, HWMap(BASALT, "snowy_bb2")); + hardwareMapping.insert(SPALDING_BB2, HWMap(CHALK, "spalding_bb2")); setEndpointHandler(watchVERSION, [this](const QByteArray &data) { Unpacker u(data); @@ -122,6 +127,18 @@ WatchConnector::WatchConnector(QObject *parent) : platform = hardwareMapping.value(_versions.safe.hw_revision).first; + switch (this->platform) { + case APLITE: + _versions.hardwarePlatform = "aplite"; + break; + case BASALT: + _versions.hardwarePlatform = "basalt"; + break; + case CHALK: + _versions.hardwarePlatform = "chalk"; + break; + } + if (u.bad()) { qCWarning(l) << "short read while reading firmware version"; } else { @@ -596,8 +613,93 @@ void WatchConnector::sendNotification(uint lead, QString sender, QString data, Q sendMessage(watchNOTIFICATION, res); } break; - case BASALT: { - qCWarning(l) << "Tried sending notification to unsupported watch platform" << lead << sender << data << subject; + case BASALT: + case CHALK: { + int source; + switch (lead) { + case leadEMAIL: + source = 19; + break; + case leadFACEBOOK: + source = 11; + break; + case leadSMS: + source = 45; + break; + case leadTWITTER: + source = 6; + break; + default: + source = 1; + } + + int attributesCount = 0; + QByteArray attributes; + + attributesCount++; + QByteArray senderBytes = sender.left(64).toUtf8(); + attributes.append(0x01); // id = title + attributes.append(senderBytes.length() & 0xFF); attributes.append(((senderBytes.length() >> 8) & 0xFF)); // length + attributes.append(senderBytes); // content + + attributesCount++; + QByteArray subjectBytes = (subject.isEmpty() ? data : subject).left(64).toUtf8(); + attributes.append(0x02); // id = subtitle + attributes.append(subjectBytes.length() & 0xFF); attributes.append((subjectBytes.length() >> 8) & 0xFF); // length + attributes.append(subjectBytes); //content + + if (!data.isEmpty()) { + attributesCount++; + QByteArray dataBytes = data.left(512).toUtf8(); + attributes.append(0x03); // id = body + attributes.append(dataBytes.length() & 0xFF); attributes.append((dataBytes.length() >> 8) & 0xFF); // length + attributes.append(dataBytes); // content + } + + attributesCount++; + attributes.append(0x04); // id = tinyicon + attributes.append(0x04); attributes.append('\0'); // length + attributes.append(source); attributes.append('\0'); attributes.append('\0'); attributes.append('\0'); // content + + + QByteArray actions; + actions.append('\0'); // action id + actions.append(0x04); // type = dismiss + actions.append(0x01); // attributes length = 1 + actions.append(0x01); // attribute id = title + actions.append(0x07); actions.append('\0'); // attribute length + actions.append("Dismiss"); // attribute content + + + QByteArray itemId = QUuid::createUuid().toRfc4122(); + int time = QDateTime::currentMSecsSinceEpoch() / 1000; + QByteArray item; + item.append(itemId); // item id + item.append(QUuid().toRfc4122()); // parent id + item.append(time & 0xFF); item.append((time >> 8) & 0xFF); item.append((time >> 16) & 0xFF); item.append((time >> 24) & 0xFF); // timestamp + item.append('\0'); item.append('\0'); // duration + item.append(0x01); // type: notification + item.append('\0'); item.append('\0'); // flags + item.append(0x01); // layout + + int length = attributes.length() + actions.length(); + item.append(length & 0xFF); item.append((length >> 8) & 0xFF); // data length + item.append(attributesCount); // attributes count + item.append(0x01); // actions count + item.append(attributes); + item.append(actions); + + int token = (qrand() % ((int)pow(2, 16) - 2)) + 1; + QByteArray blob; + blob.append(0x01); // command = insert + blob.append(token & 0xFF); blob.append((token >> 8) & 0xFF); // token + blob.append(0x04); //database id = notification + blob.append(itemId.length() & 0xFF); // key length + blob.append(itemId); // key + blob.append(item.length() & 0xFF); blob.append((item.length() >> 8) & 0xFF); // value length + blob.append(item); + + sendMessage(watchBLOB_DB, blob); } break; default: diff --git a/daemon/watchconnector.h b/daemon/watchconnector.h index 4369d87..83e065c 100644 --- a/daemon/watchconnector.h +++ b/daemon/watchconnector.h @@ -161,16 +161,21 @@ public: BIANCA = 6, SNOWY_EVT2 = 7, SNOWY_DVT = 8, + SPALDING_EVT = 9, + BOBBY_SMILES = 10, + SPALDING = 11, TINTIN_BB = 0xFF, TINTIN_BB2 = 0xFE, SNOWY_BB = 0xFD, - SNOWY_BB2 = 0xFC + SNOWY_BB2 = 0xFC, + SPALDING_BB2 = 0xFB }; enum HardwarePlatform { HP_UNKNOWN = 0, APLITE, - BASALT + BASALT, + CHALK }; typedef QPair<HardwarePlatform,QString> HWMap; QMap<HardwareRevision, HWMap> hardwareMapping; @@ -192,6 +197,7 @@ public: SoftwareVersion safe; QDateTime bootLoaderBuild; QString hardwareRevision; + QString hardwarePlatform; QString serialNumber; QByteArray address; diff --git a/rpm/pebble.changes b/rpm/pebble.changes index 8f65e10..a5369b3 100644 --- a/rpm/pebble.changes +++ b/rpm/pebble.changes @@ -1,3 +1,17 @@ +* Sun Oct 5 2015 Tomasz Sterna <tomek@xiaoka.com> 1.5 +- Preliminary support for Pebble Time Round +- Support JS timers +- Fixed some Japanese translations + +* Sun Sep 13 2015 Tomasz Sterna <tomek@xiaoka.com> 1.4 +- Support HardwarePlatform dependant features +- Preliminary support for Pebble Time Steel +- Notifications debugging support +- Preliminary support for Pebble Time Notifications +- Smooth scroll of PebbleStoreView +- Japanese translation +- Dutch translation + * Thu Jun 18 2015 Tomasz Sterna <tomek@xiaoka.com> 1.3 - Preliminary support for Pebble Time - Handle multiple paired Pebbles diff --git a/rpm/pebble.spec b/rpm/pebble.spec index 6d5b6c7..32856e4 100644 --- a/rpm/pebble.spec +++ b/rpm/pebble.spec @@ -13,7 +13,7 @@ Name: pebble %{!?qtc_make:%define qtc_make make} %{?qtc_builddir:%define _builddir %qtc_builddir} Summary: Support for Pebble watch in SailfishOS -Version: 1.3 +Version: 1.5 Release: 1 Group: Qt/Qt License: GPL3 diff --git a/rpm/pebble.yaml b/rpm/pebble.yaml index e577df4..a353dc6 100644 --- a/rpm/pebble.yaml +++ b/rpm/pebble.yaml @@ -1,6 +1,6 @@ Name: pebble Summary: Support for Pebble watch in SailfishOS -Version: 1.3 +Version: 1.5 Release: 1 Group: Qt/Qt URL: http://getpebble.com/ |
