diff --git a/src/page/plugins/filetransfer/component.vue b/src/page/plugins/filetransfer/component.vue index e7d774f6..59205a16 100644 --- a/src/page/plugins/filetransfer/component.vue +++ b/src/page/plugins/filetransfer/component.vue @@ -2,11 +2,11 @@
-

Filetransfer is {{ isLocked ? 'locked' : 'unlocked' }} for users

- +

Filetransfer is {{ enabledInSettings ? 'unlocked' : 'locked' }} for users

+
-

{{ enabled ? cwd : 'Filetransfer is disabled' }}

+

{{ enabledSystemWide ? cwd : 'Filetransfer is disabled system wide' }}

@@ -14,10 +14,10 @@

{{ item.name }}

{{ fileSize(item.size) }}

- +
-
+

Downloads @@ -286,8 +286,15 @@ const props = defineProps<{ const api = props.neko.withApi(FiletransferApi) as FiletransferApi -const enabled = ref(false) -const enabledForMe = computed(() => enabled.value && (props.neko.is_admin || (!props.neko.is_admin && !isLocked.value))) +// config option to enable/disable filetransfer plugin +const enabledSystemWide = ref(false) +// dynamic settings for filetransfer plugin +const enabledInSettings = computed(() => !(props.neko.state.settings?.plugins?.filetransfer?.enabled === false)) +// user specific setting to enable/disable filetransfer plugin +const enabledForMe = computed(() => !(props.neko.session?.profile?.plugins?.filetransfer?.enabled === false)) +// combined enabled state for filetransfer plugin and user +const enabled = computed(() => enabledSystemWide.value && (enabledInSettings.value || props.neko.is_admin) && enabledForMe.value) + const cwd = ref('') const files = ref([]) const transfers = reactive([]) @@ -301,7 +308,7 @@ onMounted(async () => { switch (event) { case FILETRANSFER_UPDATE: const msg = payload as Message - enabled.value = msg.enabled + enabledSystemWide.value = msg.enabled cwd.value = msg.root_dir files.value = msg.files break @@ -309,6 +316,14 @@ onMounted(async () => { }) }) +async function toggleEnabled(inEnabled = true) { + try { + await props.neko.room.settingsSet({ plugins: { filetransfer: { "enabled": inEnabled} } }) + } catch (e: any) { + alert(e.response ? e.response.data.message : e) + } +} + function refresh() { props.neko.sendMessage(FILETRANSFER_UPDATE) } @@ -523,14 +538,4 @@ function fileSize(size: number) { } return Math.round(size / (1024 * 1024 * 1024 * 1024)) + ' TB' } - -const isLocked = computed(() => props.neko.state.settings?.plugins?.filetransfer === true) - -async function setLock(isLocked = true) { - try { - await props.neko.room.settingsSet({ plugins: { filetransfer: isLocked } }) - } catch (e: any) { - alert(e.response ? e.response.data.message : e) - } -} diff --git a/src/page/plugins/filetransfer/types.ts b/src/page/plugins/filetransfer/types.ts index 24d74db8..59bdfd6c 100644 --- a/src/page/plugins/filetransfer/types.ts +++ b/src/page/plugins/filetransfer/types.ts @@ -1,3 +1,7 @@ +export interface Settings { + enabled: boolean +} + export const FILETRANSFER_UPDATE = "filetransfer/update" export interface Message {