refactor: more net cleanup
This runs clang-tidy on some other files in launcher/net/. This also makes use of some JSON wrappers in HttpMetaCache, instead of using the Qt stuff directly. Lastly, this removes useless null checks (crashes don't occur because of this, but because of concurrent usage / free of the QByteArray pointer), and fix a fixme in Download.h
This commit is contained in:
@ -14,109 +14,88 @@
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <QString>
|
||||
#include <QMap>
|
||||
#include <qtimer.h>
|
||||
#include <QMap>
|
||||
#include <QString>
|
||||
#include <memory>
|
||||
|
||||
class HttpMetaCache;
|
||||
|
||||
class MetaEntry
|
||||
{
|
||||
friend class HttpMetaCache;
|
||||
protected:
|
||||
MetaEntry() {}
|
||||
public:
|
||||
bool isStale()
|
||||
{
|
||||
return stale;
|
||||
}
|
||||
void setStale(bool stale)
|
||||
{
|
||||
this->stale = stale;
|
||||
}
|
||||
QString getFullPath();
|
||||
QString getRemoteChangedTimestamp()
|
||||
{
|
||||
return remote_changed_timestamp;
|
||||
}
|
||||
void setRemoteChangedTimestamp(QString remote_changed_timestamp)
|
||||
{
|
||||
this->remote_changed_timestamp = remote_changed_timestamp;
|
||||
}
|
||||
void setLocalChangedTimestamp(qint64 timestamp)
|
||||
{
|
||||
local_changed_timestamp = timestamp;
|
||||
}
|
||||
QString getETag()
|
||||
{
|
||||
return etag;
|
||||
}
|
||||
void setETag(QString etag)
|
||||
{
|
||||
this->etag = etag;
|
||||
}
|
||||
QString getMD5Sum()
|
||||
{
|
||||
return md5sum;
|
||||
}
|
||||
void setMD5Sum(QString md5sum)
|
||||
{
|
||||
this->md5sum = md5sum;
|
||||
}
|
||||
protected:
|
||||
class MetaEntry {
|
||||
friend class HttpMetaCache;
|
||||
|
||||
protected:
|
||||
MetaEntry() = default;
|
||||
|
||||
public:
|
||||
auto isStale() -> bool { return stale; }
|
||||
void setStale(bool stale) { this->stale = stale; }
|
||||
|
||||
auto getFullPath() -> QString;
|
||||
|
||||
auto getRemoteChangedTimestamp() -> QString { return remote_changed_timestamp; }
|
||||
void setRemoteChangedTimestamp(QString remote_changed_timestamp) { this->remote_changed_timestamp = remote_changed_timestamp; }
|
||||
void setLocalChangedTimestamp(qint64 timestamp) { local_changed_timestamp = timestamp; }
|
||||
|
||||
auto getETag() -> QString { return etag; }
|
||||
void setETag(QString etag) { this->etag = etag; }
|
||||
|
||||
auto getMD5Sum() -> QString { return md5sum; }
|
||||
void setMD5Sum(QString md5sum) { this->md5sum = md5sum; }
|
||||
|
||||
protected:
|
||||
QString baseId;
|
||||
QString basePath;
|
||||
QString relativePath;
|
||||
QString md5sum;
|
||||
QString etag;
|
||||
qint64 local_changed_timestamp = 0;
|
||||
QString remote_changed_timestamp; // QString for now, RFC 2822 encoded time
|
||||
QString remote_changed_timestamp; // QString for now, RFC 2822 encoded time
|
||||
bool stale = true;
|
||||
};
|
||||
|
||||
typedef std::shared_ptr<MetaEntry> MetaEntryPtr;
|
||||
using MetaEntryPtr = std::shared_ptr<MetaEntry>;
|
||||
|
||||
class HttpMetaCache : public QObject
|
||||
{
|
||||
class HttpMetaCache : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
public:
|
||||
// supply path to the cache index file
|
||||
HttpMetaCache(QString path = QString());
|
||||
~HttpMetaCache();
|
||||
~HttpMetaCache() override;
|
||||
|
||||
// get the entry solely from the cache
|
||||
// you probably don't want this, unless you have some specific caching needs.
|
||||
MetaEntryPtr getEntry(QString base, QString resource_path);
|
||||
auto getEntry(QString base, QString resource_path) -> MetaEntryPtr;
|
||||
|
||||
// get the entry from cache and verify that it isn't stale (within reason)
|
||||
MetaEntryPtr resolveEntry(QString base, QString resource_path,
|
||||
QString expected_etag = QString());
|
||||
auto resolveEntry(QString base, QString resource_path, QString expected_etag = QString()) -> MetaEntryPtr;
|
||||
|
||||
// add a previously resolved stale entry
|
||||
bool updateEntry(MetaEntryPtr stale_entry);
|
||||
auto updateEntry(MetaEntryPtr stale_entry) -> bool;
|
||||
|
||||
// evict selected entry from cache
|
||||
bool evictEntry(MetaEntryPtr entry);
|
||||
auto evictEntry(MetaEntryPtr entry) -> bool;
|
||||
|
||||
void addBase(QString base, QString base_root);
|
||||
|
||||
// (re)start a timer that calls SaveNow later.
|
||||
void SaveEventually();
|
||||
void Load();
|
||||
QString getBasePath(QString base);
|
||||
public
|
||||
slots:
|
||||
|
||||
auto getBasePath(QString base) -> QString;
|
||||
|
||||
public slots:
|
||||
void SaveNow();
|
||||
|
||||
private:
|
||||
private:
|
||||
// create a new stale entry, given the parameters
|
||||
MetaEntryPtr staleEntry(QString base, QString resource_path);
|
||||
struct EntryMap
|
||||
{
|
||||
auto staleEntry(QString base, QString resource_path) -> MetaEntryPtr;
|
||||
|
||||
struct EntryMap {
|
||||
QString base_path;
|
||||
QMap<QString, MetaEntryPtr> entry_list;
|
||||
};
|
||||
|
||||
QMap<QString, EntryMap> m_entries;
|
||||
QString m_index_file;
|
||||
QTimer saveBatchingTimer;
|
||||
|
Reference in New Issue
Block a user