Complete ring buffer and direct download support #26
This commit is contained in:
parent
2fd0ff8a93
commit
8ff90ae769
@ -42,10 +42,11 @@ public:
|
||||
direct_open_file(const direct_open_file &) noexcept = delete;
|
||||
direct_open_file(direct_open_file &&) noexcept = delete;
|
||||
auto operator=(direct_open_file &&) noexcept -> direct_open_file & = delete;
|
||||
auto
|
||||
operator=(const direct_open_file &) noexcept -> direct_open_file & = delete;
|
||||
auto operator=(const direct_open_file &) noexcept
|
||||
-> direct_open_file & = delete;
|
||||
|
||||
private:
|
||||
std::atomic<std::uint64_t> last_progress_{0U};
|
||||
std::size_t total_chunks_;
|
||||
stop_type stop_requested_{false};
|
||||
|
||||
@ -63,13 +64,13 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto
|
||||
get_read_state() const -> boost::dynamic_bitset<> override {
|
||||
[[nodiscard]] auto get_read_state() const
|
||||
-> boost::dynamic_bitset<> override {
|
||||
return {};
|
||||
}
|
||||
|
||||
[[nodiscard]] auto
|
||||
get_read_state(std::size_t /* chunk */) const -> bool override {
|
||||
[[nodiscard]] auto get_read_state(std::size_t /* chunk */) const
|
||||
-> bool override {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -95,8 +96,8 @@ public:
|
||||
return api_error::not_supported;
|
||||
}
|
||||
|
||||
[[nodiscard]] auto write(std::uint64_t, const data_buffer &,
|
||||
std::size_t &) -> api_error override {
|
||||
[[nodiscard]] auto write(std::uint64_t, const data_buffer &, std::size_t &)
|
||||
-> api_error override {
|
||||
return api_error::not_supported;
|
||||
}
|
||||
};
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "providers/i_provider.hpp"
|
||||
#include "types/repertory.hpp"
|
||||
#include "utils/common.hpp"
|
||||
#include "utils/time.hpp"
|
||||
|
||||
namespace repertory {
|
||||
direct_open_file::direct_open_file(std::uint64_t chunk_size,
|
||||
@ -40,6 +41,7 @@ direct_open_file::~direct_open_file() { close(); }
|
||||
|
||||
auto direct_open_file::close() -> bool {
|
||||
stop_requested_ = true;
|
||||
last_progress_ = 0U;
|
||||
return open_file_base::close();
|
||||
}
|
||||
|
||||
@ -58,13 +60,19 @@ auto direct_open_file::read(std::size_t read_size, std::uint64_t read_offset,
|
||||
|
||||
auto res = provider_.read_file_bytes(fsi_.api_path, read_size, read_offset,
|
||||
data, stop_requested_);
|
||||
if (res == api_error::success) {
|
||||
if (res != api_error::success) {
|
||||
return res;
|
||||
}
|
||||
|
||||
reset_timeout();
|
||||
if ((utils::time::get_time_now() - last_progress_.load()) >
|
||||
(2U * utils::time::NANOS_PER_SECOND)) {
|
||||
last_progress_ = utils::time::get_time_now();
|
||||
auto progress = (static_cast<double>(read_offset + read_size) /
|
||||
static_cast<double>(fsi_.size) * 100.0);
|
||||
event_system::instance().raise<download_progress>(
|
||||
fsi_.api_path, fsi_.source_path, progress);
|
||||
}
|
||||
reset_timeout();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user