LeechCraft
0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
networkdiskcache.cpp
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#include "
networkdiskcache.h
"
10
#include <QtDebug>
11
#include <QDir>
12
#include <QMutexLocker>
13
#include <
util/sys/paths.h
>
14
#include <
util/threads/futures.h
>
15
#include "
networkdiskcachegc.h
"
16
17
namespace
LC::Util
18
{
19
namespace
20
{
21
QString GetCacheDir (
const
QString& subpath)
22
{
23
return
GetUserDir
(
UserDir::Cache
,
"network/"
+ subpath).absolutePath ();
24
}
25
}
26
27
NetworkDiskCache::NetworkDiskCache
(
const
QString& subpath, QObject *parent)
28
: QNetworkDiskCache (parent)
29
, GcGuard_ (
NetworkDiskCacheGC
::Instance ().RegisterDirectory (GetCacheDir (subpath),
30
[this] {
return
maximumCacheSize (); }))
31
{
32
setCacheDirectory (GetCacheDir (subpath));
33
}
34
35
qint64
NetworkDiskCache::cacheSize
()
const
36
{
37
return
CurrentSize_;
38
}
39
40
QIODevice*
NetworkDiskCache::data
(
const
QUrl& url)
41
{
42
QMutexLocker lock (&InsertRemoveMutex_);
43
return
QNetworkDiskCache::data (url);
44
}
45
46
void
NetworkDiskCache::insert
(QIODevice *device)
47
{
48
QMutexLocker lock (&InsertRemoveMutex_);
49
if
(!PendingDev2Url_.contains (device))
50
{
51
qWarning () << Q_FUNC_INFO
52
<<
"stall device detected"
;
53
return
;
54
}
55
56
PendingUrl2Devs_ [PendingDev2Url_.take (device)].removeAll (device);
57
58
CurrentSize_ += device->size ();
59
QNetworkDiskCache::insert (device);
60
}
61
62
QNetworkCacheMetaData
NetworkDiskCache::metaData
(
const
QUrl& url)
63
{
64
QMutexLocker lock (&InsertRemoveMutex_);
65
return
QNetworkDiskCache::metaData (url);
66
}
67
68
QIODevice*
NetworkDiskCache::prepare
(
const
QNetworkCacheMetaData& metadata)
69
{
70
QMutexLocker lock (&InsertRemoveMutex_);
71
const
auto
dev = QNetworkDiskCache::prepare (metadata);
72
PendingDev2Url_ [dev] = metadata.url ();
73
PendingUrl2Devs_ [metadata.url ()] << dev;
74
return
dev;
75
}
76
77
bool
NetworkDiskCache::remove
(
const
QUrl& url)
78
{
79
QMutexLocker lock (&InsertRemoveMutex_);
80
for
(
const
auto
dev : PendingUrl2Devs_.take (url))
81
PendingDev2Url_.remove (dev);
82
return
QNetworkDiskCache::remove (url);
83
}
84
85
void
NetworkDiskCache::updateMetaData
(
const
QNetworkCacheMetaData&
metaData
)
86
{
87
QMutexLocker lock (&InsertRemoveMutex_);
88
QNetworkDiskCache::updateMetaData (
metaData
);
89
}
90
91
qint64
NetworkDiskCache::expire
()
92
{
93
if
(CurrentSize_ < 0)
94
{
95
const
auto
& dir = cacheDirectory ();
96
Util::Sequence (
this
,
NetworkDiskCacheGC::Instance
().GetCurrentSize (dir)) >>
97
[
this
] (qint64 res) { CurrentSize_ = res; };
98
99
return
maximumCacheSize () * 8 / 10;
100
}
101
102
return
CurrentSize_;
103
}
104
}
LC::Util::NetworkDiskCacheGC
Garbage collection for a set of network disk caches.
Definition
networkdiskcachegc.h:31
LC::Util::NetworkDiskCacheGC::Instance
static NetworkDiskCacheGC & Instance()
Returns a single global instance of the GC manager.
Definition
networkdiskcachegc.cpp:33
LC::Util::NetworkDiskCache::cacheSize
qint64 cacheSize() const override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:35
LC::Util::NetworkDiskCache::data
QIODevice * data(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:40
LC::Util::NetworkDiskCache::remove
bool remove(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:77
LC::Util::NetworkDiskCache::updateMetaData
void updateMetaData(const QNetworkCacheMetaData &metaData) override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:85
LC::Util::NetworkDiskCache::expire
qint64 expire() override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:91
LC::Util::NetworkDiskCache::NetworkDiskCache
NetworkDiskCache(const QString &subpath, QObject *parent=nullptr)
Constructs the new disk cache.
Definition
networkdiskcache.cpp:27
LC::Util::NetworkDiskCache::metaData
QNetworkCacheMetaData metaData(const QUrl &url) override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:62
LC::Util::NetworkDiskCache::insert
void insert(QIODevice *device) override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:46
LC::Util::NetworkDiskCache::prepare
QIODevice * prepare(const QNetworkCacheMetaData &) override
Reimplemented from QNetworkDiskCache.
Definition
networkdiskcache.cpp:68
futures.h
LC::Util
Definition
icoreproxy.h:34
LC::Util::UserDir::Cache
@ Cache
Cache for volatile data.
Definition
paths.h:151
LC::Util::GetUserDir
QDir GetUserDir(UserDir dir, const QString &subpath)
Definition
paths.cpp:97
networkdiskcache.h
networkdiskcachegc.h
paths.h
src
util
network
networkdiskcache.cpp
Generated by
1.17.0