Line data Source code
1 : #include "OPMLExport.h"
2 :
3 : #include <QXmlStreamWriter>
4 : #include <QDateTime>
5 : #include <QFile>
6 : #include "ErrorHandling.h"
7 : #include "../models/FeedItem.h"
8 :
9 0 : OPMLExport::OPMLExport()
10 : {
11 0 : }
12 :
13 8 : bool OPMLExport::save(const QString &sFile, ListModel* feedList)
14 : {
15 8 : QFile file(sFile);
16 :
17 8 : if (!file.open(QIODevice::WriteOnly)) {
18 0 : qWarning() << "Could not open file: " << sFile << " error code: " << file.errorString();
19 0 : return false;
20 : }
21 :
22 : // Create date time string.
23 : // Format example: Tue, 18 Mar 2014 04:09:51 GMT
24 8 : QDateTime dateTime = QDateTime::currentDateTime();
25 8 : dateTime = dateTime.toUTC();
26 8 : QString dateTimeString = dateTime.toString("ddd, dd MMM yyyy hh:mm:ss") + " GMT";
27 :
28 : // Start the document.
29 8 : QXmlStreamWriter xmlWriter(&file);
30 8 : xmlWriter.setAutoFormatting(true);
31 8 : xmlWriter.writeStartDocument();
32 :
33 : // Main element.
34 : // <opml version="1.1">
35 8 : xmlWriter.writeStartElement("opml");
36 8 : xmlWriter.writeAttribute("version", "1.1");
37 :
38 : // Head element.
39 : //<head>
40 : // <title>blah</title>
41 : // <dateModified>Tue, 18 Mar 2014 04:09:51 GMT</dateModified>
42 : //</head>
43 8 : xmlWriter.writeStartElement("head");
44 8 : xmlWriter.writeTextElement("title", "Fang OPML export");
45 16 : xmlWriter.writeTextElement("dateModified", dateTimeString);
46 8 : xmlWriter.writeEndElement();
47 :
48 : // Start body.
49 8 : xmlWriter.writeStartElement("body");
50 :
51 : //
52 : // Here's where we write the feed list!
53 : //
54 : // <outline text="MrEricSir.com" title="MrEricSir.com" type="rss" xmlUrl="http://www.mrericsir.com/blog/feed/" htmlUrl="http://www.mrericsir.com/blog"/>
55 14 : for (int i = 1; i < feedList->count(); i++) {
56 6 : FeedItem* feedItem = qobject_cast<FeedItem*>(feedList->row(i));
57 6 : if (!feedItem) {
58 0 : qCritical() << "OPMLExport: Feed item null at index" << i;
59 0 : continue;
60 : }
61 :
62 6 : xmlWriter.writeStartElement("outline");
63 :
64 12 : xmlWriter.writeAttribute("text", feedItem->getTitle());
65 12 : xmlWriter.writeAttribute("title", feedItem->getTitle());
66 6 : xmlWriter.writeAttribute("type", "rss");
67 12 : xmlWriter.writeAttribute("xmlUrl", feedItem->getURL().toString());
68 6 : if (feedItem->getSiteURL().isValid()) {
69 10 : xmlWriter.writeAttribute("htmlUrl", feedItem->getSiteURL().toString());
70 : }
71 :
72 6 : xmlWriter.writeEndElement();
73 : }
74 :
75 :
76 : // End body element.
77 8 : xmlWriter.writeEndElement();
78 :
79 : // End main element.
80 8 : xmlWriter.writeEndElement();
81 :
82 : // Finish 'er up.
83 8 : xmlWriter.writeEndDocument();
84 8 : file.close();
85 :
86 8 : return true;
87 8 : }
|