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.cpp192
1 files changed, 35 insertions, 157 deletions
diff --git a/lib/bookmarks/xbel.cpp b/lib/bookmarks/xbel.cpp
index 523ed99..eeb019a 100644
--- a/lib/bookmarks/xbel.cpp
+++ b/lib/bookmarks/xbel.cpp
@@ -9,185 +9,63 @@
#include "xbel.h"
#include <QFile>
-#include <QTreeWidgetItem>
-
-Xbel::Xbel(QTreeWidget *widget)
+Xbel::Xbel(const QString &path)
{
- treeWidget = widget;
-
- QStyle *style = treeWidget->style();
- folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On);
- folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal, QIcon::Off);
- bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon));
+ m_path = path;
}
-bool Xbel::read(const QString &xbel)
+BookmarkItem *Xbel::read()
{
- // no file specified
- if(xbel.isEmpty()) {
- return false;
+ BookmarkItem *root = new BookmarkItem(BookmarkItem::Root, nullptr);
+ root->title = QObject::tr("Title");
+ root->href = QObject::tr("href");
+
+ // if the path is empty, there is nothing to load
+ if(m_path.isEmpty()) {
+ return root;
}
- QFile file(xbel);
+ QFile file(m_path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- // file cannot be opened
- return false;
+ // file cannot be opened for reading
+ return root;
}
- xmlReader.setDevice(&file);
+ QXmlStreamReader xmlReader(&file);
if(xmlReader.readNextStartElement()) {
- if(xmlReader.name() == "xbel" && xmlReader.attributes().value("version") == "1.0") {
- qDebug("valid xbel");
- readChildElements(0);
- } else {
- qDebug("invalid xbel");
- return false;
+ if(!(xmlReader.name() == "xbel" && xmlReader.attributes().value("version") == "1.0")) {
+ // invalid xbel
+ qWarning("Error parsing %s", qUtf8Printable(m_path));
+ return root;
}
+ readChildElements(xmlReader, root);
}
- return true;
-}
-
-bool Xbel::write(const QString &xbel)
-{
- // no file specified
- if(xbel.isEmpty()) {
- return false;
- }
-
- QFile file(xbel);
- if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
- // file cannot be opened
- qDebug("Cannot open xbel: %s", qUtf8Printable(xbel));
- return false;
- }
-
- xmlWriter.setAutoFormatting(true);
- xmlWriter.setDevice(&file);
-
- xmlWriter.writeStartDocument();
- xmlWriter.writeDTD("<!DOCTYPE xbel>");
- xmlWriter.writeStartElement("xbel");
- xmlWriter.writeAttribute("version", "1.0");
- for(int i=0; i<treeWidget->topLevelItemCount(); i++) {
- writeItem(treeWidget->topLevelItem(i));
- }
-
- xmlWriter.writeEndDocument();
-
- file.flush();
- file.close();
- return true;
+ return root;
}
-void Xbel::readChildElements(QTreeWidgetItem *parentItem)
-{
- while(xmlReader.readNextStartElement()) {
- if(xmlReader.name() == "title") {
- readTitle(parentItem);
- } else if(xmlReader.name() == "folder") {
- QTreeWidgetItem *item = addFolder(parentItem);
- item->setText(1, xmlReader.attributes().value("href").toString());
- readChildElements(item);
- } else if(xmlReader.name() == "bookmark") {
- QTreeWidgetItem *item = addBookmark(parentItem);
- item->setText(1, xmlReader.attributes().value("href").toString());
- readChildElements(item);
- } else if(xmlReader.name() == "separator") {
- addSeparator(parentItem);
- xmlReader.skipCurrentElement();
- } else {
- xmlReader.skipCurrentElement();
- }
- }
-}
-void Xbel::readTitle(QTreeWidgetItem *item)
+void Xbel::readChildElements(QXmlStreamReader &reader, BookmarkItem *parentItem)
{
- item->setText(0, xmlReader.readElementText());
-}
+ while(reader.readNextStartElement()) {
+ if(reader.name() == "title") {
+ parentItem->title = reader.readElementText();
-QTreeWidgetItem *Xbel::addFolder(QTreeWidgetItem *parentItem)
-{
- QTreeWidgetItem *folderItem = createChildItem(parentFolder(parentItem), "folder");
- //folderItem->setExpanded(xmlReader.attributes().value("folded") != "no");
- treeWidget->setItemExpanded(folderItem, xmlReader.attributes().value("folded") != "yes");
- folderItem->setFlags(folderItem->flags() | Qt::ItemIsEditable);
- folderItem->setIcon(0, folderIcon);
+ } else if(reader.name() == "folder") {
+ BookmarkItem *item = new BookmarkItem(BookmarkItem::Folder, parentItem);
+ item->href = reader.attributes().value("href").toString();
+ item->folded = reader.attributes().value("folded") == QLatin1String("yes");
+ readChildElements(reader, item);
- return folderItem;
-}
+ } else if(reader.name() == "bookmark") {
+ BookmarkItem *item = new BookmarkItem(BookmarkItem::Bookmark, parentItem);
+ item->href = reader.attributes().value("href").toString();
+ readChildElements(reader, item);
-QTreeWidgetItem *Xbel::addBookmark(QTreeWidgetItem *parentItem)
-{
- QTreeWidgetItem *bookmarkItem = createChildItem(parentFolder(parentItem), "bookmark");
- bookmarkItem->setFlags((bookmarkItem->flags() | Qt::ItemIsEditable) & ~Qt::ItemIsDropEnabled);
- bookmarkItem->setIcon(0, bookmarkIcon);
- bookmarkItem->setText(0, "Unknown Title");
- bookmarkItem->setText(1, "Unknown Address");
-
- return bookmarkItem;
-}
-
-void Xbel::addSeparator(QTreeWidgetItem *parentItem)
-{
- QTreeWidgetItem *separatorItem = createChildItem(parentFolder(parentItem), "separator");
- separatorItem->setFlags(separatorItem->flags() & ~Qt::ItemIsDropEnabled);
- separatorItem->setText(0, "-----");
-}
-
-QTreeWidgetItem *Xbel::parentFolder(QTreeWidgetItem *item)
-{
- QTreeWidgetItem *parentItem = item;
-
- if(parentItem) {
- while(parentItem->data(0, Qt::UserRole) != "folder") {
- parentItem = parentItem->parent();
- if(parentItem == 0) {
- break;
- }
- }
- }
-
- return parentItem;
-}
-
-QTreeWidgetItem *Xbel::createChildItem(QTreeWidgetItem *item, const QString &type)
-{
- QTreeWidgetItem *childItem;
- if(item) {
- childItem = new QTreeWidgetItem(item);
- } else {
- childItem = new QTreeWidgetItem(treeWidget);
- }
- childItem->setData(0, Qt::UserRole, type);
- return childItem;
-}
-
-void Xbel::writeItem(QTreeWidgetItem *item)
-{
- QString tagName = item->data(0, Qt::UserRole).toString();
- if (tagName == "folder") {
- xmlWriter.writeStartElement(tagName);
- if(!item->text(1).isEmpty()) {
- xmlWriter.writeAttribute("href", item->text(1));
- }
- xmlWriter.writeAttribute("folded", treeWidget->isItemExpanded(item) ? "no" : "yes");
- xmlWriter.writeTextElement("title", item->text(0));
- for (int i = 0; i < item->childCount(); ++i) {
- writeItem(item->child(i));
- }
- xmlWriter.writeEndElement();
- } else if (tagName == "bookmark") {
- xmlWriter.writeStartElement(tagName);
- if (!item->text(1).isEmpty()) {
- xmlWriter.writeAttribute("href", item->text(1));
+ } else {
+ reader.skipCurrentElement();
}
- xmlWriter.writeTextElement("title", item->text(0));
- xmlWriter.writeEndElement();
- } else if (tagName == "separator") {
- xmlWriter.writeEmptyElement(tagName);
}
}