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
master
jp9000 2021-04-20 00:13:38 -07:00
parent b5596cbf61
commit dde4d57d72
2 changed files with 26 additions and 1 deletions

View File

@ -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 *) {

View File

@ -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;