Address review findings

This commit is contained in:
Lukas Brübach 2026-11-08 16:18:10 +01:00
parent 997eee835e
commit 6eef7a6849
5 changed files with 95 additions and 22 deletions

View file

@ -123,9 +123,11 @@ bool DeckList::Metadata::readElement(QXmlStreamReader *xml, const QString &child
return true;
}
void DeckList::Metadata::write(QXmlStreamWriter *xml) const
void DeckList::Metadata::write(QXmlStreamWriter *xml, bool includeLastLoadedTimestamp) const
{
xml->writeTextElement("lastLoadedTimestamp", lastLoadedTimestamp);
if (includeLastLoadedTimestamp) {
xml->writeTextElement("lastLoadedTimestamp", lastLoadedTimestamp);
}
xml->writeTextElement("deckname", name);
xml->writeTextElement("format", gameFormat);
xml->writeStartElement("bannerCard");
@ -203,12 +205,12 @@ bool DeckList::readElement(QXmlStreamReader *xml)
return true;
}
void DeckList::write(QXmlStreamWriter *xml) const
void DeckList::write(QXmlStreamWriter *xml, bool includeLastLoadedTimestamp) const
{
xml->writeStartElement("cockatrice_deck");
xml->writeAttribute("version", "1");
metadata.write(xml);
metadata.write(xml, includeLastLoadedTimestamp);
// Write zones
tree.write(xml);
@ -270,12 +272,12 @@ bool DeckList::loadFromString_Native(const QString &nativeString)
return loadFromXml(&xml);
}
QString DeckList::writeToString_Native() const
QString DeckList::writeToString_Native(bool includeLastLoadedTimestamp) const
{
QString result;
QXmlStreamWriter xml(&result);
xml.writeStartDocument();
write(&xml);
write(&xml, includeLastLoadedTimestamp);
xml.writeEndDocument();
return result;
}
@ -486,7 +488,7 @@ QString DeckList::contentHash(const QString &nativeDeck)
QString DeckList::getContentHash() const
{
return contentHash(writeToString_Native());
return contentHash(writeToString_Native(false));
}
/**

View file

@ -95,8 +95,10 @@ public:
* @brief Writes the deck metadata section of a Cockatrice deck XML file.
*
* @param xml Writer to append the metadata elements to.
* @param includeLastLoadedTimestamp Whether to write lastLoadedTimestamp. Collection sync
* excludes it, since it changes every time a deck is opened.
*/
void write(QXmlStreamWriter *xml) const;
void write(QXmlStreamWriter *xml, bool includeLastLoadedTimestamp = true) const;
};
private:
@ -244,10 +246,15 @@ public:
/** @name Serialization (XML) */
///@{
bool readElement(QXmlStreamReader *xml);
void write(QXmlStreamWriter *xml) const;
void write(QXmlStreamWriter *xml, bool includeLastLoadedTimestamp = true) const;
bool loadFromXml(QXmlStreamReader *xml);
bool loadFromString_Native(const QString &nativeString);
QString writeToString_Native() const;
/**
* @brief Serialises the deck to a Cockatrice native XML string.
* @param includeLastLoadedTimestamp Whether to write lastLoadedTimestamp. Pass false for
* content comparisons, so opening a deck does not change its identity.
*/
QString writeToString_Native(bool includeLastLoadedTimestamp = true) const;
bool loadFromFile_Native(QIODevice *device);
bool saveToFile_Native(QIODevice *device) const;
///@}
@ -305,7 +312,12 @@ public:
* peers compare the same bytes.
*/
static QString contentHash(const QString &nativeDeck);
/** @brief contentHash() of this deck's native serialisation. */
/**
* @brief contentHash() of this deck's native serialisation, without lastLoadedTimestamp.
*
* Opening a deck rewrites that timestamp, so hashing it would make every played deck
* look modified to the server.
*/
QString getContentHash() const;
void refreshDeckHash();
///@}