diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2015-04-19 18:17:02 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2015-04-19 18:17:02 +0200 |
| commit | 6da5f1039ed113dcf11b0347e6d2dbd5432c3d33 (patch) | |
| tree | dd48e39b01ff098c9e1059acceb0b36127f15b37 | |
| parent | 8bb7a35eedd431f707ca6fb9134c35bace8e4b24 (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.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 | 184 | ||||
| -rw-r--r-- | daemon/musicmanager.h | 7 | ||||
| -rw-r--r-- | daemon/settings.h | 3 |
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'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>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'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>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'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>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(); |
