aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/FileManager.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-06-05 17:36:54 +0200
committerdec05eba <dec05eba@protonmail.com>2021-06-05 17:36:54 +0200
commitd7a681b69153ea99f03c128fce5d297ff1f635f6 (patch)
tree83e446359b316adbe57ce618c773d27dc88a1cd6 /src/plugins/FileManager.cpp
parentcbcdbdbf488b73120b2b604343ac64213cdbb1f8 (diff)
Fix incorrect times, add time to manga history
Diffstat (limited to 'src/plugins/FileManager.cpp')
-rw-r--r--src/plugins/FileManager.cpp34
1 files changed, 13 insertions, 21 deletions
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<Tab> &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<std::filesystem::directory_entry> paths;
+ std::vector<std::pair<std::filesystem::directory_entry, time_t>> 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<std::filesystem::directory_entry, time_t> &path1, std::pair<std::filesystem::directory_entry, time_t> &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<std::chrono::seconds>(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;