Browse Source

Initial work on standard paths.

George 4 years ago
parent
commit
4c03ad7c81
1 changed files with 48 additions and 36 deletions
  1. 48 36
      main.cpp

+ 48 - 36
main.cpp

@@ -24,58 +24,71 @@
 #include <QProcess>
 #include <QSettings>
 #include <QFileInfo>
+#include <QStandardPaths>
+
+/// Utility struct for standard app paths. Struct should be created after QCoreApplication::set___Name.
+struct StandardAppPaths{
+    QMap<QStandardPaths::StandardLocation, QString> paths;
+    StandardAppPaths()
+        : paths({{QStandardPaths::AppConfigLocation, QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation)},
+                 {QStandardPaths::AppDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)},})
+    {}
+};
 
-
-const auto DATA_DIR = QLatin1String("data");
-/*!
- * \brief setup checks if data folder and settings files exists.
- * \return
- */
-bool setup()
+/// Ensure standard app paths exist, if not mkdir them.
+static inline
+void scan_paths(StandardAppPaths paths)
 {
-    if (!QDir(DATA_DIR).exists())
-        QDir().mkdir(DATA_DIR);
-
-    QDir      settingspath(DATA_DIR + QLatin1Char('/') + QCoreApplication::organizationName());
-    QString   settingsfile = QCoreApplication::applicationName() + QLatin1String(".ini");
-    QFileInfo check_file(settingspath,settingsfile);
-
-    QSettings settings;
-    settings.setValue("setup/touch", true);
-    settings.sync();
+    for(auto& path : paths.paths.values()){
+        auto dir = QDir(path);
+        DEB("Scanning " << dir.path());
+        if(!dir.exists())
+            DEB("Creating " << dir.path());
+            dir.mkdir(path);
+    }
+}
 
-    return check_file.exists() && check_file.isFile();
-};
+/// Validate standard app paths are valid in structure and contents.
+static inline
+bool validate_paths(StandardAppPaths paths)
+{
+    for(auto& path : paths.paths.values()){
+        DEB("Validating " << path);
+        if(false)  // determine path as valid (scan contents and parse for correctness)
+            return false;
+    }
+    return true;
+}
 
 int main(int argc, char *argv[])
 {
+    QApplication openPilotLog(argc, argv);
     QCoreApplication::setOrganizationName("openPilotLog");
     QCoreApplication::setOrganizationDomain("https://github.com/fiffty-50/openpilotlog");
     QCoreApplication::setApplicationName("openPilotLog");
 
-    QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, DATA_DIR);
+    StandardAppPaths std_paths;
+    scan_paths(std_paths);
+    if(!validate_paths(std_paths)){
+        DEB("Standard paths not valid.");
+        return 1;
+    }
+
     QSettings::setDefaultFormat(QSettings::IniFormat);
+    QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, std_paths.paths[QStandardPaths::AppDataLocation]);
     QSettings settings;
 
     experimental::aDB()->connect();
 
-    QApplication openPilotLog(argc, argv);
-    if(!setup()){
-        DEB("error creating required directories");
-        return 0;
-    }
-
-    if (!ASettings::read("setup/setup_complete").toBool()) {
-        FirstRunDialog dialog;
-        dialog.exec();
-    }
-
-
+//    if (!ASettings::read("setup/setup_complete").toBool()) {
+//        FirstRunDialog dialog;
+//        dialog.exec();
+//    }
 
     //Theming
-    int selectedtheme = settings.value("main/theme").toInt();
-    QDir::setCurrent("/themes");
-    switch (selectedtheme) {
+//    int selectedtheme = settings.value("main/theme").toInt();
+//    QDir::setCurrent("/themes");
+    switch (2) {
     case 1:{
         qDebug() << "main :: Loading light theme";
         QFile file(":light.qss");
@@ -96,7 +109,6 @@ int main(int argc, char *argv[])
         break;
     }
 
-
     //sqlite does not deal well with multiple connections, ensure only one instance is running
     ARunGuard guard("opl_single_key");
         if ( !guard.tryToRun() ){