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 "file_manager/direct_open_file.hpp"
|
||||||
|
|
||||||
#include "app_config.hpp"
|
|
||||||
#include "file_manager/open_file_base.hpp"
|
#include "file_manager/open_file_base.hpp"
|
||||||
#include "providers/i_provider.hpp"
|
#include "providers/i_provider.hpp"
|
||||||
#include "types/repertory.hpp"
|
#include "types/repertory.hpp"
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "app_config.hpp"
|
#include "app_config.hpp"
|
||||||
#include "db/file_mgr_db.hpp"
|
#include "db/file_mgr_db.hpp"
|
||||||
#include "file_manager/cache_size_mgr.hpp"
|
#include "file_manager/cache_size_mgr.hpp"
|
||||||
|
#include "file_manager/direct_open_file.hpp"
|
||||||
#include "file_manager/events.hpp"
|
#include "file_manager/events.hpp"
|
||||||
#include "file_manager/open_file.hpp"
|
#include "file_manager/open_file.hpp"
|
||||||
#include "file_manager/open_file_base.hpp"
|
#include "file_manager/open_file_base.hpp"
|
||||||
@ -403,12 +404,43 @@ auto file_manager::open(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (not closeable_file) {
|
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()
|
auto chunk_timeout = config_.get_enable_download_timeout()
|
||||||
? config_.get_download_timeout_secs()
|
? config_.get_download_timeout_secs()
|
||||||
: 0U;
|
: 0U;
|
||||||
switch (type) {
|
switch (get_download_type(config_.get_preferred_download_type())) {
|
||||||
// case repertory::download_type::direct:
|
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: {
|
case repertory::download_type::ring_buffer: {
|
||||||
closeable_file = std::make_shared<ring_buffer_open_file>(
|
closeable_file = std::make_shared<ring_buffer_open_file>(
|
||||||
utils::path::combine(config_.get_data_directory(), {"buffer"}),
|
utils::path::combine(config_.get_data_directory(), {"buffer"}),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user