about summary refs log tree commit diff
path: root/assets/src/models/own_request.ts
blob: 2ad29af8e1baa38ae232882e500b42e726c4c65f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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)
    );
}