summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--po/de.po120
-rw-r--r--po/el.po30
-rw-r--r--po/en_GB.po118
-rw-r--r--po/es.po356
-rw-r--r--po/eu.po25
-rw-r--r--po/fr.po59
-rw-r--r--po/hu.po26
-rw-r--r--po/it.po119
-rw-r--r--po/ms.po47
-rw-r--r--po/pt.po55
-rw-r--r--po/rockwork.mzanetti.pot14
-rw-r--r--po/ru.po23
-rw-r--r--po/template.pot14
-rw-r--r--rockwork/InfoPage.qml12
-rw-r--r--rockwork/Main.qml50
-rw-r--r--rockwork/NotificationsPage.qml2
-rw-r--r--rockwork/notificationsourcemodel.cpp10
-rw-r--r--rockwork/notificationsourcemodel.h3
-rw-r--r--rockwork/pebbles.cpp27
-rw-r--r--rockwork/pebbles.h6
-rw-r--r--rockworkd/libpebble/appmsgmanager.cpp28
-rw-r--r--rockworkd/libpebble/appmsgmanager.h2
-rw-r--r--rockworkd/libpebble/blobdb.cpp15
-rw-r--r--rockworkd/libpebble/blobdb.h2
-rw-r--r--rockworkd/libpebble/calendarevent.cpp16
-rw-r--r--rockworkd/libpebble/calendarevent.h4
-rw-r--r--rockworkd/libpebble/jskit/jskitconsole.cpp201
-rw-r--r--rockworkd/libpebble/jskit/jskitconsole.h56
-rw-r--r--rockworkd/libpebble/jskit/jskitmanager.cpp2
-rw-r--r--rockworkd/libpebble/jskit/jskitpebble.cpp9
-rw-r--r--rockworkd/libpebble/jskit/jskitpebble.h1
-rw-r--r--rockworkd/libpebble/jskit/jskitsetup.js104
-rw-r--r--rockworkd/libpebble/jskit/jskitwebsocket.cpp311
-rw-r--r--rockworkd/libpebble/jskit/jskitwebsocket.h79
-rw-r--r--rockworkd/libpebble/pebble.cpp28
-rw-r--r--rockworkd/libpebble/pebble.h2
-rw-r--r--rockworkd/platformintegration/ubuntu/callchannelobserver.cpp7
-rw-r--r--rockworkd/platformintegration/ubuntu/callchannelobserver.h2
-rw-r--r--rockworkd/platformintegration/ubuntu/organizeradapter.cpp9
-rw-r--r--rockworkd/rockworkd.pro4
-rw-r--r--version.pri2
41 files changed, 1611 insertions, 389 deletions
diff --git a/po/de.po b/po/de.po
index 4ae253d..2b6a02d 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-01-12 09:52+0000\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-15 06:05+0000\n"
"Last-Translator: Michael Zanetti <michael.zanetti@canonical.com>\n"
"Language-Team: German <de@li.org>\n"
-"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-16 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: de\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -32,7 +32,7 @@ msgstr "Installieren"
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
msgid "Installing..."
-msgstr ""
+msgstr "Installiere..."
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
msgid "Installed"
@@ -64,7 +64,7 @@ msgstr "Alle anzeigen"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:9
msgid "Developer Tools"
-msgstr ""
+msgstr "Entwicklertools"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:28
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:11
@@ -74,31 +74,31 @@ msgstr "Bildschirmfotos"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:35
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:102
msgid "Report problem"
-msgstr ""
+msgstr "Fehler berichten"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
msgid "Install app or watchface from file"
-msgstr ""
+msgstr "App oder Watchface aus datei installieren"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
msgid "Preparing logs package..."
-msgstr ""
+msgstr "Bereite Logs vor..."
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
msgid "pebble.log"
-msgstr ""
+msgstr "pebble.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
msgid "Send rockworkd.log"
-msgstr ""
+msgstr "rockworkd.log senden"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:132
msgid "rockworkd.log"
-msgstr ""
+msgstr "rockworkd.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:137
msgid "Send watch logs"
-msgstr ""
+msgstr "Logs der Uhr schicken"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:146
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:110
@@ -109,103 +109,104 @@ msgstr "Abbrechen"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:6
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:84
msgid "Firmware upgrade"
-msgstr ""
+msgstr "Software updaten"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
msgid "A new firmware upgrade is available for your Pebble smartwatch."
-msgstr ""
+msgstr "Eine neue Software für Ihre Pebble Uhr steht zur Verfügung."
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
msgid "Currently installed firmware: %1"
-msgstr ""
+msgstr "Aktuell installierte Software: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:29
#, qt-format
msgid "Candidate firmware version: %1"
-msgstr ""
+msgstr "Verfügbare Softwareversion: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:35
#, qt-format
msgid "Release Notes: %1"
-msgstr ""
+msgstr "Änderungsnotizen: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
msgid "Important:"
-msgstr ""
+msgstr "Wichtig:"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
msgid ""
"This update will also upgrade recovery data. Make sure your Pebble "
"smartwarch is connected to a power adapter."
msgstr ""
+"Dieses Update wird auch die Wiederherstellungsdaten überschreiben. Bitte "
+"stellen Sie sicher, dass Ihre Pebble Smartwatch an das Stromnetz "
+"angeschlossen ist, um Probleme zu vermeiden."
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:9
msgid "Health settings"
-msgstr ""
+msgstr "Gesundheitseinstellungen"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:17
msgid "Health app enabled"
-msgstr ""
+msgstr "Gesundheits-App aktiviert"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Female"
-msgstr ""
+msgstr "Weiblich"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Male"
-msgstr ""
+msgstr "Männlich"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:34
msgid "Age"
-msgstr ""
+msgstr "Alter"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:47
msgid "Height (cm)"
-msgstr ""
+msgstr "Größe (cm):"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:60
msgid "Weight"
-msgstr ""
+msgstr "Gewicht"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:73
msgid "I want to be more active"
-msgstr ""
+msgstr "Ich möchte aktiver sein"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:84
msgid "I want to sleep more"
-msgstr ""
+msgstr "Ich möchte mehr schlafen"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:95
msgid "OK"
-msgstr ""
+msgstr "OK"
#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
msgid "Import watchapp or watchface"
-msgstr ""
+msgstr "Watchapp oder Watchface importieren"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
#, qt-format
msgid "Version %1"
-msgstr ""
+msgstr "Version %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
-msgstr ""
+msgstr "Rechtliches"
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
+"Diese Anwendung ist weder mit Pebble Technology Corp verbunden, noch wird "
+"sie davon unterstützt."
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
-msgstr ""
+msgstr "Pebble ist ein eingtragenes Warenzeichen der Pebble Technology Corp."
#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
msgid "Apps & Watchfaces"
@@ -236,13 +237,17 @@ msgstr "Löschen"
msgid "Close"
msgstr "Schließen"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
-msgstr ""
+msgstr "Über"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
msgid "Developer tools"
-msgstr ""
+msgstr "Entwicklerwerkzeuge"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:52
msgid "Manage notifications"
@@ -259,7 +264,7 @@ msgstr "Ziffernblätter verwalten"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:75
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:8
msgid "Settings"
-msgstr ""
+msgstr "Einstellungen"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:190
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:36
@@ -276,23 +281,29 @@ msgid ""
"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
"within range and it is paired properly in the Bluetooth System Settings."
msgstr ""
+"Ihre Pebble Smartwatch ist nicht verbunden. Bitte stellen Sie sicher, dass "
+"sie angeschaltet ist, sich in Reichweite befindet und in den Bluetooth "
+"Einstellungen ordnungsgemäß gekoppelt ist."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:213
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:64
msgid "Open System Settings"
-msgstr ""
+msgstr "Systemeinstellungen öffnen"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
+"Ihre Pebble Smartwatch befindet sich im Werkszustand muss initialisiert "
+"werden."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
msgid "Initialize Pebble"
-msgstr ""
+msgstr "Pebble initialisieren"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:262
msgid "Upgrading..."
-msgstr ""
+msgstr "Aktualisierung läuft …"
#: /home/micha/Develop/upebble/rockwork/NotificationsPage.qml:8
msgid "Notifications"
@@ -303,6 +314,9 @@ msgid ""
"Entries here will be added as notifications appear on the phone. Selected "
"notifications will be shown on your Pebble smartwatch."
msgstr ""
+"Sobald neue Benachrichtigungen auf Ihrem Mobiltelefon eintreffen, werden sie "
+"dieser Liste hinzugefügt. Ausgewählte Benachrichtigungen werden auf Ihrer "
+"Pebble Smartwatch angezeigt."
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:6
msgid "Manage Pebble Watches"
@@ -313,6 +327,8 @@ msgid ""
"No Pebble smartwatches configured yet. Please connect your Pebble smartwatch "
"using System Settings."
msgstr ""
+"Keine Pebble Smartwatches eingerichtet. Bitte verbinden Sie Ihre Pebble "
+"Smartwatch in den Systemeinstellungen"
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:69
msgid "Screenshot options"
@@ -333,20 +349,20 @@ msgstr "Speichern"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:19
msgid "Distance Units"
-msgstr ""
+msgstr "Enterfernungseinheiten"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:35
msgid "Metric"
-msgstr ""
+msgstr "Metrisch"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:48
msgid "Imperial"
-msgstr ""
+msgstr "Britisch"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:55
msgid "Calendar"
-msgstr ""
+msgstr "Kalender"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
-msgstr ""
+msgstr "Kalender in die Zeitleiste synchronisieren"
diff --git a/po/el.po b/po/el.po
index 8554238..ece928a 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-02-08 16:59+0000\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-15 06:05+0000\n"
"Last-Translator: Aggelos Arnaoutis <angelosarn@hotmail.com>\n"
"Language-Team: Greek <el@li.org>\n"
-"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-16 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: el\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -112,10 +112,8 @@ msgid "Firmware upgrade"
msgstr "Αναβάθμιση υλικολογισμικού"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
msgstr ""
-"Μια νέα αναβάθμιση υλικολογισμικού είναι διαθέσιμη για το ρολόι Pebble σας."
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
@@ -194,20 +192,16 @@ msgid "Version %1"
msgstr "Έκδοση %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr "Συντελεστές"
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr ""
@@ -240,6 +234,10 @@ msgstr "Διαγραφή"
msgid "Close"
msgstr "Κλείσιμο"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
msgstr ""
@@ -287,7 +285,8 @@ msgid "Open System Settings"
msgstr "Άνοιγμα ρυθμίσεων συστήματος"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
@@ -354,6 +353,3 @@ msgstr "Ημερολόγιο"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
msgstr ""
-
-#~ msgid "Info"
-#~ msgstr "Πληροφορίες"
diff --git a/po/en_GB.po b/po/en_GB.po
index b1d9a45..0d69af1 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-01-26 18:00+0000\n"
-"Last-Translator: Emanuele Antonio Faraone <emanueleant03@gmail.com>\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-15 08:54+0000\n"
+"Last-Translator: Adrian Chiang <Unknown>\n"
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-16 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: \n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -32,7 +32,7 @@ msgstr "Install"
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
msgid "Installing..."
-msgstr ""
+msgstr "Installing..."
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
msgid "Installed"
@@ -64,7 +64,7 @@ msgstr "See all"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:9
msgid "Developer Tools"
-msgstr ""
+msgstr "Developer Tools"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:28
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:11
@@ -74,31 +74,31 @@ msgstr "Screenshots"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:35
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:102
msgid "Report problem"
-msgstr ""
+msgstr "Report problem"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
msgid "Install app or watchface from file"
-msgstr ""
+msgstr "Install app or watchface from file"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
msgid "Preparing logs package..."
-msgstr ""
+msgstr "Preparing logs package..."
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
msgid "pebble.log"
-msgstr ""
+msgstr "pebble.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
msgid "Send rockworkd.log"
-msgstr ""
+msgstr "Send rockworkd.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:132
msgid "rockworkd.log"
-msgstr ""
+msgstr "rockworkd.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:137
msgid "Send watch logs"
-msgstr ""
+msgstr "Send watch logs"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:146
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:110
@@ -109,103 +109,103 @@ msgstr "Cancel"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:6
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:84
msgid "Firmware upgrade"
-msgstr ""
+msgstr "Firmware upgrade"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
msgid "A new firmware upgrade is available for your Pebble smartwatch."
-msgstr ""
+msgstr "A new firmware upgrade is available for your Pebble smartwatch."
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
msgid "Currently installed firmware: %1"
-msgstr ""
+msgstr "Currently installed firmware: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:29
#, qt-format
msgid "Candidate firmware version: %1"
-msgstr ""
+msgstr "Candidate firmware version: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:35
#, qt-format
msgid "Release Notes: %1"
-msgstr ""
+msgstr "Release Notes: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
msgid "Important:"
-msgstr ""
+msgstr "Important:"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
msgid ""
"This update will also upgrade recovery data. Make sure your Pebble "
"smartwarch is connected to a power adapter."
msgstr ""
+"This update will also upgrade recovery data. Make sure your Pebble "
+"smartwarch is connected to a power adapter."
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:9
msgid "Health settings"
-msgstr ""
+msgstr "Health settings"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:17
msgid "Health app enabled"
-msgstr ""
+msgstr "Health app enabled"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Female"
-msgstr ""
+msgstr "Female"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Male"
-msgstr ""
+msgstr "Male"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:34
msgid "Age"
-msgstr ""
+msgstr "Age"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:47
msgid "Height (cm)"
-msgstr ""
+msgstr "Height (cm)"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:60
msgid "Weight"
-msgstr ""
+msgstr "Weight"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:73
msgid "I want to be more active"
-msgstr ""
+msgstr "I want to be more active"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:84
msgid "I want to sleep more"
-msgstr ""
+msgstr "I want to sleep more"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:95
msgid "OK"
-msgstr ""
+msgstr "OK"
#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
msgid "Import watchapp or watchface"
-msgstr ""
+msgstr "Import watchapp or watchface"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
#, qt-format
msgid "Version %1"
-msgstr ""
+msgstr "Version %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
-msgstr ""
+msgstr "Legal"
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
+"This application is neither affiliated with nor endorsed by Pebble "
+"Technology Corp."
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
-msgstr ""
+msgstr "Pebble is a trademark of Pebble Technology Corp."
#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
msgid "Apps & Watchfaces"
@@ -236,13 +236,17 @@ msgstr "Delete"
msgid "Close"
msgstr "Close"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr "Loading..."
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
-msgstr ""
+msgstr "About"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
msgid "Developer tools"
-msgstr ""
+msgstr "Developer tools"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:52
msgid "Manage notifications"
@@ -259,7 +263,7 @@ msgstr "Manage Watchfaces"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:75
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:8
msgid "Settings"
-msgstr ""
+msgstr "Settings"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:190
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:36
@@ -276,23 +280,27 @@ msgid ""
"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
"within range and it is paired properly in the Bluetooth System Settings."
msgstr ""
+"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
+"within range and it is paired properly in the Bluetooth System Settings."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:213
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:64
msgid "Open System Settings"
-msgstr ""
+msgstr "Open System Settings"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
msgid "Initialize Pebble"
-msgstr ""
+msgstr "Initialize Pebble"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:262
msgid "Upgrading..."
-msgstr ""
+msgstr "Upgrading..."
#: /home/micha/Develop/upebble/rockwork/NotificationsPage.qml:8
msgid "Notifications"
@@ -303,6 +311,8 @@ msgid ""
"Entries here will be added as notifications appear on the phone. Selected "
"notifications will be shown on your Pebble smartwatch."
msgstr ""
+"Entries here will be added as notifications appear on the phone. Selected "
+"notifications will be shown on your Pebble smartwatch."
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:6
msgid "Manage Pebble Watches"
@@ -313,6 +323,8 @@ msgid ""
"No Pebble smartwatches configured yet. Please connect your Pebble smartwatch "
"using System Settings."
msgstr ""
+"No Pebble smartwatches configured yet. Please connect your Pebble smartwatch "
+"using System Settings."
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:69
msgid "Screenshot options"
@@ -333,20 +345,20 @@ msgstr "Save"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:19
msgid "Distance Units"
-msgstr ""
+msgstr "Distance Units"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:35
msgid "Metric"
-msgstr ""
+msgstr "Metric"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:48
msgid "Imperial"
-msgstr ""
+msgstr "Imperial"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:55
msgid "Calendar"
-msgstr ""
+msgstr "Calendar"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
-msgstr ""
+msgstr "Sync calendar to Timeline"
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..533b16f
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,356 @@
+# Spanish translation for rockwork
+# Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016
+# This file is distributed under the same license as the rockwork package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: rockwork\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-10 08:42+0000\n"
+"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2016-02-15 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+
+#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
+msgid "App Settings"
+msgstr "Configuración de aplicación"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:9
+msgid "App details"
+msgstr "Detalles de aplicación"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
+msgid "Install"
+msgstr "Instalar"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
+msgid "Installing..."
+msgstr "Instalando…"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
+msgid "Installed"
+msgstr "Instalada"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:235
+msgid "Description"
+msgstr "Descripción"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:258
+msgid "Developer"
+msgstr "Desarrollador"
+
+#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:266
+msgid "Version"
+msgstr "Versión"
+
+#: /home/micha/Develop/upebble/rockwork/AppStorePage.qml:8
+msgid "Add new watchapp"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/AppStorePage.qml:8
+msgid "Add new watchface"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/AppStorePage.qml:125
+msgid "See all"
+msgstr "Ver todo"
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:9
+msgid "Developer Tools"
+msgstr "Herramientas de desarrollo"
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:28
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:11
+msgid "Screenshots"
+msgstr "Capturas de pantalla"
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:35
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:102
+msgid "Report problem"
+msgstr "Informar de un problema"
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
+msgid "Install app or watchface from file"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
+msgid "Preparing logs package..."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
+msgid "pebble.log"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
+msgid "Send rockworkd.log"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:132
+msgid "rockworkd.log"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:137
+msgid "Send watch logs"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:146
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:110
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:99
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:6
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:84
+msgid "Firmware upgrade"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
+msgid "A new firmware upgrade is available for your Pebble smartwatch."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
+#, qt-format
+msgid "Currently installed firmware: %1"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:29
+#, qt-format
+msgid "Candidate firmware version: %1"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:35
+#, qt-format
+msgid "Release Notes: %1"
+msgstr "Notas de publicación: %1"
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
+msgid "Important:"
+msgstr "Importante:"
+
+#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
+msgid ""
+"This update will also upgrade recovery data. Make sure your Pebble "
+"smartwarch is connected to a power adapter."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:9
+msgid "Health settings"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:17
+msgid "Health app enabled"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
+msgid "Female"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
+msgid "Male"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:34
+msgid "Age"
+msgstr "Edad"
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:47
+msgid "Height (cm)"
+msgstr "Altura (cm)"
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:60
+msgid "Weight"
+msgstr "Peso"
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:73
+msgid "I want to be more active"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:84
+msgid "I want to sleep more"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:95
+msgid "OK"
+msgstr "Aceptar"
+
+#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
+msgid "Import watchapp or watchface"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
+#, qt-format
+msgid "Version %1"
+msgstr "Versión %1"
+
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
+msgid "Legal"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
+msgid ""
+"This application is neither affiliated with nor endorsed by Pebble "
+"Technology Corp."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
+msgid "Pebble is a trademark of Pebble Technology Corp."
+msgstr "Pebble es una marca registrada de Pebble Technology Corp."
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
+msgid "Apps & Watchfaces"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
+msgid "Apps"
+msgstr "Aplicaciones"
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
+msgid "Watchfaces"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:167
+msgid "Launch"
+msgstr "Iniciar"
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:176
+msgid "Configure"
+msgstr "Configurar"
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:186
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:91
+msgid "Delete"
+msgstr "Eliminar"
+
+#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:196
+msgid "Close"
+msgstr "Cerrar"
+
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
+msgid "About"
+msgstr "Acerca de"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
+msgid "Developer tools"
+msgstr "Herramientas de desarrollo"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:52
+msgid "Manage notifications"
+msgstr "Gestionar notificaciones"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:59
+msgid "Manage Apps"
+msgstr "Gestionar aplicaciones"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:67
+msgid "Manage Watchfaces"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:75
+#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:8
+msgid "Settings"
+msgstr "Configuración"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:190
+#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:36
+msgid "Connected"
+msgstr "Conectado"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:190
+#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:36
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:203
+msgid ""
+"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
+"within range and it is paired properly in the Bluetooth System Settings."
+msgstr ""
+"El reloj inteligente Pebble está desconectado. Asegúrese de que esté "
+"encendido, cerca y emparejado correctamente en la sección «Bluetooth» de "
+"Configuración del sistema."
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:213
+#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:64
+msgid "Open System Settings"
+msgstr "Abrir Configuración del sistema"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgstr ""
+"El reloj inteligente Pebble está en modo de fábrica y debe inicializarse."
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
+msgid "Initialize Pebble"
+msgstr "Inicializar Pebble"
+
+#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:262
+msgid "Upgrading..."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/NotificationsPage.qml:8
+msgid "Notifications"
+msgstr "Notificaciones"
+
+#: /home/micha/Develop/upebble/rockwork/NotificationsPage.qml:29
+msgid ""
+"Entries here will be added as notifications appear on the phone. Selected "
+"notifications will be shown on your Pebble smartwatch."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:6
+msgid "Manage Pebble Watches"
+msgstr "Gestionar relojes Pebble"
+
+#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:57
+msgid ""
+"No Pebble smartwatches configured yet. Please connect your Pebble smartwatch "
+"using System Settings."
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:69
+msgid "Screenshot options"
+msgstr "Opciones de captura de pantalla"
+
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:74
+msgid "Share"
+msgstr "Compartir"
+
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:77
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:85
+msgid "Pebble screenshot"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:82
+msgid "Save"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:19
+msgid "Distance Units"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:35
+msgid "Metric"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:48
+msgid "Imperial"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:55
+msgid "Calendar"
+msgstr ""
+
+#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
+msgid "Sync calendar to timeline"
+msgstr ""
diff --git a/po/eu.po b/po/eu.po
index 15aebaf..ec328ed 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
"PO-Revision-Date: 2016-02-03 22:34+0000\n"
"Last-Translator: Aitzol Berasategi <aitzol76@gmail.com>\n"
"Language-Team: Basque <eu@li.org>\n"
-"Language: eu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-15 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: eu\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -112,10 +112,8 @@ msgid "Firmware upgrade"
msgstr "Firmware eguneraketa"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
msgstr ""
-"Firmware eguneraketa bat dago eskuragarri zure Pebble smartwatch-earentzat."
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
@@ -194,20 +192,16 @@ msgid "Version %1"
msgstr ""
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr ""
@@ -240,6 +234,10 @@ msgstr "Ezabatu"
msgid "Close"
msgstr "Itxi"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
msgstr ""
@@ -290,7 +288,8 @@ msgid "Open System Settings"
msgstr "Sistema Ezarpenak Ireki"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
"Zure Pebble smartwatch-ea fabrika moduan aurkitzen da eta beharrezkoa du "
"berrezartzea."
diff --git a/po/fr.po b/po/fr.po
index 606940a..0f95bd5 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: upebble\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-02-08 18:15+0000\n"
-"Last-Translator: cm-t arudy <arudy@singularity.fr>\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-15 06:05+0000\n"
+"Last-Translator: Anne <anneonyme017@gmail.com>\n"
"Language-Team: French <fr@li.org>\n"
-"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-16 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: fr\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -78,15 +78,15 @@ msgstr "Signaler un problème"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
msgid "Install app or watchface from file"
-msgstr ""
+msgstr "Installer une application ou un cadran à partir d'un fichier"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
msgid "Preparing logs package..."
-msgstr ""
+msgstr "Préparation de l'ensemble des rapports…"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
msgid "pebble.log"
-msgstr ""
+msgstr "pebble.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
msgid "Send rockworkd.log"
@@ -98,7 +98,7 @@ msgstr "rockworkd.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:137
msgid "Send watch logs"
-msgstr ""
+msgstr "Envoi des rapports"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:146
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:110
@@ -112,11 +112,10 @@ msgid "Firmware upgrade"
msgstr "Mise à niveau du micrologiciel"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
msgstr ""
-"Une nouvelle version du logiciel est disponible pour votre montre connectée "
-"Pebble."
+"Une nouvelle mise à niveau du micrologiciel est disponible pour votre montre "
+"connectée Pebble."
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
@@ -152,7 +151,7 @@ msgstr "Paramètre de Bien-Être"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:17
msgid "Health app enabled"
-msgstr "L'application Bien-Être est activé"
+msgstr "L'application Bien-Être est activée"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Female"
@@ -172,15 +171,15 @@ msgstr "Taille (cm):"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:60
msgid "Weight"
-msgstr ""
+msgstr "Masse"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:73
msgid "I want to be more active"
-msgstr ""
+msgstr "Je veux être plus actif"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:84
msgid "I want to sleep more"
-msgstr ""
+msgstr "Je veux dormir plus"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:95
msgid "OK"
@@ -188,7 +187,7 @@ msgstr "Valider"
#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
msgid "Import watchapp or watchface"
-msgstr ""
+msgstr "Importer une application ou un cadran"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
#, qt-format
@@ -196,22 +195,20 @@ msgid "Version %1"
msgstr "Version %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr "Contributeurs"
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr "Informations légales"
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
+"Cette application n'est ni affiliée et ni approuvée par Pebble Technology "
+"Corp."
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
-msgstr ""
+msgstr "Pebble est une marque déposée par Pebble Technology Corp."
#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
msgid "Apps & Watchfaces"
@@ -242,9 +239,13 @@ msgstr "Supprimer"
msgid "Close"
msgstr "Fermer"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
-msgstr ""
+msgstr "À propos"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
msgid "Developer tools"
@@ -292,7 +293,8 @@ msgid "Open System Settings"
msgstr "Ouvrir les paramètres système"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
"Votre montre connectée Pebble est en mode usine et a besoin d'être "
"initialisée."
@@ -366,6 +368,3 @@ msgstr "Agenda"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
msgstr "Synchroniser l'agenda sur la Timeline."
-
-#~ msgid "Info"
-#~ msgstr "Informations"
diff --git a/po/hu.po b/po/hu.po
index fc87d6a..2cdae4e 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
"PO-Revision-Date: 2016-02-02 09:30+0000\n"
"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
"Language-Team: Hungarian <hu@li.org>\n"
-"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-15 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: hu\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -112,9 +112,8 @@ msgid "Firmware upgrade"
msgstr "Firmware frissítés"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
-msgstr "Egy új firmware frissítés érhető el a Pebble okosórájához"
+msgstr ""
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
@@ -193,20 +192,16 @@ msgid "Version %1"
msgstr ""
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr ""
@@ -239,6 +234,10 @@ msgstr "Törlés"
msgid "Close"
msgstr "Bezárás"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
msgstr ""
@@ -289,7 +288,8 @@ msgid "Open System Settings"
msgstr "Rendszerbeállítások megnyitása"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr "Az Pebble okosórája gyári állapotban van és inicializálni kell."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
diff --git a/po/it.po b/po/it.po
index e43daa1..83e53d4 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,24 +7,24 @@ msgid ""
msgstr ""
"Project-Id-Version: upebble\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-02-08 13:28+0000\n"
-"Last-Translator: Emanuele Antonio Faraone <emanueleant03@gmail.com>\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-15 12:21+0000\n"
+"Last-Translator: Marco Trevisan (Treviño) <mail@3v1n0.net>\n"
"Language-Team: Italian <it@li.org>\n"
-"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-16 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: it\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
-msgstr "Impostazioni dell' applicazione"
+msgstr "Impostazioni App"
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:9
msgid "App details"
-msgstr "Dettagli sull'app"
+msgstr "Dettagli App"
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
msgid "Install"
@@ -36,7 +36,7 @@ msgstr "Installazione in corso..."
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:57
msgid "Installed"
-msgstr "Installato"
+msgstr "Installata"
#: /home/micha/Develop/upebble/rockwork/AppStoreDetailsPage.qml:235
msgid "Description"
@@ -52,11 +52,11 @@ msgstr "Versione"
#: /home/micha/Develop/upebble/rockwork/AppStorePage.qml:8
msgid "Add new watchapp"
-msgstr "Aggiungi una nuova watchapp"
+msgstr "Aggiungi Watchapp"
#: /home/micha/Develop/upebble/rockwork/AppStorePage.qml:8
msgid "Add new watchface"
-msgstr "Aggiungi una nuova watchapp"
+msgstr "Aggiungi Watchface"
#: /home/micha/Develop/upebble/rockwork/AppStorePage.qml:125
msgid "See all"
@@ -64,29 +64,29 @@ msgstr "Mostra tutto"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:9
msgid "Developer Tools"
-msgstr "Strumenti per lo sviluppo"
+msgstr "Strumenti per sviluppatori"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:28
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:11
msgid "Screenshots"
-msgstr "Screenshots"
+msgstr "Screenshot"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:35
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:102
msgid "Report problem"
-msgstr "riporta un problema"
+msgstr "Riporta un problema"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
msgid "Install app or watchface from file"
-msgstr ""
+msgstr "Installa app o watchface da file"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
msgid "Preparing logs package..."
-msgstr "preparando il log dei pacchetti..."
+msgstr "Preparazione del pacchetto di log..."
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
msgid "pebble.log"
-msgstr ""
+msgstr "pebble.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
msgid "Send rockworkd.log"
@@ -98,13 +98,13 @@ msgstr "rockworkd.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:137
msgid "Send watch logs"
-msgstr "Invia Log del Pebble"
+msgstr "Invia log dell'orologio"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:146
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:110
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:99
msgid "Cancel"
-msgstr "Cancella"
+msgstr "Annulla"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:6
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:84
@@ -112,44 +112,44 @@ msgid "Firmware upgrade"
msgstr "Aggiornamento Firmware"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
-msgstr "Un nuovo aggiornamento del firmware è disponibile per il tuo Pebble."
+msgstr ""
+"Un nuovo aggiornamento firmware è disponibile per il tuo Smartwatch Pebble"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
msgid "Currently installed firmware: %1"
-msgstr "Versione del firmware installata prima: %1"
+msgstr "Versione del firmware attuale: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:29
#, qt-format
msgid "Candidate firmware version: %1"
-msgstr "Versione candidata all'installazione: %1"
+msgstr "Versione del firmware aggiornata: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:35
#, qt-format
msgid "Release Notes: %1"
-msgstr "Note di release: %1"
+msgstr "Note di rilascio: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
msgid "Important:"
-msgstr "Importanza:"
+msgstr "Importante:"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:41
msgid ""
"This update will also upgrade recovery data. Make sure your Pebble "
"smartwarch is connected to a power adapter."
msgstr ""
-"Questo aggiornamento aggiornerá il sistema. Connetti il tuo Smartwhatch "
-"Pebble alla presa di corrente."
+"Questo aggiornamento aggiornerà i dati di ripristino. Assicurati che il tuo "
+"Pebble sia sotto carica."
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:9
msgid "Health settings"
-msgstr "Impostazioni Salute"
+msgstr "Impostazioni Health"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:17
msgid "Health app enabled"
-msgstr "App Salute è attiva"
+msgstr "App Health attiva"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Female"
@@ -173,7 +173,7 @@ msgstr "Peso"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:73
msgid "I want to be more active"
-msgstr "Vorrei Essere più attivo"
+msgstr "Vorrei essere più attivo"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:84
msgid "I want to sleep more"
@@ -185,7 +185,7 @@ msgstr "OK"
#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
msgid "Import watchapp or watchface"
-msgstr ""
+msgstr "Importa una app o una watchface"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
#, qt-format
@@ -193,22 +193,20 @@ msgid "Version %1"
msgstr "Versione %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr "Collaboratori"
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr "Note legali"
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
-msgstr "Quest' applicazione non è affiliata con Pebble Technology Corp."
+msgstr ""
+"Questa applicazione non è né affiliata né supportata da Pebble Techology "
+"Corp."
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
-msgstr "Pebble è un Marchio Registrato di Pebble Technology Corp."
+msgstr "Pebble è un marchio registrato di Pebble Technology Corp."
#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
msgid "Apps & Watchfaces"
@@ -220,7 +218,7 @@ msgstr "App"
#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:9
msgid "Watchfaces"
-msgstr "Watchfaces"
+msgstr "Watchface"
#: /home/micha/Develop/upebble/rockwork/InstalledAppsPage.qml:167
msgid "Launch"
@@ -239,9 +237,13 @@ msgstr "Elimina"
msgid "Close"
msgstr "Chiudi"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr "Caricamento..."
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
-msgstr ""
+msgstr "Informazioni su..."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
msgid "Developer tools"
@@ -253,7 +255,7 @@ msgstr "Gestisci le notifiche"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:59
msgid "Manage Apps"
-msgstr "Gestisci le applicazioni"
+msgstr "Gestisci le App"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:67
msgid "Manage Watchfaces"
@@ -279,18 +281,19 @@ msgid ""
"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
"within range and it is paired properly in the Bluetooth System Settings."
msgstr ""
-"Il tuo Pebble è disconnesso. Controlla che sia acceso,che non sia lontano e "
-"controlla se è accoppiato con questo smartphone nelle impostazioni del "
-"Bluetooth ."
+"Il tuo Pebble è disconnesso. Controlla che sia acceso, si trovi in "
+"prossimità e che sia accoppiato correttamente nella sezione Bluetooth delle "
+"impostazioni di Sistema."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:213
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:64
msgid "Open System Settings"
-msgstr "Impostazioni aperte"
+msgstr "Apri Impostazioni"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
-msgstr "Il tuo Pebble è in modalitá di fabbrica e sta per essere inizializzato"
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgstr "Il tuo Pebble è in modalità di fabbrica e deve essere inizializzato."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
msgid "Initialize Pebble"
@@ -309,24 +312,25 @@ msgid ""
"Entries here will be added as notifications appear on the phone. Selected "
"notifications will be shown on your Pebble smartwatch."
msgstr ""
-"Scrivi quali notifiche dovranno apparire nel telefono. Quelle selezionate "
-"appariranno nel Pebble ."
+"Le applicazioni verranno aggiunte a questa lista quando le relative "
+"notifiche appariranno sul telefono. Quelle selezionate verranno mostrate sul "
+"tuo Pebble."
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:6
msgid "Manage Pebble Watches"
-msgstr "Gestisci le Whatchfaces Pebble"
+msgstr "Gestisci le Whatchfaces del Pebble"
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:57
msgid ""
"No Pebble smartwatches configured yet. Please connect your Pebble smartwatch "
"using System Settings."
msgstr ""
-"Nessuno Smartwhatch Pebble connesso. Connetti il tuo Pebble usando le "
-"impostazioni."
+"Nessuno Smartwatch Pebble configurato. Connetti il tuo Pebble usando le "
+"Impostazioni di Sistema"
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:69
msgid "Screenshot options"
-msgstr "Opzioni sugli Screenshot"
+msgstr "Opzioni screenshot"
#: /home/micha/Develop/upebble/rockwork/ScreenshotsPage.qml:74
msgid "Share"
@@ -343,7 +347,7 @@ msgstr "Salva"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:19
msgid "Distance Units"
-msgstr "Unità di distanza"
+msgstr "Unità di misura distanza"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:35
msgid "Metric"
@@ -359,7 +363,4 @@ msgstr "Calendario"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
-msgstr "Sincronizza con la timeline del calendario"
-
-#~ msgid "Info"
-#~ msgstr "Informazioni"
+msgstr "Sincronizza calendario con la timeline"
diff --git a/po/ms.po b/po/ms.po
index e038c5a..a153626 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-02-08 19:12+0000\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-15 08:53+0000\n"
"Last-Translator: Adrian Chiang <Unknown>\n"
"Language-Team: Malay <ms@li.org>\n"
-"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-16 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: ms\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -78,7 +78,7 @@ msgstr "Laporkan masalah"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
msgid "Install app or watchface from file"
-msgstr ""
+msgstr "Memasang aplikasi atau muka jam dari fail"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
msgid "Preparing logs package..."
@@ -86,7 +86,7 @@ msgstr "Menyediakan pakej log..."
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
msgid "pebble.log"
-msgstr ""
+msgstr "pebble.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
msgid "Send rockworkd.log"
@@ -112,7 +112,6 @@ msgid "Firmware upgrade"
msgstr "Memperbarui perisian tetap"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
msgstr "Perisian tetap yang baru tersedia untuk jam Pebble anda."
@@ -181,11 +180,11 @@ msgstr "Saya mahu lebih tidur"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:95
msgid "OK"
-msgstr "Baik"
+msgstr "Setuju"
#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
msgid "Import watchapp or watchface"
-msgstr ""
+msgstr "Import aplikasi atau muka jam"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
#, qt-format
@@ -193,21 +192,17 @@ msgid "Version %1"
msgstr "Versi %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr "Penyumbang-penyumbang"
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr "Perundangan"
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
"Aplikasi in tidak berkenaan dengan atau disahkan oleh Pebble Technology Corp."
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr "Pebble adalah tanda dagang Pebble Technology Corp."
@@ -240,13 +235,17 @@ msgstr "Padam"
msgid "Close"
msgstr "Tutup"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr "Memuat..."
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
-msgstr ""
+msgstr "Perihal"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
msgid "Developer tools"
-msgstr "Peralatan pemaju"
+msgstr "Alat pemaju"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:52
msgid "Manage notifications"
@@ -268,7 +267,7 @@ msgstr "Tetapan"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:190
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:36
msgid "Connected"
-msgstr "Bersambung"
+msgstr "Sambung"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:190
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:36
@@ -280,8 +279,8 @@ msgid ""
"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
"within range and it is paired properly in the Bluetooth System Settings."
msgstr ""
-"Jam Pebble anda terputus. Sila pastikan ia dihidupkan, berada dekat dengan "
-"dan dipasangkan dengan betul melalui tetapan sistem Bluetooth."
+"Jam Pebble anda terputus talianya. Sila pastikan ia dihidupkan, berada dekat "
+"dengan dan dipasangkan dengan betul melalui tetapan sistem Bluetooth."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:213
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:64
@@ -289,7 +288,8 @@ msgid "Open System Settings"
msgstr "Buka Tetapan Sistem"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
"Jam Pebble anda berada dalam keadaan mod kilang dan perlu dimulakan semula."
@@ -362,6 +362,3 @@ msgstr "Kalendar"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
msgstr "Segerakkan kalendar dengan Timeline"
-
-#~ msgid "Info"
-#~ msgstr "Maklumat"
diff --git a/po/pt.po b/po/pt.po
index f18423a..bcacaff 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: upebble\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
-"PO-Revision-Date: 2016-02-08 15:44+0000\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
+"PO-Revision-Date: 2016-02-16 15:41+0000\n"
"Last-Translator: Vitor Loureiro <Unknown>\n"
"Language-Team: Portuguese <pt@li.org>\n"
-"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-17 05:49+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: pt\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -78,15 +78,15 @@ msgstr "Reportar problema"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:42
msgid "Install app or watchface from file"
-msgstr ""
+msgstr "Instalar app ou watchface de arquivo"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:109
msgid "Preparing logs package..."
-msgstr ""
+msgstr "A preparar pacote de logs..."
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:120
msgid "pebble.log"
-msgstr ""
+msgstr "pebble.log"
#: /home/micha/Develop/upebble/rockwork/DeveloperToolsPage.qml:127
msgid "Send rockworkd.log"
@@ -112,11 +112,9 @@ msgid "Firmware upgrade"
msgstr "Atualização do firmware"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:16
-#, fuzzy
msgid "A new firmware upgrade is available for your Pebble smartwatch."
msgstr ""
-"Uma nova actualização do firmware está disponível para o seu Pebble "
-"smartwatch"
+"Um novo upgrade de firmware está disponível para o seu Pebble smartwatch."
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:23
#, qt-format
@@ -126,7 +124,7 @@ msgstr "Firmware instalado atualmente: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:29
#, qt-format
msgid "Candidate firmware version: %1"
-msgstr ""
+msgstr "Versão de firmaware candidata: %1"
#: /home/micha/Develop/upebble/rockwork/FirmwareUpgradePage.qml:35
#, qt-format
@@ -147,11 +145,11 @@ msgstr ""
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:9
msgid "Health settings"
-msgstr ""
+msgstr "Configurações do Health"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:17
msgid "Health app enabled"
-msgstr ""
+msgstr "Aplicação Health ativada"
#: /home/micha/Develop/upebble/rockwork/HealthSettingsDialog.qml:28
msgid "Female"
@@ -187,7 +185,7 @@ msgstr "OK"
#: /home/micha/Develop/upebble/rockwork/ImportPackagePage.qml:7
msgid "Import watchapp or watchface"
-msgstr ""
+msgstr "Importar watchapp ou watchface"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:31
#, qt-format
@@ -195,20 +193,17 @@ msgid "Version %1"
msgstr "Versão %1"
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr "Contribuidores"
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr "Legal"
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
+"Esta aplicação não é afiliada nem endossada pela Pebble Technology Corp."
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr "Pebble é uma marca comercial da Pebble Technology Corp."
@@ -241,9 +236,13 @@ msgstr "Eliminar"
msgid "Close"
msgstr "Fechar"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr "A carregar..."
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
-msgstr ""
+msgstr "Acerca"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:22
msgid "Developer tools"
@@ -281,14 +280,18 @@ msgid ""
"Your Pebble smartwatch is disconnected. Please make sure it is powered on, "
"within range and it is paired properly in the Bluetooth System Settings."
msgstr ""
+"O seu smartwatch Pebble está desconectado. Por favor, verifique se ele está "
+"ligado, dentro do alcance e emparelhado corretamente nas configurações do "
+"Bluetooth."
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:213
#: /home/micha/Develop/upebble/rockwork/PebblesPage.qml:64
msgid "Open System Settings"
-msgstr ""
+msgstr "Abra as Definições de Sistema"
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
"O seu smartwatch Pebble está no modo de fábrica e precisa ser inicializado."
@@ -355,8 +358,8 @@ msgstr "Imperial"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:55
msgid "Calendar"
-msgstr ""
+msgstr "Calendário"
#: /home/micha/Develop/upebble/rockwork/SettingsPage.qml:62
msgid "Sync calendar to timeline"
-msgstr ""
+msgstr "Sincronizar calendário para o timeline"
diff --git a/po/rockwork.mzanetti.pot b/po/rockwork.mzanetti.pot
index 0f5cbce..6017fa8 100644
--- a/po/rockwork.mzanetti.pot
+++ b/po/rockwork.mzanetti.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -189,20 +189,16 @@ msgid "Version %1"
msgstr ""
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr ""
@@ -235,6 +231,10 @@ msgstr ""
msgid "Close"
msgstr ""
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
msgstr ""
diff --git a/po/ru.po b/po/ru.po
index b5622cc..c3576f5 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: rockwork\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
"PO-Revision-Date: 2016-01-23 13:33+0000\n"
"Last-Translator: Eugene Marshal <Unknown>\n"
"Language-Team: Russian <ru@li.org>\n"
-"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2016-02-09 06:16+0000\n"
-"X-Generator: Launchpad (build 17908)\n"
+"X-Launchpad-Export-Date: 2016-02-15 05:44+0000\n"
+"X-Generator: Launchpad (build 17925)\n"
+"Language: ru\n"
#: /home/micha/Develop/upebble/rockwork/AppSettingsPage.qml:13
msgid "App Settings"
@@ -190,20 +190,16 @@ msgid "Version %1"
msgstr ""
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr ""
@@ -236,6 +232,10 @@ msgstr "Удалить"
msgid "Close"
msgstr "Закрыть"
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
msgstr ""
@@ -283,7 +283,8 @@ msgid "Open System Settings"
msgstr ""
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:221
-msgid "Your Pebble smartwatch is in factory mode and needs to be initialized."
+msgid ""
+"Your Pebble smartwatch is in factory mode and needs to be initialized."
msgstr ""
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:230
diff --git a/po/template.pot b/po/template.pot
index 0f5cbce..6017fa8 100644
--- a/po/template.pot
+++ b/po/template.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-02-09 23:31+0100\n"
+"POT-Creation-Date: 2016-02-14 23:39+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -189,20 +189,16 @@ msgid "Version %1"
msgstr ""
#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:40
-msgid "Contributors"
-msgstr ""
-
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:52
msgid "Legal"
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:74
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:62
msgid ""
"This application is neither affiliated with nor endorsed by Pebble "
"Technology Corp."
msgstr ""
-#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:79
+#: /home/micha/Develop/upebble/rockwork/InfoPage.qml:67
msgid "Pebble is a trademark of Pebble Technology Corp."
msgstr ""
@@ -235,6 +231,10 @@ msgstr ""
msgid "Close"
msgstr ""
+#: /home/micha/Develop/upebble/rockwork/Main.qml:95
+msgid "Loading..."
+msgstr ""
+
#: /home/micha/Develop/upebble/rockwork/MainMenuPage.qml:15
msgid "About"
msgstr ""
diff --git a/rockwork/InfoPage.qml b/rockwork/InfoPage.qml
index 3eec387..1427380 100644
--- a/rockwork/InfoPage.qml
+++ b/rockwork/InfoPage.qml
@@ -37,18 +37,6 @@ Page {
ThinDivider {}
Label {
- text: i18n.tr("Contributors")
- Layout.fillWidth: true
- font.bold: true
- }
- Label {
- text: "Michael Zanetti<br>Brian Douglas<br>Katharine Berry"
- Layout.fillWidth: true
- }
-
- ThinDivider {}
-
- Label {
text: i18n.tr("Legal")
Layout.fillWidth: true
font.bold: true
diff --git a/rockwork/Main.qml b/rockwork/Main.qml
index 2bdece3..a4726b9 100644
--- a/rockwork/Main.qml
+++ b/rockwork/Main.qml
@@ -35,11 +35,14 @@ MainView {
Pebbles {
id: pebbles
onCountChanged: loadStack()
+ onConnectedToServiceChanged: loadStack();
}
function loadStack() {
pageStack.clear()
- if (pebbles.count == 1) {
+ if (!pebbles.connectedToService) {
+ pageStack.push(loadingComponent)
+ } else if (pebbles.count == 1) {
pageStack.push(Qt.resolvedUrl("MainMenuPage.qml"), {pebble: pebbles.get(0)})
} else {
pageStack.push(Qt.resolvedUrl("PebblesPage.qml"))
@@ -50,4 +53,49 @@ MainView {
id: pageStack
Component.onCompleted: loadStack();
}
+
+ Component {
+ id: loadingComponent
+ Page {
+ title: "RockWork"
+
+ Column {
+ width: parent.width - units.gu(4)
+ anchors.centerIn: parent
+ spacing: units.gu(4)
+
+ Rectangle {
+ id: upgradeIcon
+ height: units.gu(10)
+ width: height
+ radius: width / 2
+ color: UbuntuColors.blue
+ anchors.horizontalCenter: parent.horizontalCenter
+ Icon {
+ anchors.fill: parent
+ anchors.margins: units.gu(1)
+ name: "preferences-system-updates-symbolic"
+ color: "white"
+ }
+
+ RotationAnimation on rotation {
+ duration: 2000
+ loops: Animation.Infinite
+ from: 0
+ to: 360
+ running: upgradeIcon.visible
+ }
+ visible: true
+ }
+
+ Label {
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+ fontSize: "large"
+ text: i18n.tr("Loading...")
+ }
+ }
+
+ }
+ }
}
diff --git a/rockwork/NotificationsPage.qml b/rockwork/NotificationsPage.qml
index 9802b05..d3c9ff9 100644
--- a/rockwork/NotificationsPage.qml
+++ b/rockwork/NotificationsPage.qml
@@ -78,7 +78,7 @@ Page {
checked: model.enabled
SlotsLayout.position: SlotsLayout.Trailing;
onClicked: {
- root.pebble.setNotificationFilter(model.name, checked)
+ root.pebble.setNotificationFilter(model.id, checked)
}
}
}
diff --git a/rockwork/notificationsourcemodel.cpp b/rockwork/notificationsourcemodel.cpp
index cbb75ca..83e87f0 100644
--- a/rockwork/notificationsourcemodel.cpp
+++ b/rockwork/notificationsourcemodel.cpp
@@ -1,5 +1,8 @@
#include "notificationsourcemodel.h"
+#include <QStandardPaths>
+#include <QFileInfo>
+#include <QDir>
#include <QSettings>
#include <QDebug>
@@ -21,6 +24,8 @@ QVariant NotificationSourceModel::data(const QModelIndex &index, int role) const
return item.m_displayName;
case RoleEnabled:
return item.m_enabled;
+ case RoleId:
+ return item.m_id;
case RoleIcon:
return item.m_icon;
}
@@ -33,6 +38,7 @@ QHash<int, QByteArray> NotificationSourceModel::roleNames() const
roles.insert(RoleName, "name");
roles.insert(RoleEnabled, "enabled");
roles.insert(RoleIcon, "icon");
+ roles.insert(RoleId, "id");
return roles;
}
@@ -59,10 +65,6 @@ void NotificationSourceModel::insert(const QString &sourceId, bool enabled)
}
}
-#include <QStandardPaths>
-#include <QFileInfo>
-#include <QDir>
-
NotificationSourceItem NotificationSourceModel::fromDesktopFile(const QString &sourceId)
{
NotificationSourceItem ret;
diff --git a/rockwork/notificationsourcemodel.h b/rockwork/notificationsourcemodel.h
index 89fa26f..7349d84 100644
--- a/rockwork/notificationsourcemodel.h
+++ b/rockwork/notificationsourcemodel.h
@@ -24,7 +24,8 @@ public:
enum Roles {
RoleName,
RoleEnabled,
- RoleIcon
+ RoleIcon,
+ RoleId
};
explicit NotificationSourceModel(QObject *parent = 0);
diff --git a/rockwork/pebbles.cpp b/rockwork/pebbles.cpp
index e45691e..65eeb6a 100644
--- a/rockwork/pebbles.cpp
+++ b/rockwork/pebbles.cpp
@@ -16,12 +16,22 @@ Pebbles::Pebbles(QObject *parent):
QAbstractListModel(parent)
{
refresh();
- m_watcher = new QDBusServiceWatcher(ROCKWORK_SERVICE, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration, this);
+ m_watcher = new QDBusServiceWatcher(ROCKWORK_SERVICE, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this);
QDBusConnection::sessionBus().connect(ROCKWORK_SERVICE, ROCKWORK_MANAGER_PATH, ROCKWORK_MANAGER_INTERFACE, "PebblesChanged", this, SLOT(refresh()));
connect(m_watcher, &QDBusServiceWatcher::serviceRegistered, [this]() {
+ qDebug() << "service Registered!";
refresh();
QDBusConnection::sessionBus().connect(ROCKWORK_SERVICE, ROCKWORK_MANAGER_PATH, ROCKWORK_MANAGER_INTERFACE, "PebblesChanged", this, SLOT(refresh()));
});
+ connect(m_watcher, &QDBusServiceWatcher::serviceUnregistered, [this]() {
+ qDebug() << "service Unregistered!";
+ beginResetModel();
+ qDeleteAll(m_pebbles);
+ m_pebbles.clear();
+ endResetModel();
+ m_connectedToService = false;
+ emit connectedToServiceChanged();
+ });
}
int Pebbles::rowCount(const QModelIndex &parent) const
@@ -56,6 +66,11 @@ QHash<int, QByteArray> Pebbles::roleNames() const
return roles;
}
+bool Pebbles::connectedToService()
+{
+ return m_connectedToService;
+}
+
QString Pebbles::version() const
{
QDBusInterface iface(ROCKWORK_SERVICE, ROCKWORK_MANAGER_PATH, ROCKWORK_MANAGER_INTERFACE);
@@ -77,7 +92,10 @@ QString Pebbles::version() const
Pebble *Pebbles::get(int index) const
{
- return m_pebbles.at(index);
+ if (index >= 0 && index < m_pebbles.count()) {
+ return m_pebbles.at(index);
+ }
+ return nullptr;
}
int Pebbles::find(const QString &address) const
@@ -148,6 +166,11 @@ void Pebbles::refresh()
endRemoveRows();
emit countChanged();
}
+
+ if (!m_connectedToService) {
+ m_connectedToService = true;
+ emit connectedToServiceChanged();
+ }
}
bool Pebbles::sortPebbles(Pebble *a, Pebble *b)
diff --git a/rockwork/pebbles.h b/rockwork/pebbles.h
index 0fef3bb..67e4440 100644
--- a/rockwork/pebbles.h
+++ b/rockwork/pebbles.h
@@ -12,8 +12,8 @@ class QDBusInterface;
class Pebbles : public QAbstractListModel
{
Q_OBJECT
+ Q_PROPERTY(bool connectedToService READ connectedToService NOTIFY connectedToServiceChanged)
Q_PROPERTY(QString version READ version)
-
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
public:
enum Roles {
@@ -29,6 +29,7 @@ public:
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;
+ bool connectedToService();
QString version() const;
Q_INVOKABLE Pebble *get(int index) const;
@@ -36,6 +37,7 @@ public:
signals:
+ void connectedToServiceChanged();
void countChanged();
private slots:
@@ -48,7 +50,7 @@ private:
static bool sortPebbles(Pebble *a, Pebble *b);
private:
- QDBusInterface *m_iface;
+ bool m_connectedToService = false;
QList<Pebble*> m_pebbles;
QDBusServiceWatcher *m_watcher;
};
diff --git a/rockworkd/libpebble/appmsgmanager.cpp b/rockworkd/libpebble/appmsgmanager.cpp
index e20c8d0..350383b 100644
--- a/rockworkd/libpebble/appmsgmanager.cpp
+++ b/rockworkd/libpebble/appmsgmanager.cpp
@@ -11,10 +11,17 @@ AppMsgManager::AppMsgManager(Pebble *pebble, AppManager *apps, WatchConnection *
: QObject(pebble),
m_pebble(pebble),
apps(apps),
- m_connection(connection), _lastTransactionId(0), _timeout(new QTimer(this))
+ m_connection(connection),
+ _lastTransactionId(0),
+ m_currentUuid(QUuid()),
+ _timeout(new QTimer(this))
{
connect(m_connection, &WatchConnection::watchConnected,
this, &AppMsgManager::handleWatchConnectedChanged);
+ connect(m_connection, &WatchConnection::watchDisconnected,
+ this, &AppMsgManager::handleWatchConnectedChanged);
+ connect(m_pebble, &Pebble::pebbleConnected,
+ this, &AppMsgManager::handlePebbleConnected);
_timeout->setSingleShot(true);
_timeout->setInterval(3000);
@@ -250,7 +257,9 @@ QByteArray AppMsgManager::buildLaunchMessage(quint8 messageType, const QUuid &uu
QByteArray ba;
WatchDataWriter writer(&ba);
writer.write<quint8>(messageType);
- writer.writeUuid(uuid);
+ if (!uuid.isNull()) {
+ writer.writeUuid(uuid);
+ }
return ba;
}
@@ -282,6 +291,7 @@ void AppMsgManager::handleAppLaunchMessage(const QByteArray &data)
switch (data.at(0)) {
case LauncherActionStart:
qDebug() << "App starting in watch:" << uuid;
+ m_currentUuid = uuid;
emit appStarted(uuid);
break;
case LauncherActionStop:
@@ -317,6 +327,7 @@ void AppMsgManager::handleLauncherPushMessage(const QByteArray &data)
case LauncherActionStart:
qDebug() << "App starting in watch:" << uuid;
m_connection->writeToPebble(WatchConnection::EndpointLauncher, buildAckMessage(transaction));
+ m_currentUuid = uuid;
emit appStarted(uuid);
break;
case LauncherActionStop:
@@ -412,13 +423,22 @@ void AppMsgManager::handleAckMessage(const QByteArray &data, bool ack)
void AppMsgManager::handleWatchConnectedChanged()
{
- // If the watch is disconnected, everything breaks loose
- // TODO In the future we may want to avoid doing the following.
if (!m_connection->isConnected()) {
+ emit appStopped(m_currentUuid);
+
+ // If the watch is disconnected, everything breaks loose
+ // TODO In the future we may want to avoid doing the following.
+
abortPendingTransactions();
}
}
+void AppMsgManager::handlePebbleConnected()
+{
+ //Now that we have all the info from the pebble "relaunch" the current app
+ emit appStarted(m_currentUuid);
+}
+
void AppMsgManager::handleTimeout()
{
// Abort the first transaction
diff --git a/rockworkd/libpebble/appmsgmanager.h b/rockworkd/libpebble/appmsgmanager.h
index 77ee480..374ed98 100644
--- a/rockworkd/libpebble/appmsgmanager.h
+++ b/rockworkd/libpebble/appmsgmanager.h
@@ -67,6 +67,7 @@ private:
private slots:
void handleWatchConnectedChanged();
+ void handlePebbleConnected();
void handleTimeout();
void handleAppLaunchMessage(const QByteArray &data);
@@ -79,6 +80,7 @@ private:
WatchConnection *m_connection;
QHash<QUuid, MessageHandlerFunc> _handlers;
quint8 _lastTransactionId;
+ QUuid m_currentUuid;
struct PendingTransaction {
quint8 transactionId;
diff --git a/rockworkd/libpebble/blobdb.cpp b/rockworkd/libpebble/blobdb.cpp
index e5a2f77..2faa499 100644
--- a/rockworkd/libpebble/blobdb.cpp
+++ b/rockworkd/libpebble/blobdb.cpp
@@ -108,13 +108,13 @@ void BlobDB::insertNotification(const Notification &notification)
TimelineItem timelineItem(itemUuid, TimelineItem::TypeNotification);
timelineItem.setFlags(TimelineItem::FlagSingleEvent);
- TimelineAttribute titleAttribute(TimelineAttribute::TypeTitle, notification.sender().left(64).toUtf8());
+ TimelineAttribute titleAttribute(TimelineAttribute::TypeTitle, notification.sender().remove(QRegExp("<[^>]*>")).left(64).toUtf8());
timelineItem.appendAttribute(titleAttribute);
- TimelineAttribute subjectAttribute(TimelineAttribute::TypeSubtitle, notification.subject().left(64).toUtf8());
+ TimelineAttribute subjectAttribute(TimelineAttribute::TypeSubtitle, notification.subject().remove(QRegExp("<[^>]*>")).left(64).toUtf8());
timelineItem.appendAttribute(subjectAttribute);
- TimelineAttribute bodyAttribute(TimelineAttribute::TypeBody, notification.body().toUtf8());
+ TimelineAttribute bodyAttribute(TimelineAttribute::TypeBody, notification.body().remove(QRegExp("<[^>]*>")).toUtf8());
timelineItem.appendAttribute(bodyAttribute);
TimelineAttribute iconAttribute(TimelineAttribute::TypeTinyIcon, iconId);
@@ -144,13 +144,14 @@ void BlobDB::insertNotification(const Notification &notification)
m_notificationSources.insert(itemUuid, notification);
}
-void BlobDB::insertTimelinePin(const QUuid &uuid, TimelineItem::Layout layout, const QDateTime &startTime, const QDateTime &endTime, const QString &title, const QString &desctiption, const QMap<QString, QString> fields, bool recurring)
+void BlobDB::insertTimelinePin(const QUuid &uuid, TimelineItem::Layout layout, bool isAllDay, const QDateTime &startTime, const QDateTime &endTime, const QString &title, const QString &desctiption, const QMap<QString, QString> fields, bool recurring)
{
// TimelineItem item(TimelineItem::TypePin, TimelineItem::FlagSingleEvent, QDateTime::currentDateTime().addMSecs(1000 * 60 * 2), 60);
qDebug() << "inserting timeline pin:" << title << startTime << endTime;
int duration = (endTime.toMSecsSinceEpoch() - startTime.toMSecsSinceEpoch()) / 1000 / 60;
- TimelineItem item(uuid, TimelineItem::TypePin, TimelineItem::FlagSingleEvent, startTime, duration);
+ TimelineItem::Flag flag = isAllDay ? TimelineItem::FlagAllDay : TimelineItem::FlagSingleEvent;
+ TimelineItem item(uuid, TimelineItem::TypePin, flag, startTime, duration);
item.setLayout(layout);
TimelineAttribute titleAttribute(TimelineAttribute::TypeTitle, title.toUtf8());
@@ -239,7 +240,7 @@ void BlobDB::syncCalendar(const QList<CalendarEvent> &events)
// Filter out invalid items
foreach (const CalendarEvent &event, events) {
- if (event.startTime().isValid() && event.endTime().isValid()
+ if (event.startTime().isValid() && (event.endTime().isValid() || event.isAllDay())
&& event.startTime().addDays(2) > QDateTime::currentDateTime()
&& QDateTime::currentDateTime().addDays(5) > event.startTime()) {
itemsToSync.append(event);
@@ -286,7 +287,7 @@ void BlobDB::syncCalendar(const QList<CalendarEvent> &events)
if (!event.calendar().isEmpty()) fields.insert("Calendar", event.calendar());
if (!event.comment().isEmpty()) fields.insert("Comments", event.comment());
if (!event.guests().isEmpty()) fields.insert("Guests", event.guests().join(", "));
- insertTimelinePin(event.uuid(), TimelineItem::LayoutCalendar, event.startTime(), event.endTime(), event.title(), event.description(), fields, event.recurring());
+ insertTimelinePin(event.uuid(), TimelineItem::LayoutCalendar, event.isAllDay(), event.startTime(), event.endTime(), event.title(), event.description(), fields, event.recurring());
m_calendarEntries.append(event);
event.saveToCache(m_blobDBStoragePath);
}
diff --git a/rockworkd/libpebble/blobdb.h b/rockworkd/libpebble/blobdb.h
index b1db403..58d7f51 100644
--- a/rockworkd/libpebble/blobdb.h
+++ b/rockworkd/libpebble/blobdb.h
@@ -42,7 +42,7 @@ public:
explicit BlobDB(Pebble *pebble, WatchConnection *connection);
void insertNotification(const Notification &notification);
- void insertTimelinePin(const QUuid &uuid, TimelineItem::Layout layout, const QDateTime &startTime, const QDateTime &endTime, const QString &title, const QString &desctiption, const QMap<QString, QString> fields, bool recurring);
+ void insertTimelinePin(const QUuid &uuid, TimelineItem::Layout layout, bool isAllDay, const QDateTime &startTime, const QDateTime &endTime, const QString &title, const QString &desctiption, const QMap<QString, QString> fields, bool recurring);
void removeTimelinePin(const QUuid &uuid);
void insertReminder();
void clearTimeline();
diff --git a/rockworkd/libpebble/calendarevent.cpp b/rockworkd/libpebble/calendarevent.cpp
index ea99b56..ea3a3a7 100644
--- a/rockworkd/libpebble/calendarevent.cpp
+++ b/rockworkd/libpebble/calendarevent.cpp
@@ -124,6 +124,16 @@ void CalendarEvent::setRecurring(bool recurring)
m_recurring = recurring;
}
+bool CalendarEvent::isAllDay() const
+{
+ return m_isAllDay;
+}
+
+void CalendarEvent::setIsAllDay(bool isAllDay)
+{
+ m_isAllDay = isAllDay;
+}
+
bool CalendarEvent::operator==(const CalendarEvent &other) const
{
// Storing a QDateTime to QSettings seems to lose time zone information. Lets ignore the time zone when
@@ -141,8 +151,8 @@ bool CalendarEvent::operator==(const CalendarEvent &other) const
&& m_calendar == other.calendar()
&& m_comment == other.comment()
&& m_guests == other.guests()
- && m_recurring == other.recurring();
-
+ && m_recurring == other.recurring()
+ && m_isAllDay == other.isAllDay();
}
void CalendarEvent::saveToCache(const QString &cachePath) const
@@ -159,6 +169,7 @@ void CalendarEvent::saveToCache(const QString &cachePath) const
s.setValue("comment", m_comment);
s.setValue("guests", m_guests);
s.setValue("recurring", m_recurring);
+ s.setValue("isAllDay", m_isAllDay);
}
void CalendarEvent::loadFromCache(const QString &cachePath, const QString &uuid)
@@ -175,6 +186,7 @@ void CalendarEvent::loadFromCache(const QString &cachePath, const QString &uuid)
m_comment = s.value("comment").toString();
m_guests = s.value("guests").toStringList();
m_recurring = s.value("recurring").toBool();
+ m_isAllDay = s.value("isAllDay").toBool();
}
void CalendarEvent::removeFromCache(const QString &cachePath) const
diff --git a/rockworkd/libpebble/calendarevent.h b/rockworkd/libpebble/calendarevent.h
index 5361a48..30ce49f 100644
--- a/rockworkd/libpebble/calendarevent.h
+++ b/rockworkd/libpebble/calendarevent.h
@@ -46,6 +46,9 @@ public:
bool recurring() const;
void setRecurring(bool recurring);
+ bool isAllDay() const;
+ void setIsAllDay(bool isAllDay);
+
bool operator==(const CalendarEvent &other) const;
void saveToCache(const QString &cachePath) const;
@@ -64,6 +67,7 @@ private:
QString m_comment;
QStringList m_guests;
bool m_recurring = false;
+ bool m_isAllDay = false;
};
#endif // CALENDAREVENT_H
diff --git a/rockworkd/libpebble/jskit/jskitconsole.cpp b/rockworkd/libpebble/jskit/jskitconsole.cpp
index 3d6c85c..384965b 100644
--- a/rockworkd/libpebble/jskit/jskitconsole.cpp
+++ b/rockworkd/libpebble/jskit/jskitconsole.cpp
@@ -4,26 +4,209 @@
JSKitConsole::JSKitConsole(QObject *parent) :
QObject(parent),
- l(metaObject()->className())
+ l("JSKit Log"),
+ w("JSKit Warning"),
+ e("JSKit Error"),
+ i("JSKit Info")
{
}
-void JSKitConsole::log(const QString &msg)
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9)
{
- qCDebug(l) << msg;
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8 << msg9;
}
-void JSKitConsole::warn(const QString &msg)
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8)
{
- qCWarning(l) << msg;
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8;
}
-void JSKitConsole::error(const QString &msg)
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7)
{
- qCCritical(l) << msg;
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7;
}
-void JSKitConsole::info(const QString &msg)
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6)
{
- qCDebug(l) << msg;
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6;
+}
+
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5)
+{
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5;
+}
+
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4)
+{
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3 << msg4;
+}
+
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3)
+{
+ qCDebug(l) << msg0 << msg1 << msg2 << msg3;
+}
+
+void JSKitConsole::log(const QString &msg0, const QString &msg1, const QString &msg2)
+{
+ qCDebug(l) << msg0 << msg1 << msg2;
+}
+
+void JSKitConsole::log(const QString &msg0, const QString &msg1)
+{
+ qCDebug(l) << msg0 << msg1;
+}
+
+void JSKitConsole::log(const QString &msg0)
+{
+ qCDebug(l) << msg0;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8 << msg9;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3 << msg4;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3)
+{
+ qCWarning(w) << msg0 << msg1 << msg2 << msg3;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1, const QString &msg2)
+{
+ qCWarning(w) << msg0 << msg1 << msg2;
+}
+
+void JSKitConsole::warn(const QString &msg0, const QString &msg1)
+{
+ qCWarning(w) << msg0 << msg1;
+}
+
+void JSKitConsole::warn(const QString &msg0)
+{
+ qCWarning(w) << msg0;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8 << msg9;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3 << msg4;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3)
+{
+ qCCritical(e) << msg0 << msg1 << msg2 << msg3;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1, const QString &msg2)
+{
+ qCCritical(e) << msg0 << msg1 << msg2;
+}
+
+void JSKitConsole::error(const QString &msg0, const QString &msg1)
+{
+ qCCritical(e) << msg0 << msg1;
+}
+
+void JSKitConsole::error(const QString &msg0)
+{
+ qCCritical(e) << msg0;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8 << msg9;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7 << msg8;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6 << msg7;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5 << msg6;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3 << msg4 << msg5;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3 << msg4;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3)
+{
+ qCDebug(i) << msg0 << msg1 << msg2 << msg3;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1, const QString &msg2)
+{
+ qCDebug(i) << msg0 << msg1 << msg2;
+}
+
+void JSKitConsole::info(const QString &msg0, const QString &msg1)
+{
+ qCDebug(i) << msg0 << msg1;
+}
+
+void JSKitConsole::info(const QString &msg0)
+{
+ qCDebug(i) << msg0;
}
diff --git a/rockworkd/libpebble/jskit/jskitconsole.h b/rockworkd/libpebble/jskit/jskitconsole.h
index 3896ae3..6f8970d 100644
--- a/rockworkd/libpebble/jskit/jskitconsole.h
+++ b/rockworkd/libpebble/jskit/jskitconsole.h
@@ -3,18 +3,66 @@
#include <QLoggingCategory>
+/*
+ We opted to do multiple overloaded functions rather than one with default
+ arguments as this method produces nicer log messages and wont omit (possibly)
+ important messages like empty string, undefined, or null.
+*/
+
class JSKitConsole : public QObject
{
Q_OBJECT
QLoggingCategory l;
+ QLoggingCategory w;
+ QLoggingCategory e;
+ QLoggingCategory i;
public:
explicit JSKitConsole(QObject *parent=0);
- Q_INVOKABLE void log(const QString &msg);
- Q_INVOKABLE void warn(const QString &msg);
- Q_INVOKABLE void error(const QString &msg);
- Q_INVOKABLE void info(const QString &msg);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1, const QString &msg2);
+ Q_INVOKABLE void log(const QString &msg0, const QString &msg1);
+ Q_INVOKABLE void log(const QString &msg0);
+
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1, const QString &msg2);
+ Q_INVOKABLE void warn(const QString &msg0, const QString &msg1);
+ Q_INVOKABLE void warn(const QString &msg0);
+
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1, const QString &msg2);
+ Q_INVOKABLE void error(const QString &msg0, const QString &msg1);
+ Q_INVOKABLE void error(const QString &msg0);
+
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8, const QString &msg9);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7, const QString &msg8);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6, const QString &msg7);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5, const QString &msg6);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4, const QString &msg5);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3, const QString &msg4);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2, const QString &msg3);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1, const QString &msg2);
+ Q_INVOKABLE void info(const QString &msg0, const QString &msg1);
+ Q_INVOKABLE void info(const QString &msg0);
};
#endif // JSKITCONSOLE_H
diff --git a/rockworkd/libpebble/jskit/jskitmanager.cpp b/rockworkd/libpebble/jskit/jskitmanager.cpp
index 04bf674..8a03afd 100644
--- a/rockworkd/libpebble/jskit/jskitmanager.cpp
+++ b/rockworkd/libpebble/jskit/jskitmanager.cpp
@@ -82,7 +82,7 @@ AppInfo JSKitManager::currentApp()
void JSKitManager::handleAppStarted(const QUuid &uuid)
{
AppInfo info = m_apps->info(uuid);
- if (!info.uuid().isNull() && info.isJSKit()) {
+ if (!info.uuid().isNull() && info.isJSKit() && info.uuid() != m_curApp.uuid()) {
qCDebug(l) << "Preparing to start JSKit app" << info.uuid() << info.shortName();
m_curApp = info;
diff --git a/rockworkd/libpebble/jskit/jskitpebble.cpp b/rockworkd/libpebble/jskit/jskitpebble.cpp
index a300aef..e755d60 100644
--- a/rockworkd/libpebble/jskit/jskitpebble.cpp
+++ b/rockworkd/libpebble/jskit/jskitpebble.cpp
@@ -4,6 +4,7 @@
#include "jskitpebble.h"
#include "jskitxmlhttprequest.h"
+#include "jskitwebsocket.h"
static const char *token_salt = "0feeb7416d3c4546a19b04bccd8419b1";
@@ -315,10 +316,16 @@ void JSKitPebble::openURL(const QUrl &url)
QJSValue JSKitPebble::createXMLHttpRequest()
{
JSKitXMLHttpRequest *xhr = new JSKitXMLHttpRequest(m_mgr->engine());
- // Should be deleted by JS engine.
return m_mgr->engine()->newQObject(xhr);
}
+QJSValue JSKitPebble::createWebSocket(const QString &url, const QJSValue &protocols)
+{
+ JSKitWebSocket *ws = new JSKitWebSocket(m_mgr->engine(), url, protocols);
+ return m_mgr->engine()->newQObject(ws);
+}
+
+
QJSValue JSKitPebble::buildAckEventObject(uint transaction, const QString &message) const
{
QJSEngine *engine = m_mgr->engine();
diff --git a/rockworkd/libpebble/jskit/jskitpebble.h b/rockworkd/libpebble/jskit/jskitpebble.h
index d9cd670..c461adb 100644
--- a/rockworkd/libpebble/jskit/jskitpebble.h
+++ b/rockworkd/libpebble/jskit/jskitpebble.h
@@ -32,6 +32,7 @@ public:
Q_INVOKABLE void openURL(const QUrl &url);
Q_INVOKABLE QJSValue createXMLHttpRequest();
+ Q_INVOKABLE QJSValue createWebSocket(const QString &url, const QJSValue &protocols=QJSValue{});
void invokeCallbacks(const QString &type, const QJSValueList &args = QJSValueList());
diff --git a/rockworkd/libpebble/jskit/jskitsetup.js b/rockworkd/libpebble/jskit/jskitsetup.js
index 340c4f1..2f85c7d 100644
--- a/rockworkd/libpebble/jskit/jskitsetup.js
+++ b/rockworkd/libpebble/jskit/jskitsetup.js
@@ -81,16 +81,6 @@ console = new (function() {
);
})();
-/*localStorage = new (function() {
- _jskit.make_proxies(this, _jskit.localstorage,
- ['clear', 'getItem', 'setItem', 'removeItem', 'key']
- );
-
- _jskit.make_properties(this, _jskit.localstorage,
- ['length']
- );
-})();*/
-
//It appears that Proxy is not available since Qt is using Javascript v5
/*(function() {
var proxy = _jskit.make_proxies({}, _jskit.localstorage, ['set', 'has', 'deleteProperty', 'keys', 'enumerate']);
@@ -194,3 +184,97 @@ Object.defineProperty(window, "localStorage", new (function () {
localStorage.setItem(keys[index], value);
}
})();
+
+function WebSocket(url, protocols) {
+ var ws = _jskit.pebble.createWebSocket(url, protocols);
+ _jskit.make_proxies(this, ws, ['close', 'send']);
+ _jskit.make_properties(this, ws,
+ ['readyState', 'bufferedAmount', 'onopen', 'onerror', 'onclose', 'onmessage',
+ 'extensions', 'protocol', 'binaryType']);
+
+ this.CONNECTING = 0;
+ this.OPEN = 1;
+ this.CLOSING = 2;
+ this.CLOSED = 3;
+}
+
+//Borrowed from https://github.com/pebble/pypkjs/blob/master/pypkjs/javascript/events.py#L9
+Event = function(event_type, event_init_dict) {
+ var self = this;
+ this.stopPropagation = function() {};
+ this.stopImmediatePropagation = function() { self._aborted = true; }
+ this.preventDefault = function() { self.defaultPrevented = true; }
+ this.initEvent = function(event_type, bubbles, cancelable) {
+ self.type = event_type;
+ self.bubbles = bubbles;
+ self.cancelable = cancelable
+ };
+
+ if(!event_init_dict) event_init_dict = {};
+ this.type = event_type;
+ this.bubbles = event_init_dict.bubbles || false;
+ this.cancelable = event_init_dict.cancelable || false;
+ this.defaultPrevented = false;
+ this.target = null;
+ this.currentTarget = null;
+ this.eventPhase = 2;
+ this._aborted = false;
+};
+Event._init = function(event_type, event_init_dict) {
+ //Convenience function to call from the engine
+ return new Event(event_type, event_init_dict)
+};
+
+Event.NONE = 0;
+Event.CAPTURING_PHASE = 1;
+Event.AT_TARGET = 2;
+Event.BUBBLING_PHASE = 3;
+
+//Borrowed from https://github.com/pebble/pypkjs/blob/master/pypkjs/javascript/ws.py#L14
+CloseEvent = function(wasClean, code, reason, eventInitDict) {
+ Event.call(this, "close", eventInitDict);
+
+ Object.defineProperties(this, {
+ wasClean: {
+ get: function() { return wasClean; },
+ enumerable: true,
+ },
+ code: {
+ get: function() { return code; },
+ enumerable: true,
+ },
+ reason: {
+ get: function() { return reason; },
+ enumerable: true,
+ },
+ });
+};
+
+CloseEvent.prototype = Object.create(Event.prototype);
+CloseEvent.prototype.constructor = CloseEvent;
+CloseEvent._init = function(wasClean, code, reason) {
+ //Convenience function to call from the engine
+ return new CloseEvent(wasClean, code, reason)
+};
+
+MessageEvent = function(origin, data, eventInitDict) {
+ Event.call(this, "message", eventInitDict);
+
+ Object.defineProperties(this, {
+ origin: {
+ get: function() { return origin; },
+ enumerable: true,
+ },
+ data: {
+ get: function() { return data; },
+ enumerable: true,
+ }
+ });
+};
+
+MessageEvent.prototype = Object.create(Event.prototype);
+MessageEvent.prototype.constructor = MessageEvent;
+MessageEvent._init = function(origin, data) {
+ //Convenience function to call from the engine
+ return new MessageEvent(origin, data)
+}; \ No newline at end of file
diff --git a/rockworkd/libpebble/jskit/jskitwebsocket.cpp b/rockworkd/libpebble/jskit/jskitwebsocket.cpp
new file mode 100644
index 0000000..e66cdfb
--- /dev/null
+++ b/rockworkd/libpebble/jskit/jskitwebsocket.cpp
@@ -0,0 +1,311 @@
+#include "jskitwebsocket.h"
+#include "jskitmanager.h"
+
+JSKitWebSocket::JSKitWebSocket(QJSEngine *engine, const QString &url, const QJSValue &protocols) :
+ QObject(engine),
+ l(metaObject()->className()),
+ m_engine(engine),
+ m_webSocket(new QWebSocket("", QWebSocketProtocol::VersionLatest, this)),
+ m_url(url)
+{
+ //As of QT 5.5: "QWebSocket currently does not support extensions and subprotocols"
+ Q_UNUSED(protocols)
+
+ connect(m_webSocket, &QWebSocket::connected,
+ this, &JSKitWebSocket::handleConnected);
+ connect(m_webSocket, &QWebSocket::disconnected,
+ this, &JSKitWebSocket::handleDisconnected);
+ connect(m_webSocket, static_cast<void(QWebSocket::*)(QAbstractSocket::SocketError)>(&QWebSocket::error),
+ this, &JSKitWebSocket::handleError);
+ connect(m_webSocket, &QWebSocket::sslErrors,
+ this, &JSKitWebSocket::handleSslErrors);
+ connect(m_webSocket, &QWebSocket::textMessageReceived,
+ this, &JSKitWebSocket::handleTextMessageReceived);
+ connect(m_webSocket, &QWebSocket::binaryMessageReceived,
+ this, &JSKitWebSocket::handleBinaryMessageReceived);
+
+ qCDebug(l) << "WebSocket opened for" << url;
+ //m_webSocket->ignoreSslErrors();
+ m_webSocket->open(QUrl(url));
+}
+
+void JSKitWebSocket::send(const QJSValue &data)
+{
+ //TODO throw SYNTAX_ERR if "The data is a string that has unpaired surrogates" - https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Exceptions_thrown_2
+
+ if (m_readyState != OPEN) {
+ //TODO throw INVALID_STATE_ERR if not opened - https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Exceptions_thrown_2
+ qCDebug(l) << "trying to send when connection is not yet open";
+
+ return;
+ }
+
+ if (data.isUndefined() || data.isNull()) {
+ qCDebug(l) << "Refusing to send a null or undefined message";
+ } else if (data.isString()) {
+ qCDebug(l) << "Sending text message:" << data.toString();
+
+ QByteArray byteData = data.toString().toUtf8();
+ m_bufferedAmount += byteData.size();
+
+ m_webSocket->sendTextMessage(data.toString());
+ } else if (data.isObject()) {
+ if (data.hasProperty("byteLength")) {
+ // Looks like an ArrayView or an ArrayBufferView!
+ QJSValue buffer = data.property("buffer");
+ if (buffer.isUndefined()) {
+ // We must assume we've been passed an ArrayBuffer directly
+ buffer = data;
+ }
+
+ QJSValue array = buffer.property("_bytes");
+ int byteLength = buffer.property("byteLength").toInt();
+
+ if (array.isArray()) {
+ QByteArray byteData;
+ byteData.reserve(byteLength);
+
+ for (int i = 0; i < byteLength; i++) {
+ byteData.append(array.property(i).toInt());
+ }
+
+ qCDebug(l) << "sending binary message with" << byteData.length() << "bytes";
+
+ m_bufferedAmount += byteData.size();
+ m_webSocket->sendBinaryMessage(byteData);
+ } else {
+ qCWarning(l) << "Refusing to send an unknown/invalid ArrayBuffer" << data.toString();
+ }
+ } else {
+ qCWarning(l) << "Refusing to send an unknown object:" << data.toString();
+ }
+ }
+}
+
+void JSKitWebSocket::close(quint32 code, const QString &reason)
+{
+ //TODO throw SYNTAX_ERR if "The reason string contains unpaired surrogates" - https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Exceptions_thrown_2
+
+
+ QByteArray byteData = reason.toUtf8();
+ if (byteData.size() >= 123) {
+ //TODO throw SYNTAX_ERR for invalid reason - https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Exceptions_thrown
+ qCDebug(l) << "Invalid reason";
+
+ return;
+ }
+
+ QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal;
+ if ((code >= 1000 && code <= 1011) || code == 1015) {
+ closeCode = static_cast<QWebSocketProtocol::CloseCode>(code);;
+ }
+ else {
+ //TODO throw INVALID_ACCESS_ERR for invalide code - https://developer.mozilla.org/en-US/docs/Web/API/WebSocket#Exceptions_thrown
+ qCDebug(l) << "Invalid close code";
+
+ return;
+ }
+
+ m_webSocket->close(closeCode, reason);
+ m_readyState = CLOSING;
+}
+
+void JSKitWebSocket::setOnclose(const QJSValue &onclose)
+{
+ m_onclose = onclose;
+}
+
+void JSKitWebSocket::setOnerror(const QJSValue &onerror)
+{
+ m_onerror = onerror;
+}
+
+void JSKitWebSocket::setOnmessage(const QJSValue &onmessage)
+{
+ m_onmessage = onmessage;
+}
+
+void JSKitWebSocket::setOnopen(const QJSValue &onopen)
+{
+ m_onopen = onopen;
+}
+
+QJSValue JSKitWebSocket::onclose() const
+{
+ return m_onclose;
+}
+
+QJSValue JSKitWebSocket::onerror() const
+{
+ return m_onerror;
+}
+
+QJSValue JSKitWebSocket::onmessage() const
+{
+ return m_onmessage;
+}
+
+QJSValue JSKitWebSocket::onopen() const
+{
+ return m_onopen;
+}
+
+quint32 JSKitWebSocket::bufferedAmount()
+{
+ return m_bufferedAmount;
+}
+
+quint8 JSKitWebSocket::readyState()
+{
+ return m_readyState;
+}
+
+QString JSKitWebSocket::url()
+{
+ return m_url;
+}
+
+void JSKitWebSocket::handleConnected()
+{
+ m_readyState = OPEN;
+ qCDebug(l) << "Connection opened";
+
+ if (m_onopen.isCallable()) {
+ qCDebug(l) << "Going to call onopen";
+
+ QJSValueList eventArgs;
+ eventArgs.append("open");
+ QJSValue event = m_engine->globalObject().property("Event").property("_init").call(eventArgs);
+
+ QJSValueList args;
+ args.append(event);
+ QJSValue result = m_onopen.callWithInstance(m_engine->newQObject(this), args);
+ if (result.isError()) {
+ qCWarning(l) << "JS error in onopen handler:" << JSKitManager::describeError(result);
+ }
+ }
+}
+
+void JSKitWebSocket::handleDisconnected()
+{
+ m_readyState = CLOSED;
+ qCDebug(l) << "Connection closed";
+
+ if (m_onclose.isCallable()) {
+ qCDebug(l) << "Going to call onclose";
+
+ QJSValueList eventArgs;
+ eventArgs.append(QJSValue(true)); //wasClean
+ eventArgs.append(QJSValue(m_webSocket->closeCode()));
+ eventArgs.append(QJSValue(m_webSocket->closeReason()));
+
+ QJSValue event = m_engine->globalObject().property("CloseEvent").property("_init").call(eventArgs);
+
+ QJSValueList args;
+ args.append(event);
+
+ QJSValue result = m_onclose.callWithInstance(m_engine->newQObject(this));
+ if (result.isError()) {
+ qCWarning(l) << "JS error in onclose handler:" << JSKitManager::describeError(result);
+ }
+ }
+}
+
+void JSKitWebSocket::handleError(QAbstractSocket::SocketError error)
+{
+ qCDebug(l) << "Error:" << error;
+
+ if (m_onerror.isCallable()) {
+ qCDebug(l) << "Going to call onerror";
+
+ QJSValueList eventArgs;
+ eventArgs.append(QJSValue("error"));
+ QJSValue event = m_engine->globalObject().property("Event").property("_init").call(eventArgs);
+
+ QJSValueList args;
+ args.append(event);
+ QJSValue result = m_onerror.callWithInstance(m_engine->newQObject(this), args);
+ if (result.isError()) {
+ qCWarning(l) << "JS error in onclose handler:" << JSKitManager::describeError(result);
+ }
+ }
+}
+
+void JSKitWebSocket::handleSslErrors(const QList<QSslError> &errors)
+{
+ qCDebug(l) << "Ssl Errors:" << errors;
+
+ if (m_onerror.isCallable()) {
+ qCDebug(l) << "Going to call onerror";
+
+ QJSValueList eventArgs;
+ eventArgs.append(QJSValue("error"));
+ QJSValue event = m_engine->globalObject().property("Event").property("_init").call(eventArgs);
+
+ QJSValueList args;
+ args.append(event);
+ QJSValue result = m_onerror.callWithInstance(m_engine->newQObject(this), args);
+ if (result.isError()) {
+ qCWarning(l) << "JS error in onclose handler:" << JSKitManager::describeError(result);
+ }
+ }
+}
+
+void JSKitWebSocket::handleTextMessageReceived(const QString &message)
+{
+ qCDebug(l) << "Text message recieved: " << message;
+
+ callOnmessage(QJSValue(message));
+}
+
+void JSKitWebSocket::handleBinaryMessageReceived(const QByteArray &message)
+{
+ qCDebug(l) << "Binary message recieved";
+
+ if (m_onmessage.isCallable()) {
+ if (m_binaryType == "arraybuffer") {
+ QJSValue arrayBufferProto = m_engine->globalObject().property("ArrayBuffer").property("prototype");
+ QJSValue arrayBuf = m_engine->newObject();
+
+ if (arrayBufferProto.isUndefined()) {
+ qCWarning(l) << "Cannot find proto of ArrayBuffer";
+ } else {
+ arrayBuf.setPrototype(arrayBufferProto);
+ arrayBuf.setProperty("byteLength", m_engine->toScriptValue<uint>(message.size()));
+
+ QJSValue array = m_engine->newArray(message.size());
+ for (int i = 0; i < message.size(); i++) {
+ array.setProperty(i, m_engine->toScriptValue<int>(message[i]));
+ }
+
+ arrayBuf.setProperty("_bytes", array);
+ qCDebug(l) << "calling onmessage with ArrayBuffer of" << message.size() << "bytes";
+
+ callOnmessage(arrayBuf);
+ }
+ } else {
+ qCWarning(l) << "unsupported binaryType:" << m_binaryType;
+ }
+ }
+}
+
+void JSKitWebSocket::callOnmessage(QJSValue data)
+{
+ if (m_onmessage.isCallable()) {
+ qCDebug(l) << "Going to call onmessage";
+
+ QJSValueList eventArgs;
+ eventArgs.append(QJSValue(m_webSocket->origin()));
+ eventArgs.append(data);
+
+ QJSValue messageEvent = m_engine->globalObject().property("MessageEvent").property("_init").call(eventArgs);
+
+ QJSValueList args;
+ args.append(messageEvent);
+
+ QJSValue result = m_onmessage.callWithInstance(m_engine->newQObject(this), args);
+ if (result.isError()) {
+ qCWarning(l) << "JS error in onmessage handler:" << JSKitManager::describeError(result);
+ }
+ }
+}
diff --git a/rockworkd/libpebble/jskit/jskitwebsocket.h b/rockworkd/libpebble/jskit/jskitwebsocket.h
new file mode 100644
index 0000000..192e9a4
--- /dev/null
+++ b/rockworkd/libpebble/jskit/jskitwebsocket.h
@@ -0,0 +1,79 @@
+#ifndef JSKITWEBSOCKET_P_H
+#define JSKITWEBSOCKET_P_H
+
+#include <QLoggingCategory>
+#include <QWebSocket>
+#include <QJSEngine>
+
+class JSKitWebSocket : public QObject
+{
+ Q_OBJECT
+ QLoggingCategory l;
+
+ Q_PROPERTY(QString binaryType MEMBER m_binaryType)
+ Q_PROPERTY(quint32 bufferedAmount READ bufferedAmount)
+ Q_PROPERTY(QString extensions MEMBER m_extensions)
+ Q_PROPERTY(QJSValue onclose READ onclose WRITE setOnclose)
+ Q_PROPERTY(QJSValue onerror READ onerror WRITE setOnerror)
+ Q_PROPERTY(QJSValue onmessage READ onmessage WRITE setOnmessage)
+ Q_PROPERTY(QJSValue onopen READ onopen WRITE setOnopen)
+ Q_PROPERTY(QString protocol MEMBER m_protocol)
+ Q_PROPERTY(quint8 readyState READ readyState)
+ Q_PROPERTY(QString url READ url)
+
+public:
+ explicit JSKitWebSocket(QJSEngine *engine, const QString &url, const QJSValue &protocols=QJSValue());
+
+ enum ReadyStates {
+ CONNECTING = 0,
+ OPEN = 1,
+ CLOSING = 2,
+ CLOSED = 3
+ };
+ Q_ENUMS(ReadyStates)
+
+ Q_INVOKABLE void send(const QJSValue &data);
+ Q_INVOKABLE void close(quint32 code=1000, const QString &reason=QString());
+
+ void setOnclose(const QJSValue &onclose);
+ void setOnerror(const QJSValue &onerror);
+ void setOnmessage(const QJSValue &onmessage);
+ void setOnopen(const QJSValue &onopen);
+
+ QJSValue onclose() const;
+ QJSValue onerror() const;
+ QJSValue onmessage() const;
+ QJSValue onopen() const;
+
+ quint32 bufferedAmount();
+ quint8 readyState();
+ QString url();
+
+private slots:
+ void handleConnected();
+ void handleDisconnected();
+ void handleError(QAbstractSocket::SocketError error);
+ void handleSslErrors(const QList<QSslError> &errors);
+ void handleTextMessageReceived(const QString &message);
+ void handleBinaryMessageReceived(const QByteArray &message);
+
+private:
+ void callOnmessage(QJSValue data);
+
+private:
+ QJSEngine *m_engine;
+ QWebSocket *m_webSocket;
+
+ QString m_binaryType = "arraybuffer";
+ quint32 m_bufferedAmount = 0;
+ QString m_extensions;
+ QJSValue m_onclose;
+ QJSValue m_onerror;
+ QJSValue m_onmessage;
+ QJSValue m_onopen;
+ QString m_protocol;
+ quint8 m_readyState = CONNECTING;
+ QString m_url;
+};
+
+#endif // JSKITWEBSOCKET_P_H
diff --git a/rockworkd/libpebble/pebble.cpp b/rockworkd/libpebble/pebble.cpp
index 5655cc7..0f76097 100644
--- a/rockworkd/libpebble/pebble.cpp
+++ b/rockworkd/libpebble/pebble.cpp
@@ -60,7 +60,8 @@ Pebble::Pebble(const QBluetoothAddress &address, QObject *parent):
m_appMsgManager = new AppMsgManager(this, m_appManager, m_connection);
m_jskitManager = new JSKitManager(this, m_connection, m_appManager, m_appMsgManager, this);
- QObject::connect(m_jskitManager, SIGNAL(openURL(const QString&, const QString&)), this, SIGNAL(openURL(const QString&, const QString&)));
+ QObject::connect(m_jskitManager, &JSKitManager::openURL, this, &Pebble::openURL);
+ QObject::connect(m_appMsgManager, &AppMsgManager::appStarted, this, &Pebble::appStarted);
m_blobDB = new BlobDB(this, m_connection);
QObject::connect(m_blobDB, &BlobDB::muteSource, this, &Pebble::muteNotificationSource);
@@ -536,7 +537,7 @@ void Pebble::pebbleVersionReceived(const QByteArray &data)
qDebug() << "Is Unfaithful" << m_isUnfaithful;
// This is useful for debugging
- //m_isUnfaithful = true;
+// m_isUnfaithful = true;
if (!m_recovery) {
m_appManager->rescan();
@@ -624,6 +625,25 @@ void Pebble::appInstalled(const QUuid &uuid) {
if (m_pendingInstallations.contains(uuid)) {
m_appMsgManager->launchApp(uuid);
}
+
+ if (uuid == m_lastSyncedAppUuid) {
+ m_lastSyncedAppUuid = QUuid();
+
+ m_appManager->setAppOrder(m_appManager->appUuids());
+ QSettings settings(m_storagePath + "/appsettings.conf", QSettings::IniFormat);
+ if (settings.contains("watchface")) {
+ m_appMsgManager->launchApp(settings.value("watchface").toUuid());
+ }
+ }
+}
+
+void Pebble::appStarted(const QUuid &uuid)
+{
+ AppInfo info = m_appManager->info(uuid);
+ if (info.isWatchface()) {
+ QSettings settings(m_storagePath + "/appsettings.conf", QSettings::IniFormat);
+ settings.setValue("watchface", uuid.toString());
+ }
}
void Pebble::muteNotificationSource(const QString &source)
@@ -642,14 +662,14 @@ void Pebble::resetPebble()
void Pebble::syncApps()
{
+ QUuid lastSyncedAppUuid;
foreach (const QUuid &appUuid, m_appManager->appUuids()) {
if (!m_appManager->info(appUuid).isSystemApp()) {
qDebug() << "Inserting app" << m_appManager->info(appUuid).shortName() << "into BlobDB";
m_blobDB->insertAppMetaData(m_appManager->info(appUuid));
+ m_lastSyncedAppUuid = appUuid;
}
}
- // make sure the order is synced too
- m_appManager->setAppOrder(m_appManager->appUuids());
}
void Pebble::syncTime()
diff --git a/rockworkd/libpebble/pebble.h b/rockworkd/libpebble/pebble.h
index 8650d74..239b74b 100644
--- a/rockworkd/libpebble/pebble.h
+++ b/rockworkd/libpebble/pebble.h
@@ -115,6 +115,7 @@ private slots:
void phoneVersionAsked(const QByteArray &data);
void appDownloadFinished(const QString &id);
void appInstalled(const QUuid &uuid);
+ void appStarted(const QUuid &uuid);
void muteNotificationSource(const QString &source);
void resetPebble();
@@ -174,6 +175,7 @@ private:
QString m_storagePath;
QList<QUuid> m_pendingInstallations;
+ QUuid m_lastSyncedAppUuid;
bool m_calendarSyncEnabled = true;
HealthParams m_healthParams;
diff --git a/rockworkd/platformintegration/ubuntu/callchannelobserver.cpp b/rockworkd/platformintegration/ubuntu/callchannelobserver.cpp
index e3d852c..4e53645 100644
--- a/rockworkd/platformintegration/ubuntu/callchannelobserver.cpp
+++ b/rockworkd/platformintegration/ubuntu/callchannelobserver.cpp
@@ -80,12 +80,6 @@ void TelepathyMonitor::accountReady(Tp::PendingOperation* operation)
void TelepathyMonitor::onCallStarted(Tp::CallChannelPtr callChannel)
{
- // Haven't figured how to send outgoing calls to pebble yet... discard it
- if (callChannel->initiatorContact()->id().isEmpty()) {
- qWarning() << "ignoring phone call. looks like it's an outgoing one";
- return;
- }
-
m_cookie++;
m_currentCalls.insert(m_cookie, callChannel.data());
m_currentCallStates.insert(m_cookie, Tp::CallStateInitialising);
@@ -95,7 +89,6 @@ void TelepathyMonitor::onCallStarted(Tp::CallChannelPtr callChannel)
connect(callChannel.data(), &Tp::CallChannel::callStateChanged, this, &TelepathyMonitor::callStateChanged);
QString number = callChannel->initiatorContact()->id();
- qDebug() << "call started" << number;
// try to match the contact info
QContactFetchRequest *request = new QContactFetchRequest(this);
diff --git a/rockworkd/platformintegration/ubuntu/callchannelobserver.h b/rockworkd/platformintegration/ubuntu/callchannelobserver.h
index cc2b7aa..16616c9 100644
--- a/rockworkd/platformintegration/ubuntu/callchannelobserver.h
+++ b/rockworkd/platformintegration/ubuntu/callchannelobserver.h
@@ -18,7 +18,7 @@ class TelepathyCallMonitor : public QObject
public:
TelepathyCallMonitor(const Tp::AccountPtr& account):
mAccount(account),
- mCallObserver(Tp::SimpleCallObserver::create(mAccount)) {
+ mCallObserver(Tp::SimpleCallObserver::create(mAccount, Tp::SimpleCallObserver::CallDirectionIncoming)) {
connect(mCallObserver.data(), SIGNAL(callStarted(Tp::CallChannelPtr)), SIGNAL(callStarted(Tp::CallChannelPtr)));
// connect(mCallObserver.data(), SIGNAL(callEnded(Tp::CallChannelPtr,QString,QString)), SIGNAL(callEnded()));
// connect(mCallObserver.data(), SIGNAL(streamedMediaCallStarted(Tp::StreamedMediaChannelPtr)), SIGNAL(offHook()));
diff --git a/rockworkd/platformintegration/ubuntu/organizeradapter.cpp b/rockworkd/platformintegration/ubuntu/organizeradapter.cpp
index 853403a..9d697ca 100644
--- a/rockworkd/platformintegration/ubuntu/organizeradapter.cpp
+++ b/rockworkd/platformintegration/ubuntu/organizeradapter.cpp
@@ -39,6 +39,15 @@ void OrganizerAdapter::refresh()
event.setEndTime(organizerEvent.endDateTime());
event.setLocation(organizerEvent.location());
event.setComment(organizerEvent.comments().join(";"));
+ event.setIsAllDay(organizerEvent.isAllDay());
+ // on allDay events, the time portion of QDateTime is not valid. let's fix that
+ if (organizerEvent.isAllDay() && !organizerEvent.startDateTime().isValid() && organizerEvent.startDateTime().date().isValid()) {
+ QDateTime fixedStartTime;
+ fixedStartTime.setTime(QTime(12, 0));
+ fixedStartTime.setDate(organizerEvent.startDateTime().date());
+ event.setStartTime(fixedStartTime);
+ }
+
QStringList attendees;
foreach (const QOrganizerItemDetail &attendeeDetail, organizerEvent.details(QOrganizerItemDetail::TypeEventAttendee)) {
attendees.append(attendeeDetail.value(QOrganizerItemDetail::TypeEventAttendee + 1).toString());
diff --git a/rockworkd/rockworkd.pro b/rockworkd/rockworkd.pro
index e56ced9..edb97f9 100644
--- a/rockworkd/rockworkd.pro
+++ b/rockworkd/rockworkd.pro
@@ -1,4 +1,4 @@
-QT += core bluetooth dbus network contacts qml location organizer
+QT += core bluetooth dbus network contacts qml location organizer websockets
QT -= gui
include(../version.pri)
@@ -36,6 +36,7 @@ SOURCES += main.cpp \
libpebble/jskit/jskitxmlhttprequest.cpp \
libpebble/jskit/jskittimer.cpp \
libpebble/jskit/jskitperformance.cpp \
+ libpebble/jskit/jskitwebsocket.cpp \
libpebble/appinfo.cpp \
libpebble/appmanager.cpp \
libpebble/appmsgmanager.cpp \
@@ -86,6 +87,7 @@ HEADERS += \
libpebble/jskit/jskitxmlhttprequest.h \
libpebble/jskit/jskittimer.h \
libpebble/jskit/jskitperformance.h \
+ libpebble/jskit/jskitwebsocket.h \
libpebble/appinfo.h \
libpebble/appmanager.h \
libpebble/appmsgmanager.h \
diff --git a/version.pri b/version.pri
index 4925049..1c42433 100644
--- a/version.pri
+++ b/version.pri
@@ -1,2 +1,2 @@
-VERSION = "0.92"
+VERSION = "1.0"
DEFINES += VERSION=\\\"$$VERSION\\\"