00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <kstaticdeleter.h>
00023
00024
#include <libkcal/calformat.h>
00025
00026
#include "incidencetemplate.h"
00027
#include "todosyncee.h"
00028
00029
00030
using namespace KSync;
00031
using namespace KCal;
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 TodoSyncEntry::TodoSyncEntry( KCal::Todo *todo,
Syncee *parent )
00042 :
SyncEntry( parent ), mTodo( todo )
00043 {
00044
if (!mTodo )
00045 mTodo =
new KCal::Todo;
00046 }
00047
00048 TodoSyncEntry::TodoSyncEntry(
const TodoSyncEntry& entry)
00049 :
SyncEntry( entry )
00050 {
00051 mTodo = (KCal::Todo*)entry.mTodo->clone();
00052 }
00053
00054 TodoSyncEntry::~TodoSyncEntry()
00055 {
00056
delete mTodo;
00057 }
00058
00059 KCal::Todo* TodoSyncEntry::todo()
00060 {
00061
return mTodo;
00062 }
00063
00064
QString TodoSyncEntry::type()
const
00065
{
00066
return QString::fromLatin1(
"TodoSyncEntry");
00067 }
00068
00069
QString TodoSyncEntry::name()
00070 {
00071
return mTodo->summary();
00072 }
00073
00074
QString TodoSyncEntry::id()
00075 {
00076
return mTodo->uid();
00077 }
00078
00079
void TodoSyncEntry::setId(
const QString&
id )
00080 {
00081 mTodo->setUid(
id );
00082 }
00083
00084
QString TodoSyncEntry::timestamp()
00085 {
00086
return mTodo->lastModified().toString();
00087 }
00088
00089
SyncEntry* TodoSyncEntry::clone()
00090 {
00091
return new TodoSyncEntry( *
this );
00092 }
00093
00094
bool TodoSyncEntry::equals(
SyncEntry* entry )
00095 {
00096 TodoSyncEntry* todoEntry = dynamic_cast<TodoSyncEntry*> (entry );
00097
if (!todoEntry )
00098
return false;
00099
00100
if (mTodo->uid() != todoEntry->todo()->uid() )
return false;
00101
if (mTodo->lastModified() != todoEntry->todo()->lastModified() )
return false;
00102
return true;
00103 }
00104
00105
typedef MergeBase<Todo, TodoSyncee> MergeTodo;
00106
static MergeTodo* mergeTodoMap = 0l;
00107
static KStaticDeleter<MergeTodo> MergeTodoDeleter;
00108
00109
static void mergeDue( Todo*
const dest,
const Todo*
const src)
00110 {
00111 dest->setDtDue( src->dtDue() );
00112 }
00113
00114
static void mergeStart( Todo*
const dest,
const Todo*
const src)
00115 {
00116 dest->setHasStartDate( src->hasStartDate() );
00117 }
00118
00119
static void mergeComp( Todo*
const dest,
const Todo*
const src)
00120 {
00121 dest->setCompleted( src->isCompleted() );
00122 }
00123
00124
static void mergePer( Todo*
const dest,
const Todo*
const src)
00125 {
00126 dest->setPercentComplete( src->percentComplete() );
00127 }
00128
00129
static MergeTodo* mapTo() {
00130
if (!mergeTodoMap ) {
00131 MergeTodoDeleter.setObject( mergeTodoMap,
new MergeTodo );
00132
00133 mergeTodoMap->add( TodoSyncee::DtDue, mergeDue );
00134 mergeTodoMap->add( TodoSyncee::StartDate, mergeStart );
00135 mergeTodoMap->add( TodoSyncee::Completed, mergeComp );
00136 mergeTodoMap->add( TodoSyncee::Percent, mergePer );
00137 }
00138
return mergeTodoMap;
00139 }
00140
00141
bool TodoSyncEntry::mergeWith(
SyncEntry* entry )
00142 {
00143
if ( entry->
name() != name() || !syncee() || !entry->
syncee() )
00144
return false;
00145
00146 TodoSyncEntry* toEn = static_cast<TodoSyncEntry*>(entry);
00147
QBitArray da = toEn->syncee()->bitArray();
00148
QBitArray hier = syncee()->bitArray();
00149
for ( uint i = 0; i < da.size() && i < hier.size() ; i++ ) {
00150
if (da[i] && !hier[i] ) {
00151 mapTo()->invoke(i, mTodo, toEn->mTodo );
00152 }
00153 }
00154
00155
return true;
00156 }
00157
00159 TodoSyncee::TodoSyncee()
00160 : SyncTemplate<TodoSyncEntry>(TodoSyncee::Percent+1)
00161 {
00162 }
00163
00164
QString TodoSyncee::type()
const
00165
{
00166
return QString::fromLatin1(
"TodoSyncee");
00167 }
00168
00169
Syncee* TodoSyncee::clone()
00170 {
00171 TodoSyncee* temp =
new TodoSyncee();
00172 temp->setSyncMode( syncMode() );
00173 temp->setFirstSync( firstSync() );
00174 temp->setSupports( bitArray() );
00175 temp->setSource( source() );
00176 TodoSyncEntry* entry;
00177
for ( entry = mList.first(); entry != 0; entry = mList.next() ) {
00178 temp->addEntry( entry->clone() );
00179 }
00180
return temp;
00181 }
00182
00183
QString TodoSyncee::newId()
const
00184
{
00185
return KCal::CalFormat::createUniqueId();
00186 }
00187
00188