summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2015-04-19 18:17:02 +0200
committerAndrew Branson <andrew.branson@cern.ch>2015-04-19 18:17:02 +0200
commit6da5f1039ed113dcf11b0347e6d2dbd5432c3d33 (patch)
treedd48e39b01ff098c9e1059acceb0b36127f15b37
parent8bb7a35eedd431f707ca6fb9134c35bace8e4b24 (diff)
Support option for system volume control
Add support for direct PulseAudio volume control instead of through MPRIS, which doesn't currently work. Default enabled, added setting to disable.
-rw-r--r--app/qml/pages/ManagerPage.qml10
-rw-r--r--app/translations/pebble-es.ts70
-rw-r--r--app/translations/pebble-pl.ts70
-rw-r--r--app/translations/pebble.ts70
-rw-r--r--daemon/manager.cpp2
-rw-r--r--daemon/musicmanager.cpp184
-rw-r--r--daemon/musicmanager.h7
-rw-r--r--daemon/settings.h3
8 files changed, 273 insertions, 143 deletions
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..38a8cc4 100644
--- a/app/translations/pebble-es.ts
+++ b/app/translations/pebble-es.ts
@@ -174,154 +174,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..11285ee 100644
--- a/app/translations/pebble-pl.ts
+++ b/app/translations/pebble-pl.ts
@@ -194,154 +194,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 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>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>
diff --git a/app/translations/pebble.ts b/app/translations/pebble.ts
index 24f2352..cd7ba8b 100644
--- a/app/translations/pebble.ts
+++ b/app/translations/pebble.ts
@@ -162,153 +162,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();