You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
7.2KB

  1. /* Copyright 2013-2019 Matt Tytel
  2. *
  3. * vital is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 3 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * vital is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with vital. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #pragma once
  17. #include "JuceHeader.h"
  18. #include "json/json.h"
  19. #include <map>
  20. #include <set>
  21. #include <string>
  22. using json = nlohmann::json;
  23. namespace vital {
  24. class StringLayout;
  25. }
  26. class MidiManager;
  27. class SynthBase;
  28. class LoadSave {
  29. public:
  30. class FileSorterAscending {
  31. public:
  32. FileSorterAscending() { }
  33. static int compareElements(File a, File b) {
  34. return a.getFullPathName().toLowerCase().compareNatural(b.getFullPathName().toLowerCase());
  35. }
  36. private:
  37. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(FileSorterAscending)
  38. };
  39. enum PresetStyle {
  40. kBass,
  41. kLead,
  42. kKeys,
  43. kPad,
  44. kPercussion,
  45. kSequence,
  46. kExperimental,
  47. kSfx,
  48. kTemplate,
  49. kNumPresetStyles
  50. };
  51. static const int kMaxCommentLength = 500;
  52. static const std::string kUserDirectoryName;
  53. static const std::string kPresetFolderName;
  54. static const std::string kWavetableFolderName;
  55. static const std::string kSkinFolderName;
  56. static const std::string kSampleFolderName;
  57. static const std::string kLfoFolderName;
  58. static const std::string kAdditionalWavetableFoldersName;
  59. static const std::string kAdditionalSampleFoldersName;
  60. static void convertBufferToPcm(json& data, const std::string& field);
  61. static void convertPcmToFloatBuffer(json& data, const std::string& field);
  62. static json stateToJson(SynthBase* synth, const CriticalSection& critical_section);
  63. static void loadControls(SynthBase* synth, const json& data);
  64. static void loadModulations(SynthBase* synth, const json& modulations);
  65. static void loadSample(SynthBase* synth, const json& sample);
  66. static void loadWavetables(SynthBase* synth, const json& wavetables);
  67. static void loadLfos(SynthBase* synth, const json& lfos);
  68. static void loadSaveState(std::map<std::string, String>& save_info, json data);
  69. static void initSaveInfo(std::map<std::string, String>& save_info);
  70. static json updateFromOldVersion(json state);
  71. static bool jsonToState(SynthBase* synth, std::map<std::string, String>& save_info, json state);
  72. static String getAuthorFromFile(const File& file);
  73. static String getStyleFromFile(const File& file);
  74. static std::string getAuthor(json file);
  75. static std::string getLicense(json state);
  76. static File getConfigFile();
  77. static void writeCrashLog(String crash_log);
  78. static void writeErrorLog(String error_log);
  79. static json getConfigJson();
  80. static File getFavoritesFile();
  81. static File getDefaultSkin();
  82. static json getFavoritesJson();
  83. static void addFavorite(const File& new_favorite);
  84. static void removeFavorite(const File& old_favorite);
  85. static std::set<std::string> getFavorites();
  86. static bool hasDataDirectory();
  87. static File getAvailablePacksFile();
  88. static json getAvailablePacks();
  89. static File getInstalledPacksFile();
  90. static json getInstalledPacks();
  91. static void saveInstalledPacks(const json& packs);
  92. static void markPackInstalled(int id);
  93. static void markPackInstalled(const std::string& name);
  94. static void saveDataDirectory(const File& data_directory);
  95. static bool isInstalled();
  96. static bool wasUpgraded();
  97. static bool isExpired();
  98. static bool doesExpire();
  99. static int getDaysToExpire();
  100. static bool shouldCheckForUpdates();
  101. static bool shouldWorkOffline();
  102. static std::string getLoadedSkin();
  103. static bool shouldAnimateWidgets();
  104. static bool displayHzFrequency();
  105. static bool authenticated();
  106. static int getOversamplingAmount();
  107. static float loadWindowSize();
  108. static String loadVersion();
  109. static String loadContentVersion();
  110. static void saveJsonToConfig(json config_state);
  111. static void saveJsonToFavorites(json favorites_json);
  112. static void saveAuthor(std::string author);
  113. static void savePreferredTTWTLanguage(std::string language);
  114. static void saveLayoutConfig(vital::StringLayout* layout);
  115. static void saveVersionConfig();
  116. static void saveContentVersion(std::string version);
  117. static void saveUpdateCheckConfig(bool check_for_updates);
  118. static void saveWorkOffline(bool work_offline);
  119. static void saveLoadedSkin(const std::string& name);
  120. static void saveAnimateWidgets(bool animate_widgets);
  121. static void saveDisplayHzFrequency(bool display_hz);
  122. static void saveAuthenticated(bool authenticated);
  123. static void saveWindowSize(float window_size);
  124. static void saveMidiMapConfig(MidiManager* midi_manager);
  125. static void loadConfig(MidiManager* midi_manager, vital::StringLayout* layout = nullptr);
  126. static std::wstring getComputerKeyboardLayout();
  127. static std::string getPreferredTTWTLanguage();
  128. static std::string getAuthor();
  129. static std::pair<wchar_t, wchar_t> getComputerKeyboardOctaveControls();
  130. static void saveAdditionalFolders(const std::string& name, std::vector<std::string> folders);
  131. static std::vector<std::string> getAdditionalFolders(const std::string& name);
  132. static File getDataDirectory();
  133. static std::vector<File> getDirectories(const String& folder_name);
  134. static std::vector<File> getPresetDirectories();
  135. static std::vector<File> getWavetableDirectories();
  136. static std::vector<File> getSkinDirectories();
  137. static std::vector<File> getSampleDirectories();
  138. static std::vector<File> getLfoDirectories();
  139. static File getUserDirectory();
  140. static File getUserPresetDirectory();
  141. static File getUserWavetableDirectory();
  142. static File getUserSkinDirectory();
  143. static File getUserSampleDirectory();
  144. static File getUserLfoDirectory();
  145. static void getAllFilesOfTypeInDirectories(Array<File>& files, const String& extensions,
  146. const std::vector<File>& directories);
  147. static void getAllPresets(Array<File>& presets);
  148. static void getAllWavetables(Array<File>& wavetables);
  149. static void getAllSkins(Array<File>& skins);
  150. static void getAllLfos(Array<File>& lfos);
  151. static void getAllSamples(Array<File>& samples);
  152. static void getAllUserPresets(Array<File>& presets);
  153. static void getAllUserWavetables(Array<File>& wavetables);
  154. static void getAllUserLfos(Array<File>& lfos);
  155. static void getAllUserSamples(Array<File>& samples);
  156. static int compareFeatureVersionStrings(String a, String b);
  157. static int compareVersionStrings(String a, String b);
  158. static File getShiftedFile(const String directory_name, const String& extensions,
  159. const std::string& additional_folders_name, const File& current_file, int shift);
  160. private:
  161. LoadSave() { }
  162. };