neighbor/udisks: move code to class UDisks2::ParseObjects(ODBus::Message)
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include "UDisks2.hxx"
|
||||
#include "Message.hxx"
|
||||
#include "ReadIter.hxx"
|
||||
#include "ObjectManager.hxx"
|
||||
#include "util/StringAPI.hxx"
|
||||
@@ -113,4 +114,19 @@ ParseObjects(ODBus::ReadMessageIter &&i,
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
ParseObjects(ODBus::Message &reply,
|
||||
std::function<void(Object &&o)> callback)
|
||||
{
|
||||
using namespace ODBus;
|
||||
|
||||
reply.CheckThrowError();
|
||||
|
||||
ReadMessageIter i(*reply.Get());
|
||||
if (i.GetArgType() != DBUS_TYPE_ARRAY)
|
||||
throw std::runtime_error("Malformed response");
|
||||
|
||||
ParseObjects(i.Recurse(), std::move(callback));
|
||||
}
|
||||
|
||||
} // namespace UDisks2
|
||||
|
@@ -26,7 +26,10 @@
|
||||
#define UDISKS2_PATH "/org/freedesktop/UDisks2"
|
||||
#define UDISKS2_INTERFACE "org.freedesktop.UDisks2"
|
||||
|
||||
namespace ODBus { class ReadMessageIter; }
|
||||
namespace ODBus {
|
||||
class Message;
|
||||
class ReadMessageIter;
|
||||
}
|
||||
|
||||
namespace UDisks2 {
|
||||
|
||||
@@ -66,6 +69,16 @@ void
|
||||
ParseObjects(ODBus::ReadMessageIter &&i,
|
||||
std::function<void(Object &&o)> callback);
|
||||
|
||||
/**
|
||||
* Parse objects from a GetManagedObjects reply and invoke the
|
||||
* callback for each.
|
||||
*
|
||||
* Throws on error.
|
||||
*/
|
||||
void
|
||||
ParseObjects(ODBus::Message &reply,
|
||||
std::function<void(Object &&o)> callback);
|
||||
|
||||
} // namespace UDisks2
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user