diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /kalarm/dcophandler.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kalarm/dcophandler.cpp')
-rw-r--r-- | kalarm/dcophandler.cpp | 768 |
1 files changed, 768 insertions, 0 deletions
diff --git a/kalarm/dcophandler.cpp b/kalarm/dcophandler.cpp new file mode 100644 index 000000000..ab4105fe6 --- /dev/null +++ b/kalarm/dcophandler.cpp @@ -0,0 +1,768 @@ +/* + * dcophandler.cpp - handler for DCOP calls by other applications + * Program: kalarm + * Copyright © 2002-2006,2008 by David Jarvie <djarvie@kde.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kalarm.h" + +#include <stdlib.h> + +#include <kdebug.h> + +#include "alarmcalendar.h" +#include "daemon.h" +#include "functions.h" +#include "kalarmapp.h" +#include "kamail.h" +#include "karecurrence.h" +#include "mainwindow.h" +#include "preferences.h" +#include "dcophandler.moc" + +static const char* DCOP_OBJECT_NAME = "request"; // DCOP name of KAlarm's request interface +#ifdef OLD_DCOP +static const char* DCOP_OLD_OBJECT_NAME = "display"; +#endif + + +/*============================================================================= += DcopHandler += This class's function is to handle DCOP requests by other applications. +=============================================================================*/ +DcopHandler::DcopHandler() + : DCOPObject(DCOP_OBJECT_NAME), + QWidget() +{ + kdDebug(5950) << "DcopHandler::DcopHandler()\n"; +} + + +bool DcopHandler::cancelEvent(const QString& url,const QString& eventId) +{ + return theApp()->deleteEvent(url, eventId); +} + +bool DcopHandler::triggerEvent(const QString& url,const QString& eventId) +{ + return theApp()->triggerEvent(url, eventId); +} + +bool DcopHandler::scheduleMessage(const QString& message, const QString& startDateTime, int lateCancel, unsigned flags, + const QString& bgColor, const QString& fgColor, const QString& font, + const KURL& audioFile, int reminderMins, const QString& recurrence, + int subRepeatInterval, int subRepeatCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurrence, subRepeatInterval)) + return false; + return scheduleMessage(message, start, lateCancel, flags, bgColor, fgColor, font, audioFile, reminderMins, recur, subRepeatInterval, subRepeatCount); +} + +bool DcopHandler::scheduleMessage(const QString& message, const QString& startDateTime, int lateCancel, unsigned flags, + const QString& bgColor, const QString& fgColor, const QString& font, + const KURL& audioFile, int reminderMins, + int recurType, int recurInterval, int recurCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, recurCount)) + return false; + return scheduleMessage(message, start, lateCancel, flags, bgColor, fgColor, font, audioFile, reminderMins, recur); +} + +bool DcopHandler::scheduleMessage(const QString& message, const QString& startDateTime, int lateCancel, unsigned flags, + const QString& bgColor, const QString& fgColor, const QString& font, + const KURL& audioFile, int reminderMins, + int recurType, int recurInterval, const QString& endDateTime) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, endDateTime)) + return false; + return scheduleMessage(message, start, lateCancel, flags, bgColor, fgColor, font, audioFile, reminderMins, recur); +} + +bool DcopHandler::scheduleFile(const KURL& file, const QString& startDateTime, int lateCancel, unsigned flags, const QString& bgColor, + const KURL& audioFile, int reminderMins, const QString& recurrence, + int subRepeatInterval, int subRepeatCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurrence, subRepeatInterval)) + return false; + return scheduleFile(file, start, lateCancel, flags, bgColor, audioFile, reminderMins, recur, subRepeatInterval, subRepeatCount); +} + +bool DcopHandler::scheduleFile(const KURL& file, const QString& startDateTime, int lateCancel, unsigned flags, const QString& bgColor, + const KURL& audioFile, int reminderMins, int recurType, int recurInterval, int recurCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, recurCount)) + return false; + return scheduleFile(file, start, lateCancel, flags, bgColor, audioFile, reminderMins, recur); +} + +bool DcopHandler::scheduleFile(const KURL& file, const QString& startDateTime, int lateCancel, unsigned flags, const QString& bgColor, + const KURL& audioFile, int reminderMins, int recurType, int recurInterval, const QString& endDateTime) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, endDateTime)) + return false; + return scheduleFile(file, start, lateCancel, flags, bgColor, audioFile, reminderMins, recur); +} + +bool DcopHandler::scheduleCommand(const QString& commandLine, const QString& startDateTime, int lateCancel, unsigned flags, + const QString& recurrence, int subRepeatInterval, int subRepeatCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurrence, subRepeatInterval)) + return false; + return scheduleCommand(commandLine, start, lateCancel, flags, recur, subRepeatInterval, subRepeatCount); +} + +bool DcopHandler::scheduleCommand(const QString& commandLine, const QString& startDateTime, int lateCancel, unsigned flags, + int recurType, int recurInterval, int recurCount) +{ + DateTime start = convertStartDateTime(startDateTime); + if (!start.isValid()) + return false; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, recurCount)) + return false; + return scheduleCommand(commandLine, start, lateCancel, flags, recur); +} + +bool DcopHandler::scheduleCommand(const QString& commandLine, const QString& startDateTime, int lateCancel, unsigned flags, + int recurType, int recurInterval, const QString& endDateTime) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, endDateTime)) + return false; + return scheduleCommand(commandLine, start, lateCancel, flags, recur); +} + +bool DcopHandler::scheduleEmail(const QString& fromID, const QString& addresses, const QString& subject, const QString& message, + const QString& attachments, const QString& startDateTime, int lateCancel, unsigned flags, + const QString& recurrence, int subRepeatInterval, int subRepeatCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurrence, subRepeatInterval)) + return false; + return scheduleEmail(fromID, addresses, subject, message, attachments, start, lateCancel, flags, recur, subRepeatInterval, subRepeatCount); +} + +bool DcopHandler::scheduleEmail(const QString& fromID, const QString& addresses, const QString& subject, const QString& message, + const QString& attachments, const QString& startDateTime, int lateCancel, unsigned flags, + int recurType, int recurInterval, int recurCount) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, recurCount)) + return false; + return scheduleEmail(fromID, addresses, subject, message, attachments, start, lateCancel, flags, recur); +} + +bool DcopHandler::scheduleEmail(const QString& fromID, const QString& addresses, const QString& subject, const QString& message, + const QString& attachments, const QString& startDateTime, int lateCancel, unsigned flags, + int recurType, int recurInterval, const QString& endDateTime) +{ + DateTime start; + KARecurrence recur; + if (!convertRecurrence(start, recur, startDateTime, recurType, recurInterval, endDateTime)) + return false; + return scheduleEmail(fromID, addresses, subject, message, attachments, start, lateCancel, flags, recur); +} + +bool DcopHandler::edit(const QString& eventID) +{ + return KAlarm::edit(eventID); +} + +bool DcopHandler::editNew(const QString& templateName) +{ + return KAlarm::editNew(templateName); +} + + +/****************************************************************************** +* Schedule a message alarm, after converting the parameters from strings. +*/ +bool DcopHandler::scheduleMessage(const QString& message, const DateTime& start, int lateCancel, unsigned flags, + const QString& bgColor, const QString& fgColor, const QString& fontStr, + const KURL& audioFile, int reminderMins, const KARecurrence& recurrence, + int subRepeatInterval, int subRepeatCount) +{ + unsigned kaEventFlags = convertStartFlags(start, flags); + QColor bg = convertBgColour(bgColor); + if (!bg.isValid()) + return false; + QColor fg; + if (fgColor.isEmpty()) + fg = Preferences::defaultFgColour(); + else + { + fg.setNamedColor(fgColor); + if (!fg.isValid()) + { + kdError(5950) << "DCOP call: invalid foreground color: " << fgColor << endl; + return false; + } + } + QFont font; + if (fontStr.isEmpty()) + kaEventFlags |= KAEvent::DEFAULT_FONT; + else + { + if (!font.fromString(fontStr)) // N.B. this doesn't do good validation + { + kdError(5950) << "DCOP call: invalid font: " << fontStr << endl; + return false; + } + } + return theApp()->scheduleEvent(KAEvent::MESSAGE, message, start.dateTime(), lateCancel, kaEventFlags, bg, fg, font, + audioFile.url(), -1, reminderMins, recurrence, subRepeatInterval, subRepeatCount); +} + +/****************************************************************************** +* Schedule a file alarm, after converting the parameters from strings. +*/ +bool DcopHandler::scheduleFile(const KURL& file, + const DateTime& start, int lateCancel, unsigned flags, const QString& bgColor, + const KURL& audioFile, int reminderMins, const KARecurrence& recurrence, + int subRepeatInterval, int subRepeatCount) +{ + unsigned kaEventFlags = convertStartFlags(start, flags); + QColor bg = convertBgColour(bgColor); + if (!bg.isValid()) + return false; + return theApp()->scheduleEvent(KAEvent::FILE, file.url(), start.dateTime(), lateCancel, kaEventFlags, bg, Qt::black, QFont(), + audioFile.url(), -1, reminderMins, recurrence, subRepeatInterval, subRepeatCount); +} + +/****************************************************************************** +* Schedule a command alarm, after converting the parameters from strings. +*/ +bool DcopHandler::scheduleCommand(const QString& commandLine, + const DateTime& start, int lateCancel, unsigned flags, + const KARecurrence& recurrence, int subRepeatInterval, int subRepeatCount) +{ + unsigned kaEventFlags = convertStartFlags(start, flags); + return theApp()->scheduleEvent(KAEvent::COMMAND, commandLine, start.dateTime(), lateCancel, kaEventFlags, Qt::black, Qt::black, QFont(), + QString::null, -1, 0, recurrence, subRepeatInterval, subRepeatCount); +} + +/****************************************************************************** +* Schedule an email alarm, after validating the addresses and attachments. +*/ +bool DcopHandler::scheduleEmail(const QString& fromID, const QString& addresses, const QString& subject, + const QString& message, const QString& attachments, + const DateTime& start, int lateCancel, unsigned flags, + const KARecurrence& recurrence, int subRepeatInterval, int subRepeatCount) +{ + unsigned kaEventFlags = convertStartFlags(start, flags); + uint senderId = 0; + if (!fromID.isEmpty()) + { + senderId = KAMail::identityUoid(fromID); + if (!senderId) + { + kdError(5950) << "DCOP call scheduleEmail(): unknown sender ID: " << fromID << endl; + return false; + } + } + EmailAddressList addrs; + QString bad = KAMail::convertAddresses(addresses, addrs); + if (!bad.isEmpty()) + { + kdError(5950) << "DCOP call scheduleEmail(): invalid email addresses: " << bad << endl; + return false; + } + if (addrs.isEmpty()) + { + kdError(5950) << "DCOP call scheduleEmail(): no email address\n"; + return false; + } + QStringList atts; + bad = KAMail::convertAttachments(attachments, atts); + if (!bad.isEmpty()) + { + kdError(5950) << "DCOP call scheduleEmail(): invalid email attachment: " << bad << endl; + return false; + } + return theApp()->scheduleEvent(KAEvent::EMAIL, message, start.dateTime(), lateCancel, kaEventFlags, Qt::black, Qt::black, QFont(), + QString::null, -1, 0, recurrence, subRepeatInterval, subRepeatCount, senderId, addrs, subject, atts); +} + + +/****************************************************************************** +* Convert the start date/time string to a DateTime. The date/time string is in +* the format YYYY-MM-DD[THH:MM[:SS]] or [T]HH:MM[:SS] +*/ +DateTime DcopHandler::convertStartDateTime(const QString& startDateTime) +{ + DateTime start; + if (startDateTime.length() > 10) + { + // Both a date and a time are specified + start = QDateTime::fromString(startDateTime, Qt::ISODate); + } + else + { + // Check whether a time is specified + QString t; + if (startDateTime[0] == 'T') + t = startDateTime.mid(1); // it's a time: remove the leading 'T' + else if (!startDateTime[2].isDigit()) + t = startDateTime; // it's a time with no leading 'T' + + if (t.isEmpty()) + { + // It's a date + start = QDate::fromString(startDateTime, Qt::ISODate); + } + else + { + // It's a time, so use today as the date + start.set(QDate::currentDate(), QTime::fromString(t, Qt::ISODate)); + } + } + if (!start.isValid()) + kdError(5950) << "DCOP call: invalid start date/time: " << startDateTime << endl; + return start; +} + +/****************************************************************************** +* Convert the flag bits to KAEvent flag bits. +*/ +unsigned DcopHandler::convertStartFlags(const DateTime& start, unsigned flags) +{ + unsigned kaEventFlags = 0; + if (flags & REPEAT_AT_LOGIN) kaEventFlags |= KAEvent::REPEAT_AT_LOGIN; + if (flags & BEEP) kaEventFlags |= KAEvent::BEEP; + if (flags & SPEAK) kaEventFlags |= KAEvent::SPEAK; + if (flags & CONFIRM_ACK) kaEventFlags |= KAEvent::CONFIRM_ACK; + if (flags & REPEAT_SOUND) kaEventFlags |= KAEvent::REPEAT_SOUND; + if (flags & AUTO_CLOSE) kaEventFlags |= KAEvent::AUTO_CLOSE; + if (flags & EMAIL_BCC) kaEventFlags |= KAEvent::EMAIL_BCC; + if (flags & SCRIPT) kaEventFlags |= KAEvent::SCRIPT; + if (flags & EXEC_IN_XTERM) kaEventFlags |= KAEvent::EXEC_IN_XTERM; + if (flags & SHOW_IN_KORG) kaEventFlags |= KAEvent::COPY_KORGANIZER; + if (flags & DISABLED) kaEventFlags |= KAEvent::DISABLED; + if (start.isDateOnly()) kaEventFlags |= KAEvent::ANY_TIME; + return kaEventFlags; +} + +/****************************************************************************** +* Convert the background colour string to a QColor. +*/ +QColor DcopHandler::convertBgColour(const QString& bgColor) +{ + if (bgColor.isEmpty()) + return Preferences::defaultBgColour(); + QColor bg(bgColor); + if (!bg.isValid()) + kdError(5950) << "DCOP call: invalid background color: " << bgColor << endl; + return bg; +} + +bool DcopHandler::convertRecurrence(DateTime& start, KARecurrence& recurrence, + const QString& startDateTime, const QString& icalRecurrence, + int& subRepeatInterval) +{ + start = convertStartDateTime(startDateTime); + if (!start.isValid()) + return false; + if (!recurrence.set(icalRecurrence)) + return false; + if (subRepeatInterval && recurrence.type() == KARecurrence::NO_RECUR) + { + subRepeatInterval = 0; + kdWarning(5950) << "DCOP call: no recurrence specified, so sub-repetition ignored" << endl; + } + return true; +} + +bool DcopHandler::convertRecurrence(DateTime& start, KARecurrence& recurrence, const QString& startDateTime, + int recurType, int recurInterval, int recurCount) +{ + start = convertStartDateTime(startDateTime); + if (!start.isValid()) + return false; + return convertRecurrence(recurrence, start, recurType, recurInterval, recurCount, QDateTime()); +} + +bool DcopHandler::convertRecurrence(DateTime& start, KARecurrence& recurrence, const QString& startDateTime, + int recurType, int recurInterval, const QString& endDateTime) +{ + start = convertStartDateTime(startDateTime); + if (!start.isValid()) + return false; + QDateTime end; + if (endDateTime.find('T') < 0) + { + if (!start.isDateOnly()) + { + kdError(5950) << "DCOP call: alarm is date-only, but recurrence end is date/time" << endl; + return false; + } + end.setDate(QDate::fromString(endDateTime, Qt::ISODate)); + } + else + { + if (start.isDateOnly()) + { + kdError(5950) << "DCOP call: alarm is timed, but recurrence end is date-only" << endl; + return false; + } + end = QDateTime::fromString(endDateTime, Qt::ISODate); + } + if (!end.isValid()) + { + kdError(5950) << "DCOP call: invalid recurrence end date/time: " << endDateTime << endl; + return false; + } + return convertRecurrence(recurrence, start, recurType, recurInterval, 0, end); +} + +bool DcopHandler::convertRecurrence(KARecurrence& recurrence, const DateTime& start, int recurType, + int recurInterval, int recurCount, const QDateTime& end) +{ + KARecurrence::Type type; + switch (recurType) + { + case MINUTELY: type = KARecurrence::MINUTELY; break; + case DAILY: type = KARecurrence::DAILY; break; + case WEEKLY: type = KARecurrence::WEEKLY; break; + case MONTHLY: type = KARecurrence::MONTHLY_DAY; break; + case YEARLY: type = KARecurrence::ANNUAL_DATE; break; + break; + default: + kdError(5950) << "DCOP call: invalid recurrence type: " << recurType << endl; + return false; + } + recurrence.set(type, recurInterval, recurCount, start, end); + return true; +} + + +#ifdef OLD_DCOP +/*============================================================================= += DcopHandlerOld += This class's function is simply to act as a receiver for DCOP requests. +=============================================================================*/ +DcopHandlerOld::DcopHandlerOld() + : QWidget(), + DCOPObject(DCOP_OLD_OBJECT_NAME) +{ + kdDebug(5950) << "DcopHandlerOld::DcopHandlerOld()\n"; +} + +/****************************************************************************** +* Process a DCOP request. +*/ +bool DcopHandlerOld::process(const QCString& func, const QByteArray& data, QCString& replyType, QByteArray&) +{ + kdDebug(5950) << "DcopHandlerOld::process(): " << func << endl; + enum + { + OPERATION = 0x0007, // mask for main operation + HANDLE = 0x0001, + CANCEL = 0x0002, + TRIGGER = 0x0003, + SCHEDULE = 0x0004, + ALARM_TYPE = 0x00F0, // mask for SCHEDULE alarm type + MESSAGE = 0x0010, + FILE = 0x0020, + COMMAND = 0x0030, + EMAIL = 0x0040, + SCH_FLAGS = 0x0F00, // mask for SCHEDULE flags + REP_COUNT = 0x0100, + REP_END = 0x0200, + FONT = 0x0400, + PRE_096 = 0x1000, // old-style pre-0.9.6 deprecated method + PRE_091 = 0x2000 | PRE_096 // old-style pre-0.9.1 deprecated method + }; + replyType = "void"; + int function; + if (func == "handleEvent(const QString&,const QString&)" + || func == "handleEvent(QString,QString)") + function = HANDLE; + else if (func == "cancelEvent(const QString&,const QString&)" + || func == "cancelEvent(QString,QString)") + function = CANCEL; + else if (func == "triggerEvent(const QString&,const QString&)" + || func == "triggerEvent(QString,QString)") + function = TRIGGER; + + // scheduleMessage(message, dateTime, colour, colourfg, flags, audioURL, reminder, recurrence) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,const QColor&,Q_UINT32,const QString&,Q_INT32,const QString&)" + || func == "scheduleMessage(QString,QDateTime,QColor,QColor,Q_UINT32,QString,Q_UINT32,QString)") + function = SCHEDULE | MESSAGE; + // scheduleMessage(message, dateTime, colour, colourfg, font, flags, audioURL, reminder, recurrence) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,const QColor&,const QFont&,Q_UINT32,const QString&,Q_INT32,const QString&)" + || func == "scheduleMessage(QString,QDateTime,QColor,QColor,QFont,Q_UINT32,QString,Q_UINT32,QString)") + function = SCHEDULE | MESSAGE | FONT; + // scheduleFile(URL, dateTime, colour, flags, audioURL, reminder, recurrence) + else if (func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,const QString&)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,QString,Q_UINT32,QString)") + function = SCHEDULE | FILE; + // scheduleCommand(commandLine, dateTime, flags, recurrence) + else if (func == "scheduleCommand(const QString&,const QDateTime&,Q_UINT32,const QString&)" + || func == "scheduleCommand(QString,QDateTime,Q_UINT32,QString)") + function = SCHEDULE | COMMAND; + // scheduleEmail(addresses, subject, message, attachments, dateTime, flags, recurrence) + else if (func == "scheduleEmail(const QString&,const QString&,const QString&,const QString&,const QDateTime&,Q_UINT32,const QString&)" + || func == "scheduleEmail(QString,QString,QString,QString,QDateTime,Q_UINT32,QString)") + function = SCHEDULE | EMAIL; + + // scheduleMessage(message, dateTime, colour, colourfg, flags, audioURL, reminder, recurType, interval, recurCount) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleMessage(QString,QDateTime,QColor,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | MESSAGE | REP_COUNT; + // scheduleFile(URL, dateTime, colour, flags, audioURL, reminder, recurType, interval, recurCount) + else if (func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | FILE | REP_COUNT; + // scheduleCommand(commandLine, dateTime, flags, recurType, interval, recurCount) + else if (func == "scheduleCommand(const QString&,const QDateTime&,Q_UINT32,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleCommand(QString,QDateTime,Q_UINT32,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | COMMAND | REP_COUNT; + // scheduleEmail(addresses, subject, message, attachments, dateTime, flags, recurType, interval, recurCount) + else if (func == "scheduleEmail(const QString&,const QString&,const QString&,const QString&,const QDateTime&,Q_UINT32,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleEmail(QString,QString,QString,QString,QDateTime,Q_UINT32,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | EMAIL | REP_COUNT; + + // scheduleMessage(message, dateTime, colour, colourfg, flags, audioURL, reminder, recurType, interval, endTime) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleMessage(QString,QDateTime,QColor,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | MESSAGE | REP_END; + // scheduleFile(URL, dateTime, colour, flags, audioURL, reminder, recurType, interval, endTime) + else if (func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | FILE | REP_END; + // scheduleCommand(commandLine, dateTime, flags, recurType, interval, endTime) + else if (func == "scheduleCommand(const QString&,const QDateTime&,Q_UINT32,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleCommand(QString,QDateTime,Q_UINT32,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | COMMAND | REP_END; + // scheduleEmail(addresses, subject, message, attachments, dateTime, flags, recurType, interval, endTime) + else if (func == "scheduleEmail(const QString&,const QString&,const QString&,const QString&,const QDateTime&,Q_UINT32,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleEmail(QString,QString,QString,QString,QDateTime,Q_UINT32,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | EMAIL | REP_END; + + // Deprecated methods: backwards compatibility with KAlarm pre-0.9.6 + // scheduleMessage(message, dateTime, colour, flags, audioURL, reminder, recurrence) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,const QString&)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,QString,Q_UINT32,QString)") + function = SCHEDULE | MESSAGE | PRE_096; + // scheduleMessage(message, dateTime, colour, font, flags, audioURL, reminder, recurrence) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,const QFont&,Q_UINT32,const QString&,Q_INT32,const QString&)" + || func == "scheduleMessage(QString,QDateTime,QColor,QFont,Q_UINT32,QString,Q_UINT32,QString)") + function = SCHEDULE | MESSAGE | FONT | PRE_096; + // scheduleMessage(message, dateTime, colour, flags, audioURL, reminder, recurType, interval, recurCount) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | MESSAGE | REP_COUNT | PRE_096; + // scheduleMessage(message, dateTime, colour, flags, audioURL, reminder, recurType, interval, endTime) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | MESSAGE | REP_END | PRE_096; + + // Deprecated methods: backwards compatibility with KAlarm pre-0.9.1 + // scheduleMessage(message, dateTime, colour, flags, audioURL) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,QString)") + function = SCHEDULE | MESSAGE | PRE_091; + // scheduleFile(URL, dateTime, colour, flags, audioURL) + else if (func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,QString)") + function = SCHEDULE | FILE | PRE_091; + // scheduleMessage(message, dateTime, colour, flags, audioURL, recurType, interval, recurCount) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | MESSAGE | REP_COUNT | PRE_091; + // scheduleFile(URL, dateTime, colour, flags, audioURL, recurType, interval, recurCount) + else if (func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,Q_INT32)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,Q_INT32)") + function = SCHEDULE | FILE | REP_COUNT | PRE_091; + // scheduleMessage(message, dateTime, colour, flags, audioURL, recurType, interval, endTime) + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | MESSAGE | REP_END | PRE_091; + // scheduleFile(URL, dateTime, colour, flags, audioURL, recurType, interval, endTime) + else if (func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,const QString&,Q_INT32,Q_INT32,const QDateTime&)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,QString,Q_INT32,Q_INT32,QDateTime)") + function = SCHEDULE | FILE | REP_END | PRE_091; + + // Obsolete methods: backwards compatibility with KAlarm pre-0.7 + else if (func == "scheduleMessage(const QString&,const QDateTime&,const QColor&,Q_UINT32,Q_INT32,Q_INT32)" + || func == "scheduleMessage(QString,QDateTime,QColor,Q_UINT32,Q_INT32,Q_INT32)" + || func == "scheduleFile(const QString&,const QDateTime&,const QColor&,Q_UINT32,Q_INT32,Q_INT32)" + || func == "scheduleFile(QString,QDateTime,QColor,Q_UINT32,Q_INT32,Q_INT32)" + || func == "scheduleCommand(const QString&,const QDateTime&,Q_UINT32,Q_INT32,Q_INT32)" + || func == "scheduleCommand(QString,QDateTime,Q_UINT32,Q_INT32,Q_INT32)" + // Obsolete methods: backwards compatibility with KAlarm pre-0.6 + || func == "cancelMessage(const QString&,const QString&)" + || func == "cancelMessage(QString,QString)" + || func == "displayMessage(const QString&,const QString&)" + || func == "displayMessage(QString,QString)") + { + kdError(5950) << "DcopHandlerOld::process(): obsolete DCOP function call: '" << func << "'" << endl; + return false; + } + else + { + kdError(5950) << "DcopHandlerOld::process(): unknown DCOP function" << endl; + return false; + } + + switch (function & OPERATION) + { + case HANDLE: // trigger or cancel event with specified ID from calendar file + case CANCEL: // cancel event with specified ID from calendar file + case TRIGGER: // trigger event with specified ID in calendar file + { + + QDataStream arg(data, IO_ReadOnly); + QString urlString, vuid; + arg >> urlString >> vuid; + switch (function) + { + case HANDLE: + return theApp()->handleEvent(urlString, vuid); + case CANCEL: + return theApp()->deleteEvent(urlString, vuid); + case TRIGGER: + return theApp()->triggerEvent(urlString, vuid); + } + break; + } + case SCHEDULE: // schedule a new event + { + KAEvent::Action action; + switch (function & ALARM_TYPE) + { + case MESSAGE: action = KAEvent::MESSAGE; break; + case FILE: action = KAEvent::FILE; break; + case COMMAND: action = KAEvent::COMMAND; break; + case EMAIL: action = KAEvent::EMAIL; break; + default: return false; + } + QDataStream arg(data, IO_ReadOnly); + QString text, audioFile, mailSubject; + float audioVolume = -1; + EmailAddressList mailAddresses; + QStringList mailAttachments; + QDateTime dateTime, endTime; + QColor bgColour; + QColor fgColour(Qt::black); + QFont font; + Q_UINT32 flags; + int lateCancel = 0; + KARecurrence recurrence; + Q_INT32 reminderMinutes = 0; + if (action == KAEvent::EMAIL) + { + QString addresses, attachments; + arg >> addresses >> mailSubject >> text >> attachments; + QString bad = KAMail::convertAddresses(addresses, mailAddresses); + if (!bad.isEmpty()) + { + kdError(5950) << "DcopHandlerOld::process(): invalid email addresses: " << bad << endl; + return false; + } + if (mailAddresses.isEmpty()) + { + kdError(5950) << "DcopHandlerOld::process(): no email address\n"; + return false; + } + bad = KAMail::convertAttachments(attachments, mailAttachments); + if (!bad.isEmpty()) + { + kdError(5950) << "DcopHandlerOld::process(): invalid email attachment: " << bad << endl; + return false; + } + } + else + arg >> text; + arg.readRawBytes((char*)&dateTime, sizeof(dateTime)); + if (action != KAEvent::COMMAND) + arg.readRawBytes((char*)&bgColour, sizeof(bgColour)); + if (action == KAEvent::MESSAGE && !(function & PRE_096)) + arg.readRawBytes((char*)&fgColour, sizeof(fgColour)); + if (function & FONT) + { + arg.readRawBytes((char*)&font, sizeof(font)); + arg >> flags; + } + else + { + arg >> flags; + flags |= KAEvent::DEFAULT_FONT; + } + if (flags & KAEvent::LATE_CANCEL) + lateCancel = 1; + if (action == KAEvent::MESSAGE || action == KAEvent::FILE) + { + arg >> audioFile; + if (!(function & PRE_091)) + arg >> reminderMinutes; + } + if (function & (REP_COUNT | REP_END)) + { + KARecurrence::Type recurType; + Q_INT32 recurCount = 0; + Q_INT32 recurInterval; + Q_INT32 type; + arg >> type >> recurInterval; + switch (type) + { + case 1: recurType = KARecurrence::MINUTELY; break; + case 3: recurType = KARecurrence::DAILY; break; + case 4: recurType = KARecurrence::WEEKLY; break; + case 6: recurType = KARecurrence::MONTHLY_DAY; break; + case 7: recurType = KARecurrence::ANNUAL_DATE; break; + default: + kdError(5950) << "DcopHandlerOld::process(): invalid simple repetition type: " << type << endl; + return false; + } + if (function & REP_COUNT) + arg >> recurCount; + else + arg.readRawBytes((char*)&endTime, sizeof(endTime)); + recurrence.set(recurType, recurInterval, recurCount, + DateTime(dateTime, flags & KAEvent::ANY_TIME), endTime); + } + else if (!(function & PRE_091)) + { + QString rule; + arg >> rule; + recurrence.set(rule); + } + return theApp()->scheduleEvent(action, text, dateTime, lateCancel, flags, bgColour, fgColour, font, audioFile, + audioVolume, reminderMinutes, recurrence, 0, 0, 0, mailAddresses, mailSubject, mailAttachments); + } + } + return false; +} +#endif // OLD_DCOP |