diff --git a/src/base/xml.cpp b/src/base/xml.cpp index c991e8cf..9eae10fd 100644 --- a/src/base/xml.cpp +++ b/src/base/xml.cpp @@ -64,6 +64,10 @@ std::wstring XmlReadStr(const XmlNode& node, const std::wstring_view name) { return node.child_value(name.data()); } +std::wstring XmlReadAttr(const XmlNode& node, const std::wstring_view name) { + return node.attribute(name.data()).value(); +} + //////////////////////////////////////////////////////////////////////////////// void XmlWriteInt(XmlNode& node, const std::wstring_view name, @@ -77,6 +81,11 @@ void XmlWriteStr(XmlNode& node, const std::wstring_view name, .append_child(node_type).set_value(value.data()); } +void XmlWriteAttr(XmlNode& node, const std::wstring_view name, + const std::wstring_view value) { + XmlAttr(node, name).set_value(value.data()); +} + //////////////////////////////////////////////////////////////////////////////// void XmlWriteChildNodes(XmlNode& parent_node, @@ -105,11 +114,10 @@ bool XmlSaveDocumentToFile(const XmlDocument& document, return document.save_file(path.data(), indent.data(), flags, encoding); } -std::wstring XmlReadMetaVersion(const XmlDocument& document) { - return XmlReadStr(document.child(L"meta"), L"version"); +std::wstring XmlReadVersionAttr(const XmlNode& node) { + return XmlReadAttr(node, L"version"); } -void XmlWriteMetaVersion(XmlDocument& document, - const std::wstring_view version) { - XmlWriteStr(XmlChild(document, L"meta"), L"version", version); +void XmlWriteVersionAttr(XmlNode& node, const std::wstring_view version) { + XmlWriteAttr(node, L"version", version); } diff --git a/src/base/xml.h b/src/base/xml.h index 370f7199..8e9968aa 100644 --- a/src/base/xml.h +++ b/src/base/xml.h @@ -59,5 +59,5 @@ bool XmlSaveDocumentToFile( const unsigned int flags = pugi::format_default, const pugi::xml_encoding encoding = pugi::xml_encoding::encoding_utf8); -std::wstring XmlReadMetaVersion(const XmlDocument& document); -void XmlWriteMetaVersion(XmlDocument& document, const std::wstring_view version); +std::wstring XmlReadVersionAttr(const XmlNode& node); +void XmlWriteVersionAttr(XmlNode& parent_node, const std::wstring_view version); diff --git a/src/media/anime_db.cpp b/src/media/anime_db.cpp index df029ff4..9ba540d8 100644 --- a/src/media/anime_db.cpp +++ b/src/media/anime_db.cpp @@ -45,12 +45,11 @@ bool Database::LoadDatabase() { if (!parse_result) return false; - const auto meta_version = XmlReadMetaVersion(document); - auto database_node = document.child(L"database"); ReadDatabaseNode(database_node); - HandleCompatibility(meta_version); + const auto xml_version = XmlReadVersionAttr(database_node); + HandleCompatibility(xml_version); return true; } @@ -117,8 +116,9 @@ void Database::ReadDatabaseNode(XmlNode& database_node) { bool Database::SaveDatabase() const { XmlDocument document; - XmlWriteMetaVersion(document, StrToWstr(taiga::version().to_string())); - WriteDatabaseNode(XmlChild(document, L"database")); + auto database_node = XmlChild(document, L"database"); + XmlWriteVersionAttr(database_node, StrToWstr(taiga::version().to_string())); + WriteDatabaseNode(database_node); const auto path = taiga::GetPath(taiga::Path::DatabaseAnime); return XmlSaveDocumentToFile(document, path); diff --git a/src/media/library/history.cpp b/src/media/library/history.cpp index 5800e581..445c07ac 100644 --- a/src/media/library/history.cpp +++ b/src/media/library/history.cpp @@ -51,12 +51,14 @@ bool History::Load() { if (!parse_result) return false; - // Meta - const auto meta_version = XmlReadMetaVersion(document); - const semaver::Version version(WstrToStr(meta_version)); + const auto history_node = document.child(L"history"); + + // Version handling + const auto xml_version = XmlReadVersionAttr(history_node); + const semaver::Version version(WstrToStr(xml_version)); // Items - auto node_items = document.child(L"history").child(L"items"); + auto node_items = history_node.child(L"items"); for (auto item : node_items.children(L"item")) { HistoryItem history_item; history_item.anime_id = item.attribute(L"anime_id").as_int(anime::ID_NOTINLIST); @@ -73,7 +75,7 @@ bool History::Load() { } // Queue events ReadQueue(document); - HandleCompatibility(meta_version); + HandleCompatibility(xml_version); return true; } @@ -123,12 +125,11 @@ void History::ReadQueue(const XmlDocument& document) { bool History::Save() { XmlDocument document; - - // Write meta - XmlWriteMetaVersion(document, StrToWstr(taiga::version().to_string())); - auto node_history = document.append_child(L"history"); + // Write version attribute + XmlWriteVersionAttr(node_history, StrToWstr(taiga::version().to_string())); + // Write items auto node_items = node_history.append_child(L"items"); for (const auto& history_item : items) { diff --git a/src/media/library/list.cpp b/src/media/library/list.cpp index 2e0c6de2..097a8485 100644 --- a/src/media/library/list.cpp +++ b/src/media/library/list.cpp @@ -48,8 +48,6 @@ bool Database::LoadList() { return false; } - const auto meta_version = XmlReadMetaVersion(document); - auto node_database = document.child(L"database"); ReadDatabaseNode(node_database); @@ -74,7 +72,8 @@ bool Database::LoadList() { anime_item.SetMyLastUpdated(XmlReadStr(node, L"last_updated")); } - HandleListCompatibility(meta_version); + const auto xml_version = XmlReadVersionAttr(node_library); + HandleListCompatibility(xml_version); return true; } @@ -85,14 +84,14 @@ bool Database::SaveList(bool include_database) const { XmlDocument document; - XmlWriteMetaVersion(document, StrToWstr(taiga::version().to_string())); - if (include_database) { WriteDatabaseNode(XmlChild(document, L"database")); } auto node_library = document.append_child(L"library"); + XmlWriteVersionAttr(node_library, StrToWstr(taiga::version().to_string())); + for (const auto& [id, item] : items) { if (item.IsInList()) { auto node = node_library.append_child(L"anime");