This commit is contained in:
2024-08-29 14:39:18 -05:00
parent 92c0e4dabd
commit 272d9a1502
4 changed files with 146 additions and 119 deletions

View File

@ -27,6 +27,35 @@
#include "utils/path.hpp"
namespace repertory::utils::file {
enum class time_type {
accessed,
created,
modified,
written,
};
struct file_times final {
std::uint64_t accessed{};
std::uint64_t created{};
std::uint64_t modified{};
std::uint64_t written{};
[[nodiscard]] auto get(time_type type) const -> std::uint64_t {
switch (type) {
case time_type::accessed:
return accessed;
case time_type::created:
return created;
case time_type::modified:
return modified;
case time_type::written:
return written;
}
throw std::runtime_error("type_type not supported") :
}
};
[[nodiscard]] inline auto
directory_exists_in_path(std::string_view path,
std::string_view sub_directory) -> bool;
@ -42,6 +71,18 @@ file_exists_in_path(std::string_view path, std::string_view file_name) -> bool;
file_exists_in_path(std::wstring_view path,
std::wstring_view file_name) -> bool;
[[nodiscard]] auto get_time(std::string_view path, time_type type) const
-> std::optional<std::uint64_t>;
[[nodiscard]] auto get_time(std::wstring_view path, time_type type) const
-> std::optional<std::uint64_t>;
[[nodiscard]] auto
get_times(std::string_view path) -> std::optional<file_times>;
[[nodiscard]] auto
get_times(std::wstring_view path) -> std::optional<file_times>;
#if defined(PROJECT_ENABLE_LIBDSM)
[[nodiscard]] auto
smb_create_and_validate_relative_path(std::string_view smb_path,
@ -77,13 +118,6 @@ smb_get_parent_path(std::string_view smb_path) -> std::string;
struct i_fs_item {
using fs_item_t = std::unique_ptr<i_fs_item>;
enum class time_types {
access,
creation,
modified,
write,
};
virtual ~i_fs_item() = default;
[[nodiscard]] virtual auto copy_to(std::string_view to_path,
@ -98,7 +132,8 @@ struct i_fs_item {
[[nodiscard]] virtual auto get_path() const -> std::string = 0;
[[nodiscard]] virtual auto get_time(time_types type) const -> std::uint64_t;
[[nodiscard]] virtual auto
get_time(time_type type) const -> std::optional<std::uint64_t>;
[[nodiscard]] virtual auto is_directory_item() const -> bool = 0;
@ -360,7 +395,8 @@ public:
return file_->get_read_buffer_size();
}
[[nodiscard]] auto get_time(time_types type) const -> std::uint64_t override {
[[nodiscard]] auto
get_time(time_type type) const -> std::optional<std::uint64_t> override {
return file_->get_time(type);
}
@ -479,7 +515,8 @@ public:
return file_->get_read_buffer_size();
}
[[nodiscard]] auto get_time(time_types type) const -> std::uint64_t override {
[[nodiscard]] auto
get_time(time_type type) const -> std::optional<std::uint64_t> override {
return file_->get_time(type);
}
@ -702,11 +739,12 @@ public:
return read_buffer_size;
}
[[nodiscard]] static auto get_time(smb_session *session, smb_tid tid,
std::string path,
time_types type) -> std::uint64_t;
[[nodiscard]] static auto
get_time(smb_session *session, smb_tid tid, std::string path,
time_type type) -> std::optional<std::uint64_t>;
[[nodiscard]] auto get_time(time_types type) const -> std::uint64_t override {
[[nodiscard]] auto
get_time(time_type type) const -> std::optional<std::uint64_t> override {
return get_time(session_.get(), tid_, path_, type);
}
@ -838,7 +876,8 @@ public:
[[nodiscard]] auto get_path() const -> std::string override { return path_; }
[[nodiscard]] auto get_time(time_types type) const -> std::uint64_t override {
[[nodiscard]] auto
get_time(time_type type) const -> std::optional<std::uint64_t> override {
return smb_file::get_time(session_.get(), tid_, path_, type);
}