diff options
Diffstat (limited to 'libresourceqt/src')
-rw-r--r-- | libresourceqt/src/resource-engine.cpp | 8 | ||||
-rw-r--r-- | libresourceqt/src/resource-engine.h | 3 | ||||
-rw-r--r-- | libresourceqt/src/resource-set.cpp | 55 |
3 files changed, 48 insertions, 18 deletions
diff --git a/libresourceqt/src/resource-engine.cpp b/libresourceqt/src/resource-engine.cpp index bc29de9..4d877e3 100644 --- a/libresourceqt/src/resource-engine.cpp +++ b/libresourceqt/src/resource-engine.cpp @@ -14,8 +14,8 @@ static void handleAdviceMessage(resmsg_t *msg, resset_t *rs, void *data); ResourceEngine::ResourceEngine(ResourceSet *resourceSet) : QObject(resourceSet), connected(false), resourceSet(resourceSet), - libresourceConnection(NULL), libresourceSet(NULL), requestId(0), - messageMap(), mode(0) + dbusEngine(NULL), libresourceConnection(NULL), libresourceSet(NULL), + requestId(0), messageMap(), mode(0) { } @@ -27,6 +27,9 @@ bool ResourceEngine::initialize() { DBusError dbusError; DBusConnection *dbusConnection; + dbusEngine = new DBUSConnectionEventLoop; + if(dbusEngine == NULL) + return false; dbus_error_init(&dbusError); dbusConnection = dbus_bus_get(DBUS_BUS_SYSTEM, &dbusError); @@ -36,6 +39,7 @@ bool ResourceEngine::initialize() return false; } dbus_error_free(&dbusError); + dbusEngine->addConnection(dbusConnection); libresourceConnection = resproto_init(RESPROTO_ROLE_CLIENT, RESPROTO_TRANSPORT_DBUS, connectionIsUp, dbusConnection); if (libresourceConnection == NULL) { diff --git a/libresourceqt/src/resource-engine.h b/libresourceqt/src/resource-engine.h index 72b567d..a3693e9 100644 --- a/libresourceqt/src/resource-engine.h +++ b/libresourceqt/src/resource-engine.h @@ -7,6 +7,7 @@ #include <dbus/dbus.h> #include <res-conn.h> #include <policy/resource-set.h> +#include <dbusconnectioneventloop.h> namespace ResourcePolicy { @@ -55,9 +56,11 @@ signals: void disconnectedFromManager(); private: + bool connected; ResourceSet *resourceSet; DBusConnection *dbusConnection; + DBUSConnectionEventLoop *dbusEngine; resconn_t *libresourceConnection; resset_t *libresourceSet; quint32 requestId; diff --git a/libresourceqt/src/resource-set.cpp b/libresourceqt/src/resource-set.cpp index dc58828..80974d2 100644 --- a/libresourceqt/src/resource-set.cpp +++ b/libresourceqt/src/resource-set.cpp @@ -1,11 +1,12 @@ #include <policy/resource-set.h> +#include "resource-engine.h" using namespace ResourcePolicy; ResourceSet::ResourceSet(const QString &applicationClass, QObject * parent) - : QObject(parent), resourceClass(applicationClass), autoRelease(false), - alwaysReply(false) - + : QObject(parent), resourceClass(applicationClass), resourceEngine(NULL), + autoRelease(false), alwaysReply(false), initialized(false), + pendingAcquire(false) { identifier = (quint32)this; memset(resourceSet, 0, sizeof(QPointer<Resource *>)*NumberOfTypes); @@ -18,9 +19,26 @@ ResourceSet::~ResourceSet() } } -bool ResourceSet::finalize() +bool ResourceSet::initialize() { - return false; + resourceEngine = new ResourceEngine(this); + if (resourceEngine == NULL) { + return false; + } + if (!resourceEngine->initialize()) { + return false; + } + if (!resourceEngine->connect()) { + return false; + } + QObject::connect(resourceEngine, SIGNAL(connectedToManager()), + this, SLOT(connectedHandler())); + QObject::connect(resourceEngine, SIGNAL(resourcesAcquired(quint32)), + this, SLOT(handleAcquire(quint32))); + QObject::connect(resourceEngine, SIGNAL(resourcesDenied()), + this, SLOT(handleDeny())); + + return true; } void ResourceSet::addResource(const Resource *resource) @@ -28,6 +46,7 @@ void ResourceSet::addResource(const Resource *resource) if ((resource->type() == AudioPlaybackType) || (resource->type() == AudioRecorderType)) { qDebug("audioResource..."); } + delete resourceSet[resource->type()]; resourceSet[resource->type()] = resource->clone(); } @@ -40,10 +59,8 @@ void ResourceSet::addResources(const QList<Resource *>resources) void ResourceSet::deleteResource(ResourceType type) { - if (contains(type)) { - delete resourceSet[type]; - resourceSet[type] = NULL; - } + delete resourceSet[type]; + resourceSet[type] = NULL; } bool ResourceSet::contains(ResourceType type) const @@ -76,8 +93,7 @@ QList<Resource *> ResourceSet::resources() const QList<Resource *> listOfResources; for (int i = 0; i < NumberOfTypes; i++) { if (resourceSet[i] != NULL) { - Resource *clone = resourceSet[i]->clone(); - listOfResources.append(clone); + listOfResources.append(resourceSet[i]); } } return listOfResources; @@ -85,15 +101,22 @@ QList<Resource *> ResourceSet::resources() const Resource * ResourceSet::resource(ResourceType type) const { - if (contains(type)) - return resourceSet[type]->clone(); - else - return NULL; + return resourceSet[type]; } bool ResourceSet::acquire() { - return false; + if(!initialized) { + pendingAcquire = true; + return initialize(); + } + else if (!resourceEngine->isConnected()) { + pendingAcquire = true; + resourceEngine->connect(); + } + else { + return resourceEngine->acquireResources(); + } } bool ResourceSet::release() |