summaryrefslogtreecommitdiffstats
path: root/src/effects/effectchainmanager.cpp
diff options
context:
space:
mode:
authorbe_ <be.0@gmx.com>2017-04-18 23:27:07 -0500
committerbe_ <be.0@gmx.com>2017-04-18 23:27:07 -0500
commit4375f3bf809c7680516b462865aa42f33f7aa3a1 (patch)
tree50a62baf3fafe969a787d90a2fd8b672aef9150f /src/effects/effectchainmanager.cpp
parentbf5e71f24a57a059ec8f9efc1c9de1354cb866bb (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.cpp36
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;
}