00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "calendar_jobs.h"
00021 #include "engine.h"
00022 #include "kmobiletoolsat_engine.h"
00023
00024 #include <qregexp.h>
00025 #include <qstring.h>
00026 #include <qdatetime.h>
00027 #include <libkcal/alarm.h>
00028 #include <kdeversion.h>
00029
00030 FetchCalendar::FetchCalendar(KMobileTools::Job *pjob, KMobileTools::SerialManager *device, kmobiletoolsAT_engine* parent)
00031 : kmobiletoolsATJob(pjob, device, parent)
00032 {
00033 p_calendar=engine->engineData()->calendar();
00034 p_calendar->clear();
00035 }
00036
00037 void FetchCalendar::run()
00038 {
00039 engine->suspendStatusJobs(true );
00040 if(engine->getATAbilities().isMotorola())
00041 {
00042 fetchMotorolaCalendar();
00043 return;
00044 }
00045 }
00046
00047 void FetchCalendar::fetchMotorolaCalendar()
00048 {
00049 kDebug() <<"void FetchCalendar::fetchMotorolaCalendar()";
00050 QString buffer;
00051 QRegExp regexp;
00052 buffer=p_device->sendATCommand(this, "AT+MDBL=1\r" );
00053 if(KMobileTools::SerialManager::ATError(buffer)) return;
00054 buffer=p_device->sendATCommand(this, "AT+MDBR=?\r" );
00055 if(KMobileTools::SerialManager::ATError(buffer)) { p_device->sendATCommand(this, "AT+MDBL=0\r" ); return; }
00056 buffer=formatBuffer(buffer).grep("MDBR").first();
00057 regexp.setPattern( "^[+]MDBR:[\\s]*([\\d]*),.*");
00058 regexp.search(buffer);
00059 int maxcal=regexp.cap(1).toInt();
00060 kDebug() <<"Max number of calendar entries:" << maxcal;
00061 QStringList entries;
00062 for(int i=0; i<maxcal; i+=10)
00063 {
00064 buffer=p_device->sendATCommand(this, QString("AT+MDBR=%1,%2\r")
00065 .arg(i).arg( (i+10 < maxcal) ? (i+10) : (maxcal ) )
00066 , 200 );
00067 entries+= formatBuffer(buffer).grep("MDBR");
00068 }
00069 QStringList::Iterator it;
00070 int index; QString text; bool timed; bool enabled;
00071 KDateTime startDT, alDT; int duration, repeat;
00072 QDate tempDate; int tempyear, tempmonth, tempday;
00073 for(it=entries.begin(); it!=entries.end(); ++it)
00074 {
00075 regexp.setPattern("^[+]MDBR:[\\s]*([\\d]),(\"[^\"]*[^,]*|[\\dA-F]*),([\\d]*),([\\d]*)");
00076 regexp.search(*it);
00077 index=regexp.cap(1).toInt();
00078 text=decodeString(regexp.cap(2));
00079 timed=(bool) regexp.cap(3).toInt();
00080 enabled=(bool) regexp.cap(4).toInt();
00081 kDebug() <<"Index=" << index <<"|| Text=" << text <<"|| Timed=" << timed <<"|| Enabled=" << enabled <<"||end";
00082 buffer=(*it).replace(regexp.cap(0), "");
00083 regexp.setPattern(",\"([\\d:]*)\",\"([\\d-]*)\",([\\d]*),\"([\\d:]*)\",\"([\\d-]*)\",([\\d]*)");
00084 regexp.search(buffer);
00085 startDT.setTime( QTime::fromString(regexp.cap(1) ) );
00086 alDT.setTime( QTime::fromString(regexp.cap(4) ) );
00087 repeat=regexp.cap(6).toInt();
00088 duration=regexp.cap(3).toInt();
00089
00090 buffer=regexp.cap(2);
00091 tempyear=buffer.section('-',2,2).toInt();
00092 tempyear= (tempyear < 100) ? (tempyear+2000) : tempyear;
00093 tempmonth=buffer.section('-',0,0).toInt();
00094 tempday=buffer.section('-',1,1).toInt();
00095 tempDate.setYMD( tempyear, tempmonth, tempday );
00096 startDT.setDate(tempDate);
00097 kDebug() <<"Setdate args for" << buffer <<":" << tempyear <<"," << tempmonth <<"," << tempday;
00098
00099 buffer=regexp.cap(5);
00100 tempyear=buffer.section('-',2,2).toInt();
00101 tempyear= (tempyear < 100) ? (tempyear+2000) : tempyear;
00102 tempmonth=buffer.section('-',0,0).toInt();
00103 tempday=buffer.section('-',1,1).toInt();
00104 tempDate.setYMD( tempyear, tempmonth, tempday );
00105 alDT.setDate(tempDate);
00106 kDebug() <<"Setdate args for" << buffer <<":" << tempyear <<"," << tempmonth <<"," << tempday;
00107
00108 kDebug() <<"Start time=" << startDT.time() <<"|| Start Date="
00109 << startDT.date() << "|| Duration="
00110 << duration << "|| Alarm time="
00111 << alDT.time() << "|| Alarm date="
00112 << alDT.date() << "|| Repeat="
00113 << repeat << "|| End\n";
00114 KCal::Event *event=new KCal::Event();
00115 if( startDT.isValid () && duration!=1440 ) event->setFloats(false); else event->setFloats(true);
00116 event->setDtStart(startDT);
00117 event->setDuration( duration*60);
00118 #if KDE_IS_VERSION( 3, 5, 0 )
00119 switch( repeat ){
00120 case 1:
00121 event->recurrence ()->setDaily(1);
00122 break;
00123 case 2:
00124 event->recurrence()->setWeekly(1);
00125 break;
00126 case 3:
00127 event->recurrence()->setMonthly(1);
00128 break;
00129 case 4:
00130 event->recurrence()->setWeekly(4);
00131 break;
00132 case 5:
00133 event->recurrence()->setYearly(1);
00134 break;
00135 default:
00136 event->recurrence()->clear();
00137 }
00138 #else
00139 switch( repeat ){
00140 case 1:
00141 event->recurrence ()->setDaily(1,0);
00142 break;
00143 case 2:
00144 event->recurrence()->setWeekly(1,0,0,0);
00145 break;
00146 case 3:
00147 event->recurrence()->setMonthly(1,0,0);
00148 break;
00149 case 4:
00150 event->recurrence()->setWeekly(4,0,0,0);
00151 break;
00152 case 5:
00153 event->recurrence()->setYearly(1,0,0);
00154 break;
00155
00156
00157 }
00158 #endif
00159 event->setDescription(text);
00160 if(enabled)
00161 {
00162 KCal::Alarm *alarm=event->newAlarm();
00163
00164 alarm->setText(text);
00165 alarm->setDisplayAlarm(text);
00166 alarm->setTime(alDT);
00167 alarm->setStartOffset(KCal::Duration(startDT, alDT) );
00168 alarm->setType(KCal::Alarm::Display);
00169 alarm->setEnabled(true);
00170
00171 }
00172 p_calendar->append(event);
00173 }
00174 p_calendar->dump();
00175 p_device->sendATCommand(this, "AT+MDBL=0\r", 100 );
00176 }
00177
00178 #include "calendar_jobs.moc"