@opendaw/studio-core 0.0.41 → 0.0.43
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.
- package/dist/AssetService.d.ts +18 -0
- package/dist/AssetService.d.ts.map +1 -0
- package/dist/AssetService.js +49 -0
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +18 -1
- package/dist/FilePickerAcceptTypes.d.ts +1 -0
- package/dist/FilePickerAcceptTypes.d.ts.map +1 -1
- package/dist/FilePickerAcceptTypes.js +6 -0
- package/dist/InstrumentBox.d.ts +2 -2
- package/dist/InstrumentBox.d.ts.map +1 -1
- package/dist/InstrumentFactories.d.ts +13 -4
- package/dist/InstrumentFactories.d.ts.map +1 -1
- package/dist/InstrumentFactories.js +38 -18
- package/dist/InstrumentFactory.d.ts +3 -2
- package/dist/InstrumentFactory.d.ts.map +1 -1
- package/dist/InstrumentOptions.d.ts +2 -1
- package/dist/InstrumentOptions.d.ts.map +1 -1
- package/dist/OpenDAWHeaders.d.ts +3 -0
- package/dist/OpenDAWHeaders.d.ts.map +1 -0
- package/dist/OpenDAWHeaders.js +8 -0
- package/dist/RecordingWorklet.js +1 -1
- package/dist/Storage.d.ts +14 -0
- package/dist/Storage.d.ts.map +1 -0
- package/dist/Storage.js +32 -0
- package/dist/capture/index.d.ts +6 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +5 -0
- package/dist/cloud/CloudAuthManager.d.ts.map +1 -0
- package/dist/{clouds → cloud}/CloudAuthManager.js +3 -2
- package/dist/{clouds → cloud}/CloudBackup.d.ts +1 -1
- package/dist/cloud/CloudBackup.d.ts.map +1 -0
- package/dist/{clouds → cloud}/CloudBackup.js +6 -4
- package/dist/cloud/CloudBackupProjects.d.ts.map +1 -0
- package/dist/cloud/CloudBackupSamples.d.ts.map +1 -0
- package/dist/{clouds → cloud}/CloudBackupSamples.js +5 -6
- package/dist/cloud/CloudBackupSoundfont.d.ts +13 -0
- package/dist/cloud/CloudBackupSoundfont.d.ts.map +1 -0
- package/dist/cloud/CloudBackupSoundfont.js +120 -0
- package/dist/cloud/CloudHandler.d.ts.map +1 -0
- package/dist/cloud/CloudService.d.ts.map +1 -0
- package/dist/cloud/DropboxHandler.d.ts.map +1 -0
- package/dist/cloud/GoogleDriveHandler.d.ts.map +1 -0
- package/dist/cloud/index.d.ts +4 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +3 -0
- package/dist/dawproject/DawProjectExporter.test.js +2 -1
- package/dist/dawproject/DawProjectService.d.ts +11 -0
- package/dist/dawproject/DawProjectService.d.ts.map +1 -0
- package/dist/dawproject/DawProjectService.js +63 -0
- package/dist/dawproject/index.d.ts +5 -0
- package/dist/dawproject/index.d.ts.map +1 -0
- package/dist/dawproject/index.js +4 -0
- package/dist/env.d.ts +6 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +9 -0
- package/dist/index.d.ts +11 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -32
- package/dist/midi/index.d.ts +3 -0
- package/dist/midi/index.d.ts.map +1 -0
- package/dist/midi/index.js +2 -0
- package/dist/processors.js +3 -3
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts +2 -1
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +1 -0
- package/dist/project/ProjectApi.d.ts +1 -1
- package/dist/project/ProjectApi.d.ts.map +1 -1
- package/dist/project/ProjectApi.js +3 -2
- package/dist/project/ProjectBundle.d.ts.map +1 -1
- package/dist/project/ProjectBundle.js +67 -18
- package/dist/project/ProjectEnv.d.ts +2 -1
- package/dist/project/ProjectEnv.d.ts.map +1 -1
- package/dist/project/ProjectStorage.d.ts +3 -2
- package/dist/project/ProjectStorage.d.ts.map +1 -1
- package/dist/project/ProjectStorage.js +2 -3
- package/dist/project/index.d.ts +10 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +9 -0
- package/dist/samples/DefaultSampleLoader.js +2 -2
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +4 -11
- package/dist/samples/SampleService.d.ts +12 -0
- package/dist/samples/SampleService.d.ts.map +1 -0
- package/dist/samples/SampleService.js +51 -0
- package/dist/samples/SampleStorage.d.ts +11 -10
- package/dist/samples/SampleStorage.d.ts.map +1 -1
- package/dist/samples/SampleStorage.js +32 -39
- package/dist/samples/index.d.ts +1 -1
- package/dist/samples/index.d.ts.map +1 -1
- package/dist/samples/index.js +1 -1
- package/dist/soundfont/DefaultSoundfontLoader.d.ts +15 -0
- package/dist/soundfont/DefaultSoundfontLoader.d.ts.map +1 -0
- package/dist/soundfont/DefaultSoundfontLoader.js +69 -0
- package/dist/soundfont/DefaultSoundfontLoaderManager.d.ts +11 -0
- package/dist/soundfont/DefaultSoundfontLoaderManager.d.ts.map +1 -0
- package/dist/soundfont/DefaultSoundfontLoaderManager.js +17 -0
- package/dist/soundfont/OpenSoundfontAPI.d.ts +13 -0
- package/dist/soundfont/OpenSoundfontAPI.d.ts.map +1 -0
- package/dist/soundfont/OpenSoundfontAPI.js +63 -0
- package/dist/soundfont/SoundfontProvider.d.ts +6 -0
- package/dist/soundfont/SoundfontProvider.d.ts.map +1 -0
- package/dist/soundfont/SoundfontService.d.ts +14 -0
- package/dist/soundfont/SoundfontService.d.ts.map +1 -0
- package/dist/soundfont/SoundfontService.js +69 -0
- package/dist/soundfont/SoundfontStorage.d.ts +21 -0
- package/dist/soundfont/SoundfontStorage.d.ts.map +1 -0
- package/dist/soundfont/SoundfontStorage.js +40 -0
- package/dist/soundfont/index.d.ts +7 -0
- package/dist/soundfont/index.d.ts.map +1 -0
- package/dist/soundfont/index.js +6 -0
- package/dist/sync-log/index.d.ts +4 -0
- package/dist/sync-log/index.d.ts.map +1 -0
- package/dist/sync-log/index.js +3 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/workers-main.js +2 -2
- package/dist/workers-main.js.map +3 -3
- package/dist/ysync/YMapper.d.ts.map +1 -0
- package/dist/{yjs → ysync}/YService.d.ts +1 -2
- package/dist/ysync/YService.d.ts.map +1 -0
- package/dist/{yjs → ysync}/YService.js +3 -4
- package/dist/ysync/YSync.d.ts.map +1 -0
- package/dist/{yjs → ysync}/YSync.js +1 -1
- package/dist/ysync/index.d.ts +4 -0
- package/dist/ysync/index.d.ts.map +1 -0
- package/dist/ysync/index.js +3 -0
- package/package.json +15 -17
- package/dist/clouds/CloudAuthManager.d.ts.map +0 -1
- package/dist/clouds/CloudBackup.d.ts.map +0 -1
- package/dist/clouds/CloudBackupProjects.d.ts.map +0 -1
- package/dist/clouds/CloudBackupSamples.d.ts.map +0 -1
- package/dist/clouds/CloudHandler.d.ts.map +0 -1
- package/dist/clouds/CloudService.d.ts.map +0 -1
- package/dist/clouds/DropboxHandler.d.ts.map +0 -1
- package/dist/clouds/GoogleDriveHandler.d.ts.map +0 -1
- package/dist/samples/SampleImporter.d.ts +0 -11
- package/dist/samples/SampleImporter.d.ts.map +0 -1
- package/dist/yjs/YMapper.d.ts.map +0 -1
- package/dist/yjs/YService.d.ts.map +0 -1
- package/dist/yjs/YSync.d.ts.map +0 -1
- /package/dist/{clouds → cloud}/CloudAuthManager.d.ts +0 -0
- /package/dist/{clouds → cloud}/CloudBackupProjects.d.ts +0 -0
- /package/dist/{clouds → cloud}/CloudBackupProjects.js +0 -0
- /package/dist/{clouds → cloud}/CloudBackupSamples.d.ts +0 -0
- /package/dist/{clouds → cloud}/CloudHandler.d.ts +0 -0
- /package/dist/{clouds → cloud}/CloudHandler.js +0 -0
- /package/dist/{clouds → cloud}/CloudService.d.ts +0 -0
- /package/dist/{clouds → cloud}/CloudService.js +0 -0
- /package/dist/{clouds → cloud}/DropboxHandler.d.ts +0 -0
- /package/dist/{clouds → cloud}/DropboxHandler.js +0 -0
- /package/dist/{clouds → cloud}/GoogleDriveHandler.d.ts +0 -0
- /package/dist/{clouds → cloud}/GoogleDriveHandler.js +0 -0
- /package/dist/{samples/SampleImporter.js → soundfont/SoundfontProvider.js} +0 -0
- /package/dist/{yjs → ysync}/YMapper.d.ts +0 -0
- /package/dist/{yjs → ysync}/YMapper.js +0 -0
- /package/dist/{yjs → ysync}/YSync.d.ts +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Arrays, Errors, panic, Progress, RuntimeNotifier, UUID } from "@opendaw/lib-std";
|
|
2
|
+
import { network, Promises } from "@opendaw/lib-runtime";
|
|
3
|
+
import { OpenSoundfontAPI, SoundfontStorage } from "../soundfont";
|
|
4
|
+
export class CloudBackupSoundfonts {
|
|
5
|
+
static RemotePath = "soundfonts";
|
|
6
|
+
static RemoteCatalogPath = `${this.RemotePath}/index.json`;
|
|
7
|
+
static areSoundfontsEqual = ({ uuid: a }, { uuid: b }) => a === b;
|
|
8
|
+
static pathFor(uuid) { return `${this.RemotePath}/${uuid}.wav`; }
|
|
9
|
+
static async start(cloudHandler, progress, log) {
|
|
10
|
+
log("Collecting all soundfont domains...");
|
|
11
|
+
const [stock, local, cloud] = await Promise.all([
|
|
12
|
+
OpenSoundfontAPI.get().all(),
|
|
13
|
+
SoundfontStorage.get().list(),
|
|
14
|
+
cloudHandler.download(CloudBackupSoundfonts.RemoteCatalogPath)
|
|
15
|
+
.then(json => JSON.parse(new TextDecoder().decode(json)))
|
|
16
|
+
.catch(reason => reason instanceof Errors.FileNotFound ? Arrays.empty() : panic(reason))
|
|
17
|
+
]);
|
|
18
|
+
return new CloudBackupSoundfonts(cloudHandler, { stock, local, cloud }, log).#start(progress);
|
|
19
|
+
}
|
|
20
|
+
#cloudHandler;
|
|
21
|
+
#soundfontDomains;
|
|
22
|
+
#log;
|
|
23
|
+
constructor(cloudHandler, soundfontDomains, log) {
|
|
24
|
+
this.#cloudHandler = cloudHandler;
|
|
25
|
+
this.#soundfontDomains = soundfontDomains;
|
|
26
|
+
this.#log = log;
|
|
27
|
+
}
|
|
28
|
+
async #start(progress) {
|
|
29
|
+
const trashed = await SoundfontStorage.get().loadTrashedIds();
|
|
30
|
+
const [uploadProgress, trashProgress, downloadProgress] = Progress.splitWithWeights(progress, [0.45, 0.10, 0.45]);
|
|
31
|
+
await this.#upload(uploadProgress);
|
|
32
|
+
await this.#trash(trashed, trashProgress);
|
|
33
|
+
await this.#download(trashed, downloadProgress);
|
|
34
|
+
}
|
|
35
|
+
async #upload(progress) {
|
|
36
|
+
const { stock, local, cloud } = this.#soundfontDomains;
|
|
37
|
+
const maybeUnsyncedSoundfonts = Arrays.subtract(local, stock, CloudBackupSoundfonts.areSoundfontsEqual);
|
|
38
|
+
const unsyncedSoundfonts = Arrays.subtract(maybeUnsyncedSoundfonts, cloud, CloudBackupSoundfonts.areSoundfontsEqual);
|
|
39
|
+
if (unsyncedSoundfonts.length === 0) {
|
|
40
|
+
this.#log("No unsynced soundfonts found.");
|
|
41
|
+
progress(1.0);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const uploadedSoundfonts = await Promises.sequentialAll(unsyncedSoundfonts.map((soundfont, index, { length }) => async () => {
|
|
45
|
+
progress((index + 1) / length);
|
|
46
|
+
this.#log(`Uploading soundfont '${soundfont.name}'`);
|
|
47
|
+
const arrayBuffer = await SoundfontStorage.get().load(UUID.parse(soundfont.uuid))
|
|
48
|
+
.then(([file, _meta]) => file);
|
|
49
|
+
const path = CloudBackupSoundfonts.pathFor(soundfont.uuid);
|
|
50
|
+
await Promises.approvedRetry(() => this.#cloudHandler.upload(path, arrayBuffer), error => ({
|
|
51
|
+
headline: "Upload failed",
|
|
52
|
+
message: `Failed to upload soundfont '${soundfont.name}'. '${error}'`,
|
|
53
|
+
approveText: "Retry",
|
|
54
|
+
cancelText: "Cancel"
|
|
55
|
+
}));
|
|
56
|
+
return soundfont;
|
|
57
|
+
}));
|
|
58
|
+
const catalog = Arrays.merge(cloud, uploadedSoundfonts, CloudBackupSoundfonts.areSoundfontsEqual);
|
|
59
|
+
await this.#uploadCatalog(catalog);
|
|
60
|
+
progress(1.0);
|
|
61
|
+
}
|
|
62
|
+
async #trash(trashed, progress) {
|
|
63
|
+
const { cloud } = this.#soundfontDomains;
|
|
64
|
+
const obsolete = Arrays.intersect(cloud, trashed, (soundfont, uuid) => soundfont.uuid === uuid);
|
|
65
|
+
if (obsolete.length === 0) {
|
|
66
|
+
progress(1.0);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const approved = await RuntimeNotifier.approve({
|
|
70
|
+
headline: "Delete Soundfonts?",
|
|
71
|
+
message: `Found ${obsolete.length} locally deleted soundfonts. Delete from cloud as well?`,
|
|
72
|
+
approveText: "Yes",
|
|
73
|
+
cancelText: "No"
|
|
74
|
+
});
|
|
75
|
+
if (!approved) {
|
|
76
|
+
progress(1.0);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const result = await Promises.sequentialAll(obsolete.map((soundfont, index, { length }) => async () => {
|
|
80
|
+
progress((index + 1) / length);
|
|
81
|
+
this.#log(`Deleting '${soundfont.name}'`);
|
|
82
|
+
await this.#cloudHandler.delete(CloudBackupSoundfonts.pathFor(soundfont.uuid));
|
|
83
|
+
return soundfont;
|
|
84
|
+
}));
|
|
85
|
+
const catalog = cloud.slice();
|
|
86
|
+
result.forEach((soundfont) => Arrays.removeIf(catalog, ({ uuid }) => soundfont.uuid === uuid));
|
|
87
|
+
await this.#uploadCatalog(catalog);
|
|
88
|
+
progress(1.0);
|
|
89
|
+
}
|
|
90
|
+
async #download(trashed, progress) {
|
|
91
|
+
const { cloud, local } = this.#soundfontDomains;
|
|
92
|
+
const missingLocally = Arrays.subtract(cloud, local, CloudBackupSoundfonts.areSoundfontsEqual);
|
|
93
|
+
const download = Arrays.subtract(missingLocally, trashed, (soundfont, uuid) => soundfont.uuid === uuid);
|
|
94
|
+
if (download.length === 0) {
|
|
95
|
+
this.#log("No soundfonts to download.");
|
|
96
|
+
progress(1.0);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
await Promises.sequentialAll(download.map((soundfont, index, { length }) => async () => {
|
|
100
|
+
progress((index + 1) / length);
|
|
101
|
+
this.#log(`Downloading soundfont '${soundfont.name}'`);
|
|
102
|
+
const path = CloudBackupSoundfonts.pathFor(soundfont.uuid);
|
|
103
|
+
const buffer = await Promises.guardedRetry(() => this.#cloudHandler.download(path), network.DefaultRetry);
|
|
104
|
+
await SoundfontStorage.get().save({
|
|
105
|
+
uuid: UUID.parse(soundfont.uuid),
|
|
106
|
+
file: buffer,
|
|
107
|
+
meta: soundfont
|
|
108
|
+
});
|
|
109
|
+
return soundfont;
|
|
110
|
+
}));
|
|
111
|
+
this.#log("Download soundfonts complete.");
|
|
112
|
+
progress(1.0);
|
|
113
|
+
}
|
|
114
|
+
async #uploadCatalog(catalog) {
|
|
115
|
+
this.#log("Uploading soundfonts catalog...");
|
|
116
|
+
const jsonString = JSON.stringify(catalog, null, 2);
|
|
117
|
+
const buffer = new TextEncoder().encode(jsonString).buffer;
|
|
118
|
+
return this.#cloudHandler.upload(CloudBackupSoundfonts.RemoteCatalogPath, buffer);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudHandler.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudHandler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudService.d.ts","sourceRoot":"","sources":["../../src/cloud/CloudService.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropboxHandler.d.ts","sourceRoot":"","sources":["../../src/cloud/DropboxHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,qBAAa,cAAe,YAAW,YAAY;;gBAKnC,WAAW,EAAE,MAAM;IAEzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe5C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAO3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleDriveHandler.d.ts","sourceRoot":"","sources":["../../src/cloud/GoogleDriveHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAmB3C,qBAAa,kBAAmB,YAAW,YAAY;;gBAKvC,WAAW,EAAE,MAAM;IAEzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAe5C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAmK5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA"}
|
|
@@ -35,7 +35,8 @@ describe("DawProjectExport", () => {
|
|
|
35
35
|
}
|
|
36
36
|
remove(_uuid) { return panic("Method not implemented."); }
|
|
37
37
|
invalidate(_uuid) { return panic("Method not implemented."); }
|
|
38
|
-
}
|
|
38
|
+
},
|
|
39
|
+
soundfontManager: InaccessibleProperty
|
|
39
40
|
}, arrayBuffer);
|
|
40
41
|
const schema = DawProjectExporter.write(project, {
|
|
41
42
|
write: (path, buffer) => {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Option } from "@opendaw/lib-std";
|
|
2
|
+
import { ProjectSkeleton } from "@opendaw/studio-adapters";
|
|
3
|
+
import { ProjectProfile } from "../project";
|
|
4
|
+
import { SampleService } from "../samples";
|
|
5
|
+
export declare class DawProjectService {
|
|
6
|
+
readonly sampleService: SampleService;
|
|
7
|
+
constructor(sampleService: SampleService);
|
|
8
|
+
importDawproject(): Promise<Option<ProjectSkeleton>>;
|
|
9
|
+
exportDawproject(profile: ProjectProfile): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=DawProjectService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DawProjectService.d.ts","sourceRoot":"","sources":["../../src/dawproject/DawProjectService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAyB,MAAM,kBAAkB,CAAA;AAKlF,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAIxD,OAAO,EAAC,cAAc,EAAC,MAAM,YAAY,CAAA;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAA;AAExC,qBAAa,iBAAiB;IACd,QAAQ,CAAC,aAAa,EAAE,aAAa;gBAA5B,aAAa,EAAE,aAAa;IAE3C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IA2BpD,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBjE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Errors, isDefined, Option, panic, RuntimeNotifier } from "@opendaw/lib-std";
|
|
2
|
+
import { Promises } from "@opendaw/lib-runtime";
|
|
3
|
+
import { Files } from "@opendaw/lib-dom";
|
|
4
|
+
import { Xml } from "@opendaw/lib-xml";
|
|
5
|
+
import { MetaDataSchema } from "@opendaw/lib-dawproject";
|
|
6
|
+
import { DawProject } from "./DawProject";
|
|
7
|
+
import { FilePickerAcceptTypes } from "../FilePickerAcceptTypes";
|
|
8
|
+
import { DawProjectImport } from "./DawProjectImport";
|
|
9
|
+
export class DawProjectService {
|
|
10
|
+
sampleService;
|
|
11
|
+
constructor(sampleService) {
|
|
12
|
+
this.sampleService = sampleService;
|
|
13
|
+
}
|
|
14
|
+
async importDawproject() {
|
|
15
|
+
const { status, value, error } = await Promises.tryCatch(Files.open({ types: [FilePickerAcceptTypes.DawprojectFileType] }));
|
|
16
|
+
if (status === "rejected") {
|
|
17
|
+
if (Errors.isAbort(error)) {
|
|
18
|
+
return Option.None;
|
|
19
|
+
}
|
|
20
|
+
return panic(String(error));
|
|
21
|
+
}
|
|
22
|
+
const file = value.at(0);
|
|
23
|
+
if (!isDefined(file)) {
|
|
24
|
+
return Option.None;
|
|
25
|
+
}
|
|
26
|
+
const arrayBuffer = await file.arrayBuffer();
|
|
27
|
+
const { project: projectSchema, resources } = await DawProject.decode(arrayBuffer);
|
|
28
|
+
const importResult = await Promises.tryCatch(DawProjectImport.read(projectSchema, resources));
|
|
29
|
+
if (importResult.status === "rejected") {
|
|
30
|
+
await RuntimeNotifier.info({ headline: "Import Error", message: String(importResult.error) });
|
|
31
|
+
return Option.None;
|
|
32
|
+
}
|
|
33
|
+
const { skeleton, audioIds } = importResult.value;
|
|
34
|
+
await Promise.all(audioIds
|
|
35
|
+
.map(uuid => resources.fromUUID(uuid))
|
|
36
|
+
.map(resource => this.sampleService.importFile({
|
|
37
|
+
uuid: resource.uuid,
|
|
38
|
+
name: resource.name,
|
|
39
|
+
arrayBuffer: resource.buffer
|
|
40
|
+
})));
|
|
41
|
+
return Option.wrap(skeleton);
|
|
42
|
+
}
|
|
43
|
+
async exportDawproject(profile) {
|
|
44
|
+
const { project, meta } = profile;
|
|
45
|
+
const { status, error, value: zip } = await Promises.tryCatch(DawProject.encode(project, Xml.element({
|
|
46
|
+
title: meta.name,
|
|
47
|
+
year: new Date().getFullYear().toString(),
|
|
48
|
+
website: "https://opendaw.studio"
|
|
49
|
+
}, MetaDataSchema)));
|
|
50
|
+
if (status === "rejected") {
|
|
51
|
+
return RuntimeNotifier.info({ headline: "Export Error", message: String(error) });
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const { status, error } = await Promises.tryCatch(Files.save(zip, { types: [FilePickerAcceptTypes.DawprojectFileType] }));
|
|
55
|
+
if (status === "rejected" && !Errors.isAbort(error)) {
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dawproject/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const VITE_GOOGLE_CLIENT_ID: string;
|
|
2
|
+
export declare const VITE_DROPBOX_CLIENT_ID: string;
|
|
3
|
+
export declare const VITE_VJS_USE_LOCAL_SERVER: string;
|
|
4
|
+
export declare const VITE_VJS_LOCAL_SERVER_URL: string;
|
|
5
|
+
export declare const VITE_VJS_ONLINE_SERVER_URL: string;
|
|
6
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB,EAAgC,MAAM,CAAA;AACxE,eAAO,MAAM,sBAAsB,EAAiC,MAAM,CAAA;AAC1E,eAAO,MAAM,yBAAyB,EAAoC,MAAM,CAAA;AAChF,eAAO,MAAM,yBAAyB,EAAoC,MAAM,CAAA;AAChF,eAAO,MAAM,0BAA0B,EAAqC,MAAM,CAAA"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// This works in both Vite and Next.js
|
|
2
|
+
const env = typeof window !== "undefined" && import.meta.env
|
|
3
|
+
? import.meta.env // Vite (browser)
|
|
4
|
+
: process.env; // Next.js (gets replaced at build time)
|
|
5
|
+
export const VITE_GOOGLE_CLIENT_ID = env.VITE_GOOGLE_CLIENT_ID;
|
|
6
|
+
export const VITE_DROPBOX_CLIENT_ID = env.VITE_DROPBOX_CLIENT_ID;
|
|
7
|
+
export const VITE_VJS_USE_LOCAL_SERVER = env.VITE_VJS_USE_LOCAL_SERVER;
|
|
8
|
+
export const VITE_VJS_LOCAL_SERVER_URL = env.VITE_VJS_LOCAL_SERVER_URL;
|
|
9
|
+
export const VITE_VJS_ONLINE_SERVER_URL = env.VITE_VJS_ONLINE_SERVER_URL;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,35 +1,14 @@
|
|
|
1
|
-
export * from "./capture
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
7
|
-
export * from "./
|
|
8
|
-
export * from "./
|
|
9
|
-
export * from "./
|
|
10
|
-
export * from "./
|
|
11
|
-
export * from "./
|
|
12
|
-
export * from "./project/Project";
|
|
13
|
-
export * from "./project/ProjectApi";
|
|
14
|
-
export * from "./project/ProjectBundle";
|
|
15
|
-
export * from "./project/ProjectEnv";
|
|
16
|
-
export * from "./project/ProjectMeta";
|
|
17
|
-
export * from "./project/ProjectPaths";
|
|
18
|
-
export * from "./project/ProjectProfile";
|
|
19
|
-
export * from "./project/ProjectSignals";
|
|
20
|
-
export * from "./project/ProjectStorage";
|
|
21
|
-
export * from "./samples/index";
|
|
22
|
-
export * from "./sync-log/Commit";
|
|
23
|
-
export * from "./sync-log/SyncLogReader";
|
|
24
|
-
export * from "./sync-log/SyncLogWriter";
|
|
25
|
-
export * from "./clouds/CloudAuthManager";
|
|
26
|
-
export * from "./clouds/CloudHandler";
|
|
27
|
-
export * from "./clouds/CloudBackup";
|
|
28
|
-
export * from "./ui/TimelineRange";
|
|
29
|
-
export * from "./utils/AutofitUtils";
|
|
30
|
-
export * from "./yjs/YService";
|
|
31
|
-
export * from "./yjs/YSync";
|
|
32
|
-
export * from "./yjs/YMapper";
|
|
1
|
+
export * from "./capture";
|
|
2
|
+
export * from "./cloud";
|
|
3
|
+
export * from "./dawproject";
|
|
4
|
+
export * from "./midi";
|
|
5
|
+
export * from "./project";
|
|
6
|
+
export * from "./samples";
|
|
7
|
+
export * from "./soundfont";
|
|
8
|
+
export * from "./sync-log";
|
|
9
|
+
export * from "./ui";
|
|
10
|
+
export * from "./utils";
|
|
11
|
+
export * from "./ysync";
|
|
33
12
|
export * from "./AudioDevices";
|
|
34
13
|
export * from "./AudioOfflineRenderer";
|
|
35
14
|
export * from "./AudioUnitOrdering";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,MAAM,CAAA;AACpB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AAEvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,14 @@
|
|
|
1
|
-
export * from "./capture
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
7
|
-
export * from "./
|
|
8
|
-
export * from "./
|
|
9
|
-
export * from "./
|
|
10
|
-
export * from "./
|
|
11
|
-
export * from "./
|
|
12
|
-
export * from "./project/Project";
|
|
13
|
-
export * from "./project/ProjectApi";
|
|
14
|
-
export * from "./project/ProjectBundle";
|
|
15
|
-
export * from "./project/ProjectEnv";
|
|
16
|
-
export * from "./project/ProjectMeta";
|
|
17
|
-
export * from "./project/ProjectPaths";
|
|
18
|
-
export * from "./project/ProjectProfile";
|
|
19
|
-
export * from "./project/ProjectSignals";
|
|
20
|
-
export * from "./project/ProjectStorage";
|
|
21
|
-
export * from "./samples/index";
|
|
22
|
-
export * from "./sync-log/Commit";
|
|
23
|
-
export * from "./sync-log/SyncLogReader";
|
|
24
|
-
export * from "./sync-log/SyncLogWriter";
|
|
25
|
-
export * from "./clouds/CloudAuthManager";
|
|
26
|
-
export * from "./clouds/CloudHandler";
|
|
27
|
-
export * from "./clouds/CloudBackup";
|
|
28
|
-
export * from "./ui/TimelineRange";
|
|
29
|
-
export * from "./utils/AutofitUtils";
|
|
30
|
-
export * from "./yjs/YService";
|
|
31
|
-
export * from "./yjs/YSync";
|
|
32
|
-
export * from "./yjs/YMapper";
|
|
1
|
+
export * from "./capture";
|
|
2
|
+
export * from "./cloud";
|
|
3
|
+
export * from "./dawproject";
|
|
4
|
+
export * from "./midi";
|
|
5
|
+
export * from "./project";
|
|
6
|
+
export * from "./samples";
|
|
7
|
+
export * from "./soundfont";
|
|
8
|
+
export * from "./sync-log";
|
|
9
|
+
export * from "./ui";
|
|
10
|
+
export * from "./utils";
|
|
11
|
+
export * from "./ysync";
|
|
33
12
|
export * from "./AudioDevices";
|
|
34
13
|
export * from "./AudioOfflineRenderer";
|
|
35
14
|
export * from "./AudioUnitOrdering";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/midi/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA"}
|