diff --git a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml index a1af941c614cfaca672286427ba4ca3d626526a2..ee2525cfe5244bb5e7aa2fcd004a9372210743d1 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 be041d502f067b98bb7b97deea9a15cb85259b82..8a632d8168e8c0ddf8cfc3e3199285ecaa845604 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 35478b24ff4dea2d649a620aa069e973adfdeeb4..5e86a48ef3409388de4b3c703366ef437b87f1d2 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 063e8f1fbf3fdcdfd7add9e13f15032e40712fac..7b44e56de74a0d1abcd239f5a39fce3b62ceb0ff 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 728a566be978ddb7675a082274fcc3b048f9a222..38eb00ca92f8edf1b2e0a855d138ed7349b9afc4 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 5ddc03c6873f4c877b00a26e13ab8c70422316c1..56cf0ef018585290c2430a7332e06df0ca36307f 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 e9aac344f9252a2234d21b2464178b139b21a3f9..238b353fc0cb57f51a6a6eddbc39f2d09d210800 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