mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
UI: Fix imported scene collection names duplicating
If an imported scene collection has a name that already exists, it will instead be given a name plus an increment (e.g. "name 2", or "name 3", etc) Fixes obsproject/obs-studio#4442
This commit is contained in:
parent
b5596cbf61
commit
dde4d57d72
@ -73,7 +73,7 @@ void EnumSceneCollections(std::function<bool(const char *, const char *)> &&cb)
|
||||
os_globfree(glob);
|
||||
}
|
||||
|
||||
static bool SceneCollectionExists(const char *findName)
|
||||
bool SceneCollectionExists(const char *findName)
|
||||
{
|
||||
bool found = false;
|
||||
auto func = [&](const char *name, const char *) {
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include "qt-wrappers.hpp"
|
||||
#include "importers/importers.hpp"
|
||||
|
||||
extern bool SceneCollectionExists(const char *findName);
|
||||
|
||||
enum ImporterColumn {
|
||||
Selected,
|
||||
Name,
|
||||
@ -532,6 +534,23 @@ void OBSImporter::browseImport()
|
||||
}
|
||||
}
|
||||
|
||||
bool GetUnusedName(std::string &name)
|
||||
{
|
||||
if (!SceneCollectionExists(name.c_str()))
|
||||
return false;
|
||||
|
||||
std::string newName;
|
||||
int inc = 2;
|
||||
do {
|
||||
newName = name;
|
||||
newName += " ";
|
||||
newName += std::to_string(inc++);
|
||||
} while (SceneCollectionExists(newName.c_str()));
|
||||
|
||||
name = newName;
|
||||
return true;
|
||||
}
|
||||
|
||||
void OBSImporter::importCollections()
|
||||
{
|
||||
setEnabled(false);
|
||||
@ -566,6 +585,12 @@ void OBSImporter::importCollections()
|
||||
std::string name = res["name"].string_value();
|
||||
std::string file;
|
||||
|
||||
if (GetUnusedName(name)) {
|
||||
json11::Json::object newOut = out;
|
||||
newOut["name"] = name;
|
||||
out = newOut;
|
||||
}
|
||||
|
||||
GetUnusedSceneCollectionFile(name, file);
|
||||
|
||||
std::string save = dst;
|
||||
|
Loading…
Reference in New Issue
Block a user