1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
/*
This file is part of the kcalcore library.
Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
Copyright (C) 2005 Reinhold Kainhofer <reinhold@kainhofe.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "filestorage.h"
#include "memorycalendar.h"
#include "utils.h"
#include <QDebug>
#include <QDate>
#include <QFile>
#include <QStandardPaths>
#include <QTextStream>
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QTimeZone>
using namespace KCalCore;
int main(int argc, char **argv)
{
qputenv("TZ", "GMT");
QCommandLineParser parser;
parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("verbose"),
QStringLiteral("Verbose output")));
parser.addPositionalArgument(QStringLiteral("input"),
QStringLiteral("Name of input file"));
parser.addPositionalArgument(QStringLiteral("output"),
QStringLiteral("optional name of output file for the recurrence dates"));
QCoreApplication app(argc, argv);
QCoreApplication::setApplicationName(QStringLiteral("testrecurson"));
QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
parser.process(app);
const QStringList parsedArgs = parser.positionalArguments();
if (parsedArgs.isEmpty()) {
parser.showHelp();
}
QString input = parsedArgs[0];
QTextStream *outstream = nullptr;
QString fn;
if (parsedArgs.count() > 1) {
fn = parsedArgs[1];
// qDebug() << "We have a file name given:" << fn;
}
QFile outfile(fn);
if (!fn.isEmpty() && outfile.open(QIODevice::WriteOnly)) {
// qDebug() << "Opened output file!!!";
outstream = new QTextStream(&outfile);
}
MemoryCalendar::Ptr cal(new MemoryCalendar(QTimeZone::utc()));
FileStorage store(cal, input);
if (!store.load()) {
return 1;
}
QString tz = cal->nonKDECustomProperty("X-LibKCal-Testsuite-OutTZ");
const auto viewZone = tz.isEmpty() ? cal->timeZone() : QTimeZone(tz.toUtf8());
Incidence::List inc = cal->incidences();
for (Incidence::List::Iterator it = inc.begin(); it != inc.end(); ++it) {
Incidence::Ptr incidence = *it;
// qDebug() << " ->" << incidence->summary() << "<-";
// incidence->recurrence()->dump();
QDate dt(1996, 7, 1);
if (outstream) {
// Output to file for testing purposes
int nr = 0;
while (dt.year() <= 2020 && nr <= 500) {
if (incidence->recursOn(dt, viewZone)) {
(*outstream) << dt.toString(Qt::ISODate) << endl;
nr++;
}
dt = dt.addDays(1);
}
} else {
dt = QDate(2005, 1, 1);
while (dt.year() < 2007) {
if (incidence->recursOn(dt, viewZone)) {
qDebug() << dt.toString(Qt::ISODate);
}
dt = dt.addDays(1);
}
}
}
delete outstream;
outfile.close();
return 0;
}
|