1 /*
2     This file is part of the syndication library
3     SPDX-FileCopyrightText: 2006 Frank Osterfeld <osterfeld@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #include "syndicationinfo.h"
9 #include "property.h"
10 #include "statement.h"
11 #include "syndicationvocab.h"
12 
13 #include <tools.h>
14 
15 #include <QString>
16 
17 namespace Syndication
18 {
19 namespace RDF
20 {
SyndicationInfo(ResourcePtr resource)21 SyndicationInfo::SyndicationInfo(ResourcePtr resource)
22     : ResourceWrapper(resource)
23 {
24 }
25 
~SyndicationInfo()26 SyndicationInfo::~SyndicationInfo()
27 {
28 }
29 
updatePeriod() const30 SyndicationInfo::Period SyndicationInfo::updatePeriod() const
31 {
32     return stringToPeriod(resource()->property(SyndicationVocab::self()->updatePeriod())->asString());
33 }
34 
updateFrequency() const35 int SyndicationInfo::updateFrequency() const
36 {
37     QString freqStr = resource()->property(SyndicationVocab::self()->updateFrequency())->asString();
38 
39     if (freqStr.isEmpty()) {
40         return 1; // 1 is default
41     }
42 
43     bool ok = false;
44     int freq = freqStr.toInt(&ok);
45 
46     if (ok) {
47         return freq;
48     } else {
49         return 1; // 1 is default
50     }
51 }
52 
updateBase() const53 time_t SyndicationInfo::updateBase() const
54 {
55     QString str = resource()->property(SyndicationVocab::self()->updateBase())->asString();
56 
57     return parseDate(str, ISODate);
58 }
59 
debugInfo() const60 QString SyndicationInfo::debugInfo() const
61 {
62     QString info;
63     if (updatePeriod() != Daily) {
64         info += QStringLiteral("syn:updatePeriod: #%1#\n").arg(periodToString(updatePeriod()));
65     }
66     info += QStringLiteral("syn:updateFrequency: #%1#\n").arg(QString::number(updateFrequency()));
67 
68     const QString dbase = dateTimeToString(updateBase());
69     if (!dbase.isNull()) {
70         info += QStringLiteral("syn:updateBase: #%1#\n").arg(dbase);
71     }
72 
73     return info;
74 }
75 
periodToString(Period period)76 QString SyndicationInfo::periodToString(Period period)
77 {
78     switch (period) {
79     case Daily:
80         return QStringLiteral("daily");
81     case Hourly:
82         return QStringLiteral("hourly");
83     case Monthly:
84         return QStringLiteral("monthly");
85     case Weekly:
86         return QStringLiteral("weekly");
87     case Yearly:
88         return QStringLiteral("yearly");
89     default: // should never happen
90         return QString();
91     }
92 }
93 
stringToPeriod(const QString & str)94 SyndicationInfo::Period SyndicationInfo::stringToPeriod(const QString &str)
95 {
96     if (str.isEmpty()) {
97         return Daily; // default is "daily"
98     }
99 
100     if (str == QLatin1String("hourly")) {
101         return Hourly;
102     }
103     if (str == QLatin1String("monthly")) {
104         return Monthly;
105     }
106     if (str == QLatin1String("weekly")) {
107         return Weekly;
108     }
109     if (str == QLatin1String("yearly")) {
110         return Yearly;
111     }
112 
113     return Daily; // default is "daily"
114 }
115 
116 } // namespace RDF
117 } // namespace Syndication
118