diff options
Diffstat (limited to 'korganizer/korgac/koalarmclient.cpp')
-rw-r--r-- | korganizer/korgac/koalarmclient.cpp | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/korganizer/korgac/koalarmclient.cpp b/korganizer/korgac/koalarmclient.cpp new file mode 100644 index 000000000..c4ef2de82 --- /dev/null +++ b/korganizer/korgac/koalarmclient.cpp @@ -0,0 +1,210 @@ +/* + KOrganizer Alarm Daemon Client. + + This file is part of KOrganizer. + + Copyright (c) 2002,2003 Cornelius Schumacher + + 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. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "koalarmclient.h" + +#include "alarmdockwindow.h" +#include "alarmdialog.h" + +#include <libkcal/calendarresources.h> + +#include <kstandarddirs.h> +#include <kdebug.h> +#include <klocale.h> +#include <kapplication.h> +#include <kwin.h> + +#include <qpushbutton.h> + +KOAlarmClient::KOAlarmClient( QObject *parent, const char *name ) + : DCOPObject( "ac" ), QObject( parent, name ), mDialog( 0 ) +{ + kdDebug(5890) << "KOAlarmClient::KOAlarmClient()" << endl; + + mDocker = new AlarmDockWindow; + mDocker->show(); + connect( this, SIGNAL( reminderCount( int ) ), mDocker, SLOT( slotUpdate( int ) ) ); + connect( mDocker, SIGNAL( quitSignal() ), SLOT( slotQuit() ) ); + + KConfig c( locate( "config", "korganizerrc" ) ); + c.setGroup( "Time & Date" ); + QString tz = c.readEntry( "TimeZoneId" ); + kdDebug(5890) << "TimeZone: " << tz << endl; + + mCalendar = new CalendarResources( tz ); + mCalendar->readConfig(); + mCalendar->load(); + + connect( &mCheckTimer, SIGNAL( timeout() ), SLOT( checkAlarms() ) ); + + KConfig *config = kapp->config(); + config->setGroup( "Alarms" ); + int interval = config->readNumEntry( "Interval", 60 ); + kdDebug(5890) << "KOAlarmClient check interval: " << interval << " seconds." + << endl; + mLastChecked = config->readDateTimeEntry( "CalendarsLastChecked" ); + + // load reminders that were active when quitting + config->setGroup( "General" ); + int numReminders = config->readNumEntry( "Reminders", 0 ); + for ( int i=1; i<=numReminders; ++i ) + { + QString group( QString( "Incidence-%1" ).arg( i ) ); + config->setGroup( group ); + QString uid = config->readEntry( "UID" ); + QDateTime dt = config->readDateTimeEntry( "RemindAt" ); + if ( !uid.isEmpty() ) + createReminder( mCalendar->incidence( uid ), dt ); + config->deleteGroup( group ); + } + config->setGroup( "General" ); + if (numReminders) { + config->writeEntry( "Reminders", 0 ); + config->sync(); + } + + checkAlarms(); + mCheckTimer.start( 1000 * interval ); // interval in seconds +} + +KOAlarmClient::~KOAlarmClient() +{ + delete mCalendar; + delete mDocker; + delete mDialog; +} + +void KOAlarmClient::checkAlarms() +{ + KConfig *cfg = kapp->config(); + + cfg->setGroup( "General" ); + if ( !cfg->readBoolEntry( "Enabled", true ) ) return; + + QDateTime from = mLastChecked.addSecs( 1 ); + mLastChecked = QDateTime::currentDateTime(); + + kdDebug(5891) << "Check: " << from.toString() << " - " << mLastChecked.toString() << endl; + + QValueList<Alarm *> alarms = mCalendar->alarms( from, mLastChecked ); + + QValueList<Alarm *>::ConstIterator it; + for( it = alarms.begin(); it != alarms.end(); ++it ) { + kdDebug(5891) << "REMINDER: " << (*it)->parent()->summary() << endl; + Incidence *incidence = mCalendar->incidence( (*it)->parent()->uid() ); + createReminder( incidence, QDateTime::currentDateTime() ); + } +} + +void KOAlarmClient::createReminder( KCal::Incidence *incidence, QDateTime dt ) +{ + if ( !incidence ) + return; + + if ( !mDialog ) { + mDialog = new AlarmDialog(); + connect( mDialog, SIGNAL(reminderCount(int)), mDocker, SLOT(slotUpdate(int)) ); + connect( mDocker, SIGNAL(suspendAllSignal()), mDialog, SLOT(suspendAll()) ); + connect( mDocker, SIGNAL(dismissAllSignal()), mDialog, SLOT(dismissAll()) ); + connect( this, SIGNAL( saveAllSignal() ), mDialog, SLOT( slotSave() ) ); + } + + mDialog->addIncidence( incidence, dt ); + mDialog->wakeUp(); + saveLastCheckTime(); +} + +void KOAlarmClient::slotQuit() +{ + emit saveAllSignal(); + saveLastCheckTime(); + quit(); +} + +void KOAlarmClient::saveLastCheckTime() +{ + KConfigGroup cg( KGlobal::config(), "Alarms"); + cg.writeEntry( "CalendarsLastChecked", mLastChecked ); + KGlobal::config()->sync(); +} + +void KOAlarmClient::quit() +{ + kdDebug(5890) << "KOAlarmClient::quit()" << endl; + kapp->quit(); +} + +bool KOAlarmClient::commitData( QSessionManager& ) +{ + emit saveAllSignal(); + saveLastCheckTime(); + return true; +} + +void KOAlarmClient::forceAlarmCheck() +{ + checkAlarms(); + saveLastCheckTime(); +} + +void KOAlarmClient::dumpDebug() +{ + KConfig *cfg = kapp->config(); + + cfg->setGroup( "Alarms" ); + QDateTime lastChecked = cfg->readDateTimeEntry( "CalendarsLastChecked" ); + + kdDebug(5890) << "Last Check: " << lastChecked << endl; +} + +QStringList KOAlarmClient::dumpAlarms() +{ + QDateTime start = QDateTime( QDateTime::currentDateTime().date(), + QTime( 0, 0 ) ); + QDateTime end = start.addDays( 1 ).addSecs( -1 ); + + QStringList lst; + // Don't translate, this is for debugging purposes. + lst << QString("AlarmDeamon::dumpAlarms() from ") + start.toString()+ " to " + + end.toString(); + + QValueList<Alarm*> alarms = mCalendar->alarms( start, end ); + QValueList<Alarm*>::ConstIterator it; + for( it = alarms.begin(); it != alarms.end(); ++it ) { + Alarm *a = *it; + lst << QString(" ") + a->parent()->summary() + " (" + + a->time().toString() + ")"; + } + + return lst; +} + +void KOAlarmClient::debugShowDialog() +{ +// showAlarmDialog(); +} + +#include "koalarmclient.moc" |