Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
m1k1o
GitHub Repository: m1k1o/neko
Path: blob/master/client/src/store/files.ts
1301 views
1
import { actionTree, getterTree, mutationTree } from 'typed-vuex'
2
import { FileListItem, FileTransfer } from '~/neko/types'
3
import { EVENT } from '~/neko/events'
4
import { accessor } from '~/store'
5
6
export const state = () => ({
7
cwd: '',
8
files: [] as FileListItem[],
9
transfers: [] as FileTransfer[],
10
})
11
12
export const getters = getterTree(state, {
13
//
14
})
15
16
export const mutations = mutationTree(state, {
17
_setCwd(state, cwd: string) {
18
state.cwd = cwd
19
},
20
21
_setFileList(state, files: FileListItem[]) {
22
state.files = files
23
},
24
25
_addTransfer(state, transfer: FileTransfer) {
26
state.transfers = [...state.transfers, transfer]
27
},
28
29
_removeTransfer(state, transfer: FileTransfer) {
30
state.transfers = state.transfers.filter((t) => t.id !== transfer.id)
31
},
32
})
33
34
export const actions = actionTree(
35
{ state, getters, mutations },
36
{
37
setCwd(store, cwd: string) {
38
accessor.files._setCwd(cwd)
39
},
40
41
setFileList(store, files: FileListItem[]) {
42
accessor.files._setFileList(files)
43
},
44
45
addTransfer(store, transfer: FileTransfer) {
46
if (transfer.status !== 'pending') {
47
return
48
}
49
accessor.files._addTransfer(transfer)
50
},
51
52
removeTransfer(store, transfer: FileTransfer) {
53
accessor.files._removeTransfer(transfer)
54
},
55
56
cancelAllTransfers() {
57
for (const t of accessor.files.transfers) {
58
if (t.status !== 'completed') {
59
t.abortController?.abort()
60
}
61
accessor.files.removeTransfer(t)
62
}
63
},
64
65
refresh() {
66
if (!accessor.connected) {
67
return
68
}
69
$client.sendMessage(EVENT.FILETRANSFER.REFRESH)
70
},
71
},
72
)
73
74