korganizer
mailscheduler.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <tqdir.h>
00026 #include <tqfile.h>
00027 #include <tqregexp.h>
00028
00029 #include <klocale.h>
00030 #include <kstandarddirs.h>
00031 #include <kdebug.h>
00032
00033 #include <libkcal/calendar.h>
00034 #include <libkcal/event.h>
00035 #include <libkcal/icalformat.h>
00036
00037 #include "komailclient.h"
00038 #include "incidencechanger.h"
00039
00040 #include "mailscheduler.h"
00041
00042
00043 using namespace KCal;
00044
00045 MailScheduler::MailScheduler( Calendar *calendar )
00046 : IMIPScheduler( calendar )
00047 {
00048 }
00049
00050 MailScheduler::~MailScheduler()
00051 {
00052 }
00053
00054 bool MailScheduler::publish( IncidenceBase *incidence,
00055 const TQString &recipients )
00056 {
00057 TQString messageText = mFormat->createScheduleMessage( incidence,
00058 Scheduler::Publish );
00059 KOMailClient mailer;
00060 return mailer.mailTo( incidence, recipients, messageText );
00061 }
00062
00063 bool MailScheduler::performTransaction( IncidenceBase *incidence,
00064 Method method,
00065 const TQString &recipients )
00066 {
00067 TQString messageText = mFormat->createScheduleMessage( incidence, method );
00068
00069 KOMailClient mailer;
00070 return mailer.mailTo( incidence, recipients, messageText );
00071 }
00072
00073 bool MailScheduler::performTransaction( IncidenceBase *incidence,
00074 Method method )
00075 {
00076 TQString messageText = mFormat->createScheduleMessage( incidence, method );
00077
00078 KOMailClient mailer;
00079 bool status;
00080 if ( method == Request ||
00081 method == Cancel ||
00082 method == Add ||
00083 method == Declinecounter ) {
00084 status = mailer.mailAttendees( incidence, messageText );
00085 } else {
00086 TQString subject;
00087 Incidence *inc = dynamic_cast<Incidence*>( incidence );
00088 if ( inc && method == Counter )
00089 subject = i18n( "Counter proposal: %1" ).arg( inc->summary() );
00090 status = mailer.mailOrganizer( incidence, messageText, subject );
00091 }
00092 return status;
00093 }
00094
00095 TQPtrList<ScheduleMessage> MailScheduler::retrieveTransactions()
00096 {
00097 TQString incomingDirName = locateLocal( "data", "korganizer/income" );
00098 kdDebug(5850) << "MailScheduler::retrieveTransactions: dir: "
00099 << incomingDirName << endl;
00100
00101 TQPtrList<ScheduleMessage> messageList;
00102
00103 TQDir incomingDir( incomingDirName );
00104 TQStringList incoming = incomingDir.entryList( TQDir::Files );
00105 TQStringList::ConstIterator it;
00106 for( it = incoming.begin(); it != incoming.end(); ++it ) {
00107 kdDebug(5850) << "-- File: " << (*it) << endl;
00108
00109 TQFile f( incomingDirName + "/" + (*it) );
00110 bool inserted = false;
00111 TQMap<IncidenceBase*, TQString>::Iterator iter;
00112 for ( iter = mEventMap.begin(); iter != mEventMap.end(); ++iter ) {
00113 if ( iter.data() == incomingDirName + "/" + (*it) )
00114 inserted = true;
00115 }
00116 if ( !inserted ) {
00117 if ( !f.open( IO_ReadOnly ) ) {
00118 kdDebug(5850)
00119 << "MailScheduler::retrieveTransactions(): Can't open file'"
00120 << (*it) << "'" << endl;
00121 } else {
00122 TQTextStream t( &f );
00123 t.setEncoding( TQTextStream::Latin1 );
00124 TQString messageString = t.read();
00125 messageString.replace( TQRegExp( "\n[ \t]"), "" );
00126 messageString = TQString::fromUtf8( messageString.latin1() );
00127 ScheduleMessage *mess = mFormat->parseScheduleMessage( mCalendar,
00128 messageString );
00129 if ( mess) {
00130 kdDebug(5850)
00131 << "MailScheduler::retrieveTransactions: got message '"
00132 << (*it) << "'" << endl;
00133 messageList.append( mess );
00134 mEventMap[ mess->event() ] = incomingDirName + "/" + (*it);
00135 } else {
00136 TQString errorMessage;
00137 if ( mFormat->exception() ) {
00138 errorMessage = mFormat->exception()->message();
00139 }
00140 kdDebug(5850)
00141 << "MailScheduler::retrieveTransactions() Error parsing message: "
00142 << errorMessage << endl;
00143 }
00144 f.close();
00145 }
00146 }
00147 }
00148 return messageList;
00149 }
00150
00151 bool MailScheduler::deleteTransaction( IncidenceBase *incidence )
00152 {
00153 bool status;
00154 TQFile f( mEventMap[incidence] );
00155 mEventMap.remove( incidence );
00156 if ( !f.exists() ) {
00157 status = false;
00158 } else {
00159 status = f.remove();
00160 }
00161 return status;
00162 }
00163
00164 TQString MailScheduler::freeBusyDir()
00165 {
00166 return locateLocal( "data", "korganizer/freebusy" );
00167 }
00168
00169 bool MailScheduler::acceptCounterProposal( Incidence *incidence )
00170 {
00171 if ( !incidence )
00172 return false;
00173
00174 Incidence *exInc = mCalendar->incidence( incidence->uid() );
00175 if ( !exInc )
00176 exInc = mCalendar->incidenceFromSchedulingID( incidence->uid() );
00177 incidence->setRevision( incidence->revision() + 1 );
00178 if ( exInc ) {
00179 incidence->setRevision( QMAX( incidence->revision(), exInc->revision() + 1 ) );
00180
00181 incidence->setSchedulingID( exInc->schedulingID() );
00182 incidence->setUid( exInc->uid() );
00183
00184 mCalendar->beginChange( exInc );
00185 IncidenceChanger::assignIncidence( exInc, incidence );
00186 exInc->updated();
00187 mCalendar->endChange( exInc );
00188 } else {
00189 mCalendar->addIncidence( incidence );
00190 }
00191 return true;
00192 }
|