author | zautrix <zautrix> | 2004-10-06 16:20:25 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-06 16:20:25 (UTC) |
commit | 656636acfb8c607901c97c4f55129e29e1df9913 (patch) (side-by-side diff) | |
tree | 25efd61a6b691822a11f43719efcbf69ce7d5c25 /libkcal | |
parent | a22de800110d8350a5200a994b041e47d51bf4c6 (diff) | |
download | kdepimpi-656636acfb8c607901c97c4f55129e29e1df9913.zip kdepimpi-656636acfb8c607901c97c4f55129e29e1df9913.tar.gz kdepimpi-656636acfb8c607901c97c4f55129e29e1df9913.tar.bz2 |
more fixes
-rw-r--r-- | libkcal/libkcal.pro | 2 | ||||
-rw-r--r-- | libkcal/libkcalE.pro | 2 | ||||
-rw-r--r-- | libkcal/phoneformat.cpp | 117 | ||||
-rw-r--r-- | libkcal/phoneformat.h | 1 |
4 files changed, 5 insertions, 117 deletions
diff --git a/libkcal/libkcal.pro b/libkcal/libkcal.pro index 7a0bd22..171c726 100644 --- a/libkcal/libkcal.pro +++ b/libkcal/libkcal.pro @@ -1,106 +1,106 @@ TEMPLATE = lib CONFIG += qt warn_on TARGET = microkcal include( ../variables.pri ) -INCLUDEPATH += ../microkde versit ../microkde/kdecore +INCLUDEPATH += ../libkdepim ../microkde versit ../microkde/kdecore #../qtcompat INCLUDEPATH += ../libical/src/libical INCLUDEPATH += ../libical/src/libicalss DESTDIR = ../bin DEFINES += DESKTOP_VERSION unix: { LIBS += ../libical/lib/libical.a LIBS += ../libical/lib/libicalss.a OBJECTS_DIR = obj/unix MOC_DIR = moc/unix } win32: { DEFINES += _WIN32_ LIBS += ../libical/lib/ical.lib LIBS += ../libical/lib/icalss.lib OBJECTS_DIR = obj/win MOC_DIR = moc/win } INTERFACES = \ HEADERS = \ alarm.h \ attachment.h \ attendee.h \ calendar.h \ calendarlocal.h \ calfilter.h \ calformat.h \ calstorage.h \ compat.h \ customproperties.h \ dummyscheduler.h \ kincidenceformatter.h \ duration.h \ event.h \ exceptions.h \ filestorage.h \ freebusy.h \ icaldrag.h \ icalformat.h \ icalformatimpl.h \ imipscheduler.h \ incidence.h \ incidencebase.h \ journal.h \ period.h \ person.h \ qtopiaformat.h \ recurrence.h \ scheduler.h \ todo.h \ vcaldrag.h \ vcalformat.h \ versit/port.h \ versit/vcc.h \ versit/vobject.h \ phoneformat.h \ SOURCES = \ alarm.cpp \ attachment.cpp \ attendee.cpp \ calendar.cpp \ calendarlocal.cpp \ calfilter.cpp \ calformat.cpp \ compat.cpp \ customproperties.cpp \ dummyscheduler.cpp \ kincidenceformatter.cpp \ duration.cpp \ event.cpp \ exceptions.cpp \ filestorage.cpp \ freebusy.cpp \ icaldrag.cpp \ icalformat.cpp \ icalformatimpl.cpp \ imipscheduler.cpp \ incidence.cpp \ incidencebase.cpp \ journal.cpp \ period.cpp \ person.cpp \ qtopiaformat.cpp \ recurrence.cpp \ scheduler.cpp \ todo.cpp \ vcaldrag.cpp \ vcalformat.cpp \ versit/vcc.c \ versit/vobject.c \ phoneformat.cpp \ diff --git a/libkcal/libkcalE.pro b/libkcal/libkcalE.pro index e379b95..e42dc9c 100644 --- a/libkcal/libkcalE.pro +++ b/libkcal/libkcalE.pro @@ -1,91 +1,91 @@ TEMPLATE = lib CONFIG += qt warn_on TARGET = komicrokcal -INCLUDEPATH += ../microkde ../qtcompat versit ../microkde/kdecore $(QPEDIR)/include +INCLUDEPATH += ../libkdepim ../microkde ../qtcompat versit ../microkde/kdecore $(QPEDIR)/include INCLUDEPATH += ../libical/src/libical INCLUDEPATH += ../libical/src/libicalss OBJECTS_DIR = obj/$(PLATFORM) MOC_DIR = moc/$(PLATFORM) DESTDIR = $(QPEDIR)/lib LIBS += ../libical/lib/$(PLATFORM)/libical.a LIBS += ../libical/lib/$(PLATFORM)/libicalss.a INTERFACES = \ HEADERS = \ alarm.h \ attachment.h \ attendee.h \ calendar.h \ calendarlocal.h \ calfilter.h \ calformat.h \ calstorage.h \ compat.h \ customproperties.h \ dummyscheduler.h \ duration.h \ event.h \ exceptions.h \ filestorage.h \ freebusy.h \ icaldrag.h \ icalformat.h \ icalformatimpl.h \ imipscheduler.h \ incidence.h \ incidencebase.h \ kincidenceformatter.h \ journal.h \ period.h \ person.h \ qtopiaformat.h \ sharpformat.h \ phoneformat.h \ recurrence.h \ scheduler.h \ todo.h \ vcaldrag.h \ vcalformat.h \ versit/port.h \ versit/vcc.h \ versit/vobject.h \ SOURCES = \ alarm.cpp \ attachment.cpp \ attendee.cpp \ calendar.cpp \ calendarlocal.cpp \ calfilter.cpp \ calformat.cpp \ compat.cpp \ customproperties.cpp \ dummyscheduler.cpp \ duration.cpp \ event.cpp \ exceptions.cpp \ filestorage.cpp \ freebusy.cpp \ icaldrag.cpp \ icalformat.cpp \ icalformatimpl.cpp \ imipscheduler.cpp \ incidence.cpp \ incidencebase.cpp \ kincidenceformatter.cpp \ journal.cpp \ period.cpp \ person.cpp \ qtopiaformat.cpp \ sharpformat.cpp \ phoneformat.cpp \ recurrence.cpp \ scheduler.cpp \ todo.cpp \ vcaldrag.cpp \ vcalformat.cpp \ versit/vcc.c \ versit/vobject.c \ diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index b2a62b1..c39413e 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp @@ -1,319 +1,222 @@ /* This file is part of libkcal. Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <qdatetime.h> #include <qstring.h> #include <qapplication.h> #include <qptrlist.h> #include <qregexp.h> #include <qmessagebox.h> #include <qclipboard.h> #include <qfile.h> #include <qtextstream.h> #include <qtextcodec.h> #include <qdir.h> #include <qlabel.h> #include <kdebug.h> #include <klocale.h> #include <kglobal.h> #include <kmessagebox.h> +#include <phoneaccess.h> #include "calendar.h" #include "alarm.h" #include "recurrence.h" #include "calendarlocal.h" #include "phoneformat.h" #include "syncdefines.h" using namespace KCal; class PhoneParser : public QObject { public: PhoneParser( ) { ; } static QString dtToString( const QDateTime& dti, bool useTZ = false ) { QString datestr; QString timestr; int offset = KGlobal::locale()->localTimeOffset( dti ); QDateTime dt; if (useTZ) dt = dti.addSecs ( -(offset*60)); else dt = dti; if(dt.date().isValid()){ const QDate& date = dt.date(); datestr.sprintf("%04d%02d%02d", date.year(), date.month(), date.day()); } if(dt.time().isValid()){ const QTime& time = dt.time(); timestr.sprintf("T%02d%02d%02d", time.hour(), time.minute(), time.second()); } return datestr + timestr; } }; PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model ) { mProfileName = profileName; - writeConfig( device, connection, model ); + PhoneAccess::writeConfig( device, connection, model ); } PhoneFormat::~PhoneFormat() { } -void PhoneFormat::writeConfig( QString device, QString connection, QString model ) -{ -#ifdef _WIN32_ - QString fileName = qApp->applicationDirPath () +"\\gammurc"; -#else - QString fileName = QDir::homeDirPath() +"/.gammurc"; -#endif - //qDebug("save %d ", load ); - QString content; - bool write = false; - bool addPort = true, addConnection = true, addModel = true; - QFile file( fileName ); - if ( QFile::exists( fileName) ) { - if (!file.open( IO_ReadOnly ) ) { - qDebug("Error: cannot open %s ", fileName.latin1() ); - return; - } - QString line; - while ( file.readLine( line, 1024 ) > 0 ) { - //qDebug("*%s* ", line.latin1() ); - if ( line.left(7 ) == "[gammu]" ) { - ; - } else - if ( line.left(4 ) == "port" ) { - if ( line == "port = " + device+"\n" ) { - content += line ; - addPort = false; - //qDebug("port found" ); - } - - } else if ( line.left(5 ) == "model" ) { - if ( line == "model = " + model +"\n") { - content += line ; - addModel = false; - //qDebug("model found" ); - } - - } else if ( line.left( 10 ) == "connection" ) { - if ( line == "connection = " + connection +"\n") { - addConnection = false; - content += line ; - //qDebug("con found" ); - } - - } else { - content += line ; - } - } - file.close(); - } else { - if ( ! connection.isEmpty() ) { - addConnection = true; - } - if ( ! device.isEmpty() ) { - addPort = true; - } - if ( ! model.isEmpty() ) { - addModel = true; - } - } - - if ( addConnection ) { - if ( ! write ) - content += "[gammu]\n"; - write = true; - content += "connection = "; - content += connection; - content += "\n"; - } - if ( addPort ) { - if ( ! write ) - content += "[gammu]\n"; - write = true; - content += "port = "; - content += device; - content += "\n"; - - } - if ( addModel ) { - if ( ! write ) - content += "[gammu]\n"; - write = true; - content += "model = "; - content += model; - content += "\n"; - } - if ( write ) { - if (!file.open( IO_WriteOnly ) ) { - qDebug("Error: cannot write file %s ", fileName.latin1() ); - return; - } - qDebug("Writing file %s ", fileName.latin1() ); - QTextStream ts( &file ); - ts << content ; - file.close(); - } - -} #if 0 int PhoneFormat::initDevice(GSM_StateMachine *s) { GSM_ReadConfig(NULL, &s->Config[0], 0); s->ConfigNum = 1; GSM_Config *cfg = &s->Config[0]; if ( ! mConnection.isEmpty() ) { cfg->Connection = strdup(mConnection.latin1()); cfg->DefaultConnection = false; qDebug("Connection set %s ", cfg->Connection ); } if ( ! mDevice.isEmpty() ) { cfg->Device = strdup(mDevice.latin1()); cfg->DefaultDevice = false; qDebug("Device set %s ", cfg->Device); } if ( ! mModel.isEmpty() ) { strcpy(cfg->Model,mModel.latin1() ); cfg->DefaultModel = false; qDebug("Model set %s ",cfg->Model ); } int error=GSM_InitConnection(s,3); return error; } #endif ulong PhoneFormat::getCsumTodo( Todo* todo ) { QStringList attList; if ( todo->hasDueDate() ) attList << PhoneParser::dtToString ( todo->dtDue() ); attList << todo->summary(); QString completedString = "no"; if ( todo->isCompleted() ) completedString = "yes"; attList << completedString; int prio = todo->priority(); if( prio == 2 ) prio = 1; if (prio == 4 ) prio = 5 ; attList << QString::number( prio ); QString alarmString = "na"; Alarm *alarm; if ( todo->alarms().count() > 0 ) { alarm = todo->alarms().first(); if ( alarm->enabled() ) { alarmString = QString::number(alarm->offset() ); } } attList << alarmString; attList << todo->categoriesStr(); attList << todo->secrecyStr(); return PhoneFormat::getCsum(attList ); } ulong PhoneFormat::getCsumEvent( Event* event ) { QStringList attList; attList << PhoneParser::dtToString ( event->dtStart() ); attList << PhoneParser::dtToString ( event->dtEnd() ); attList << event->summary(); attList << event->location(); QString alarmString = "na"; Alarm *alarm; if ( event->alarms().count() > 0 ) { alarm = event->alarms().first(); if ( alarm->enabled() ) { alarmString = QString::number( alarm->offset() ); } } attList << alarmString; Recurrence* rec = event->recurrence(); QStringList list; bool writeEndDate = false; switch ( rec->doesRecur() ) { case Recurrence::rDaily: // 0 list.append( "0" ); list.append( QString::number( rec->frequency() ));//12 list.append( "0" ); list.append( "0" ); writeEndDate = true; break; case Recurrence::rWeekly:// 1 list.append( "1" ); list.append( QString::number( rec->frequency()) );//12 list.append( "0" ); { int days = 0; QBitArray weekDays = rec->days(); int i; for( i = 1; i <= 7; ++i ) { if ( weekDays[i-1] ) { days += 1 << (i-1); } } list.append( QString::number( days ) ); } //pending weekdays writeEndDate = true; break; case Recurrence::rMonthlyPos:// 2 list.append( "2" ); list.append( QString::number( rec->frequency()) );//12 writeEndDate = true; { int count = 1; QPtrList<Recurrence::rMonthPos> rmp; rmp = rec->monthPositions(); if ( rmp.first()->negative ) count = 5 - rmp.first()->rPos - 1; else count = rmp.first()->rPos - 1; list.append( QString::number( count ) ); } list.append( "0" ); break; case Recurrence::rMonthlyDay:// 3 list.append( "3" ); list.append( QString::number( rec->frequency()) );//12 list.append( "0" ); list.append( "0" ); writeEndDate = true; break; @@ -465,271 +368,257 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) ev = tr.next(); } } return true; } void PhoneFormat::copyEvent( Event* to, Event* from ) { if ( from->dtStart().isValid() ) to->setDtStart( from->dtStart() ); if ( from->dtEnd().isValid() ) to->setDtEnd( from->dtEnd() ); if ( !from->location().isEmpty() ) to->setLocation( from->location() ); if ( !from->description().isEmpty() ) to->setDescription( from->description() ); if ( !from->summary().isEmpty() ) to->setSummary( from->summary() ); if ( from->alarms().count() ) { to->clearAlarms(); Alarm *a = from->alarms().first(); Alarm *b = to->newAlarm( ); b->setEnabled( a->enabled() ); if ( a->hasStartOffset() ) { b->setStartOffset( a->startOffset() ); } if ( a->hasTime() ) b->setTime( a->time() ); } QStringList cat = to->categories(); QStringList catFrom = from->categories(); QString nCat; int iii; for ( iii = 0; iii < catFrom.count();++iii ) { nCat = catFrom[iii]; if ( !nCat.isEmpty() ) if ( !cat.contains( nCat )) { cat << nCat; } } to->setCategories( cat ); Recurrence * r = new Recurrence( *from->recurrence(),to); to->setRecurrence( r ) ; } void PhoneFormat::copyTodo( Todo* to, Todo* from ) { if ( from->dtStart().isValid() ) to->setDtStart( from->dtStart() ); if ( from->dtDue().isValid() ) to->setDtDue( from->dtDue() ); if ( !from->location().isEmpty() ) to->setLocation( from->location() ); if ( !from->description().isEmpty() ) to->setDescription( from->description() ); if ( !from->summary().isEmpty() ) to->setSummary( from->summary() ); if ( from->alarms().count() ) { to->clearAlarms(); Alarm *a = from->alarms().first(); Alarm *b = to->newAlarm( ); b->setEnabled( a->enabled() ); if ( a->hasStartOffset() ) b->setStartOffset( a->startOffset() ); if ( a->hasTime() ) b->setTime( a->time() ); } QStringList cat = to->categories(); QStringList catFrom = from->categories(); QString nCat; int iii; for ( iii = 0; iii < catFrom.count();++iii ) { nCat = catFrom[iii]; if ( !nCat.isEmpty() ) if ( !cat.contains( nCat )) { cat << nCat; } } to->setCategories( cat ); if ( from->isCompleted() ) { to->setCompleted( true ); if( from->completed().isValid() ) to->setCompleted( from->completed() ); } else { // set percentcomplete only, if to->isCompleted() if ( to->isCompleted() ) to->setPercentComplete(from->percentComplete()); } if( to->priority() == 2 && from->priority() == 1 ) ; //skip else if (to->priority() == 4 && from->priority() == 5 ) ; else to->setPriority(from->priority()); } #include <qcstring.h> void PhoneFormat::afterSave( Incidence* inc) { uint csum; inc->removeID( mProfileName ); if ( inc->type() == "Event") csum = PhoneFormat::getCsumEvent( (Event*) inc ); else csum = PhoneFormat::getCsumTodo( (Todo*) inc ); inc->setCsum( mProfileName, QString::number( csum )); inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); } bool PhoneFormat::writeToPhone( Calendar * calendar) { #ifdef _WIN32_ QString fileName = locateLocal("tmp", "tempfile.vcs"); #else QString fileName = "/tmp/kdepimtemp.vcs"; #endif VCalFormat vfsave; vfsave.setLocalTime ( true ); if ( ! vfsave.save( calendar, fileName ) ) return false; - // 4 call kammu -#ifdef DESKTOP_VERSION - QString command ="./kammu --restore " + fileName ; -#else - QString command ="kammu --restore " + fileName ; -#endif - int ret; - while ( (ret = system ( command.latin1())) != 0 ) { - qDebug("Error S::command returned %d. asking users", ret); - int retval = KMessageBox::warningContinueCancel(0, - i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone access"),i18n("Retry"),i18n("Cancel")); - if ( retval != KMessageBox::Continue ) - return false; - } - return true; + return PhoneAccess::writeToPhone( fileName ); } bool PhoneFormat::save( Calendar *calendar) { QLabel status ( i18n(" Opening device ..."), 0 ); int w = status.sizeHint().width()+20 ; if ( w < 200 ) w = 230; int h = status.sizeHint().height()+20 ; int dw = QApplication::desktop()->width(); int dh = QApplication::desktop()->height(); status.setCaption(i18n("Writing to phone...") ); status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); status.show(); status.raise(); qApp->processEvents(); QString message; // 1 remove events which should be deleted QPtrList<Event> er = calendar->rawEvents(); Event* ev = er.first(); while ( ev ) { if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { calendar->deleteEvent( ev ); } else { } ev = er.next(); } // 2 remove todos which should be deleted QPtrList<Todo> tl = calendar->rawTodos(); Todo* to = tl.first(); while ( to ) { if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { calendar->deleteTodo( to ); } else { if ( to->isCompleted()) { calendar->deleteTodo( to ); } } to = tl.next(); } // 3 save file if ( !writeToPhone( calendar ) ) return false; // 5 reread data message = i18n(" Rereading all data ... "); status.setText ( message ); qApp->processEvents(); CalendarLocal* calendarTemp = new CalendarLocal(); calendarTemp->setTimeZoneId( calendar->timeZoneId()); if ( ! load( calendarTemp,calendar) ){ qDebug("error reloading calendar "); delete calendarTemp; return false; } // 6 compare data //algo 6 compare event er = calendar->rawEvents(); ev = er.first(); message = i18n(" Comparing event # "); QPtrList<Event> er1 = calendarTemp->rawEvents(); Event* ev1; int procCount = 0; while ( ev ) { //qDebug("event new ID %s",ev->summary().latin1()); status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); uint csum; csum = PhoneFormat::getCsumEvent( ev ); QString cSum = QString::number( csum ); //ev->setCsum( mProfileName, cSum ); //qDebug("Event cSum %s ", cSum.latin1()); ev1 = er1.first(); while ( ev1 ) { if ( ev1->getCsum( mProfileName ) == cSum ) { er1.remove( ev1 ); afterSave( ev ); ev->setID(mProfileName, ev1->getID(mProfileName) ); //qDebug("Event found on phone for %s ", ev->summary().latin1()); break; } ev1 = er1.next(); } if ( ! ev1 ) { // ev->removeID(mProfileName); qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1()); } ev = er.next(); } //algo 6 compare todo tl = calendar->rawTodos(); to = tl.first(); procCount = 0; QPtrList<Todo> tl1 = calendarTemp->rawTodos(); Todo* to1 ; message = i18n(" Comparing todo # "); while ( to ) { status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); uint csum; csum = PhoneFormat::getCsumTodo( to ); QString cSum = QString::number( csum ); //to->setCsum( mProfileName, cSum ); //qDebug("Todo cSum %s ", cSum.latin1()); Todo* to1 = tl1.first(); while ( to1 ) { if ( to1->getCsum( mProfileName ) == cSum ) { tl1.remove( to1 ); afterSave( to ); to->setID(mProfileName, to1->getID(mProfileName) ); break; } to1 = tl1.next(); } if ( ! to1 ) { //to->removeID(mProfileName); qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1()); } to = tl.next(); } delete calendarTemp; return true; diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h index 61e8160..001fd81 100644 --- a/libkcal/phoneformat.h +++ b/libkcal/phoneformat.h @@ -1,63 +1,62 @@ /* This file is part of libkcal. Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PHONEFORMAT_H #define PHONEFORMAT_H #include <qstring.h> #include "scheduler.h" #include "vcalformat.h" #include "calformat.h" namespace KCal { /** This class implements the calendar format used by Phone. */ class Event; class Todo; class PhoneFormat : public QObject { public: /** Create new iCalendar format. */ PhoneFormat(QString profileName, QString device,QString connection, QString model); virtual ~PhoneFormat(); bool load( Calendar * ,Calendar * ); bool save( Calendar * ); bool fromString( Calendar *, const QString & ); QString toString( Calendar * ); static ulong getCsum( const QStringList & ); static ulong getCsumTodo( Todo* to ); static ulong getCsumEvent( Event* ev ); - static void writeConfig( QString device,QString connection, QString model ); static bool writeToPhone( Calendar * ); private: void copyEvent( Event* to, Event* from ); void copyTodo( Todo* to, Todo* from ); //int initDevice(GSM_StateMachine *s); QString mProfileName; void afterSave( Incidence* ); }; } #endif |