commit 7294d7c361b43b7195849bd4315f2844069874fc
parent f2a9045627f43b34a82af34f55d5425e86e9ecd3
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sat, 13 Jul 2024 15:44:37 +0200
fix patch manager didn't always restore the selected patch
Diffstat:
5 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/doc/changelog.txt b/doc/changelog.txt
@@ -2,6 +2,10 @@ Release Notes
1.3.16
+Framework:
+
+- [Fix] Patch Manager: Last selected patch was not always restored properly
+
Vavra:
- [Imp] Performance improvements
diff --git a/source/jucePluginEditorLib/patchmanager/patchmanager.cpp b/source/jucePluginEditorLib/patchmanager/patchmanager.cpp
@@ -154,24 +154,26 @@ namespace jucePluginEditorLib::patchManager
void PatchManager::timerCallback()
{
- pluginLib::patchDB::Dirty dirty;
- uiProcess(dirty);
+ uiProcess();
+ }
- m_treeDS->processDirty(dirty);
- m_treeTags->processDirty(dirty);
- m_list->processDirty(dirty);
+ void PatchManager::processDirty(const pluginLib::patchDB::Dirty& _dirty) const
+ {
+ m_treeDS->processDirty(_dirty);
+ m_treeTags->processDirty(_dirty);
+ m_list->processDirty(_dirty);
m_status->setScanning(isScanning());
- m_info->processDirty(dirty);
+ m_info->processDirty(_dirty);
- if(!dirty.errors.empty())
+ if(!_dirty.errors.empty())
{
std::string msg = "Patch Manager encountered errors:\n\n";
- for(size_t i=0; i<dirty.errors.size(); ++i)
+ for(size_t i=0; i<_dirty.errors.size(); ++i)
{
- msg += dirty.errors[i];
- if(i < dirty.errors.size() - 1)
+ msg += _dirty.errors[i];
+ if(i < _dirty.errors.size() - 1)
msg += "\n";
}
diff --git a/source/jucePluginEditorLib/patchmanager/patchmanager.h b/source/jucePluginEditorLib/patchmanager/patchmanager.h
@@ -38,6 +38,7 @@ namespace jucePluginEditorLib::patchManager
~PatchManager() override;
void timerCallback() override;
+ void processDirty(const pluginLib::patchDB::Dirty& _dirty) const override;
void setSelectedItem(Tree* _tree, const TreeItem* _item);
void addSelectedItem(Tree* _tree, const TreeItem* _item);
diff --git a/source/jucePluginLib/patchdb/db.cpp b/source/jucePluginLib/patchdb/db.cpp
@@ -350,18 +350,27 @@ namespace pluginLib::patchDB
return true;
}
- void DB::uiProcess(Dirty& _dirty)
+ void DB::uiProcess()
{
std::list<std::function<void()>> uiFuncs;
+
+ Dirty dirty;
{
std::scoped_lock lock(m_uiMutex);
std::swap(uiFuncs, m_uiFuncs);
- _dirty = m_dirty;
- m_dirty = {};
+ std::swap(dirty, m_dirty);
}
+ processDirty(dirty);
+
for (const auto& func : uiFuncs)
func();
+
+ if(isLoading() && !m_loader.pending())
+ {
+ m_loading = false;
+ onLoadFinished();
+ }
}
uint32_t DB::search(SearchRequest&& _request, SearchCallback&& _callback)
@@ -811,15 +820,6 @@ namespace pluginLib::patchDB
m_loader.add([this, f = std::move(_func)]
{
f();
-
- if(isLoading() && !m_loader.pending())
- {
- runOnUiThread([this]
- {
- m_loading = false;
- onLoadFinished();
- });
- }
});
}
diff --git a/source/jucePluginLib/patchdb/db.h b/source/jucePluginLib/patchdb/db.h
@@ -28,7 +28,7 @@ namespace pluginLib::patchDB
DB(juce::File _dir);
virtual ~DB();
- void uiProcess(Dirty& _dirty);
+ void uiProcess();
DataSourceNodePtr addDataSource(const DataSource& _ds, const DataSourceLoadedCallback& = [](bool, std::shared_ptr<DataSourceNode>) {});
void removeDataSource(const DataSource& _ds, bool _save = true);
@@ -99,6 +99,7 @@ namespace pluginLib::patchDB
virtual Data prepareSave(const PatchPtr& _patch) const = 0;
virtual bool parseFileData(DataList& _results, const Data& _data);
virtual bool equals(const PatchPtr& _a, const PatchPtr& _b) const = 0;
+ virtual void processDirty(const Dirty& _dirty) const = 0;
protected:
virtual void onLoadFinished() {}