platform dependent app data location

This commit is contained in:
Yannik Schmidt
2020-08-23 22:18:48 +02:00
parent 9b1c2e8b88
commit 9d25dcca75
4 changed files with 59 additions and 40 deletions

View File

@@ -17,6 +17,7 @@
#include <QProcess> #include <QProcess>
#include <QSettings> #include <QSettings>
#include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkAccessManager>
#include <QStandardPaths>
#include <QString> #include <QString>
#include <settingkeys.h> #include <settingkeys.h>
@@ -29,16 +30,24 @@
#define WINDOW_TITLE "Memo Uploader" #define WINDOW_TITLE "Memo Uploader"
MainWindow::MainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::MainWindow){ MainWindow::MainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::MainWindow){
/* setup ui */ /* setup ui */
ui->setupUi(this); ui->setupUi(this);
/* ensure all initial settings are set */ /* ensure all initial settings are set */
#ifdef Q_OS_LINUX
this->mySettings = new QSettings();
#endif
#ifdef Q_OS_WIN
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
path = path + "/settings.ini";
this->mySettings = new QSettings(path, QSettings::IniFormat);
#endif
handleInitialSettings(); handleInitialSettings();
setAuthHeader(mySettings.value(SETTING_USER).toString(), mySettings.value(SETTING_PASS).toString()); setAuthHeader(mySettings->value(SETTING_USER).toString(), mySettings->value(SETTING_PASS).toString());
networkManager = new QNetworkAccessManager(this); networkManager = new QNetworkAccessManager(this);
/* setup buttons */ /* setup buttons */
@@ -78,40 +87,41 @@ MainWindow::MainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::MainWind
void MainWindow::openConfigurationWindow(){ void MainWindow::openConfigurationWindow(){
Settings *settingsWindow = new Settings(); Settings *settingsWindow = new Settings();
settingsWindow->selectSettings(this->mySettings);
settingsWindow->show(); settingsWindow->show();
} }
void MainWindow::handleInitialSettings(){ void MainWindow::handleInitialSettings(){
if(!mySettings.contains(SETTING_HOST)){ if(!mySettings->contains(SETTING_HOST)){
mySettings.setValue(SETTING_HOST, "localhost"); mySettings->setValue(SETTING_HOST, "localhost");
} }
if(!mySettings.contains(SETTING_PORT)){ if(!mySettings->contains(SETTING_PORT)){
mySettings.setValue(SETTING_PORT, "5000"); mySettings->setValue(SETTING_PORT, "5000");
} }
if(!mySettings.contains(SETTING_PROTO)){ if(!mySettings->contains(SETTING_PROTO)){
mySettings.setValue(SETTING_PROTO, "https://"); mySettings->setValue(SETTING_PROTO, "https://");
} }
if(!mySettings.contains(SETTING_LOC_STATE)){ if(!mySettings->contains(SETTING_LOC_STATE)){
mySettings.setValue(SETTING_LOC_STATE, "/dumpstate"); mySettings->setValue(SETTING_LOC_STATE, "/dumpstate");
} }
if(!mySettings.contains(SETTING_LOC_SUBMIT)){ if(!mySettings->contains(SETTING_LOC_SUBMIT)){
mySettings.setValue(SETTING_LOC_SUBMIT, "/submit-async"); mySettings->setValue(SETTING_LOC_SUBMIT, "/submit-async");
} }
if(!mySettings.contains(SETTING_LOC_TRANSCRIPT)){ if(!mySettings->contains(SETTING_LOC_TRANSCRIPT)){
mySettings.setValue(SETTING_LOC_TRANSCRIPT, "/transcript"); mySettings->setValue(SETTING_LOC_TRANSCRIPT, "/transcript");
} }
if(!mySettings.contains(SETTING_SAVE_DIR)){ if(!mySettings->contains(SETTING_SAVE_DIR)){
mySettings.setValue(SETTING_SAVE_DIR, "."); mySettings->setValue(SETTING_SAVE_DIR, ".");
} }
if(!mySettings.contains(SETTING_USER)){ if(!mySettings->contains(SETTING_USER)){
mySettings.setValue(SETTING_USER, ""); mySettings->setValue(SETTING_USER, "");
} }
if(!mySettings.contains(SETTING_PASS)){ if(!mySettings->contains(SETTING_PASS)){
mySettings.setValue(SETTING_PASS, ""); mySettings->setValue(SETTING_PASS, "");
} }
if(!mySettings.contains(SETTING_LINUX_EXPLORER)){ if(!mySettings->contains(SETTING_LINUX_EXPLORER)){
mySettings.setValue(SETTING_LINUX_EXPLORER, "/usr/bin/thunar"); mySettings->setValue(SETTING_LINUX_EXPLORER, "/usr/bin/thunar");
} }
} }
@@ -157,9 +167,9 @@ QString MainWindow::buildURLFromLocation(QVariant location){
} }
QString MainWindow::buildURLFromLocation(QString location){ QString MainWindow::buildURLFromLocation(QString location){
QString proto = mySettings.value(SETTING_PROTO).toString(); QString proto = mySettings->value(SETTING_PROTO).toString();
QString host = mySettings.value(SETTING_HOST).toString(); QString host = mySettings->value(SETTING_HOST).toString();
QString port = mySettings.value(SETTING_PORT).toString(); QString port = mySettings->value(SETTING_PORT).toString();
if(!proto.endsWith("://")){ if(!proto.endsWith("://")){
proto += "://"; proto += "://";
} }
@@ -174,7 +184,7 @@ QString MainWindow::buildURLFromLocation(QString location){
void MainWindow::submitFile(QString filename){ void MainWindow::submitFile(QString filename){
/* prepare request */ /* prepare request */
QUrl serviceUrl = QUrl(buildURLFromLocation(mySettings.value(SETTING_LOC_SUBMIT))); QUrl serviceUrl = QUrl(buildURLFromLocation(mySettings->value(SETTING_LOC_SUBMIT)));
QNetworkRequest request(serviceUrl); QNetworkRequest request(serviceUrl);
request.setRawHeader("Authorization", authHeaderData); request.setRawHeader("Authorization", authHeaderData);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
@@ -203,7 +213,7 @@ void MainWindow::submitFile(QString filename){
} }
void MainWindow::queryTransscript(QString trackingId){ void MainWindow::queryTransscript(QString trackingId){
QString url = buildURLFromLocation(mySettings.value(SETTING_LOC_TRANSCRIPT)); QString url = buildURLFromLocation(mySettings->value(SETTING_LOC_TRANSCRIPT));
QString paramUrl = QString("%1?id=%2").arg(url, trackingId); QString paramUrl = QString("%1?id=%2").arg(url, trackingId);
QUrl transcriptUrl = QUrl(paramUrl); QUrl transcriptUrl = QUrl(paramUrl);
QNetworkRequest request(transcriptUrl); QNetworkRequest request(transcriptUrl);
@@ -213,13 +223,13 @@ void MainWindow::queryTransscript(QString trackingId){
void MainWindow::openContainingDir(){ void MainWindow::openContainingDir(){
QString filePath = mySettings.value(SETTING_SAVE_DIR).toString(); QString filePath = mySettings->value(SETTING_SAVE_DIR).toString();
QStringList args; QStringList args;
/* OS specific explorer call */ /* OS specific explorer call */
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
args << QDir::toNativeSeparators(filePath); args << QDir::toNativeSeparators(filePath);
QProcess::startDetached(mySettings.value(SETTING_LINUX_EXPLORER).toString(), args); QProcess::startDetached(mySettings->value(SETTING_LINUX_EXPLORER).toString(), args);
#endif #endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
args << "/select," << QDir::toNativeSeparators(filePath); args << "/select," << QDir::toNativeSeparators(filePath);
@@ -296,7 +306,7 @@ void MainWindow::saveTranscript(QNetworkReply* reply){
} }
/* save return data */ /* save return data */
QString fullpath = QDir(mySettings.value(SETTING_SAVE_DIR).toString()).filePath(targetName); QString fullpath = QDir(mySettings->value(SETTING_SAVE_DIR).toString()).filePath(targetName);
qDebug(qPrintable(fullpath)); qDebug(qPrintable(fullpath));
qDebug(qPrintable(transcript)); qDebug(qPrintable(transcript));
QFile file(fullpath); QFile file(fullpath);
@@ -378,9 +388,9 @@ void MainWindow::addTrackingToList(QNetworkReply* reply){
void MainWindow::requestFinished(QNetworkReply *reply){ void MainWindow::requestFinished(QNetworkReply *reply){
qDebug(qPrintable(reply->url().toString())); qDebug(qPrintable(reply->url().toString()));
QString submitUrl = buildURLFromLocation(mySettings.value(SETTING_LOC_SUBMIT)); QString submitUrl = buildURLFromLocation(mySettings->value(SETTING_LOC_SUBMIT));
QString statusRequestUrl = buildURLFromLocation(mySettings.value(SETTING_LOC_STATE)); QString statusRequestUrl = buildURLFromLocation(mySettings->value(SETTING_LOC_STATE));
QString requestTranscriptUrl = buildURLFromLocation(mySettings.value(SETTING_LOC_TRANSCRIPT)); QString requestTranscriptUrl = buildURLFromLocation(mySettings->value(SETTING_LOC_TRANSCRIPT));
if(QString::compare(reply->url().toString(), submitUrl) == 0){ if(QString::compare(reply->url().toString(), submitUrl) == 0){
addTrackingToList(reply); addTrackingToList(reply);
@@ -397,7 +407,7 @@ void MainWindow::requestFinished(QNetworkReply *reply){
void MainWindow::queryStatusAll(){ void MainWindow::queryStatusAll(){
QString statusRequestUrl = buildURLFromLocation(mySettings.value(SETTING_LOC_STATE)); QString statusRequestUrl = buildURLFromLocation(mySettings->value(SETTING_LOC_STATE));
QUrl trackingUrl = QUrl(statusRequestUrl); QUrl trackingUrl = QUrl(statusRequestUrl);
QNetworkRequest request(trackingUrl); QNetworkRequest request(trackingUrl);
request.setRawHeader("Authorization", authHeaderData); request.setRawHeader("Authorization", authHeaderData);

View File

@@ -32,7 +32,7 @@ private:
QAction *standardsMenu; QAction *standardsMenu;
QByteArray authHeaderData; QByteArray authHeaderData;
QNetworkAccessManager *networkManager; QNetworkAccessManager *networkManager;
QSettings mySettings; QSettings *mySettings;
void submitFile(QString filename); void submitFile(QString filename);
void setAuthHeader(const QString username, const QString password); void setAuthHeader(const QString username, const QString password);
void updateList(QNetworkReply *reply); void updateList(QNetworkReply *reply);

View File

@@ -17,10 +17,9 @@ Settings::Settings(QWidget *parent) :
{ {
ui->setupUi(this); ui->setupUi(this);
configLineEditMap = new QHash<QString, QLineEdit*>(); configLineEditMap = new QHash<QString, QLineEdit*>();
QSettings mySettings;
/* config options */ /* config options */
QStringList *configOptions = new QStringList(); configOptions = new QStringList();
configOptions->append("Host"); configOptions->append("Host");
configOptions->append("Port"); configOptions->append("Port");
configOptions->append("Protokoll"); configOptions->append("Protokoll");
@@ -33,7 +32,7 @@ Settings::Settings(QWidget *parent) :
#endif #endif
/* config option keys */ /* config option keys */
QStringList *configOptionsKeys = new QStringList(); configOptionsKeys = new QStringList();
configOptionsKeys->append(SETTING_HOST); configOptionsKeys->append(SETTING_HOST);
configOptionsKeys->append(SETTING_PORT); configOptionsKeys->append(SETTING_PORT);
configOptionsKeys->append(SETTING_PROTO); configOptionsKeys->append(SETTING_PROTO);
@@ -44,6 +43,11 @@ Settings::Settings(QWidget *parent) :
configOptionsKeys->append(SETTING_LINUX_EXPLORER); configOptionsKeys->append(SETTING_LINUX_EXPLORER);
#endif #endif
}
void Settings::selectSettings(QSettings *selectedSettings){
this->mySettings = selectedSettings;
/* config options layout */ /* config options layout */
auto cw = this->findChild<QWidget*>("centralwidget"); auto cw = this->findChild<QWidget*>("centralwidget");
QGridLayout *layout = static_cast<QGridLayout*>(cw->layout()); QGridLayout *layout = static_cast<QGridLayout*>(cw->layout());
@@ -54,7 +58,7 @@ Settings::Settings(QWidget *parent) :
QLabel *label = new QLabel(this); QLabel *label = new QLabel(this);
label->setText(configOptions->at(i)); label->setText(configOptions->at(i));
QLineEdit *edit = new QLineEdit(); QLineEdit *edit = new QLineEdit();
edit->setText(mySettings.value(configOptionsKeys->at(i)).toString()); edit->setText(this->mySettings->value(configOptionsKeys->at(i)).toString());
/* add widgets to layout */ /* add widgets to layout */
layout->addWidget(label, i, 0); layout->addWidget(label, i, 0);
@@ -91,7 +95,7 @@ void Settings::okClose(){
for(auto key : configLineEditMap->keys()){ for(auto key : configLineEditMap->keys()){
QString input = configLineEditMap->take(key)->text(); QString input = configLineEditMap->take(key)->text();
if(input.compare("") != 0){ if(input.compare("") != 0){
mySettings.setValue(key, input); this->mySettings->setValue(key, input);
} }
} }
this->close(); this->close();

View File

@@ -3,6 +3,7 @@
#include <QMainWindow> #include <QMainWindow>
#include <QLineEdit> #include <QLineEdit>
#include <QSettings>
namespace Ui { namespace Ui {
class settings; class settings;
@@ -16,12 +17,16 @@ public:
explicit Settings(QWidget *parent = nullptr); explicit Settings(QWidget *parent = nullptr);
~Settings(); ~Settings();
void selectSettings(QSettings *selectedSettings);
private slots: private slots:
void okClose(); void okClose();
void cancleClose(); void cancleClose();
private: private:
Ui::settings *ui; Ui::settings *ui;
QSettings *mySettings;
QHash<QString, QLineEdit*> *configLineEditMap; QHash<QString, QLineEdit*> *configLineEditMap;
QStringList *configOptionsKeys;
QStringList *configOptions;
}; };
#endif // SETTINGS_H #endif // SETTINGS_H