@gorilla-engine-sdk/ge-session-presets-lib 0.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSessionAndPresets = useSessionAndPresets;
4
+ const fs = require("fs-extra");
5
+ const react_1 = require("react");
6
+ const SessionAndPresetsState_1 = require("../state/SessionAndPresetsState");
7
+ const __1 = require("..");
8
+ /**
9
+ * Primary hook for interacting with the session and preset system.
10
+ *
11
+ * Must be called from within a component tree that is wrapped by
12
+ * {@link SessionAndPresetsStateProvider} and {@link SessionAndPresetsWrapper}.
13
+ *
14
+ * @returns An object with functions for session I/O and preset management.
15
+ * See {@link UseSessionAndPresetsReturnValue} for the full list.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * function PresetToolbar() {
20
+ * const { prevPreset, nextPreset, getLoadedPreset } = useSessionAndPresets();
21
+ *
22
+ * return (
23
+ * <geLabel width={200} height={30}>
24
+ * <geButton x={0} width={30} height={30} text="<" onClick={prevPreset} />
25
+ * <geLabel x={35} width={130} height={30} text={getLoadedPreset()?.name ?? ''} />
26
+ * <geButton x={170} width={30} height={30} text=">" onClick={nextPreset} />
27
+ * </geLabel>
28
+ * );
29
+ * }
30
+ * ```
31
+ */
32
+ function useSessionAndPresets() {
33
+ const presetManager = (0, SessionAndPresetsState_1.useSessionAndPresetsManager)();
34
+ const configState = (0, SessionAndPresetsState_1.useSessionAndPresetsConfig)();
35
+ const dispatch = (0, SessionAndPresetsState_1.useSessionAndPresetsStateDispatch)();
36
+ const state = (0, SessionAndPresetsState_1.useSessionAndPresetsState)();
37
+ const stateRef = (0, react_1.useRef)(state);
38
+ stateRef.current = state;
39
+ const saveSession = (additionalStateString) => {
40
+ try {
41
+ const preset = getLoadedPreset();
42
+ if (configState.debug)
43
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: saveSession preset: ${preset?.filePath}`);
44
+ /**
45
+ * Experimental feature: Check preset-changed/dirty during session save
46
+ */
47
+ if (configState.flagPresetChanged && preset?.json && stateRef.current.instrument) {
48
+ const instProps = stateRef.current.instrument;
49
+ const presetInstProps = preset.json.dsp_settings;
50
+ let presetChanged = false;
51
+ const propsChangedLog = [];
52
+ for (const prop of presetInstProps) {
53
+ const key = prop.key;
54
+ if (instProps[key]) {
55
+ if (instProps[key].normValue != prop.value) {
56
+ propsChangedLog.push({
57
+ type: 'instrumentProp',
58
+ key: key,
59
+ presetProp: prop.value,
60
+ instrumentProp: instProps[key].normValue,
61
+ });
62
+ presetChanged = true;
63
+ }
64
+ else {
65
+ if (stateRef.current.presetChangeLog && stateRef.current.presetChangeLog.length > 0)
66
+ stateRef.current.presetChangeLog.find((entry) => entry.type === 'instrumentProp' && entry.key === key);
67
+ }
68
+ }
69
+ }
70
+ dispatchPresetChanged(presetChanged, propsChangedLog);
71
+ }
72
+ // create the save session-string
73
+ const saveString = presetManager.saveSession(additionalStateString, stateRef.current.presets.find((p) => p.uuid === stateRef.current.loadPresetUUID));
74
+ return saveString;
75
+ }
76
+ catch (err) {
77
+ dispatchError(err);
78
+ }
79
+ };
80
+ const isValidSession = (sessionJson) => {
81
+ let valid = true;
82
+ if (!sessionJson['dsp_settings'])
83
+ valid = false;
84
+ if (sessionJson['dsp_settings'].length === 0)
85
+ valid = false;
86
+ //if(!sessionJson['preset']) valid = false
87
+ if (configState.blockAAXInitialSession &&
88
+ configState.pluginType === 'AAX' &&
89
+ presetManager.sessionCount === 0)
90
+ valid = false;
91
+ if (configState.debug)
92
+ console.log(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: : isValidSession sessionCount: ${presetManager.sessionCount} pluginType: ${configState.pluginType} valid: ${valid} `);
93
+ presetManager.incrementSessionCount();
94
+ return valid;
95
+ };
96
+ const loadSession = async (stateJSON) => {
97
+ if (!isValidSession(stateJSON)) {
98
+ if (configState.debug)
99
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession - NO VALID SESSION!`);
100
+ return stateJSON;
101
+ }
102
+ let sessionJSON = await presetManager.loadSession(stateJSON);
103
+ const filePath = sessionJSON['preset'];
104
+ if (configState.debug)
105
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession sessionJSON['preset']: ${filePath} exists: ${fs.existsSync(filePath)} isDirtySessionLoad: ${presetManager.isDirtySessionLoad}`);
106
+ if (!presetManager.isDirtySessionLoad && filePath) {
107
+ if (await fs.exists(filePath)) {
108
+ if (configState.debug)
109
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession - DISPATCH PRESET`);
110
+ dispatchSetPreset(stateRef.current.presets.find((item) => item.filePath === filePath), filePath);
111
+ dispatchPresetChanged(sessionJSON.workingState.presetChanged, sessionJSON.workingState.presetChangeLog);
112
+ }
113
+ }
114
+ if (presetManager.isDirtySessionLoad) {
115
+ // if we end up in a state that is considered "dirty" load again
116
+ if (configState.debug)
117
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession presetManager.isDirtySessionLoad: ${presetManager.isDirtySessionLoad} - LOAD AGAIN`);
118
+ sessionJSON = await loadSession(stateJSON);
119
+ }
120
+ /// dispatch sessionId
121
+ if (sessionJSON?.sessionId) {
122
+ if (configState.debug)
123
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession - DISPATCH SESSION_ID ${sessionJSON.sessionId}`);
124
+ dispatchSetSessionId(sessionJSON.sessionId);
125
+ }
126
+ if (configState.debug)
127
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadSession sessionJSON['preset']: ${sessionJSON['preset']} - FINISHED`);
128
+ return sessionJSON;
129
+ };
130
+ const loadPresets = async (dirs) => {
131
+ try {
132
+ if (configState.debug)
133
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadPresets ${stateRef.current.presetIndex} sessionInvolved; ${presetManager.sessionInvolved} filePath: ${stateRef.current.presetFilePath}`);
134
+ const presets = await presetManager.loadPresets(dirs);
135
+ dispatch({
136
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setPresets,
137
+ payload: {
138
+ presets: presets,
139
+ },
140
+ });
141
+ if (presetManager.sessionInvolved) {
142
+ dispatchSetPreset(presets.find((item) => item.filePath === stateRef.current.presetFilePath), stateRef.current.presetFilePath);
143
+ }
144
+ }
145
+ catch (e) {
146
+ if (configState.debug)
147
+ console.error(e);
148
+ dispatchError(e);
149
+ }
150
+ };
151
+ const getPreset = (uuid) => {
152
+ return stateRef.current.presets.find((p) => p.uuid === uuid);
153
+ };
154
+ const getLoadedPreset = () => {
155
+ return stateRef.current.presets.find((p) => p.uuid === stateRef.current.loadPresetUUID);
156
+ };
157
+ const loadPreset = async (presetObj, sessionRestore = false) => {
158
+ try {
159
+ if (configState.debug)
160
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadPreset - sessionRestore: ${sessionRestore}`);
161
+ setPresetLoadingIndicator(true);
162
+ await presetManager.loadPreset(presetObj, undefined, sessionRestore);
163
+ setPresetLoadingIndicator(false);
164
+ }
165
+ catch (e) {
166
+ if (configState.debug)
167
+ console.error(e);
168
+ setPresetLoadingIndicator(false);
169
+ dispatchError(e);
170
+ }
171
+ };
172
+ const loadPresetFromSource = async (filePath, isInitialPreset = false, instStateToRetain) => {
173
+ try {
174
+ if (configState.debug)
175
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: loadPresetFromSource ${filePath} isInitialPreset: ${isInitialPreset}`);
176
+ // if it is the initial preset & it is loading a session or it has already loaded a session -> abort
177
+ if (isInitialPreset && presetManager.sessionInvolved)
178
+ return;
179
+ setPresetLoadingIndicator(true);
180
+ if (await presetManager.loadPresetFromSource(filePath, isInitialPreset, instStateToRetain))
181
+ dispatchSetPreset(stateRef.current.presets.find((item) => item.filePath === filePath), filePath);
182
+ setPresetLoadingIndicator(false);
183
+ }
184
+ catch (e) {
185
+ if (configState.debug)
186
+ console.error(e.name);
187
+ setPresetLoadingIndicator(false);
188
+ dispatchError(e);
189
+ }
190
+ };
191
+ const savePreset = async (filePath) => {
192
+ try {
193
+ if (configState.debug)
194
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: savePreset ${filePath}`);
195
+ await presetManager.savePreset(filePath);
196
+ }
197
+ catch (e) {
198
+ if (configState.debug)
199
+ console.error(e);
200
+ dispatchError(e);
201
+ }
202
+ };
203
+ const saveAsPreset = async () => {
204
+ try {
205
+ if (configState.debug)
206
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: saveAsPreset`);
207
+ let fileName = undefined;
208
+ const selectedPath = await GorillaEngine.openFileChooser({
209
+ hint: 'Save Preset',
210
+ saveDialog: true,
211
+ warnOnOverwrite: true,
212
+ allowedExtensions: 'json',
213
+ defaultLocation: configState.userPresetPath,
214
+ });
215
+ fileName = selectedPath[0];
216
+ const filePath = `${fileName}`;
217
+ if (configState.debug)
218
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: saveAsPreset ${filePath}`);
219
+ savePreset(filePath);
220
+ }
221
+ catch (e) {
222
+ if (configState.debug)
223
+ console.error(e);
224
+ dispatchError(e);
225
+ }
226
+ };
227
+ const deletePreset = async (filePath) => {
228
+ try {
229
+ if (configState.debug)
230
+ console.debug(`${__1.GE_SESSION_PRESETS_LIB} useSessionAndPresets: deletePreset filePath: ${filePath}`);
231
+ await presetManager.deletePreset(filePath);
232
+ await loadPresetFromSource(stateRef.current.presets[0].filePath);
233
+ }
234
+ catch (err) {
235
+ if (configState.debug)
236
+ console.error(err);
237
+ dispatchError(err);
238
+ }
239
+ };
240
+ const resetInstrumentProperty = (propertyName) => {
241
+ const preset = getLoadedPreset();
242
+ if (preset) {
243
+ stateRef.current.instrument[propertyName].normValue = preset.json.instrument[propertyName];
244
+ }
245
+ };
246
+ const prevPreset = () => {
247
+ if (stateRef.current.loadingPreset)
248
+ return;
249
+ const presetIndex = stateRef.current.presetIndex - 1 >= 0
250
+ ? stateRef.current.presetIndex - 1
251
+ : stateRef.current.presets.length - 1;
252
+ loadPresetFromSource(stateRef.current.presets[presetIndex].filePath);
253
+ };
254
+ const nextPreset = () => {
255
+ if (stateRef.current.loadingPreset)
256
+ return;
257
+ const presetIndex = stateRef.current.presetIndex + 1 <= stateRef.current.presets.length - 1
258
+ ? stateRef.current.presetIndex + 1
259
+ : 0;
260
+ loadPresetFromSource(stateRef.current.presets[presetIndex].filePath);
261
+ };
262
+ const randomize = () => {
263
+ if (stateRef.current.loadingPreset)
264
+ return;
265
+ };
266
+ const randomizeInCategory = () => {
267
+ if (stateRef.current.loadingPreset)
268
+ return;
269
+ };
270
+ const createPreset = async () => {
271
+ try {
272
+ return await presetManager.createPreset();
273
+ }
274
+ catch (err) {
275
+ if (configState.debug)
276
+ console.error(err);
277
+ dispatchError(err);
278
+ }
279
+ };
280
+ const setPresetLoadingIndicator = (active) => {
281
+ dispatch({
282
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.loadingPreset,
283
+ payload: {
284
+ loadingPreset: active,
285
+ },
286
+ });
287
+ };
288
+ const dispatchSetPreset = (preset, filePath) => {
289
+ dispatch({
290
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setPreset,
291
+ payload: {
292
+ preset: preset,
293
+ filePath: filePath,
294
+ },
295
+ });
296
+ };
297
+ const dispatchPresetChanged = (presetChanged, presetChangeLog) => {
298
+ dispatch({
299
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setPresetChanged,
300
+ payload: {
301
+ presetChanged: presetChanged,
302
+ presetChangeLog: presetChangeLog,
303
+ },
304
+ });
305
+ };
306
+ const dispatchSetSessionId = (sessionId) => {
307
+ dispatch({
308
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setSessionId,
309
+ payload: {
310
+ sessionId,
311
+ },
312
+ });
313
+ };
314
+ const dispatchError = (e) => {
315
+ dispatch({
316
+ type: SessionAndPresetsState_1.SessionAndPresetsDispatchTypes.setError,
317
+ payload: { error: e },
318
+ });
319
+ };
320
+ return {
321
+ saveSession,
322
+ loadSession,
323
+ loadPresets,
324
+ getPreset,
325
+ getLoadedPreset,
326
+ loadPreset,
327
+ loadPresetFromSource,
328
+ createPreset,
329
+ savePreset,
330
+ saveAsPreset,
331
+ deletePreset,
332
+ resetInstrumentProperty,
333
+ prevPreset,
334
+ nextPreset,
335
+ randomize,
336
+ randomizeInCategory,
337
+ };
338
+ }
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlU2Vzc2lvbkFuZFByZXNldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlU2Vzc2lvbkFuZFByZXNldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErSkEsb0RBa1hDO0FBamhCRCwrQkFBZ0M7QUFHaEMsaUNBQW9EO0FBRXBELDRFQU95QztBQUt6QywwQkFBNEM7QUFzSDVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILFNBQWdCLG9CQUFvQjtJQUNsQyxNQUFNLGFBQWEsR0FBbUIsSUFBQSxvREFBMkIsR0FBRSxDQUFDO0lBQ3BFLE1BQU0sV0FBVyxHQUE0QixJQUFBLG1EQUEwQixHQUFFLENBQUM7SUFFMUUsTUFBTSxRQUFRLEdBQUcsSUFBQSwwREFBaUMsR0FBRSxDQUFDO0lBQ3JELE1BQU0sS0FBSyxHQUEyQixJQUFBLGtEQUF5QixHQUFFLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBQSxjQUFNLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFekIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxxQkFBNkIsRUFBVSxFQUFFO1FBQzVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ2pDLElBQUksV0FBVyxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQ1gsR0FBRywwQkFBc0IsOENBQThDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FDMUYsQ0FBQztZQUVKOztlQUVHO1lBQ0gsSUFBSSxXQUFXLENBQUMsaUJBQWlCLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNqRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztnQkFDOUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFD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
@@ -0,0 +1,14 @@
1
+ /// <reference types="gorilla-engine" preserve="true" />
2
+ import { useSessionAndPresets } from './hooks/useSessionAndPresets';
3
+ import { SessionAndPresetsState, useSessionAndPresetsConfig, useSessionAndPresetsState, SessionAndPresetsDispatchTypes, useSessionAndPresetsManager, useSessionAndPresetsStateDispatch } from './state/SessionAndPresetsState';
4
+ import { SessionAndPresetsConfig } from './types/SessionAndPresetsConfig';
5
+ import SessionAndPresetsWrapper from './SessionAndPresetsWrapper';
6
+ import { SessionAndPresetsStateProvider } from './state/SessionAndPresetsStateProvider';
7
+ import { SessionAndPresetsError, SessionAndPresetsErrorTypes } from './errors/SessionAndPresetsError';
8
+ import { IPresetManager, AdditionalSaveSessionSignature, AdditionalPreLoadSessionSignature, AdditionalLoadSessionSignature, AdditionalPreLoadPresetSignature, AdditionalLoadPresetSignature, AdditionalPreLoadPresetFromSourceSignature, AdditionalLoadPresetFromSourceSignature, AdditionalCreatePresetSignature, AdditionalSavePresetSignature, AdditionalDeletePresetSignature } from './types/IPresetManager';
9
+ import { PresetManager } from './PresetManager';
10
+ import { Preset } from './types/Preset';
11
+ import { defaultSessionAndPresetsConfig } from './defaultSessionAndPresetsConfig';
12
+ import { defaultSessionAndPresetsState } from './defaultSessionAndPresetsState';
13
+ export declare const GE_SESSION_PRESETS_LIB = "[ge-session-presets-lib]";
14
+ export { useSessionAndPresets, useSessionAndPresetsConfig, useSessionAndPresetsState, SessionAndPresetsWrapper, SessionAndPresetsStateProvider, SessionAndPresetsState, SessionAndPresetsConfig, IPresetManager, PresetManager, Preset, SessionAndPresetsDispatchTypes, useSessionAndPresetsManager, useSessionAndPresetsStateDispatch, SessionAndPresetsError, SessionAndPresetsErrorTypes, AdditionalSaveSessionSignature, AdditionalPreLoadSessionSignature, AdditionalLoadSessionSignature, AdditionalPreLoadPresetSignature, AdditionalLoadPresetSignature, AdditionalPreLoadPresetFromSourceSignature, AdditionalLoadPresetFromSourceSignature, AdditionalCreatePresetSignature, AdditionalSavePresetSignature, AdditionalDeletePresetSignature, defaultSessionAndPresetsConfig, defaultSessionAndPresetsState, };
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /// <reference types="gorilla-engine" preserve="true" />
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.defaultSessionAndPresetsState = exports.defaultSessionAndPresetsConfig = exports.SessionAndPresetsErrorTypes = exports.SessionAndPresetsError = exports.useSessionAndPresetsStateDispatch = exports.useSessionAndPresetsManager = exports.SessionAndPresetsDispatchTypes = exports.PresetManager = exports.SessionAndPresetsStateProvider = exports.SessionAndPresetsWrapper = exports.useSessionAndPresetsState = exports.useSessionAndPresetsConfig = exports.useSessionAndPresets = exports.GE_SESSION_PRESETS_LIB = void 0;
8
+ const useSessionAndPresets_1 = require("./hooks/useSessionAndPresets");
9
+ Object.defineProperty(exports, "useSessionAndPresets", { enumerable: true, get: function () { return useSessionAndPresets_1.useSessionAndPresets; } });
10
+ const SessionAndPresetsState_1 = require("./state/SessionAndPresetsState");
11
+ Object.defineProperty(exports, "useSessionAndPresetsConfig", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsConfig; } });
12
+ Object.defineProperty(exports, "useSessionAndPresetsState", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsState; } });
13
+ Object.defineProperty(exports, "SessionAndPresetsDispatchTypes", { enumerable: true, get: function () { return SessionAndPresetsState_1.SessionAndPresetsDispatchTypes; } });
14
+ Object.defineProperty(exports, "useSessionAndPresetsManager", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsManager; } });
15
+ Object.defineProperty(exports, "useSessionAndPresetsStateDispatch", { enumerable: true, get: function () { return SessionAndPresetsState_1.useSessionAndPresetsStateDispatch; } });
16
+ const SessionAndPresetsWrapper_1 = __importDefault(require("./SessionAndPresetsWrapper"));
17
+ exports.SessionAndPresetsWrapper = SessionAndPresetsWrapper_1.default;
18
+ const SessionAndPresetsStateProvider_1 = require("./state/SessionAndPresetsStateProvider");
19
+ Object.defineProperty(exports, "SessionAndPresetsStateProvider", { enumerable: true, get: function () { return SessionAndPresetsStateProvider_1.SessionAndPresetsStateProvider; } });
20
+ const SessionAndPresetsError_1 = require("./errors/SessionAndPresetsError");
21
+ Object.defineProperty(exports, "SessionAndPresetsError", { enumerable: true, get: function () { return SessionAndPresetsError_1.SessionAndPresetsError; } });
22
+ Object.defineProperty(exports, "SessionAndPresetsErrorTypes", { enumerable: true, get: function () { return SessionAndPresetsError_1.SessionAndPresetsErrorTypes; } });
23
+ const PresetManager_1 = require("./PresetManager");
24
+ Object.defineProperty(exports, "PresetManager", { enumerable: true, get: function () { return PresetManager_1.PresetManager; } });
25
+ const defaultSessionAndPresetsConfig_1 = require("./defaultSessionAndPresetsConfig");
26
+ Object.defineProperty(exports, "defaultSessionAndPresetsConfig", { enumerable: true, get: function () { return defaultSessionAndPresetsConfig_1.defaultSessionAndPresetsConfig; } });
27
+ const defaultSessionAndPresetsState_1 = require("./defaultSessionAndPresetsState");
28
+ Object.defineProperty(exports, "defaultSessionAndPresetsState", { enumerable: true, get: function () { return defaultSessionAndPresetsState_1.defaultSessionAndPresetsState; } });
29
+ exports.GE_SESSION_PRESETS_LIB = '[ge-session-presets-lib]';
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdEQUF3RDs7Ozs7O0FBa0N4RCx1RUFBb0U7QUF3Q2xFLHFHQXhDTywyQ0FBb0IsT0F3Q1A7QUF2Q3RCLDJFQU93QztBQWlDdEMsMkdBdENBLG1EQUEwQixPQXNDQTtBQUMxQiwwR0F0Q0Esa0RBQXlCLE9Bc0NBO0FBUXpCLCtHQTdDQSx1REFBOEIsT0E2Q0E7QUFDOUIsNEdBN0NBLG9EQUEyQixPQTZDQTtBQUMzQixrSEE3Q0EsMERBQWlDLE9BNkNBO0FBekNuQywwRkFBa0U7QUFnQ2hFLG1DQWhDSyxrQ0FBd0IsQ0FnQ0w7QUEvQjFCLDJGQUF3RjtBQWdDdEYsK0dBaENPLCtEQUE4QixPQWdDUDtBQS9CaEMsNEVBR3lDO0FBcUN2Qyx1R0F2Q0EsK0NBQXNCLE9BdUNBO0FBQ3RCLDRHQXZDQSxvREFBMkIsT0F1Q0E7QUF2QjdCLG1EQUFnRDtBQWlCOUMsOEZBakJPLDZCQUFhLE9BaUJQO0FBZGYscUZBQWtGO0FBK0JoRiwrR0EvQk8sK0RBQThCLE9BK0JQO0FBOUJoQyxtRkFBZ0Y7QUErQjlFLDhHQS9CTyw2REFBNkIsT0ErQlA7QUE3QmxCLFFBQUEsc0JBQXNCLEdBQUcsMEJBQTBCLENBQUMifQ==
@@ -0,0 +1,118 @@
1
+ import { Preset } from '../types/Preset';
2
+ import { SessionAndPresetsConfig } from '../types/SessionAndPresetsConfig';
3
+ import { IPresetManager } from '../types/IPresetManager';
4
+ import { SessionAndPresetsError } from '../errors/SessionAndPresetsError';
5
+ export type SessionAndPresetsState = {
6
+ /**
7
+ * A reference to the instrument used
8
+ */
9
+ instrument?: GorillaEngine.Instrument;
10
+ /**
11
+ * An array of presets, populated by PresetManager-parsing of factory & user-presets
12
+ */
13
+ presets: Preset[];
14
+ /**
15
+ * The index of the currently loaded preset
16
+ */
17
+ presetIndex: number;
18
+ /**
19
+ * The file-path of the currently loaded preset
20
+ */
21
+ presetFilePath?: string;
22
+ /**
23
+ * A hash based on file-name of preset, used to identify current loaded preset
24
+ */
25
+ loadPresetUUID?: String;
26
+ /**
27
+ * The display name of the currently laoded preset
28
+ */
29
+ /**
30
+ * A boolean flag indicating if we are in a loading-state
31
+ */
32
+ loadingPreset?: boolean;
33
+ /**
34
+ * A boolean flag indicating if changes has happened on the currently loaded preset
35
+ */
36
+ presetChanged: boolean;
37
+ /**
38
+ * A log tracking preset/instrument changes
39
+ */
40
+ presetChangeLog?: any[];
41
+ /**
42
+ * Used to store the session information
43
+ */
44
+ session?: JSON;
45
+ /**
46
+ * A uuid which gets persisted within session save - used for logging and offline tracking paths
47
+ */
48
+ sessionId?: string;
49
+ /**
50
+ * The path to initial preset that should be loaded
51
+ */
52
+ initialPresetPath?: string;
53
+ /**
54
+ * Capturing the last error that got thrown
55
+ */
56
+ error?: Error | SessionAndPresetsError;
57
+ };
58
+ export declare enum SessionAndPresetsDispatchTypes {
59
+ setInstrument = "SET_INSTRUMENT",
60
+ setPresets = "SET_PRESETS",
61
+ setPreset = "SET_PRESET",
62
+ setPresetChanged = "SET_PRESET_CHANGED",
63
+ savePreset = "SAVE_PRESET",
64
+ deletePreset = "DELETE_PRESET",
65
+ setSession = "SET_SESSION",
66
+ setSessionId = "SET_SESSION_ID",
67
+ loadingPreset = "LOADING_PRESET",
68
+ setError = "ERROR"
69
+ }
70
+ type SessionAndPresetsStatePayload = {
71
+ [SessionAndPresetsDispatchTypes.setInstrument]: {
72
+ instrument: GorillaEngine.Instrument;
73
+ };
74
+ [SessionAndPresetsDispatchTypes.setPresets]: {
75
+ presets: Preset[];
76
+ };
77
+ [SessionAndPresetsDispatchTypes.setPreset]: {
78
+ preset: Preset;
79
+ filePath: string;
80
+ };
81
+ [SessionAndPresetsDispatchTypes.setPresetChanged]: {
82
+ presetChanged: boolean;
83
+ presetChangeLog: any[];
84
+ };
85
+ [SessionAndPresetsDispatchTypes.setSession]: {
86
+ session: JSON;
87
+ };
88
+ [SessionAndPresetsDispatchTypes.setSessionId]: {
89
+ sessionId: string;
90
+ };
91
+ [SessionAndPresetsDispatchTypes.loadingPreset]: {
92
+ loadingPreset: boolean;
93
+ };
94
+ [SessionAndPresetsDispatchTypes.setError]: {
95
+ error: SessionAndPresetsError;
96
+ };
97
+ };
98
+ export type SessionAndPresetsStateActions = ActionMap<SessionAndPresetsStatePayload>[keyof ActionMap<SessionAndPresetsStatePayload>];
99
+ export declare const SessionAndPresetsReducer: (state: SessionAndPresetsState, action: SessionAndPresetsStateActions) => SessionAndPresetsState;
100
+ export declare const SessionAndPresetsStateContext: React.Context<any>;
101
+ export declare const SessionAndPresetsStateDispatchContext: React.Context<any>;
102
+ export declare const SessionAndPresetsConfigContext: React.Context<any>;
103
+ export declare function useSessionAndPresetsConfig(): SessionAndPresetsConfig;
104
+ export declare function useSessionAndPresetsState(): SessionAndPresetsState;
105
+ export declare function useSessionAndPresetsStateDispatch(): any;
106
+ export declare const SessionAndPresetsManagerContext: React.Context<any>;
107
+ export declare function useSessionAndPresetsManager(): IPresetManager;
108
+ type ActionMap<M extends {
109
+ [index: string]: any;
110
+ }> = {
111
+ [Key in keyof M]: M[Key] extends undefined ? {
112
+ type: Key;
113
+ } : {
114
+ type: Key;
115
+ payload: M[Key];
116
+ };
117
+ };
118
+ export {};
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionAndPresetsManagerContext = exports.SessionAndPresetsConfigContext = exports.SessionAndPresetsStateDispatchContext = exports.SessionAndPresetsStateContext = exports.SessionAndPresetsReducer = exports.SessionAndPresetsDispatchTypes = void 0;
4
+ exports.useSessionAndPresetsConfig = useSessionAndPresetsConfig;
5
+ exports.useSessionAndPresetsState = useSessionAndPresetsState;
6
+ exports.useSessionAndPresetsStateDispatch = useSessionAndPresetsStateDispatch;
7
+ exports.useSessionAndPresetsManager = useSessionAndPresetsManager;
8
+ const react_1 = require("react");
9
+ var SessionAndPresetsDispatchTypes;
10
+ (function (SessionAndPresetsDispatchTypes) {
11
+ SessionAndPresetsDispatchTypes["setInstrument"] = "SET_INSTRUMENT";
12
+ SessionAndPresetsDispatchTypes["setPresets"] = "SET_PRESETS";
13
+ SessionAndPresetsDispatchTypes["setPreset"] = "SET_PRESET";
14
+ SessionAndPresetsDispatchTypes["setPresetChanged"] = "SET_PRESET_CHANGED";
15
+ SessionAndPresetsDispatchTypes["savePreset"] = "SAVE_PRESET";
16
+ SessionAndPresetsDispatchTypes["deletePreset"] = "DELETE_PRESET";
17
+ SessionAndPresetsDispatchTypes["setSession"] = "SET_SESSION";
18
+ SessionAndPresetsDispatchTypes["setSessionId"] = "SET_SESSION_ID";
19
+ SessionAndPresetsDispatchTypes["loadingPreset"] = "LOADING_PRESET";
20
+ SessionAndPresetsDispatchTypes["setError"] = "ERROR";
21
+ })(SessionAndPresetsDispatchTypes || (exports.SessionAndPresetsDispatchTypes = SessionAndPresetsDispatchTypes = {}));
22
+ const SessionAndPresetsReducer = (state, action) => {
23
+ switch (action.type) {
24
+ case SessionAndPresetsDispatchTypes.setSession:
25
+ return {
26
+ ...state,
27
+ session: action.payload.session,
28
+ };
29
+ case SessionAndPresetsDispatchTypes.setSessionId:
30
+ return {
31
+ ...state,
32
+ sessionId: action.payload.sessionId,
33
+ };
34
+ case SessionAndPresetsDispatchTypes.setInstrument:
35
+ return {
36
+ ...state,
37
+ instrument: action.payload.instrument,
38
+ };
39
+ case SessionAndPresetsDispatchTypes.setPresets:
40
+ const newState = {
41
+ ...state,
42
+ presets: action.payload.presets,
43
+ };
44
+ if (state.presetIndex > -1 && state.loadPresetUUID) {
45
+ const presetIndex = newState.presets.findIndex((item) => item.uuid === state.loadPresetUUID);
46
+ newState.presetIndex = presetIndex;
47
+ }
48
+ return newState;
49
+ case SessionAndPresetsDispatchTypes.setPreset:
50
+ const presetIndex = state.presets.findIndex((item) => item.filePath === action.payload.filePath);
51
+ const preset = state.presets.find((item) => item.filePath === action.payload.filePath);
52
+ return {
53
+ ...state,
54
+ presetIndex: presetIndex,
55
+ presetFilePath: action.payload.filePath,
56
+ //presetName: action.payload.preset.name,
57
+ //preset: action.payload.preset,
58
+ loadPresetUUID: preset?.uuid,
59
+ presetChanged: false,
60
+ presetChangeLog: undefined,
61
+ };
62
+ case SessionAndPresetsDispatchTypes.setPresetChanged:
63
+ const presetChangeLog = Array.isArray(state.presetChangeLog)
64
+ ? state.presetChangeLog.concat(action.payload.presetChangeLog)
65
+ : [];
66
+ return {
67
+ ...state,
68
+ presetChanged: action.payload.presetChanged,
69
+ presetChangeLog: presetChangeLog,
70
+ };
71
+ case SessionAndPresetsDispatchTypes.loadingPreset:
72
+ return {
73
+ ...state,
74
+ loadingPreset: action.payload.loadingPreset,
75
+ };
76
+ case SessionAndPresetsDispatchTypes.setError:
77
+ return {
78
+ ...state,
79
+ error: action.payload.error,
80
+ // TODO: double-check...
81
+ // Reason: if flag was set to true, but an error aborted further excecution, flag might not get reset
82
+ loadingPreset: false,
83
+ };
84
+ default:
85
+ return state;
86
+ }
87
+ };
88
+ exports.SessionAndPresetsReducer = SessionAndPresetsReducer;
89
+ exports.SessionAndPresetsStateContext = (0, react_1.createContext)(null);
90
+ exports.SessionAndPresetsStateDispatchContext = (0, react_1.createContext)(null);
91
+ exports.SessionAndPresetsConfigContext = (0, react_1.createContext)(null);
92
+ function useSessionAndPresetsConfig() {
93
+ return (0, react_1.useContext)(exports.SessionAndPresetsConfigContext);
94
+ }
95
+ function useSessionAndPresetsState() {
96
+ return (0, react_1.useContext)(exports.SessionAndPresetsStateContext);
97
+ }
98
+ function useSessionAndPresetsStateDispatch() {
99
+ return (0, react_1.useContext)(exports.SessionAndPresetsStateDispatchContext);
100
+ }
101
+ exports.SessionAndPresetsManagerContext = (0, react_1.createContext)(null);
102
+ function useSessionAndPresetsManager() {
103
+ return (0, react_1.useContext)(exports.SessionAndPresetsManagerContext);
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbkFuZFByZXNldHNTdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0ZS9TZXNzaW9uQW5kUHJlc2V0c1N0YXRlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwTUEsZ0VBRUM7QUFFRCw4REFFQztBQUVELDhFQUVDO0FBR0Qsa0VBRUM7QUF6TkQsaUNBQWtEO0FBeUVsRCxJQUFZLDhCQWNYO0FBZEQsV0FBWSw4QkFBOEI7SUFDeEMsa0VBQWdDLENBQUE7SUFFaEMsNERBQTBCLENBQUE7SUFDMUIsMERBQXdCLENBQUE7SUFDeEIseUVBQXVDLENBQUE7SUFDdkMsNERBQTBCLENBQUE7SUFDMUIsZ0VBQThCLENBQUE7SUFFOUIsNERBQTBCLENBQUE7SUFDMUIsaUVBQStCLENBQUE7SUFDL0Isa0VBQWdDLENBQUE7SUFFaEMsb0RBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQWRXLDhCQUE4Qiw4Q0FBOUIsOEJBQThCLFFBY3pDO0FBbUNNLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsS0FBNkIsRUFDN0IsTUFBcUMsRUFDckMsRUFBRTtJQUNGLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLEtBQUssOEJBQThCLENBQUMsVUFBVTtZQUM1QyxPQUFPO2dCQUNMLEdBQUcsS0FBSztnQkFDUixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2FBQ2hDLENBQUM7UUFDSixLQUFLLDhCQUE4QixDQUFDLFlBQVk7WUFDOUMsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUzthQUNwQyxDQUFDO1FBQ0osS0FBSyw4QkFBOEIsQ0FBQyxhQUFhO1lBQy9DLE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVU7YUFDdEMsQ0FBQztRQUNKLEtBQUssOEJBQThCLENBQUMsVUFB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