summaryrefslogtreecommitdiffabout
path: root/kabc/plugins
Unidiff
Diffstat (limited to 'kabc/plugins') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp242
1 files changed, 129 insertions, 113 deletions
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
index 48b7d91..7069f5d 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
@@ -1,285 +1,301 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#include <unistd.h> 30#include <unistd.h>
31 31
32#include <qdir.h> 32#include <qdir.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qfileinfo.h> 34#include <qfileinfo.h>
35#include <qregexp.h> 35#include <qregexp.h>
36//US #include <qtimer.h> 36//US #include <qtimer.h>
37 37
38#include <kapplication.h> 38#include <kapplication.h>
39#include <kconfig.h> 39#include <kconfig.h>
40#include <kdebug.h> 40#include <kdebug.h>
41#include <klocale.h> 41#include <klocale.h>
42//US #include <ksavefile.h> 42//US #include <ksavefile.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46#include <sl/slzdb.h> 46#include <sl/slzdb.h>
47 47
48#include <libkdepim/ksyncprofile.h> 48#include <libkdepim/ksyncprofile.h>
49 49
50#include "resourcesharpdtmconfig.h" 50#include "resourcesharpdtmconfig.h"
51#include "resourcesharpdtm.h" 51#include "resourcesharpdtm.h"
52 52
53#include "stdaddressbook.h" 53#include "stdaddressbook.h"
54 54
55#include "sharpdtmconverter.h" 55#include "sharpdtmconverter.h"
56//#define ALLOW_LOCKING 56//#define ALLOW_LOCKING
57using namespace KABC; 57using namespace KABC;
58extern "C" 58extern "C"
59{ 59{
60 void *init_microkabc_sharpdtm() 60 void *init_microkabc_sharpdtm()
61 { 61 {
62 return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig>(); 62 return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig>();
63 } 63 }
64} 64}
65 65
66ResourceSharpDTM::ResourceSharpDTM( const KConfig *config ) 66ResourceSharpDTM::ResourceSharpDTM( const KConfig *config )
67 : Resource( config ), mConverter (0) 67 : Resource( config ), mConverter (0)
68{ 68{
69 // we can not choose the filename. Therefore use the default to display 69 // we can not choose the filename. Therefore use the default to display
70 mAccess = 0; 70 mAccess = 0;
71 QString fileName = SlZDataBase::addressbookFileName(); 71 QString fileName = SlZDataBase::addressbookFileName();
72 init( fileName ); 72 init( fileName );
73} 73}
74 74
75ResourceSharpDTM::ResourceSharpDTM( const QString &fileName ) 75ResourceSharpDTM::ResourceSharpDTM( const QString &fileName )
76 : Resource( 0 ) 76 : Resource( 0 )
77{ 77{
78 mAccess = 0; 78 mAccess = 0;
79 init( fileName ); 79 init( fileName );
80} 80}
81 81
82void ResourceSharpDTM::init( const QString &fileName ) 82void ResourceSharpDTM::init( const QString &fileName )
83{ 83{
84 setFileName( fileName ); 84 if (mConverter == 0) {
85 mConverter = new SharpDTMConverter();
86 bool res = mConverter->init();
87 if ( !res )
88 {
89 QString msg("Unable to initialize sharp converter. Most likely a problem with the category file");
90 qDebug(msg);
91 return;
92 }
93 }
94 setFileName( fileName );
85} 95}
86 96
87ResourceSharpDTM::~ResourceSharpDTM() 97ResourceSharpDTM::~ResourceSharpDTM()
88{ 98{
89 if (mConverter != 0) 99 if (mConverter != 0)
90 delete mConverter; 100 delete mConverter;
91 101
92 if(mAccess != 0) 102 if(mAccess != 0)
93 delete mAccess; 103 delete mAccess;
94} 104}
95 105
96void ResourceSharpDTM::writeConfig( KConfig *config ) 106void ResourceSharpDTM::writeConfig( KConfig *config )
97{ 107{
98 Resource::writeConfig( config ); 108 Resource::writeConfig( config );
99} 109}
100 110
101Ticket *ResourceSharpDTM::requestSaveTicket() 111Ticket *ResourceSharpDTM::requestSaveTicket()
102{ 112{
103 113
104 qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1()); 114 qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1());
105 115
106 if ( !addressBook() ) return 0; 116 if ( !addressBook() ) return 0;
107 return createTicket( this ); 117 return createTicket( this );
108} 118}
109 119
110 120
111bool ResourceSharpDTM::doOpen() 121bool ResourceSharpDTM::doOpen()
112{ 122{
113 qDebug("%xResourceSharpDTM::doOpen: %s", this,fileName().latin1()); 123 if (!mConverter)
114
115 if ( ! mAccess ) {
116 // the last parameter in the SlZDataBase constructor means "readonly"
117 mAccess = new SlZDataBase(fileName(),
118 SlZDataBase::addressbookItems(),
119 NULL, false);
120 }
121 if ( !mAccess ) {
122 qDebug("Unable to load file() %s", fileName().latin1());
123 return false; 124 return false;
124 }
125 if (mConverter == 0) {
126 mConverter = new SharpDTMConverter();
127 bool res = mConverter->init();
128 if ( !res )
129 {
130 QString msg("Unable to initialize sharp converter. Most likely a problem with the category file");
131 qDebug(msg);
132 delete mAccess;
133 mAccess = 0;
134 return false;
135 }
136 }
137 return true; 125 return true;
138} 126}
139 127
140void ResourceSharpDTM::doClose() 128void ResourceSharpDTM::doClose()
141{ 129{
142 return; 130 return;
143} 131}
144 132
145bool ResourceSharpDTM::load() 133bool ResourceSharpDTM::load()
146{ 134{
135 if (!mConverter)
136 return false;
137 QString fileN = SlZDataBase::addressbookFileName();
138 if ( ! mAccess ) {
139 mAccess = new SlZDataBase(fileN,
140 SlZDataBase::addressbookItems(),
141 0, false);
142 }
143 if(mAccess == 0)
144 return false;
145
147 qDebug("%xResourceSharpDTM::load: %s",this, fileName().latin1()); 146 qDebug("%xResourceSharpDTM::load: %s",this, fileName().latin1());
148 bool res = false; 147 bool res = false;
149 CardId id; 148 CardId id;
150 for (bool res=mAccess->first(); res == true; res=mAccess->next()) 149 for (bool res=mAccess->first(); res == true; res=mAccess->next())
151 { 150 {
152 id = mAccess->cardId(); 151 id = mAccess->cardId();
153 KABC::Addressee addressee; 152 KABC::Addressee addressee;
154 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 153 res = mConverter->sharpToAddressee( id, mAccess, addressee );
155 if ( !addressee.isEmpty() && res ) 154 if ( !addressee.isEmpty() && res )
156 { 155 {
157 addressee.setResource( this ); 156 addressee.setResource( this );
158 addressBook()->insertAddressee( addressee ); 157 addressBook()->insertAddressee( addressee );
159 } 158 }
160 } 159 }
160 if(mAccess != 0)
161 delete mAccess;
162 mAccess = 0;
163
161 return true; 164 return true;
162} 165}
163 166
164bool ResourceSharpDTM::save( Ticket *ticket ) 167bool ResourceSharpDTM::save( Ticket *ticket )
165{ 168{
166 qDebug("ResourceSharpDTM::save: %s", fileName().latin1()); 169 if (!mConverter)
167 KABC::AddressBook::Iterator it; 170 return false;
168 bool res; 171 QString fileN = SlZDataBase::addressbookFileName();
169 KABC::Addressee::List changedAddressees; 172 if ( ! mAccess ) {
170 typedef QMap<int,QString> AddresseeMap; 173 mAccess = new SlZDataBase(fileN,
171 AddresseeMap map; 174 SlZDataBase::addressbookItems(),
172 CardId id ; 175 0, false);
173 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { 176 }
174 177 if(mAccess == 0)
175 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 178 return false;
176 QString uid = (*it).originalExternalUID(); 179 qDebug("ResourceSharpDTM::save: %s", fileName().latin1());
177 bool res; 180 KABC::AddressBook::Iterator it;
178 if ( uid.isEmpty() ) 181 bool res;
179 id = 0; 182 KABC::Addressee::List changedAddressees;
180 else 183 typedef QMap<int,QString> AddresseeMap;
181 id = uid.toUInt(); 184 AddresseeMap map;
182 KABC::Addressee addressee = (*it); 185 CardId id ;
183 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { 186 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
184 res = mAccess->startEditCard(id); 187
185 if (res == true) 188 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
186 { 189 QString uid = (*it).originalExternalUID();
187 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 190 bool res;
188 if (res == true) 191 if ( uid.isEmpty() )
189 { 192 id = 0;
190 res = mAccess->finishEditCard(&id);; 193 else
191 map.insert(id,(*it).uid()); 194 id = uid.toUInt();
192 if (res == false) 195 KABC::Addressee addressee = (*it);
193 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 196 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) {
197 res = mAccess->startEditCard(id);
198 if (res == true)
199 {
200 res = mConverter->addresseeToSharp( (*it), mAccess, id );
201 if (res == true)
202 {
203 res = mAccess->finishEditCard(&id);;
204 map.insert(id,(*it).uid());
205 if (res == false)
206 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
194 207
195 } 208 }
196 else 209 else
197 { 210 {
198 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 211 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
199 mAccess->cancelEditCard(); 212 mAccess->cancelEditCard();
200 } 213 }
201 } 214 }
202 215
203 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 216 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
204 res = mAccess->deleteCard(&id); 217 res = mAccess->deleteCard(&id);
205 if ( !res ) 218 if ( !res )
206 qDebug("delete error "); 219 qDebug("delete error ");
207 220
208 221
209 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 222 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
210 //changed 223 //changed
211 res = mAccess->startEditCard(id); 224 res = mAccess->startEditCard(id);
212 if (res == true) 225 if (res == true)
213 { 226 {
214 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 227 res = mConverter->addresseeToSharp( (*it), mAccess, id );
215 if (res == true) 228 if (res == true)
216 { 229 {
217 res = mAccess->finishEditCard(&id); 230 res = mAccess->finishEditCard(&id);
218 map.insert(id,(*it).uid()); 231 map.insert(id,(*it).uid());
219 if (res == false) 232 if (res == false)
220 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 233 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
221 } 234 }
222 else 235 else
223 { 236 {
224 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 237 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
225 mAccess->cancelEditCard(); 238 mAccess->cancelEditCard();
226 } 239 }
227 } 240 }
228 } 241 }
229 } 242 }
230 243
231 } 244 }
232 AddresseeMap::Iterator itam; 245 AddresseeMap::Iterator itam;
233 for ( res=mAccess->first(); res == true; res=mAccess->next()) 246 for ( res=mAccess->first(); res == true; res=mAccess->next())
234 { 247 {
235 id = mAccess->cardId(); 248 id = mAccess->cardId();
236 int idint = id; 249 int idint = id;
237 itam = map.find( idint ); 250 itam = map.find( idint );
238 if ( itam != map.end() ) { 251 if ( itam != map.end() ) {
239 KABC::Addressee addressee; 252 KABC::Addressee addressee;
240 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 253 res = mConverter->sharpToAddressee( id, mAccess, addressee );
241 254
242 if ( !addressee.isEmpty() && res ) 255 if ( !addressee.isEmpty() && res )
243 { 256 {
244 addressee.setResource( this ); 257 addressee.setResource( this );
245 addressee.setUid( itam.data() ); 258 addressee.setUid( itam.data() );
246 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 259 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
247 addressBook()->insertAddressee( addressee , false ); 260 addressBook()->insertAddressee( addressee , false );
248 } 261 }
249 } 262 }
250 } 263 }
251 delete ticket; 264 delete ticket;
252 265 if(mAccess != 0)
253 return true; 266 delete mAccess;
267 mAccess = 0;
268 return true;
254} 269}
255 270
256bool ResourceSharpDTM::lock( const QString &lockfileName ) 271bool ResourceSharpDTM::lock( const QString &lockfileName )
257{ 272{
273 return true;
258} 274}
259 275
260void ResourceSharpDTM::unlock( const QString &fileName ) 276void ResourceSharpDTM::unlock( const QString &fileName )
261{ 277{
262 278
263} 279}
264 280
265void ResourceSharpDTM::setFileName( const QString &newFileName ) 281void ResourceSharpDTM::setFileName( const QString &newFileName )
266{ 282{
267 Resource::setFileName( newFileName ); 283 Resource::setFileName( newFileName );
268} 284}
269 285
270void ResourceSharpDTM::fileChanged() 286void ResourceSharpDTM::fileChanged()
271{ 287{
272 288
273} 289}
274 290
275void ResourceSharpDTM::removeAddressee( const Addressee &addr ) 291void ResourceSharpDTM::removeAddressee( const Addressee &addr )
276{ 292{
277} 293}
278 294
279void ResourceSharpDTM::cleanUp() 295void ResourceSharpDTM::cleanUp()
280{ 296{
281 unlock( fileName() ); 297
282} 298}
283 299
284 300
285 301