aboutsummaryrefslogtreecommitdiff
path: root/lib/bookmarks/xbel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bookmarks/xbel.cpp')
-rw-r--r--lib/bookmarks/xbel.cpp86
1 files changed, 48 insertions, 38 deletions
diff --git a/lib/bookmarks/xbel.cpp b/lib/bookmarks/xbel.cpp
index c23f0be..7fedce7 100644
--- a/lib/bookmarks/xbel.cpp
+++ b/lib/bookmarks/xbel.cpp
@@ -7,24 +7,22 @@
*/
#include "xbel.h"
-#include <QFile>
-#include <QAbstractItemModel>
#include "bookmarkitem.h"
-#include "bookmarkmodel.h"
+#include <QXmlStreamReader>
+#include <QXmlStreamWriter>
-XbelReader::XbelReader(QIODevice *file)
-{
- Q_CHECK_PTR(file);
- m_file = file;
-}
-
-
-void readChildElements(QXmlStreamReader &reader, BookmarkItem *parent)
+inline void readChildElements(QXmlStreamReader &reader, BookmarkItem *parent)
{
while(reader.readNextStartElement()) {
if(reader.name() == "title") {
parent->setData(BookmarkItem::Title, reader.readElementText());
+ } else if(reader.name() == "tags") {
+ parent->setData(BookmarkItem::Tags, reader.readElementText().split(";"));
+
+ } else if(reader.name() == "description") {
+ parent->setData(BookmarkItem::Description, reader.readElementText());
+
} else if(reader.name() == "folder") {
auto *item = new BookmarkItem({}, BookmarkItem::Folder, parent);
item->setExpanded(!(reader.attributes().value("folded") == QLatin1Literal("yes")));
@@ -43,9 +41,9 @@ void readChildElements(QXmlStreamReader &reader, BookmarkItem *parent)
}
}
-void XbelReader::read(BookmarkItem *item)
+void Xbel::read(QIODevice *device, BookmarkItem *item)
{
- QXmlStreamReader qXmlStreamReader(m_file);
+ QXmlStreamReader qXmlStreamReader(device);
if(qXmlStreamReader.readNextStartElement()) {
if(!(qXmlStreamReader.name() == "xbel" && qXmlStreamReader.attributes().value("version") == "1.0")) {
@@ -56,34 +54,46 @@ void XbelReader::read(BookmarkItem *item)
}
}
-XbelWriter::XbelWriter()
+inline void writeChildElements(QXmlStreamWriter &writer, const BookmarkItem *item)
{
-}
+ switch(item->type()) {
+ case BookmarkItem::Root:
+ for(int i = 0; i < item->childCount(); ++i) {
+ writeChildElements(writer, item->child(i));
+ }
+ break;
+
+ case BookmarkItem::Folder:
+ writer.writeStartElement("folder");
+ writer.writeAttribute("folded", !item->isExpanded() ? "yes" : "no");
+ writer.writeTextElement("title", item->data(BookmarkItem::Title).toString());
+ if(!item->data(BookmarkItem::Tags).isNull())
+ writer.writeTextElement("tags", item->data(BookmarkItem::Tags).toStringList().join(";"));
+ if(!item->data(BookmarkItem::Description).isNull())
+ writer.writeTextElement("description", item->data(BookmarkItem::Description).toString());
+
+ for(int i = 0; i < item->childCount(); ++i) {
+ writeChildElements(writer, item->child(i));
+ }
-inline void writeChildElement(QXmlStreamWriter &writer, const BookmarkItem *item)
-{
- switch (item->type()) {
- case BookmarkItem::Folder:
- writer.writeStartElement("folder");
- writer.writeAttribute("folded", !item->isExpanded() ? "yes" : "no");
- writer.writeTextElement("title", item->data(BookmarkItem::Title).toString());
-
- for(int i = 0; i < item->childCount(); ++i) {
- writeChildElement(writer, item->child(i));
- }
-
- writer.writeEndElement();
- break;
-
- case BookmarkItem::Bookmark:
- writer.writeStartElement("bookmark");
- writer.writeAttribute("href", item->data(BookmarkItem::Href).toString());
- writer.writeTextElement("title", item->data(BookmarkItem::Title).toString());
- writer.writeEndElement();
- break;
+ writer.writeEndElement();
+ break;
+
+ case BookmarkItem::Bookmark:
+ writer.writeStartElement("bookmark");
+ writer.writeAttribute("href", item->data(BookmarkItem::Href).toString());
+ writer.writeTextElement("title", item->data(BookmarkItem::Title).toString());
+ if(!item->data(BookmarkItem::Tags).isNull())
+ writer.writeTextElement("tags", item->data(BookmarkItem::Tags).toStringList().join(";"));
+ if(!item->data(BookmarkItem::Description).isNull())
+ writer.writeTextElement("description", item->data(BookmarkItem::Description).toString());
+
+ writer.writeEndElement();
+ break;
}
}
-void XbelWriter::write(QIODevice *device, const BookmarkItem *item)
+
+void Xbel::write(QIODevice *device, const BookmarkItem *item)
{
QXmlStreamWriter xmlWriter(device);
xmlWriter.setAutoFormatting(true);
@@ -94,7 +104,7 @@ void XbelWriter::write(QIODevice *device, const BookmarkItem *item)
xmlWriter.writeStartElement("xbel");
xmlWriter.writeAttribute("version", "1.0");
- writeChildElement(xmlWriter, item);
+ writeChildElements(xmlWriter, item);
xmlWriter.writeEndDocument();
}