Hi friends,
This is sort of a follow-up to this earlier post – I’ve decided to implement my own onboard preset browser/loading & saving capabilities within my plugin. Doing file management in Juce is completely new to me, so I apologize if these are basic questions, but I want to make sure I’m not making any silly mistakes.
First, I tried my hand at creating a function that would return the path to where preset files should be loaded from & saved to. I’m hoping this will work on Mac, Windows, or Linux…
File ImogenAudioProcessor::getPresetsFolder()
{
File rootFolder = File::getSpecialLocation(File::SpecialLocationType::userApplicationDataDirectory);
#ifdef JUCE_MAC
rootFolder = rootFolder.getChildFile("Audio").getChildFile("Presets");
#endif
rootFolder = rootFolder.getChildFile("Ben Vining Music Software").getChildFile("Imogen"); // "Imogen" is the name of my plugin
Result res = rootFolder.createDirectory(); // creates if not existing
return rootFolder;
};
Are there any glaring issues with this? Do I need to add any conditional code to get this to work for Windows or Linux?
Here are my functions to save, load and delete preset files. I don’t have a specific question here, but I would greatly appreciate it if anyone could point out any glaring errors or stupid mistakes…
void ImogenAudioProcessor::savePreset(String presetName)
{
// this should work for saving new presets or altering existing ones, I think...
File writingTo = getPresetsFolder().getChildFile(presetName);
auto state = tree.copyState();
std::unique_ptr<juce::XmlElement> xml (state.createXml());
bool existed = writingTo.existsAsFile();
xml->writeTo(writingTo); // if the file already existed, does it need to be cleared first?
if(! existed)
writingTo.setCreationTime(Time::getCurrentTime());
writingTo.setLastModificationTime(Time::getCurrentTime());
};
void ImogenAudioProcessor::loadPreset(String presetName)
{
File presetToLoad = getPresetsFolder().getChildFile(presetName);
if(presetToLoad.existsAsFile())
{
setStateInformation(&presetToLoad, int(presetToLoad.getSize()));
presetToLoad.setLastAccessTime(Time::getCurrentTime());
}
};
void ImogenAudioProcessor::deletePreset(String presetName)
{
File presetToDelete = getPresetsFolder().getChildFile(presetName);
if(presetToDelete.existsAsFile())
presetToDelete.moveToTrash(); // or should I use .deleteFile() ?
};
Thanks everyone!