File indexing completed on 2024-04-14 03:50:38
0001 /* 0002 This file is part of the kcalcore library. 0003 0004 SPDX-FileCopyrightText: 2003 Cornelius Schumacher <schumacher@kde.org> 0005 SPDX-FileCopyrightText: 2005 Reinhold Kainhofer <reinhold@kainhofe.com> 0006 0007 SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #include "filestorage.h" 0011 #include "memorycalendar.h" 0012 0013 #include <QCommandLineParser> 0014 #include <QCoreApplication> 0015 #include <QDate> 0016 #include <QDebug> 0017 #include <QFile> 0018 #include <QStandardPaths> 0019 #include <QTextStream> 0020 #include <QTimeZone> 0021 0022 using namespace KCalendarCore; 0023 0024 int main(int argc, char **argv) 0025 { 0026 qputenv("TZ", "GMT"); 0027 0028 QCommandLineParser parser; 0029 parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("verbose"), QStringLiteral("Verbose output"))); 0030 0031 parser.addPositionalArgument(QStringLiteral("input"), QStringLiteral("Name of input file")); 0032 0033 parser.addPositionalArgument(QStringLiteral("output"), QStringLiteral("optional name of output file for the recurrence dates")); 0034 0035 QCoreApplication app(argc, argv); 0036 QCoreApplication::setApplicationName(QStringLiteral("testrecurson")); 0037 QCoreApplication::setApplicationVersion(QStringLiteral("0.1")); 0038 parser.process(app); 0039 0040 const QStringList parsedArgs = parser.positionalArguments(); 0041 0042 if (parsedArgs.isEmpty()) { 0043 parser.showHelp(); 0044 } 0045 0046 QString input = parsedArgs[0]; 0047 0048 QTextStream *outstream = nullptr; 0049 QString fn; 0050 if (parsedArgs.count() > 1) { 0051 fn = parsedArgs[1]; 0052 } 0053 QFile outfile(fn); 0054 if (!fn.isEmpty() && outfile.open(QIODevice::WriteOnly)) { 0055 outstream = new QTextStream(&outfile); 0056 } 0057 0058 MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc())); 0059 0060 FileStorage store(cal, input); 0061 if (!store.load()) { 0062 return 1; 0063 } 0064 QString tz = cal->nonKDECustomProperty("X-LibKCal-Testsuite-OutTZ"); 0065 const auto viewZone = tz.isEmpty() ? cal->timeZone() : QTimeZone(tz.toUtf8()); 0066 0067 const Incidence::List inc = cal->incidences(); 0068 for (const Incidence::Ptr &incidence : inc) { 0069 // qDebug() << " ->" << incidence->summary() << "<-"; 0070 0071 // incidence->recurrence()->dump(); 0072 0073 QDate dt(1996, 7, 1); 0074 if (outstream) { 0075 // Output to file for testing purposes 0076 int nr = 0; 0077 while (dt.year() <= 2020 && nr <= 500) { 0078 if (incidence->recursOn(dt, viewZone)) { 0079 (*outstream) << dt.toString(Qt::ISODate) << '\n'; 0080 nr++; 0081 } 0082 dt = dt.addDays(1); 0083 } 0084 } else { 0085 dt = QDate(2005, 1, 1); 0086 while (dt.year() < 2007) { 0087 if (incidence->recursOn(dt, viewZone)) { 0088 qDebug() << dt.toString(Qt::ISODate); 0089 } 0090 dt = dt.addDays(1); 0091 } 0092 } 0093 } 0094 0095 delete outstream; 0096 outfile.close(); 0097 return 0; 0098 }