mirror of
https://github.com/KDE/kasts.git
synced 2025-02-02 10:26:52 +01:00
Implement feed export to opml
This commit is contained in:
parent
fd9420fe2d
commit
b8ea078fcf
@ -11,6 +11,7 @@
|
|||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
|
#include <QXmlStreamWriter>
|
||||||
|
|
||||||
#include "alligatorsettings.h"
|
#include "alligatorsettings.h"
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
@ -156,13 +157,12 @@ void Database::addFeed(QString url)
|
|||||||
Fetcher::instance().fetch(urlFromInput.toString());
|
Fetcher::instance().fetch(urlFromInput.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Database::importFeedsFromUrl(QString url)
|
void Database::importFeeds(QString path)
|
||||||
{
|
{
|
||||||
QFile *file = new QFile(QUrl(url).toLocalFile());
|
QFile file(QUrl(path).toLocalFile());
|
||||||
file->open(QIODevice::ReadOnly);
|
file.open(QIODevice::ReadOnly);
|
||||||
|
|
||||||
QXmlStreamReader xmlReader;
|
QXmlStreamReader xmlReader(&file);
|
||||||
xmlReader.setDevice(file);
|
|
||||||
while(!xmlReader.atEnd()) {
|
while(!xmlReader.atEnd()) {
|
||||||
xmlReader.readNext();
|
xmlReader.readNext();
|
||||||
if(xmlReader.tokenType() == 4 && xmlReader.attributes().hasAttribute(QStringLiteral("xmlUrl"))) {
|
if(xmlReader.tokenType() == 4 && xmlReader.attributes().hasAttribute(QStringLiteral("xmlUrl"))) {
|
||||||
@ -171,3 +171,28 @@ void Database::importFeedsFromUrl(QString url)
|
|||||||
}
|
}
|
||||||
Fetcher::instance().fetchAll();
|
Fetcher::instance().fetchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Database::exportFeeds(QString path)
|
||||||
|
{
|
||||||
|
QFile file(QUrl(path).toLocalFile());
|
||||||
|
file.open(QIODevice::WriteOnly);
|
||||||
|
QXmlStreamWriter xmlWriter(&file);
|
||||||
|
xmlWriter.setAutoFormatting(true);
|
||||||
|
xmlWriter.writeStartDocument(QStringLiteral("1.0"));
|
||||||
|
xmlWriter.writeStartElement(QStringLiteral("opml"));
|
||||||
|
xmlWriter.writeEmptyElement(QStringLiteral("head"));
|
||||||
|
xmlWriter.writeStartElement(QStringLiteral("body"));
|
||||||
|
xmlWriter.writeAttribute(QStringLiteral("version"), QStringLiteral("1.0"));
|
||||||
|
QSqlQuery query;
|
||||||
|
query.prepare(QStringLiteral("SELECT url, name FROM Feeds;"));
|
||||||
|
execute(query);
|
||||||
|
while(query.next()) {
|
||||||
|
xmlWriter.writeEmptyElement(QStringLiteral("outline"));
|
||||||
|
xmlWriter.writeAttribute(QStringLiteral("xmlUrl"), query.value(0).toString());
|
||||||
|
xmlWriter.writeAttribute(QStringLiteral("title"), query.value(1).toString());
|
||||||
|
}
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
xmlWriter.writeEndElement();
|
||||||
|
xmlWriter.writeEndDocument();
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -21,7 +21,8 @@ public:
|
|||||||
bool execute(QSqlQuery &query);
|
bool execute(QSqlQuery &query);
|
||||||
bool execute(QString query);
|
bool execute(QString query);
|
||||||
Q_INVOKABLE void addFeed(QString url);
|
Q_INVOKABLE void addFeed(QString url);
|
||||||
Q_INVOKABLE void importFeedsFromUrl(QString url);
|
Q_INVOKABLE void importFeeds(QString path);
|
||||||
|
Q_INVOKABLE void exportFeeds(QString path);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void feedAdded(QString url);
|
void feedAdded(QString url);
|
||||||
|
@ -36,6 +36,11 @@ Kirigami.ScrollablePage {
|
|||||||
text: i18n("Import Feeds...")
|
text: i18n("Import Feeds...")
|
||||||
iconName: "document-import"
|
iconName: "document-import"
|
||||||
onTriggered: importDialog.open()
|
onTriggered: importDialog.open()
|
||||||
|
},
|
||||||
|
Kirigami.Action {
|
||||||
|
text: i18n("Export Feeds...")
|
||||||
|
iconName: "document-export"
|
||||||
|
onTriggered: exportDialog.open()
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -75,7 +80,16 @@ Kirigami.ScrollablePage {
|
|||||||
id: importDialog
|
id: importDialog
|
||||||
title: i18n("Import Feeds")
|
title: i18n("Import Feeds")
|
||||||
folder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
folder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
||||||
nameFilters: [i18n("All Files (*.*)"), i18n("XML Files (*.xml)"), i18n("OPML Files (*.opml)")]
|
nameFilters: [i18n("All Files (*)"), i18n("XML Files (*.xml)"), i18n("OPML Files (*.opml)")]
|
||||||
onAccepted: Database.importFeedsFromUrl(file)
|
onAccepted: Database.importFeeds(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: exportDialog
|
||||||
|
title: i18n("Export Feeds")
|
||||||
|
folder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
||||||
|
nameFilters: [i18n("All Files")]
|
||||||
|
onAccepted: Database.exportFeeds(file)
|
||||||
|
fileMode: FileDialog.SaveFile
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user