todo.cpp
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 }
This file is part of the documentation for kitchensync Library Version 3.3.2.