diff plugin/PluginPathSetter.h @ 1483:7459f4c4d7c3

Merge from branch plugin-path-config
author Chris Cannam
date Mon, 11 Jun 2018 14:40:09 +0100
parents 75fe1c1e003f
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugin/PluginPathSetter.h	Mon Jun 11 14:40:09 2018 +0100
@@ -0,0 +1,85 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef SV_PLUGIN_PATH_SETTER_H
+#define SV_PLUGIN_PATH_SETTER_H
+
+#include <QString>
+#include <QStringList>
+#include <QMutex>
+
+#include <map>
+
+#include "checker/knownplugins.h"
+
+class PluginPathSetter
+{
+public:
+    typedef std::pair<KnownPlugins::PluginType,
+                      KnownPlugins::BinaryFormat> TypeKey;
+
+    typedef std::vector<TypeKey> TypeKeys;
+
+    struct PathConfig {
+        QStringList directories; // Actual list of directories arising
+                                 // from user settings, environment
+                                 // variables, and defaults as
+                                 // appropriate
+        
+        QString envVariable; // Name of env var, e.g. LADSPA_PATH
+        
+        bool useEnvVariable; // True if env variable should override
+                             // any user settings for this
+    };
+
+    typedef std::map<TypeKey, PathConfig> Paths;
+
+    /// Update *_PATH environment variables from the settings, on
+    /// application startup. Must be called exactly once, before any
+    /// of the other functions in this class has been called
+    static void initialiseEnvironmentVariables();
+
+    /// Return default values of paths only, without any environment
+    /// variables or user-defined preferences
+    static Paths getDefaultPaths();
+
+    /// Return paths arising from environment variables only, falling
+    /// back to the defaults, without any user-defined preferences
+    static Paths getEnvironmentPaths();
+
+    /// Return paths arising from user settings + environment
+    /// variables + defaults as appropriate
+    static Paths getPaths();
+
+    /// Save the given paths to the settings
+    static void savePathSettings(Paths paths);
+
+    /// Return the original value observed on startup for the given
+    /// environment variable, if it is one of the variables used by a
+    /// known path config.
+    static QString getOriginalEnvironmentValue(QString envVariable);
+    
+private:
+    static Paths m_defaultPaths;
+    static Paths m_environmentPaths;
+    static std::map<QString, QString> m_originalEnvValues;
+    static TypeKeys m_supportedKeys;
+    static QMutex m_mutex;
+
+    static std::vector<TypeKey> getSupportedKeys();
+    static Paths getEnvironmentPathsUncached(const TypeKeys &keys);
+    static QString getSettingTagFor(TypeKey);
+};
+
+#endif