summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--app/pebblestoreview.cpp38
-rw-r--r--app/pebblestoreview.h6
-rw-r--r--app/qml/pages/AppStorePage.qml1
-rw-r--r--app/translations/pebble-es.ts75
-rw-r--r--app/translations/pebble-ja_JP.ts24
-rw-r--r--app/translations/pebble-nl_NL.ts67
-rw-r--r--app/translations/pebble-pl.ts110
-rw-r--r--app/translations/pebble-zh_CN.ts78
-rw-r--r--app/translations/pebble.ts67
-rw-r--r--daemon/jskitmanager.cpp8
-rw-r--r--daemon/jskitobjects.cpp64
-rw-r--r--daemon/jskitobjects.h11
-rw-r--r--daemon/watchconnector.cpp106
-rw-r--r--daemon/watchconnector.h10
-rw-r--r--rpm/pebble.changes14
-rw-r--r--rpm/pebble.spec2
-rw-r--r--rpm/pebble.yaml2
18 files changed, 492 insertions, 193 deletions
diff --git a/README.md b/README.md
index dc010b5..28b8fa4 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
pebbled
=======
-[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/smokku/pebble?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/smokku/pebble?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) . [![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](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&apos;t be found please check it&apos;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&apos;t be found please check it&apos;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&apos;t be found please check it&apos;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/