@@ -22,6 +22,26 @@ patch_meta_t patch_meta_t::fromValueTree(ValueTree& vt) {
2222 return patch;
2323}
2424
25+ // --------------------------------------------------
26+
27+ ValueTree wave_meta_t::toValueTree (const wave_meta_t & wave) {
28+ ValueTree vt (ID ::WAVE_INFO );
29+ vt.setProperty (ID ::waveName, wave.name , nullptr );
30+ vt.setProperty (ID ::wavePath, wave.path , nullptr );
31+ vt.setProperty (ID ::waveAuthor, wave.author , nullptr );
32+ vt.setProperty (ID ::waveCategory, wave.category , nullptr );
33+
34+ return vt;
35+ }
36+
37+ wave_meta_t wave_meta_t::fromValueTree (ValueTree& vt) {
38+ wave_meta_t wave;
39+ wave.name = vt[ID ::waveName];
40+ wave.author = vt[ID ::waveAuthor];
41+ wave.path = vt[ID ::wavePath];
42+ wave.category = vt[ID ::waveCategory];
43+ return wave;
44+ }
2545// ===================================================
2646namespace UserFiles {
2747
@@ -32,7 +52,6 @@ File getPatchesFolder() {
3252 .getChildFile (" Patches" );
3353 if (!folder.exists () || !folder.isDirectory ())
3454 folder.createDirectory ();
35- DLog::log (" Patches folder is at: " + String (folder.getFullPathName ()));
3655 return folder;
3756}
3857
@@ -55,6 +74,14 @@ bool isValidPatch(const File& file) {
5574 return child.isValid ();
5675}
5776
77+ bool isValidWave (const File& file) {
78+ auto str = file.loadFileAsString ();
79+ ValueTree parent = ValueTree::fromXml (str);
80+ if (!parent.isValid ())
81+ return false ;
82+ return parent.hasType (ID ::PATCH_INFO );
83+ }
84+
5885bool attemptPatchSave (ValueTree& state) {
5986 auto patchTree = state.getChildWithName (ID ::PATCH_INFO );
6087 if (!patchTree.isValid ())
@@ -69,6 +96,17 @@ bool attemptPatchSave(ValueTree& state) {
6996 return file.replaceWithText (xml);
7097}
7198
99+ bool attemptWaveSave (const wave_meta_t & waveData, const String& waveString) {
100+ wave_meta_t wd = waveData;
101+ auto dir = getWavetablesFolder ();
102+ auto file = dir.getNonexistentChildFile (wd.name , waveFileExt, false );
103+ wd.path = file.getRelativePathFrom (dir);
104+ auto vt = wave_meta_t::toValueTree (wd);
105+ vt.setProperty (ID ::waveStringData, waveString, nullptr );
106+ auto xml = vt.toXmlString ();
107+ return file.replaceWithText (xml);
108+ }
109+
72110std::vector<patch_meta_t > getAvailiblePatches () {
73111 std::vector<patch_meta_t > vec;
74112 auto patches = getPatchesFolder ();
@@ -84,6 +122,20 @@ std::vector<patch_meta_t> getAvailiblePatches() {
84122 return vec;
85123}
86124
125+ std::vector<wave_meta_t > getAvailableWaves () {
126+ std::vector<wave_meta_t > vec;
127+ auto folder = getWavetablesFolder ();
128+ auto waves = folder.findChildFiles (File::findFiles, true );
129+ for (auto & wave : waves) {
130+ auto str = wave.loadFileAsString ();
131+ auto parent = ValueTree::fromXml (str);
132+ if (parent.isValid ()) {
133+ vec.push_back (wave_meta_t::fromValueTree (parent));
134+ }
135+ }
136+ return vec;
137+ }
138+
87139} // namespace UserFiles
88140// ===================================================
89141
0 commit comments