From d7a681b69153ea99f03c128fce5d297ff1f635f6 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 5 Jun 2021 17:36:54 +0200 Subject: Fix incorrect times, add time to manga history --- src/plugins/FileManager.cpp | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) (limited to 'src/plugins/FileManager.cpp') diff --git a/src/plugins/FileManager.cpp b/src/plugins/FileManager.cpp index 04e284a..6532f3a 100644 --- a/src/plugins/FileManager.cpp +++ b/src/plugins/FileManager.cpp @@ -25,15 +25,6 @@ namespace QuickMedia { return ""; } - static std::filesystem::file_time_type file_get_last_modified_time(const std::filesystem::directory_entry &path, std::filesystem::file_time_type default_value) { - std::error_code err; - auto last_write_time = path.last_write_time(err); - if(err) - return default_value; - else - return last_write_time; - } - PluginResult FileManagerPage::submit(const std::string&, const std::string &url, std::vector &result_tabs) { std::filesystem::path new_path; if(url == "..") @@ -72,18 +63,20 @@ namespace QuickMedia { } PluginResult FileManagerPage::get_files_in_directory(BodyItems &result_items) { - std::vector paths; + std::vector> paths; try { for(auto &p : std::filesystem::directory_iterator(current_dir)) { - paths.push_back(p); + time_t last_modified_time = 0; + file_get_last_modified_time_seconds(p.path().c_str(), &last_modified_time); + paths.push_back(std::make_pair(p, last_modified_time)); } } catch(const std::filesystem::filesystem_error &err) { fprintf(stderr, "Failed to list files in directory %s, error: %s\n", current_dir.c_str(), err.what()); return PluginResult::ERR; } - std::sort(paths.begin(), paths.end(), [](const std::filesystem::directory_entry &path1, std::filesystem::directory_entry &path2) { - return file_get_last_modified_time(path1, std::filesystem::file_time_type::min()) > file_get_last_modified_time(path2, std::filesystem::file_time_type::min()); + std::sort(paths.begin(), paths.end(), [](const std::pair &path1, std::pair &path2) { + return path1.second > path2.second; }); if(current_dir != "/") { @@ -95,12 +88,12 @@ namespace QuickMedia { char time_str[128] = {0}; for(auto &p : paths) { std::error_code regular_file_err; - bool is_regular_file = p.is_regular_file(regular_file_err); + bool is_regular_file = p.first.is_regular_file(regular_file_err); if(regular_file_err) is_regular_file = true; // TODO: Check file magic number instead of extension? - const char *ext = get_ext(p.path()); + const char *ext = get_ext(p.first.path()); FileManagerMimeType file_mime_type = FILE_MANAGER_MIME_TYPE_OTHER; if(is_regular_file) { if(is_image_ext(ext)) @@ -112,11 +105,11 @@ namespace QuickMedia { if(is_regular_file && !(mime_type & file_mime_type)) continue; - auto body_item = BodyItem::create(p.path().filename().string()); + auto body_item = BodyItem::create(p.first.path().filename().string()); body_item->url = body_item->get_title(); if(file_mime_type == FILE_MANAGER_MIME_TYPE_IMAGE || file_mime_type == FILE_MANAGER_MIME_TYPE_VIDEO) { body_item->thumbnail_is_local = true; - body_item->thumbnail_url = p.path().string(); + body_item->thumbnail_url = p.first.path().string(); } else { body_item->thumbnail_is_local = true; if(is_regular_file) { @@ -128,13 +121,12 @@ namespace QuickMedia { } } - time_t last_modified_time = std::chrono::duration_cast(file_get_last_modified_time(p, std::filesystem::file_time_type::min()).time_since_epoch()).count(); struct tm last_modified_tm; - localtime_r(&last_modified_time, &last_modified_tm); - strftime(time_str, sizeof(time_str) - 1, "%a %b %d %H:%M", &last_modified_tm); + localtime_r(&p.second, &last_modified_tm); + strftime(time_str, sizeof(time_str) - 1, "%Y %b %d, %a %H:%M", &last_modified_tm); std::error_code file_size_err; - size_t file_size = p.file_size(file_size_err); + size_t file_size = p.first.file_size(file_size_err); if(file_size_err) file_size = 0; -- cgit v1.2.3