From 0dec0241fca108049b3b90e8b44f93de04bcc180 Mon Sep 17 00:00:00 2001 From: Oskar Date: Sun, 20 Oct 2024 22:55:40 +0200 Subject: some progress, still in the trenches --- trashsystem2.cpp | 42 +++++++++++++++++++++++++++++++++++------- trashsystem2.hpp | 24 ++++++++++++------------ 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/trashsystem2.cpp b/trashsystem2.cpp index 8e446df..59debdd 100644 --- a/trashsystem2.cpp +++ b/trashsystem2.cpp @@ -153,7 +153,7 @@ int64_t determine_highest_id(const initial_path_info &ipi) { std::string path_str = a.rget_path().filename(); const char *path_cstr = path_str.c_str(); char *endptr = nullptr; - auto strtoll_result = std::strtoll(path_cstr, &endptr, 10); + auto strtoll_result = std::strtoll(path_cstr, &endptr, 10); // maybe implement fail case for strtoll if(path_cstr == endptr) { DEBUG_STREAM( << "determine_highest_id: path_cstr == endptr" << std::endl); continue; @@ -191,16 +191,34 @@ TS_FUNCTION_RESULT get_file_info(const std::filesystem::path &path, return FUNCTION_FAILURE; } - std::cout << path << std::endl; + //std::cout << path << std::endl; auto id = determine_highest_id(ipi); + auto canon_path = std::filesystem::canonical(path); auto filesize = std::filesystem::file_size(path); - auto trashtime = std::time(nullptr); - auto file_name = path.filename(); - trashsys_log_info tli(id,filesize,trashtime,file_name,path,1); + auto trashtime = std::time(nullptr); // maybe check if time fails? + auto file_name = path.filename(); + trashsys_log_info tli(id,filesize,trashtime,file_name,canon_path,1); vtli.push_back(tli); return FUNCTION_SUCCESS; } +std::uintmax_t get_directory_size(std::filesystem::path &dirpath) { // Does not check for file existence, check before using + + std::vector de_files_only; + std::vector de_dirs_only; + for(auto &d : std::filesystem::directory_iterator(dirpath)) { + if(d.is_regular_file()) { + de_files_only.push_back(directory_entry(d.path(), false, true)); + } else if(d.is_directory()) { + de_dirs_only.push_back(directory_entry(d.path(), true)); + } else { + continue; + } + } + + return 0; +} + TS_FUNCTION_RESULT write_log_entry(const initial_path_info &ipi) { // function that writes logs if(ipi.is_fail()) {} @@ -382,10 +400,20 @@ int main (int argc, char **argv) { int index = 0; std::vector vtli; - for (index = optind ; index < argc ; index++) { // Actual loop that trashes files etc + for (index = optind ; index < argc ; index++) { // loop that gathers info about files std::filesystem::path file_to_trash = argv[index]; - get_file_info(file_to_trash, vtli, ipi); + if(get_file_info(file_to_trash, vtli, ipi) == FUNCTION_FAILURE) { + continue; + } } + for(auto &a : vtli) { + std::cout << a.rget_logid() << std::endl; + std::cout << a.rget_logfsz() << std::endl; + std::cout << a.rget_logtt() << std::endl; + std::cout << a.rget_logfn() << std::endl; + std::cout << a.rget_logop() << std::endl; + } + return 0; } diff --git a/trashsystem2.hpp b/trashsystem2.hpp index 6647ec6..5ba483a 100644 --- a/trashsystem2.hpp +++ b/trashsystem2.hpp @@ -38,17 +38,17 @@ const TS_FUNCTION_RESULT FUNCTION_SUCCESS = 0; class directory_entry { public: - directory_entry(std::filesystem::path dep, bool isd, bool isr, bool iso): - de_path(dep), is_dir(isd), is_reg(isr), is_other(iso) {} - const bool &ris_reg() const { return is_reg; } - const bool &ris_dir() const { return is_dir; } - const bool &ris_other() const { return is_other; } - const std::filesystem::path &rget_path() const { return de_path; } + directory_entry(std::filesystem::path dep, bool isd = false, bool isr = false, bool iso = false): + _de_path(dep), _is_dir(isd), _is_reg(isr), _is_other(iso) {} + bool is_reg() const { return _is_reg; } + bool is_dir() const { return _is_dir; } + bool is_other() const { return _is_other; } + const std::filesystem::path &rget_path() const { return _de_path; } private: - std::filesystem::path de_path; - bool is_dir = false; - bool is_reg = false; - bool is_other = false; + std::filesystem::path _de_path; + bool _is_dir = false; + bool _is_reg = false; + bool _is_other = false; }; class trashsys_log_info { @@ -58,14 +58,14 @@ public: ts_log_id(log_id), ts_log_filesize(log_filesize), ts_log_trashtime(log_trashtime), ts_log_filename(log_filename), ts_log_originalpath(log_originalpath), ts_is_dir(is_dir) { } const int64_t &rget_logid() const { return ts_log_id; } - const size_t &rget_logfsz() const { return ts_log_filesize; } + const std::uintmax_t &rget_logfsz() const { return ts_log_filesize; } const time_t &rget_logtt() const { return ts_log_trashtime; } const std::filesystem::path &rget_logfn() const { return ts_log_filename; } const std::filesystem::path &rget_logop() const { return ts_log_originalpath; } const bool &rget_isdir() const { return ts_is_dir; } private: int64_t ts_log_id; - size_t ts_log_filesize; + std::uintmax_t ts_log_filesize; time_t ts_log_trashtime; std::filesystem::path ts_log_filename; std::filesystem::path ts_log_originalpath; -- cgit v1.2.3