Store hybrid torrents using legacy filenames

* Make Digest32 implicitly shared class
* Store hybrid torrents using legacy filenames

PR #16237.
This commit is contained in:
Vladimir Golovnev
2022-01-25 08:22:35 +03:00
committed by GitHub
parent 270e2023cd
commit e93c360db6
4 changed files with 152 additions and 56 deletions

View File

@@ -32,6 +32,8 @@
#include <QByteArray>
#include <QHash>
#include <QSharedData>
#include <QSharedDataPointer>
#include <QString>
template <int N>
@@ -43,11 +45,11 @@ public:
Digest32() = default;
Digest32(const UnderlyingType &nativeDigest)
: m_valid {true}
, m_nativeDigest {nativeDigest}
{
m_dataPtr->valid = true;
m_dataPtr->nativeDigest = nativeDigest;
const QByteArray raw = QByteArray::fromRawData(nativeDigest.data(), length());
m_hashString = QString::fromLatin1(raw.toHex());
m_dataPtr->hashString = QString::fromLatin1(raw.toHex());
}
static constexpr int length()
@@ -57,12 +59,12 @@ public:
bool isValid() const
{
return m_valid;
return m_dataPtr->valid;
}
operator UnderlyingType() const
{
return m_nativeDigest;
return m_dataPtr->nativeDigest;
}
static Digest32 fromString(const QString &digestString)
@@ -75,22 +77,27 @@ public:
return {};
Digest32 result;
result.m_valid = true;
result.m_hashString = digestString;
result.m_nativeDigest.assign(raw.constData());
result.m_dataPtr->valid = true;
result.m_dataPtr->hashString = digestString;
result.m_dataPtr->nativeDigest.assign(raw.constData());
return result;
}
QString toString() const
{
return m_hashString;
return m_dataPtr->hashString;
}
private:
bool m_valid = false;
UnderlyingType m_nativeDigest;
QString m_hashString;
struct Data : public QSharedData
{
bool valid = false;
UnderlyingType nativeDigest;
QString hashString;
};
QSharedDataPointer<Data> m_dataPtr {new Data};
};
template <int N>