summaryrefslogtreecommitdiff
path: root/libopie/todovcalresource.cpp
Unidiff
Diffstat (limited to 'libopie/todovcalresource.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/todovcalresource.cpp153
1 files changed, 153 insertions, 0 deletions
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 @@
1/*
2               =. This file is part of the OPIE Project
3             .=l. Copyright (c) 2002 Holger Freyther <freyther@kde.org>
4           .>+-= the use of vobject was inspired by libkcal
5 _;:,     .>    :=|. This library is free software; you can
6.> <`_,   >  .   <= redistribute it and/or modify it under
7:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
8.="- .-=="i,     .._ License as published by the Free Software
9 - .   .-<_>     .<> Foundation; either version 2 of the License,
10     ._= =}       : or (at your option) any later version.
11    .%`+i>       _;_.
12    .i_,=:_.      -<s. This library is distributed in the hope that
13     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
14    : ..    .:,     . . . without even the implied warranty of
15    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
16  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
17..}^=.=       =       ; Library General Public License for more
18++=   -.     .`     .: details.
19 :     =  ...= . :.=-
20 -.   .:....=;==+<; You should have received a copy of the GNU
21  -_. . .   )=.  = Library General Public License along with
22    --        :-=` this library; see the file COPYING.LIB.
23 If not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA.
26
27*/
28
29#include <qfile.h>
30#include <qvaluelist.h>
31#include <opie/todoevent.h>
32#include <opie/todovcalresource.h>
33
34#include "../library/backend/vobject_p.h"
35#include "../library/backend/timeconversion.h"
36#include "../library/backend/qfiledirect_p.h"
37
38static VObject *vobjByEvent( const ToDoEvent &event )
39{
40 VObject *task = newVObject( VCTodoProp );
41 if( task == 0 )
42 return 0l;
43 if( event.hasDate() )
44 addPropValue( task, VCDueProp, TimeConversion::toISO8601( event.date() ) );
45
46 if( event.isCompleted() )
47 addPropValue( task, VCStatusProp, "COMPLETED");
48
49 QString string = QString::number(event.priority() );
50 addPropValue( task, VCPriorityProp, string.local8Bit() );
51 addPropValue( task, VCCategoriesProp, event.category().local8Bit() );
52 addPropValue( task, VCDescriptionProp, event.description().local8Bit() );
53 addPropValue( task, VCSummaryProp, event.description().left(15).local8Bit() );
54 return task;
55};
56
57static ToDoEvent eventByVObj( VObject *obj ){
58 ToDoEvent event;
59 VObject *ob;
60 QCString name;
61 // no uid, attendees, ... and no fun
62 // description
63 if( ( ob = isAPropertyOf( obj, VCDescriptionProp )) != 0 ){
64 name = vObjectStringZValue( ob );
65 event.setDescription( name );
66 }
67 // completed
68 if( ( ob = isAPropertyOf( obj, VCStatusProp )) != 0 ){
69 name = vObjectStringZValue( ob );
70 if( name == "COMPLETED" ){
71 event.setCompleted( true );
72 }else{
73 event.setCompleted( false );
74 }
75 }else
76 event.setCompleted( false );
77 // priority
78 if ((ob = isAPropertyOf(obj, VCPriorityProp))) {
79 name = vObjectStringZValue( ob );
80 bool ok;
81 event.setPriority(name.toInt(&ok) );
82 }
83 //due date
84 if((ob = isAPropertyOf(obj, VCDueProp)) ){
85 event.setHasDate( true );
86 name = vObjectStringZValue( ob );
87 event.setDate( TimeConversion::fromISO8601( name).date() );
88 }
89 // categories
90 if((ob = isAPropertyOf( obj, VCCategoriesProp )) != 0 ){
91 name = vObjectStringZValue( ob );
92 qWarning("Categories:%s", name.data() );
93 }
94
95 return event;
96};
97
98
99QValueList<ToDoEvent> ToDoVCalResource::load(const QString &file)
100{
101 QValueList<ToDoEvent> events;
102 VObject *vcal = 0l;
103 vcal = Parse_MIME_FromFileName( (char *)file.utf8().data() ); // from vobject
104 if(!vcal )
105 return events;
106 // start parsing
107
108 VObjectIterator it;
109 VObject *vobj;
110 initPropIterator(&it, vcal);
111
112 while( moreIteration( &it ) ) {
113 vobj = ::nextVObject( &it );
114 QCString name = ::vObjectName( vobj );
115 //QCString objVal = ::vObjectStringZValue( vobj );
116 // let's find out the type
117 if( name == VCTodoProp ){
118 events.append( eventByVObj( vobj ) );
119
120 } // parse the value
121 }
122 return events;
123}
124bool ToDoVCalResource::save(const QString &fileName, const QValueList<ToDoEvent>&list )
125{
126 QFileDirect file ( fileName );
127 if(!file.open(IO_WriteOnly ) )
128 return false;
129 // obj
130 VObject *obj;
131 obj = newVObject( VCCalProp );
132 addPropValue( obj, VCVersionProp, "1.0" );
133 VObject *vo;
134 for(QValueList<ToDoEvent>::ConstIterator it = list.begin(); it != list.end(); ++it ){
135 vo = vobjByEvent( (*it) );
136 addVObjectProp(obj, vo );
137 }
138 writeVObject( file.directHandle(), obj );
139 cleanVObject( obj );
140 cleanStrTbl();
141
142 return true;
143}
144
145
146
147
148
149
150
151
152
153