@@ -1303,6 +1303,20 @@ bool CarlaEngine::loadFilename(const char* const filename) | |||||
return false; | return false; | ||||
} | } | ||||
bool charEndsWith(const char* const str, const char* const suffix) | |||||
{ | |||||
if (str == nullptr || suffix == nullptr) | |||||
return false; | |||||
const size_t strLen(std::strlen(str)); | |||||
const size_t suffixLen(std::strlen(suffix)); | |||||
if (strLen < suffixLen) | |||||
return false; | |||||
return (std::strncmp(str + (strLen-suffixLen), suffix, suffixLen) == 0); | |||||
} | |||||
bool CarlaEngine::loadProject(const char* const filename) | bool CarlaEngine::loadProject(const char* const filename) | ||||
{ | { | ||||
CARLA_ASSERT(filename != nullptr); | CARLA_ASSERT(filename != nullptr); | ||||
@@ -1342,7 +1356,16 @@ bool CarlaEngine::loadProject(const char* const filename) | |||||
const void* extraStuff = nullptr; | const void* extraStuff = nullptr; | ||||
if (std::strcmp(saveState.type, "DSSI") == 0) | if (std::strcmp(saveState.type, "DSSI") == 0) | ||||
{ | |||||
extraStuff = findDSSIGUI(saveState.binary, saveState.label); | extraStuff = findDSSIGUI(saveState.binary, saveState.label); | ||||
} | |||||
else if (std::strcmp(saveState.type, "SF2") == 0) | |||||
{ | |||||
const char use16OutsSuffix[] = " (16 outs)"; | |||||
if (charEndsWith(saveState.label, use16OutsSuffix)) | |||||
extraStuff = (void*)0x1; // non-null | |||||
} | |||||
// TODO - proper find&load plugins | // TODO - proper find&load plugins | ||||
if (addPlugin(getPluginTypeFromString(saveState.type), saveState.binary, saveState.name, saveState.label, extraStuff)) | if (addPlugin(getPluginTypeFromString(saveState.type), saveState.binary, saveState.name, saveState.label, extraStuff)) | ||||
@@ -1571,6 +1571,9 @@ public: | |||||
fFilename = filename; | fFilename = filename; | ||||
fLabel = label; | fLabel = label; | ||||
if (kUses16Outs && ! fLabel.endsWith(" (16 outs)")) | |||||
fLabel += " (16 outs)"; | |||||
if (name != nullptr) | if (name != nullptr) | ||||
fName = kData->engine->getUniquePluginName(name); | fName = kData->engine->getUniquePluginName(name); | ||||
else | else | ||||
@@ -1049,6 +1049,9 @@ public: | |||||
fMaker = info.Artists.c_str(); | fMaker = info.Artists.c_str(); | ||||
fFilename = filename; | fFilename = filename; | ||||
if (kUses16Outs && ! fLabel.endsWith(" (16 outs)")) | |||||
fLabel += " (16 outs)"; | |||||
if (name != nullptr) | if (name != nullptr) | ||||
fName = kData->engine->getUniquePluginName(name); | fName = kData->engine->getUniquePluginName(name); | ||||
else | else | ||||
@@ -178,6 +178,32 @@ public: | |||||
return (buffer[pos] >= '0' && buffer[pos] <= '9'); | return (buffer[pos] >= '0' && buffer[pos] <= '9'); | ||||
} | } | ||||
bool startsWith(const char* const prefix) const | |||||
{ | |||||
if (prefix == nullptr) | |||||
return false; | |||||
const size_t prefixLen(std::strlen(prefix)); | |||||
if (bufferLen < prefixLen) | |||||
return false; | |||||
return (std::strncmp(buffer + (bufferLen-prefixLen), prefix, prefixLen) == 0); | |||||
} | |||||
bool endsWith(const char* const suffix) const | |||||
{ | |||||
if (suffix == nullptr) | |||||
return false; | |||||
const size_t suffixLen(std::strlen(suffix)); | |||||
if (bufferLen < suffixLen) | |||||
return false; | |||||
return (std::strncmp(buffer + (bufferLen-suffixLen), suffix, suffixLen) == 0); | |||||
} | |||||
void clear() | void clear() | ||||
{ | { | ||||
truncate(0); | truncate(0); | ||||