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