summaryrefslogtreecommitdiffabout
path: root/kabc/stdaddressbook.cpp
Unidiff
Diffstat (limited to 'kabc/stdaddressbook.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/stdaddressbook.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/kabc/stdaddressbook.cpp b/kabc/stdaddressbook.cpp
index a14ae20..43d9fde 100644
--- a/kabc/stdaddressbook.cpp
+++ b/kabc/stdaddressbook.cpp
@@ -1,188 +1,209 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
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 <qdir.h> 28#include <qdir.h>
29#include "resource.h" 29#include "resource.h"
30#include <kresources/manager.h> 30#include <kresources/manager.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <klocale.h> 32#include <klocale.h>
33#include <kstaticdeleter.h> 33#include <kstaticdeleter.h>
34#include <kstandarddirs.h> 34#include <kstandarddirs.h>
35 35
36#include "stdaddressbook.h" 36#include "stdaddressbook.h"
37 37
38using namespace KABC; 38using namespace KABC;
39 39
40StdAddressBook *StdAddressBook::mSelf = 0; 40StdAddressBook *StdAddressBook::mSelf = 0;
41bool StdAddressBook::mAutomaticSave = false; 41bool StdAddressBook::mAutomaticSave = false;
42 42
43static KStaticDeleter<StdAddressBook> addressBookDeleter; 43static KStaticDeleter<StdAddressBook> addressBookDeleter;
44 44
45QString StdAddressBook::fileName() 45QString StdAddressBook::fileName()
46{ 46{
47 return locateLocal( "data", "kabc/std.vcf" ); 47 return locateLocal( "data", "kabc/std.vcf" );
48} 48}
49 49
50QString StdAddressBook::directoryName() 50QString StdAddressBook::directoryName()
51{ 51{
52 return locateLocal( "data", "kabc/stdvcf" ); 52 return locateLocal( "data", "kabc/stdvcf" );
53} 53}
54 54
55void StdAddressBook::handleCrash() 55void StdAddressBook::handleCrash()
56{ 56{
57 StdAddressBook::self()->cleanUp(); 57 StdAddressBook::self()->cleanUp();
58} 58}
59StdAddressBook *StdAddressBook::selfNoLoad()
60{
61
62 if ( !mSelf )
63 {
64 QString appdir = StdAddressBook::setTempAppDir();
65// US im am not sure why I have to use the other format here??
66#ifdef KAB_EMBEDDED
67 mSelf = addressBookDeleter.setObject( new StdAddressBook ( QString() ) );
68#else //KAB_EMBEDDED
69 addressBookDeleter.setObject( mSelf, new StdAddressBook( QString() ) );
70#endif //KAB_EMBEDDED
71 KStandardDirs::setAppDir( appdir );
72 }
73
74 return mSelf;
75}
59 76
60StdAddressBook *StdAddressBook::self() 77StdAddressBook *StdAddressBook::self()
61{ 78{
62 79
63 if ( !mSelf ) 80 if ( !mSelf )
64 { 81 {
65 QString appdir = StdAddressBook::setTempAppDir(); 82 QString appdir = StdAddressBook::setTempAppDir();
66// US im am not sure why I have to use the other format here?? 83// US im am not sure why I have to use the other format here??
67#ifdef KAB_EMBEDDED 84#ifdef KAB_EMBEDDED
68 mSelf = addressBookDeleter.setObject( new StdAddressBook ); 85 mSelf = addressBookDeleter.setObject( new StdAddressBook );
69#else //KAB_EMBEDDED 86#else //KAB_EMBEDDED
70 addressBookDeleter.setObject( mSelf, new StdAddressBook ); 87 addressBookDeleter.setObject( mSelf, new StdAddressBook );
71#endif //KAB_EMBEDDED 88#endif //KAB_EMBEDDED
72 KStandardDirs::setAppDir( appdir ); 89 KStandardDirs::setAppDir( appdir );
73 } 90 }
74 91
75 return mSelf; 92 return mSelf;
76} 93}
77 94
78QString StdAddressBook::setTempAppDir() 95QString StdAddressBook::setTempAppDir()
79{ 96{
80 QString appDIR = KStandardDirs::appDir(); 97 QString appDIR = KStandardDirs::appDir();
81#ifdef DESKTOP_VERSION 98#ifdef DESKTOP_VERSION
82 QString appdir = QDir::homeDirPath(); 99 QString appdir = QDir::homeDirPath();
83 if ( appdir.right(1) == "\\" || appdir.right(1) == "/" ) 100 if ( appdir.right(1) == "\\" || appdir.right(1) == "/" )
84 appdir += "kaddressbook/"; 101 appdir += "kaddressbook/";
85 else 102 else
86 appdir += "/kaddressbook/"; 103 appdir += "/kaddressbook/";
87 KStandardDirs::setAppDir( QDir::convertSeparators( appdir )); 104 KStandardDirs::setAppDir( QDir::convertSeparators( appdir ));
88#else 105#else
89 QString appdir = QDir::homeDirPath() + "/kdepim/apps/kaddressbook"; 106 QString appdir = QDir::homeDirPath() + "/kdepim/apps/kaddressbook";
90 107
91 KStandardDirs::setAppDir( appdir ); 108 KStandardDirs::setAppDir( appdir );
92#endif 109#endif
93 110
94 return appDIR; 111 return appDIR;
95} 112}
96StdAddressBook *StdAddressBook::self( bool onlyFastResources ) 113StdAddressBook *StdAddressBook::self( bool onlyFastResources )
97{ 114{
98 115
99 if ( !mSelf ) 116 if ( !mSelf )
100 { 117 {
101 QString appdir =StdAddressBook::setTempAppDir(); 118 QString appdir =StdAddressBook::setTempAppDir();
102#ifdef KAB_EMBEDDED 119#ifdef KAB_EMBEDDED
103 mSelf = addressBookDeleter.setObject( new StdAddressBook( onlyFastResources ) ); 120 mSelf = addressBookDeleter.setObject( new StdAddressBook( onlyFastResources ) );
104#else //KAB_EMBEDDED 121#else //KAB_EMBEDDED
105 addressBookDeleter.setObject( mSelf, new StdAddressBook( onlyFastResources ) ); 122 addressBookDeleter.setObject( mSelf, new StdAddressBook( onlyFastResources ) );
106#endif //KAB_EMBEDDED 123#endif //KAB_EMBEDDED
107 KStandardDirs::setAppDir( appdir ); 124 KStandardDirs::setAppDir( appdir );
108 } 125 }
109 return mSelf; 126 return mSelf;
110} 127}
128StdAddressBook::StdAddressBook( QString )
129 : AddressBook( "kabcrc" )
130{
131
132}
111 133
112StdAddressBook::StdAddressBook() 134StdAddressBook::StdAddressBook()
113 : AddressBook( "kabcrc" ) 135 : AddressBook( "kabcrc" )
114{ 136{
115 137
116 //init( false ); 138 init( false );
117} 139}
118 140
119StdAddressBook::StdAddressBook( bool onlyFastResources ) 141StdAddressBook::StdAddressBook( bool onlyFastResources )
120 : AddressBook( "kabcrc" ) 142 : AddressBook( "kabcrc" )
121{ 143{
122 144
123 if ( onlyFastResources ) 145 init( onlyFastResources );
124 init( onlyFastResources );
125} 146}
126 147
127StdAddressBook::~StdAddressBook() 148StdAddressBook::~StdAddressBook()
128{ 149{
129 if ( mAutomaticSave ) 150 if ( mAutomaticSave )
130 save(); 151 save();
131} 152}
132 153
133void StdAddressBook::init( bool ) 154void StdAddressBook::init( bool )
134{ 155{
135 KRES::Manager<Resource> *manager = resourceManager(); 156 KRES::Manager<Resource> *manager = resourceManager();
136 KRES::Manager<Resource>::ActiveIterator it; 157 KRES::Manager<Resource>::ActiveIterator it;
137 158
138 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 159 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
139 (*it)->setAddressBook( this ); 160 (*it)->setAddressBook( this );
140 if ( !(*it)->open() ) 161 if ( !(*it)->open() )
141 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) ); 162 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) );
142 } 163 }
143 164
144 Resource *res = standardResource(); 165 Resource *res = standardResource();
145 if ( !res ) { 166 if ( !res ) {
146 res = manager->createResource( "file" ); 167 res = manager->createResource( "file" );
147 if ( res ) 168 if ( res )
148 { 169 {
149 addResource( res ); 170 addResource( res );
150 } 171 }
151 else 172 else
152 qDebug(" No resource available!!!"); 173 qDebug(" No resource available!!!");
153 } 174 }
154 175
155 setStandardResource( res ); 176 setStandardResource( res );
156 manager->writeConfig(); 177 manager->writeConfig();
157 178
158 load(); 179 load();
159} 180}
160 181
161bool StdAddressBook::save() 182bool StdAddressBook::save()
162{ 183{
163 kdDebug(5700) << "StdAddressBook::save()" << endl; 184 kdDebug(5700) << "StdAddressBook::save()" << endl;
164 185
165 bool ok = true; 186 bool ok = true;
166 AddressBook *ab = self(); 187 AddressBook *ab = self();
167 188
168 ab->deleteRemovedAddressees(); 189 ab->deleteRemovedAddressees();
169 Iterator ait; 190 Iterator ait;
170 for ( ait = ab->begin(); ait != ab->end(); ++ait ) { 191 for ( ait = ab->begin(); ait != ab->end(); ++ait ) {
171 if ( !(*ait).IDStr().isEmpty() ) { 192 if ( !(*ait).IDStr().isEmpty() ) {
172 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() ); 193 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() );
173 } 194 }
174 } 195 }
175 KRES::Manager<Resource>::ActiveIterator it; 196 KRES::Manager<Resource>::ActiveIterator it;
176 KRES::Manager<Resource> *manager = ab->resourceManager(); 197 KRES::Manager<Resource> *manager = ab->resourceManager();
177 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 198 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
178 if ( !(*it)->readOnly() && (*it)->isOpen() ) { 199 if ( !(*it)->readOnly() && (*it)->isOpen() ) {
179 Ticket *ticket = ab->requestSaveTicket( *it ); 200 Ticket *ticket = ab->requestSaveTicket( *it );
180// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); 201// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() );
181 if ( !ticket ) { 202 if ( !ticket ) {
182 ab->error( i18n( "Unable to save to resource '%1'. It is locked." ) 203 ab->error( i18n( "Unable to save to resource '%1'. It is locked." )
183 .arg( (*it)->resourceName() ) ); 204 .arg( (*it)->resourceName() ) );
184 return false; 205 return false;
185 } 206 }
186 207
187 if ( !ab->save( ticket ) ) 208 if ( !ab->save( ticket ) )
188 ok = false; 209 ok = false;