Experimental implementation of feed export.

This commit is contained in:
Martin Rotter 2014-08-29 08:03:56 +02:00
parent 7ad5978684
commit 7227d39c9b
2 changed files with 78 additions and 9 deletions

View file

@ -156,21 +156,91 @@ bool FeedsModel::exportToFile(FeedsModel::ExternalFeedsFileType type, QByteArray
bool FeedsModel::exportToOMPL20(QByteArray &result) {
QDomDocument opml_document;
QStack<FeedsModelRootItem*> items_to_process; items_to_process.push(m_rootItem);
QDomProcessingInstruction xml_declaration = opml_document.createProcessingInstruction("xml",
"version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"");
opml_document.appendChild(xml_declaration);
// Adde OPML 2.0 metadata.
opml_document.appendChild(opml_document.createElement("opml"));
opml_document.documentElement().setAttribute("version", "2.0");
QDomElement elem_opml_head = opml_document.createElement("head");
QDomElement elem_opml_title = opml_document.createElement("title");
QDomText text_opml_title = opml_document.createTextNode(QString(APP_NAME) + tr(" feeds"));
QDomText text_opml_title = opml_document.createTextNode(QString(APP_NAME));
elem_opml_title.appendChild(text_opml_title);
opml_document.documentElement().appendChild(elem_opml_title);
elem_opml_head.appendChild(elem_opml_title);
QDomElement elem_opml_created = opml_document.createElement("dateCreated");
QDomText text_opml_created = opml_document.createTextNode(QLocale::c().toString(QDateTime::currentDateTimeUtc(),
"ddd, dd MMM yyyy hh:mm:ss") + " GMT");
elem_opml_created.appendChild(text_opml_created);
elem_opml_head.appendChild(elem_opml_created);
opml_document.documentElement().appendChild(elem_opml_head);
QDomElement elem_opml_body = opml_document.createElement("body");
QStack<FeedsModelRootItem*> items_to_process; items_to_process.push(m_rootItem);
QStack<QDomElement> elements_to_use; elements_to_use.push(elem_opml_body);
// Process all unprocessed nodes.
/*while (!items_to_process.isEmpty()) {
while (!items_to_process.isEmpty()) {
QDomElement active_element = elements_to_use.pop();
FeedsModelRootItem *active_item = items_to_process.pop();
}*/
foreach (FeedsModelRootItem *child_item, active_item->childItems()) {
switch (child_item->kind()) {
case FeedsModelRootItem::Category: {
QDomElement outline_category = opml_document.createElement("outline");
outline_category.setAttribute("text", child_item->title());
active_element.appendChild(outline_category);
items_to_process.push(child_item);
elements_to_use.push(outline_category);
break;
}
case FeedsModelRootItem::Feed: {
FeedsModelFeed *child_feed = static_cast<FeedsModelFeed*>(child_item);
QDomElement outline_feed = opml_document.createElement("outline");
outline_feed.setAttribute("text", child_feed->title());
outline_feed.setAttribute("xmlUrl", child_feed->url());
outline_feed.setAttribute("description", child_feed->description());
outline_feed.setAttribute("encoding", child_feed->encoding());
switch (child_feed->type()) {
case FeedsModelFeed::Rss0X:
case FeedsModelFeed::Rss2X:
outline_feed.setAttribute("version", "RSS");
break;
case FeedsModelFeed::Rdf:
outline_feed.setAttribute("version", "RSS");
break;
case FeedsModelFeed::Atom10:
outline_feed.setAttribute("version", "ATOM");
break;
default:
break;
}
if (child_feed->passwordProtected()) {
outline_feed.setAttribute("username", child_feed->username());
outline_feed.setAttribute("password", child_feed->password());
}
active_element.appendChild(outline_feed);
break;
}
default:
break;
}
}
}
opml_document.documentElement().appendChild(elem_opml_body);
result = opml_document.toByteArray(2);

View file

@ -470,7 +470,8 @@ void FormMain::exportFeeds() {
if (output_file.open(QIODevice::Unbuffered | QIODevice::Truncate | QIODevice::WriteOnly)) {
QTextStream stream(&output_file);
stream << result_data;
stream.setCodec("UTF-8");
stream << QString::fromUtf8(result_data);
output_file.flush();
output_file.close();
}
@ -487,9 +488,7 @@ void FormMain::changeEvent(QEvent *event) {
case QEvent::WindowStateChange: {
if (this->windowState() & Qt::WindowMinimized &&
SystemTrayIcon::isSystemTrayActivated() &&
qApp->settings()->value(APP_CFG_GUI,
"hide_when_minimized",
false).toBool()) {
qApp->settings()->value(APP_CFG_GUI, "hide_when_minimized", false).toBool()) {
event->ignore();
QTimer::singleShot(CHANGE_EVENT_DELAY, this, SLOT(switchVisibility()));
}