commit be2bc97ad7415157639ffe50c0ea784e0e8ddc4c
parent cfd340c587f636166d85387bc19d96704f9ea873
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sun, 8 Dec 2024 17:10:16 +0100
use filename as default patch name if there is exactly one patch in a file
Diffstat:
13 files changed, 36 insertions(+), 18 deletions(-)
diff --git a/source/jucePluginEditorLib/patchmanager/patchmanager.cpp b/source/jucePluginEditorLib/patchmanager/patchmanager.cpp
@@ -22,6 +22,8 @@
#include "dsp56kEmu/logging.h"
+#include "synthLib/os.h"
+
#if JUCE_MAJOR_VERSION < 8 // they forgot this include but fixed it in version 8+
#include "juce_gui_extra/misc/juce_ColourSelector.h"
#endif
@@ -760,9 +762,11 @@ namespace jucePluginEditorLib::patchManager
if(!loadFile(results, file) || results.empty())
continue;
+ const auto defaultName = results.size() == 1 ? synthLib::stripExtension(synthLib::getFilenameWithoutPath(file)) : "";
+
for (auto& result : results)
{
- if(const auto patch = initializePatch(std::move(result)))
+ if(const auto patch = initializePatch(std::move(result), defaultName))
patches.push_back(patch);
}
}
@@ -825,7 +829,7 @@ namespace jucePluginEditorLib::patchManager
pluginLib::patchDB::Data data;
if(!requestPatchForPart(data, _part, 0))
return;
- const auto patch = initializePatch(std::move(data));
+ const auto patch = initializePatch(std::move(data), {});
if(!patch)
return;
updateStateAsync(_part, patch);
@@ -1034,7 +1038,7 @@ namespace jucePluginEditorLib::patchManager
for (auto& result : data.sysex)
{
- if(const auto patch = initializePatch(std::move(result)))
+ if(const auto patch = initializePatch(std::move(result), {}))
patches.push_back(patch);
}
diff --git a/source/jucePluginLib/patchdb/db.cpp b/source/jucePluginLib/patchdb/db.cpp
@@ -604,7 +604,7 @@ namespace pluginLib::patchDB
{
Data data;
requestPatchForPart(data, _part, _userData);
- return initializePatch(std::move(data));
+ return initializePatch(std::move(data), {});
}
void DB::getTags(const TagType _type, std::set<Tag>& _tags)
@@ -959,9 +959,11 @@ namespace pluginLib::patchDB
std::vector<PatchPtr> patches;
patches.reserve(data.size());
+ const std::string defaultName = data.size() == 1 ? synthLib::stripExtension(synthLib::getFilenameWithoutPath(ds->name)) : "";
+
for (uint32_t p = 0; p < data.size(); ++p)
{
- if (const auto patch = initializePatch(std::move(data[p])))
+ if (const auto patch = initializePatch(std::move(data[p]), defaultName))
{
patch->source = ds->weak_from_this();
diff --git a/source/jucePluginLib/patchdb/db.h b/source/jucePluginLib/patchdb/db.h
@@ -95,7 +95,7 @@ namespace pluginLib::patchDB
virtual bool loadFile(DataList& _results, const std::string& _file);
virtual bool loadLocalStorage(DataList& _results, const DataSource& _ds);
virtual bool loadFolder(const DataSourceNodePtr& _folder);
- virtual PatchPtr initializePatch(Data&& _sysex) = 0;
+ virtual PatchPtr initializePatch(Data&& _sysex, const std::string& _defaultPatchName) = 0;
virtual Data applyModifications(const PatchPtr& _patch) const = 0;
virtual bool parseFileData(DataList& _results, const Data& _data);
virtual bool equals(const PatchPtr& _a, const PatchPtr& _b) const
diff --git a/source/mqJucePlugin/mqPatchManager.cpp b/source/mqJucePlugin/mqPatchManager.cpp
@@ -38,7 +38,7 @@ namespace mqJucePlugin
return false;
}
- pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex)
+ pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName)
{
pluginLib::MidiPacket::Data data;
pluginLib::MidiPacket::AnyPartParamValues parameters;
diff --git a/source/mqJucePlugin/mqPatchManager.h b/source/mqJucePlugin/mqPatchManager.h
@@ -16,7 +16,7 @@ namespace mqJucePlugin
// PatchManager overrides
bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override;
bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override;
- pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex) override;
+ pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) override;
pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override;
uint32_t getCurrentPart() const override;
bool activatePatch(const pluginLib::patchDB::PatchPtr& _patch, uint32_t _part) override;
diff --git a/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp b/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp
@@ -47,7 +47,7 @@ namespace n2xJucePlugin
return false;
}
- pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex)
+ pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName)
{
if(!isValidPatchDump(_sysex))
return {};
@@ -82,7 +82,7 @@ namespace n2xJucePlugin
p->tags.add(pluginLib::patchDB::TagType::Tag, "Mono");
}
- p->name = getPatchName(_sysex);
+ p->name = getPatchName(_sysex, _defaultPatchName);
p->sysex = std::move(_sysex);
p->program = program;
p->bank = bank;
@@ -134,10 +134,10 @@ namespace n2xJucePlugin
return jucePluginEditorLib::patchManager::PatchManager::parseFileData(_results, _data);
}
- std::string PatchManager::getPatchName(const pluginLib::patchDB::Data& _sysex)
+ std::string PatchManager::getPatchName(const pluginLib::patchDB::Data& _sysex, const std::string& _defaultPatchName/* = {}*/)
{
if(!isValidPatchDump(_sysex))
- return {};
+ return _defaultPatchName;
{
const auto nameFromDump = n2x::State::extractPatchName(_sysex);
@@ -145,6 +145,9 @@ namespace n2xJucePlugin
return nameFromDump;
}
+ if (!_defaultPatchName.empty())
+ return _defaultPatchName;
+
const auto isSingle = n2x::State::isSingleDump(_sysex);
const auto bank = _sysex[n2x::SysexIndex::IdxMsgType];
diff --git a/source/nord/n2x/n2xJucePlugin/n2xPatchManager.h b/source/nord/n2x/n2xJucePlugin/n2xPatchManager.h
@@ -16,13 +16,13 @@ namespace n2xJucePlugin
// PatchManager overrides
bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override;
bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override;
- pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex) override;
+ pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) override;
pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override;
uint32_t getCurrentPart() const override;
bool activatePatch(const pluginLib::patchDB::PatchPtr& _patch, uint32_t _part) override;
bool parseFileData(pluginLib::patchDB::DataList& _results, const pluginLib::patchDB::Data& _data) override;
- static std::string getPatchName(const pluginLib::patchDB::Data& _sysex);
+ static std::string getPatchName(const pluginLib::patchDB::Data& _sysex, const std::string& _defaultPatchName = {});
static bool isValidPatchDump(const pluginLib::patchDB::Data& _sysex);
private:
diff --git a/source/synthLib/os.cpp b/source/synthLib/os.cpp
@@ -233,6 +233,14 @@ namespace synthLib
return {};
}
+ std::string stripExtension(const std::string& _name)
+ {
+ const auto pos = _name.find_last_of('.');
+ if (pos != std::string::npos)
+ return _name.substr(0, pos);
+ return _name;
+ }
+
std::string getFilenameWithoutPath(const std::string& _name)
{
const auto pos = _name.find_last_of("/\\");
diff --git a/source/synthLib/os.h b/source/synthLib/os.h
@@ -25,6 +25,7 @@ namespace synthLib
std::string findROM(size_t _expectedSize = 524288);
std::string getExtension(const std::string& _name);
+ std::string stripExtension(const std::string& _name);
std::string getFilenameWithoutPath(const std::string& _name);
std::string getPath(const std::string& _filename);
diff --git a/source/virusJucePlugin/PatchManager.cpp b/source/virusJucePlugin/PatchManager.cpp
@@ -93,7 +93,7 @@ namespace genericVirusUI
return true;
}
- std::shared_ptr<pluginLib::patchDB::Patch> PatchManager::initializePatch(std::vector<uint8_t>&& _sysex)
+ std::shared_ptr<pluginLib::patchDB::Patch> PatchManager::initializePatch(std::vector<uint8_t>&& _sysex, const std::string& _defaultPatchName)
{
if (_sysex.size() < 267)
return nullptr;
diff --git a/source/virusJucePlugin/PatchManager.h b/source/virusJucePlugin/PatchManager.h
@@ -22,7 +22,7 @@ namespace genericVirusUI
// PatchDB impl
bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override;
- std::shared_ptr<pluginLib::patchDB::Patch> initializePatch(std::vector<uint8_t>&& _sysex) override;
+ std::shared_ptr<pluginLib::patchDB::Patch> initializePatch(std::vector<uint8_t>&& _sysex, const std::string& _defaultPatchName) override;
pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override;
bool parseFileData(std::vector<std::vector<uint8_t>>& _results, const std::vector<uint8_t>& _data) override;
bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override;
diff --git a/source/xtJucePlugin/xtPatchManager.cpp b/source/xtJucePlugin/xtPatchManager.cpp
@@ -43,7 +43,7 @@ namespace xtJucePlugin
return false;
}
- pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex)
+ pluginLib::patchDB::PatchPtr PatchManager::initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName)
{
if(_sysex.size() == xt::Mw1::g_singleDumpLength)
{
diff --git a/source/xtJucePlugin/xtPatchManager.h b/source/xtJucePlugin/xtPatchManager.h
@@ -16,7 +16,7 @@ namespace xtJucePlugin
// PatchManager overrides
bool requestPatchForPart(pluginLib::patchDB::Data& _data, uint32_t _part, uint64_t _userData) override;
bool loadRomData(pluginLib::patchDB::DataList& _results, uint32_t _bank, uint32_t _program) override;
- pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex) override;
+ pluginLib::patchDB::PatchPtr initializePatch(pluginLib::patchDB::Data&& _sysex, const std::string& _defaultPatchName) override;
pluginLib::patchDB::Data applyModifications(const pluginLib::patchDB::PatchPtr& _patch) const override;
uint32_t getCurrentPart() const override;
bool activatePatch(const pluginLib::patchDB::PatchPtr& _patch, uint32_t _part) override;