From f864a6398124a7baac93cd15925723a850611d74 Mon Sep 17 00:00:00 2001 From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> Date: Wed, 10 Jan 2018 14:43:10 -0500 Subject: [PATCH] datatransfer: implement incoming totalSize info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit File total byte size information was missing for incoming transfer. Change-Id: I4aadc0d6ae2baced02a93c208d7476cf71609945 Reviewed-by: Anthony Léonard <anthony.leonard@savoirfairelinux.com> --- src/data_transfer.cpp | 14 +++++++++----- src/data_transfer.h | 2 +- src/ftp_server.cpp | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/data_transfer.cpp b/src/data_transfer.cpp index 38eb00ca92..3a1f70ccc7 100644 --- a/src/data_transfer.cpp +++ b/src/data_transfer.cpp @@ -204,7 +204,7 @@ FileTransfer::read(std::vector<uint8_t>& buf) const class IncomingFileTransfer final : public DataTransfer { public: - IncomingFileTransfer(DRing::DataTransferId id, const std::string&, std::size_t); + IncomingFileTransfer(DRing::DataTransferId id, const std::string&, std::size_t, std::size_t); bool start() override; @@ -222,14 +222,16 @@ private: IncomingFileTransfer::IncomingFileTransfer(DRing::DataTransferId id, const std::string& display_name, + std::size_t total_size, std::size_t offset) : DataTransfer(id) { - RING_WARN() << "[FTP] incoming transfert: " << display_name; + RING_WARN() << "[FTP] incoming transfert of " << total_size << " byte(s): " << display_name; (void)offset; info_.isOutgoing = false; info_.displayName = display_name; + info_.totalSize = total_size; // TODO: use offset? emit(DRing::DataTransferEventCode::created); @@ -291,6 +293,7 @@ public: std::shared_ptr<DataTransfer> createFileTransfer(const std::string& file_path, const std::string& display_name); std::shared_ptr<IncomingFileTransfer> createIncomingFileTransfer(const std::string& display_name, + std::size_t total_size, std::size_t offset); std::shared_ptr<DataTransfer> getTransfer(const DRing::DataTransferId& id); @@ -329,10 +332,11 @@ DataTransferFacade::Impl::createFileTransfer(const std::string& file_path, std::shared_ptr<IncomingFileTransfer> DataTransferFacade::Impl::createIncomingFileTransfer(const std::string& display_name, + std::size_t total_size, std::size_t offset) { auto id = generateUID(); - auto transfer = std::make_shared<IncomingFileTransfer>(id, display_name, offset); + auto transfer = std::make_shared<IncomingFileTransfer>(id, display_name, total_size, offset); std::lock_guard<std::mutex> lk {mapMutex_}; map_.emplace(id, transfer); return transfer; @@ -437,9 +441,9 @@ DataTransferFacade::info(const DRing::DataTransferId& id) const } std::string -DataTransferFacade::onIncomingFileRequest(const std::string& display_name, std::size_t offset) +DataTransferFacade::onIncomingFileRequest(const std::string& display_name, std::size_t total_size, std::size_t offset) { - auto transfer = pimpl_->createIncomingFileTransfer(display_name, offset); + auto transfer = pimpl_->createIncomingFileTransfer(display_name, total_size, offset); auto filename = transfer->requestFilename(); if (!filename.empty()) transfer->start(); // TODO: bad place, call only if file can be open diff --git a/src/data_transfer.h b/src/data_transfer.h index 56cf0ef018..5c5f40213a 100644 --- a/src/data_transfer.h +++ b/src/data_transfer.h @@ -70,7 +70,7 @@ public: /// Create an IncomingFileTransfer object. /// \return a filename to open where incoming data will be written or an empty string /// in case of refusal. - std::string onIncomingFileRequest(const std::string& display_name, std::size_t offset); + std::string onIncomingFileRequest(const std::string& display_name, std::size_t total_size, std::size_t offset); private: class Impl; diff --git a/src/ftp_server.cpp b/src/ftp_server.cpp index 7f7fd3da07..78171640b1 100644 --- a/src/ftp_server.cpp +++ b/src/ftp_server.cpp @@ -56,7 +56,7 @@ bool FtpServer::startNewFile() { // Request filename from client (WARNING: synchrone call!) - auto filename = Manager::instance().dataTransfers->onIncomingFileRequest(displayName_, 0 /* TODO: offset */); + auto filename = Manager::instance().dataTransfers->onIncomingFileRequest(displayName_, fileSize_, 0 /* TODO: offset */); if (filename.empty()) return false; -- GitLab