From e0badcc7ef354b4bfdeedfde8f5ec3e82c27e741 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 25 Sep 2018 16:49:56 +0200 Subject: Bookmarks: add tags and description fields to xbel --- lib/bookmarks/xbel.cpp | 86 ++++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 38 deletions(-) (limited to 'lib/bookmarks/xbel.cpp') 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 -#include #include "bookmarkitem.h" -#include "bookmarkmodel.h" +#include +#include -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(); } -- cgit v1.2.1