diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2015-04-17 16:56:00 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2015-04-17 19:11:42 +0200 |
| commit | 8da20a7c3088aee2b04d45feeee8ca0753dc260e (patch) | |
| tree | 70dc3a2d091ca82f77a9a20e3ce7f1cddd825526 | |
| parent | d9f2e79eff8744bd5bd422133117693d42ee52da (diff) | |
Test MPRIS volume control to see if the setting changes when we alter
it. If it fails, use system volume instead, if enabled by config
property.
| -rw-r--r-- | app/qml/pages/ManagerPage.qml | 10 | ||||
| -rw-r--r-- | app/translations/pebble-es.ts | 70 | ||||
| -rw-r--r-- | app/translations/pebble-pl.ts | 70 | ||||
| -rw-r--r-- | app/translations/pebble.ts | 70 | ||||
| -rw-r--r-- | daemon/manager.cpp | 2 | ||||
| -rw-r--r-- | daemon/musicmanager.cpp | 109 | ||||
| -rw-r--r-- | daemon/musicmanager.h | 5 | ||||
| -rw-r--r-- | daemon/settings.h | 3 |
8 files changed, 236 insertions, 103 deletions
diff --git a/app/qml/pages/ManagerPage.qml b/app/qml/pages/ManagerPage.qml index 894797d..0c393a3 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("Alter system volume") + description: qsTr("Pebble music volume buttons change the system volume when the music player cannot") + 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..7ee4e71 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't be found please check it'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 "silent" 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>Alter system volume</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/ManagerPage.qml" line="138"/> + <source>Pebble music volume buttons change the system volume when the music player cannot</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..1999ab6 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't be found please check it'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 "silent" when Pebble is connected</source> <translation>Ustawia "cichy" 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>Alter system volume</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/ManagerPage.qml" line="138"/> + <source>Pebble music volume buttons change the system volume when the music player cannot</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..9d7ffe1 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't be found please check it'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 "silent" 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>Alter system volume</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../qml/pages/ManagerPage.qml" line="138"/> + <source>Pebble music volume buttons change the system volume when the music player cannot</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 b9b217f..f51daeb 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)), _pulseBus(NULL), _maxVolume(0) + watch(watch), _watcher(new QDBusServiceWatcher(this)), _pulseBus(NULL), settings(settings),_maxVolume(0), mprisVolumeWorks(true) { QDBusConnection bus = QDBusConnection::sessionBus(); QDBusConnectionInterface *bus_iface = bus.interface(); @@ -54,6 +55,7 @@ MusicManager::MusicManager(WatchConnector *watch, QObject *parent) 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(); @@ -68,13 +70,17 @@ MusicManager::MusicManager(WatchConnector *watch, QObject *parent) // If the watch disconnects, we will send the current metadata when it comes back. connect(watch, &WatchConnector::connectedChanged, this, &MusicManager::handleWatchConnected); + + qCDebug(l) << "Constructor done"; } MusicManager::~MusicManager() { - qCDebug(l) << "Disconnecting from PulseAudio P2P DBus"; - QDBusConnection::disconnectFromBus("org.PulseAudio1"); - delete(_pulseBus); + if (_pulseBus != NULL) { + qCDebug(l) << "Disconnecting from PulseAudio P2P DBus"; + QDBusConnection::disconnectFromBus("org.PulseAudio1"); + delete(_pulseBus); + } } void MusicManager::switchToService(const QString &service) @@ -89,6 +95,56 @@ void MusicManager::switchToService(const QString &service) _watcher->setWatchedServices(QStringList(_curService)); } } + + // Check if this service has working volume control + mprisVolumeWorks = false; + + if (_curService.isEmpty()) return; + + // Read current volume level from MPRIS + 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()) { + qCWarning(l) << volumeReply.error().message(); + return; + } + double volume = volumeReply.value().variant().toDouble(); + // Tweak it by 10% and set it + double newVolume = volume + (volume == 1.0?-0.1:0.1); + qCDebug(l) << "Volume control test: changing " << volume << " to " << newVolume; + call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2", + "org.freedesktop.DBus.Properties", "Set"); + call << "org.mpris.MediaPlayer2.Player" << "Volume" << QVariant::fromValue(QDBusVariant(newVolume)); + QDBusError err = QDBusConnection::sessionBus().call(call); + if (err.isValid()) { + qCWarning(l) << err.message(); + } + + // Read the new volume level to check if it's changed + call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2", + "org.freedesktop.DBus.Properties", "Get"); + call << "org.mpris.MediaPlayer2.Player" << "Volume"; + volumeReply = bus.call(call); + double actualNewVolume = volumeReply.value().variant().toDouble(); + qCDebug(l) << "Volume control test: new volume read as " << actualNewVolume; + if (actualNewVolume == newVolume) { // !!MPRIS vol works!! + qCDebug(l) << "Volume control test: MPRIS volume control worked. Restoring old volume level and enabling MPRIS volume control"; + mprisVolumeWorks = true; + call = QDBusMessage::createMethodCall(_curService, "/org/mpris/MediaPlayer2", + "org.freedesktop.DBus.Properties", "Set"); + call << "org.mpris.MediaPlayer2.Player" << "Volume" << QVariant::fromValue(QDBusVariant(volume)); + err = QDBusConnection::sessionBus().call(call); + if (err.isValid()) { + qCWarning(l) << err.message(); + } + return; + } + else if (actualNewVolume == volume){ + qCDebug(l) << "Volume control test: MPRIS volume control has no effect."; + } } void MusicManager::fetchMetadataFromService() @@ -146,7 +202,7 @@ void MusicManager::handleMusicControl(WatchConnector::MusicControl operation) qCDebug(l) << "operation from watch:" << operation; if (_curService.isEmpty() && - operation != WatchConnector::musicVOLUME_UP && operation != WatchConnector::musicVOLUME_DOWN) { + ((operation != WatchConnector::musicVOLUME_UP && operation != WatchConnector::musicVOLUME_DOWN) || mprisVolumeWorks)) { qCDebug(l) << "can't do any music operation, no mpris interface active"; return; } @@ -169,8 +225,37 @@ void MusicManager::handleMusicControl(WatchConnector::MusicControl operation) break; case WatchConnector::musicVOLUME_UP: - case WatchConnector::musicVOLUME_DOWN: - if (_pulseBus != NULL) { + case WatchConnector::musicVOLUME_DOWN: { + QVariant useSystemVolumeVar = settings->property("useSystemVolume"); + bool useSystemVolume = (useSystemVolumeVar.isValid() && useSystemVolumeVar.toBool()); + qCDebug(l) << "useSystemVolume: " << useSystemVolume; + if (mprisVolumeWorks || !useSystemVolume) { + 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(); + } + } else if (_pulseBus != NULL) { // Query current volume QDBusMessage call = QDBusMessage::createMethodCall("com.Meego.MainVolume2", "/com/meego/mainvolume2", "org.freedesktop.DBus.Properties", "Get"); @@ -210,9 +295,11 @@ void MusicManager::handleMusicControl(WatchConnector::MusicControl operation) qCWarning(l) << volumeReply.error().message(); } } - break; - - + else { + qCDebug(l) << "No volume control mechanism"; + } + break; + } case WatchConnector::musicGET_NOW_PLAYING: sendCurrentMprisMetadata(); break; diff --git a/daemon/musicmanager.h b/daemon/musicmanager.h index 4ad03a8..087dd2a 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,7 @@ 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: @@ -33,7 +34,9 @@ private: QString _curService; QVariantMap _curMetadata; QDBusConnection *_pulseBus; + Settings *settings; uint _maxVolume; + bool mprisVolumeWorks; }; #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(); |
