summaryrefslogtreecommitdiff
path: root/libopie2/opiepim
Unidiff
Diffstat (limited to 'libopie2/opiepim') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp15
-rw-r--r--libopie2/opiepim/backend/otodoaccessvcal.cpp17
-rw-r--r--libopie2/opiepim/private/vobject_p.h408
3 files changed, 428 insertions, 12 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
index b569f8b..ffa6a7d 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
@@ -1,156 +1,161 @@
1/* 1/*
2 This file is part of the Opie Project 2 This file is part of the Opie Project
3 Copyright (C) The Main Author <main-author@whereever.org> 3 Copyright (C) The Main Author <main-author@whereever.org>
4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org> 4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org>
5 .=l. 5 .=l.
6 .>+-= 6 .>+-=
7 _;:, .> :=|. This program is free software; you can 7 _;:, .> :=|. This program is free software; you can
8.> <`_, > . <= redistribute it and/or modify it under 8.> <`_, > . <= redistribute it and/or modify it under
9:`=1 )Y*s>-.-- : the terms of the GNU Library General Public 9:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
10.="- .-=="i, .._ License as published by the Free Software 10.="- .-=="i, .._ License as published by the Free Software
11 - . .-<_> .<> Foundation; either version 2 of the License, 11 - . .-<_> .<> Foundation; either version 2 of the License,
12 ._= =} : or (at your option) any later version. 12 ._= =} : or (at your option) any later version.
13 .%`+i> _;_. 13 .%`+i> _;_.
14 .i_,=:_. -<s. This program is distributed in the hope that 14 .i_,=:_. -<s. This program is distributed in the hope that
15 + . -:. = it will be useful, but WITHOUT ANY WARRANTY; 15 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
16 : .. .:, . . . without even the implied warranty of 16 : .. .:, . . . without even the implied warranty of
17 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A 17 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
18 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU 18 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.= = ; Library General Public License for more 19..}^=.= = ; Library General Public License for more
20++= -. .` .: details. 20++= -. .` .: details.
21 : = ...= . :.=- 21 : = ...= . :.=-
22 -. .:....=;==+<; You should have received a copy of the GNU 22 -. .:....=;==+<; You should have received a copy of the GNU
23 -_. . . )=. = Library General Public License along with 23 -_. . . )=. = Library General Public License along with
24 -- :-=` this library; see the file COPYING.LIB. 24 -- :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29/* 29/*
30 * VCard Backend for the OPIE-Contact Database. 30 * VCard Backend for the OPIE-Contact Database.
31 */ 31 */
32#include <opie2/ocontactaccessbackend_vcard.h>
33#include "../../../../library/backend/vobject_p.h"
34#include "../../../../library/backend/qfiledirect_p.h"
35 32
33
34#include "vobject_p.h"
35
36/* OPIE */
37#include <opie2/ocontactaccessbackend_vcard.h>
36#include <qpe/timeconversion.h> 38#include <qpe/timeconversion.h>
37 39
40//FIXME: Hack to allow direct access to FILE* fh. Rewrite this!
41#define protected public
38#include <qfile.h> 42#include <qfile.h>
43#undef protected
39 44
40namespace Opie { 45namespace Opie {
41 46
42OPimContactAccessBackend_VCard::OPimContactAccessBackend_VCard ( const QString& , const QString& filename ): 47OPimContactAccessBackend_VCard::OPimContactAccessBackend_VCard ( const QString& , const QString& filename ):
43 m_dirty( false ), 48 m_dirty( false ),
44 m_file( filename ) 49 m_file( filename )
45{ 50{
46 load(); 51 load();
47} 52}
48 53
49 54
50bool OPimContactAccessBackend_VCard::load () 55bool OPimContactAccessBackend_VCard::load ()
51{ 56{
52 m_map.clear(); 57 m_map.clear();
53 m_dirty = false; 58 m_dirty = false;
54 59
55 VObject* obj = 0l; 60 VObject* obj = 0l;
56 61
57 if ( QFile::exists(m_file) ){ 62 if ( QFile::exists(m_file) ){
58 obj = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() ); 63 obj = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() );
59 if ( !obj ) 64 if ( !obj )
60 return false; 65 return false;
61 }else{ 66 }else{
62 qWarning("File \"%s\" not found !", m_file.latin1() ); 67 qWarning("File \"%s\" not found !", m_file.latin1() );
63 return false; 68 return false;
64 } 69 }
65 70
66 while ( obj ) { 71 while ( obj ) {
67 OPimContact con = parseVObject( obj ); 72 OPimContact con = parseVObject( obj );
68 /* 73 /*
69 * if uid is 0 assign a new one 74 * if uid is 0 assign a new one
70 * this at least happens on 75 * this at least happens on
71 * Nokia6210 76 * Nokia6210
72 */ 77 */
73 if ( con.uid() == 0 ){ 78 if ( con.uid() == 0 ){
74 con.setUid( 1 ); 79 con.setUid( 1 );
75 qWarning("assigned new uid %d",con.uid() ); 80 qWarning("assigned new uid %d",con.uid() );
76 } 81 }
77 82
78 m_map.insert( con.uid(), con ); 83 m_map.insert( con.uid(), con );
79 84
80 VObject *t = obj; 85 VObject *t = obj;
81 obj = nextVObjectInList(obj); 86 obj = nextVObjectInList(obj);
82 cleanVObject( t ); 87 cleanVObject( t );
83 } 88 }
84 89
85 return true; 90 return true;
86 91
87} 92}
88bool OPimContactAccessBackend_VCard::reload() 93bool OPimContactAccessBackend_VCard::reload()
89{ 94{
90 return load(); 95 return load();
91} 96}
92bool OPimContactAccessBackend_VCard::save() 97bool OPimContactAccessBackend_VCard::save()
93{ 98{
94 if (!m_dirty ) 99 if (!m_dirty )
95 return true; 100 return true;
96 101
97 QFileDirect file( m_file ); 102 QFile file( m_file );
98 if (!file.open(IO_WriteOnly ) ) 103 if (!file.open(IO_WriteOnly ) )
99 return false; 104 return false;
100 105
101 VObject *obj; 106 VObject *obj;
102 obj = newVObject( VCCalProp ); 107 obj = newVObject( VCCalProp );
103 addPropValue( obj, VCVersionProp, "1.0" ); 108 addPropValue( obj, VCVersionProp, "1.0" );
104 109
105 VObject *vo; 110 VObject *vo;
106 for(QMap<int, OPimContact>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){ 111 for(QMap<int, OPimContact>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){
107 vo = createVObject( *it ); 112 vo = createVObject( *it );
108 writeVObject( file.directHandle() , vo ); 113 writeVObject( file.fh, vo ); //FIXME: HACK!!!
109 cleanVObject( vo ); 114 cleanVObject( vo );
110 } 115 }
111 cleanStrTbl(); 116 cleanStrTbl();
112 deleteVObject( obj ); 117 deleteVObject( obj );
113 118
114 m_dirty = false; 119 m_dirty = false;
115 return true; 120 return true;
116 121
117 122
118} 123}
119void OPimContactAccessBackend_VCard::clear () 124void OPimContactAccessBackend_VCard::clear ()
120{ 125{
121 m_map.clear(); 126 m_map.clear();
122 m_dirty = true; // ??? sure ? (se) 127 m_dirty = true; // ??? sure ? (se)
123} 128}
124 129
125bool OPimContactAccessBackend_VCard::add ( const OPimContact& newcontact ) 130bool OPimContactAccessBackend_VCard::add ( const OPimContact& newcontact )
126{ 131{
127 m_map.insert( newcontact.uid(), newcontact ); 132 m_map.insert( newcontact.uid(), newcontact );
128 m_dirty = true; 133 m_dirty = true;
129 return true; 134 return true;
130} 135}
131 136
132bool OPimContactAccessBackend_VCard::remove ( int uid ) 137bool OPimContactAccessBackend_VCard::remove ( int uid )
133{ 138{
134 m_map.remove( uid ); 139 m_map.remove( uid );
135 m_dirty = true; 140 m_dirty = true;
136 return true; 141 return true;
137} 142}
138 143
139bool OPimContactAccessBackend_VCard::replace ( const OPimContact &contact ) 144bool OPimContactAccessBackend_VCard::replace ( const OPimContact &contact )
140{ 145{
141 m_map.replace( contact.uid(), contact ); 146 m_map.replace( contact.uid(), contact );
142 m_dirty = true; 147 m_dirty = true;
143 return true; 148 return true;
144} 149}
145 150
146OPimContact OPimContactAccessBackend_VCard::find ( int uid ) const 151OPimContact OPimContactAccessBackend_VCard::find ( int uid ) const
147{ 152{
148 return m_map[uid]; 153 return m_map[uid];
149} 154}
150 155
151QArray<int> OPimContactAccessBackend_VCard::allRecords() const 156QArray<int> OPimContactAccessBackend_VCard::allRecords() const
152{ 157{
153 QArray<int> ar( m_map.count() ); 158 QArray<int> ar( m_map.count() );
154 QMap<int, OPimContact>::ConstIterator it; 159 QMap<int, OPimContact>::ConstIterator it;
155 int i = 0; 160 int i = 0;
156 for ( it = m_map.begin(); it != m_map.end(); ++it ) { 161 for ( it = m_map.begin(); it != m_map.end(); ++it ) {
diff --git a/libopie2/opiepim/backend/otodoaccessvcal.cpp b/libopie2/opiepim/backend/otodoaccessvcal.cpp
index 0a1baf9..03d4479 100644
--- a/libopie2/opiepim/backend/otodoaccessvcal.cpp
+++ b/libopie2/opiepim/backend/otodoaccessvcal.cpp
@@ -1,84 +1,87 @@
1/* 1/*
2 This file is part of the Opie Project 2 This file is part of the Opie Project
3 Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) 3 Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de)
4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org> 4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org>
5 .=l. 5 .=l.
6 .>+-= 6 .>+-=
7 _;:, .> :=|. This program is free software; you can 7 _;:, .> :=|. This program is free software; you can
8.> <`_, > . <= redistribute it and/or modify it under 8.> <`_, > . <= redistribute it and/or modify it under
9:`=1 )Y*s>-.-- : the terms of the GNU Library General Public 9:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
10.="- .-=="i, .._ License as published by the Free Software 10.="- .-=="i, .._ License as published by the Free Software
11 - . .-<_> .<> Foundation; either version 2 of the License, 11 - . .-<_> .<> Foundation; either version 2 of the License,
12 ._= =} : or (at your option) any later version. 12 ._= =} : or (at your option) any later version.
13 .%`+i> _;_. 13 .%`+i> _;_.
14 .i_,=:_. -<s. This program is distributed in the hope that 14 .i_,=:_. -<s. This program is distributed in the hope that
15 + . -:. = it will be useful, but WITHOUT ANY WARRANTY; 15 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
16 : .. .:, . . . without even the implied warranty of 16 : .. .:, . . . without even the implied warranty of
17 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A 17 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
18 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU 18 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.= = ; Library General Public License for more 19..}^=.= = ; Library General Public License for more
20++= -. .` .: details. 20++= -. .` .: details.
21 : = ...= . :.=- 21 : = ...= . :.=-
22 -. .:....=;==+<; You should have received a copy of the GNU 22 -. .:....=;==+<; You should have received a copy of the GNU
23 -_. . . )=. = Library General Public License along with 23 -_. . . )=. = Library General Public License along with
24 -- :-=` this library; see the file COPYING.LIB. 24 -- :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29#include <qfile.h>
30
31#include <qtopia/private/vobject_p.h>
32#include <qtopia/timeconversion.h>
33#include <qtopia/private/qfiledirect_p.h>
34 29
30/* OPIE */
31#include "vobject_p.h"
32#include <qpe/timeconversion.h>
35#include <opie2/otodoaccessvcal.h> 33#include <opie2/otodoaccessvcal.h>
36 34
35//FIXME: Hack to allow direct access to FILE* fh. Rewrite this!
36#define protected public
37#include <qfile.h>
38#undef protected
39
37using namespace Opie; 40using namespace Opie;
38 41
39namespace { 42namespace {
40 static OPimTodo eventByVObj( VObject *obj ){ 43 static OPimTodo eventByVObj( VObject *obj ){
41 OPimTodo event; 44 OPimTodo event;
42 VObject *ob; 45 VObject *ob;
43 QCString name; 46 QCString name;
44 // no uid, attendees, ... and no fun 47 // no uid, attendees, ... and no fun
45 // description 48 // description
46 if( ( ob = isAPropertyOf( obj, VCDescriptionProp )) != 0 ){ 49 if( ( ob = isAPropertyOf( obj, VCDescriptionProp )) != 0 ){
47 name = vObjectStringZValue( ob ); 50 name = vObjectStringZValue( ob );
48#if 0 51#if 0
49 event.setDescription( name ); 52 event.setDescription( name );
50#else 53#else
51 event.setSummary( name ); 54 event.setSummary( name );
52#endif 55#endif
53 } 56 }
54 // summary 57 // summary
55 if ( ( ob = isAPropertyOf( obj, VCSummaryProp ) ) != 0 ) { 58 if ( ( ob = isAPropertyOf( obj, VCSummaryProp ) ) != 0 ) {
56 name = vObjectStringZValue( ob ); 59 name = vObjectStringZValue( ob );
57#if 0 60#if 0
58 event.setSummary( name ); 61 event.setSummary( name );
59#else 62#else
60 event.setDescription( name ); 63 event.setDescription( name );
61#endif 64#endif
62 } 65 }
63 // completed 66 // completed
64 if( ( ob = isAPropertyOf( obj, VCStatusProp )) != 0 ){ 67 if( ( ob = isAPropertyOf( obj, VCStatusProp )) != 0 ){
65 name = vObjectStringZValue( ob ); 68 name = vObjectStringZValue( ob );
66 if( name == "COMPLETED" ){ 69 if( name == "COMPLETED" ){
67 event.setCompleted( true ); 70 event.setCompleted( true );
68 }else{ 71 }else{
69 event.setCompleted( false ); 72 event.setCompleted( false );
70 } 73 }
71 }else 74 }else
72 event.setCompleted( false ); 75 event.setCompleted( false );
73 // priority 76 // priority
74 if ((ob = isAPropertyOf(obj, VCPriorityProp))) { 77 if ((ob = isAPropertyOf(obj, VCPriorityProp))) {
75 name = vObjectStringZValue( ob ); 78 name = vObjectStringZValue( ob );
76 bool ok; 79 bool ok;
77 event.setPriority(name.toInt(&ok) ); 80 event.setPriority(name.toInt(&ok) );
78 } 81 }
79 //due date 82 //due date
80 if((ob = isAPropertyOf(obj, VCDueProp)) ){ 83 if((ob = isAPropertyOf(obj, VCDueProp)) ){
81 event.setHasDueDate( true ); 84 event.setHasDueDate( true );
82 name = vObjectStringZValue( ob ); 85 name = vObjectStringZValue( ob );
83 event.setDueDate( TimeConversion::fromISO8601( name).date() ); 86 event.setDueDate( TimeConversion::fromISO8601( name).date() );
84 } 87 }
@@ -134,109 +137,109 @@ namespace {
134 event.description().local8Bit() ); 137 event.description().local8Bit() );
135#endif 138#endif
136 return task; 139 return task;
137}; 140};
138} 141}
139 142
140namespace Opie { 143namespace Opie {
141OPimTodoAccessVCal::OPimTodoAccessVCal( const QString& path ) 144OPimTodoAccessVCal::OPimTodoAccessVCal( const QString& path )
142 : m_dirty(false), m_file( path ) 145 : m_dirty(false), m_file( path )
143{ 146{
144} 147}
145OPimTodoAccessVCal::~OPimTodoAccessVCal() { 148OPimTodoAccessVCal::~OPimTodoAccessVCal() {
146} 149}
147bool OPimTodoAccessVCal::load() { 150bool OPimTodoAccessVCal::load() {
148 m_map.clear(); 151 m_map.clear();
149 m_dirty = false; 152 m_dirty = false;
150 153
151 VObject* vcal = 0l; 154 VObject* vcal = 0l;
152 vcal = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() ); 155 vcal = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() );
153 if (!vcal ) 156 if (!vcal )
154 return false; 157 return false;
155 158
156 // Iterate over the list 159 // Iterate over the list
157 VObjectIterator it; 160 VObjectIterator it;
158 VObject* vobj; 161 VObject* vobj;
159 162
160 initPropIterator(&it, vcal); 163 initPropIterator(&it, vcal);
161 164
162 while( moreIteration( &it ) ) { 165 while( moreIteration( &it ) ) {
163 vobj = ::nextVObject( &it ); 166 vobj = ::nextVObject( &it );
164 QCString name = ::vObjectName( vobj ); 167 QCString name = ::vObjectName( vobj );
165 if( name == VCTodoProp ){ 168 if( name == VCTodoProp ){
166 OPimTodo to = eventByVObj( vobj ); 169 OPimTodo to = eventByVObj( vobj );
167 m_map.insert( to.uid(), to ); 170 m_map.insert( to.uid(), to );
168 } 171 }
169 } 172 }
170 173
171 // Should I do a delete vcal? 174 // Should I do a delete vcal?
172 175
173 return true; 176 return true;
174} 177}
175bool OPimTodoAccessVCal::reload() { 178bool OPimTodoAccessVCal::reload() {
176 return load(); 179 return load();
177} 180}
178bool OPimTodoAccessVCal::save() { 181bool OPimTodoAccessVCal::save() {
179 if (!m_dirty ) 182 if (!m_dirty )
180 return true; 183 return true;
181 184
182 QFileDirect file( m_file ); 185 QFile file( m_file );
183 if (!file.open(IO_WriteOnly ) ) 186 if (!file.open(IO_WriteOnly ) )
184 return false; 187 return false;
185 188
186 VObject *obj; 189 VObject *obj;
187 obj = newVObject( VCCalProp ); 190 obj = newVObject( VCCalProp );
188 addPropValue( obj, VCVersionProp, "1.0" ); 191 addPropValue( obj, VCVersionProp, "1.0" );
189 VObject *vo; 192 VObject *vo;
190 for(QMap<int, OPimTodo>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){ 193 for(QMap<int, OPimTodo>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){
191 vo = vobjByEvent( it.data() ); 194 vo = vobjByEvent( it.data() );
192 addVObjectProp(obj, vo ); 195 addVObjectProp(obj, vo );
193 } 196 }
194 writeVObject( file.directHandle(), obj ); 197 writeVObject( file.fh, obj ); //FIXME: HACK!!!
195 cleanVObject( obj ); 198 cleanVObject( obj );
196 cleanStrTbl(); 199 cleanStrTbl();
197 200
198 m_dirty = false; 201 m_dirty = false;
199 return true; 202 return true;
200} 203}
201void OPimTodoAccessVCal::clear() { 204void OPimTodoAccessVCal::clear() {
202 m_map.clear(); 205 m_map.clear();
203 m_dirty = true; 206 m_dirty = true;
204} 207}
205bool OPimTodoAccessVCal::add( const OPimTodo& to ) { 208bool OPimTodoAccessVCal::add( const OPimTodo& to ) {
206 m_map.insert( to.uid(), to ); 209 m_map.insert( to.uid(), to );
207 m_dirty = true; 210 m_dirty = true;
208 return true; 211 return true;
209} 212}
210bool OPimTodoAccessVCal::remove( int uid ) { 213bool OPimTodoAccessVCal::remove( int uid ) {
211 m_map.remove( uid ); 214 m_map.remove( uid );
212 m_dirty = true; 215 m_dirty = true;
213 return true; 216 return true;
214} 217}
215void OPimTodoAccessVCal::removeAllCompleted() { 218void OPimTodoAccessVCal::removeAllCompleted() {
216 for ( QMap<int, OPimTodo>::Iterator it = m_map.begin(); it != m_map.end(); ++it ) { 219 for ( QMap<int, OPimTodo>::Iterator it = m_map.begin(); it != m_map.end(); ++it ) {
217 if ( (*it).isCompleted() ) 220 if ( (*it).isCompleted() )
218 m_map.remove( it ); 221 m_map.remove( it );
219 } 222 }
220} 223}
221bool OPimTodoAccessVCal::replace( const OPimTodo& to ) { 224bool OPimTodoAccessVCal::replace( const OPimTodo& to ) {
222 m_map.replace( to.uid(), to ); 225 m_map.replace( to.uid(), to );
223 m_dirty = true; 226 m_dirty = true;
224 return true; 227 return true;
225} 228}
226OPimTodo OPimTodoAccessVCal::find(int uid )const { 229OPimTodo OPimTodoAccessVCal::find(int uid )const {
227 return m_map[uid]; 230 return m_map[uid];
228} 231}
229QArray<int> OPimTodoAccessVCal::sorted( bool, int, int, int ) { 232QArray<int> OPimTodoAccessVCal::sorted( bool, int, int, int ) {
230 QArray<int> ar(0); 233 QArray<int> ar(0);
231 return ar; 234 return ar;
232} 235}
233QArray<int> OPimTodoAccessVCal::allRecords()const { 236QArray<int> OPimTodoAccessVCal::allRecords()const {
234 QArray<int> ar( m_map.count() ); 237 QArray<int> ar( m_map.count() );
235 QMap<int, OPimTodo>::ConstIterator it; 238 QMap<int, OPimTodo>::ConstIterator it;
236 int i = 0; 239 int i = 0;
237 for ( it = m_map.begin(); it != m_map.end(); ++it ) { 240 for ( it = m_map.begin(); it != m_map.end(); ++it ) {
238 ar[i] = it.key(); 241 ar[i] = it.key();
239 i++; 242 i++;
240 } 243 }
241 return ar; 244 return ar;
242} 245}
diff --git a/libopie2/opiepim/private/vobject_p.h b/libopie2/opiepim/private/vobject_p.h
new file mode 100644
index 0000000..3c9d0d3
--- a/dev/null
+++ b/libopie2/opiepim/private/vobject_p.h
@@ -0,0 +1,408 @@
1/***************************************************************************
2(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
3Business Machines Corporation and Siemens Rolm Communications Inc.
4
5For purposes of this license notice, the term Licensors shall mean,
6collectively, Apple Computer, Inc., AT&T Corp., International
7Business Machines Corporation and Siemens Rolm Communications Inc.
8The term Licensor shall mean any of the Licensors.
9
10Subject to acceptance of the following conditions, permission is hereby
11granted by Licensors without the need for written agreement and without
12license or royalty fees, to use, copy, modify and distribute this
13software for any purpose.
14
15The above copyright notice and the following four paragraphs must be
16reproduced in all copies of this software and any software including
17this software.
18
19THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
20ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
21MODIFICATIONS.
22
23IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
24INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
25OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26DAMAGE.
27
28EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
29INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
30IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31PURPOSE.
32
33The software is provided with RESTRICTED RIGHTS. Use, duplication, or
34disclosure by the government are subject to restrictions set forth in
35DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
36
37***************************************************************************/
38
39/*
40
41The vCard/vCalendar C interface is implemented in the set
42of files as follows:
43
44vcc.y, yacc source, and vcc.c, the yacc output you will use
45implements the core parser
46
47vobject.c implements an API that insulates the caller from
48the parser and changes in the vCard/vCalendar BNF
49
50port.h defines compilation environment dependent stuff
51
52vcc.h and vobject.h are header files for their .c counterparts
53
54vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions
55which you may find useful.
56
57test.c is a standalone test driver that exercises some of
58the features of the APIs provided. Invoke test.exe on a
59VCARD/VCALENDAR input text file and you will see the pretty
60print output of the internal representation (this pretty print
61output should give you a good idea of how the internal
62representation looks like -- there is one such output in the
63following too). Also, a file with the .out suffix is generated
64to show that the internal representation can be written back
65in the original text format.
66
67For more information on this API see the readme.txt file
68which accompanied this distribution.
69
70 Also visit:
71
72 http://www.versit.com
73 http://www.ralden.com
74
75*/
76
77// No tr() anywhere in this file
78
79
80#ifndef __VOBJECT_H__
81#define __VOBJECT_H__ 1
82
83#include <qstring.h>
84
85 #define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard"
86 #define vCalendarClipboardFormat"+//ISBN 1-887687-00-9::versit::PDI//vCalendar"
87
88/* The above strings vCardClipboardFormat and vCalendarClipboardFormat
89are globally unique IDs which can be used to generate clipboard format
90ID's as per the requirements of a specific platform. For example, in
91Windows they are used as the parameter in a call to RegisterClipboardFormat.
92For example:
93
94 CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat);
95
96*/
97
98 #define vCardMimeType "text/x-vCard"
99 #define vCalendarMimeType"text/x-vCalendar"
100
101#undef DLLEXPORT
102#include <qtopia/global.h>
103#if defined(QTOPIA_MAKEDLL)
104#define DLLEXPORT(t) __declspec(dllexport) t
105#elif defined(QTOPIA_DLL)
106#define DLLEXPORT(t) __declspec(dllimport) t
107#else
108#define DLLEXPORT(t) t
109#endif
110
111#ifndef FALSE
112 #define FALSE0
113#endif
114#ifndef TRUE
115 #define TRUE1
116#endif
117
118#include <stdlib.h>
119#include <stdio.h>
120
121
122 #define VC7bitProp "7BIT"
123 #define VC8bitProp "8BIT"
124 #define VCAAlarmProp "AALARM"
125 #define VCAdditionalNamesProp"ADDN"
126 #define VCAdrProp "ADR"
127 #define VCAgentProp "AGENT"
128 #define VCAIFFProp "AIFF"
129 #define VCAOLProp "AOL"
130 #define VCAppleLinkProp "APPLELINK"
131 #define VCAttachProp "ATTACH"
132 #define VCAttendeeProp "ATTENDEE"
133 #define VCATTMailProp "ATTMAIL"
134 #define VCAudioContentProp "AUDIOCONTENT"
135 #define VCAVIProp "AVI"
136 #define VCBase64Prop "BASE64"
137 #define VCBBSProp "BBS"
138 #define VCBirthDateProp "BDAY"
139 #define VCBMPProp "BMP"
140 #define VCBodyProp "BODY"
141 #define VCBusinessRoleProp "ROLE"
142 #define VCCalProp "VCALENDAR"
143 #define VCCaptionProp "CAP"
144 #define VCCardProp "VCARD"
145 #define VCCarProp "CAR"
146 #define VCCategoriesProp "CATEGORIES"
147 #define VCCellularProp "CELL"
148 #define VCCGMProp "CGM"
149 #define VCCharSetProp "CHARSET"
150 #define VCCIDProp "CID"
151 #define VCCISProp "CIS"
152 #define VCCityProp "L"
153 #define VCClassProp "CLASS"
154 #define VCCommentProp "NOTE"
155 #define VCCompletedProp "COMPLETED"
156 #define VCContentIDProp "CONTENT-ID"
157 #define VCCountryNameProp "C"
158 #define VCDAlarmProp "DALARM"
159 #define VCDataSizeProp "DATASIZE"
160 #define VCDayLightProp "DAYLIGHT"
161 #define VCDCreatedProp "DCREATED"
162#define VCDeliveryLabelProp "LABEL"
163 #define VCDescriptionProp "DESCRIPTION"
164 #define VCDIBProp "DIB"
165 #define VCDisplayStringProp "DISPLAYSTRING"
166 #define VCDomesticProp "DOM"
167 #define VCDTendProp "DTEND"
168 #define VCDTstartProp "DTSTART"
169 #define VCDueProp "DUE"
170 #define VCEmailAddressProp "EMAIL"
171 #define VCEncodingProp "ENCODING"
172 #define VCEndProp "END"
173 #define VCEventProp "VEVENT"
174 #define VCEWorldProp "EWORLD"
175 #define VCExNumProp "EXNUM"
176 #define VCExpDateProp "EXDATE"
177 #define VCExpectProp "EXPECT"
178 #define VCExtAddressProp "EXT ADD"
179 #define VCFamilyNameProp "F"
180 #define VCFaxProp "FAX"
181 #define VCFullNameProp "FN"
182 #define VCGeoProp "GEO"
183 #define VCGeoLocationProp "GEO"
184 #define VCGIFProp "GIF"
185 #define VCGivenNameProp "G"
186 #define VCGroupingProp "Grouping"
187 #define VCHomeProp "HOME"
188 #define VCIBMMailProp "IBMMail"
189 #define VCInlineProp "INLINE"
190 #define VCInternationalProp "INTL"
191 #define VCInternetProp "INTERNET"
192 #define VCISDNProp "ISDN"
193 #define VCJPEGProp "JPEG"
194 #define VCLanguageProp "LANG"
195 #define VCLastModifiedProp "LAST-MODIFIED"
196 #define VCLastRevisedProp "REV"
197 #define VCLocationProp "LOCATION"
198 #define VCLogoProp "LOGO"
199 #define VCMailerProp "MAILER"
200 #define VCMAlarmProp "MALARM"
201 #define VCMCIMailProp "MCIMAIL"
202 #define VCMessageProp "MSG"
203 #define VCMETProp "MET"
204 #define VCModemProp "MODEM"
205 #define VCMPEG2Prop "MPEG2"
206 #define VCMPEGProp "MPEG"
207 #define VCMSNProp "MSN"
208 #define VCNamePrefixesProp "NPRE"
209 #define VCNameProp "N"
210 #define VCNameSuffixesProp "NSUF"
211 #define VCNoteProp "NOTE"
212 #define VCOrgNameProp "ORGNAME"
213 #define VCOrgProp "ORG"
214 #define VCOrgUnit2Prop "OUN2"
215 #define VCOrgUnit3Prop "OUN3"
216 #define VCOrgUnit4Prop "OUN4"
217 #define VCOrgUnitProp "OUN"
218 #define VCPagerProp "PAGER"
219 #define VCPAlarmProp "PALARM"
220 #define VCParcelProp "PARCEL"
221 #define VCPartProp "PART"
222 #define VCPCMProp "PCM"
223 #define VCPDFProp "PDF"
224 #define VCPGPProp "PGP"
225 #define VCPhotoProp "PHOTO"
226 #define VCPICTProp "PICT"
227 #define VCPMBProp "PMB"
228 #define VCPostalBoxProp "BOX"
229 #define VCPostalCodeProp "PC"
230 #define VCPostalProp "POSTAL"
231 #define VCPowerShareProp "POWERSHARE"
232 #define VCPreferredProp "PREF"
233 #define VCPriorityProp "PRIORITY"
234 #define VCProcedureNameProp "PROCEDURENAME"
235 #define VCProdIdProp "PRODID"
236 #define VCProdigyProp "PRODIGY"
237 #define VCPronunciationProp "SOUND"
238 #define VCPSProp "PS"
239 #define VCPublicKeyProp "KEY"
240 #define VCQPProp "QP"
241 #define VCQuickTimeProp "QTIME"
242 #define VCQuotedPrintableProp"QUOTED-PRINTABLE"
243 #define VCRDateProp "RDATE"
244 #define VCRegionProp "R"
245 #define VCRelatedToProp "RELATED-TO"
246 #define VCRepeatCountProp "REPEATCOUNT"
247 #define VCResourcesProp "RESOURCES"
248 #define VCRNumProp "RNUM"
249 #define VCRoleProp "ROLE"
250 #define VCRRuleProp "RRULE"
251 #define VCRSVPProp "RSVP"
252 #define VCRunTimeProp "RUNTIME"
253 #define VCSequenceProp "SEQUENCE"
254 #define VCSnoozeTimeProp "SNOOZETIME"
255 #define VCStartProp "START"
256 #define VCStatusProp "STATUS"
257 #define VCStreetAddressProp "STREET"
258 #define VCSubTypeProp "SUBTYPE"
259 #define VCSummaryProp "SUMMARY"
260 #define VCTelephoneProp "TEL"
261 #define VCTIFFProp "TIFF"
262 #define VCTimeZoneProp "TZ"
263 #define VCTitleProp "TITLE"
264 #define VCTLXProp "TLX"
265 #define VCTodoProp "VTODO"
266 #define VCTranspProp "TRANSP"
267 #define VCUniqueStringProp "UID"
268 #define VCURLProp "URL"
269 #define VCURLValueProp "URLVAL"
270 #define VCValueProp "VALUE"
271 #define VCVersionProp "VERSION"
272 #define VCVideoProp "VIDEO"
273 #define VCVoiceProp "VOICE"
274 #define VCWAVEProp "WAVE"
275 #define VCWMFProp "WMF"
276 #define VCWorkProp "WORK"
277 #define VCX400Prop "X400"
278 #define VCX509Prop "X509"
279 #define VCXRuleProp "XRULE"
280
281
282typedef struct VObject VObject;
283
284typedef struct VObjectIterator {
285 VObject* start;
286 VObject* next;
287 } VObjectIterator;
288
289extern DLLEXPORT(VObject*) newVObject(const char *id);
290extern DLLEXPORT(void) deleteVObject(VObject *p);
291extern DLLEXPORT(char*) dupStr(const char *s, unsigned int size);
292extern DLLEXPORT(void) deleteStr(const char *p);
293extern DLLEXPORT(void) unUseStr(const char *s);
294
295extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id);
296extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s);
297extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s);
298extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i);
299extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l);
300extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t);
301extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size);
302extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size);
303
304extern DLLEXPORT(const char*) vObjectName(VObject *o);
305extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o);
306extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o);
307extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o);
308extern DLLEXPORT(void*) vObjectAnyValue(VObject *o);
309extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o);
310extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p);
311
312extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p);
313extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id);
314extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id);
315extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v);
316extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size);
317extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size);
318extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g);
319extern DLLEXPORT(void) addList(VObject **o, VObject *p);
320
321extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id);
322
323extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o);
324extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o);
325extern DLLEXPORT(int) moreIteration(VObjectIterator *i);
326extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i);
327
328extern DLLEXPORT(const char*) lookupStr(const char *s);
329extern DLLEXPORT(void) cleanStrTbl();
330
331extern DLLEXPORT(void) cleanVObject(VObject *o);
332extern DLLEXPORT(void) cleanVObjects(VObject *list);
333
334extern DLLEXPORT(const char*) lookupProp(const char* str);
335extern DLLEXPORT(const char*) lookupProp_(const char* str);
336
337extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o);
338extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list);
339
340extern DLLEXPORT(int) vObjectValueType(VObject *o);
341
342/* return type of vObjectValueType: */
343 #define VCVT_NOVALUE0
344 /* if the VObject has no value associated with it. */
345 #define VCVT_STRINGZ1
346 /* if the VObject has value set by setVObjectStringZValue. */
347 #define VCVT_UINT 2
348 /* if the VObject has value set by setVObjectIntegerValue. */
349 #define VCVT_ULONG 3
350 /* if the VObject has value set by setVObjectLongValue. */
351 #define VCVT_RAW 4
352 /* if the VObject has value set by setVObjectAnyValue. */
353 #define VCVT_VOBJECT5
354 /* if the VObject has value set by setVObjectVObjectValue. */
355
356extern DLLEXPORT(const char**) fieldedProp;
357
358/***************************************************
359 * The methods below are implemented in vcc.c (generated from vcc.y )
360 ***************************************************/
361
362/* NOTE regarding printVObject and writeVObject
363
364The functions below are not exported from the DLL because they
365take a FILE* as a parameter, which cannot be passed across a DLL
366interface (at least that is my experience). Instead you can use
367their companion functions which take file names or pointers
368to memory. However, if you are linking this code into
369your build directly then you may find them a more convenient API
370and you can go ahead and use them. If you try to use them with
371the DLL LIB you will get a link error.
372*/
373extern DLLEXPORT(void) writeVObject(FILE *fp, VObject *o);
374
375
376
377typedef void (*MimeErrorHandler)(char *);
378
379extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler);
380
381extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len);
382extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname);
383
384
385/* NOTE regarding Parse_MIME_FromFile
386The function above, Parse_MIME_FromFile, comes in two flavors,
387neither of which is exported from the DLL. Each version takes
388a CFile or FILE* as a parameter, neither of which can be
389passed across a DLL interface (at least that is my experience).
390If you are linking this code into your build directly then
391you may find them a more convenient API that the other flavors
392that take a file name. If you use them with the DLL LIB you
393will get a link error.
394*/
395
396
397#if INCLUDEMFC
398extern DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file);
399#else
400extern DLLEXPORT(VObject*) Parse_MIME_FromFile(FILE *file);
401#endif
402
403extern DLLEXPORT(const char *) vObjectTypeInfo(VObject *o);
404
405
406#endif /* __VOBJECT_H__ */
407
408