summaryrefslogtreecommitdiff
path: root/src/bookmarks/bookmarkstreeformat_xbel_read.cpp
diff options
context:
space:
mode:
authoraqua <aqua@iserlohn-fortress.net>2022-08-15 14:25:29 +0300
committeraqua <aqua@iserlohn-fortress.net>2022-09-14 08:51:09 +0300
commitd9802226e443ecd7a7062fd7a0fb320a183e341f (patch)
tree1cfd97905fa7ba4de4beca9802ba749d62b5cc4e /src/bookmarks/bookmarkstreeformat_xbel_read.cpp
parentImport BookmarkModel from poi (diff)
downloadrekonq-d9802226e443ecd7a7062fd7a0fb320a183e341f.tar.xz
Migrate BookmarkManager
Diffstat (limited to 'src/bookmarks/bookmarkstreeformat_xbel_read.cpp')
-rw-r--r--src/bookmarks/bookmarkstreeformat_xbel_read.cpp84
1 files changed, 34 insertions, 50 deletions
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<QString> readItemAttributes(BookmarksTreeItem *item, const QXmlStreamAttributes &attr)
{
- bool has_errors = false;
+ QList<QString> 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<QString> readChildElements(QXmlStreamReader &reader, BookmarksTreeItem *parent)
{
- bool has_errors = false;
+ QList<QString> 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<QString> 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<QString> errors;
+ errors += readItemAttributes(root, reader.attributes());
+ errors += readChildElements(reader, root);
+ return errors;
}