File indexing completed on 2024-05-12 05:10:36

0001 /******************************************************************************
0002  * konsolekalendarchange.cpp                                                  *
0003  *                                                                            *
0004  * KonsoleKalendar is a command line interface to KDE calendars               *
0005  * SPDX-FileCopyrightText: 2002-2004 Tuukka Pasanen <illuusio@mailcity.com>   *
0006  * SPDX-FileCopyrightText: 2003-2005 Allen Winter <winter@kde.org>            *
0007  *                                                                            *
0008  * SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 *
0009  *                                                                            *
0010  ******************************************************************************/
0011 /**
0012  * @file konsolekalendarchange.cpp
0013  * Provides the KonsoleKalendarChange class definition.
0014  * @author Tuukka Pasanen
0015  * @author Allen Winter
0016  */
0017 #include "konsolekalendarchange.h"
0018 
0019 #include "konsolekalendar_debug.h"
0020 #include <KLocalizedString>
0021 
0022 #include <QElapsedTimer>
0023 #include <QEventLoop>
0024 
0025 #include <cstdlib>
0026 #include <iostream>
0027 
0028 using namespace KCalendarCore;
0029 using namespace std;
0030 
0031 KonsoleKalendarChange::KonsoleKalendarChange(KonsoleKalendarVariables *vars)
0032 {
0033     m_variables = vars;
0034 }
0035 
0036 KonsoleKalendarChange::~KonsoleKalendarChange() = default;
0037 
0038 bool KonsoleKalendarChange::changeEvent()
0039 {
0040     bool status = false;
0041 
0042     qCDebug(KONSOLEKALENDAR_LOG) << "konsolekalendarchange.cpp::changeEvent()";
0043 
0044     /*
0045      * Retrieve event on the basis of the unique string ID
0046      */
0047     Event::Ptr event = m_variables->getCalendar()->event(m_variables->getUID());
0048     if (event) {
0049         if (m_variables->isDryRun()) {
0050             cout << i18n("Change Event <Dry Run>:").toLocal8Bit().data() << endl;
0051             printSpecs(event);
0052 
0053             cout << i18n("To Event <Dry Run>:").toLocal8Bit().data() << endl;
0054             printSpecs();
0055         } else {
0056             qCDebug(KONSOLEKALENDAR_LOG) << "konsolekalendarchange.cpp:changeEvent() :" << m_variables->getUID().toLocal8Bit().data();
0057 
0058             if (m_variables->isVerbose()) {
0059                 cout << i18n("Change Event <Verbose>:").toLocal8Bit().data() << endl;
0060                 printSpecs(event);
0061 
0062                 cout << i18n("To Event <Dry Run>:").toLocal8Bit().data() << endl;
0063                 printSpecs();
0064             }
0065 
0066             event->startUpdates();
0067             Akonadi::CalendarBase::Ptr calendar = m_variables->getCalendar();
0068             const auto timeZone = calendar->timeZone();
0069             if (m_variables->isStartDateTime()) {
0070                 event->setDtStart(m_variables->getStartDateTime().toTimeZone(timeZone));
0071             }
0072 
0073             if (m_variables->isEndDateTime()) {
0074                 event->setDtEnd(m_variables->getEndDateTime().toTimeZone(timeZone));
0075             }
0076 
0077             event->setAllDay(m_variables->getFloating());
0078 
0079             if (m_variables->isSummary()) {
0080                 event->setSummary(m_variables->getSummary());
0081             }
0082 
0083             if (m_variables->isDescription()) {
0084                 event->setDescription(m_variables->getDescription());
0085             }
0086 
0087             if (m_variables->isLocation()) {
0088                 event->setLocation(m_variables->getLocation());
0089             }
0090             event->endUpdates();
0091             QEventLoop loop;
0092             QObject::connect(calendar.data(), &Akonadi::CalendarBase::modifyFinished, &loop, &QEventLoop::quit);
0093             QElapsedTimer t;
0094             t.start();
0095             calendar->modifyIncidence(event);
0096             loop.exec();
0097 
0098             status = *event == *calendar->incidence(event->uid());
0099 
0100             if (status) {
0101                 cout << i18n("Success: \"%1\" changed", event->summary()).toLocal8Bit().data() << endl;
0102             } else {
0103                 cout << i18n("Failure: \"%1\" not changed", event->summary()).toLocal8Bit().data() << endl;
0104             }
0105         }
0106     }
0107 
0108     qCDebug(KONSOLEKALENDAR_LOG) << "konsolekalendarchange.cpp::changeEvent() | Done";
0109     return status;
0110 }
0111 
0112 void KonsoleKalendarChange::printSpecs(const KCalendarCore::Event::Ptr &event)
0113 {
0114     cout << i18n("  UID:   %1", event->uid()).toLocal8Bit().data() << endl;
0115 
0116     cout << i18n("  What:  %1", event->summary()).toLocal8Bit().data() << endl;
0117 
0118     const auto timeZone = m_variables->getCalendar()->timeZone();
0119     cout << i18n("  Begin: %1", event->dtStart().toTimeZone(timeZone).toString(Qt::TextDate)).toLocal8Bit().data() << endl;
0120 
0121     cout << i18n("  End:   %1", event->dtEnd().toTimeZone(timeZone).toString(Qt::TextDate)).toLocal8Bit().data() << endl;
0122 
0123     cout << i18n("  Desc:  %1", event->description()).toLocal8Bit().data() << endl;
0124 
0125     cout << i18n("  Location:  %1", event->location()).toLocal8Bit().data() << endl;
0126 }
0127 
0128 void KonsoleKalendarChange::printSpecs()
0129 {
0130     cout << i18n("  UID:   %1", m_variables->getUID()).toLocal8Bit().data() << endl;
0131 
0132     cout << i18n("  What:  %1", m_variables->getSummary()).toLocal8Bit().data() << endl;
0133 
0134     cout << i18n("  Begin: %1", m_variables->getStartDateTime().toString(Qt::TextDate)).toLocal8Bit().data() << endl;
0135 
0136     cout << i18n("  End:   %1", m_variables->getEndDateTime().toString(Qt::TextDate)).toLocal8Bit().data() << endl;
0137 
0138     cout << i18n("  Desc:  %1", m_variables->getDescription()).toLocal8Bit().data() << endl;
0139 
0140     cout << i18n("  Location:  %1", m_variables->getLocation()).toLocal8Bit().data() << endl;
0141 }