Copy prests between banks; preset multi-select.
This commit is contained in:
+5
-1
@@ -228,7 +228,11 @@ namespace pipedal
|
||||
{
|
||||
newSelection = presets_[i]->instanceId();
|
||||
}
|
||||
else if (presets_.size() > 1)
|
||||
else if (i == presets_.size() && i != 0) {
|
||||
newSelection = presets_[i-1]->instanceId();
|
||||
|
||||
}
|
||||
else if (presets_.size() >= 1)
|
||||
{
|
||||
newSelection = presets_[0]->instanceId();
|
||||
}
|
||||
|
||||
+10
-5
@@ -1174,12 +1174,12 @@ int64_t PiPedalModel::DeleteBank(int64_t clientId, int64_t instanceId)
|
||||
return newSelection;
|
||||
}
|
||||
|
||||
int64_t PiPedalModel::DeletePreset(int64_t clientId, int64_t instanceId)
|
||||
int64_t PiPedalModel::DeletePresets(int64_t clientId, const std::vector<int64_t> &presetInstanceIds)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> guard{mutex};
|
||||
int64_t oldSelection = storage.GetCurrentPresetId();
|
||||
int64_t newSelection = storage.DeletePreset(instanceId);
|
||||
this->FirePresetsChanged(clientId); // fire now.
|
||||
int64_t newSelection = storage.DeletePresets(presetInstanceIds);
|
||||
this->FirePresetsChanged(clientId); // fire BEFORE we load a new preset.
|
||||
if (oldSelection != newSelection)
|
||||
{
|
||||
this->LoadPreset(
|
||||
@@ -3270,10 +3270,15 @@ int64_t PiPedalModel::ImportPresetsFromBank(int64_t bankInstanceId, const std::v
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(mutex);
|
||||
uint64_t lastAdded = storage.ImportPresetsFromBank(bankInstanceId, presets);
|
||||
if (lastAdded != -1) {
|
||||
|
||||
}
|
||||
FirePresetsChanged(-1);
|
||||
return lastAdded;
|
||||
|
||||
}
|
||||
int64_t PiPedalModel::CopyPresetsToBank(int64_t bankInstanceId, const std::vector<int64_t> &presets)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(mutex);
|
||||
uint64_t lastAdded = storage.CopyPresetsToBank(bankInstanceId, presets);
|
||||
return lastAdded;
|
||||
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ namespace pipedal
|
||||
void LoadPreset(int64_t clientId, int64_t instanceId);
|
||||
bool UpdatePresets(int64_t clientId, const PresetIndex &presets);
|
||||
void UpdatePluginPresets(const PluginUiPresets &pluginPresets);
|
||||
int64_t DeletePreset(int64_t clientId, int64_t instanceId);
|
||||
int64_t DeletePresets(int64_t clientId, const std::vector<int64_t> &presetInstanceIds);
|
||||
bool RenamePreset(int64_t clientId, int64_t instanceId, const std::string &name);
|
||||
int64_t CopyPreset(int64_t clientId, int64_t fromIndex, int64_t toIndex);
|
||||
uint64_t CopyPluginPreset(const std::string &pluginUri, uint64_t presetId);
|
||||
@@ -496,6 +496,7 @@ namespace pipedal
|
||||
|
||||
std::vector<PresetIndexEntry> RequestBankPresets(int64_t bankInstanceId);
|
||||
int64_t ImportPresetsFromBank(int64_t bankInstanceId, const std::vector<int64_t> &presets);
|
||||
int64_t CopyPresetsToBank(int64_t bankInstanceId, const std::vector<int64_t> &presets);
|
||||
};
|
||||
|
||||
} // namespace pipedal.
|
||||
+22
-5
@@ -46,6 +46,17 @@
|
||||
using namespace std;
|
||||
using namespace pipedal;
|
||||
|
||||
class CopyPresetsToBankBody {
|
||||
public:
|
||||
int64_t bankInstanceId_;
|
||||
std::vector<int64_t> presets_;
|
||||
DECLARE_JSON_MAP(CopyPresetsToBankBody);
|
||||
};
|
||||
JSON_MAP_BEGIN(CopyPresetsToBankBody)
|
||||
JSON_MAP_REFERENCE(CopyPresetsToBankBody, bankInstanceId)
|
||||
JSON_MAP_REFERENCE(CopyPresetsToBankBody, presets)
|
||||
JSON_MAP_END()
|
||||
|
||||
|
||||
class ImportPresetsFromBankBody {
|
||||
public:
|
||||
@@ -1470,12 +1481,12 @@ public:
|
||||
model.RequestShutdown(true);
|
||||
this->Reply(replyTo, "restart");
|
||||
}
|
||||
else if (message == "deletePresetItem")
|
||||
else if (message == "deletePresetItems")
|
||||
{
|
||||
int64_t instanceId = 0;
|
||||
pReader->read(&instanceId);
|
||||
int64_t result = model.DeletePreset(this->clientId, instanceId);
|
||||
this->Reply(replyTo, "deletePresetItem", result);
|
||||
std::vector<int64_t> items;
|
||||
pReader->read(&items);
|
||||
int64_t result = model.DeletePresets(this->clientId, items);
|
||||
this->Reply(replyTo, "deletePresetItems", result);
|
||||
}
|
||||
else if (message == "deleteBankItem")
|
||||
{
|
||||
@@ -1831,6 +1842,12 @@ public:
|
||||
auto result = this->model.ImportPresetsFromBank(args.bankInstanceId_, args.presets_);
|
||||
this->Reply(replyTo,"importPresetsFromBank",result);
|
||||
}
|
||||
else if (message == "copyPresetsToBank") {
|
||||
CopyPresetsToBankBody args;
|
||||
pReader->read(&args);
|
||||
auto result = this->model.CopyPresetsToBank(args.bankInstanceId_, args.presets_);
|
||||
this->Reply(replyTo,"copyPresetsToBank",result);
|
||||
}
|
||||
else
|
||||
{
|
||||
Lv2Log::error("Unknown message received: %s", message.c_str());
|
||||
|
||||
+34
-2
@@ -764,6 +764,35 @@ int64_t Storage::ImportPresetsFromBank(int64_t bankInstanceId, const std::vector
|
||||
SaveCurrentBank();
|
||||
return lastPresetId;
|
||||
}
|
||||
int64_t Storage::CopyPresetsToBank(int64_t bankInstanceId, const std::vector<int64_t> &presets)
|
||||
{
|
||||
if (bankIndex.selectedBank() == bankInstanceId) {
|
||||
throw std::runtime_error("Can't copy to self.");
|
||||
}
|
||||
|
||||
auto indexEntry = this->bankIndex.getBankIndexEntry(bankInstanceId);
|
||||
BankFile bankFile;
|
||||
LoadBankFile(indexEntry.name(),&bankFile);
|
||||
|
||||
std::set<int64_t> presetsSet { presets.begin(), presets.end()};
|
||||
|
||||
std::set<std::string> existingNames;
|
||||
|
||||
for (auto&preset: bankFile.presets()) {
|
||||
existingNames.insert(preset->preset().name());
|
||||
}
|
||||
for (auto &presetEntry: this->currentBank.presets()) {
|
||||
if (presetsSet.contains(presetEntry->instanceId())) {
|
||||
std::string uniqueName = makeUniqueName(presetEntry->preset().name(),existingNames);
|
||||
existingNames.insert(uniqueName);
|
||||
Pedalboard t = presetEntry->preset();
|
||||
t.name(uniqueName);
|
||||
bankFile.addPreset(t);
|
||||
}
|
||||
}
|
||||
SaveBankFile(indexEntry.name(),bankFile);
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::vector<PresetIndexEntry> Storage::RequestBankPresets(int64_t bankInstanceId)
|
||||
{
|
||||
@@ -852,9 +881,12 @@ Pedalboard Storage::GetPreset(int64_t instanceId) const
|
||||
throw PiPedalException("Not found.");
|
||||
}
|
||||
|
||||
int64_t Storage::DeletePreset(int64_t presetId)
|
||||
int64_t Storage::DeletePresets(const std::vector<int64_t> &presetInstanceIds)
|
||||
{
|
||||
int64_t newSelection = currentBank.deletePreset(presetId);
|
||||
int64_t newSelection = currentBank.selectedPreset();
|
||||
for (auto presetId: presetInstanceIds) {
|
||||
newSelection = currentBank.deletePreset(presetId);
|
||||
}
|
||||
SaveCurrentBank();
|
||||
return newSelection;
|
||||
}
|
||||
|
||||
+2
-1
@@ -162,7 +162,7 @@ public:
|
||||
|
||||
|
||||
bool LoadPreset(int64_t presetId);
|
||||
int64_t DeletePreset(int64_t presetId);
|
||||
int64_t DeletePresets(const std::vector<int64_t>& presetInstanceIds);
|
||||
bool RenamePreset(int64_t presetId, const std::string&name);
|
||||
int64_t CopyPreset(int64_t fromId, int64_t toId = -1);
|
||||
int64_t CreateNewPreset();
|
||||
@@ -271,6 +271,7 @@ public:
|
||||
|
||||
std::vector<PresetIndexEntry> RequestBankPresets(int64_t bankInstanceId);
|
||||
int64_t ImportPresetsFromBank(int64_t bankInstanceId, const std::vector<int64_t> &presets);
|
||||
int64_t CopyPresetsToBank(int64_t bankInstanceId, const std::vector<int64_t> &presets);
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user