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 121 122 123 124 125 126 127 128
|
/*
This file is part of the kcalcore library.
SPDX-FileCopyrightText: 2003 Cornelius Schumacher <schumacher@kde.org>
SPDX-FileCopyrightText: 2005 Reinhold Kainhofer <reinhold@kainhofe.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "filestorage.h"
#include "memorycalendar.h"
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QTimeZone>
using namespace KCalendarCore;
static QString dumpTime(const QDateTime &dt, const QTimeZone &viewZone);
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("testrecurrencenew"));
QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
parser.process(app);
const QStringList parsedArgs = parser.positionalArguments();
if (parsedArgs.isEmpty()) {
parser.showHelp();
}
QString input = parsedArgs[0];
qDebug() << "Input file:" << input;
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()));
QTimeZone viewZone;
FileStorage store(cal, input);
if (!store.load()) {
return 1;
}
QString tz = cal->nonKDECustomProperty("X-LibKCal-Testsuite-OutTZ");
if (!tz.isEmpty()) {
viewZone = QTimeZone(tz.toUtf8());
}
Incidence::List inc = cal->incidences();
for (Incidence::List::Iterator it = inc.begin(); it != inc.end(); ++it) {
Incidence::Ptr incidence = *it;
qDebug() << "*+*+*+*+*+*+*+*+*+*";
qDebug() << " ->" << incidence->summary() << "<-";
incidence->recurrence()->dump();
QDateTime dt;
if (incidence->allDay()) {
dt = incidence->dtStart().addDays(-1);
} else {
dt = incidence->dtStart().addSecs(-1);
}
int i = 0;
if (outstream) {
// Output to file for testing purposes
while (dt.isValid() && i < 500) {
++i;
dt = incidence->recurrence()->getNextDateTime(dt);
if (dt.isValid()) {
(*outstream) << dumpTime(dt, viewZone) << '\n';
}
}
} else {
incidence->recurrence()->dump();
// Output to konsole
while (dt.isValid() && i < 10) {
++i;
qDebug() << "-------------------------------------------";
dt = incidence->recurrence()->getNextDateTime(dt);
if (dt.isValid()) {
qDebug() << " *~*~*~*~ Next date is:" << dumpTime(dt, viewZone);
}
}
}
}
delete outstream;
outfile.close();
return 0;
}
QString dumpTime(const QDateTime &dt, const QTimeZone &viewZone)
{
if (!dt.isValid()) {
return QString();
}
const QDateTime vdt = viewZone.isValid() ? dt.toTimeZone(viewZone) : dt;
QString format = QStringLiteral("yyyy-MM-ddThh:mm:ss t");
if (viewZone.isValid()) {
format += QStringLiteral(" '%1'").arg(QString::fromUtf8(viewZone.id()));
} else if (vdt.timeZone().isValid()) {
format += QStringLiteral(" '%1'").arg(QString::fromUtf8(vdt.timeZone().id()));
}
return vdt.toString(format);
}
|