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 }