int LoadSave::getNumPatches() { File bank_directory = getBankDirectory(); Array<File> patches; bank_directory.findChildFiles(patches, File::findFiles, true, String("*.") + mopo::PATCH_EXTENSION); return patches.size(); }
File LoadSave::getUserBankDirectory() { File bank_dir = getBankDirectory(); File folder_dir = bank_dir.getChildFile(USER_BANK_NAME); if (!folder_dir.exists()) { folder_dir.createDirectory(); for (String patch_folder : DEFAULT_USER_FOLDERS) folder_dir.getChildFile(patch_folder).createDirectory(); } return folder_dir; }
File LoadSave::getPatchFile(int bank_index, int folder_index, int patch_index) { static const FileSorterAscending file_sorter; File bank_directory = getBankDirectory(); Array<File> banks; bank_directory.findChildFiles(banks, File::findDirectories, false); banks.sort(file_sorter); if (banks.size() == 0) return File(); if (bank_index >= 0) { File bank = banks[std::min(bank_index, banks.size() - 1)]; banks.clear(); banks.add(bank); } Array<File> folders; for (File bank : banks) { Array<File> bank_folders; bank.findChildFiles(bank_folders, File::findDirectories, false); bank_folders.sort(file_sorter); folders.addArray(bank_folders); } if (folders.size() == 0) return File(); if (folder_index >= 0) { File folder = folders[std::min(folder_index, folders.size() - 1)]; folders.clear(); folders.add(folder); } Array<File> patches; for (File folder : folders) { Array<File> folder_patches; folder.findChildFiles(folder_patches, File::findFiles, false, String("*.") + mopo::PATCH_EXTENSION); folder_patches.sort(file_sorter); patches.addArray(folder_patches); } if (patches.size() == 0 || patch_index < 0) return File(); return patches[std::min(patch_index, patches.size() - 1)]; }
bool LoadSave::wasUpgraded() { var config_state = getConfigVar(); DynamicObject* config_object = config_state.getDynamicObject(); if (!config_state.isObject()) return true; if (!config_object->hasProperty("synth_version")) return true; Array<File> patches; String extension = String("*.") + mopo::PATCH_EXTENSION; getBankDirectory().findChildFiles(patches, File::findFiles, true, extension); if (patches.size() == 0) return true; return compareVersionStrings(config_object->getProperty("synth_version"), ProjectInfo::versionString) < 0; }