From c3b05a72b7185112ece6e42c99e9a828c8298f04 Mon Sep 17 00:00:00 2001 From: Melonai Date: Thu, 8 Jul 2021 23:29:20 +0200 Subject: State display for incoming and own requests --- assets/src/models/incoming_request.ts | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 assets/src/models/incoming_request.ts (limited to 'assets/src/models/incoming_request.ts') diff --git a/assets/src/models/incoming_request.ts b/assets/src/models/incoming_request.ts new file mode 100644 index 0000000..e1eefb1 --- /dev/null +++ b/assets/src/models/incoming_request.ts @@ -0,0 +1,57 @@ +import { bindTransfer, Transfer } from "../network/transfer/transfer"; +import { Writable, writable } from "svelte/store"; +import { createOfferTransfer } from "../network/transfer/share_transfer"; + +// Represents the current progress of every request +export enum IncomingRequestState { + // Request was neither accepted nor declined yet + WAITING, + // Data is being transferred, more precise data + // is available in the corresponding Transfer object + IN_FLIGHT, + // Requestor has received all data + DONE, + // Request was declined + DECLINED, +} + +// Identifying information about the requestor +export type IncomingRequestInfo = { + token: string; +}; + +// The model for a request received by a sharer +// The state marks changes in the progression of the request lifecycle and can be subscribed to +export type IncomingRequest = { + // Transfer is null while request isn't IN_FLIGHT + transfer: Transfer | null; + info: IncomingRequestInfo; + state: Writable; +}; + +// Create a model for a new incoming request +export function newIncomingRequest(token: string): IncomingRequest { + const info = { + token, + }; + + return { + transfer: null, + info, + // Each request starts out as just received and waiting for an answer + state: writable(IncomingRequestState.WAITING), + }; +} + +// Starts the transfer of data from the sharer to the requestor +export function acceptIncomingRequest(request: IncomingRequest) { + request.state.set(IncomingRequestState.IN_FLIGHT); + + bindTransfer(request, createOfferTransfer(request.info.token), () => + request.state.set(IncomingRequestState.DONE) + ); +} + +export function declineIncomingRequest(request: IncomingRequest) { + // TODO +} -- cgit 1.4.1