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(const direct_open_file &) noexcept = delete;
|
||||||
direct_open_file(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=(direct_open_file &&) noexcept -> direct_open_file & = delete;
|
||||||
auto
|
auto operator=(const direct_open_file &) noexcept
|
||||||
operator=(const direct_open_file &) noexcept -> direct_open_file & = delete;
|
-> direct_open_file & = delete;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::atomic<std::uint64_t> last_progress_{0U};
|
||||||
std::size_t total_chunks_;
|
std::size_t total_chunks_;
|
||||||
stop_type stop_requested_{false};
|
stop_type stop_requested_{false};
|
||||||
|
|
||||||
@ -63,13 +64,13 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_read_state() const
|
||||||
get_read_state() const -> boost::dynamic_bitset<> override {
|
-> boost::dynamic_bitset<> override {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] auto
|
[[nodiscard]] auto get_read_state(std::size_t /* chunk */) const
|
||||||
get_read_state(std::size_t /* chunk */) const -> bool override {
|
-> bool override {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +96,8 @@ public:
|
|||||||
return api_error::not_supported;
|
return api_error::not_supported;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] auto write(std::uint64_t, const data_buffer &,
|
[[nodiscard]] auto write(std::uint64_t, const data_buffer &, std::size_t &)
|
||||||
std::size_t &) -> api_error override {
|
-> api_error override {
|
||||||
return api_error::not_supported;
|
return api_error::not_supported;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "providers/i_provider.hpp"
|
#include "providers/i_provider.hpp"
|
||||||
#include "types/repertory.hpp"
|
#include "types/repertory.hpp"
|
||||||
#include "utils/common.hpp"
|
#include "utils/common.hpp"
|
||||||
|
#include "utils/time.hpp"
|
||||||
|
|
||||||
namespace repertory {
|
namespace repertory {
|
||||||
direct_open_file::direct_open_file(std::uint64_t chunk_size,
|
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 {
|
auto direct_open_file::close() -> bool {
|
||||||
stop_requested_ = true;
|
stop_requested_ = true;
|
||||||
|
last_progress_ = 0U;
|
||||||
return open_file_base::close();
|
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,
|
auto res = provider_.read_file_bytes(fsi_.api_path, read_size, read_offset,
|
||||||
data, stop_requested_);
|
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) /
|
auto progress = (static_cast<double>(read_offset + read_size) /
|
||||||
static_cast<double>(fsi_.size) * 100.0);
|
static_cast<double>(fsi_.size) * 100.0);
|
||||||
event_system::instance().raise<download_progress>(
|
event_system::instance().raise<download_progress>(
|
||||||
fsi_.api_path, fsi_.source_path, progress);
|
fsi_.api_path, fsi_.source_path, progress);
|
||||||
}
|
}
|
||||||
reset_timeout();
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user