diff options
author | be_ <be.0@gmx.com> | 2017-04-18 23:27:07 -0500 |
---|---|---|
committer | be_ <be.0@gmx.com> | 2017-04-18 23:27:07 -0500 |
commit | 4375f3bf809c7680516b462865aa42f33f7aa3a1 (patch) | |
tree | 50a62baf3fafe969a787d90a2fd8b672aef9150f /src/effects/effectchainmanager.cpp | |
parent | bf5e71f24a57a059ec8f9efc1c9de1354cb866bb (diff) |
make sure effect chains are initialized properly
if effects.xml is a valid XML file but does not contain enough
<EffectChain> elements
Diffstat (limited to 'src/effects/effectchainmanager.cpp')
-rw-r--r-- | src/effects/effectchainmanager.cpp | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/src/effects/effectchainmanager.cpp b/src/effects/effectchainmanager.cpp index f196fda1aa..28becd2841 100644 --- a/src/effects/effectchainmanager.cpp +++ b/src/effects/effectchainmanager.cpp @@ -174,32 +174,17 @@ QList<std::pair<EffectChainPointer, QDomElement>> EffectChainManager::loadEffect QFile file(settingsPath.absoluteFilePath("effects.xml")); QDomDocument doc; - if (!file.open(QIODevice::ReadOnly)) { - EffectChainPointer pEmptyChain; - QDomElement emptyChainElement = doc.createElement(EffectXml::Chain); - for (int i = 0; i < kNumEffectsPerUnit; ++i) { - pEmptyChain = EffectChainPointer(new EffectChain(m_pEffectsManager, - QString(), - EffectChainPointer())); + QDomElement emptyChainElement = doc.createElement(EffectXml::Chain); + // Check that XML file can be opened and is valid XML + if (!file.open(QIODevice::ReadOnly) || !doc.setContent(&file)) { + for (int i = 0; i < kNumStandardEffectChains; ++i) { + EffectChainPointer pEmptyChain = EffectChainPointer( + new EffectChain(m_pEffectsManager, QString(), EffectChainPointer())); loadedChains.append(std::make_pair(pEmptyChain, emptyChainElement)); } return loadedChains; } - if (!doc.setContent(&file)) { - file.close(); - EffectChainPointer pEmptyChain; - QDomElement emptyChainElement = doc.createElement(EffectXml::Chain); - for (int i = 0; i < kNumEffectsPerUnit; ++i) { - pEmptyChain = EffectChainPointer(new EffectChain(m_pEffectsManager, - QString(), - EffectChainPointer())); - loadedChains.append(std::make_pair(pEmptyChain, emptyChainElement)); - } - return loadedChains; - } - file.close(); - QDomElement root = doc.documentElement(); QDomElement rackElement = XmlParse::selectElement(root, EffectXml::Rack); QDomElement chainsElement = XmlParse::selectElement(rackElement, EffectXml::ChainsRoot); @@ -217,5 +202,14 @@ QList<std::pair<EffectChainPointer, QDomElement>> EffectChainManager::loadEffect m_effectChains.append(pChain); } } + + // Make sure there are enough chains if the XML file does not have + // enough <EffectChain> elements + for (int i = loadedChains.size(); i < kNumStandardEffectChains; ++i) { + EffectChainPointer pEmptyChain = EffectChainPointer( + new EffectChain(m_pEffectsManager, QString(), EffectChainPointer())); + loadedChains.append(std::make_pair(pEmptyChain, emptyChainElement)); + } + return loadedChains; } |