summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--app/pebblefirmware.cpp11
-rw-r--r--app/pebblefirmware.h2
-rw-r--r--app/qml/pages/AboutPage.qml15
-rw-r--r--app/qml/pages/Disclaimer.qml16
-rw-r--r--app/qml/pages/ManagerPage.qml10
-rw-r--r--app/translations/pebble-es.ts110
-rw-r--r--app/translations/pebble-pl.ts130
-rw-r--r--app/translations/pebble.ts110
-rw-r--r--daemon/manager.cpp2
-rw-r--r--daemon/musicmanager.cpp184
-rw-r--r--daemon/musicmanager.h7
-rw-r--r--daemon/settings.h3
-rw-r--r--rpm/pebble.changes8
-rw-r--r--rpm/pebble.spec2
-rw-r--r--rpm/pebble.yaml2
16 files changed, 417 insertions, 196 deletions
diff --git a/README.md b/README.md
index ef606c0..dc010b5 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,7 @@ Features
* PebbleKit JS application partial support
(including Pebble object, XMLHTTPRequest, localStorage, geolocation)
* Pebble AppStore preliminary support
+* Firmware check and upgrade
diff --git a/app/pebblefirmware.cpp b/app/pebblefirmware.cpp
index 95294f7..f42c29b 100644
--- a/app/pebblefirmware.cpp
+++ b/app/pebblefirmware.cpp
@@ -26,6 +26,7 @@ void PebbleFirmware::fetchFirmware(QString type)
QNetworkRequest req;
req.setUrl(_latest.value(type).toObject().value("url").toString());
req.setRawHeader("Cache-Control", "no-cache");
+ qDebug() << "Fetching firmware" << req.url();
nm->get(req);
}
@@ -35,15 +36,15 @@ void PebbleFirmware::onNetworkReplyFinished(QNetworkReply* rep)
if (rep->request().url().toString().endsWith("/latest.json")) {
QJsonDocument jsonResponse = QJsonDocument::fromJson(rep->readAll());
- QJsonObject jsonObject = jsonResponse.object();
- if (!jsonObject.isEmpty()) {
- qDebug() << "Latest firmware" << jsonObject;
- _latest = jsonObject.value("normal").toObject();
+ _latest = jsonResponse.object();
+ if (!_latest.isEmpty()) {
+ qDebug() << "Latest firmware" << _latest;
emit latestChanged();
}
} else if (rep->url().toString().endsWith(".pbz")) {
QDir downDir(QStandardPaths::writableLocation(QStandardPaths::DownloadLocation));
- QFileInfo name(rep->url().toLocalFile());
+ QFileInfo name(rep->url().toString(QUrl::FullyDecoded|QUrl::NormalizePathSegments|
+ QUrl::RemoveQuery|QUrl::RemoveFragment));
QFile file(downDir.absoluteFilePath(name.fileName()));
file.open(QIODevice::WriteOnly|QIODevice::Truncate);
if (file.write(rep->readAll()) == -1) {
diff --git a/app/pebblefirmware.h b/app/pebblefirmware.h
index 3890048..5e6bd65 100644
--- a/app/pebblefirmware.h
+++ b/app/pebblefirmware.h
@@ -11,7 +11,7 @@ class PebbleFirmware : public QObject
Q_OBJECT
Q_PROPERTY(QJsonObject latest READ latest NOTIFY latestChanged)
- QJsonObject latest() { return _latest; }
+ QJsonObject latest() { return _latest.value("normal").toObject(); }
public:
explicit PebbleFirmware(QObject *parent = 0);
diff --git a/app/qml/pages/AboutPage.qml b/app/qml/pages/AboutPage.qml
index 86a05c5..fec0fb5 100644
--- a/app/qml/pages/AboutPage.qml
+++ b/app/qml/pages/AboutPage.qml
@@ -33,7 +33,7 @@ Page {
color: Theme.highlightColor
width: parent.width
horizontalAlignment: Text.AlignHCenter
- text: "© 2014 Tomasz Sterna / Xiaoka.com\n" + qsTr("All Rights Reserved.")
+ text: "© 2014-2015 Tomasz Sterna / Xiaoka.com\n" + qsTr("All Rights Reserved.")
}
Label {
wrapMode: Text.Wrap
@@ -73,6 +73,19 @@ Page {
wrapMode: Text.Wrap
text: qsTr("Your donations help justify development time.")
}
+ Label {
+ visible: !!donate.active
+ anchors {
+ left: parent.left
+ right: parent.right
+ margins: Theme.paddingLarge
+ }
+ font.pixelSize: Theme.fontSizeLarge
+ font.italic: true
+ color: Theme.highlightColor
+ wrapMode: Text.Wrap
+ text: qsTr("Thank you for your support!!!")
+ }
Button {
text: qsTr("PayPal Donate")
anchors {
diff --git a/app/qml/pages/Disclaimer.qml b/app/qml/pages/Disclaimer.qml
index baf5cd0..57511fd 100644
--- a/app/qml/pages/Disclaimer.qml
+++ b/app/qml/pages/Disclaimer.qml
@@ -1,10 +1,17 @@
import QtQuick 2.0
import QtQml 2.1
import Sailfish.Silica 1.0
+import org.nemomobile.configuration 1.0
Page {
id: page
+ ConfigurationGroup {
+ id: settings
+ path: "/org/pebbled/settings"
+ property string donationCode: ""
+ }
+
SilicaFlickable {
id: flickable
anchors.fill: parent
@@ -54,7 +61,7 @@ Page {
right: parent.right
margins: Theme.paddingLarge * 2
}
- onClicked: Qt.openUrlExternally("mailto:support@xiaoka.com?subject=pebbled code request - "+
+ onClicked: Qt.openUrlExternally("mailto:support@pebbled.org?subject=pebbled code request - "+
donate.id + "&body=My paypal id is: ")
}
Label {
@@ -72,7 +79,14 @@ Page {
margins: Theme.paddingMedium
}
focus: true
+ text: settings.donationCode
+ onTextChanged: settings.donationCode = text
}
}
}
+
+ Connections {
+ target: donate
+ onActiveChanged: if(donate.active) pageStack.pop()
+ }
}
diff --git a/app/qml/pages/ManagerPage.qml b/app/qml/pages/ManagerPage.qml
index 894797d..7fb7369 100644
--- a/app/qml/pages/ManagerPage.qml
+++ b/app/qml/pages/ManagerPage.qml
@@ -11,6 +11,7 @@ Page {
path: "/org/pebbled/settings"
property bool silentWhenConnected: false
property bool transliterateMessage: false
+ property bool useSystemVolume: true
property bool incomingCallNotification: true
property bool notificationsCommhistoryd: true
property bool notificationsMissedCall: true
@@ -133,6 +134,15 @@ Page {
}
}
TextSwitch {
+ text: qsTr("Control main volume")
+ description: qsTr("Pebble music volume buttons change the main phone volume directly instead of through the music player.")
+ checked: settings.useSystemVolume
+ automaticCheck: true
+ onClicked: {
+ settings.useSystemVolume = !settings.useSystemVolume;
+ }
+ }
+ TextSwitch {
text: qsTr("Transliterate messages")
description: qsTr("Messages are transliterated to ASCII before sending to Pebble")
checked: settings.transliterateMessage
diff --git a/app/translations/pebble-es.ts b/app/translations/pebble-es.ts
index 6bdb778..fa2c566 100644
--- a/app/translations/pebble-es.ts
+++ b/app/translations/pebble-es.ts
@@ -24,27 +24,32 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="77"/>
+ <location filename="../qml/pages/AboutPage.qml" line="87"/>
+ <source>Thank you for your support!!!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/AboutPage.qml" line="90"/>
<source>PayPal Donate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="87"/>
+ <location filename="../qml/pages/AboutPage.qml" line="100"/>
<source>Bugs?</source>
<translation>¿Errores?</translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="94"/>
+ <location filename="../qml/pages/AboutPage.qml" line="107"/>
<source>Open Bug Tracker</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="103"/>
+ <location filename="../qml/pages/AboutPage.qml" line="116"/>
<source>Forum Thread</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="112"/>
+ <location filename="../qml/pages/AboutPage.qml" line="125"/>
<source>Send issue e-mail to developer</source>
<translation type="unfinished"></translation>
</message>
@@ -106,27 +111,27 @@
<context>
<name>Disclaimer</name>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="21"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="28"/>
<source>Feature unavailable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="31"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="38"/>
<source>This feature is available for supporters only.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="44"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="51"/>
<source>Supporter?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="51"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="58"/>
<source>Send me my code!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="61"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="68"/>
<source>Activation code</source>
<translation type="unfinished"></translation>
</message>
@@ -135,7 +140,7 @@
<translation type="obsolete">Versión</translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="34"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="41"/>
<source>PayPal Donate</source>
<translation type="unfinished"></translation>
</message>
@@ -145,6 +150,19 @@
</message>
</context>
<context>
+ <name>FirmwareUpgrade</name>
+ <message>
+ <location filename="../qml/pages/FirmwareUpgrade.qml" line="30"/>
+ <source>Firmware upgrade</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/FirmwareUpgrade.qml" line="66"/>
+ <source>Begin upgrade</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstallAppDialog</name>
<message>
<source>Install app</source>
@@ -174,154 +192,164 @@
<context>
<name>ManagerPage</name>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="34"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="35"/>
<source>Pebble Appstore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="38"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="39"/>
<source>About</source>
<translation>Acerca de</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="49"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="50"/>
<source>Pebble Manager</source>
<translation></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="56"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="57"/>
<source>Waiting for watch...
If it can&apos;t be found please check it&apos;s available and paired in Bluetooth settings.</source>
<translation>Buscando el reloj
Si esto tarda mucho, comprueba que el reloj esté emparejado correctamente.</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="77"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="78"/>
<source>Service</source>
<translation>Servicio</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="84"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="85"/>
<source>Enabled</source>
<translation>Habilitado</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="85"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="86"/>
<source>Automatic startup</source>
<translation>Inicio automático</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="85"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="86"/>
<source>Manual startup</source>
<translation>Inicio manual</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="91"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="92"/>
<source>Active</source>
<translation>Activo</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="92"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="93"/>
<source>Running</source>
<translation>Ejecutándose</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="92"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="93"/>
<source>Dead</source>
<translation>Detenido</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="98"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="99"/>
<source>Connection</source>
<translation>Conexión</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="99"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="100"/>
<source>Connected</source>
<translation>Conectado</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="99"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="100"/>
<source>Disconnected</source>
<translation>Desconectado</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="112"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="113"/>
<source>Settings</source>
<translation>Configuración</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="119"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="120"/>
<source>Forward phone calls</source>
<translation>Transferir llamadas</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="127"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="128"/>
<source>Silent when connected</source>
<translation>Modo silencio automático</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="128"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="129"/>
<source>Sets phone profile to &quot;silent&quot; when Pebble is connected</source>
<translation>Activa el modo silencio cuando se conecte un Pebble</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="136"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="137"/>
+ <source>Control main volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/ManagerPage.qml" line="138"/>
+ <source>Pebble music volume buttons change the main phone volume directly instead of through the music player.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/ManagerPage.qml" line="146"/>
<source>Transliterate messages</source>
<translation>Transliterar mensajes</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="137"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="147"/>
<source>Messages are transliterated to ASCII before sending to Pebble</source>
<translation>Codifica los mensajes entrates a ASCII antes de enviarlos a Pebble</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="146"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="156"/>
<source>Notifications</source>
<translation>Notificaciones</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="154"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="164"/>
<source>Messaging</source>
<translation>Mensajería</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="155"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="165"/>
<source>SMS and IM</source>
<translation>SMS y chat</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="164"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="174"/>
<source>Missed call</source>
<translation>Llamadas perdidas</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="173"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="183"/>
<source>Emails</source>
<translation>Correos electrónicos</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="182"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="192"/>
<source>Mitakuuluu</source>
<translation></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="191"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="201"/>
<source>Twitter</source>
<translation>Twitter</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="201"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="211"/>
<source>Facebook</source>
<translation>Facebook</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="210"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="220"/>
<source>Other notifications</source>
<translation>Resto de notificaciones</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="219"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="229"/>
<source>All notifications</source>
<translation>Todas las notificaciones</translation>
</message>
diff --git a/app/translations/pebble-pl.ts b/app/translations/pebble-pl.ts
index ebe4f1a..407c5e9 100644
--- a/app/translations/pebble-pl.ts
+++ b/app/translations/pebble-pl.ts
@@ -24,27 +24,32 @@
<translation>Dotacje pomagają uzasadnić czas poświęcony na rozwój aplikacji.</translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="77"/>
+ <location filename="../qml/pages/AboutPage.qml" line="87"/>
+ <source>Thank you for your support!!!</source>
+ <translation>Dziękuję za twoje wsparcie!!!</translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/AboutPage.qml" line="90"/>
<source>PayPal Donate</source>
<translation>Dotacja PayPal</translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="87"/>
+ <location filename="../qml/pages/AboutPage.qml" line="100"/>
<source>Bugs?</source>
<translation>Błędy?</translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="94"/>
+ <location filename="../qml/pages/AboutPage.qml" line="107"/>
<source>Open Bug Tracker</source>
<translation>Otwórz Bug Tracker</translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="103"/>
+ <location filename="../qml/pages/AboutPage.qml" line="116"/>
<source>Forum Thread</source>
<translation>Wątek na forum</translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="112"/>
+ <location filename="../qml/pages/AboutPage.qml" line="125"/>
<source>Send issue e-mail to developer</source>
<translation>Wyślij zgłoszenie e-mail do developera</translation>
</message>
@@ -106,29 +111,29 @@
<context>
<name>Disclaimer</name>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="21"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="28"/>
<source>Feature unavailable</source>
- <translation type="unfinished"></translation>
+ <translation>Funkcja niedostępna</translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="31"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="38"/>
<source>This feature is available for supporters only.</source>
- <translation type="unfinished"></translation>
+ <translation>Ta funkcja jest dostępna wyłącznie dla wspierających użytkowników.</translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="44"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="51"/>
<source>Supporter?</source>
- <translation type="unfinished"></translation>
+ <translation>Wspierasz?</translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="51"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="58"/>
<source>Send me my code!</source>
- <translation type="unfinished"></translation>
+ <translation>Wyślij mi mój kod!</translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="61"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="68"/>
<source>Activation code</source>
- <translation type="unfinished"></translation>
+ <translation>Kod aktywacyjny</translation>
</message>
<message>
<source>Version</source>
@@ -147,9 +152,9 @@
<translation type="obsolete">Dotacje pomagają uzasadnić czas poświęcony na rozwój aplikacji.</translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="34"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="41"/>
<source>PayPal Donate</source>
- <translation type="unfinished">Dotacja PayPal</translation>
+ <translation>Dotacja PayPal</translation>
</message>
<message>
<source>Bugs?</source>
@@ -169,6 +174,19 @@
</message>
</context>
<context>
+ <name>FirmwareUpgrade</name>
+ <message>
+ <location filename="../qml/pages/FirmwareUpgrade.qml" line="30"/>
+ <source>Firmware upgrade</source>
+ <translation>Aktualizacja firmware</translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/FirmwareUpgrade.qml" line="66"/>
+ <source>Begin upgrade</source>
+ <translation>Rozpocznij aktualizację</translation>
+ </message>
+</context>
+<context>
<name>InstallAppDialog</name>
<message>
<location filename="../qml/pages/InstallAppDialog.qml" line="17"/>
@@ -194,154 +212,164 @@
<context>
<name>ManagerPage</name>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="34"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="35"/>
<source>Pebble Appstore</source>
<translation>Pebble Appstore</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="38"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="39"/>
<source>About</source>
<translation>Informacje</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="49"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="50"/>
<source>Pebble Manager</source>
<translation>Pebble Manager</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="56"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="57"/>
<source>Waiting for watch...
If it can&apos;t be found please check it&apos;s available and paired in Bluetooth settings.</source>
<translation>Oczekiwanie na zegarek...
Jeśli nie zostaje znaleziony sprawdź czy jest w zasięgu i czy jest sparowany w ustawieniach Bluetooth.</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="77"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="78"/>
<source>Service</source>
<translation>Usługa</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="84"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="85"/>
<source>Enabled</source>
<translation>Włączona</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="85"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="86"/>
<source>Automatic startup</source>
<translation>Start automatyczny</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="85"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="86"/>
<source>Manual startup</source>
<translation>Start ręczny</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="91"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="92"/>
<source>Active</source>
<translation>Aktywna</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="92"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="93"/>
<source>Running</source>
<translation>Pracuje</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="92"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="93"/>
<source>Dead</source>
<translation>Martwa</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="98"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="99"/>
<source>Connection</source>
<translation>Połączenie</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="99"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="100"/>
<source>Connected</source>
<translation>Połączony</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="99"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="100"/>
<source>Disconnected</source>
<translation>Rozłączony</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="112"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="113"/>
<source>Settings</source>
<translation>Ustawienia</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="119"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="120"/>
<source>Forward phone calls</source>
<translation>Przekazuj telefony</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="127"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="128"/>
<source>Silent when connected</source>
<translation>Cichy gdy połączony</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="128"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="129"/>
<source>Sets phone profile to &quot;silent&quot; when Pebble is connected</source>
<translation>Ustawia &quot;cichy&quot; profil telefonu gdy Pebble jest połączony</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="136"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="137"/>
+ <source>Control main volume</source>
+ <translation>Steruj głośnością główną</translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/ManagerPage.qml" line="138"/>
+ <source>Pebble music volume buttons change the main phone volume directly instead of through the music player.</source>
+ <translation>Guziki zmiany głośności na Pebble będą zmieniać głośność bezpośrednio, a nie za pomocą odtwarzacza muzyki.</translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/ManagerPage.qml" line="146"/>
<source>Transliterate messages</source>
<translation>Transliteracja wiadomości</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="137"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="147"/>
<source>Messages are transliterated to ASCII before sending to Pebble</source>
<translation>Wiadomości są transliterowane do ASCII przed wysłaniem do Pebble</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="146"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="156"/>
<source>Notifications</source>
<translation>Powiadomienia</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="154"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="164"/>
<source>Messaging</source>
<translation>Wiadomości</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="155"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="165"/>
<source>SMS and IM</source>
<translation>SMS i IM</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="164"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="174"/>
<source>Missed call</source>
<translation>Ominięte telefony</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="173"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="183"/>
<source>Emails</source>
<translation>Emaile</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="182"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="192"/>
<source>Mitakuuluu</source>
<translation>Mitakuuluu</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="191"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="201"/>
<source>Twitter</source>
<translation>Twitter</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="201"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="211"/>
<source>Facebook</source>
<translation>Facebook</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="210"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="220"/>
<source>Other notifications</source>
<translation>Pozostałe powiadomienia</translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="219"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="229"/>
<source>All notifications</source>
<translation>Wszystkie powiadomienia</translation>
</message>
@@ -376,22 +404,22 @@ Jeśli nie zostaje znaleziony sprawdź czy jest w zasięgu i czy jest sparowany
<message>
<location filename="../qml/pages/WatchInfo.qml" line="77"/>
<source>Running</source>
- <translation type="unfinished">Pracuje</translation>
+ <translation>Uruchomiony</translation>
</message>
<message>
<location filename="../qml/pages/WatchInfo.qml" line="85"/>
<source>Latest</source>
- <translation type="unfinished"></translation>
+ <translation>Najnowszy</translation>
</message>
<message>
<location filename="../qml/pages/WatchInfo.qml" line="88"/>
<source>unknown</source>
- <translation type="unfinished"></translation>
+ <translation>nie wiadomo</translation>
</message>
<message>
<location filename="../qml/pages/WatchInfo.qml" line="93"/>
<source>Upgrade Firmware</source>
- <translation type="unfinished"></translation>
+ <translation>Aktualizuj Firmware</translation>
</message>
</context>
<context>
diff --git a/app/translations/pebble.ts b/app/translations/pebble.ts
index 24f2352..f1679e1 100644
--- a/app/translations/pebble.ts
+++ b/app/translations/pebble.ts
@@ -24,27 +24,32 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="77"/>
+ <location filename="../qml/pages/AboutPage.qml" line="87"/>
+ <source>Thank you for your support!!!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/AboutPage.qml" line="90"/>
<source>PayPal Donate</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="87"/>
+ <location filename="../qml/pages/AboutPage.qml" line="100"/>
<source>Bugs?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="94"/>
+ <location filename="../qml/pages/AboutPage.qml" line="107"/>
<source>Open Bug Tracker</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="103"/>
+ <location filename="../qml/pages/AboutPage.qml" line="116"/>
<source>Forum Thread</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/AboutPage.qml" line="112"/>
+ <location filename="../qml/pages/AboutPage.qml" line="125"/>
<source>Send issue e-mail to developer</source>
<translation type="unfinished"></translation>
</message>
@@ -106,37 +111,50 @@
<context>
<name>Disclaimer</name>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="21"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="28"/>
<source>Feature unavailable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="31"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="38"/>
<source>This feature is available for supporters only.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="44"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="51"/>
<source>Supporter?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="51"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="58"/>
<source>Send me my code!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="61"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="68"/>
<source>Activation code</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/Disclaimer.qml" line="34"/>
+ <location filename="../qml/pages/Disclaimer.qml" line="41"/>
<source>PayPal Donate</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>FirmwareUpgrade</name>
+ <message>
+ <location filename="../qml/pages/FirmwareUpgrade.qml" line="30"/>
+ <source>Firmware upgrade</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/FirmwareUpgrade.qml" line="66"/>
+ <source>Begin upgrade</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>InstallAppDialog</name>
<message>
<location filename="../qml/pages/InstallAppDialog.qml" line="17"/>
@@ -162,153 +180,163 @@
<context>
<name>ManagerPage</name>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="34"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="35"/>
<source>Pebble Appstore</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="38"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="39"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="49"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="50"/>
<source>Pebble Manager</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="56"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="57"/>
<source>Waiting for watch...
If it can&apos;t be found please check it&apos;s available and paired in Bluetooth settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="77"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="78"/>
<source>Service</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="84"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="85"/>
<source>Enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="85"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="86"/>
<source>Automatic startup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="85"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="86"/>
<source>Manual startup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="91"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="92"/>
<source>Active</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="92"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="93"/>
<source>Running</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="92"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="93"/>
<source>Dead</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="98"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="99"/>
<source>Connection</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="99"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="100"/>
<source>Connected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="99"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="100"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="112"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="113"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="119"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="120"/>
<source>Forward phone calls</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="127"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="128"/>
<source>Silent when connected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="128"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="129"/>
<source>Sets phone profile to &quot;silent&quot; when Pebble is connected</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="136"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="137"/>
+ <source>Control main volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/ManagerPage.qml" line="138"/>
+ <source>Pebble music volume buttons change the main phone volume directly instead of through the music player.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../qml/pages/ManagerPage.qml" line="146"/>
<source>Transliterate messages</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="137"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="147"/>
<source>Messages are transliterated to ASCII before sending to Pebble</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="146"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="156"/>
<source>Notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="154"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="164"/>
<source>Messaging</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="155"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="165"/>
<source>SMS and IM</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="164"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="174"/>
<source>Missed call</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="173"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="183"/>
<source>Emails</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="182"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="192"/>
<source>Mitakuuluu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="191"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="201"/>
<source>Twitter</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="201"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="211"/>
<source>Facebook</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="210"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="220"/>
<source>Other notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../qml/pages/ManagerPage.qml" line="219"/>
+ <location filename="../qml/pages/ManagerPage.qml" line="229"/>
<source>All notifications</source>
<translation type="unfinished"></translation>
</message>
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index 02a4021..567316e 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -16,7 +16,7 @@ Manager::Manager(Settings *settings, QObject *parent) :
bank(new BankManager(watch, upload, apps, this)),
voice(new VoiceCallManager(settings, this)),
notifications(new NotificationManager(settings, this)),
- music(new MusicManager(watch, this)),
+ music(new MusicManager(watch, settings, this)),
datalog(new DataLogManager(watch, this)),
appmsg(new AppMsgManager(apps, watch, this)),
js(new JSKitManager(watch, apps, appmsg, settings, this)),
diff --git a/daemon/musicmanager.cpp b/daemon/musicmanager.cpp
index 385abbf..11ff6fd 100644
--- a/daemon/musicmanager.cpp
+++ b/daemon/musicmanager.cpp
@@ -1,10 +1,11 @@
#include <QDBusConnection>
#include <QDBusConnectionInterface>
#include "musicmanager.h"
+#include "settings.h"
-MusicManager::MusicManager(WatchConnector *watch, QObject *parent)
+MusicManager::MusicManager(WatchConnector *watch, Settings *settings, QObject *parent)
: QObject(parent), l(metaObject()->className()),
- watch(watch), _watcher(new QDBusServiceWatcher(this))
+ watch(watch), _watcher(new QDBusServiceWatcher(this)), _pulseBus(NULL), settings(settings),_maxVolume(0)
{
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusConnectionInterface *bus_iface = bus.interface();
@@ -33,6 +34,33 @@ MusicManager::MusicManager(WatchConnector *watch, QObject *parent)
bus.connect("", "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "PropertiesChanged",
this, SLOT(handleMprisPropertiesChanged(QString,QMap<QString,QVariant>,QStringList)));
+ // Locate and connect to the PulseAudio DBus to control system volume
+ // Look up PulseAudio P2P Bus address
+ QDBusMessage call = QDBusMessage::createMethodCall("org.PulseAudio1", "/org/pulseaudio/server_lookup1", "org.freedesktop.DBus.Properties", "Get" );
+ call << "org.PulseAudio.ServerLookup1" << "Address";
+ QDBusReply<QDBusVariant> lookupReply = bus.call(call);
+ if (lookupReply.isValid()) {
+ //
+ qCDebug(l) << "PulseAudio Bus address: " << lookupReply.value().variant().toString();
+ _pulseBus = new QDBusConnection(QDBusConnection::connectToPeer(lookupReply.value().variant().toString(), "org.PulseAudio1"));
+ }
+ else {
+ qCDebug(l) << "Cannot find PulseAudio Bus address, cannot control system volume.";
+ }
+
+ // Query max volume
+ call = QDBusMessage::createMethodCall("com.Meego.MainVolume2", "/com/meego/mainvolume2",
+ "org.freedesktop.DBus.Properties", "Get");
+ call << "com.Meego.MainVolume2" << "StepCount";
+ QDBusReply<QDBusVariant> volumeMaxReply = _pulseBus->call(call);
+ if (volumeMaxReply.isValid()) {
+ _maxVolume = volumeMaxReply.value().variant().toUInt();
+ qCDebug(l) << "Max volume: " << _maxVolume;
+ }
+ else {
+ qCWarning(l) << "Could not read volume max, cannot adjust volume: " << volumeMaxReply.error().message();
+ }
+
// Now set up the Pebble endpoint handler for music control commands
watch->setEndpointHandler(WatchConnector::watchMUSIC_CONTROL, [this](const QByteArray& data) {
handleMusicControl(WatchConnector::MusicControl(data.at(0)));
@@ -44,6 +72,15 @@ MusicManager::MusicManager(WatchConnector *watch, QObject *parent)
this, &MusicManager::handleWatchConnected);
}
+MusicManager::~MusicManager()
+{
+ if (_pulseBus != NULL) {
+ qCDebug(l) << "Disconnecting from PulseAudio P2P DBus";
+ QDBusConnection::disconnectFromBus("org.PulseAudio1");
+ delete(_pulseBus);
+ }
+}
+
void MusicManager::switchToService(const QString &service)
{
if (_curService != service) {
@@ -111,66 +148,111 @@ void MusicManager::callMprisMethod(const QString &method)
void MusicManager::handleMusicControl(WatchConnector::MusicControl operation)
{
qCDebug(l) << "operation from watch:" << operation;
-
- if (_curService.isEmpty()) {
- qCDebug(l) << "can't do any music operation, no mpris interface active";
- return;
- }
-
- switch (operation) {
- case WatchConnector::musicPLAY_PAUSE:
- callMprisMethod("PlayPause");
- break;
- case WatchConnector::musicPAUSE:
- callMprisMethod("Pause");
- break;
- case WatchConnector::musicPLAY:
- callMprisMethod("Play");
- break;
- case WatchConnector::musicNEXT:
- callMprisMethod("Next");
- break;
- case WatchConnector::musicPREVIOUS:
- callMprisMethod("Previous");
- break;
-
- case WatchConnector::musicVOLUME_UP:
- case WatchConnector::musicVOLUME_DOWN: {
- QDBusConnection bus = QDBusConnection::sessionBus();
- QDBusMessage call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2",
- "org.freedesktop.DBus.Properties", "Get");
- call << "org.mpris.MediaPlayer2.Player" << "Volume";
- QDBusReply<QDBusVariant> volumeReply = bus.call(call);
+ QVariant useSystemVolumeVar = settings->property("useSystemVolume");
+ bool useSystemVolume = (useSystemVolumeVar.isValid() && useSystemVolumeVar.toBool());
+
+ // System volume controls
+ if (useSystemVolume && _pulseBus != NULL &&
+ (operation == WatchConnector::musicVOLUME_UP || operation == WatchConnector::musicVOLUME_DOWN)) {
+ // Query current volume
+ QDBusMessage call = QDBusMessage::createMethodCall("com.Meego.MainVolume2", "/com/meego/mainvolume2",
+ "org.freedesktop.DBus.Properties", "Get");
+ call << "com.Meego.MainVolume2" << "CurrentStep";
+
+ QDBusReply<QDBusVariant> volumeReply = _pulseBus->call(call);
if (volumeReply.isValid()) {
- double volume = volumeReply.value().variant().toDouble();
- if (operation == WatchConnector::musicVOLUME_UP) {
- volume += 0.1;
+ // Decide the new value for volume, taking limits into account
+ uint volume = volumeReply.value().variant().toUInt();
+ uint newVolume;
+ qCDebug(l) << "Current volume: " << volumeReply.value().variant().toUInt();
+ if (operation == WatchConnector::musicVOLUME_UP && volume < _maxVolume-1 ) {
+ newVolume = volume + 1;
+ }
+ else if (operation == WatchConnector::musicVOLUME_DOWN && volume > 0) {
+ newVolume = volume - 1;
}
else {
- volume -= 0.1;
+ qCDebug(l) << "Volume already at limit";
+ newVolume = volume;
}
- qCDebug(l) << "Setting volume" << volume;
- call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Set");
- call << "org.mpris.MediaPlayer2.Player" << "Volume" << QVariant::fromValue(QDBusVariant(volume));
+ // If we have a new volume level, change it
+ if (newVolume != volume) {
+ qCDebug(l) << "Setting volume: " << newVolume;
- QDBusError err = QDBusConnection::sessionBus().call(call);
- if (err.isValid()) {
- qCWarning(l) << err.message();
+ call = QDBusMessage::createMethodCall("com.Meego.MainVolume2", "/com/meego/mainvolume2",
+ "org.freedesktop.DBus.Properties", "Set");
+ call << "com.Meego.MainVolume2" << "CurrentStep" << QVariant::fromValue(QDBusVariant(newVolume));
+
+ QDBusError err = _pulseBus->call(call);
+ if (err.isValid()) {
+ qCWarning(l) << err.message();
+ }
}
- } else {
- qCWarning(l) << volumeReply.error().message();
}
+ }
+
+ //Don't allow any music operations if there's no MPRIS player, unless we are allowed to control the system volume and it's a volume command
+ else if (_curService.isEmpty()) {
+ qCDebug(l) << "can't do any music operation, no mpris interface active";
+ return;
+ }
+ else {
+ switch (operation) {
+ case WatchConnector::musicPLAY_PAUSE:
+ callMprisMethod("PlayPause");
+ break;
+ case WatchConnector::musicPAUSE:
+ callMprisMethod("Pause");
+ break;
+ case WatchConnector::musicPLAY:
+ callMprisMethod("Play");
+ break;
+ case WatchConnector::musicNEXT:
+ callMprisMethod("Next");
+ break;
+ case WatchConnector::musicPREVIOUS:
+ callMprisMethod("Previous");
+ break;
+
+ case WatchConnector::musicVOLUME_UP:
+ case WatchConnector::musicVOLUME_DOWN: {
+ QDBusConnection bus = QDBusConnection::sessionBus();
+ QDBusMessage call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2",
+ "org.freedesktop.DBus.Properties", "Get");
+ call << "org.mpris.MediaPlayer2.Player" << "Volume";
+ QDBusReply<QDBusVariant> volumeReply = bus.call(call);
+ if (volumeReply.isValid()) {
+ double volume = volumeReply.value().variant().toDouble();
+ if (operation == WatchConnector::musicVOLUME_UP) {
+ volume += 0.1;
+ }
+ else {
+ volume -= 0.1;
+ }
+ qCDebug(l) << "Setting volume" << volume;
+
+ call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties", "Set");
+ call << "org.mpris.MediaPlayer2.Player" << "Volume" << QVariant::fromValue(QDBusVariant(volume));
+
+ QDBusError err = QDBusConnection::sessionBus().call(call);
+ if (err.isValid()) {
+ qCWarning(l) << err.message();
+ }
+ } else {
+ qCWarning(l) << volumeReply.error().message();
+ }
+ break;
}
- break;
- case WatchConnector::musicGET_NOW_PLAYING:
- sendCurrentMprisMetadata();
- break;
+ case WatchConnector::musicGET_NOW_PLAYING:
+ sendCurrentMprisMetadata();
+ break;
- default:
- qCWarning(l) << "Operation" << operation << "not supported";
- break;
+ default:
+ qCWarning(l) << "Operation" << operation << "not supported";
+ break;
+ }
}
}
diff --git a/daemon/musicmanager.h b/daemon/musicmanager.h
index 14aa6fb..81947e9 100644
--- a/daemon/musicmanager.h
+++ b/daemon/musicmanager.h
@@ -5,6 +5,7 @@
#include <QDBusContext>
#include <QDBusServiceWatcher>
#include "watchconnector.h"
+#include "settings.h"
class MusicManager : public QObject, protected QDBusContext
{
@@ -12,7 +13,8 @@ class MusicManager : public QObject, protected QDBusContext
QLoggingCategory l;
public:
- explicit MusicManager(WatchConnector *watch, QObject *parent = 0);
+ explicit MusicManager(WatchConnector *watch, Settings *settings, QObject *parent = 0);
+ virtual ~MusicManager();
private:
void switchToService(const QString &service);
@@ -31,6 +33,9 @@ private:
QDBusServiceWatcher *_watcher;
QString _curService;
QVariantMap _curMetadata;
+ QDBusConnection *_pulseBus;
+ Settings *settings;
+ uint _maxVolume;
};
#endif // MUSICMANAGER_H
diff --git a/daemon/settings.h b/daemon/settings.h
index 90e25e2..688b211 100644
--- a/daemon/settings.h
+++ b/daemon/settings.h
@@ -9,6 +9,7 @@ class Settings : public MDConfGroup
Q_PROPERTY(bool silentWhenConnected MEMBER silentWhenConnected NOTIFY silentWhenConnectedChanged)
Q_PROPERTY(bool transliterateMessage MEMBER transliterateMessage NOTIFY transliterateMessageChanged)
+ Q_PROPERTY(bool useSystemVolume MEMBER useSystemVolume NOTIFY useSystemVolumeChanged)
Q_PROPERTY(bool incomingCallNotification MEMBER incomingCallNotification NOTIFY incomingCallNotificationChanged)
Q_PROPERTY(bool notificationsCommhistoryd MEMBER notificationsCommhistoryd NOTIFY notificationsCommhistorydChanged)
Q_PROPERTY(bool notificationsMissedCall MEMBER notificationsMissedCall NOTIFY notificationsMissedCallChanged)
@@ -22,6 +23,7 @@ class Settings : public MDConfGroup
bool silentWhenConnected;
bool transliterateMessage;
+ bool useSystemVolume;
bool incomingCallNotification;
bool notificationsCommhistoryd;
bool notificationsMissedCall;
@@ -41,6 +43,7 @@ public:
signals:
void silentWhenConnectedChanged();
void transliterateMessageChanged();
+ void useSystemVolumeChanged();
void incomingCallNotificationChanged();
void notificationsCommhistorydChanged();
void notificationsMissedCallChanged();
diff --git a/rpm/pebble.changes b/rpm/pebble.changes
index e61440c..9e6148a 100644
--- a/rpm/pebble.changes
+++ b/rpm/pebble.changes
@@ -1,3 +1,11 @@
+* Sun Apr 19 2015 Tomasz Sterna <tomek@xiaoka.com> 1.0
+- Restart pebbled.service in RPM post install
+- Checking for latest firmware version
+- Firmware Upgrade support
+- Better JSKit memory management
+- Support for direct PulseAudio volume control
+- Music volume controls alter the system volume
+
* Wed Apr 1 2015 Tomasz Sterna <tomek@xiaoka.com> 0.16
- Connect paired Pebbles only
- Watch Info page
diff --git a/rpm/pebble.spec b/rpm/pebble.spec
index ba8f9e6..4e99c28 100644
--- a/rpm/pebble.spec
+++ b/rpm/pebble.spec
@@ -13,7 +13,7 @@ Name: pebble
%{!?qtc_make:%define qtc_make make}
%{?qtc_builddir:%define _builddir %qtc_builddir}
Summary: Support for Pebble watch in SailfishOS
-Version: 0.16
+Version: 1.0
Release: 1
Group: Qt/Qt
License: GPL3
diff --git a/rpm/pebble.yaml b/rpm/pebble.yaml
index 6570c5c..60e02e6 100644
--- a/rpm/pebble.yaml
+++ b/rpm/pebble.yaml
@@ -1,6 +1,6 @@
Name: pebble
Summary: Support for Pebble watch in SailfishOS
-Version: 0.16
+Version: 1.0
Release: 1
Group: Qt/Qt
URL: http://getpebble.com/