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:
flow
2022-04-27 18:36:11 -03:00
parent efa3fbff39
commit 040ee919e5
9 changed files with 228 additions and 300 deletions

View File

@ -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;