From 8f014f0915c7bdc97573f953aa9a3ae25a5f953a Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 18 Feb 2016 09:11:16 +0100 Subject: Rockwork 1.0 --- po/de.po | 120 ++++--- po/el.po | 30 +- po/en_GB.po | 118 ++++--- po/es.po | 356 +++++++++++++++++++++ po/eu.po | 25 +- po/fr.po | 59 ++-- po/hu.po | 26 +- po/it.po | 119 +++---- po/ms.po | 47 ++- po/pt.po | 55 ++-- po/rockwork.mzanetti.pot | 14 +- po/ru.po | 23 +- po/template.pot | 14 +- rockwork/InfoPage.qml | 12 - rockwork/Main.qml | 50 ++- rockwork/NotificationsPage.qml | 2 +- rockwork/notificationsourcemodel.cpp | 10 +- rockwork/notificationsourcemodel.h | 3 +- rockwork/pebbles.cpp | 27 +- rockwork/pebbles.h | 6 +- rockworkd/libpebble/appmsgmanager.cpp | 28 +- rockworkd/libpebble/appmsgmanager.h | 2 + rockworkd/libpebble/blobdb.cpp | 15 +- rockworkd/libpebble/blobdb.h | 2 +- rockworkd/libpebble/calendarevent.cpp | 16 +- rockworkd/libpebble/calendarevent.h | 4 + rockworkd/libpebble/jskit/jskitconsole.cpp | 201 +++++++++++- rockworkd/libpebble/jskit/jskitconsole.h | 56 +++- rockworkd/libpebble/jskit/jskitmanager.cpp | 2 +- rockworkd/libpebble/jskit/jskitpebble.cpp | 9 +- rockworkd/libpebble/jskit/jskitpebble.h | 1 + rockworkd/libpebble/jskit/jskitsetup.js | 104 +++++- rockworkd/libpebble/jskit/jskitwebsocket.cpp | 311 ++++++++++++++++++ rockworkd/libpebble/jskit/jskitwebsocket.h | 79 +++++ rockworkd/libpebble/pebble.cpp | 28 +- rockworkd/libpebble/pebble.h | 2 + .../ubuntu/callchannelobserver.cpp | 7 - .../ubuntu/callchannelobserver.h | 2 +- .../ubuntu/organizeradapter.cpp | 9 + rockworkd/rockworkd.pro | 4 +- version.pri | 2 +- 41 files changed, 1611 insertions(+), 389 deletions(-) create mode 100644 po/es.po create mode 100644 rockworkd/libpebble/jskit/jskitwebsocket.cpp create mode 100644 rockworkd/libpebble/jskit/jskitwebsocket.h 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 \n" "Language-Team: German \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 \n" "Language-Team: Greek \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 \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 \n" "Language-Team: English (United Kingdom) \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 , 2016. +# +msgid "" +msgstr "" +"Project-Id-Version: rockwork\n" +"Report-Msgid-Bugs-To: FULL NAME \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 \n" +"Language-Team: Spanish \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 \n" "Language-Team: Basque \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 \n" +"POT-Creation-Date: 2016-02-14 23:39+0100\n" +"PO-Revision-Date: 2016-02-15 06:05+0000\n" +"Last-Translator: Anne \n" "Language-Team: French \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 \n" "Language-Team: Hungarian \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 \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) \n" "Language-Team: Italian \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 \n" "Language-Team: Malay \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 \n" "Language-Team: Portuguese \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 \n" "Language-Team: LANGUAGE \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 \n" "Language-Team: Russian \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 \n" "Language-Team: LANGUAGE \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 @@ -36,18 +36,6 @@ Page { ThinDivider {} - Label { - text: i18n.tr("Contributors") - Layout.fillWidth: true - font.bold: true - } - Label { - text: "Michael Zanetti
Brian Douglas
Katharine Berry" - Layout.fillWidth: true - } - - ThinDivider {} - Label { text: i18n.tr("Legal") Layout.fillWidth: 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 +#include +#include #include #include @@ -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 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 -#include -#include - 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 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 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 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(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 _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 ¬ification) 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 ¬ification) 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 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 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 &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 &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 ¬ification); - void insertTimelinePin(const QUuid &uuid, TimelineItem::Layout layout, const QDateTime &startTime, const QDateTime &endTime, const QString &title, const QString &desctiption, const QMap 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 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 +/* + 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(&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(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 &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(message.size())); + + QJSValue array = m_engine->newArray(message.size()); + for (int i = 0; i < message.size(); i++) { + array.setProperty(i, m_engine->toScriptValue(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 +#include +#include + +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 &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 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\\\" -- cgit v1.2.3