12#include <QDirIterator>
13#include <QtConcurrentRun>
23 NetworkDiskCacheGC::NetworkDiskCacheGC ()
29 &NetworkDiskCacheGC::HandleCollect);
30 timer->start (60 * 60 * 1000);
41 struct SizeCollectInfo
51 const QDir::Filters
filters = QDir::AllDirs | QDir:: Files | QDir::NoDotAndDotDot;
56 const auto&
path =
it.next ();
57 const auto&
info =
it.fileInfo ();
74 auto& list = Directories_ [
path];
81 void NetworkDiskCacheGC::UnregisterDirectory (
const QString&
path, CacheSizeGetters_t::iterator
pos)
83 if (!Directories_.contains (
path))
86 <<
"unknown directory"
91 auto& list = Directories_ [
path];
97 Directories_.remove (
path);
98 LastSizes_.remove (
path);
127 void NetworkDiskCacheGC::HandleCollect ()
132 <<
"already collecting";
137 for (
const auto& pair : Util::
Stlize (Directories_))
139 const auto&
getters = pair.second;
148 IsCollecting_ =
true;
151 QtConcurrent::run ([
dirs]
154 for (
const auto& pair :
dirs)
160 IsCollecting_ =
false;
Garbage collection for a set of network disk caches.
Util::DefaultScopeGuard RegisterDirectory(const QString &path, const std::function< int()> &sizeGetter)
Registers the given cache path.
static NetworkDiskCacheGC & Instance()
Returns a single global instance of the GC manager.
QFuture< qint64 > GetCurrentSize(const QString &path) const
Schedules calculation of the path total size.
auto Stlize(Assoc &&assoc) noexcept
Converts an Qt's associative sequence assoc to an STL-like iteratable range.
Container< T > Filter(const Container< T > &c, F f)
detail::ScopeGuard< F > MakeScopeGuard(const F &f)
Returns an object performing passed function on scope exit.
QMultiMap< QDateTime, QString > Items_