54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
/*
|
|
This file is part of Telegram Desktop,
|
|
the official desktop application for the Telegram messaging service.
|
|
|
|
For license and copyright information please follow this link:
|
|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
*/
|
|
#include "storage/storage_clear_legacy.h"
|
|
|
|
#include <crl/crl_async.h>
|
|
|
|
namespace Storage {
|
|
namespace {
|
|
|
|
constexpr auto kClearPartSize = size_type(10000);
|
|
|
|
} // namespace
|
|
|
|
void ClearLegacyFilesPart(
|
|
const QString &base,
|
|
CollectGoodFiles filter,
|
|
base::flat_set<QString> &&skip = {}) {
|
|
filter([
|
|
=,
|
|
files = details::CollectFiles(base, kClearPartSize, skip)
|
|
](base::flat_set<QString> &&skip) mutable {
|
|
crl::async([
|
|
=,
|
|
files = std::move(files),
|
|
skip = std::move(skip)
|
|
]() mutable {
|
|
for (const auto &name : files) {
|
|
if (!skip.contains(name)
|
|
&& !details::RemoveLegacyFile(base + name)) {
|
|
skip.emplace(name);
|
|
}
|
|
}
|
|
if (files.size() == kClearPartSize) {
|
|
ClearLegacyFilesPart(base, filter, std::move(skip));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
void ClearLegacyFiles(const QString &base, CollectGoodFiles filter) {
|
|
Expects(base.endsWith('/'));
|
|
|
|
crl::async([=] {
|
|
ClearLegacyFilesPart(base, std::move(filter));
|
|
});
|
|
}
|
|
|
|
} // namespace Storage
|