added download type selection

This commit is contained in:
Scott E. Graves 2024-12-22 09:33:33 -06:00
parent ad01aa72b2
commit 3b72e971e6
2 changed files with 35 additions and 4 deletions

View File

@ -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"

View File

@ -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<direct_open_file>(
utils::encryption::encrypting_reader::get_data_chunk_size(),
chunk_timeout, fsi, provider_);
} break;
case repertory::download_type::ring_buffer: {
closeable_file = std::make_shared<ring_buffer_open_file>(
utils::path::combine(config_.get_data_directory(), {"buffer"}),