This commit is contained in:
2024-12-26 08:06:22 -06:00
parent bc0e216b75
commit daabab3a1b
3 changed files with 15 additions and 50 deletions

View File

@ -64,10 +64,10 @@ private:
stop_type stop_requested_{false};
private:
auto download_chunk(std::size_t chunk, bool skip_active) -> api_error;
void background_reader_thread();
auto download_chunk(std::size_t chunk, bool skip_active) -> api_error;
protected:
[[nodiscard]] auto is_download_complete() const -> bool override {
return false;
@ -78,24 +78,10 @@ public:
void forward(std::size_t count);
[[nodiscard]] auto get_current_chunk() const -> std::size_t {
return ring_pos_;
}
[[nodiscard]] auto get_first_chunk() const -> std::size_t {
return ring_begin_;
}
[[nodiscard]] auto get_last_chunk() const -> std::size_t { return ring_end_; }
[[nodiscard]] auto get_read_state() const -> boost::dynamic_bitset<> override;
[[nodiscard]] auto get_read_state(std::size_t chunk) const -> bool override;
[[nodiscard]] auto get_total_chunks() const -> std::size_t {
return total_chunks_;
}
[[nodiscard]] auto is_complete() const -> bool override { return true; }
[[nodiscard]] auto is_write_supported() const -> bool override {
@ -122,11 +108,11 @@ public:
void reverse(std::size_t count);
void set(std::size_t first_chunk, std::size_t current_chunk);
void set_api_path(const std::string &api_path) override;
[[nodiscard]] auto write(std::uint64_t, const data_buffer &, std::size_t &)
[[nodiscard]] auto write(std::uint64_t /* write_offset */,
const data_buffer & /* data */,
std::size_t & /* bytes_written */)
-> api_error override {
return api_error::not_supported;
}

View File

@ -65,10 +65,10 @@ private:
stop_type stop_requested_{false};
private:
auto download_chunk(std::size_t chunk, bool skip_active) -> api_error;
void background_reader_thread();
auto download_chunk(std::size_t chunk, bool skip_active) -> api_error;
protected:
[[nodiscard]] auto is_download_complete() const -> bool override {
return false;
@ -110,7 +110,8 @@ public:
[[nodiscard]] auto native_operation(native_operation_callback callback)
-> api_error override;
[[nodiscard]] auto native_operation(std::uint64_t, native_operation_callback)
[[nodiscard]] auto native_operation(std::uint64_t /* new_file_size */,
native_operation_callback /* callback */)
-> api_error override {
return api_error::not_supported;
}
@ -128,7 +129,9 @@ public:
void set_api_path(const std::string &api_path) override;
[[nodiscard]] auto write(std::uint64_t, const data_buffer &, std::size_t &)
[[nodiscard]] auto write(std::uint64_t /* write_offset */,
const data_buffer & /* data */,
std::size_t & /* bytes_written */)
-> api_error override {
return api_error::not_supported;
}

View File

@ -30,8 +30,8 @@
namespace repertory {
direct_open_file::direct_open_file(std::uint64_t chunk_size,
std::uint8_t chunk_timeout,
filesystem_item fsi, i_provider &provider)
std::uint8_t chunk_timeout,
filesystem_item fsi, i_provider &provider)
: open_file_base(chunk_size, chunk_timeout, fsi, provider),
ring_state_(ring_size),
total_chunks_(static_cast<std::size_t>(
@ -254,7 +254,7 @@ void direct_open_file::reverse(std::size_t count) {
}
auto direct_open_file::read(std::size_t read_size, std::uint64_t read_offset,
data_buffer &data) -> api_error {
data_buffer &data) -> api_error {
if (fsi_.directory) {
return api_error::invalid_operation;
}
@ -312,30 +312,6 @@ auto direct_open_file::read(std::size_t read_size, std::uint64_t read_offset,
return res;
}
void direct_open_file::set(std::size_t first_chunk,
std::size_t current_chunk) {
mutex_lock chunk_lock(chunk_mtx_);
if (first_chunk >= total_chunks_) {
chunk_notify_.notify_all();
throw std::runtime_error("first chunk must be less than total chunks");
}
ring_begin_ = first_chunk;
ring_end_ =
std::min(total_chunks_ - 1U, ring_begin_ + ring_state_.size() - 1U);
if (current_chunk > ring_end_) {
chunk_notify_.notify_all();
throw std::runtime_error(
"current chunk must be less than or equal to last chunk");
}
ring_pos_ = current_chunk;
ring_state_.set(0U, ring_state_.size(), false);
chunk_notify_.notify_all();
}
void direct_open_file::set_api_path(const std::string &api_path) {
mutex_lock chunk_lock(chunk_mtx_);
open_file_base::set_api_path(api_path);