From d9802226e443ecd7a7062fd7a0fb320a183e341f Mon Sep 17 00:00:00 2001 From: aqua Date: Mon, 15 Aug 2022 14:25:29 +0300 Subject: Migrate BookmarkManager --- src/bookmarks/bookmarkstreeformat_xbel_read.cpp | 84 ++++++++++--------------- 1 file changed, 34 insertions(+), 50 deletions(-) (limited to 'src/bookmarks/bookmarkstreeformat_xbel_read.cpp') diff --git a/src/bookmarks/bookmarkstreeformat_xbel_read.cpp b/src/bookmarks/bookmarkstreeformat_xbel_read.cpp index e16eda27..f224bd15 100644 --- a/src/bookmarks/bookmarkstreeformat_xbel_read.cpp +++ b/src/bookmarks/bookmarkstreeformat_xbel_read.cpp @@ -20,11 +20,7 @@ inline void readNodeAttributes(BookmarksTreeItem *item, const QXmlStreamAttribut // added if (attributes.hasAttribute(xbel::attr_added)) { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_added), Qt::ISODate); -#else - auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_added).toString(), Qt::ISODate); -#endif + const auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_added), Qt::ISODate); if (!dateTime.isNull() && dateTime.isValid()) item->setData(BookmarksTreeItem::Added, dateTime); } } @@ -37,39 +33,29 @@ inline void readUrlAttributes(BookmarksTreeItem *item, const QXmlStreamAttribute // visited if (attributes.hasAttribute(xbel::attr_visited)) { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_visited), Qt::ISODate); -#else - auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_visited).toString(), Qt::ISODate); -#endif + const auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_visited), Qt::ISODate); if (!dateTime.isNull() && dateTime.isValid()) item->setData(BookmarksTreeItem::Visited, dateTime); } // modified if (attributes.hasAttribute(xbel::attr_modified)) { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_modified), Qt::ISODate); -#else - auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_modified).toString(), Qt::ISODate); -#endif + const auto dateTime = QDateTime::fromString(attributes.value(xbel::attr_modified), Qt::ISODate); if (!dateTime.isNull() && dateTime.isValid()) item->setData(BookmarksTreeItem::Modified, dateTime); } } -[[nodiscard]] inline bool readItemAttributes(BookmarksTreeItem *item, const QXmlStreamAttributes &attr) +[[nodiscard]] inline QList readItemAttributes(BookmarksTreeItem *item, const QXmlStreamAttributes &attr) { - bool has_errors = false; + QList errors; switch (item->type()) { case BookmarksTreeItem::Root: if (!attr.hasAttribute(xbel::attr_version)) { - has_errors = true; - // spdlog::error("xbel::read: xbel has no version"); + errors.append({QObject::tr("%1 xbel has no version").arg(__PRETTY_FUNCTION__)}); } else if (attr.value(xbel::attr_version).compare(QLatin1String{xbel::attr_version_value}) != 0) { - has_errors = true; - // spdlog::error("xbel::read: unknown xbel version"); + errors.append({QObject::tr("%1 unknown xbel version").arg(__PRETTY_FUNCTION__)}); } readNodeAttributes(item, attr); break; @@ -90,18 +76,15 @@ inline void readUrlAttributes(BookmarksTreeItem *item, const QXmlStreamAttribute case BookmarksTreeItem::Alias: if (!attr.hasAttribute(xbel::attr_ref)) { - has_errors = true; - // spdlog::error("xbel::read: Alias has no ref"); + + errors.append({QObject::tr("%1 Alias has no ref").arg(__PRETTY_FUNCTION__)}); } else item->setData(BookmarksTreeItem::Id, attr.value(xbel::attr_ref).toString()); break; - - default: - return false; } - return has_errors; + return errors; } /** @@ -110,14 +93,13 @@ inline void readUrlAttributes(BookmarksTreeItem *item, const QXmlStreamAttribute * @param parent * @return true if there were errors during parsing */ -[[nodiscard]] inline bool readChildElements(QXmlStreamReader &reader, BookmarksTreeItem *parent) +[[nodiscard]] inline QList readChildElements(QXmlStreamReader &reader, BookmarksTreeItem *parent) { - bool has_errors = false; + QList errors; while (reader.readNextStartElement()) { if (reader.hasError()) { - has_errors = true; - // spdlog::warn("xbel::read: error during parsing: {}", qUtf8Printable(reader.errorString())); + errors.append({QObject::tr("%1 error during parsing: %2").arg(__PRETTY_FUNCTION__, reader.errorString())}); } const auto name = reader.name(); @@ -126,7 +108,7 @@ inline void readUrlAttributes(BookmarksTreeItem *item, const QXmlStreamAttribute parent->setData(BookmarksTreeItem::Description, reader.readElementText()); } else if (name == xbel::elem_info) { - has_errors += readChildElements(reader, parent); + errors += readChildElements(reader, parent); } else if (name == xbel::elem_metadata) { if (reader.attributes().value(xbel::elem_metadata_owner) == QLatin1String{xbel::elem_metadata_owner_value}) @@ -137,48 +119,50 @@ inline void readUrlAttributes(BookmarksTreeItem *item, const QXmlStreamAttribute else if (name == xbel::elem_bookmark) { auto *item = new BookmarksTreeItem(BookmarksTreeItem::Bookmark, {}, parent); - has_errors += readItemAttributes(item, reader.attributes()); - if (!parent->appendChild(item)) has_errors = true; - has_errors += readChildElements(reader, item); + errors += readItemAttributes(item, reader.attributes()); + parent->appendChild(item); + errors += readChildElements(reader, item); } else if (name == xbel::elem_folder) { auto *item = new BookmarksTreeItem(BookmarksTreeItem::Folder, {}, parent); - has_errors += readItemAttributes(item, reader.attributes()); - if (!parent->appendChild(item)) has_errors = true; - has_errors += readChildElements(reader, item); + errors += readItemAttributes(item, reader.attributes()); + parent->appendChild(item); + errors += readChildElements(reader, item); } else if (name == xbel::elem_separator) { auto *item = new BookmarksTreeItem(BookmarksTreeItem::Separator, {}, parent); - if (!parent->appendChild(item)) has_errors = true; + parent->appendChild(item); reader.skipCurrentElement(); } else if (name == xbel::elem_alias) { auto *item = new BookmarksTreeItem(BookmarksTreeItem::Alias, {}, parent); item->setData(BookmarksTreeItem::Id, reader.attributes().value(xbel::attr_ref).toString()); - if (!parent->appendChild(item)) has_errors = true; + parent->appendChild(item); reader.skipCurrentElement(); } else { - // spdlog::error("xbel::read: skipping unknown element {} on line {}", qUtf8Printable(name.toString()), - // reader.lineNumber()); - has_errors = true; + errors.append({QObject::tr("%1 skipping unknown element '%2' on line %3") + .arg(__PRETTY_FUNCTION__, name.toString(), QString::number(reader.lineNumber()))}); reader.skipCurrentElement(); } } - return has_errors; + return errors; } -bool xbel::read(QIODevice *device, BookmarksTreeItem *root) +QList xbel::read(QIODevice *device, BookmarksTreeItem *root) { - if (!device->isOpen()) return false; + if (!device->isOpen()) { return {QObject::tr("%1 buffer is not open").arg(__PRETTY_FUNCTION__)}; } QXmlStreamReader reader(device); - if (!reader.readNextStartElement()) return false; + if (!reader.readNextStartElement()) return {}; // parse the top-level item attributes - if (reader.name().compare(QLatin1String{elem_xbel}) != 0) return false; - if (readItemAttributes(root, reader.attributes())) return false; + if (reader.name().compare(QLatin1String{elem_xbel}) != 0) + return {QObject::tr("%1 Top-level item is not xbel").arg(__PRETTY_FUNCTION__)}; - return !readChildElements(reader, root); + QList errors; + errors += readItemAttributes(root, reader.attributes()); + errors += readChildElements(reader, root); + return errors; } -- cgit v1.2.1