summaryrefslogtreecommitdiffabout
path: root/libkcal
Side-by-side diff
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/todo.cpp36
-rw-r--r--libkcal/todo.h1
2 files changed, 34 insertions, 3 deletions
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index 90e7eb9..b89abce 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -20,33 +20,34 @@
#include <kglobal.h>
#include <kglobalsettings.h>
#include <klocale.h>
#include <kdebug.h>
#include <qregexp.h>
+#include <qfileinfo.h>
#include "calendarlocal.h"
#include "icalformat.h"
#include "todo.h"
using namespace KCal;
-Todo::Todo(): Incidence()
+Todo::Todo(): QObject(), Incidence()
{
// mStatus = TENTATIVE;
mHasDueDate = false;
setHasStartDate( false );
mCompleted = getEvenTime(QDateTime::currentDateTime());
mHasCompletedDate = false;
mPercentComplete = 0;
mRunning = false;
mRunSaveTimer = 0;
}
-Todo::Todo(const Todo &t) : Incidence(t)
+Todo::Todo(const Todo &t) : QObject(),Incidence(t)
{
mDtDue = t.mDtDue;
mHasDueDate = t.mHasDueDate;
mCompleted = t.mCompleted;
mHasCompletedDate = t.mHasCompletedDate;
mPercentComplete = t.mPercentComplete;
@@ -78,14 +79,16 @@ void Todo::setRunning( bool run )
}
}
void Todo::saveRunningInfoToFile()
{
//qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1());
- if ( mRunStart.secsTo ( QDateTime::currentDateTime() ) < 30 )
+ if ( mRunStart.secsTo ( QDateTime::currentDateTime() ) < 30 ) {
+ qDebug("Running time < 30 seconds. Skipped. ");
return;
+ }
QString dir = KGlobalSettings::timeTrackerDir();
//qDebug("%s ", dir.latin1());
QString file = "%1%2%3-%4%5%6-";
file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 );
file.replace ( QRegExp (" "), "0" );
file += uid();
@@ -100,14 +103,41 @@ void Todo::saveRunningInfoToFile()
to->setHasDueDate( true );
to->setUid( file );
cal.addIncidence( to );
ICalFormat format;
file = dir +"/" +file +".ics";
format.save( &cal, file );
+ saveParents();
}
+void Todo::saveParents()
+{
+ if (!relatedTo() )
+ return;
+ Incidence * inc = relatedTo();
+ if ( inc->type() != "Todo" )
+ return;
+ Todo* to = (Todo*)inc;
+ bool saveTodo = false;
+ QString file = KGlobalSettings::timeTrackerDir() + "/"+ to->uid() + ".ics";
+ QFileInfo fi ( file );
+ if ( fi.exists() ) {
+ if ( fi.lastModified () < to->lastModified ())
+ saveTodo = true;
+ } else {
+ saveTodo = true;
+ }
+ if ( saveTodo ) {
+ CalendarLocal cal;
+ cal.setTimeZoneId( " 00:00 Europe/London(UTC)" );
+ Todo * par = (Todo *) to->clone();
+ cal.addIncidence( par );
+ ICalFormat format;
+ format.save( &cal, file );
+ }
+}
int Todo::runTime()
{
if ( !mRunning )
return 0;
return mRunStart.secsTo( QDateTime::currentDateTime() );
diff --git a/libkcal/todo.h b/libkcal/todo.h
index fe43357..ec1ffda 100644
--- a/libkcal/todo.h
+++ b/libkcal/todo.h
@@ -121,12 +121,13 @@ namespace KCal {
bool hasRunningSub();
void setRunning( bool );
int runTime();
QDateTime runStart () const { return mRunStart;}
public slots:
void saveRunningInfoToFile();
+ void saveParents();
private:
bool mRunning;
QTimer * mRunSaveTimer;
QDateTime mRunStart;
bool accept(Visitor &v) { return v.visit(this); }