added download type selection
This commit is contained in:
parent
ad01aa72b2
commit
3b72e971e6
@ -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"
|
||||
|
@ -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"}),
|
||||
|
Loading…
x
Reference in New Issue
Block a user