summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (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
@@ -36,250 +36,266 @@ $Id$
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