-rw-r--r-- | libopie/libopie.pro | 2 | ||||
-rw-r--r-- | libopie/tododb.cpp | 8 | ||||
-rw-r--r-- | libopie/todoevent.cpp | 6 | ||||
-rw-r--r-- | libopie/todovcalresource.cpp | 153 |
4 files changed, 166 insertions, 3 deletions
diff --git a/libopie/libopie.pro b/libopie/libopie.pro index fb00422..1c0bf7b 100644 --- a/libopie/libopie.pro +++ b/libopie/libopie.pro @@ -1,7 +1,7 @@ TEMPLATE = lib CONFIG += qte warn_on release HEADERS = $(OPIEDIR)/include/opie/xmltree.h -SOURCES = xmltree.cc tododb.cpp todoevent.cpp +SOURCES = xmltree.cc tododb.cpp todoevent.cpp todovcalresource.cpp TARGET = opie INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(QTDIR)/lib$(PROJMAK) diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp index b1b35d0..f9756c6 100644 --- a/libopie/tododb.cpp +++ b/libopie/tododb.cpp @@ -109,64 +109,72 @@ public: } //uid dummy = element->attribute("Uid" ); dumInt = dummy.toInt(&ok ); if(ok ) event.setUid( dumInt ); m_todos.append( event ); element = element->nextChild(); // next element } //} }else { qWarning("could not load" ); } delete root; qWarning("returning" ); return m_todos; } }; } ToDoDB::ToDoDB(const QString &fileName = QString::null, ToDoResource *res ){ m_fileName = fileName; if( fileName.isEmpty() && res == 0 ){ m_fileName = Global::applicationFileName("todolist","todolist.xml"); res = new FileToDoResource(); //qWarning("%s", m_fileName.latin1() ); }else if(res == 0 ){ // let's create a ToDoResource for xml res = new FileToDoResource(); } m_res = res; load(); } +ToDoResource* ToDoDB::resource(){ + return m_res; +}; +void ToDoDB::setResource( ToDoResource *res ) +{ + delete m_res; + m_res = res; +} ToDoDB::~ToDoDB() { delete m_res; } QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, const QDate &to, bool all ) { QValueList<ToDoEvent> events; for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){ if( (*it).hasDate() ){ if( (*it).date() >= from && (*it).date() <= to ) events.append( (*it) ); }else if( all ){ events.append( (*it) ); } } return events; } QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, bool all) { return effectiveToDos( from, QDate::currentDate(), all ); } QValueList<ToDoEvent> ToDoDB::overDue() { QValueList<ToDoEvent> events; for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){ if( (*it).isOverdue() ) events.append((*it) ); } return events; } diff --git a/libopie/todoevent.cpp b/libopie/todoevent.cpp index 4cfe1c0..5fa4472 100644 --- a/libopie/todoevent.cpp +++ b/libopie/todoevent.cpp @@ -1,88 +1,90 @@ #include <opie/todoevent.h> #include <qpe/palmtopuidgen.h> +#include <qpe/stringutil.h> +//#include <qpe/palmtoprecord.h> ToDoEvent::ToDoEvent(bool completed, int priority, const QString &category, const QString &description, bool hasDate, QDate date, int uid ) { qWarning("todoEvent c'tor" ); m_date = date; m_isCompleted = completed; m_hasDate = hasDate; m_priority = priority; m_category = category; - m_desc = description; + m_desc = Qtopia::simplifyMultiLineSpace(description ); if (uid == -1 ) { Qtopia::UidGen *uidgen = new Qtopia::UidGen(); uid = uidgen->generate(); delete uidgen; }// generate the ids m_uid = uid; } bool ToDoEvent::isCompleted() const { return m_isCompleted; } bool ToDoEvent::hasDate() const { return m_hasDate; } int ToDoEvent::priority()const { return m_priority; } QString ToDoEvent::category()const { return m_category; } QDate ToDoEvent::date()const { return m_date; } QString ToDoEvent::description()const { return m_desc; } void ToDoEvent::setCompleted( bool completed ) { m_isCompleted = completed; } void ToDoEvent::setHasDate( bool hasDate ) { m_hasDate = hasDate; } void ToDoEvent::setDescription(const QString &desc ) { - m_desc = desc; + m_desc = Qtopia::simplifyMultiLineSpace(desc ); } void ToDoEvent::setCategory( const QString &cat ) { m_category = cat; } void ToDoEvent::setPriority(int prio ) { m_priority = prio; } void ToDoEvent::setDate( QDate date ) { m_date = date; } bool ToDoEvent::isOverdue( ) { if( m_hasDate ) return QDate::currentDate() > m_date; return false; } bool ToDoEvent::operator<( const ToDoEvent &toDoEvent )const{ if( !hasDate() && !toDoEvent.hasDate() ) return true; if( !hasDate() && toDoEvent.hasDate() ) return true; if( hasDate() && toDoEvent.hasDate() ){ if( date() == toDoEvent.date() ){ // let's the priority decide return priority() < toDoEvent.priority(); }else{ return date() < toDoEvent.date(); } } return false; } bool ToDoEvent::operator<=(const ToDoEvent &toDoEvent )const diff --git a/libopie/todovcalresource.cpp b/libopie/todovcalresource.cpp new file mode 100644 index 0000000..a6afe68 --- a/dev/null +++ b/libopie/todovcalresource.cpp @@ -0,0 +1,153 @@ +/* + =. This file is part of the OPIE Project + .=l. Copyright (c) 2002 Holger Freyther <freyther@kde.org> + .>+-= the use of vobject was inspired by libkcal + _;:, .> :=|. This library is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This library is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#include <qfile.h> +#include <qvaluelist.h> +#include <opie/todoevent.h> +#include <opie/todovcalresource.h> + +#include "../library/backend/vobject_p.h" +#include "../library/backend/timeconversion.h" +#include "../library/backend/qfiledirect_p.h" + +static VObject *vobjByEvent( const ToDoEvent &event ) +{ + VObject *task = newVObject( VCTodoProp ); + if( task == 0 ) + return 0l; + if( event.hasDate() ) + addPropValue( task, VCDueProp, TimeConversion::toISO8601( event.date() ) ); + + if( event.isCompleted() ) + addPropValue( task, VCStatusProp, "COMPLETED"); + + QString string = QString::number(event.priority() ); + addPropValue( task, VCPriorityProp, string.local8Bit() ); + addPropValue( task, VCCategoriesProp, event.category().local8Bit() ); + addPropValue( task, VCDescriptionProp, event.description().local8Bit() ); + addPropValue( task, VCSummaryProp, event.description().left(15).local8Bit() ); + return task; +}; + +static ToDoEvent eventByVObj( VObject *obj ){ + ToDoEvent event; + VObject *ob; + QCString name; + // no uid, attendees, ... and no fun + // description + if( ( ob = isAPropertyOf( obj, VCDescriptionProp )) != 0 ){ + name = vObjectStringZValue( ob ); + event.setDescription( name ); + } + // completed + if( ( ob = isAPropertyOf( obj, VCStatusProp )) != 0 ){ + name = vObjectStringZValue( ob ); + if( name == "COMPLETED" ){ + event.setCompleted( true ); + }else{ + event.setCompleted( false ); + } + }else + event.setCompleted( false ); + // priority + if ((ob = isAPropertyOf(obj, VCPriorityProp))) { + name = vObjectStringZValue( ob ); + bool ok; + event.setPriority(name.toInt(&ok) ); + } + //due date + if((ob = isAPropertyOf(obj, VCDueProp)) ){ + event.setHasDate( true ); + name = vObjectStringZValue( ob ); + event.setDate( TimeConversion::fromISO8601( name).date() ); + } + // categories + if((ob = isAPropertyOf( obj, VCCategoriesProp )) != 0 ){ + name = vObjectStringZValue( ob ); + qWarning("Categories:%s", name.data() ); + } + + return event; +}; + + +QValueList<ToDoEvent> ToDoVCalResource::load(const QString &file) +{ + QValueList<ToDoEvent> events; + VObject *vcal = 0l; + vcal = Parse_MIME_FromFileName( (char *)file.utf8().data() ); // from vobject + if(!vcal ) + return events; + // start parsing + + VObjectIterator it; + VObject *vobj; + initPropIterator(&it, vcal); + + while( moreIteration( &it ) ) { + vobj = ::nextVObject( &it ); + QCString name = ::vObjectName( vobj ); + //QCString objVal = ::vObjectStringZValue( vobj ); + // let's find out the type + if( name == VCTodoProp ){ + events.append( eventByVObj( vobj ) ); + + } // parse the value + } + return events; +} +bool ToDoVCalResource::save(const QString &fileName, const QValueList<ToDoEvent>&list ) +{ + QFileDirect file ( fileName ); + if(!file.open(IO_WriteOnly ) ) + return false; + // obj + VObject *obj; + obj = newVObject( VCCalProp ); + addPropValue( obj, VCVersionProp, "1.0" ); + VObject *vo; + for(QValueList<ToDoEvent>::ConstIterator it = list.begin(); it != list.end(); ++it ){ + vo = vobjByEvent( (*it) ); + addVObjectProp(obj, vo ); + } + writeVObject( file.directHandle(), obj ); + cleanVObject( obj ); + cleanStrTbl(); + + return true; +} + + + + + + + + + + |