diff --git a/repertory/librepertory/src/providers/sia/sia_provider.cpp b/repertory/librepertory/src/providers/sia/sia_provider.cpp index 0c7a157d..9cbfae60 100644 --- a/repertory/librepertory/src/providers/sia/sia_provider.cpp +++ b/repertory/librepertory/src/providers/sia/sia_provider.cpp @@ -26,6 +26,7 @@ #include "events/events.hpp" #include "file_manager/i_file_manager.hpp" #include "providers/base_provider.hpp" +#include "providers/s3/s3_provider.hpp" #include "types/repertory.hpp" #include "utils/error_utils.hpp" #include "utils/file_utils.hpp" @@ -35,6 +36,18 @@ #include "utils/time.hpp" #include "utils/utils.hpp" +namespace { +[[nodiscard]] auto +get_last_modified(const nlohmann::json &obj) -> std::uint64_t { + try { + return repertory::s3_provider::convert_api_date( + obj["modTime"].get()); + } catch (...) { + return repertory::utils::time::get_time_now(); + } +} +} // namespace + namespace repertory { sia_provider::sia_provider(app_config &config, i_http_comm &comm) : base_provider(config, comm) {} @@ -130,13 +143,12 @@ auto sia_provider::get_directory_items_impl( } api_file file{}; - api_meta_map meta{}; if (get_item_meta(entry_api_path, meta) == api_error::item_not_found) { file = create_api_file(entry_api_path, "", directory ? 0U : entry["size"].get(), - utils::time::get_time_now()); + get_last_modified(entry)); get_api_item_added()(directory, file); auto res = get_item_meta(entry_api_path, meta); if (res != api_error::success) { @@ -187,7 +199,8 @@ auto sia_provider::get_file(const std::string &api_path, api_meta_map meta{}; if (get_item_meta(api_path, meta) == api_error::item_not_found) { - file = create_api_file(api_path, "", size, utils::time::get_time_now()); + file = create_api_file(api_path, "", size, + get_last_modified(file_data["object"])); get_api_item_added()(false, file); } else { file = create_api_file(api_path, size, meta); @@ -223,7 +236,7 @@ auto sia_provider::get_file_list(api_file_list &list) const -> api_error { if (get_item_meta(entry_api_path, meta) == api_error::item_not_found) { auto dir = create_api_file(entry_api_path, "", 0U, - utils::time::get_time_now()); + get_last_modified(entry)); get_api_item_added()(true, dir); } @@ -240,7 +253,7 @@ auto sia_provider::get_file_list(api_file_list &list) const -> api_error { api_error::item_not_found) { file = create_api_file(entry_api_path, "", entry["size"].get(), - utils::time::get_time_now()); + get_last_modified(entry)); get_api_item_added()(false, file); } else { file = create_api_file(entry_api_path,