author | eilers <eilers> | 2003-03-24 17:24:44 (UTC) |
---|---|---|
committer | eilers <eilers> | 2003-03-24 17:24:44 (UTC) |
commit | 84372ba20c0b1b09c1606212ec66c9d04588b90e (patch) (side-by-side diff) | |
tree | 36c4d861596c80b537c765af3f0c16495a763cc6 /library/datebookdb.cpp | |
parent | 38d8d91e11c191f89429f4a3da8c1ada84b2a885 (diff) | |
download | opie-84372ba20c0b1b09c1606212ec66c9d04588b90e.zip opie-84372ba20c0b1b09c1606212ec66c9d04588b90e.tar.gz opie-84372ba20c0b1b09c1606212ec66c9d04588b90e.tar.bz2 |
Small anti-crash fix: Sync with QtopiaDesktop caused a big mess. But this
mess should't crash datebook. Therefore this fix prevents datebook to
hang if rweekdays=="0"
-rw-r--r-- | library/datebookdb.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/library/datebookdb.cpp b/library/datebookdb.cpp index a26fe8f..0fedfa8 100644 --- a/library/datebookdb.cpp +++ b/library/datebookdb.cpp @@ -780,129 +780,134 @@ void DateBookDB::loadFile( const QString &strFile ) } if ( i == j ) { // leave out empty attributes i = j + 1; continue; } QString value = haveUtf ? QString::fromUtf8( dt+i, j-i ) : QString::fromLatin1( dt+i, j-i ); if ( haveAmp ) value = Qtopia::plainString( value ); i = j + 1; //qDebug("attr='%s' value='%s'", attr.data(), value.latin1() ); int * find = dict[ attr ]; #if 1 if ( !find ) { // custom field e.setCustomField(attr, value); continue; } switch( *find ) { case FDescription: e.setDescription( value ); break; case FLocation: e.setLocation( value ); break; case FCategories: e.setCategories( Qtopia::Record::idsFromString( value ) ); break; case FUid: e.setUid( value.toInt() ); break; case FType: if ( value == "AllDay" ) e.setType( Event::AllDay ); else e.setType( Event::Normal ); break; case FAlarm: alarmTime = value.toInt(); break; case FSound: alarmSound = value == "loud" ? Event::Loud : Event::Silent; break; // recurrence stuff case FRType: if ( value == "Daily" ) rp.type = Event::Daily; else if ( value == "Weekly" ) rp.type = Event::Weekly; else if ( value == "MonthlyDay" ) rp.type = Event::MonthlyDay; else if ( value == "MonthlyDate" ) rp.type = Event::MonthlyDate; else if ( value == "Yearly" ) rp.type = Event::Yearly; else rp.type = Event::NoRepeat; break; case FRWeekdays: - rp.days = value.toInt(); + // QtopiaDesktop 1.6 sometimes creates 'rweekdays="0"' + // when it goes mad. This causes datebook to crash.. (se) + if ( value.toInt() != 0 ) + rp.days = value.toInt(); + else + rp.days = 1; break; case FRPosition: rp.position = value.toInt(); break; case FRFreq: rp.frequency = value.toInt(); break; case FRHasEndDate: rp.hasEndDate = value.toInt(); break; case FREndDate: { rp.endDateUTC = (time_t) value.toLong(); break; } case FRStart: { e.setStart( (time_t) value.toLong() ); break; } case FREnd: { e.setEnd( (time_t) value.toLong() ); break; } case FNote: e.setNotes( value ); break; case FCreated: rp.createTime = value.toInt(); break; case FAction: currentAction = value.toInt(); break; case FActionKey: journalKey = value.toInt(); break; case FJournalOrigHadRepeat: origHadRepeat = value.toInt(); break; default: qDebug( "huh??? missing enum? -- attr.: %s", attr ); break; } #endif } // "post processing" (dates, times, alarm, recurrence) // start date/time e.setRepeat( rp.type != Event::NoRepeat, rp ); if ( alarmTime != -1 ) e.setAlarm( TRUE, alarmTime, alarmSound ); // now do our action based on the current action... switch ( currentAction ) { case ACTION_ADD: addJFEvent( e ); break; case ACTION_REMOVE: removeJFEvent( e ); break; case ACTION_REPLACE: // be a little bit careful, // in case of a messed up journal... if ( journalKey > -1 && origHadRepeat > -1 ) { // get the original from proper list... if ( origHadRepeat ) |