From cec87854259851e0a0fbd3cea38ea95fd2f8ca26 Mon Sep 17 00:00:00 2001 From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> Date: Tue, 9 Jan 2018 11:37:16 -0500 Subject: [PATCH] datatransfer: add dataTransferList API Add API to obtain the list of known datatransfer. libring and DBus API included. Change-Id: I4e1a46c132f99bd36b4a531035dbc83261061093 Reviewed-by: Olivier Soldano <olivier.soldano@savoirfairelinux.com> --- bin/dbus/cx.ring.Ring.ConfigurationManager.xml | 11 +++++++++-- bin/dbus/dbusconfigurationmanager.cpp | 6 ++++++ bin/dbus/dbusconfigurationmanager.h | 1 + src/client/datatransfer.cpp | 6 ++++++ src/data_transfer.cpp | 8 ++++++++ src/data_transfer.h | 3 +++ src/dring/datatransfer_interface.h | 3 +++ 7 files changed, 36 insertions(+), 2 deletions(-) diff --git a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml index a1af941c61..ee2525cfe5 100644 --- a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml +++ b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml @@ -1410,7 +1410,14 @@ <arg type="s" name="display_name" direction="in"></arg> </method> - <method name="dataTransferInfo" tp:name-for-bindings="dataTransferInfo"> + <method name="dataTransferList" tp:name-for-bindings="dataTransferList"> + <tp:added version="4.2.0"/> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorULongLong"/> + <arg type="at" name="DataTransferList" direction="out"> + </arg> + </method> + + <method name="dataTransferInfo" tp:name-for-bindings="dataTransferInfo"> <tp:added version="4.2.0"/> <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="DataTransferInfo"/> <arg type="(buttss)" name="DataTransferInfo" direction="out"> @@ -1419,7 +1426,7 @@ </arg> </method> - <method name="dataTransferBytesSent" tp:name-for-bindings="dataTransferBytesSent"> + <method name="dataTransferBytesSent" tp:name-for-bindings="dataTransferBytesSent"> <tp:added version="4.2.0"/> <arg type="t" name="BytesProgress" direction="out"> </arg> diff --git a/bin/dbus/dbusconfigurationmanager.cpp b/bin/dbus/dbusconfigurationmanager.cpp index be041d502f..8a632d8168 100644 --- a/bin/dbus/dbusconfigurationmanager.cpp +++ b/bin/dbus/dbusconfigurationmanager.cpp @@ -640,3 +640,9 @@ DBusConfigurationManager::dataTransferBytesSent(const uint64_t& id) { return DRing::dataTransferBytesSent(id);; } + +auto +DBusConfigurationManager::dataTransferList() -> decltype(DRing::dataTransferList()) +{ + return DRing::dataTransferList();; +} diff --git a/bin/dbus/dbusconfigurationmanager.h b/bin/dbus/dbusconfigurationmanager.h index 35478b24ff..5e86a48ef3 100644 --- a/bin/dbus/dbusconfigurationmanager.h +++ b/bin/dbus/dbusconfigurationmanager.h @@ -157,6 +157,7 @@ class DBusConfigurationManager : const std::string& file_path, const std::string& display_name); DBus::Struct<bool, uint32_t, uint64_t, uint64_t, std::string, std::string> dataTransferInfo(const DRing::DataTransferId& id); uint64_t dataTransferBytesSent(const uint64_t& id); + std::vector<uint64_t> dataTransferList(); }; #endif // __RING_DBUSCONFIGURATIONMANAGER_H__ diff --git a/src/client/datatransfer.cpp b/src/client/datatransfer.cpp index 063e8f1fbf..7b44e56de7 100644 --- a/src/client/datatransfer.cpp +++ b/src/client/datatransfer.cpp @@ -41,6 +41,12 @@ registerDataXferHandlers(const std::map<std::string, std::shared_ptr<CallbackWra } } +std::vector<DataTransferId> +dataTransferList() +{ + return ring::Manager::instance().dataTransfers->list(); +} + DataTransferId sendFile(const std::string& account_id, const std::string& peer_uri, diff --git a/src/data_transfer.cpp b/src/data_transfer.cpp index 728a566be9..38eb00ca92 100644 --- a/src/data_transfer.cpp +++ b/src/data_transfer.cpp @@ -25,6 +25,7 @@ #include "peer_connection.h" #include "fileutils.h" #include "string_utils.h" +#include "map_utils.h" #include "client/ring_signal.h" #include <stdexcept> @@ -365,6 +366,13 @@ DataTransferFacade::~DataTransferFacade() RING_WARN("facade destroy, pimpl @%p", pimpl_.get()); }; +std::vector<DRing::DataTransferId> +DataTransferFacade::list() const +{ + std::lock_guard<std::mutex> lk {pimpl_->mapMutex_}; + return map_utils::extractKeys(pimpl_->map_); +} + DRing::DataTransferId DataTransferFacade::sendFile(const std::string& account_id, const std::string& peer_uri, const std::string& file_path, const std::string& display_name) diff --git a/src/data_transfer.h b/src/data_transfer.h index 5ddc03c687..56cf0ef018 100644 --- a/src/data_transfer.h +++ b/src/data_transfer.h @@ -34,6 +34,9 @@ public: DataTransferFacade(); ~DataTransferFacade(); + /// Return all known transfer id + std::vector<DRing::DataTransferId> list() const; + /// Send a file to a peer. /// Open a file and send its contents over a reliable connection /// to given peer using the protocol from given account. diff --git a/src/dring/datatransfer_interface.h b/src/dring/datatransfer_interface.h index e9aac344f9..238b353fc0 100644 --- a/src/dring/datatransfer_interface.h +++ b/src/dring/datatransfer_interface.h @@ -25,6 +25,7 @@ #include <string> #include <map> +#include <vector> #include <memory> #include <cstdlib> // std::size_t #include <ios> // std::streamsize @@ -57,6 +58,8 @@ struct DataTransferInfo std::string path; ///< associated local file path if supported (empty, if not) }; +std::vector<DataTransferId> dataTransferList(); + /// Asynchronously send a file to a peer using given account connection. /// /// If given account supports a file transfer protocol this function creates -- GitLab