LCOV - code coverage report
Current view: top level - src/utilities - OPMLExport.cpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 82.5 % 40 33
Test Date: 2026-03-23 10:19:47 Functions: 50.0 % 2 1

            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 : }
        

Generated by: LCOV version 2.0-1