diff --git a/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp b/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp index 2f444b8a..6d009317 100644 --- a/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp +++ b/repertory/librepertory/src/providers/encrypt/encrypt_provider.cpp @@ -83,7 +83,11 @@ auto encrypt_provider::create_api_file( file.api_parent = utils::path::get_parent_api_path(api_path); file.changed_date = times->get(utils::file::time_type::modified); file.creation_date = times->get(utils::file::time_type::created); - file.file_size = directory ? 0U : utils::encryption::encrypting_reader::calculate_encrypted_size( source_path); + file.file_size = + directory + ? 0U + : utils::encryption::encrypting_reader::calculate_encrypted_size( + source_path); file.modified_date = times->get(utils::file::time_type::written); file.source_path = source_path; @@ -369,28 +373,40 @@ auto encrypt_provider::get_directory_items( auto encrypt_provider::get_file(const std::string &api_path, api_file &file) const -> api_error { - bool exists{}; - auto res = is_directory(api_path, exists); - if (res != api_error::success) { - return res; - } - if (exists) { - return api_error::directory_exists; + static constexpr const std::string_view function_name{ + static_cast(__FUNCTION__), + }; + + try { + bool exists{}; + auto res = is_directory(api_path, exists); + if (res != api_error::success) { + return res; + } + if (exists) { + return api_error::directory_exists; + } + + auto result = db::db_select{*db_, source_table} + .column("source_path") + .where("api_path") + .equals(api_path) + .go(); + std::optional row; + if (not(result.get_row(row) && row.has_value())) { + return api_error::item_not_found; + } + + file = create_api_file( + api_path, false, + row->get_column("source_path").get_value()); + return api_error::success; + } catch (const std::exception &ex) { + utils::error::raise_error(function_name, ex, api_path, + "failed to get file"); } - auto result = db::db_select{*db_, source_table} - .column("source_path") - .where("api_path") - .equals(api_path) - .go(); - std::optional row; - if (not(result.get_row(row) && row.has_value())) { - return api_error::item_not_found; - } - - file = create_api_file( - api_path, false, row->get_column("source_path").get_value()); - return api_error::success; + return api_error::error; } auto encrypt_provider::get_file_list(api_file_list &list) const -> api_error { @@ -530,22 +546,33 @@ auto encrypt_provider::get_filesystem_item_from_source_path( auto encrypt_provider::get_filesystem_item_and_file( const std::string &api_path, api_file &file, filesystem_item &fsi) const -> api_error { - bool exists{}; - auto res = is_directory(api_path, exists); - if (res != api_error::success) { - return res; - } - if (exists) { - return api_error::directory_exists; + static constexpr const std::string_view function_name{ + static_cast(__FUNCTION__), + }; + + try { + bool exists{}; + auto res = is_directory(api_path, exists); + if (res != api_error::success) { + return res; + } + if (exists) { + return api_error::directory_exists; + } + + auto ret = get_filesystem_item(api_path, exists, fsi); + if (ret != api_error::success) { + return ret; + } + + file = create_api_file(api_path, false, fsi.source_path); + return api_error::success; + } catch (const std::exception &ex) { + utils::error::raise_error(function_name, ex, api_path, + "failed to get filesystem_item and file"); } - auto ret = get_filesystem_item(api_path, exists, fsi); - if (ret != api_error::success) { - return ret; - } - - file = create_api_file(api_path, false, fsi.source_path); - return api_error::success; + return api_error::error; } auto encrypt_provider::get_pinned_files() const -> std::vector { @@ -558,27 +585,34 @@ auto encrypt_provider::get_item_meta(const std::string &api_path, static_cast(__FUNCTION__), }; - auto result = db::db_select{*db_, source_table} - .column("source_path") - .where("api_path") - .equals(api_path) - .go(); - std::optional row; - if (not(result.get_row(row) && row.has_value())) { - return api_error::item_not_found; + try { + auto result = db::db_select{*db_, source_table} + .column("source_path") + .where("api_path") + .equals(api_path) + .go(); + std::optional row; + if (not(result.get_row(row) && row.has_value())) { + return api_error::item_not_found; + } + + auto source_path = row->get_column("source_path").get_value(); + + bool exists{}; + auto res = is_directory(api_path, exists); + if (res != api_error::success) { + return res; + } + + auto file = create_api_file(api_path, exists, source_path); + create_item_meta(meta, exists, file); + return api_error::success; + } catch (const std::exception &ex) { + utils::error::raise_error(function_name, ex, api_path, + "failed to get item meta"); } - auto source_path = row->get_column("source_path").get_value(); - - bool exists{}; - auto res = is_directory(api_path, exists); - if (res != api_error::success) { - return res; - } - - auto file = create_api_file(api_path, exists, source_path); - create_item_meta(meta, exists, file); - return api_error::success; + return api_error::error; } auto encrypt_provider::get_item_meta(const std::string &api_path, diff --git a/support/src/utils/file.cpp b/support/src/utils/file.cpp index f0be68e3..da380599 100644 --- a/support/src/utils/file.cpp +++ b/support/src/utils/file.cpp @@ -89,6 +89,8 @@ auto get_times(std::string_view path) -> std::optional { ret.written = static_cast( st.st_mtim.tv_nsec + st.st_mtim.tv_sec * utils::time::NANOS_PER_SECOND); #endif // defined(_WIN32) + + return ret; } catch (const std::exception &e) { utils::error::handle_exception(function_name, e); } catch (...) {