korganizer

koalarmclient.cpp

00001 /*
00002     KOrganizer Alarm Daemon Client.
00003 
00004     This file is part of KOrganizer.
00005 
00006     Copyright (c) 2002,2003 Cornelius Schumacher
00007 
00008     This program is free software; you can redistribute it and/or modify
00009     it under the terms of the GNU General Public License as published by
00010     the Free Software Foundation; either version 2 of the License, or
00011     (at your option) any later version.
00012 
00013     This program is distributed in the hope that it will be useful,
00014     but WITHOUT ANY WARRANTY; without even the implied warranty of
00015     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00016     GNU General Public License for more details.
00017 
00018     You should have received a copy of the GNU General Public License
00019     along with this program; if not, write to the Free Software
00020     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00021 
00022     As a special exception, permission is given to link this program
00023     with any edition of Qt, and distribute the resulting executable,
00024     without including the source code for Qt in the source distribution.
00025 */
00026 
00027 #include "koalarmclient.h"
00028 
00029 #include "alarmdockwindow.h"
00030 #include "alarmdialog.h"
00031 
00032 #include <libkcal/calendarresources.h>
00033 
00034 #include <kstandarddirs.h>
00035 #include <kdebug.h>
00036 #include <klocale.h>
00037 #include <kapplication.h>
00038 #include <kwin.h>
00039 
00040 #include <qpushbutton.h>
00041 
00042 KOAlarmClient::KOAlarmClient( QObject *parent, const char *name )
00043   : DCOPObject( "ac" ), QObject( parent, name )
00044 {
00045   kdDebug(5890) << "KOAlarmClient::KOAlarmClient()" << endl;
00046 
00047   mDocker = new AlarmDockWindow;
00048   mDocker->show();
00049   connect( this, SIGNAL( reminderCount( int ) ), mDocker, SLOT( slotUpdate( int ) ) );
00050   connect( mDocker, SIGNAL( quitSignal() ), SLOT( slotQuit() ) );
00051 
00052   KConfig c( locate( "config", "korganizerrc" ) );
00053   c.setGroup( "Time & Date" );
00054   QString tz = c.readEntry( "TimeZoneId" );
00055   kdDebug(5890) << "TimeZone: " << tz << endl;
00056 
00057   mCalendar = new CalendarResources( tz );
00058   mCalendar->readConfig();
00059   mCalendar->load();
00060 
00061   connect( &mCheckTimer, SIGNAL( timeout() ), SLOT( checkAlarms() ) );
00062 
00063   KConfig *config = kapp->config();
00064   config->setGroup( "Alarms" );
00065   int interval = config->readNumEntry( "Interval", 60 );
00066   kdDebug(5890) << "KOAlarmClient check interval: " << interval << " seconds."
00067                 << endl;
00068   mLastChecked = config->readDateTimeEntry( "CalendarsLastChecked" );
00069 
00070   // load reminders that were active when quitting
00071   config->setGroup( "General" );
00072   int numReminders = config->readNumEntry( "Reminders", 0 );
00073   for ( int i=1; i<=numReminders; ++i )
00074   {
00075     QString group( QString( "Incidence-%1" ).arg( i ) );
00076     config->setGroup( group );
00077     QString uid = config->readEntry( "UID" );
00078     QDateTime dt = config->readDateTimeEntry( "RemindAt" );
00079     if ( !uid.isEmpty() )
00080       createReminder( mCalendar->incidence( uid ), dt );
00081     config->deleteGroup( group );
00082   }
00083   config->setGroup( "General" );
00084   if (numReminders) {
00085      config->writeEntry( "Reminders", 0 );
00086      config->sync();
00087   }
00088 
00089   checkAlarms();
00090   mCheckTimer.start( 1000 * interval );  // interval in seconds
00091 }
00092 
00093 KOAlarmClient::~KOAlarmClient()
00094 {
00095   delete mCalendar;
00096   delete mDocker;
00097 }
00098 
00099 void KOAlarmClient::checkAlarms()
00100 {
00101   KConfig *cfg = kapp->config();
00102 
00103   cfg->setGroup( "General" );
00104   if ( !cfg->readBoolEntry( "Enabled", true ) ) return;
00105 
00106   QDateTime from = mLastChecked.addSecs( 1 );
00107   mLastChecked = QDateTime::currentDateTime();
00108 
00109   kdDebug(5891) << "Check: " << from.toString() << " - " << mLastChecked.toString() << endl;
00110 
00111   QValueList<Alarm *> alarms = mCalendar->alarms( from, mLastChecked );
00112 
00113   QValueList<Alarm *>::ConstIterator it;
00114   for( it = alarms.begin(); it != alarms.end(); ++it ) {
00115     kdDebug(5891) << "REMINDER: " << (*it)->parent()->summary() << endl;
00116     Incidence *incidence = mCalendar->incidence( (*it)->parent()->uid() );
00117     createReminder( incidence, QDateTime::currentDateTime() );
00118   }
00119 }
00120 
00121 void KOAlarmClient::createReminder( KCal::Incidence *incidence, QDateTime dt )
00122 {
00123   if ( !incidence )
00124     return;
00125 
00126   AlarmDialog *dialog = new AlarmDialog();
00127   dialog->setIncidence( incidence );
00128   dialog->setRemindAt( dt );
00129   connect( dialog, SIGNAL( finishedSignal( AlarmDialog *) ), SLOT( slotRemove( AlarmDialog *) ) );
00130   connect( mDocker, SIGNAL( suspendAllSignal() ), dialog, SLOT( slotUser1() ) );
00131   connect( mDocker, SIGNAL( dismissAllSignal() ), dialog, SLOT( slotOk() ) );
00132   connect( this, SIGNAL( saveAllSignal() ), dialog, SLOT( slotSave() ) );
00133   dialog->wakeUp();
00134   mReminders.append( dialog );
00135   emit reminderCount( mReminders.count() );
00136   saveLastCheckTime(); 
00137 }
00138 
00139 void KOAlarmClient::slotQuit()
00140 {
00141   emit saveAllSignal();
00142   saveLastCheckTime();
00143   quit();
00144 }
00145 
00146 void KOAlarmClient::saveLastCheckTime()
00147 {
00148   KConfigGroup cg( KGlobal::config(), "Alarms");
00149   cg.writeEntry( "CalendarsLastChecked", mLastChecked );
00150   KGlobal::config()->sync();
00151 }
00152 
00153 void KOAlarmClient::quit()
00154 {
00155   kdDebug(5890) << "KOAlarmClient::quit()" << endl;
00156   kapp->quit();
00157 }
00158 
00159 void KOAlarmClient::slotRemove( AlarmDialog *d )
00160 {
00161   mReminders.remove( d );
00162   delete d;
00163   emit reminderCount( mReminders.count() );
00164 }
00165 
00166 bool KOAlarmClient::commitData( QSessionManager& )
00167 {
00168   emit saveAllSignal();
00169   saveLastCheckTime();
00170   return true;
00171 }
00172 
00173 void KOAlarmClient::forceAlarmCheck()
00174 {
00175   checkAlarms();
00176   saveLastCheckTime();
00177 }
00178 
00179 void KOAlarmClient::dumpDebug()
00180 {
00181   KConfig *cfg = kapp->config();
00182 
00183   cfg->setGroup( "Alarms" );
00184   QDateTime lastChecked = cfg->readDateTimeEntry( "CalendarsLastChecked" );
00185 
00186   kdDebug(5890) << "Last Check: " << lastChecked << endl;
00187 }
00188 
00189 QStringList KOAlarmClient::dumpAlarms()
00190 {
00191   QDateTime start = QDateTime( QDateTime::currentDateTime().date(),
00192                                QTime( 0, 0 ) );
00193   QDateTime end = start.addDays( 1 ).addSecs( -1 );
00194 
00195   QStringList lst;
00196   // Don't translate, this is for debugging purposes.
00197   lst << QString("AlarmDeamon::dumpAlarms() from ") + start.toString()+ " to " +
00198          end.toString();
00199 
00200   QValueList<Alarm*> alarms = mCalendar->alarms( start, end );
00201   QValueList<Alarm*>::ConstIterator it;
00202   for( it = alarms.begin(); it != alarms.end(); ++it ) {
00203     Alarm *a = *it;
00204     lst << QString("  ") + a->parent()->summary() + " ("
00205               + a->time().toString() + ")";
00206   }
00207 
00208   return lst;
00209 }
00210 
00211 void KOAlarmClient::debugShowDialog()
00212 {
00213 //   showAlarmDialog();
00214 }
00215 
00216 #include "koalarmclient.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys