From 3d93712aaca6a0312976ddf4306518dbb3e18fb9 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Fri, 12 Sep 2025 10:40:28 -0500 Subject: [PATCH] Pinning a file should automatically initiate a download to cache #38 --- .../src/file_manager/file_manager.cpp | 33 +++++++------------ .../include/mocks/mock_provider.hpp | 3 +- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/repertory/librepertory/src/file_manager/file_manager.cpp b/repertory/librepertory/src/file_manager/file_manager.cpp index cfd120c8..202fd718 100644 --- a/repertory/librepertory/src/file_manager/file_manager.cpp +++ b/repertory/librepertory/src/file_manager/file_manager.cpp @@ -161,7 +161,8 @@ auto file_manager::download_pinned_file(const std::string &api_path) -> bool { return false; } - auto res = provider_.get_file_meta(api_path, META_PINNED, str_pinned); + std::string str_pinned; + auto res = provider_.get_item_meta(api_path, META_PINNED, str_pinned); if (res != api_error::success) { return false; } @@ -171,30 +172,18 @@ auto file_manager::download_pinned_file(const std::string &api_path) -> bool { std::uint64_t handle{REPERTORY_INVALID_HANDLE}; std::shared_ptr open_file; - if (open_file_lookup_.contains(api_path)) { - auto closeable_file = open_file_lookup_.at(api_path); - if (not get_open_file(closeable_file->get_handles().at(0U), true, - open_file)) { - return false; - } - } else { - res = open(api_path, false, {}, handle); - if (res != api_error::success) { - return false; - } - - if (not get_open_file(handle, true, open_file)) { - close(handle); - return false; - } + res = open(api_path, false, {}, handle, open_file); + if (res != api_error::success) { + return false; } - open_file.download(); - if (handle != REPERTORY_INVALID_HANDLE) { - close(handle); + auto ret = get_open_file(handle, true, open_file); + if (ret) { + open_file->download(); } - return true; + close(handle); + return ret; } catch (const std::exception &ex) { utils::error::raise_api_path_error(function_name, api_path, ex, "failed to download pinned file"); @@ -1005,7 +994,7 @@ void file_manager::start() { : 0U, fsi, provider_, entry.read_state, *this); open_file_lookup_[entry.api_path] = closeable_file; - closeable_file.download(); + closeable_file->download(); event_system::instance().raise( fsi.api_path, fsi.source_path, function_name); diff --git a/repertory/repertory_test/include/mocks/mock_provider.hpp b/repertory/repertory_test/include/mocks/mock_provider.hpp index 3dddb698..d4b88d4b 100644 --- a/repertory/repertory_test/include/mocks/mock_provider.hpp +++ b/repertory/repertory_test/include/mocks/mock_provider.hpp @@ -151,8 +151,7 @@ public: (override)); MOCK_METHOD(api_error, set_item_meta, - (const std::string &api_path, const api_meta_map &meta), - (override)); + (const std::string &api_path, api_meta_map meta), (override)); MOCK_METHOD(bool, start, (api_item_added_callback api_item_added, i_file_manager *fm),