Experimental implementation of feed export.
This commit is contained in:
parent
7ad5978684
commit
7227d39c9b
2 changed files with 78 additions and 9 deletions
|
|
@ -156,21 +156,91 @@ bool FeedsModel::exportToFile(FeedsModel::ExternalFeedsFileType type, QByteArray
|
||||||
|
|
||||||
bool FeedsModel::exportToOMPL20(QByteArray &result) {
|
bool FeedsModel::exportToOMPL20(QByteArray &result) {
|
||||||
QDomDocument opml_document;
|
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.
|
// Adde OPML 2.0 metadata.
|
||||||
opml_document.appendChild(opml_document.createElement("opml"));
|
opml_document.appendChild(opml_document.createElement("opml"));
|
||||||
opml_document.documentElement().setAttribute("version", "2.0");
|
opml_document.documentElement().setAttribute("version", "2.0");
|
||||||
|
|
||||||
|
QDomElement elem_opml_head = opml_document.createElement("head");
|
||||||
|
|
||||||
QDomElement elem_opml_title = opml_document.createElement("title");
|
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);
|
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.
|
// 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);
|
result = opml_document.toByteArray(2);
|
||||||
|
|
|
||||||
|
|
@ -470,7 +470,8 @@ void FormMain::exportFeeds() {
|
||||||
if (output_file.open(QIODevice::Unbuffered | QIODevice::Truncate | QIODevice::WriteOnly)) {
|
if (output_file.open(QIODevice::Unbuffered | QIODevice::Truncate | QIODevice::WriteOnly)) {
|
||||||
QTextStream stream(&output_file);
|
QTextStream stream(&output_file);
|
||||||
|
|
||||||
stream << result_data;
|
stream.setCodec("UTF-8");
|
||||||
|
stream << QString::fromUtf8(result_data);
|
||||||
output_file.flush();
|
output_file.flush();
|
||||||
output_file.close();
|
output_file.close();
|
||||||
}
|
}
|
||||||
|
|
@ -487,9 +488,7 @@ void FormMain::changeEvent(QEvent *event) {
|
||||||
case QEvent::WindowStateChange: {
|
case QEvent::WindowStateChange: {
|
||||||
if (this->windowState() & Qt::WindowMinimized &&
|
if (this->windowState() & Qt::WindowMinimized &&
|
||||||
SystemTrayIcon::isSystemTrayActivated() &&
|
SystemTrayIcon::isSystemTrayActivated() &&
|
||||||
qApp->settings()->value(APP_CFG_GUI,
|
qApp->settings()->value(APP_CFG_GUI, "hide_when_minimized", false).toBool()) {
|
||||||
"hide_when_minimized",
|
|
||||||
false).toBool()) {
|
|
||||||
event->ignore();
|
event->ignore();
|
||||||
QTimer::singleShot(CHANGE_EVENT_DELAY, this, SLOT(switchVisibility()));
|
QTimer::singleShot(CHANGE_EVENT_DELAY, this, SLOT(switchVisibility()));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue