20#include "kexidbshortcutfile.h"
21#include <core/kexiprojectdata.h>
22#include <kexidb/connectiondata.h>
23#include <kexiutils/utils.h>
28#include <tqstringlist.h>
32#define KexiDBShortcutFile_version 2
41class KexiDBShortcutFile::Private
45 : isDatabaseShortcut(true)
49 bool isDatabaseShortcut : 1;
55 d->fileName = TQDir( fileName).absPath();
58KexiDBShortcutFile::~KexiDBShortcutFile()
65 TDEConfig config(d->fileName, true , false );
66 config.setGroup( "File Information");
67 data.formatVersion = config.readNumEntry( "version", KexiDBShortcutFile_version);
70 if (!_groupKey || _groupKey->isEmpty()) {
71 TQStringList groups(config.groupList());
72 foreach (TQStringList::ConstIterator, it, groups) {
73 if ((*it).lower()!= "file information") {
78 if (groupKey.isEmpty()) {
83 *_groupKey = groupKey;
86 if (!config.hasGroup(*_groupKey))
88 groupKey = *_groupKey;
91 config.setGroup(groupKey);
92 TQString type( config.readEntry( "type", "database").lower() );
94 if (type== "database") {
95 d->isDatabaseShortcut = true;
96 } else if (type== "connection") {
97 d->isDatabaseShortcut = false;
119 if (d->isDatabaseShortcut) {
120 data.setCaption( config.readEntry( "caption") );
121 data.setDescription( config.readEntry( "comment") );
123 data.connectionData()-> caption = TQString();
124 data.setDatabaseName( config.readEntry( "name") );
127 data.setCaption( TQString() );
128 data.connectionData()-> caption = config.readEntry( "caption");
129 data.setDescription( TQString() );
130 data.connectionData()-> description = config.readEntry( "comment");
131 data.setDatabaseName( TQString() );
133 data.connectionData()-> driverName = config.readEntry( "engine");
134 if (data.connectionData()-> driverName.isEmpty()) {
138 data.connectionData()-> hostName = config.readEntry( "server");
139 data.connectionData()-> port = config.readNumEntry( "port", 0);
140 data.connectionData()-> useLocalSocketFile = config.readBoolEntry( "useLocalSocketFile", false);
142 data.connectionData()-> savePassword = config.hasKey( "password") || config.hasKey( "encryptedPassword");
143 if (data.formatVersion >= 2) {
144 kdDebug() << config.hasKey( "encryptedPassword") << endl;
145 data.connectionData()-> password = config.readEntry( "encryptedPassword");
148 if (data.connectionData()-> password.isEmpty()) {
150 data.connectionData()-> password = config.readEntry( "password");
153 data.connectionData()-> userName = config.readEntry( "user");
159 bool savePassword, TQString* _groupKey, bool overwriteFirstGroup)
161 TDEConfig config(d->fileName, false , false );
162 config.setGroup( "File Information");
164 uint realFormatVersion = data.formatVersion;
165 if (realFormatVersion == 0)
166 realFormatVersion = KexiDBShortcutFile_version;
167 config.writeEntry( "version", realFormatVersion);
169 const bool thisIsConnectionData = data. databaseName().isEmpty();
173 if (_groupKey && !_groupKey->isEmpty()) {
174 groupKey = *_groupKey;
177 TQString groupPrefix;
178 const TQStringList groups(config.groupList());
179 if (overwriteFirstGroup && !groups.isEmpty()) {
181 foreach (TQStringList::ConstIterator, it, groups) {
182 if ((*it).lower()!= "file information") {
189 if (groupKey.isEmpty()) {
191 if (thisIsConnectionData)
192 groupPrefix = "Connection%1";
194 groupPrefix = "Database%1";
197 while (config.hasGroup(groupPrefix.arg(number)))
199 groupKey = groupPrefix.arg(number);
202 *_groupKey = groupKey;
205 config.deleteGroup(groupKey);
206 config.setGroup(groupKey);
207 if (thisIsConnectionData) {
208 config.writeEntry( "type", "connection");
209 config.writeEntry( "caption", data.constConnectionData()-> caption);
210 if (!data.constConnectionData()-> description.isEmpty())
211 config.writeEntry( "comment", data.constConnectionData()-> description);
214 config.writeEntry( "type", "database");
215 config.writeEntry( "caption", data.caption());
217 if (!data.description().isEmpty())
218 config.writeEntry( "comment", data.description());
221 config.writeEntry( "engine", data.constConnectionData()-> driverName);
222 if (!data.constConnectionData()-> hostName.isEmpty())
223 config.writeEntry( "server", data.constConnectionData()-> hostName);
225 if (data.constConnectionData()-> port!=0)
226 config.writeEntry( "port", data.constConnectionData()-> port);
227 config.writeEntry( "useLocalSocketFile", data.constConnectionData()-> useLocalSocketFile);
231 if (savePassword || data.constConnectionData()-> savePassword) {
232 if (realFormatVersion < 2) {
233 config.writeEntry( "password", data.constConnectionData()-> password);
236 TQString encryptedPassword = data.constConnectionData()-> password;
238 config.writeEntry( "encryptedPassword", encryptedPassword);
239 encryptedPassword.fill( ' ');
243 if (!data.constConnectionData()-> userName.isEmpty())
244 config.writeEntry( "user", data.constConnectionData()-> userName);
262KexiDBConnShortcutFile::~KexiDBConnShortcutFile()
271 data = *pdata.connectionData();
276 bool savePassword, TQString* groupKey, bool overwriteFirstGroup)
279 return saveProjectData(pdata, savePassword, groupKey, overwriteFirstGroup);
291 TQStringList files( TDEGlobal::dirs()->findAllResources( "data", "kexi/connections/*.kexic") );
294 kexidbg << files << endl;
296 foreach(TQStringList::ConstIterator, it, files) {
299 if (!shortcutFile.loadConnectionData(*data)) {
KexiDBConnShortcutFile(const TQString &fileName)
bool saveConnectionData(const KexiDB::ConnectionData &data, bool savePassword, TQString *groupKey=0, bool overwriteFirstGroup=true)
bool loadConnectionData(KexiDB::ConnectionData &data, TQString *groupKey=0)
TQString fileName() const
bool addConnectionData(KexiDB::ConnectionData *data, const TQString &filename=TQString())
bool saveProjectData(const KexiProjectData &data, bool savePassword, TQString *groupKey=0, bool overwriteFirstGroup=true)
bool loadProjectData(KexiProjectData &data, TQString *groupKey=0)
TQString fileName() const
KexiDBShortcutFile(const TQString &fileName)
bool savePassword True if password should be saved to a file for the connection.
TQString caption The caption of the connection.
TQString localSocketFileName Name of local (named) socket file.
TQString description The additional description for the connection.
TQString userName Username used for the connection.
TQString password Password used for the connection.
TQString driverName the name of the driver that should be used to create a connection
unsigned short int port Port used for the remote connection.
TQString hostName Host name used for the remote connection.
bool useLocalSocketFile True if local socket file should be used instead of TCP/IP port.
Database specific connection data, e.g. host, port.
void setFileName(const TQString &fn) Set the filename used by the connection.
Kexi project core data member.
TQString databaseName() const
KEXIUTILS_EXPORT void simpleCrypt(TQString &string)
KEXIUTILS_EXPORT void simpleDecrypt(TQString &string)
|