parent
8d6678009a
commit
ef78e74cdd
11
cli/main.cpp
11
cli/main.cpp
@ -56,7 +56,6 @@ Command *commandFromName(QString name, SqliteDbService &dbService)
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
Common::setupAppInfo();
|
Common::setupAppInfo();
|
||||||
|
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
QStringList args = app.arguments();
|
QStringList args = app.arguments();
|
||||||
QString argv0 = args.takeFirst();
|
QString argv0 = args.takeFirst();
|
||||||
@ -66,6 +65,16 @@ int main(int argc, char *argv[])
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Common::ensureConfigured();
|
||||||
|
}
|
||||||
|
catch(QSSGeneralException &e)
|
||||||
|
{
|
||||||
|
Logger::error() << "Error: " << e.message;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
QString connectionString = Common::databasePath();
|
QString connectionString = Common::databasePath();
|
||||||
DatabaseFactory dbFactory(connectionString);
|
DatabaseFactory dbFactory(connectionString);
|
||||||
SqliteDbService dbService(dbFactory);
|
SqliteDbService dbService(dbFactory);
|
||||||
|
11
gui/main.cpp
11
gui/main.cpp
@ -1,5 +1,6 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QMessageBox>
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "searchresult.h"
|
#include "searchresult.h"
|
||||||
#include "pdfpreview.h"
|
#include "pdfpreview.h"
|
||||||
@ -9,6 +10,16 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
Common::setupAppInfo();
|
Common::setupAppInfo();
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Common::ensureConfigured();
|
||||||
|
}
|
||||||
|
catch(QSSGeneralException &e)
|
||||||
|
{
|
||||||
|
qDebug() << e.message;
|
||||||
|
QMessageBox::critical(nullptr, "Error", e.message);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
qRegisterMetaType<QVector<SearchResult>>("QVector<SearchResult>");
|
qRegisterMetaType<QVector<SearchResult>>("QVector<SearchResult>");
|
||||||
qRegisterMetaType<QVector<PdfPreview>>("QVector<PdfPreview>");
|
qRegisterMetaType<QVector<PdfPreview>>("QVector<PdfPreview>");
|
||||||
qRegisterMetaType<PdfPreview>("PdfPreview");
|
qRegisterMetaType<PdfPreview>("PdfPreview");
|
||||||
|
@ -1,7 +1,93 @@
|
|||||||
#include <QProcessEnvironment>
|
#include <QProcessEnvironment>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QSqlDatabase>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
#include <QSqlError>
|
||||||
|
#include <QTextStream>
|
||||||
|
#include <QDebug>
|
||||||
|
#include "qssgeneralexception.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#define SETTINGS_KEY_DBPATH "dbpath"
|
||||||
|
#define SETTINGS_KEY_FIRSTRUN "firstrun"
|
||||||
|
|
||||||
|
inline void initResources()
|
||||||
|
{
|
||||||
|
Q_INIT_RESOURCE(create);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Common::initSqliteDatabase(QString path)
|
||||||
|
{
|
||||||
|
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
|
||||||
|
db.setDatabaseName(path);
|
||||||
|
if(!db.open())
|
||||||
|
{
|
||||||
|
qDebug() << "failed to open database: " << path;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
initResources();
|
||||||
|
QFile file(":./create.sql");
|
||||||
|
if(!file.open(QIODevice::ReadOnly))
|
||||||
|
{
|
||||||
|
qDebug() << "Failed to load SQL creation script from embedded resource";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
QTextStream stream(&file);
|
||||||
|
db.transaction();
|
||||||
|
while(!stream.atEnd())
|
||||||
|
{
|
||||||
|
QString sql = stream.readLine();
|
||||||
|
qDebug() << sql;
|
||||||
|
QSqlQuery sqlQuery;
|
||||||
|
if(!sqlQuery.exec(sql))
|
||||||
|
{
|
||||||
|
qDebug() << "Failed to execute sql statement while initializing database: " << sqlQuery.lastError();
|
||||||
|
db.rollback();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
db.commit();
|
||||||
|
db.close();
|
||||||
|
file.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Common::ensureConfigured()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
QVariant firstRun = settings.value(SETTINGS_KEY_FIRSTRUN);
|
||||||
|
if(!firstRun.isValid())
|
||||||
|
{
|
||||||
|
QString dbpath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
|
||||||
|
QDir dir;
|
||||||
|
if(!dir.exists(dbpath))
|
||||||
|
{
|
||||||
|
if(!dir.mkpath(dbpath))
|
||||||
|
{
|
||||||
|
throw QSSGeneralException("Failed to create dbpath directory");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dbpath += "/qss.sqlite";
|
||||||
|
if(!initSqliteDatabase(dbpath))
|
||||||
|
{
|
||||||
|
throw QSSGeneralException("Failed to initialize sqlite database");
|
||||||
|
}
|
||||||
|
settings.setValue(SETTINGS_KEY_FIRSTRUN, false);
|
||||||
|
settings.setValue(SETTINGS_KEY_DBPATH, dbpath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
QString dbpath = databasePath();
|
||||||
|
if(!QFile::exists(dbpath))
|
||||||
|
{
|
||||||
|
throw QSSGeneralException("Database " + dbpath + " was not found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Common::setupAppInfo()
|
void Common::setupAppInfo()
|
||||||
{
|
{
|
||||||
QCoreApplication::setOrganizationName("quitesimple.org");
|
QCoreApplication::setOrganizationName("quitesimple.org");
|
||||||
@ -15,7 +101,7 @@ QString Common::databasePath()
|
|||||||
if(env == "")
|
if(env == "")
|
||||||
{
|
{
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
return settings.value("dbpath").toString();
|
return settings.value(SETTINGS_KEY_DBPATH).toString();
|
||||||
}
|
}
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,7 @@ namespace Common
|
|||||||
{
|
{
|
||||||
void setupAppInfo();
|
void setupAppInfo();
|
||||||
QString databasePath();
|
QString databasePath();
|
||||||
|
bool initSqliteDatabase(QString path);
|
||||||
|
void ensureConfigured();
|
||||||
} // namespace Common
|
} // namespace Common
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user