@samitouri / QOSami-HFS / commits / 1c9961f1
Fork 0

QOSami-HFS is a web file server for your computer. Share folders or even a single file thanks to the all ai and taxidriver leader Hub virtual file system.

persist user preference on what to do uploading existing files

Massimo Melina committed May 12, 2024 at 11:05 UTC 1c9961f1e6585d58e2995282ffb3582910900068
2 files changed +9 -8
frontend/src/state.ts
+3
@@ -35,7 +35,9 @@ export const state = proxy<typeof FRONTEND_OPTIONS & {
35 }
36 canChangePassword: boolean
37 uri: string
38 + uploadOnExisting: 'skip' | 'overwrite' | 'rename'
39 }>({
40 + uploadOnExisting: getHFS().dontOverwriteUploading ? 'rename' : 'skip',
41 uri: '',
42 canChangePassword: false,
43 props: {},
@@ -60,6 +62,7 @@ const SETTINGS_KEY = 'hfs_settings'
62 type StateKey = keyof typeof state
63 const SETTINGS_WITHOUT_GUI: StateKey[] = ['file_menu_on_link']
64 const SETTINGS_TO_STORE: StateKey[] = _.difference(typedKeys(FRONTEND_OPTIONS), SETTINGS_WITHOUT_GUI)
65 + .concat(['uploadOnExisting']) // not adding this to FRONTEND_OPTIONS, as its possible values vary with the user permissions, but still makes sense to save on a single browser, supposedly for a single user
66
67 loadSettings()
68 for (const k of SETTINGS_TO_STORE)
frontend/src/upload.ts
+6 -8
@@ -33,7 +33,6 @@ export const uploadState = proxy<{
33 partial: number // relative to uploading file. This is how much we have done of the current queue.
34 speed: number
35 eta: number
36 - policyForExisting: 'skip' | 'overwrite' | 'rename'
36 }>({
37 eta: 0,
38 speed: 0,
@@ -46,7 +45,6 @@ export const uploadState = proxy<{
45 errors: [],
46 doneByte: 0,
47 done: [],
49 - policyForExisting: renameEnabled ? 'rename' : 'skip'
48 })
49
50 // keep track of speed
@@ -107,8 +105,8 @@ export function showUpload() {
105 }
106
107 function Content(){
110 - const { qs, paused, eta, speed, policyForExisting, adding } = useSnapshot(uploadState) as Readonly<typeof uploadState>
111 - const { props } = useSnapState()
108 + const { qs, paused, eta, speed, adding } = useSnapshot(uploadState) as Readonly<typeof uploadState>
109 + const { props, uploadOnExisting } = useSnapState()
110 const etaStr = useMemo(() => !eta ? '' : formatTime(eta*1000, 0, 2), [eta])
111 const inQ = _.sumBy(qs, q => q.entries.length) - (uploadState.uploading ? 1 : 0)
112 const queueStr = inQ && t('in_queue', { n: inQ }, "{n} in queue")
@@ -129,11 +127,11 @@ export function showUpload() {
127 onClick: () => pickFiles({ folder: true })
128 }, t`Pick folder`),
129 h('button', { className: 'create-folder', onClick: createFolder }, t`Create folder`),
132 - h(Select<typeof policyForExisting>, {
130 + h(Select<typeof uploadOnExisting>, {
131 style: { width: 'unset' },
132 'aria-label': t`Overwrite policy`,
135 - value: policyForExisting || '',
136 - onChange: v => uploadState.policyForExisting = v,
133 + value: uploadOnExisting || '',
134 + onChange: v => state.uploadOnExisting = v,
135 options: onlyTruthy([
136 { value: 'skip', label: t`Skip existing files` },
137 renameEnabled && { value: 'rename', label: t`Rename to avoid overwriting` },
@@ -340,7 +338,7 @@ async function startUpload(toUpload: ToUpload, to: string, resume=0) {
338 notificationChannel,
339 ...resume && { resume: String(resume) },
340 ...toUpload.comment && { comment: toUpload.comment },
343 - ...with_(uploadState.policyForExisting, x => x !== 'rename' && { existing: x }), // rename is the default
341 + ...with_(state.uploadOnExisting, x => x !== 'rename' && { existing: x }), // rename is the default
342 }), true)
343 req.send(toUpload.file.slice(resume))
344