Skip to content

Commit 720223c

Browse files
committed
Use correct file reader and migrate old workspace files on update
1 parent f17ef59 commit 720223c

File tree

5 files changed

+34
-10
lines changed

5 files changed

+34
-10
lines changed

src/palette/internal/palette.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,8 @@ bool Palette::readFromFile(const QString& p)
456456
if (e.name() == "museScore") {
457457
QString version = e.attribute("version");
458458
QStringList sl = version.split('.');
459-
int versionId = sl[0].toInt() * 100 + sl[1].toInt();
460-
gpaletteScore->setMscVersion(versionId); // TODO: what is this?
459+
int mscVersion = sl[0].toInt() * 100 + sl[1].toInt();
460+
gpaletteScore->setMscVersion(mscVersion);
461461

462462
while (e.readNextStartElement()) {
463463
if (e.name() == "Palette") {

src/palette/internal/palettecell.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ bool PaletteCell::read(XmlReader& e, bool pasteMode)
222222
} else if (s == "Tremolo") {
223223
compat::TremoloCompat tc;
224224
tc.parent = gpaletteScore->dummy()->chord();
225-
rw::RWRegister::reader()->readTremoloCompat(&tc, e);
225+
rw::RWRegister::reader(gpaletteScore->mscVersion())->readTremoloCompat(&tc, e);
226226
if (tc.single) {
227227
element.reset(tc.single);
228228
} else if (tc.two) {
@@ -239,7 +239,7 @@ bool PaletteCell::read(XmlReader& e, bool pasteMode)
239239
if (!element) {
240240
e.unknown();
241241
} else {
242-
rw::RWRegister::reader()->readItem(element.get(), e);
242+
rw::RWRegister::reader(gpaletteScore->mscVersion())->readItem(element.get(), e);
243243
}
244244
}
245245
}

src/palette/internal/palettetree.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ bool PaletteTree::read(mu::engraving::XmlReader& e, bool pasteMode, const muse::
5757

5858
void PaletteTree::write(mu::engraving::XmlWriter& xml, bool pasteMode) const
5959
{
60-
xml.startElement("PaletteBox"); // for compatibility with old palettes file format
60+
xml.startElement("PaletteBox", { { "version", engraving::Constants::MSC_VERSION_STR } }); // for compatibility with old palettes file format
6161

6262
for (const PalettePtr& palette : palettes) {
6363
palette->write(xml, pasteMode);

src/palette/internal/paletteworkspacesetup.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "palettecreator.h"
2727
#include "../palettetypes.h"
2828

29+
#include "engraving/dom/masterscore.h"
2930
#include "engraving/rw/xmlreader.h"
3031
#include "engraving/rw/xmlwriter.h"
3132

@@ -39,7 +40,7 @@ using namespace muse::workspace;
3940

4041
static const AsciiStringView PALETTE_XML_TAG("PaletteBox");
4142

42-
static PaletteTreePtr readPalette(const ByteArray& data, const muse::modularity::ContextPtr& iocCtx)
43+
PaletteTreePtr PaletteWorkspaceSetup::readPalette(const ByteArray& data, const muse::modularity::ContextPtr& iocCtx)
4344
{
4445
ByteArray ba = ByteArray::fromRawData(data.constData(), data.size());
4546
Buffer buf(&ba);
@@ -50,6 +51,17 @@ static PaletteTreePtr readPalette(const ByteArray& data, const muse::modularity:
5051
reader.readNextStartElement();
5152

5253
if (reader.name() == PALETTE_XML_TAG) {
54+
int mscVersion = 0;
55+
if (reader.hasAttribute("version")) {
56+
const String version = reader.attribute("version");
57+
const StringList sl = version.split(u'.');
58+
mscVersion = sl.size() == 2 ? sl[0].toInt() * 100 + sl[1].toInt() : 0;
59+
} else {
60+
// Versioning workspace palette files started in 4.7. All unversioned files should be treated like 4.6 files
61+
mscVersion = 460;
62+
}
63+
engraving::gpaletteScore->setMscVersion(mscVersion);
64+
5365
PaletteTreePtr tree = std::make_shared<PaletteTree>();
5466
tree->read(reader, false, iocCtx);
5567
return tree;
@@ -59,7 +71,7 @@ static PaletteTreePtr readPalette(const ByteArray& data, const muse::modularity:
5971
return nullptr;
6072
}
6173

62-
static void writePalette(const PaletteTreePtr& tree, QByteArray& data)
74+
void PaletteWorkspaceSetup::writePalette(const PaletteTreePtr& tree, QByteArray& data)
6375
{
6476
Buffer buf;
6577
buf.open(IODevice::WriteOnly);
@@ -77,16 +89,18 @@ void PaletteWorkspaceSetup::setup()
7789

7890
paletteProvider()->setDefaultPaletteTree(PaletteCreator(iocContext()).newDefaultPaletteTree());
7991

80-
paletteProvider()->userPaletteTreeChanged().onNotify(this, [this]() {
92+
auto saveData = [this]() {
8193
PaletteTreePtr tree = paletteProvider()->userPaletteTree();
8294

8395
QByteArray newData;
8496
writePalette(tree, newData);
8597

8698
workspacesDataProvider()->setRawData(WS_Palettes, newData);
87-
});
99+
};
100+
101+
paletteProvider()->userPaletteTreeChanged().onNotify(this, saveData);
88102

89-
auto loadData = [this]() {
103+
auto loadData = [this, saveData]() {
90104
RetVal<QByteArray> data = workspacesDataProvider()->rawData(WS_Palettes);
91105
PaletteTreePtr tree;
92106
if (data.ret && !data.val.isEmpty()) {
@@ -98,6 +112,12 @@ void PaletteWorkspaceSetup::setup()
98112
tree = PaletteCreator(iocContext()).newDefaultPaletteTree();
99113
}
100114
paletteProvider()->setUserPaletteTree(tree);
115+
116+
if (engraving::gpaletteScore->mscVersion() < engraving::Constants::MSC_VERSION) {
117+
LOGD() << "Workspace file found with palette file version " << engraving::gpaletteScore->mscVersion() <<
118+
". Migrating palette file to " << engraving::Constants::MSC_VERSION;
119+
saveData();
120+
}
101121
};
102122

103123
workspacesDataProvider()->workspaceChanged().onNotify(this, loadData);

src/palette/internal/paletteworkspacesetup.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ class PaletteWorkspaceSetup : public muse::async::Asyncable, public muse::Inject
4141
}
4242

4343
void setup();
44+
45+
private:
46+
PaletteTreePtr readPalette(const muse::ByteArray& data, const muse::modularity::ContextPtr& iocCtx);
47+
void writePalette(const PaletteTreePtr& tree, QByteArray& data);
4448
};
4549
}
4650

0 commit comments

Comments
 (0)