Added support for unicode paths (filesystem::path approach)
This commit is contained in:
parent
351515f025
commit
b409b5f7cc
14 changed files with 143 additions and 104 deletions
|
|
@ -3,6 +3,18 @@
|
|||
#include "PluginManager.h"
|
||||
#include "OpenRGBThemeManager.h"
|
||||
|
||||
// These two functions address the lack of a type-aware way to construct a QString
|
||||
// Allows to avoid double conversions
|
||||
static QString convertQPath(const std::string & filepath)
|
||||
{
|
||||
return QString::fromStdString(filepath);
|
||||
}
|
||||
static QString convertQPath(const std::wstring & filepath)
|
||||
{
|
||||
return QString::fromStdWString(filepath);
|
||||
}
|
||||
|
||||
|
||||
PluginManager::PluginManager()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
@ -16,7 +28,7 @@ PluginManager::PluginManager()
|
|||
/*-------------------------------------------------------------------------*\
|
||||
| Create OpenRGB plugins directory |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
std::string plugins_dir = ResourceManager::get()->GetConfigurationDirectory() + plugins_path;
|
||||
filesystem::path plugins_dir = ResourceManager::get()->GetConfigurationDirectory() / plugins_path;
|
||||
|
||||
filesystem::create_directories(plugins_dir);
|
||||
}
|
||||
|
|
@ -41,7 +53,8 @@ void PluginManager::ScanAndLoadPlugins()
|
|||
| The plugins directory is a directory named "plugins" in |
|
||||
| the configuration directory |
|
||||
\*---------------------------------------------------------*/
|
||||
ScanAndLoadPluginsFrom(QString(ResourceManager::get()->GetConfigurationDirectory().c_str()).append(plugins_path));
|
||||
filesystem::path plugins_dir = ResourceManager::get()->GetConfigurationDirectory() / plugins_path;
|
||||
ScanAndLoadPluginsFrom(plugins_dir);
|
||||
|
||||
#ifdef OPENRGB_EXTRA_PLUGIN_DIRECTORY
|
||||
/*-----------------------------------------------------------------*\
|
||||
|
|
@ -52,33 +65,23 @@ void PluginManager::ScanAndLoadPlugins()
|
|||
#endif
|
||||
}
|
||||
|
||||
void PluginManager::ScanAndLoadPluginsFrom(QDir plugins_dir)
|
||||
void PluginManager::ScanAndLoadPluginsFrom(const filesystem::path & plugins_dir)
|
||||
{
|
||||
LOG_TRACE("[PluginManager] Scanning plugin directory: %s", plugins_dir.absolutePath().toStdString().c_str());
|
||||
LOG_TRACE("[PluginManager] Scanning plugin directory: %s", plugins_dir.generic_u8string().c_str());
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Get a list of all files in the plugins directory |
|
||||
\*---------------------------------------------------------*/
|
||||
std::vector<std::string> FileList;
|
||||
|
||||
for(int i = 0; i < QDir(plugins_dir).entryList(QDir::Files).size(); i++)
|
||||
for(const filesystem::directory_entry& entry: filesystem::directory_iterator(plugins_dir))
|
||||
{
|
||||
LOG_TRACE("[PluginManager] Found plugin file %s", QDir(plugins_dir).entryList(QDir::Files)[i].toStdString().c_str());
|
||||
FileList.push_back(QDir(plugins_dir).entryList(QDir::Files)[i].toStdString());
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Attempt to load each file in the plugins directory |
|
||||
\*---------------------------------------------------------*/
|
||||
for(const std::string &plugin_name : FileList)
|
||||
{
|
||||
const std::string plugin_path = plugins_dir.absoluteFilePath(QString().fromStdString(plugin_name)).toStdString();
|
||||
|
||||
filesystem::path plugin_path = entry.path();
|
||||
LOG_TRACE("[PluginManager] Found plugin file %s", plugin_path.filename().generic_u8string().c_str());
|
||||
AddPlugin(plugin_path);
|
||||
}
|
||||
}
|
||||
|
||||
void PluginManager::AddPlugin(std::string path)
|
||||
void PluginManager::AddPlugin(const filesystem::path& path)
|
||||
{
|
||||
OpenRGBPluginInterface* plugin = nullptr;
|
||||
|
||||
|
|
@ -103,7 +106,8 @@ void PluginManager::AddPlugin(std::string path)
|
|||
/*-----------------------------------------------------------------*\
|
||||
| Create a QPluginLoader and load the plugin |
|
||||
\*-----------------------------------------------------------------*/
|
||||
QPluginLoader* loader = new QPluginLoader(QString().fromStdString(path));
|
||||
std::string path_string = path.generic_u8string();
|
||||
QPluginLoader* loader = new QPluginLoader(convertQPath(path_string));
|
||||
QObject* instance = loader->instance();
|
||||
|
||||
/*-----------------------------------------------------------------*\
|
||||
|
|
@ -193,7 +197,7 @@ void PluginManager::AddPlugin(std::string path)
|
|||
entry.plugin = plugin;
|
||||
entry.loader = loader;
|
||||
entry.loaded = false;
|
||||
entry.path = path;
|
||||
entry.path = path_string;
|
||||
entry.enabled = enabled;
|
||||
entry.widget = nullptr;
|
||||
|
||||
|
|
@ -216,7 +220,7 @@ void PluginManager::AddPlugin(std::string path)
|
|||
}
|
||||
}
|
||||
|
||||
void PluginManager::RemovePlugin(std::string path)
|
||||
void PluginManager::RemovePlugin(const filesystem::path& path)
|
||||
{
|
||||
unsigned int plugin_idx;
|
||||
|
||||
|
|
@ -257,7 +261,7 @@ void PluginManager::RemovePlugin(std::string path)
|
|||
ActivePlugins.erase(ActivePlugins.begin() + plugin_idx);
|
||||
}
|
||||
|
||||
void PluginManager::LoadPlugin(std::string path)
|
||||
void PluginManager::LoadPlugin(const filesystem::path& path)
|
||||
{
|
||||
unsigned int plugin_idx;
|
||||
|
||||
|
|
@ -317,7 +321,7 @@ void PluginManager::LoadPlugin(std::string path)
|
|||
}
|
||||
}
|
||||
|
||||
void PluginManager::UnloadPlugin(std::string path)
|
||||
void PluginManager::UnloadPlugin(const filesystem::path& path)
|
||||
{
|
||||
unsigned int plugin_idx;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue