plugin: Implement proper functions to get config and data files

Using the obs_module_file and obs_module_config_path macros works okay, but it comes with a slight overhead as well as additional requirements when passing it to C++ functions that expect certain rules to be fulfilled. By instead wrapping the actual functionality into our own functions and using those we can avoid most of the issues that come with the old approach.

Related: #359
This commit is contained in:
Michael Fabian 'Xaymar' Dirks 2020-11-28 15:38:56 +01:00
parent 7be1929985
commit 4de094511a
2 changed files with 27 additions and 0 deletions

View file

@ -270,3 +270,27 @@ void streamfx::gs_draw_fullscreen_tri()
gs_load_vertexbuffer(_gs_fstri_vb->update(false));
gs_draw(GS_TRIS, 0, 3); //_gs_fstri_vb->size());
}
std::filesystem::path streamfx::data_file_path(std::string_view file)
{
const char* root_path = obs_get_module_data_path(obs_current_module());
if (root_path) {
auto ret = std::filesystem::u8path(root_path);
ret.append(file.data());
return ret;
} else {
throw std::runtime_error("obs_get_module_data_path returned nullptr");
}
}
std::filesystem::path streamfx::config_file_path(std::string_view file)
{
char* root_path = obs_module_get_config_path(obs_current_module(), file.data());
if (root_path) {
auto ret = std::filesystem::u8path(root_path);
bfree(root_path);
return ret;
} else {
throw std::runtime_error("obs_module_get_config_path returned nullptr");
}
}

View file

@ -25,4 +25,7 @@ namespace streamfx {
std::shared_ptr<util::threadpool> threadpool();
void gs_draw_fullscreen_tri();
std::filesystem::path data_file_path(std::string_view file);
std::filesystem::path config_file_path(std::string_view file);
} // namespace streamfx