diff --git a/dbus/org.nemo.ssu.xml b/dbus/org.nemo.ssu.xml index f23f828..e9711ee 100644 --- a/dbus/org.nemo.ssu.xml +++ b/dbus/org.nemo.ssu.xml @@ -93,6 +93,11 @@ + + + + + diff --git a/ssu.pro b/ssu.pro index e034f15..5be9a7f 100644 --- a/ssu.pro +++ b/ssu.pro @@ -31,13 +31,3 @@ static_config.files = repos.ini ssu-defaults.ini board-mappings.ini static_config.path = /usr/share/ssu INSTALLS += config static_config oneshot macros - -system(qdbusxml2cpp \ - -c SsuAdaptor \ - -a ssud/ssuadaptor.h:ssud/ssuadaptor.cpp \ - dbus/org.nemo.ssu.xml) - -system(qdbusxml2cpp \ - -c SsuProxy \ - -p ssucli/ssuproxy.h:ssucli/ssuproxy.cpp \ - dbus/org.nemo.ssu.xml) diff --git a/ssucli/ssucli.cpp b/ssucli/ssucli.cpp index 23cf14e..5cd7578 100644 --- a/ssucli/ssucli.cpp +++ b/ssucli/ssucli.cpp @@ -22,6 +22,8 @@ SsuCli::SsuCli() : QObject() { + qDBusRegisterMetaType(); + connect(this, SIGNAL(done()), QCoreApplication::instance(), SLOT(quit()), Qt::DirectConnection); connect(&ssu, SIGNAL(done()), diff --git a/ssucli/ssucli.h b/ssucli/ssucli.h index 924557a..4bf81ed 100644 --- a/ssucli/ssucli.h +++ b/ssucli/ssucli.h @@ -14,7 +14,7 @@ #include #include "libssu/ssu.h" -#include "ssuproxy.h" +#include "ssu_interface.h" class SsuCli: public QObject { diff --git a/ssucli/ssucli.pro b/ssucli/ssucli.pro index cbc8b09..eb3b7c8 100644 --- a/ssucli/ssucli.pro +++ b/ssucli/ssucli.pro @@ -5,8 +5,11 @@ include(ssucli_dependencies.pri) QT += network dbus CONFIG += link_pkgconfig -HEADERS = ssucli.h \ - ssuproxy.h +HEADERS = ssucli.h SOURCES = main.cpp \ - ssucli.cpp \ - ssuproxy.cpp + ssucli.cpp + +ssu_dbus_interface.files = ../dbus/org.nemo.ssu.xml +ssu_dbus_interface.source_flags = -c SsuProxy +ssu_dbus_interface.header_flags = -c SsuProxy -i ssud/ssud_dbus.h +DBUS_INTERFACES += ssu_dbus_interface diff --git a/ssud/ssud.cpp b/ssud/ssud.cpp index 2af9181..5e702a0 100644 --- a/ssud/ssud.cpp +++ b/ssud/ssud.cpp @@ -6,7 +6,7 @@ */ #include "ssud.h" -#include "ssuadaptor.h" +#include "ssu_adaptor.h" #include "libssu/ssudeviceinfo.h" #include "libssu/ssurepomanager.h" @@ -19,6 +19,8 @@ const char *Ssud::OBJECT_PATH = "/org/nemo/ssu"; Ssud::Ssud(QObject *parent) : QObject(parent) { + qDBusRegisterMetaType(); + qDBusRegisterMetaType>(); QDBusConnection connection = QDBusConnection::systemBus(); if (!connection.registerObject(OBJECT_PATH, this)) { qFatal("Cannot register object at %s", OBJECT_PATH); @@ -231,3 +233,21 @@ void Ssud::updateRepos() repoManager.update(); autoclose.start(); } + +QList Ssud::listRepos(bool rnd) +{ + QList reposList; + SsuRepoManager repoManager; + + for (const QString &repo : repoManager.repos(rnd)) { + const QString repoUrl = ssu.repoUrl(repo, rnd); + + SsuRepo ssuRepo; + ssuRepo.name = repo; + ssuRepo.url = repoUrl; + + reposList.append(ssuRepo); + } + autoclose.start(); + return reposList; +} diff --git a/ssud/ssud.h b/ssud/ssud.h index 21cda7e..17ddcea 100644 --- a/ssud/ssud.h +++ b/ssud/ssud.h @@ -13,6 +13,7 @@ #include #include "libssu/ssu.h" +#include "ssud_dbus.h" class Ssud: public QObject { @@ -45,6 +46,7 @@ public slots: void modifyRepo(int action, const QString &repo); void addRepo(const QString &repo, const QString &url); void updateRepos(); + QList listRepos(bool rnd); bool error(); QString lastError(); diff --git a/ssud/ssud.pro b/ssud/ssud.pro index b33b9af..7615bc1 100644 --- a/ssud/ssud.pro +++ b/ssud/ssud.pro @@ -5,9 +5,10 @@ include(ssud_dependencies.pri) QT += network dbus CONFIG += link_pkgconfig -HEADERS = ssuadaptor.h \ - ssud.h -SOURCES = ssuadaptor.cpp \ +HEADERS = \ + ssud.h \ + ssud_dbus.h +SOURCES = \ ssud.cpp \ main.cpp @@ -23,3 +24,8 @@ conf.files = ../dbus/$${DBUS_SERVICE_NAME}.conf conf.path = /etc/dbus-1/system.d/ INSTALLS += systemd service conf + +ssu_dbus_adaptor.files = ../dbus/org.nemo.ssu.xml +ssu_dbus_adaptor.source_flags = -c SsuAdaptor +ssu_dbus_adaptor.header_flags = -c SsuAdaptor -i ssud/ssud_dbus.h +DBUS_ADAPTORS += ssu_dbus_adaptor diff --git a/ssud/ssud_dbus.h b/ssud/ssud_dbus.h new file mode 100644 index 0000000..53bf2b1 --- /dev/null +++ b/ssud/ssud_dbus.h @@ -0,0 +1,32 @@ +#ifndef SSUD_INCLUDE_H +#define SSUD_INCLUDE_H + +#include +#include +#include + +struct SsuRepo { + QString name; + QString url; + QVariantMap parameters; +}; + +inline QDBusArgument &operator<<(QDBusArgument &argument, const SsuRepo &myRepo) +{ + argument.beginStructure(); + argument << myRepo.name << myRepo.url << myRepo.parameters; + argument.endStructure(); + return argument; +} + +inline const QDBusArgument &operator>>(const QDBusArgument &argument, SsuRepo &myRepo) +{ + argument.beginStructure(); + argument >> myRepo.name >> myRepo.url >> myRepo.parameters; + argument.endStructure(); + return argument; +} + +Q_DECLARE_METATYPE(SsuRepo) + +#endif // SSUD_INCLUDE_H