diff --git a/client/src/components/files.vue b/client/src/components/files.vue index e8c3005e..b5f263f9 100644 --- a/client/src/components/files.vue +++ b/client/src/components/files.vue @@ -9,7 +9,7 @@

{{ item.name }}

{{ fileSize(item.size) }}

- +
@@ -73,6 +73,7 @@
{ ///////////////////////////// // File Transfer Events ///////////////////////////// - protected [EVENT.FILETRANSFER.LIST]({ cwd, files }: FileTransferListPayload) { + protected [EVENT.FILETRANSFER.LIST]({ cwd, user_download, user_upload, files }: FileTransferListPayload) { this.$accessor.files.setCwd(cwd) this.$accessor.files.setFileList(files) + this.$accessor.files.setUserDownload(user_download) + this.$accessor.files.setUserUpload(user_upload) } ///////////////////////////// diff --git a/client/src/neko/messages.ts b/client/src/neko/messages.ts index ac12ef23..1c3546d4 100644 --- a/client/src/neko/messages.ts +++ b/client/src/neko/messages.ts @@ -204,6 +204,8 @@ export interface FileTransferListMessage extends WebSocketMessage, FileTransferL export interface FileTransferListPayload { cwd: string + user_download: boolean + user_upload: boolean files: FileListItem[] } diff --git a/client/src/store/files.ts b/client/src/store/files.ts index 1a4ca842..c45a4ac4 100644 --- a/client/src/store/files.ts +++ b/client/src/store/files.ts @@ -7,6 +7,8 @@ export const state = () => ({ cwd: '', files: [] as FileListItem[], transfers: [] as FileTransfer[], + userDownload: false, + userUpload: false, }) export const getters = getterTree(state, { @@ -22,6 +24,14 @@ export const mutations = mutationTree(state, { state.files = files }, + _setUserDownload(state, val: boolean) { + state.userDownload = val + }, + + _setUserUpload(state, val: boolean) { + state.userUpload = val + }, + _addTransfer(state, transfer: FileTransfer) { state.transfers = [...state.transfers, transfer] }, @@ -42,6 +52,14 @@ export const actions = actionTree( accessor.files._setFileList(files) }, + setUserDownload(store, val: boolean) { + accessor.files._setUserDownload(val) + }, + + setUserUpload(store, val: boolean) { + accessor.files._setUserUpload(val) + }, + addTransfer(store, transfer: FileTransfer) { if (transfer.status !== 'pending') { return diff --git a/server/internal/http/legacy/message/messages.go b/server/internal/http/legacy/message/messages.go index 89cf4e4c..17d527bd 100644 --- a/server/internal/http/legacy/message/messages.go +++ b/server/internal/http/legacy/message/messages.go @@ -109,9 +109,11 @@ type EmoteSend struct { } type FileTransferList struct { - Event string `json:"event"` - Cwd string `json:"cwd"` - Files []types.FileListItem `json:"files"` + Event string `json:"event"` + Cwd string `json:"cwd"` + UserDownload bool `json:"user_download"` + UserUpload bool `json:"user_upload"` + Files []types.FileListItem `json:"files"` } type Admin struct { diff --git a/server/internal/http/legacy/wstoclient.go b/server/internal/http/legacy/wstoclient.go index 8304acfe..d5609d6c 100644 --- a/server/internal/http/legacy/wstoclient.go +++ b/server/internal/http/legacy/wstoclient.go @@ -607,9 +607,11 @@ func (s *session) wsToClient(msg []byte) error { } return s.toClient(&oldMessage.FileTransferList{ - Event: oldEvent.FILETRANSFER_LIST, - Cwd: request.RootDir, - Files: files, + Event: oldEvent.FILETRANSFER_LIST, + Cwd: request.RootDir, + UserDownload: request.UserDownload, + UserUpload: request.UserUpload, + Files: files, }) // Screen Events diff --git a/server/internal/plugins/filetransfer/manager.go b/server/internal/plugins/filetransfer/manager.go index 5c3530b0..28e2919a 100644 --- a/server/internal/plugins/filetransfer/manager.go +++ b/server/internal/plugins/filetransfer/manager.go @@ -103,9 +103,11 @@ func (m *Manager) broadcastUpdate() { m.mu.RUnlock() m.sessions.Broadcast(FILETRANSFER_UPDATE, Message{ - Enabled: m.config.Enabled, - RootDir: m.config.RootDir, - Files: fileList, + Enabled: m.config.Enabled, + RootDir: m.config.RootDir, + UserDownload: m.config.UserDownload, + UserUpload: m.config.UserUpload, + Files: fileList, }) } @@ -115,9 +117,11 @@ func (m *Manager) sendUpdate(session types.Session) { m.mu.RUnlock() session.Send(FILETRANSFER_UPDATE, Message{ - Enabled: m.config.Enabled, - RootDir: m.config.RootDir, - Files: fileList, + Enabled: m.config.Enabled, + RootDir: m.config.RootDir, + UserDownload: m.config.UserDownload, + UserUpload: m.config.UserUpload, + Files: fileList, }) } diff --git a/server/internal/plugins/filetransfer/types.go b/server/internal/plugins/filetransfer/types.go index 32748d46..dcb6ec50 100644 --- a/server/internal/plugins/filetransfer/types.go +++ b/server/internal/plugins/filetransfer/types.go @@ -11,9 +11,11 @@ const ( ) type Message struct { - Enabled bool `json:"enabled"` - RootDir string `json:"root_dir"` - Files []Item `json:"files"` + Enabled bool `json:"enabled"` + RootDir string `json:"root_dir"` + UserDownload bool `json:"user_download"` + UserUpload bool `json:"user_upload"` + Files []Item `json:"files"` } type ItemType string