-rw-r--r-- | library/datebookdb.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/library/datebookdb.cpp b/library/datebookdb.cpp index 2f33255..000ff71 100644 --- a/library/datebookdb.cpp +++ b/library/datebookdb.cpp @@ -750,193 +750,193 @@ void DateBookDB::loadFile( const QString &strFile ) int alarmTime = -1; Event::SoundTypeChoice alarmSound = Event::Silent; // ... and for the recurrence Event::RepeatPattern rp; Event e; i += 7; while( 1 ) { while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') ) ++i; if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') ) break; // we have another attribute, read it. int j = i; while ( j < len && dt[j] != '=' ) ++j; char *attr = dt+i; dt[j] = '\0'; i = ++j; // skip = while ( i < len && dt[i] != '"' ) ++i; j = ++i; bool haveAmp = FALSE; bool haveUtf = FALSE; while ( j < len && dt[j] != '"' ) { if ( dt[j] == '&' ) haveAmp = TRUE; if ( ((unsigned char)dt[j]) > 0x7f ) haveUtf = TRUE; ++j; } 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: // QtopiaDesktop 1.6 sometimes creates 'rweekdays="0"' // when it goes mad. This causes datebook to crash.. (se) - if ( value.toInt() != 0 ) + 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 ) removeJFEvent( *(repeatEvents.at(journalKey)) ); else removeJFEvent( *(eventList.at(journalKey)) ); addJFEvent( e ); } break; default: break; } } f.close(); } void DateBookDB::init() { d = new DateBookDBPrivate; d->clean = false; QString str = dateBookFilename(); if ( str.isNull() ) { QMessageBox::warning( 0, QObject::tr("Out of Space"), QObject::tr("Unable to create start up files\n" "Please free up some space\n" "before entering data") ); } // continuing along, we call this datebook filename again, // because they may fix it before continuing, though it seems // pretty unlikely... loadFile( dateBookFilename() ); @@ -947,190 +947,190 @@ void DateBookDB::init() save(); } d->clean = true; } bool DateBookDB::save() { if ( d->clean == true ) return true; QValueListIterator<Event> it; int total_written; QString strFileNew = dateBookFilename() + ".new"; QFile f( strFileNew ); if ( !f.open( IO_WriteOnly|IO_Raw ) ) return FALSE; QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; buf += "<events>\n"; QCString str = buf.utf8(); total_written = f.writeBlock( str.data(), str.length() ); if ( total_written != int(str.length()) ) { f.close(); QFile::remove( strFileNew ); return false; } for ( it = eventList.begin(); it != eventList.end(); ++it ) { buf = "<event"; (*it).save( buf ); buf += " />\n"; str = buf.utf8(); total_written = f.writeBlock( str.data(), str.length() ); if ( total_written != int(str.length()) ) { f.close(); QFile::remove( strFileNew ); return false; } } for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) { buf = "<event"; (*it).save( buf ); buf += " />\n"; str = buf.utf8(); total_written = f.writeBlock( str.data(), str.length() ); if ( total_written != int(str.length()) ) { f.close(); QFile::remove( strFileNew ); return false; } } buf = "</events>\n</DATEBOOK>\n"; str = buf.utf8(); total_written = f.writeBlock( str.data(), str.length() ); if ( total_written != int(str.length()) ) { f.close(); QFile::remove( strFileNew ); return false; } f.close(); // now rename... I like to use the systemcall if ( ::rename( strFileNew, dateBookFilename() ) < 0 ) { qWarning( "problem renaming file %s to %s errno %d", strFileNew.latin1(), dateBookFilename().latin1(), errno ); // remove the file, otherwise it will just stick around... QFile::remove( strFileNew ); } // may as well remove the journal file... QFile::remove( dateBookJournalFile() ); d->clean = true; return true; } void DateBookDB::reload() { QValueList<Event>::Iterator it = eventList.begin(); for ( ; it != eventList.end(); ++it ) { if ( (*it).hasAlarm() ) delEventAlarm( *it ); if ( (*it).hasRepeat() ) removeRepeat( *it ); } eventList.clear(); repeatEvents.clear(); // should be a NOP init(); } bool DateBookDB::removeRepeat( const Event &ev ) { time_t removeMe = ev.repeatPattern().createTime; QValueListIterator<Event> it; for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) { if ( removeMe == (*it).repeatPattern().createTime ) { - repeatEvents.remove( *it ); + (void)repeatEvents.remove( it ); // best break, or we are going into undefined territory! return TRUE; } } return FALSE; } bool DateBookDB::origRepeat( const Event &ev, Event &orig ) const { time_t removeMe = ev.repeatPattern().createTime; QValueListConstIterator<Event> it; for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) { if ( removeMe == (*it).repeatPattern().createTime ) { orig = (*it); return TRUE; } } return FALSE; } void DateBookDB::saveJournalEntry( const Event &ev, journal_action action ) { saveJournalEntry( ev, action, -1, false ); } bool DateBookDB::saveJournalEntry( const Event &evOld, journal_action action, int key, bool origHadRepeat ) { bool status = false; Event ev = evOld; // write our log based on the action QFile f( dateBookJournalFile() ); if ( !f.open( IO_WriteOnly|IO_Append ) ) return false; QString buf = "<event"; ev.save( buf ); buf += " action="; buf += "\"" + QString::number(action) + "\""; buf += " actionkey=\"" + QString::number(key) + "\""; buf += " actionorig=\"" + QString::number(origHadRepeat) +"\""; buf += " />\n"; QString str = buf.utf8(); status = ( f.writeBlock( str.data(), str.length() ) == int(str.length()) ); f.close(); return status; } QValueList<Event> DateBookDB::getRawRepeats() const { return repeatEvents; } QValueList<Event> DateBookDB::getNonRepeatingEvents( const QDate &from, const QDate &to ) const { QValueListConstIterator<Event> it; QDateTime dtTmp, dtEnd; QValueList<Event> tmpList; for (it = eventList.begin(); it != eventList.end(); ++it ) { dtTmp = (*it).start(TRUE); dtEnd = (*it).end(TRUE); if ( dtTmp.date() >= from && dtTmp.date() <= to ) { Event e = *it; if ( dtTmp.date() != dtEnd.date() ) e.setEnd( QDateTime(dtTmp.date(), QTime(23, 59, 0)) ); tmpList.append( e ); } // we must also check for end date information... if ( dtEnd.date() != dtTmp.date() && dtEnd.date() >= from ) { QDateTime dt = dtTmp.addDays( 1 ); dt.setTime( QTime(0, 0, 0) ); QDateTime dtStop; if ( dtEnd > to ) { dtStop = to; } else dtStop = dtEnd; while ( dt <= dtStop ) { Event ev = *it; if ( dt >= from ) { ev.setStart( QDateTime(dt.date(), QTime(0, 0, 0)) ); if ( dt.date() == dtEnd.date() ) ev.setEnd( QDateTime(dt.date(), dtEnd.time()) ); else ev.setEnd( QDateTime(dt.date(), QTime(23, 59, 0)) ); tmpList.append( ev ); } dt = dt.addDays( 1 ); } } } return tmpList; } |