diff --git a/src/client/admin/EmitterInfo.svelte b/src/client/admin/EmitterInfo.svelte
index 026ca39..7b38403 100644
--- a/src/client/admin/EmitterInfo.svelte
+++ b/src/client/admin/EmitterInfo.svelte
@@ -103,13 +103,14 @@
{@const keyInFiles = `${emitter.emitterShortId}/${file.name}`}
{@const valueInFiles = files?.[keyInFiles]}
- {@html iconFile}
{file.name} ({formatSize(file.size, $_)}){file.name} (
{formatSize(file.size, $_)})
{#if valueInFiles === file.size}
{@html iconFileCheck}
{:else if valueInFiles != null}
-
+
{formatSize(valueInFiles, $_)}
{/if}
{/each}
diff --git a/src/client/model.ts b/src/client/model.ts
index 25cacba..7f1bace 100644
--- a/src/client/model.ts
+++ b/src/client/model.ts
@@ -296,7 +296,7 @@ export const createModel = () => {
await removeFileByName(arg.fileName);
},
async uploadFile(arg) {
- await uploadFile(arg.fileName, arg.uploadURL);
+ await uploadFile(arg.fileName, arg.uploadURL, arg.startByte);
},
async changeStreamConfig(arg) {
emitterStreamConfig$.set(arg.streamConfig);
diff --git a/src/client/storage/browserStorage.ts b/src/client/storage/browserStorage.ts
index 3bf540b..2e49bc6 100644
--- a/src/client/storage/browserStorage.ts
+++ b/src/client/storage/browserStorage.ts
@@ -77,13 +77,13 @@ export const removeFileByName = async (name: string) => {
refreshStorageFiles();
};
-export const uploadFile = async (name: string, url: string) => {
+export const uploadFile = async (name: string, url: string, startByte: number) => {
const directory = await navigator.storage.getDirectory();
const fileHandle = await directory.getFileHandle(name);
const body = await fileHandle.getFile();
const res = await fetch(url, {
method: "PUT",
- body,
+ body: body.slice(startByte),
});
console.log(res);
};
diff --git a/src/common/rpcInterface.ts b/src/common/rpcInterface.ts
index 3c51803..1f36faa 100644
--- a/src/common/rpcInterface.ts
+++ b/src/common/rpcInterface.ts
@@ -112,14 +112,14 @@ export interface RpcClientInterface {
createAnswerRTCConnection(arg: { offer: RTCSessionDescriptionInit }): RTCSessionDescriptionInit;
completeOfferRTCConnection(arg: { answer: RTCSessionDescriptionInit }): void;
iceCandidate(arg: { candidate: RTCIceCandidateInit | null }): void;
- uploadFile(arg: { fileName: string; uploadURL: string }): void;
+ uploadFile(arg: { fileName: string; uploadURL: string; startByte: number }): void;
removeFile(arg: { fileName: string }): void;
changeStreamConfig?(arg: { streamConfig: MediaStreamConstraints | undefined }): void;
}
export interface RpcServerInterface {
iceCandidate?(arg: { candidate: RTCIceCandidateInit | null }): void;
- uploadFile?(arg: { emitterId: string; fileName: string }): void;
+ uploadFile?(arg: { emitterId: string; fileName: string; startByte: number }): void;
removeFile?(arg: { emitterId: string; fileName: string }): void;
toggleRecording?(arg: { emitterId: string; action: "stop" | "start" | "newFile"; receiver?: boolean; emitter?: boolean }): void;
transformImage?(arg: { emitterId: string; transformImage: TransformImage | undefined }): void;
diff --git a/src/server/clientConnection.ts b/src/server/clientConnection.ts
index 2451674..c84c10b 100644
--- a/src/server/clientConnection.ts
+++ b/src/server/clientConnection.ts
@@ -314,10 +314,12 @@ export const createClientsManager = (
const uploadURL = uploadManager.createUploadURL({
emitterShortId: emitter.shortId,
fileName: arg.fileName,
+ startByte: arg.startByte,
});
await emitter.api?.("uploadFile", {
fileName: arg.fileName,
uploadURL,
+ startByte: arg.startByte,
});
}
},
diff --git a/src/server/uploadManager.ts b/src/server/uploadManager.ts
index 349d48c..e165270 100644
--- a/src/server/uploadManager.ts
+++ b/src/server/uploadManager.ts
@@ -11,6 +11,7 @@ import equal from "fast-deep-equal";
export interface FileInfo {
emitterShortId: string;
fileName: string;
+ startByte: number;
}
export const createUploadManager = (config: Pick, configFilePath: string) => {
@@ -30,10 +31,10 @@ export const createUploadManager = (config: Pick
receivedFiles$.update((receivedFiles) => {
- receivedFiles[`${fileInfo.emitterShortId}/${fileInfo.fileName}`] = stream.bytesWritten;
+ receivedFiles[`${fileInfo.emitterShortId}/${fileInfo.fileName}`] = fileInfo.startByte + stream.bytesWritten;
return receivedFiles;
});
update();