summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt5
-rw-r--r--kabc/plugins/dir/resourcedir.cpp7
-rw-r--r--kabc/plugins/file/resourcefile.cpp7
-rw-r--r--kabc/plugins/ldap/resourceldap.cpp7
-rwxr-xr-xwinbuildall.bat3
5 files changed, 28 insertions, 1 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index a895bb0..210b135 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,41 +1,46 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.2.2 ************ 3********** VERSION 2.2.2 ************
4 4
5KO/Pi:
6Fixed a problem with the sort order of last modified date in list view.
7KA/Pi:
8Fixed a resource config read problem on windows.
9
5 10
6********** VERSION 2.2.1 ************ 11********** VERSION 2.2.1 ************
7 12
8KO/Pi: 13KO/Pi:
9Fixed a problem displaying very long allday events in agenda view in single day mode. 14Fixed a problem displaying very long allday events in agenda view in single day mode.
10Fixed a problem with the default settings for new todos. 15Fixed a problem with the default settings for new todos.
11Added an error message dialog if saving of calendar files is not possible. 16Added an error message dialog if saving of calendar files is not possible.
12Made it impossible to close KO/Pi if saving fails. 17Made it impossible to close KO/Pi if saving fails.
13Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick. 18Fixed a problem adding calendars on windows such that these calendars can be used on the memory stick.
14Added config options for conflict detection. 19Added config options for conflict detection.
15 20
16KA/Pi: 21KA/Pi:
17Added a config option to turn on asking before a contact is deleted. 22Added a config option to turn on asking before a contact is deleted.
18Fixed a problem with the default view and view selection at startup. 23Fixed a problem with the default view and view selection at startup.
19Formatted name is now set on import, if formatted name is empty. 24Formatted name is now set on import, if formatted name is empty.
20Fixed a problem of displaying images in the contact details view: 25Fixed a problem of displaying images in the contact details view:
21Now the wid/hei ratio is not changed. 26Now the wid/hei ratio is not changed.
22I a picture is larger than 128 pixels in wid or hei it is downscaled to 27I a picture is larger than 128 pixels in wid or hei it is downscaled to
23max 128 pixels wid/hei. 28max 128 pixels wid/hei.
24 29
25********** VERSION 2.2.0 ************ 30********** VERSION 2.2.0 ************
26 31
27New stable release! 32New stable release!
28Fixed some minor usability problems. 33Fixed some minor usability problems.
29Added writing of next alarm to a file for usage on pdaXrom. 34Added writing of next alarm to a file for usage on pdaXrom.
30 35
31 36
32************************************* 37*************************************
33 38
34You can find the complete changelog 39You can find the complete changelog
35from version 1.7.7 to 2.2.0 40from version 1.7.7 to 2.2.0
36in the source package or on 41in the source package or on
37 42
38http://www.pi-sync.net/html/changelog.html 43http://www.pi-sync.net/html/changelog.html
39 44
40 45
41 46
diff --git a/kabc/plugins/dir/resourcedir.cpp b/kabc/plugins/dir/resourcedir.cpp
index e2b7b08..c61664b 100644
--- a/kabc/plugins/dir/resourcedir.cpp
+++ b/kabc/plugins/dir/resourcedir.cpp
@@ -1,216 +1,223 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@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 28
29#include <sys/types.h> 29#include <sys/types.h>
30#include <sys/stat.h> 30#include <sys/stat.h>
31#ifndef _WIN32_ 31#ifndef _WIN32_
32#include <unistd.h> 32#include <unistd.h>
33#endif 33#endif
34 34
35#include <qregexp.h> 35#include <qregexp.h>
36#include <qtimer.h> 36#include <qtimer.h>
37#include <qwidget.h> 37#include <qwidget.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42//US #include <kgenericfactory.h> 42//US #include <kgenericfactory.h>
43#include <kglobal.h> 43#include <kglobal.h>
44#include <klocale.h> 44#include <klocale.h>
45#include <kstandarddirs.h> 45#include <kstandarddirs.h>
46#include <kurlrequester.h> 46#include <kurlrequester.h>
47#include <kmessagebox.h> 47#include <kmessagebox.h>
48 48
49#include "addressbook.h" 49#include "addressbook.h"
50 50
51#include "formatfactory.h" 51#include "formatfactory.h"
52 52
53#include "resourcedirconfig.h" 53#include "resourcedirconfig.h"
54#include "stdaddressbook.h" 54#include "stdaddressbook.h"
55 55
56//US 56//US
57#include <qdir.h> 57#include <qdir.h>
58 58
59#define NO_DIRWATCH 59#define NO_DIRWATCH
60#include "resourcedir.h" 60#include "resourcedir.h"
61 61
62//#define ALLOW_LOCKING 62//#define ALLOW_LOCKING
63 63
64using namespace KABC; 64using namespace KABC;
65 65
66extern "C" 66extern "C"
67#ifdef _WIN32_ 67#ifdef _WIN32_
68__declspec(dllexport) 68__declspec(dllexport)
69#else 69#else
70{ 70{
71#endif 71#endif
72 72
73//US void *init_kabc_dir() 73//US void *init_kabc_dir()
74 void *init_microkabc_dir() 74 void *init_microkabc_dir()
75 { 75 {
76 return new KRES::PluginFactory<ResourceDir,ResourceDirConfig>(); 76 return new KRES::PluginFactory<ResourceDir,ResourceDirConfig>();
77 } 77 }
78#ifndef _WIN32_ 78#ifndef _WIN32_
79} 79}
80#endif 80#endif
81 81
82ResourceDir::ResourceDir( const KConfig *config ) 82ResourceDir::ResourceDir( const KConfig *config )
83 : Resource( config ) 83 : Resource( config )
84{ 84{
85 QString path; 85 QString path;
86 86
87 KConfig *cfg = (KConfig *)config; 87 KConfig *cfg = (KConfig *)config;
88 if ( cfg ) { 88 if ( cfg ) {
89#ifdef _WIN32_
90 // we use plugins on win32. the group is stored in a static variable
91 // such that group info not available on win32 plugins
92 // to fix that, it would be a looooot of work
93 if ( !cfg->tempGroup().isEmpty() )
94 cfg->setGroup( cfg->tempGroup() );
95#endif
89//US path = config->readEntry( "FilePath" ); 96//US path = config->readEntry( "FilePath" );
90 path = cfg->readEntry( "FilePath", StdAddressBook::directoryName() ); 97 path = cfg->readEntry( "FilePath", StdAddressBook::directoryName() );
91//US mFormatName = config->readEntry( "FileFormat" ); 98//US mFormatName = config->readEntry( "FileFormat" );
92 mFormatName = cfg->readEntry( "FileFormat", "vcard" ); 99 mFormatName = cfg->readEntry( "FileFormat", "vcard" );
93 } else { 100 } else {
94 path = StdAddressBook::directoryName(); 101 path = StdAddressBook::directoryName();
95 mFormatName = "vcard"; 102 mFormatName = "vcard";
96 } 103 }
97 104
98 105
99 FormatFactory *factory = FormatFactory::self(); 106 FormatFactory *factory = FormatFactory::self();
100 mFormat = factory->format( mFormatName ); 107 mFormat = factory->format( mFormatName );
101 108
102 if ( !mFormat ) { 109 if ( !mFormat ) {
103 mFormatName = "vcard"; 110 mFormatName = "vcard";
104 mFormat = factory->format( mFormatName ); 111 mFormat = factory->format( mFormatName );
105 } 112 }
106 113
107/*US 114/*US
108//US qDebug("ResourceDir::ResourceDir initialized with format %s ", mFormatName.latin1()); 115//US qDebug("ResourceDir::ResourceDir initialized with format %s ", mFormatName.latin1());
109 if (mFormatName == "vcard") 116 if (mFormatName == "vcard")
110 mFormat = new VCardFormatPlugin2(); 117 mFormat = new VCardFormatPlugin2();
111 else if (mFormatName == "binary") 118 else if (mFormatName == "binary")
112 mFormat = new BinaryFormat(); 119 mFormat = new BinaryFormat();
113 else 120 else
114 qDebug("ResourceFile::init format unknown !!! %s ", mFormatName.latin1()); 121 qDebug("ResourceFile::init format unknown !!! %s ", mFormatName.latin1());
115*/ 122*/
116#ifndef NO_DIRWATCH 123#ifndef NO_DIRWATCH
117 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( pathChanged() ) ); 124 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( pathChanged() ) );
118 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( pathChanged() ) ); 125 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( pathChanged() ) );
119 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( pathChanged() ) ); 126 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( pathChanged() ) );
120#endif 127#endif
121 setPath( path ); 128 setPath( path );
122} 129}
123 130
124ResourceDir::~ResourceDir() 131ResourceDir::~ResourceDir()
125{ 132{
126 delete mFormat; 133 delete mFormat;
127 mFormat = 0; 134 mFormat = 0;
128} 135}
129 136
130void ResourceDir::writeConfig( KConfig *config ) 137void ResourceDir::writeConfig( KConfig *config )
131{ 138{
132 config->setGroup( "Resource_" + identifier() ); 139 config->setGroup( "Resource_" + identifier() );
133 Resource::writeConfig( config ); 140 Resource::writeConfig( config );
134 141
135 config->writeEntry( "FilePath", mPath ); 142 config->writeEntry( "FilePath", mPath );
136 config->writeEntry( "FileFormat", mFormatName ); 143 config->writeEntry( "FileFormat", mFormatName );
137} 144}
138 145
139Ticket *ResourceDir::requestSaveTicket() 146Ticket *ResourceDir::requestSaveTicket()
140{ 147{
141 148
142 149
143 if ( !addressBook() ) return 0; 150 if ( !addressBook() ) return 0;
144#ifdef ALLOW_LOCKING 151#ifdef ALLOW_LOCKING
145 if ( !lock( mPath ) ) { 152 if ( !lock( mPath ) ) {
146 153
147 return 0; 154 return 0;
148 } 155 }
149#endif 156#endif
150 return createTicket( this ); 157 return createTicket( this );
151 158
152} 159}
153 160
154 161
155bool ResourceDir::doOpen() 162bool ResourceDir::doOpen()
156{ 163{
157 QDir dir( mPath ); 164 QDir dir( mPath );
158 if ( !dir.exists() ) { // no directory available 165 if ( !dir.exists() ) { // no directory available
159 return dir.mkdir( dir.path() ); 166 return dir.mkdir( dir.path() );
160 } else { 167 } else {
161 QString testName = dir.entryList( QDir::Files )[0]; 168 QString testName = dir.entryList( QDir::Files )[0];
162 if ( testName.isNull() || testName.isEmpty() ) // no file in directory 169 if ( testName.isNull() || testName.isEmpty() ) // no file in directory
163 return true; 170 return true;
164 171
165 QFile file( mPath + "/" + testName ); 172 QFile file( mPath + "/" + testName );
166 if ( file.open( IO_ReadOnly ) ) 173 if ( file.open( IO_ReadOnly ) )
167 return true; 174 return true;
168 175
169 if ( file.size() == 0 ) 176 if ( file.size() == 0 )
170 return true; 177 return true;
171 178
172 bool ok = mFormat->checkFormat( &file ); 179 bool ok = mFormat->checkFormat( &file );
173 file.close(); 180 file.close();
174 return ok; 181 return ok;
175 } 182 }
176} 183}
177 184
178void ResourceDir::doClose() 185void ResourceDir::doClose()
179{ 186{
180} 187}
181 188
182bool ResourceDir::load() 189bool ResourceDir::load()
183{ 190{
184 QDir dir( mPath ); 191 QDir dir( mPath );
185 QStringList files = dir.entryList( QDir::Files ); 192 QStringList files = dir.entryList( QDir::Files );
186 193
187 QStringList::Iterator it; 194 QStringList::Iterator it;
188 bool ok = true; 195 bool ok = true;
189 for ( it = files.begin(); it != files.end(); ++it ) { 196 for ( it = files.begin(); it != files.end(); ++it ) {
190 QFile file( mPath + "/" + (*it) ); 197 QFile file( mPath + "/" + (*it) );
191 198
192 if ( !file.open( IO_ReadOnly ) ) { 199 if ( !file.open( IO_ReadOnly ) ) {
193 addressBook()->error( i18n( "Unable to open file '%1' for reading" ).arg( file.name() ) ); 200 addressBook()->error( i18n( "Unable to open file '%1' for reading" ).arg( file.name() ) );
194 ok = false; 201 ok = false;
195 continue; 202 continue;
196 } 203 }
197 204
198 if ( !mFormat->loadAll( addressBook(), this, &file ) ) 205 if ( !mFormat->loadAll( addressBook(), this, &file ) )
199 ok = false; 206 ok = false;
200 207
201 file.close(); 208 file.close();
202 } 209 }
203 210
204 return ok; 211 return ok;
205} 212}
206 213
207bool ResourceDir::save( Ticket *ticket ) 214bool ResourceDir::save( Ticket *ticket )
208{ 215{
209 AddressBook::Iterator it; 216 AddressBook::Iterator it;
210 bool ok = true; 217 bool ok = true;
211#ifndef NO_DIRWATCH 218#ifndef NO_DIRWATCH
212 mDirWatch.stopScan(); 219 mDirWatch.stopScan();
213#endif 220#endif
214 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { 221 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
215 if ( (*it).resource() != this || !(*it).changed() ) 222 if ( (*it).resource() != this || !(*it).changed() )
216 continue; 223 continue;
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp
index c89939d..dad4571 100644
--- a/kabc/plugins/file/resourcefile.cpp
+++ b/kabc/plugins/file/resourcefile.cpp
@@ -1,213 +1,220 @@
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 <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#ifndef _WIN32_ 30#ifndef _WIN32_
31#include <unistd.h> 31#include <unistd.h>
32#endif 32#endif
33 33
34#include <qfile.h> 34#include <qfile.h>
35#include <qfileinfo.h> 35#include <qfileinfo.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qtimer.h> 37#include <qtimer.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <klocale.h> 42#include <klocale.h>
43//US #include <ksavefile.h> 43//US #include <ksavefile.h>
44#include <kstandarddirs.h> 44#include <kstandarddirs.h>
45#include <kmessagebox.h> 45#include <kmessagebox.h>
46#include <kglobalsettings.h> 46#include <kglobalsettings.h>
47 47
48#include "formatfactory.h" 48#include "formatfactory.h"
49 49
50#include "resource.h" 50#include "resource.h"
51#include "resourcefileconfig.h" 51#include "resourcefileconfig.h"
52#include "stdaddressbook.h" 52#include "stdaddressbook.h"
53#define NO_DIRWATCH 53#define NO_DIRWATCH
54#include "resourcefile.h" 54#include "resourcefile.h"
55 55
56//#define ALLOW_LOCKING 56//#define ALLOW_LOCKING
57 57
58 58
59using namespace KABC; 59using namespace KABC;
60 60
61extern "C" 61extern "C"
62#ifdef _WIN32_ 62#ifdef _WIN32_
63__declspec(dllexport) 63__declspec(dllexport)
64#else 64#else
65{ 65{
66#endif 66#endif
67 67
68//US void *init_kabc_file() 68//US void *init_kabc_file()
69 void *init_microkabc_file() 69 void *init_microkabc_file()
70 { 70 {
71 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>(); 71 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>();
72 } 72 }
73#ifndef _WIN32_ 73#ifndef _WIN32_
74} 74}
75#endif 75#endif
76 76
77ResourceFile::ResourceFile( const KConfig *config ) 77ResourceFile::ResourceFile( const KConfig *config )
78 : Resource( config ) , mFormat( 0 ) 78 : Resource( config ) , mFormat( 0 )
79{ 79{
80 QString fileName, formatName, default_fileName; 80 QString fileName, formatName, default_fileName;
81 81
82 default_fileName = StdAddressBook::fileName(); 82 default_fileName = StdAddressBook::fileName();
83 mLastBackupDate = -1; 83 mLastBackupDate = -1;
84 KConfig *cfg = (KConfig *)config; 84 KConfig *cfg = (KConfig *)config;
85 if ( cfg ) { 85 if ( cfg ) {
86#ifdef _WIN32_
87 // we use plugins on win32. the group is stored in a static variable
88 // such that group info not available on win32 plugins
89 // to fix that, it would be a looooot of work
90 if ( !cfg->tempGroup().isEmpty() )
91 cfg->setGroup( cfg->tempGroup() );
92#endif
86 fileName = cfg->readEntry( "FileName", default_fileName ); 93 fileName = cfg->readEntry( "FileName", default_fileName );
87 formatName = cfg->readEntry( "FileFormat", "vcard" ); 94 formatName = cfg->readEntry( "FileFormat", "vcard" );
88 mFamily = cfg->readEntry( "ResourceName", "std" ); 95 mFamily = cfg->readEntry( "ResourceName", "std" );
89 mLastBackupDate = cfg->readNumEntry( "LastBackupDate", 0 ); 96 mLastBackupDate = cfg->readNumEntry( "LastBackupDate", 0 );
90 } else { 97 } else {
91 fileName = default_fileName; 98 fileName = default_fileName;
92 formatName = "vcard"; 99 formatName = "vcard";
93 } 100 }
94 101
95 init( fileName, formatName ); 102 init( fileName, formatName );
96} 103}
97 104
98ResourceFile::ResourceFile( const QString &fileName , 105ResourceFile::ResourceFile( const QString &fileName ,
99 const QString &formatName ) 106 const QString &formatName )
100 : Resource( 0 ) 107 : Resource( 0 )
101{ 108{
102// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1()); 109// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
103 110
104 111
105 mLastBackupDate = -1; 112 mLastBackupDate = -1;
106 init( fileName, formatName ); 113 init( fileName, formatName );
107} 114}
108 115
109void ResourceFile::init( const QString &fileName, const QString &formatName ) 116void ResourceFile::init( const QString &fileName, const QString &formatName )
110{ 117{
111 mFormatName = formatName; 118 mFormatName = formatName;
112 119
113 FormatFactory *factory = FormatFactory::self(); 120 FormatFactory *factory = FormatFactory::self();
114 mFormat = factory->format( mFormatName ); 121 mFormat = factory->format( mFormatName );
115 122
116 if ( !mFormat ) { 123 if ( !mFormat ) {
117 mFormatName = "vcard"; 124 mFormatName = "vcard";
118 mFormat = factory->format( mFormatName ); 125 mFormat = factory->format( mFormatName );
119 } 126 }
120 127
121#ifndef NO_DIRWATCH 128#ifndef NO_DIRWATCH
122 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 129 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
123 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 130 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
124 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 131 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
125#endif 132#endif
126 133
127 QString localKdeDir; 134 QString localKdeDir;
128 localKdeDir = readEnvPath("LOCALMICROKDEHOME"); 135 localKdeDir = readEnvPath("LOCALMICROKDEHOME");
129 if ( ! localKdeDir.isEmpty() ) { 136 if ( ! localKdeDir.isEmpty() ) {
130 qDebug("LOCALMICROKDEHOME is set to: %s",localKdeDir.latin1() ); 137 qDebug("LOCALMICROKDEHOME is set to: %s",localKdeDir.latin1() );
131 QFileInfo fi ( fileName ); 138 QFileInfo fi ( fileName );
132 QString localname = localKdeDir + "/apps/kabc/" + fi.fileName (); 139 QString localname = localKdeDir + "/apps/kabc/" + fi.fileName ();
133 QFileInfo fi2 ( localname ); 140 QFileInfo fi2 ( localname );
134 if ( ! fi2.exists() || mFamily == "sync_res" ) { 141 if ( ! fi2.exists() || mFamily == "sync_res" ) {
135 if ( fi.exists() && mFamily == "sync_res") { 142 if ( fi.exists() && mFamily == "sync_res") {
136 qDebug("LOCAL mode SYNC mode using absolute file path "); 143 qDebug("LOCAL mode SYNC mode using absolute file path ");
137 setFileName( fileName ); 144 setFileName( fileName );
138 return; 145 return;
139 } else { 146 } else {
140 KMessageBox::error(0,i18n("Addressbook resource file not found:\n '%1'.\nIn LOCAL mode only resource files in\n'%2'\nare supported.\n(i.e. in the dir ./apps/kabc/ relative to the kapi(.exe) binary.)\n\nIf you are starting KA/Pi for the very first time\nyou will get this error message as well.\nIt will create the missing file automatically for you.").arg(localname).arg(localKdeDir+"/apps/kabc/") ); 147 KMessageBox::error(0,i18n("Addressbook resource file not found:\n '%1'.\nIn LOCAL mode only resource files in\n'%2'\nare supported.\n(i.e. in the dir ./apps/kabc/ relative to the kapi(.exe) binary.)\n\nIf you are starting KA/Pi for the very first time\nyou will get this error message as well.\nIt will create the missing file automatically for you.").arg(localname).arg(localKdeDir+"/apps/kabc/") );
141 setFileName( localname ); 148 setFileName( localname );
142 return; 149 return;
143 } 150 }
144 151
145 } else { 152 } else {
146 qDebug("Local resource file found. Changing filename to: %s",localname.latin1() ); 153 qDebug("Local resource file found. Changing filename to: %s",localname.latin1() );
147 setFileName( localname ); 154 setFileName( localname );
148 return; 155 return;
149 } 156 }
150 157
151 } 158 }
152 setFileName( fileName ); 159 setFileName( fileName );
153} 160}
154 161
155ResourceFile::~ResourceFile() 162ResourceFile::~ResourceFile()
156{ 163{
157 delete mFormat; 164 delete mFormat;
158 mFormat = 0; 165 mFormat = 0;
159} 166}
160 167
161void ResourceFile::writeConfig( KConfig *config ) 168void ResourceFile::writeConfig( KConfig *config )
162{ 169{
163 170
164 config->setGroup( "Resource_" + identifier() ); 171 config->setGroup( "Resource_" + identifier() );
165 Resource::writeConfig( config ); 172 Resource::writeConfig( config );
166 173
167 config->writeEntry( "FileName", fileName() ); 174 config->writeEntry( "FileName", fileName() );
168 config->writeEntry( "FileFormat", mFormatName ); 175 config->writeEntry( "FileFormat", mFormatName );
169 176
170// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1()); 177// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
171 178
172} 179}
173 180
174Ticket *ResourceFile::requestSaveTicket() 181Ticket *ResourceFile::requestSaveTicket()
175{ 182{
176 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl; 183 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl;
177 184
178 if ( !addressBook() ) return 0; 185 if ( !addressBook() ) return 0;
179 186
180#ifdef ALLOW_LOCKING 187#ifdef ALLOW_LOCKING
181 if ( !lock( mFileName ) ) { 188 if ( !lock( mFileName ) ) {
182 qDebug("unablt to lock file "); 189 qDebug("unablt to lock file ");
183 return 0; 190 return 0;
184 } 191 }
185#endif 192#endif
186 return createTicket( this ); 193 return createTicket( this );
187} 194}
188 195
189 196
190bool ResourceFile::doOpen() 197bool ResourceFile::doOpen()
191{ 198{
192 QFile file( fileName() ); 199 QFile file( fileName() );
193 qDebug("ResourceFile::openfile %s ", fileName().latin1()); 200 qDebug("ResourceFile::openfile %s ", fileName().latin1());
194 201
195 if ( !file.exists() ) { 202 if ( !file.exists() ) {
196 // try to create the file 203 // try to create the file
197 bool ok = file.open( IO_WriteOnly ); 204 bool ok = file.open( IO_WriteOnly );
198 if ( ok ) 205 if ( ok )
199 file.close(); 206 file.close();
200 207
201 return ok; 208 return ok;
202 } else { 209 } else {
203 if ( !file.open( IO_ReadWrite ) ) 210 if ( !file.open( IO_ReadWrite ) )
204 return false; 211 return false;
205 212
206 if ( file.size() < 10 ) { 213 if ( file.size() < 10 ) {
207 file.close(); 214 file.close();
208 return true; 215 return true;
209 } 216 }
210 217
211 bool ok = mFormat->checkFormat( &file ); 218 bool ok = mFormat->checkFormat( &file );
212 file.close(); 219 file.close();
213 220
diff --git a/kabc/plugins/ldap/resourceldap.cpp b/kabc/plugins/ldap/resourceldap.cpp
index 55c43af..c3097de 100644
--- a/kabc/plugins/ldap/resourceldap.cpp
+++ b/kabc/plugins/ldap/resourceldap.cpp
@@ -1,186 +1,193 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@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 <kdebug.h> 28#include <kdebug.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klineedit.h> 30#include <klineedit.h>
31#include <klocale.h> 31#include <klocale.h>
32#include <kconfig.h> 32#include <kconfig.h>
33#include <kstringhandler.h> 33#include <kstringhandler.h>
34 34
35#include <stdlib.h> 35#include <stdlib.h>
36 36
37#include "resourceldap.h" 37#include "resourceldap.h"
38#include "resourceldapconfig.h" 38#include "resourceldapconfig.h"
39 39
40using namespace KABC; 40using namespace KABC;
41 41
42extern "C" 42extern "C"
43{ 43{
44//US void *init_kabc_ldap() 44//US void *init_kabc_ldap()
45 void *init_microkabc_ldap() 45 void *init_microkabc_ldap()
46 { 46 {
47 return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig>(); 47 return new KRES::PluginFactory<ResourceLDAP,ResourceLDAPConfig>();
48 } 48 }
49} 49}
50 50
51void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value ); 51void addModOp( LDAPMod ***pmods, const QString &attr, const QString &value );
52 52
53 53
54ResourceLDAP::ResourceLDAP( const KConfig *config ) 54ResourceLDAP::ResourceLDAP( const KConfig *config )
55 : Resource( config ), mPort( 389 ), mLdap( 0 ) 55 : Resource( config ), mPort( 389 ), mLdap( 0 )
56{ 56{
57 KConfig *cfg = (KConfig *)config; 57 KConfig *cfg = (KConfig *)config;
58 if ( cfg ) { 58 if ( cfg ) {
59#ifdef _WIN32_
60 // we use plugins on win32. the group is stored in a static variable
61 // such that group info not available on win32 plugins
62 // to fix that, it would be a looooot of work
63 if ( !cfg->tempGroup().isEmpty() )
64 cfg->setGroup( cfg->tempGroup() );
65#endif
59 mUser = cfg->readEntry( "LdapUser" ); 66 mUser = cfg->readEntry( "LdapUser" );
60 mPassword = KStringHandler::obscure( cfg->readEntry( "LdapPassword" ) ); 67 mPassword = KStringHandler::obscure( cfg->readEntry( "LdapPassword" ) );
61 mDn = cfg->readEntry( "LdapDn" ); 68 mDn = cfg->readEntry( "LdapDn" );
62 mHost = cfg->readEntry( "LdapHost" ); 69 mHost = cfg->readEntry( "LdapHost" );
63 mPort = cfg->readNumEntry( "LdapPort", 389 ); 70 mPort = cfg->readNumEntry( "LdapPort", 389 );
64 mFilter = cfg->readEntry( "LdapFilter" ); 71 mFilter = cfg->readEntry( "LdapFilter" );
65 mAnonymous = cfg->readBoolEntry( "LdapAnonymous" ); 72 mAnonymous = cfg->readBoolEntry( "LdapAnonymous" );
66 73
67 QStringList attributes = cfg->readListEntry( "LdapAttributes" ); 74 QStringList attributes = cfg->readListEntry( "LdapAttributes" );
68 for ( uint pos = 0; pos < attributes.count(); pos += 2 ) 75 for ( uint pos = 0; pos < attributes.count(); pos += 2 )
69 mAttributes.insert( attributes[ pos ], attributes[ pos + 1 ] ); 76 mAttributes.insert( attributes[ pos ], attributes[ pos + 1 ] );
70 } 77 }
71 78
72 /** 79 /**
73 If you want to add new attributes, append them here, add a 80 If you want to add new attributes, append them here, add a
74 translation string in the ctor of AttributesDialog and 81 translation string in the ctor of AttributesDialog and
75 handle them in the load() method below. 82 handle them in the load() method below.
76 These are the default values from 83 These are the default values from
77 */ 84 */
78 if ( mAttributes.count() == 0 ) { 85 if ( mAttributes.count() == 0 ) {
79 mAttributes.insert( "commonName", "cn" ); 86 mAttributes.insert( "commonName", "cn" );
80 mAttributes.insert( "formattedName", "displayName" ); 87 mAttributes.insert( "formattedName", "displayName" );
81 mAttributes.insert( "familyName", "sn" ); 88 mAttributes.insert( "familyName", "sn" );
82 mAttributes.insert( "givenName", "givenName" ); 89 mAttributes.insert( "givenName", "givenName" );
83 mAttributes.insert( "mail", "mail" ); 90 mAttributes.insert( "mail", "mail" );
84 mAttributes.insert( "mailAlias", "" ); 91 mAttributes.insert( "mailAlias", "" );
85 mAttributes.insert( "phoneNumber", "telephoneNumber" ); 92 mAttributes.insert( "phoneNumber", "telephoneNumber" );
86 mAttributes.insert( "uid", "uid" ); 93 mAttributes.insert( "uid", "uid" );
87 } 94 }
88} 95}
89 96
90void ResourceLDAP::writeConfig( KConfig *config ) 97void ResourceLDAP::writeConfig( KConfig *config )
91{ 98{
92 Resource::writeConfig( config ); 99 Resource::writeConfig( config );
93 100
94 config->writeEntry( "LdapUser", mUser ); 101 config->writeEntry( "LdapUser", mUser );
95 config->writeEntry( "LdapPassword", KStringHandler::obscure( mPassword ) ); 102 config->writeEntry( "LdapPassword", KStringHandler::obscure( mPassword ) );
96 config->writeEntry( "LdapDn", mDn ); 103 config->writeEntry( "LdapDn", mDn );
97 config->writeEntry( "LdapHost", mHost ); 104 config->writeEntry( "LdapHost", mHost );
98 config->writeEntry( "LdapPort", mPort ); 105 config->writeEntry( "LdapPort", mPort );
99 config->writeEntry( "LdapFilter", mFilter ); 106 config->writeEntry( "LdapFilter", mFilter );
100 config->writeEntry( "LdapAnonymous", mAnonymous ); 107 config->writeEntry( "LdapAnonymous", mAnonymous );
101 108
102 QStringList attributes; 109 QStringList attributes;
103 QMap<QString, QString>::Iterator it; 110 QMap<QString, QString>::Iterator it;
104 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) 111 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it )
105 attributes << it.key() << it.data(); 112 attributes << it.key() << it.data();
106 113
107 config->writeEntry( "LdapAttributes", attributes ); 114 config->writeEntry( "LdapAttributes", attributes );
108} 115}
109 116
110Ticket *ResourceLDAP::requestSaveTicket() 117Ticket *ResourceLDAP::requestSaveTicket()
111{ 118{
112 if ( !addressBook() ) { 119 if ( !addressBook() ) {
113 kdDebug(5700) << "no addressbook" << endl; 120 kdDebug(5700) << "no addressbook" << endl;
114 return 0; 121 return 0;
115 } 122 }
116 123
117 return createTicket( this ); 124 return createTicket( this );
118} 125}
119 126
120bool ResourceLDAP::doOpen() 127bool ResourceLDAP::doOpen()
121{ 128{
122 if ( mLdap ) 129 if ( mLdap )
123 return false; 130 return false;
124 131
125 if ( !mPort ) 132 if ( !mPort )
126 mPort = 389; 133 mPort = 389;
127 134
128 mLdap = ldap_init( mHost.local8Bit(), mPort ); 135 mLdap = ldap_init( mHost.local8Bit(), mPort );
129 if ( !mLdap ) { 136 if ( !mLdap ) {
130 addressBook()->error( i18n( "Unable to connect to server '%1' on port '%2'" ).arg( mHost ).arg( mPort ) ); 137 addressBook()->error( i18n( "Unable to connect to server '%1' on port '%2'" ).arg( mHost ).arg( mPort ) );
131 return false; 138 return false;
132 } 139 }
133 140
134 if ( !mUser.isEmpty() && !mAnonymous ) { 141 if ( !mUser.isEmpty() && !mAnonymous ) {
135 if ( ldap_simple_bind_s( mLdap, mUser.local8Bit(), mPassword.local8Bit() ) != LDAP_SUCCESS ) { 142 if ( ldap_simple_bind_s( mLdap, mUser.local8Bit(), mPassword.local8Bit() ) != LDAP_SUCCESS ) {
136 addressBook()->error( i18n( "Unable to bind to server '%1'" ).arg( mHost ) ); 143 addressBook()->error( i18n( "Unable to bind to server '%1'" ).arg( mHost ) );
137 return false; 144 return false;
138 } 145 }
139 146
140 kdDebug(5700) << "ResourceLDAP: bind to server successfully" << endl; 147 kdDebug(5700) << "ResourceLDAP: bind to server successfully" << endl;
141 } else { 148 } else {
142 if ( ldap_simple_bind_s( mLdap, NULL, NULL ) != LDAP_SUCCESS ) { 149 if ( ldap_simple_bind_s( mLdap, NULL, NULL ) != LDAP_SUCCESS ) {
143 addressBook()->error( i18n( "Unable to bind anonymously to server '%1'" ).arg( mHost ) ); 150 addressBook()->error( i18n( "Unable to bind anonymously to server '%1'" ).arg( mHost ) );
144 return false; 151 return false;
145 } 152 }
146 153
147 kdDebug( 5700 ) << "ResourceLDAP: bind anonymously to server successfully" << endl; 154 kdDebug( 5700 ) << "ResourceLDAP: bind anonymously to server successfully" << endl;
148 } 155 }
149 156
150 int deref = LDAP_DEREF_ALWAYS; 157 int deref = LDAP_DEREF_ALWAYS;
151 if ( ldap_set_option( mLdap, LDAP_OPT_DEREF, (void *) &deref ) != LDAP_OPT_SUCCESS ) { 158 if ( ldap_set_option( mLdap, LDAP_OPT_DEREF, (void *) &deref ) != LDAP_OPT_SUCCESS ) {
152 kdDebug(5700) << "ResourceLDAP: can't set 'deref' option" << endl; 159 kdDebug(5700) << "ResourceLDAP: can't set 'deref' option" << endl;
153 return false; 160 return false;
154 } 161 }
155 162
156 if ( ldap_set_option( mLdap, LDAP_OPT_REFERRALS, LDAP_OPT_ON ) != LDAP_OPT_SUCCESS ) { 163 if ( ldap_set_option( mLdap, LDAP_OPT_REFERRALS, LDAP_OPT_ON ) != LDAP_OPT_SUCCESS ) {
157 kdDebug(5700) << "ResourceLDAP: can't set 'referrals' option" << endl; 164 kdDebug(5700) << "ResourceLDAP: can't set 'referrals' option" << endl;
158 return false; 165 return false;
159 } 166 }
160 167
161 return true; 168 return true;
162} 169}
163 170
164void ResourceLDAP::doClose() 171void ResourceLDAP::doClose()
165{ 172{
166 if ( ldap_unbind_s( mLdap ) != LDAP_SUCCESS ) { 173 if ( ldap_unbind_s( mLdap ) != LDAP_SUCCESS ) {
167 kdDebug(5700) << "ResourceLDAP: can't unbind from server" << endl; 174 kdDebug(5700) << "ResourceLDAP: can't unbind from server" << endl;
168 return; 175 return;
169 } 176 }
170 177
171 mLdap = 0; 178 mLdap = 0;
172} 179}
173 180
174bool ResourceLDAP::load() 181bool ResourceLDAP::load()
175{ 182{
176 LDAPMessage *res; 183 LDAPMessage *res;
177 LDAPMessage *msg; 184 LDAPMessage *msg;
178 BerElement *track; 185 BerElement *track;
179 char *names; 186 char *names;
180 char **values; 187 char **values;
181 188
182 char **LdapSearchAttr = new char*[ mAttributes.count() + 1 ]; 189 char **LdapSearchAttr = new char*[ mAttributes.count() + 1 ];
183 190
184 QMap<QString, QString>::Iterator it; 191 QMap<QString, QString>::Iterator it;
185 int i = 0; 192 int i = 0;
186 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) { 193 for ( it = mAttributes.begin(); it != mAttributes.end(); ++it ) {
diff --git a/winbuildall.bat b/winbuildall.bat
index 5ae23d1..901d20e 100755
--- a/winbuildall.bat
+++ b/winbuildall.bat
@@ -1,10 +1,11 @@
1 1
2copy xp_variables.pri variables.pri 2copy xp_variables.pri variables.pri
3qmake 3qmake
4nmake clean 4nmake clean
5nmake 5nmake
6copy me_variables.pri variables.pri 6copy me_variables.pri variables.pri
7qmake 7qmake
8nmake clean 8nmake clean
9nmake 9nmake
10winclean \ No newline at end of file 10winclean
11copy xp_variables.pri variables.pri \ No newline at end of file