00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#include <qfile.h>
00023
00024
#include <kdebug.h>
00025
00026
#include <calendarsyncee.h>
00027
#include <idhelper.h>
00028
#include <libkcal/calendarlocal.h>
00029
00030
#include "device.h"
00031
#include "todo.h"
00032
00033
using namespace OpieHelper;
00034
00035
00036 ToDo::ToDo( CategoryEdit* edit,
00037 KSync::KonnectorUIDHelper* helper,
00038
const QString &tz,
00039
bool meta, Device* dev)
00040 : Base( edit, helper, tz, meta, dev )
00041 {
00042 }
00043 ToDo::~ToDo(){
00044 }
00045 KCal::Todo* ToDo::dom2todo(
QDomElement e, ExtraMap& extra,
const QStringList& lst ) {
00046
QString dummy;
00047
int Int;
00048 KCal::Todo* todo =
new KCal::Todo();
00049
QStringList list = QStringList::split(
";", e.attribute(
"Categories") );
00050
QStringList categories;
00051
00052
QString cat;
00053
for ( uint i = 0; i < list.count(); i++ ) {
00054 cat = m_edit->categoryById( list[i],
"Todo List");
00055
00056
if (!cat.isEmpty() && !categories.contains( cat) )
00057 categories.append(cat );
00058 }
00059
if (!categories.isEmpty() ) {
00060 kdDebug(5226) <<
"List " << list.join(
";") << endl;
00061 kdDebug(5226) <<
"TransLated " << categories.join(
";") << endl;
00062 todo->setCategories( categories );
00063 }
00064
00065 todo->setDescription(e.attribute(
"Description" ) );
00066 todo->setSummary( e.attribute(
"Summary") );
00067
if ( ( device() && device()->distribution() == Device::Zaurus ) || todo->summary().isEmpty() )
00068 todo->setSummary( e.attribute(
"Description").stripWhiteSpace().left(20).simplifyWhiteSpace() );
00069
00070 setUid(todo, e.attribute(
"Uid") );
00071
00072 dummy = e.attribute(
"Completed");
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 Int = dummy.toInt();
00084 kdDebug(5227) <<
" Completed " << dummy <<
" " << Int << endl;
00085
00086
00087
if ( Int == 0) {
00088 kdDebug(5227) <<
"Calling not completed " << endl;
00089 todo->setCompleted(
false );
00090
00091
00092
00093
00094
00095 todo->setPercentComplete( e.attribute(
"Progress").toInt() );
00096 }
else{
00097 kdDebug(5227) <<
"Todo is completed " << endl;
00098 todo->setCompleted(
true );
00099 }
00100
00101
00102
00103 kdDebug(5227) <<
"dummy completed " << todo->isCompleted() << endl;
00104
00105 dummy = e.attribute(
"Priority" );
00106 todo->setPriority(dummy.toInt( ) );
00107 dummy = e.attribute(
"HasDate" );
00108
bool status = dummy.toInt( );
00109
if(status){
00110 kdDebug(5227) <<
"Has Due Date " << endl;
00111 todo->setHasDueDate(
true );
00112
QDateTime time = QDateTime::currentDateTime();
00113
QDate date;
00114 dummy = e.attribute(
"DateDay" );
00115
int day= dummy.toInt( );
00116
int month = e.attribute(
"DateMonth").toInt( );
00117
int year = e.attribute(
"DateYear").toInt( );
00118 date.setYMD(year, month, day);
00119 time.setDate( date );
00120 todo->setDtDue( time );
00121
00122
00123
00124
00125 todo->setHasDueDate(
true );
00126 }
else{
00127 todo->setHasDueDate(
false );
00128 }
00129
00130
00131 extra.add(
"todo", e.attribute(
"Uid"), e.attributes(), lst );
00132
00133
return todo;
00134 }
00135
00136
bool ToDo::toKDE(
const QString &fileName, ExtraMap& map,
KSync::CalendarSyncee *syncee )
00137 {
00138 syncee->
setSource(
"OpieTodo" );
00139 syncee->
setIdentifier(
"Opie" );
00140
00141
if ( device() )
00142 syncee->
setSupports( device()->supports( Device::Todolist ) );
00143
00144
QFile file( fileName );
00145
if ( !file.open( IO_ReadOnly ) ) {
00146
return false;
00147 }
00148
00149
QDomDocument doc(
"mydocument" );
00150
if ( !doc.setContent( &file ) ) {
00151
return false;
00152 }
00153
00154
QStringList attr = attributes();
00155
QDomElement docElem = doc.documentElement();
00156 KCal::Todo *todo;
00157
QDomNode n = docElem.firstChild();
00158
while ( !n.isNull() ) {
00159
QDomElement e = n.toElement();
00160
if ( !e.isNull() ) {
00161
if ( e.tagName() ==
"Task" ) {
00162 todo = dom2todo( e, map,attr );
00163 KSync::CalendarSyncEntry* entry;
00164 entry =
new KSync::CalendarSyncEntry( todo, syncee );
00165 syncee->
addEntry( entry );
00166 }
00167 }
00168
00169 n = n.nextSibling();
00170 }
00171
00172
return true;
00173 }
00174
00175 KTempFile* ToDo::fromKDE(
KSync::CalendarSyncee* syncee, ExtraMap& map )
00176 {
00177
00178 m_kde2opie.clear();
00179
Kontainer::ValueList newIds = syncee->
ids(
"TodoSyncEntry");
00180
for ( Kontainer::ValueList::ConstIterator idIt = newIds.begin(); idIt != newIds.end(); ++idIt ) {
00181 m_helper->addId(
"TodoSyncEntry", (*idIt).first(), (*idIt).second() );
00182 }
00183
00184 KTempFile* tmpFile = file();
00185
if (tmpFile->textStream() ) {
00186
00187 KSync::CalendarSyncEntry* entry;
00188
QTextStream *stream = tmpFile->textStream();
00189 stream->setEncoding( QTextStream::UnicodeUTF8 );
00190 *stream <<
"<!DOCTYPE Tasks>" << endl;
00191 *stream <<
"<Tasks>" << endl;
00192
for ( entry = (KSync::CalendarSyncEntry*)syncee->
firstEntry();
00193 entry != 0l;
00194 entry = (KSync::CalendarSyncEntry*)syncee->
nextEntry() )
00195 {
00196
if ( entry->state() == KSync::SyncEntry::Removed )
00197
continue;
00198
00199 KCal::Todo *todo = dynamic_cast<KCal::Todo*>( entry->incidence() );
00200
if ( !todo )
00201
continue;
00202
00203 *stream << todo2String( todo, map ) << endl;
00204 }
00205 *stream <<
"</Tasks>" << endl;
00206 }
00207
if (m_helper)
00208 m_helper->replaceIds(
"TodoSyncEntry", m_kde2opie );
00209
00210 tmpFile->close();
00211
00212
return tmpFile;
00213 }
00214
void ToDo::setUid( KCal::Todo* todo,
const QString &uid )
00215 {
00216 todo->setUid( kdeId(
"TodoSyncEntry", uid ) );
00217 }
00218
00219
QString ToDo::todo2String( KCal::Todo* todo, ExtraMap& map )
00220 {
00221
QString text;
00222 text.append(
"<Task ");
00223
QStringList list = todo->categories();
00224 text.append(
"Categories=\"" + categoriesToNumber( list ) +
"\" " );
00225 kdDebug(5227) <<
" todo->isCompleted " << todo->isCompleted() << endl;
00226 text.append(
"Completed=\""+QString::number( todo->isCompleted()) +
"\" " );
00227 text.append(
"Progress=\"" + QString::number( todo->percentComplete() ) +
"\" ");
00228
00229
00230
if ( device() && device()->distribution() != Device::Zaurus )
00231 text.append(
"Summary=\"" + escape( todo->summary() ) +
"\" ");
00232
00233
if ( todo->hasDueDate() ) {
00234 text.append(
"HasDate=\"1\" ");
00235
QDateTime time = todo->dtDue();
00236 text.append(
"DateDay=\"" +QString::number( time.date().day() ) +
"\" ");
00237 text.append(
"DateMonth=\"" + QString::number( time.date().month() ) +
"\" " );
00238 text.append(
"DateYear=\"" + QString::number( time.date().year() )+
"\" " );
00239 }
else{
00240 text.append(
"HasDate=\"0\" ");
00241 }
00242 text.append(
"Priority=\"" + QString::number( todo->priority() ) +
"\" " );
00243
00244
00245
00246
00247
00248
if ( device() && device()->distribution() != Device::Zaurus )
00249 text.append(
"Description=\"" +escape( todo->description() ) +
"\" " );
00250
else{
00251
QString desc = todo->description().isEmpty() ? todo->summary() : todo->description();
00252 text.append(
"Description=\"" +escape( desc ) );
00253 }
00254
00255
00256
00257
00258
QString uid = konnectorId(
"TodoSyncEntry", todo->uid() );
00259 text.append(
"Uid=\"" +uid +
"\" " );
00260
00261
00262 text.append( map.toString(
"todo", uid ) );
00263
00264 text.append(
" />");
00265
return text;
00266 }
00267
00268
QStringList ToDo::attributes()const {
00269
QStringList lst;
00270 lst <<
"Categories";
00271 lst <<
"Completed";
00272 lst <<
"Progress";
00273 lst <<
"Summary";
00274 lst <<
"HasDate";
00275 lst <<
"DateDay";
00276 lst <<
"DateMonth";
00277 lst <<
"DateYear";
00278 lst <<
"Priority";
00279 lst <<
"Description";
00280 lst <<
"Uid";
00281
00282
return lst;
00283 }