From 3b72e971e63dc6544e61b0bd4a75210487e1ebb6 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sun, 22 Dec 2024 09:33:33 -0600 Subject: [PATCH] added download type selection --- .../src/file_manager/direct_open_file.cpp | 1 - .../src/file_manager/file_manager.cpp | 38 +++++++++++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/repertory/librepertory/src/file_manager/direct_open_file.cpp b/repertory/librepertory/src/file_manager/direct_open_file.cpp index 867856b7..49ca81c4 100644 --- a/repertory/librepertory/src/file_manager/direct_open_file.cpp +++ b/repertory/librepertory/src/file_manager/direct_open_file.cpp @@ -21,7 +21,6 @@ */ #include "file_manager/direct_open_file.hpp" -#include "app_config.hpp" #include "file_manager/open_file_base.hpp" #include "providers/i_provider.hpp" #include "types/repertory.hpp" diff --git a/repertory/librepertory/src/file_manager/file_manager.cpp b/repertory/librepertory/src/file_manager/file_manager.cpp index f0cfdb09..869f6492 100644 --- a/repertory/librepertory/src/file_manager/file_manager.cpp +++ b/repertory/librepertory/src/file_manager/file_manager.cpp @@ -24,6 +24,7 @@ #include "app_config.hpp" #include "db/file_mgr_db.hpp" #include "file_manager/cache_size_mgr.hpp" +#include "file_manager/direct_open_file.hpp" #include "file_manager/events.hpp" #include "file_manager/open_file.hpp" #include "file_manager/open_file_base.hpp" @@ -403,12 +404,43 @@ auto file_manager::open( } if (not closeable_file) { - auto type = config_.get_preferred_download_type(); + const auto get_download_type = [this, + &fsi](download_type type) -> download_type { + if (fsi.size == 0U) { + return download_type::fallback; + } + + if (type == download_type::direct) { + return type; + } + + if (type == download_type::fallback) { + auto free_space = + utils::file::get_free_drive_space(config_.get_cache_directory()); + if (fsi.size < free_space) { + return download_type::fallback; + } + } + + auto free_space = utils::file::get_free_drive_space( + utils::path::combine(config_.get_data_directory(), {"buffer"})); + if (config_.get_ring_buffer_file_size() < free_space) { + return download_type::ring_buffer; + } + + return download_type::direct; + }; + auto chunk_timeout = config_.get_enable_download_timeout() ? config_.get_download_timeout_secs() : 0U; - switch (type) { - // case repertory::download_type::direct: + switch (get_download_type(config_.get_preferred_download_type())) { + case repertory::download_type::direct: { + closeable_file = std::make_shared( + utils::encryption::encrypting_reader::get_data_chunk_size(), + chunk_timeout, fsi, provider_); + } break; + case repertory::download_type::ring_buffer: { closeable_file = std::make_shared( utils::path::combine(config_.get_data_directory(), {"buffer"}),