summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/todo.cpp31
-rw-r--r--libkcal/todo.h4
2 files changed, 33 insertions, 2 deletions
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index 48d37d5..de07496 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -28,8 +28,12 @@
#include "calendarlocal.h"
#include "icalformat.h"
#include "todo.h"
+#define SAVETIMER_TIMEOUT_SECONDS 300
+//#define SAVETIMER_TIMEOUT_SECONDS 8
+#define SAVETIMER_TIMEOUT_RETRY_SECONDS 5
+
using namespace KCal;
Todo::Todo(): QObject(), Incidence()
{
@@ -42,8 +46,9 @@ Todo::Todo(): QObject(), Incidence()
mPercentComplete = 0;
mRunning = false;
mRunSaveTimer = 0;
setFloats( true );
+ mCurrentTimerDelay = 0;
}
Todo::Todo(const Todo &t) : QObject(),Incidence(t)
{
@@ -53,8 +58,9 @@ Todo::Todo(const Todo &t) : QObject(),Incidence(t)
mHasCompletedDate = t.mHasCompletedDate;
mPercentComplete = t.mPercentComplete;
mRunning = false;
mRunSaveTimer = 0;
+ mCurrentTimerDelay = 0;
}
Todo::~Todo()
{
@@ -85,14 +91,17 @@ void Todo::setRunning( bool run )
return;
//qDebug("Todo::setRunning %d ", run);
if ( !mRunSaveTimer ) {
mRunSaveTimer = new QTimer ( this );
- connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) );
+ connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( timerSlotSaveRunningInfoToFile() ) );
}
mRunning = run;
+ mRunLastSave = QDateTime::currentDateTime();
if ( mRunning ) {
- mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min
+ mRunSaveTimer->start( SAVETIMER_TIMEOUT_SECONDS * 1000 ); // 5 min
mRunStart = QDateTime::currentDateTime();
+ mRunLastSave = QDateTime::currentDateTime();
+ mCurrentTimerDelay = SAVETIMER_TIMEOUT_SECONDS;
} else {
mRunSaveTimer->stop();
saveRunningInfoToFile();
}
@@ -104,8 +113,26 @@ void Todo::saveRunningInfo( QString comment, QDateTime start, QDateTime end )
mRunStart = start;
mRunEnd = end;
saveRunningInfoToFile( comment );
}
+void Todo::timerSlotSaveRunningInfoToFile()
+{
+ mRunEnd = QDateTime::currentDateTime();
+ int secsTo = mRunLastSave.secsTo( mRunEnd );
+ if( secsTo == 8 ) ++secsTo;
+ qDebug("KO Todo::saveTimerTimeout %d %d", secsTo, mCurrentTimerDelay );
+ if ( secsTo > mCurrentTimerDelay ) {
+ qDebug("KO Todo::saveTimerTimeout restart %d ", SAVETIMER_TIMEOUT_RETRY_SECONDS );
+ mRunSaveTimer->start( SAVETIMER_TIMEOUT_RETRY_SECONDS * 1000 );
+ mRunLastSave = QDateTime::currentDateTime();
+ mCurrentTimerDelay = SAVETIMER_TIMEOUT_RETRY_SECONDS;
+ return;
+ }
+ mRunSaveTimer->start( SAVETIMER_TIMEOUT_SECONDS * 1000 ); // 5 min
+ mRunLastSave = QDateTime::currentDateTime();
+ mCurrentTimerDelay = SAVETIMER_TIMEOUT_SECONDS;
+ saveRunningInfoToFile( QString::null );
+}
void Todo::saveRunningInfoToFile()
{
mRunEnd = QDateTime::currentDateTime();
saveRunningInfoToFile( QString::null );
diff --git a/libkcal/todo.h b/libkcal/todo.h
index 7feb32e..e6b8a21 100644
--- a/libkcal/todo.h
+++ b/libkcal/todo.h
@@ -130,12 +130,16 @@ namespace KCal {
void saveRunningInfoToFile( QString st );
void saveRunningInfoToFile( );
void saveParents();
QString durationText();
+ private slots:
+ void timerSlotSaveRunningInfoToFile( );
private:
+ int mCurrentTimerDelay;
bool mRunning;
QTimer * mRunSaveTimer;
QDateTime mRunStart;
+ QDateTime mRunLastSave;
QDateTime mRunEnd;
bool accept(Visitor &v) { return v.visit(this); }
QDateTime mDtDue; // due date of todo