[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kremotecontrol] /: fixes dbus communication for applications which use node trees and require the u
From: Michael Zanetti <michael_zanetti () gmx ! net>
Date: 2012-11-04 19:23:41
Message-ID: 20121104192341.A2D0CA60C4 () git ! kde ! org
[Download RAW message or body]
Git commit 3e5f85ecc38b7a7cbe2f14cc0768dca1cfc6073e by Michael Zanetti.
Committed on 04/11/2012 at 19:28.
Pushed by mzanetti into branch 'master'.
fixes dbus communication for applications which use node trees and require the use of \
interfaces.
M +4 -0 .gitignore
M +1 -0 kcmremotecontrol/editdbusaction.cpp
M +1 -1 kcmremotecontrol/editdbusaction.ui
M +2 -0 kcmremotecontrol/editprofileaction.cpp
M +10 -3 kcmremotecontrol/model.cpp
M +2 -1 kcmremotecontrol/model.h
M +1 -0 kded/kremotecontroldaemon.cpp
M +16 -0 libkremotecontrol/dbusaction.cpp
M +4 -0 libkremotecontrol/dbusaction.h
M +50 -10 libkremotecontrol/dbusinterface.cpp
M +2 -1 libkremotecontrol/dbusinterface.h
M +4 -0 libkremotecontrol/mode.cpp
M +1 -0 libkremotecontrol/profileaction.cpp
M +11 -0 libkremotecontrol/profileactiontemplate.cpp
M +4 -0 libkremotecontrol/profileactiontemplate.h
M +5 -0 libkremotecontrol/profileserver.cpp
M +1 -0 profiles/CMakeLists.txt
M +11 -11 profiles/amarok.profile.xml
M +31 -21 profiles/dragonplayer.profile.xml
M +1 -1 profiles/klauncher.profile.xml
M +9 -21 profiles/kmix.profile.xml
M +2 -2 profiles/konqueror.profile.xml
M +8 -8 profiles/kscd.profile.xml
M +8 -8 profiles/okular.profile.xml
M +5 -5 profiles/powermanagement.profile.xml
M +2 -1 profiles/profile.xsd
M +5 -5 profiles/vlc.profile.xml
A +79 -0 profiles/vlc2.profile.xml
http://commits.kde.org/kremotecontrol/3e5f85ecc38b7a7cbe2f14cc0768dca1cfc6073e
diff --git a/.gitignore b/.gitignore
index b25c15b..0c9171e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,5 @@
*~
+*kate-swp
+build
+
+*.kdev4
diff --git a/kcmremotecontrol/editdbusaction.cpp \
b/kcmremotecontrol/editdbusaction.cpp index 3802e17..37f4568 100644
--- a/kcmremotecontrol/editdbusaction.cpp
+++ b/kcmremotecontrol/editdbusaction.cpp
@@ -122,6 +122,7 @@ DBusAction EditDBusAction::action() const {
Prototype prototype = \
m_dbusFunctionModel->getPrototype(ui.tvDBusFunctions->selectionModel()->currentIndex().row());
prototype.setArgs(m_argumentsModel->arguments());
action.setFunction(prototype);
+ action.setInterface(m_dbusFunctionModel->getInterface(ui.tvDBusFunctions->selectionModel()->currentIndex().row()));
action.setAutostart(ui.cbAutostart->isChecked());
action.setRepeat(ui.cbRepeat->isChecked());
diff --git a/kcmremotecontrol/editdbusaction.ui b/kcmremotecontrol/editdbusaction.ui
index ad2eea3..90108af 100644
--- a/kcmremotecontrol/editdbusaction.ui
+++ b/kcmremotecontrol/editdbusaction.ui
@@ -39,7 +39,7 @@
<item row="1" column="0">
<widget class="QTreeView" name="tvDBusApps">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
diff --git a/kcmremotecontrol/editprofileaction.cpp \
b/kcmremotecontrol/editprofileaction.cpp index 11566b0..5a7fe08 100644
--- a/kcmremotecontrol/editprofileaction.cpp
+++ b/kcmremotecontrol/editprofileaction.cpp
@@ -96,6 +96,7 @@ void EditProfileAction::applyChanges(){
ProfileActionTemplate actionTemplate = \
m_templateModel->actionTemplate(ui.tvDBusFunctions->selectionModel()->currentIndex());
kDebug() << "applyChanges to action:" << actionTemplate.profileId();
m_action->setApplication(actionTemplate.service());
+ m_action->setInterface(actionTemplate.interface());
m_action->setNode(actionTemplate.node());
Prototype prototype = actionTemplate.function();
prototype.setArgs(m_argumentsModel->arguments());
@@ -127,6 +128,7 @@ ProfileAction EditProfileAction::action() const {
action.setNode(actionTemplate.node());
Prototype prototype = actionTemplate.function();
prototype.setArgs(m_argumentsModel->arguments());
+ action.setInterface(actionTemplate.interface());
action.setFunction(prototype);
action.setActionTemplateId(actionTemplate.actionTemplateId());
action.setProfileId(actionTemplate.profileId());
diff --git a/kcmremotecontrol/model.cpp b/kcmremotecontrol/model.cpp
index 61118ad..bc65d86 100644
--- a/kcmremotecontrol/model.cpp
+++ b/kcmremotecontrol/model.cpp
@@ -163,18 +163,20 @@ void DBusFunctionModel::refresh(const QString &app, const \
QString &node) { return;
}
- foreach(const Prototype &prototype, DBusInterface::getInstance()->functions(app, \
node)){
- appendRow(prototype);
+ QMultiMap<QString, Prototype> functionMap = \
DBusInterface::getInstance()->functions(app, node); + for (QMultiMap<QString, \
Prototype>::const_iterator i = functionMap.constBegin(); i != functionMap.constEnd(); \
++i){ + appendRow(i.key(), i.value());
}
sort(0, Qt::AscendingOrder);
}
-void DBusFunctionModel::appendRow(Prototype prototype) {
+void DBusFunctionModel::appendRow(const QString &interface, Prototype prototype) {
QList<QStandardItem*> itemList;
QStandardItem *item = new QStandardItem(prototype.name());
item->setData(qVariantFromValue(prototype), Qt::UserRole);
+ item->setData(interface, Qt::UserRole + 1);
itemList.append(item);
QString argString;
foreach(const Argument &arg, prototype.args()){
@@ -195,6 +197,11 @@ Prototype DBusFunctionModel::getPrototype(int index) const {
return QStandardItemModel::item(index)->data(Qt::UserRole).value<Prototype>();
}
+QString DBusFunctionModel::getInterface(int index) const
+{
+ return QStandardItemModel::item(index)->data(Qt::UserRole+1).toString();
+}
+
QModelIndex DBusFunctionModel::findOrInsert(const DBusAction* action, bool insert) {
for(int i = 0; i < rowCount(); i++){
diff --git a/kcmremotecontrol/model.h b/kcmremotecontrol/model.h
index 8bc12ca..a9dc79f 100644
--- a/kcmremotecontrol/model.h
+++ b/kcmremotecontrol/model.h
@@ -75,12 +75,13 @@ class DBusFunctionModel: public QStandardItemModel
void refresh(const QString &app, const QString &node);
Prototype getPrototype( int index ) const;
+ QString getInterface( int index ) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) \
const;
QModelIndex findOrInsert(const DBusAction *action, bool insert = false);
private:
- void appendRow(Prototype item);
+ void appendRow(const QString &interface, Prototype item);
};
diff --git a/kded/kremotecontroldaemon.cpp b/kded/kremotecontroldaemon.cpp
index bfe9954..b18fb59 100644
--- a/kded/kremotecontroldaemon.cpp
+++ b/kded/kremotecontroldaemon.cpp
@@ -96,6 +96,7 @@ void KRemoteControlDaemon::slotStatusChanged(bool connected) {
SLOT(gotMessage(RemoteControlButton)));
}
}
+ kDebug() << "connection changed" << connected;
emit connectionChanged(connected);
}
diff --git a/libkremotecontrol/dbusaction.cpp b/libkremotecontrol/dbusaction.cpp
index 5e50546..bbc16fb 100644
--- a/libkremotecontrol/dbusaction.cpp
+++ b/libkremotecontrol/dbusaction.cpp
@@ -42,6 +42,16 @@ void DBusAction::setNode(const QString& node) {
m_node = node;
}
+QString DBusAction::interface() const
+{
+ return m_interface;
+}
+
+void DBusAction::setInterface(const QString& interface)
+{
+ m_interface = interface;
+}
+
Prototype DBusAction::function() const {
return m_function;
}
@@ -62,6 +72,7 @@ void DBusAction::saveToConfig(KConfigGroup& config) {
Action::saveToConfig(config);
config.writeEntry("Application", m_application);
config.writeEntry("Node", m_node);
+ config.writeEntry("Interface", m_interface);
config.writeEntry("Function", m_function.name());
int i = 0; // GroupID for arguments
foreach(const Argument &arg, m_function.args()){
@@ -77,6 +88,10 @@ void DBusAction::loadFromConfig(const KConfigGroup& config) {
Action::loadFromConfig(config);
m_application = config.readEntry("Application");
m_node = config.readEntry("Node");
+ if (!m_node.startsWith(QLatin1String("/"))) {
+ m_node.prepend(QLatin1String("/"));
+ }
+ m_interface = config.readEntry("Interface");
m_function = Prototype(config.readEntry("Function"));
QStringList argGroupList = config.groupList();
argGroupList.sort();
@@ -97,6 +112,7 @@ Action* DBusAction::clone() const {
action->setApplication(m_application);
action->setAutostart(m_autostart);
action->setDestination(m_destination);
+ action->setInterface(m_interface);
action->setFunction(m_function);
action->setNode(m_node);
action->setRepeat(m_repeat);
diff --git a/libkremotecontrol/dbusaction.h b/libkremotecontrol/dbusaction.h
index ccaf926..a6bbc3b 100644
--- a/libkremotecontrol/dbusaction.h
+++ b/libkremotecontrol/dbusaction.h
@@ -42,6 +42,9 @@ class KREMOTECONTROL_EXPORT DBusAction : public Action
QString node() const;
void setNode(const QString &node);
+ QString interface() const;
+ void setInterface(const QString &interface);
+
Prototype function() const;
void setFunction(const Prototype &function);
@@ -56,6 +59,7 @@ class KREMOTECONTROL_EXPORT DBusAction : public Action
protected:
QString m_application;
QString m_node;
+ QString m_interface;
Prototype m_function;
};
diff --git a/libkremotecontrol/dbusinterface.cpp \
b/libkremotecontrol/dbusinterface.cpp index 8e9ff50..259729c 100644
--- a/libkremotecontrol/dbusinterface.cpp
+++ b/libkremotecontrol/dbusinterface.cpp
@@ -73,7 +73,7 @@ QStringList DBusInterface::registeredPrograms() {
for (int i = 0; i < allServices.size(); ++i) {
QString tmp = allServices.at(i);
- QRegExp r1( QLatin1String( "[a-zA-Z]{1,3}\\.[a-zA-Z0-9-]+\\.[a-zA-Z0-9_-]+" \
)); + QRegExp r1( QLatin1String( \
"[a-zA-Z]{1,3}\\.[a-zA-Z0-9-]+\\.[a-zA-Z0-9_-\\.]+" )); if (!r1.exactMatch(tmp)) {
continue;
}
@@ -94,6 +94,7 @@ QStringList DBusInterface::registeredPrograms() {
}
QStringList DBusInterface::nodes(const QString &program) {
+ return getNodes(program, QLatin1String("/"));
kDebug() << "getting Nodes of" << program;
QDBusInterface dBusIface(program, QLatin1String( "/" ), QLatin1String( \
"org.freedesktop.DBus.Introspectable" )); QDBusMessage msg = \
QDBusMessage::createMethodCall(program, QLatin1String( "/" ), QLatin1String( \
"org.freedesktop.DBus.Introspectable" ), QLatin1String( "Introspect" )); @@ -130,8 \
+131,47 @@ QStringList DBusInterface::nodes(const QString &program) { return \
returnList; }
-QList<Prototype> DBusInterface::functions(const QString &program, const QString \
&object) {
- QDBusInterface dBusIface(program, QLatin1Char( '/' ) + object, QLatin1String( \
"org.freedesktop.DBus.Introspectable" )); +QStringList DBusInterface::getNodes(const \
QString& service, const QString& node) +{
+ QStringList nodes;
+ QDBusMessage msg = QDBusMessage::createMethodCall(service, node, QLatin1String( \
"org.freedesktop.DBus.Introspectable" ), QLatin1String( "Introspect" )); + \
QDBusReply<QString> response = QDBusConnection::sessionBus().call(msg, QDBus::Block, \
1); +
+ QDomDocument domDoc;
+ domDoc.setContent(response);
+ if (domDoc.toString().isEmpty()) { // No reply... perhaps a multi-instance...
+ kDebug() << "no reply from" << service;
+ QStringList instances = allRegisteredPrograms().filter(service);
+ if (!instances.isEmpty()) {
+ QDBusMessage msg = QDBusMessage::createMethodCall(instances.first(), \
node, QLatin1String( "org.freedesktop.DBus.Introspectable" ), QLatin1String( \
"Introspect" )); + QDBusReply<QString> response = \
QDBusConnection::sessionBus().call(msg, QDBus::Block, 1); +// response = \
iFace.call("Introspect"); + domDoc.setContent(response);
+ }
+ }
+
+ QDomElement child = domDoc.documentElement().firstChildElement();
+ while (!child.isNull()) {
+ if (child.tagName() == QLatin1String("node")) {
+ QString name = child.attribute(QLatin1String("name"));
+ kDebug() << "got node:" << service << node + name;
+ if (node.endsWith("/")) {
+ name = node + name;
+ } else {
+ name = node + QLatin1String("/") + name;
+ }
+ nodes << name;
+ nodes << getNodes(service, name);
+ }
+ child = child.nextSiblingElement();
+ }
+ return nodes;
+}
+
+
+QMultiMap<QString, Prototype> DBusInterface::functions(const QString &program, const \
QString &object) { + //return QList<Prototype>();
+ QDBusInterface dBusIface(program, object, QLatin1String( \
"org.freedesktop.DBus.Introspectable" ));
QDBusReply<QString> response = dBusIface.call(QLatin1String( "Introspect" ));
QDomDocument domDoc;
@@ -149,7 +189,7 @@ QList<Prototype> DBusInterface::functions(const QString &program, \
const QString QDomElement node = domDoc.documentElement();
QDomElement child = node.firstChildElement();
- QList<Prototype> funcList;
+ QMultiMap<QString, Prototype> funcList;
while (!child.isNull()) {
if (child.tagName() == QLatin1String("interface")) {
@@ -158,6 +198,7 @@ QList<Prototype> DBusInterface::functions(const QString &program, \
const QString child = child.nextSiblingElement();
continue;
}
+ QString interface = child.attribute(QLatin1String("name"));
QDomElement subChild = child.firstChildElement();
while (!subChild.isNull()) {
if (subChild.tagName() == QLatin1String("method")) {
@@ -201,8 +242,8 @@ QList<Prototype> DBusInterface::functions(const QString &program, \
const QString argDom = argDom.nextSiblingElement();
}
Prototype function(functionName, argList);
- if(!funcList.contains(function)){
- funcList.append(function);
+ if(!funcList.contains(interface, function)){
+ funcList.insertMulti(interface, function);
}
}
subChild = subChild.nextSiblingElement();
@@ -384,13 +425,13 @@ void DBusInterface::executeAction(const DBusAction* action) {
const QString &program = *i;
kDebug() << "Searching DBus for program:" << program;
if (dBusIface->isServiceRegistered(program)) {
- kDebug() << "Sending data (" << program << ", " << QLatin1Char( '/' ) + \
action->node() << ", " << action->function().name(); + kDebug() << \
"Sending data (" << program << ", " << action->node() << ", " << action->interface() \
<< ". " << action->function().name();
if(action->function().name().startsWith("script:")) {
QString scriptText = action->function().name().remove(0, 7);
QScriptEngine scriptEngine;
- QDBusIfaceWrapper *appIface = new QDBusIfaceWrapper(program, \
QLatin1Char( '/' ) + action->node()); + QDBusIfaceWrapper *appIface = \
new QDBusIfaceWrapper(program, action->node());
QScriptValue objectValue = scriptEngine.newQObject(appIface);
scriptEngine.globalObject().setProperty("dbus", objectValue);
int argCount = 1;
@@ -426,8 +467,7 @@ void DBusInterface::executeAction(const DBusAction* action) {
scriptEngine.evaluate(scriptText);
} else {
- QDBusMessage m = QDBusMessage::createMethodCall(program, \
QLatin1Char( '/' )
- + action->node(), QLatin1String( "" ), \
action->function().name()); + QDBusMessage m = \
QDBusMessage::createMethodCall(program, action->node(), action->interface(), \
action->function().name());
foreach(const Argument &arg, action->function().args()){
kDebug() << "Got argument:" << arg.value().type() << "value" << \
arg.value();
diff --git a/libkremotecontrol/dbusinterface.h b/libkremotecontrol/dbusinterface.h
index 6c0b585..1b7b1b6 100644
--- a/libkremotecontrol/dbusinterface.h
+++ b/libkremotecontrol/dbusinterface.h
@@ -42,6 +42,7 @@ class KREMOTECONTROL_EXPORT DBusInterface: public QObject
QStringList allRegisteredPrograms();
bool searchForProgram(const DBusAction *action, QStringList &programs);
+ QStringList getNodes(const QString &interface, const QString &node);
public:
static DBusInterface *getInstance();
@@ -52,7 +53,7 @@ class KREMOTECONTROL_EXPORT DBusInterface: public QObject
QStringList registeredPrograms();
QStringList nodes(const QString &program);
- QList<Prototype> functions(const QString &program, const QString &object);
+ QMultiMap<QString, Prototype> functions(const QString &program, const \
QString &object);
QStringList configuredRemotes();
void ignoreButtonEvents(const QString &remoteName);
diff --git a/libkremotecontrol/mode.cpp b/libkremotecontrol/mode.cpp
index 3f9d386..df7198e 100644
--- a/libkremotecontrol/mode.cpp
+++ b/libkremotecontrol/mode.cpp
@@ -20,6 +20,8 @@
#include "mode.h"
#include "action.h"
+#include <KDebug>
+
Mode::Mode(const QString &name, const QString &iconName): m_name(name), \
m_iconName(iconName) { }
@@ -91,7 +93,9 @@ QVector<Action* > Mode::actions() const {
QVector<Action*> Mode::actionsForButton(const QString &button) const {
QVector<Action*> retList;
foreach(Action *action, m_actionList){
+ kDebug() << "checking action:" << action->name() << action->button();
if(action->button() == button){
+ kDebug() << "Found action for button:" << action->name();
retList.append(action);
}
}
diff --git a/libkremotecontrol/profileaction.cpp \
b/libkremotecontrol/profileaction.cpp index d40545e..1332a99 100644
--- a/libkremotecontrol/profileaction.cpp
+++ b/libkremotecontrol/profileaction.cpp
@@ -89,6 +89,7 @@ Action* ProfileAction::clone() const {
action->setAutostart(m_autostart);
action->setDestination(m_destination);
action->setFunction(m_function);
+ action->setInterface(m_interface);
action->setNode(m_node);
action->setRepeat(m_repeat);
action->setButton(m_button);
diff --git a/libkremotecontrol/profileactiontemplate.cpp \
b/libkremotecontrol/profileactiontemplate.cpp index ac07f32..b9e6378 100644
--- a/libkremotecontrol/profileactiontemplate.cpp
+++ b/libkremotecontrol/profileactiontemplate.cpp
@@ -19,6 +19,8 @@
#include "profileactiontemplate.h"
+#include <KDebug>
+
ProfileActionTemplate::ProfileActionTemplate() {
d = new ProfileActionTemplatePrivate;
@@ -30,6 +32,7 @@ ProfileActionTemplate::ProfileActionTemplate( const QString \
&profileId, const QString &actionName,
const QString &serviceName,
const QString &node,
+ const QString &interface,
const Prototype &function,
const ProfileAction::ActionDestination \
destination, bool autostart,
@@ -43,6 +46,7 @@ ProfileActionTemplate::ProfileActionTemplate( const QString \
&profileId, d->m_actionName = actionName;
d->m_node = node;
d->m_serviceName = serviceName;
+ d->m_interface = interface;
d->m_function = function;
d->m_description = description;
d->m_destination= destination;
@@ -75,6 +79,11 @@ QString ProfileActionTemplate::description() const {
return d->m_description;
}
+QString ProfileActionTemplate::interface() const
+{
+ return d->m_interface;
+}
+
Prototype ProfileActionTemplate::function() const {
return d->m_function;
}
@@ -99,9 +108,11 @@ ProfileAction *ProfileActionTemplate::createAction(const \
RemoteControlButton& bu
ProfileAction *action = new ProfileAction(button.name(), d->m_profileId, \
d->m_actionTemplateId); action->setApplication(d->m_serviceName);
action->setNode(d->m_node);
+ action->setInterface(d->m_interface);
action->setFunction(d->m_function);
action->setDestination(d->m_destination);
action->setAutostart(d->m_autostart);
action->setRepeat(d->m_repeat);
+ kDebug() << "creating action from template:" << d->m_serviceName << d->m_node << \
d->m_interface << d->m_function.name(); return action;
}
diff --git a/libkremotecontrol/profileactiontemplate.h \
b/libkremotecontrol/profileactiontemplate.h index ac95a3f..9cc1ec3 100644
--- a/libkremotecontrol/profileactiontemplate.h
+++ b/libkremotecontrol/profileactiontemplate.h
@@ -36,6 +36,7 @@ class KREMOTECONTROL_EXPORT ProfileActionTemplate
const QString &actionName,
const QString &serviceName,
const QString &node,
+ const QString &interface,
const Prototype &function,
const ProfileAction::ActionDestination,
bool autostart,
@@ -50,6 +51,7 @@ class KREMOTECONTROL_EXPORT ProfileActionTemplate
QString actionName() const;
QString service() const;
QString node() const;
+ QString interface() const;
Prototype function() const;
QString description() const;
ProfileAction::ActionDestination destination() const;
@@ -75,6 +77,7 @@ class ProfileActionTemplatePrivate: public QSharedData
m_actionName(other.m_actionName),
m_serviceName(other.m_serviceName),
m_node(other.m_node),
+ m_interface(other.m_interface),
m_function(other.m_function),
m_description(other.m_description),
m_destination(other.m_destination),
@@ -87,6 +90,7 @@ class ProfileActionTemplatePrivate: public QSharedData
QString m_actionName; // e.g. Play
QString m_serviceName; // e.g. org.kde.amarok
QString m_node; // e.g. Player
+ QString m_interface; // e.g. org.mpris.Player
Prototype m_function; // play
QString m_description; // e.g. Start playing
ProfileAction::ActionDestination m_destination;
diff --git a/libkremotecontrol/profileserver.cpp \
b/libkremotecontrol/profileserver.cpp index 0427063..d51fd71 100644
--- a/libkremotecontrol/profileserver.cpp
+++ b/libkremotecontrol/profileserver.cpp
@@ -259,9 +259,11 @@ ProfileActionTemplate \
ProfileServer::ProfileXmlContentHandler::parseAction(QDomN QDomElement execNode;
QString serviceName;
QString nodeName;
+ QString interfaceName;
QString functionName;
if(!actionNode.namedItem(QLatin1String( "prototype" )).isNull()){
execNode = actionNode.namedItem(QLatin1String( "prototype" )).toElement();
+ interfaceName = execNode.namedItem(QLatin1String( "interface" \
)).toElement().text().trimmed();
functionName = execNode.namedItem(QLatin1String( "function" \
)).toElement().text().trimmed(); } else if(!actionNode.namedItem(QLatin1String( \
"script" )).isNull()){
execNode = actionNode.namedItem(QLatin1String( "script" )).toElement();
@@ -300,12 +302,15 @@ ProfileActionTemplate \
ProfileServer::ProfileXmlContentHandler::parseAction(QDomN }
Prototype function(functionName, arguments);
+
+ kDebug() << "creating action template" << actionName << serviceName << nodeName \
<< interfaceName << functionName;
return ProfileActionTemplate(profileId,
actionId,
i18n(actionName.toUtf8().data()),
serviceName,
nodeName,
+ interfaceName,
function,
actionType,
autostart,
diff --git a/profiles/CMakeLists.txt b/profiles/CMakeLists.txt
index d514d84..a2b3cbf 100644
--- a/profiles/CMakeLists.txt
+++ b/profiles/CMakeLists.txt
@@ -5,6 +5,7 @@ install( FILES
amarok.profile.xml
dragonplayer.profile.xml
vlc.profile.xml
+ vlc2.profile.xml
kmix.profile.xml
okular.profile.xml
klauncher.profile.xml
diff --git a/profiles/amarok.profile.xml b/profiles/amarok.profile.xml
index 4567019..eed252e 100644
--- a/profiles/amarok.profile.xml
+++ b/profiles/amarok.profile.xml
@@ -12,7 +12,7 @@
<action id="play" name="Play" description="Start playing">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Play</function>
</prototype>
<button>Play</button>
@@ -22,7 +22,7 @@
<action id="stop" name="Stop" description="Stop playing">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Stop</function>
</prototype>
<button>Stop</button>
@@ -33,7 +33,7 @@
<action id="pause" name="Pause" description="Pause playing">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Pause</function>
</prototype>
<button>Pause</button>
@@ -43,7 +43,7 @@
<action id="playpause" name="Play Pause" description="Toggle Play/Pause">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>PlayPause</function>
</prototype>
<button>PlayPause</button>
@@ -53,7 +53,7 @@
<action id="skipForward" name="Skip Forward" description="Advance to next \
track"> <prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Next</function>
</prototype>
<button>SkipForward</button>
@@ -63,7 +63,7 @@
<action id="skipBackWard" name="Skip Backward" description="Go to previous \
track"> <prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Prev</function>
</prototype>
<button>SkipBackward</button>
@@ -73,7 +73,7 @@
<action id="fastForward" name="Fast Forward" description="Seek forward">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Forward</function>
<arguments>
<argument type="int" comment="Amount to fast forward in ms">
@@ -88,7 +88,7 @@
<action id="rewind" name="Backward" description="Seek backward">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Backward</function>
<arguments>
<argument type="int" comment="Amount to rewind in ms">
@@ -103,7 +103,7 @@
<action id="fullscreen" name="Fullscreen" description="Toggle fullscreen mode">
<prototype>
<serviceName>org.mpris.amarok</serviceName>
- <node>amarok/MainWindow</node>
+ <node>/amarok/MainWindow</node>
<function>slotFullScreen</function>
</prototype>
<repeat>false</repeat>
@@ -113,7 +113,7 @@
<action id="volumeUp" name="Volume Up" description="Increases Volume">
<script>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<scripttext>dbus.call('VolumeSet', dbus.call('VolumeGet') + \
arg1);</scripttext> <arguments>
<argument type="int" comment="Amount to increase volume in percent">
@@ -128,7 +128,7 @@
<action id="volumeDown" name="Volume Down" description="Decreases Volume">
<script>
<serviceName>org.mpris.amarok</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<scripttext>dbus.call('VolumeSet', dbus.call('VolumeGet') - \
arg1);</scripttext> <arguments>
<argument type="int" comment="Amount to decrease volume in percent">
diff --git a/profiles/dragonplayer.profile.xml b/profiles/dragonplayer.profile.xml
index 749b30a..07f75d9 100644
--- a/profiles/dragonplayer.profile.xml
+++ b/profiles/dragonplayer.profile.xml
@@ -6,60 +6,70 @@
<name>Dragon Player</name>
<version>0.1</version>
<author>Gioacchino Mazzurco [gmazzurco89@gmail.com]</author>
-
+
<!-- Playback actions -->
<action id="play" name="Play" description="Start playing">
<prototype>
- <serviceName>org.mpris.dragonplayer</serviceName>
- <node>Player</node>
+ <serviceName>org.mpris.MediaPlayer2.dragonplayer</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
<function>Play</function>
</prototype>
<button>Play</button>
<ifmulti>sendtotop</ifmulti>
</action>
-
+
<action id="stop" name="Stop" description="Stop playing">
<prototype>
- <serviceName>org.mpris.dragonplayer</serviceName>
- <node>Player</node>
+ <serviceName>org.mpris.MediaPlayer2.dragonplayer</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
<function>Stop</function>
</prototype>
<button>Stop</button>
<ifmulti>sendtotop</ifmulti>
</action>
-
- <action id="pause" name="Play/Pause" description="Toggle Play/Pause">
+
+ <action id="pause" name="Pause" description="Pause playing">
<prototype>
- <serviceName>org.mpris.dragonplayer</serviceName>
- <node>Player</node>
+ <serviceName>org.mpris.MediaPlayer2.dragonplayer</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
<function>Pause</function>
</prototype>
<button>PlayPause</button>
<ifmulti>sendtotop</ifmulti>
</action>
-
- <!-- The actions currently have no effekt in dragon player 2.0
-
- <action id="skipForward" name="Skip Forward" description="Advance to next \
track"> +
+ <action id="playPause" name="Play/Pause" description="Toggle Play/Pause">
<prototype>
- <serviceName>org.mpris.dragonplayer</serviceName>
- <node>Player</node>
+ <serviceName>org.mpris.MediaPlayer2.dragonplayer</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
+ <function>PlayPause</function>
+ </prototype>
+ <button>PlayPause</button>
+ <ifmulti>sendtotop</ifmulti>
+ </action>
+
+ <!-- The actions currently have no effekt in dragon player 2.0
+
+ <action id="skipForward" name="Skip Forward" description="Advance to next track">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.dragonplayer</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
<function>Next</function>
</prototype>
<button>SkipForward</button>
<repeat>true</repeat>
<ifmulti>sendtotop</ifmulti>
</action>
-
+
<action id="skipBackward" name="Skip Backward" description="Go to previous \
track"> <prototype>
- <serviceName>org.mpris.dragonplayer</serviceName>
- <node>Player</node>
+ <serviceName>org.mpris.MediaPlayer2.dragonplayer</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
<function>Prev</function>
</prototype>
<button>SkipBackward</button>
<repeat>true</repeat>
<ifmulti>sendtotop</ifmulti>
- </action>
- -->
+ </action>
+ -->
</profile>
diff --git a/profiles/klauncher.profile.xml b/profiles/klauncher.profile.xml
index b73ecff..14f859f 100644
--- a/profiles/klauncher.profile.xml
+++ b/profiles/klauncher.profile.xml
@@ -10,7 +10,7 @@
<action id="execute" name="Run command" description="Runs a command with optional \
arguments"> <prototype>
<serviceName>org.kde.klauncher</serviceName>
- <node>KLauncher</node>
+ <node>/KLauncher</node>
<function>kdeinit_exec</function>
<arguments>
<argument type="QString" comment="The executable name and path of the program or \
script to run">
diff --git a/profiles/kmix.profile.xml b/profiles/kmix.profile.xml
index f164e81..e9854e3 100644
--- a/profiles/kmix.profile.xml
+++ b/profiles/kmix.profile.xml
@@ -13,13 +13,9 @@
<action id="volUp" name="Volume Up" description="Increase Volume">
<prototype>
<serviceName>org.kde.kmix</serviceName>
- <node>Mixer0</node>
- <function>increaseVolume</function>
- <arguments>
- <argument type="QString" comment="Name of the slider to move and its \
index separated by a colon (eg. Master:0)">
- <default>Master:0</default>
- </argument>
- </arguments>
+ <node>/kmix/KMixWindow/actions/increase_volume</node>
+ <interface>org.qtproject.Qt.QAction</interface>
+ <function>trigger</function>
</prototype>
<button>VolumeUp</button>
<repeat>true</repeat>
@@ -28,13 +24,9 @@
<action id="volDown" name="Volume Down" description="Decrease Volume">
<prototype>
<serviceName>org.kde.kmix</serviceName>
- <node>Mixer0</node>
- <function>decreaseVolume</function>
- <arguments>
- <argument type="QString" comment="Name of the slider to move and its \
index separated by a colon (eg. Master:0)">
- <default>Master:0</default>
- </argument>
- </arguments>
+ <node>/kmix/KMixWindow/actions/decrease_volume</node>
+ <interface>org.qtproject.Qt.QAction</interface>
+ <function>trigger</function>
</prototype>
<button>VolumeDown</button>
<repeat>true</repeat>
@@ -43,13 +35,9 @@
<action id="toggleMute" name="Mute" description="Toggle Mute">
<prototype>
<serviceName>org.kde.kmix</serviceName>
- <node>Mixer0</node>
- <function>toggleMute</function>
- <arguments>
- <argument type="QString" comment="Name of the slider to mute and its \
index separated by a colon (eg. Master:0)">
- <default>Master:0</default>
- </argument>
- </arguments>
+ <node>/kmix/KMixWindow/actions/mute</node>
+ <interface>org.qtproject.Qt.QAction</interface>
+ <function>trigger</function>
</prototype>
<button>Mute</button>
<repeat>false</repeat>
diff --git a/profiles/konqueror.profile.xml b/profiles/konqueror.profile.xml
index 025b5ae..4e88a49 100644
--- a/profiles/konqueror.profile.xml
+++ b/profiles/konqueror.profile.xml
@@ -10,7 +10,7 @@
<action id="newWindow" name="Create New Window" description="Creates a new window \
and loads an arbitrary URL"> <prototype>
<serviceName>org.kde.konqueror</serviceName>
- <node>KonqMain</node>
+ <node>/KonqMain</node>
<function>openBrowserWindow</function>
<arguments>
<argument type="QString" comment="The URL to load in the window initially">
@@ -25,7 +25,7 @@
<action id="quit" name="Quit" description="Closes the Konqueror window">
<prototype>
<serviceName>org.kde.konqueror</serviceName>
- <node>MainApplication</node>
+ <node>/MainApplication</node>
<function>quit</function>
</prototype>
<ifmulti>sendtotop</ifmulti>
diff --git a/profiles/kscd.profile.xml b/profiles/kscd.profile.xml
index be8cc5d..13f5509 100644
--- a/profiles/kscd.profile.xml
+++ b/profiles/kscd.profile.xml
@@ -10,7 +10,7 @@
<action id="play" name="Play" description="Start playing the CD">
<prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Play</function>
</prototype>
<button>Play</button>
@@ -20,7 +20,7 @@
<action id="stop" name="Stop" description="Stops the CD">
<prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Stop</function>
</prototype>
<button>Stop</button>
@@ -29,7 +29,7 @@
<action id="eject" name="Eject" description="Ejects the CD">
<prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>CDPlayer</node>
+ <node>/CDPlayer</node>
<function>ejectShortcut</function>
</prototype>
<button>Eject</button>
@@ -39,7 +39,7 @@
<action id="previousTrack" name="Previous" description="Skips to the previous track \
on the CD"> <prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Prev</function>
</prototype>
<button>SkipBackward</button>
@@ -49,7 +49,7 @@
<action id="nextTrack" name="Next" description="Skips to the next track on the CD">
<prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Next</function>
</prototype>
<button>SkipForward</button>
@@ -59,7 +59,7 @@
<action id="playTrack" name="Play Track" description="Skips to a specific track on \
the CD"> <prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>CDPlayer</node>
+ <node>/CDPlayer</node>
<function>playTrack</function>
<arguments>
<argument type="int" comment="The number of the track to skip to">
@@ -73,7 +73,7 @@
<action id="setVolume" name="Set Volume" description="Sets the play volume">
<prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>VolumeSet</function>
<arguments>
<argument type="int" comment="The new value for the volume">
@@ -86,7 +86,7 @@
<action id="randomShortcut" name="Shuffle" description="Toggles track shuffling on \
and off"> <prototype>
<serviceName>org.kde.kscd</serviceName>
- <node>CDPlayer</node>
+ <node>/CDPlayer</node>
<function>randomShortcut</function>
</prototype>
</action>
diff --git a/profiles/okular.profile.xml b/profiles/okular.profile.xml
index 144b908..16c614d 100644
--- a/profiles/okular.profile.xml
+++ b/profiles/okular.profile.xml
@@ -10,7 +10,7 @@
<action id="previousPage" name="Back" description="Goes to the previous page">
<prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>slotPreviousPage</function>
</prototype>
<button>Rewind</button>
@@ -21,7 +21,7 @@
<action id="nextPage" name="Forward" description="Goes to the next page">
<prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>slotNextPage</function>
</prototype>
<button>Rewind</button>
@@ -32,7 +32,7 @@
<action id="firstPage" name="First" description="Goes to the first page">
<prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>slotGotoFirst</function>
</prototype>
<button>SkipBackward</button>
@@ -43,7 +43,7 @@
<action id="lastPage" name="Last" description="Goes to the last page">
<prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>slotGotoLast</function>
</prototype>
<button>SkipForward</button>
@@ -54,7 +54,7 @@
<action id="pause" name="Presentation" description="Starts / stops \
presentation"> <prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>slotTogglePresentation</function>
</prototype>
<button>Pause</button>
@@ -65,7 +65,7 @@
<action id="reload" name="Reload" description="Reloads the open document">
<prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>reload</function>
</prototype>
<ifmulti>sendtotop</ifmulti>
@@ -74,7 +74,7 @@
<action id="goToPage" name="Go to Page" description="Goes to the specified \
page"> <prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>goToPage</function>
<arguments>
<argument type="uint" comment="The page to choose">
@@ -88,7 +88,7 @@
<action id="openFile" name="Open document" description="Opens a specific \
document"> <prototype>
<serviceName>org.kde.okular</serviceName>
- <node>okular</node>
+ <node>/okular</node>
<function>openDocument</function>
<arguments>
<argument type="QString" comment="The document to be open">
diff --git a/profiles/powermanagement.profile.xml \
b/profiles/powermanagement.profile.xml index 84d4188..eb701bb 100644
--- a/profiles/powermanagement.profile.xml
+++ b/profiles/powermanagement.profile.xml
@@ -11,7 +11,7 @@
<action id="suspend2Ram" name="Suspend" description="Suspends your computer to \
RAM (sleep)"> <prototype>
<serviceName>org.kde.klauncher</serviceName>
- <node>KLauncher</node>
+ <node>/KLauncher</node>
<function>kdeinit_exec</function>
<arguments>
<argument type="QString" comment="System command to use for \
suspend"> @@ -31,7 +31,7 @@
<action id="suspend2Disk" name="Hibernate" description="Suspends your computer \
disk (deep sleep)"> <prototype>
<serviceName>org.kde.klauncher</serviceName>
- <node>KLauncher</node>
+ <node>/KLauncher</node>
<function>kdeinit_exec</function>
<arguments>
<argument type="QString" comment="System command to use for \
suspend"> @@ -51,7 +51,7 @@
<action id="shutdown" name="Shutdown" description="Logout and shutdown your \
computer"> <prototype>
<serviceName>org.kde.ksmserver</serviceName>
- <node>KSMServer</node>
+ <node>/KSMServer</node>
<function>logout</function>
<arguments>
<argument type="int" comment="Ask for confirmation? 1 = No, 2 = \
Yes"> @@ -72,7 +72,7 @@
<action id="reboot" name="Reboot" description="Logout and restart your \
computer"> <prototype>
<serviceName>org.kde.ksmserver</serviceName>
- <node>KSMServer</node>
+ <node>/KSMServer</node>
<function>logout</function>
<arguments>
<argument type="int" comment="Ask for confirmation? 1 = No, 2 = \
Yes"> @@ -91,7 +91,7 @@
<action id="logout" name="Logout" description="Just log out">
<prototype>
<serviceName>org.kde.ksmserver</serviceName>
- <node>KSMServer</node>
+ <node>/KSMServer</node>
<function>logout</function>
<arguments>
<argument type="int" comment="Ask for confirmation? 1 = No, 2 = \
Yes">
diff --git a/profiles/profile.xsd b/profiles/profile.xsd
index c82dddd..e9998a2 100644
--- a/profiles/profile.xsd
+++ b/profiles/profile.xsd
@@ -84,7 +84,8 @@
<xs:sequence>
<xs:element name="serviceName" type="xs:string"/>
<xs:element name="node" type="xs:string"/>
- <xs:element name="function" type="xs:string"/>
+ <xs:element name="interface" type="xs:string" minOccurs="0"/>
+ <xs:element name="function" type="xs:string"/>
<xs:element name="return" type="xs:string" default="void" minOccurs="0"/>
<xs:element name="arguments" minOccurs="0">
<xs:complexType>
diff --git a/profiles/vlc.profile.xml b/profiles/vlc.profile.xml
index b628260..70d8cdc 100644
--- a/profiles/vlc.profile.xml
+++ b/profiles/vlc.profile.xml
@@ -12,7 +12,7 @@
<action id="play" name="Play" description="Start playing">
<prototype>
<serviceName>org.mpris.vlc</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Play</function>
</prototype>
<button>Play</button>
@@ -21,7 +21,7 @@
<action id="stop" name="Stop" description="Stop playing">
<prototype>
<serviceName>org.mpris.vlc</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Stop</function>
</prototype>
<button>Stop</button>
@@ -30,7 +30,7 @@
<action id="pause" name="Pause" description="Pause playing">
<prototype>
<serviceName>org.mpris.vlc</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Pause</function>
</prototype>
<button>Pause</button>
@@ -39,7 +39,7 @@
<action id="skipForward" name="Skip Forward" description="Advance to next \
track"> <prototype>
<serviceName>org.mpris.vlc</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Next</function>
</prototype>
<button>SkipForward</button>
@@ -49,7 +49,7 @@
<action id="skipBackward" name="Skip Backward" description="Go to previous \
track"> <prototype>
<serviceName>org.mpris.vlc</serviceName>
- <node>Player</node>
+ <node>/Player</node>
<function>Prev</function>
</prototype>
<button>SkipBackward</button>
diff --git a/profiles/vlc2.profile.xml b/profiles/vlc2.profile.xml
new file mode 100644
index 0000000..e29911b
--- /dev/null
+++ b/profiles/vlc2.profile.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+ <profile
+ xmlns="urn:org-kde-kremotecontrol"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:org-kde-kremotecontrol file:profile.xsd"
+ >
+
+
+ <name>VLC media player</name>
+ <description>
+ This KRemoteControl template provide easy setup for VLC 2 mediaplayer.
+ Enable VLC D-Bus control interface in order to use KRemoteControl to control it.
+ If having problem with this profile try configuring it for single instance \
running. + </description>
+ <version>0.2</version>
+ <author>Gioacchino Mazzurco [gio@eigenlab.org]</author>
+
+
+ <!-- VLC 2 impements mpris 2 interface specification, the D-Bus name is \
org.mpris.MediaPlayer2.vlc --> +
+<!-- <action id="play" name="Play" description="Start playing">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.vlc</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
+ <function>Play</function>
+ </prototype>
+ <button>Play</button>
+ </action>
+
+ <action id="pause" name="Pause" description="Pause playing">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.vlc</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
+ <function>Pause</function>
+ </prototype>
+ <button>Pause</button>
+ </action>-->
+
+ <action id="playpause" name="Play Pause" description="Toggle Play/Pause">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.vlc</serviceName>
+ <node>/org/mpris/MediaPlayer2</node>
+ <interface>org.mpris.MediaPlayer2.Player</interface>
+ <function>PlayPause</function>
+ </prototype>
+ <button>PlayPause</button>
+ <ifmulti>sendtoall</ifmulti>
+ </action>
+
+<!-- <action id="stop" name="Stop" description="Stop playing">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.vlc</serviceName>
+ <node>org/mpris/MediaPlayer2</node>
+ <function>Stop</function>
+ </prototype>
+ <button>Stop</button>
+ </action>
+
+ <action id="skipForward" name="Skip Forward" description="Advance to next track">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.vlc</serviceName>
+ <node>org/mpris/MediaPlayer2</node>
+ <function>Next</function>
+ </prototype>
+ <button>SkipForward</button>
+ <repeat>true</repeat>
+ </action>
+
+ <action id="skipBackward" name="Skip Backward" description="Go to previous track">
+ <prototype>
+ <serviceName>org.mpris.MediaPlayer2.vlc</serviceName>
+ <node>org/mpris/MediaPlayer2</node>
+ <function>Prev</function>
+ </prototype>
+ <button>SkipBackward</button>
+ <repeat>true</repeat>
+ </action> -->
+</profile>
\ No newline at end of file
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic