mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
The global variable "Database" of class xca_db can be used by any other class to access. No need to provide it. The "xca_db" class managed the "database_model" pointer. Accessing the name of the current database has been unified.
143 lines
2.8 KiB
C++
143 lines
2.8 KiB
C++
/* vi: set sw=4 ts=4:
|
|
*
|
|
* Copyright (C) 2020 Christian Hohnstaedt.
|
|
*
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#ifndef __DATABASE_MODEL_H
|
|
#define __DATABASE_MODEL_H
|
|
|
|
#include <QList>
|
|
#include <QObject>
|
|
#include <QDebug>
|
|
#include <QStringList>
|
|
#include <QSqlDatabase>
|
|
|
|
#include "sql.h"
|
|
#include "db_base.h"
|
|
#include "lib/Passwd.h"
|
|
|
|
typedef QMap<QString, QString> DbMap;
|
|
|
|
class database_model: public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private:
|
|
QList<db_base*> models;
|
|
int dbTimer;
|
|
void openSqlDB();
|
|
QSqlError initSqlDB();
|
|
QString dbName;
|
|
bool checkForOldDbFormat(const QString &dbfile) const;
|
|
enum open_result verifyOldDbPass(const QString &dbname) const;
|
|
void importOldDatabase(const QString &dbfile);
|
|
QString get_default_db() const;
|
|
QString checkPre2Xdatabase() const;
|
|
enum open_result initPass(const QString &dbName,
|
|
const QString &passhash) const;
|
|
void restart_timer();
|
|
db_base *modelForPki(const pki_base *pki) const;
|
|
static void openDatabase(const QString &descriptor,
|
|
const Passwd &pass);
|
|
static void openRemoteDatabase(const QString &connName,
|
|
const DbMap ¶ms,
|
|
const Passwd &pass);
|
|
static void openLocalDatabase(const QString &connName,
|
|
const QString &descriptor);
|
|
|
|
public:
|
|
database_model(const QString &dbName,
|
|
const Passwd &pass = Passwd());
|
|
~database_model();
|
|
void timerEvent(QTimerEvent *event);
|
|
|
|
QString dbname() const
|
|
{
|
|
return dbName;
|
|
}
|
|
void dump_database(const QString &dirname) const;
|
|
QList<db_base*> getModels() const
|
|
{
|
|
return models;
|
|
}
|
|
template <class T> T *model() const
|
|
{
|
|
foreach(db_base *model, models) {
|
|
T *m = dynamic_cast<T*>(model);
|
|
if (m)
|
|
return m;
|
|
}
|
|
return NULL;
|
|
}
|
|
pki_base *insert(pki_base *pki);
|
|
|
|
static DbMap splitRemoteDbName(const QString &db);
|
|
static bool isRemoteDB(const QString &db);
|
|
static void as_default_database(const QString &db);
|
|
};
|
|
|
|
class xca_db {
|
|
|
|
private:
|
|
database_model *db;
|
|
|
|
public:
|
|
~xca_db()
|
|
{
|
|
close();
|
|
}
|
|
void open(const QString &dbName, const Passwd &pass = Passwd())
|
|
{
|
|
close();
|
|
db = new database_model(dbName, pass);
|
|
qDebug() << "Opening database:" << name();
|
|
}
|
|
void open_default()
|
|
{
|
|
open(QString());
|
|
}
|
|
void close()
|
|
{
|
|
if (db) {
|
|
qDebug() << "Closing database:" << name();
|
|
delete db;
|
|
db = NULL;
|
|
}
|
|
}
|
|
QString name() const
|
|
{
|
|
return db ? db->dbname() : QString();
|
|
}
|
|
bool isOpen()
|
|
{
|
|
return db != NULL;
|
|
}
|
|
template <class T> T *model() const
|
|
{
|
|
return db ? db->model<T>() : NULL;
|
|
}
|
|
void dump(const QString &dirname) const
|
|
{
|
|
if (db)
|
|
db->dump_database(dirname);
|
|
}
|
|
void as_default() const
|
|
{
|
|
database_model::as_default_database(name());
|
|
}
|
|
QList<db_base*> getModels() const
|
|
{
|
|
return db ? db->getModels() : QList<db_base*>();
|
|
}
|
|
pki_base *insert(pki_base *pki)
|
|
{
|
|
return db ? db->insert(pki) : NULL;
|
|
}
|
|
};
|
|
|
|
extern xca_db Database;
|
|
|
|
#endif
|