summaryrefslogtreecommitdiff
path: root/library/datebookdb.cpp
Side-by-side diff
Diffstat (limited to 'library/datebookdb.cpp') (more/less context) (show whitespace changes)
-rw-r--r--library/datebookdb.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/library/datebookdb.cpp b/library/datebookdb.cpp
index 2f33255..000ff71 100644
--- a/library/datebookdb.cpp
+++ b/library/datebookdb.cpp
@@ -851,286 +851,286 @@ void DateBookDB::loadFile( const QString &strFile )
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() );
if ( QFile::exists( dateBookJournalFile() ) ) {
// merge the journal
loadFile( dateBookJournalFile() );
// save in our changes and remove the journal...
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;
}