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