From 5507d58339ea303492d4f03d529a6de38bc6c3df Mon Sep 17 00:00:00 2001 From: levlam Date: Sun, 28 Jun 2020 22:04:21 +0300 Subject: [PATCH] Better handling of secondary file types in scan_fs. GitOrigin-RevId: 7602a2e14c39fb280be03053160e2ad922ea1ca4 --- td/telegram/files/FileStatsWorker.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/td/telegram/files/FileStatsWorker.cpp b/td/telegram/files/FileStatsWorker.cpp index c46554cb3..5c559adb8 100644 --- a/td/telegram/files/FileStatsWorker.cpp +++ b/td/telegram/files/FileStatsWorker.cpp @@ -100,13 +100,14 @@ struct FsFileInfo { template void scan_fs(CancellationToken &token, CallbackT &&callback) { + std::unordered_set scanned_file_dirs; for (int32 i = 0; i < MAX_FILE_TYPE; i++) { - int32 main_file_type = static_cast(get_main_file_type(static_cast(i))); - if (i != main_file_type) { - continue; - } auto file_type = static_cast(i); auto file_dir = get_files_dir(file_type); + if (!scanned_file_dirs.insert(file_dir).second) { + continue; + } + auto main_file_type = get_main_file_type(file_type); walk_path(file_dir, [&](CSlice path, WalkPath::Type type) { if (token) { return WalkPath::Action::Abort; @@ -120,7 +121,7 @@ void scan_fs(CancellationToken &token, CallbackT &&callback) { return WalkPath::Action::Continue; } auto stat = r_stat.move_as_ok(); - if (ends_with(path, "/.nomedia") && stat.size_ == 0) { + if (stat.size_ == 0 && ends_with(path, "/.nomedia")) { // skip .nomedia file return WalkPath::Action::Continue; } @@ -128,7 +129,7 @@ void scan_fs(CancellationToken &token, CallbackT &&callback) { FsFileInfo info; info.path = path.str(); info.size = stat.real_size_; - info.file_type = file_type; + info.file_type = main_file_type; info.atime_nsec = stat.atime_nsec_; info.mtime_nsec = stat.mtime_nsec_; callback(info);