add a static flag to force writing LV2 state
This is needed for save-as and archiving, LV2 state may not be saved otherwise if lilv_state_equals() returns true. Also if thestate is saved as part of save-as or archiving or template, the state-version did increase. Upcoming normal save will reference a plugin state that does not exist in the current session bundle.
This commit is contained in:
parent
ad0aef7dce
commit
1acfb11cb6
@ -63,6 +63,8 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
|
|||||||
LV2Plugin (const LV2Plugin &);
|
LV2Plugin (const LV2Plugin &);
|
||||||
~LV2Plugin ();
|
~LV2Plugin ();
|
||||||
|
|
||||||
|
static bool force_state_save;
|
||||||
|
|
||||||
std::string unique_id () const;
|
std::string unique_id () const;
|
||||||
const char* uri () const;
|
const char* uri () const;
|
||||||
const char* label () const;
|
const char* label () const;
|
||||||
|
@ -109,6 +109,8 @@ using namespace std;
|
|||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
|
|
||||||
|
bool LV2Plugin::force_state_save = false;
|
||||||
|
|
||||||
class LV2World : boost::noncopyable {
|
class LV2World : boost::noncopyable {
|
||||||
public:
|
public:
|
||||||
LV2World ();
|
LV2World ();
|
||||||
@ -1248,7 +1250,7 @@ LV2Plugin::add_state(XMLNode* root) const
|
|||||||
0,
|
0,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (!_plugin_state_dir.empty()
|
if (!_plugin_state_dir.empty() || force_state_save
|
||||||
|| !_impl->state
|
|| !_impl->state
|
||||||
|| !lilv_state_equals(state, _impl->state)) {
|
|| !lilv_state_equals(state, _impl->state)) {
|
||||||
lilv_state_save(_world.world,
|
lilv_state_save(_world.world,
|
||||||
@ -1259,13 +1261,19 @@ LV2Plugin::add_state(XMLNode* root) const
|
|||||||
new_dir.c_str(),
|
new_dir.c_str(),
|
||||||
"state.ttl");
|
"state.ttl");
|
||||||
|
|
||||||
if (_plugin_state_dir.empty()) {
|
if (force_state_save) {
|
||||||
|
// archive or save-as
|
||||||
|
lilv_state_free(state);
|
||||||
|
--_state_version;
|
||||||
|
}
|
||||||
|
else if (_plugin_state_dir.empty()) {
|
||||||
// normal session save
|
// normal session save
|
||||||
lilv_state_free(_impl->state);
|
lilv_state_free(_impl->state);
|
||||||
_impl->state = state;
|
_impl->state = state;
|
||||||
} else {
|
} else {
|
||||||
// template save (dedicated state-dir)
|
// template save (dedicated state-dir)
|
||||||
lilv_state_free(state);
|
lilv_state_free(state);
|
||||||
|
--_state_version;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// State is identical, decrement version and nuke directory
|
// State is identical, decrement version and nuke directory
|
||||||
|
Loading…
Reference in New Issue
Block a user