about summary refs log tree commit diff
path: root/assets/src/models/own_request.ts
diff options
context:
space:
mode:
Diffstat (limited to 'assets/src/models/own_request.ts')
-rw-r--r--assets/src/models/own_request.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/assets/src/models/own_request.ts b/assets/src/models/own_request.ts
new file mode 100644
index 0000000..2ad29af
--- /dev/null
+++ b/assets/src/models/own_request.ts
@@ -0,0 +1,40 @@
+import { bindTransfer, Transfer } from "../network/transfer/transfer";
+import { writable, Writable } from "svelte/store";
+import { createAnswerTransfer } from "../network/transfer/request_transfer";
+
+// Represents the current progress of the request
+export enum OwnRequestState {
+    PENDING,
+    ACKNOWLEDGED,
+
+    IN_FLIGHT,
+    DONE,
+
+    DECLINED,
+    SHARE_CANCELLED,
+    NO_SUCH_SHARE,
+}
+
+export type OwnRequest = {
+    // Transfer is null while request isn't IN_FLIGHT
+    transfer: Transfer | null;
+    state: Writable<OwnRequestState>;
+};
+
+export function initializeRequest(): OwnRequest {
+    return {
+        transfer: null,
+        state: writable(OwnRequestState.PENDING),
+    };
+}
+
+export function requestAccepted(
+    request: OwnRequest,
+    description: RTCSessionDescriptionInit
+) {
+    request.state.set(OwnRequestState.IN_FLIGHT);
+
+    bindTransfer(request, createAnswerTransfer(description), () =>
+        request.state.set(OwnRequestState.DONE)
+    );
+}