|
18 | 18 | v-tooltip="'Download selected logs'" |
19 | 19 | icon |
20 | 20 | color="success" |
21 | | - :disabled="disable_batch_operations" |
| 21 | + :disabled="disable_batch_operations || deleting" |
22 | 22 | @click="downloadSelectedLogs" |
23 | 23 | > |
24 | 24 | <v-icon>mdi-download-multiple</v-icon> |
|
27 | 27 | v-tooltip="'Delete selected logs'" |
28 | 28 | icon |
29 | 29 | color="error" |
30 | | - :disabled="disable_batch_operations" |
| 30 | + :disabled="disable_batch_operations || downloading" |
31 | 31 | @click="removeLogs" |
32 | 32 | > |
33 | 33 | <v-icon>mdi-trash-can</v-icon> |
|
58 | 58 | <v-btn |
59 | 59 | v-tooltip="'Download log'" |
60 | 60 | icon |
| 61 | + :disabled="deleting" |
61 | 62 | @click="downloadLogs([item])" |
62 | 63 | > |
63 | 64 | <v-icon>mdi-download</v-icon> |
@@ -97,6 +98,8 @@ export default Vue.extend({ |
97 | 98 | available_logs: [] as FilebrowserFile[], |
98 | 99 | logs_fetched: false, |
99 | 100 | selected_logs: [] as FilebrowserFile[], |
| 101 | + deleting: false, |
| 102 | + downloading: false, |
100 | 103 | headers: [ |
101 | 104 | { |
102 | 105 | text: 'Name', |
@@ -156,23 +159,33 @@ export default Vue.extend({ |
156 | 159 | (log) => ['.bin', '.tlog'].includes(log.extension.toLowerCase()) && log.size > 100, |
157 | 160 | ) |
158 | 161 | }, |
159 | | - downloadSelectedLogs(): void { |
160 | | - this.downloadLogs(this.selected_logs) |
| 162 | + async downloadSelectedLogs(): Promise<void> { |
| 163 | + await this.downloadLogs(this.selected_logs) |
161 | 164 | this.selected_logs = [] |
162 | 165 | }, |
163 | | - downloadLogs(logs: FilebrowserFile[]): void { |
164 | | - filebrowser.downloadFiles(logs) |
| 166 | + async downloadLogs(logs: FilebrowserFile[]): Promise<void> { |
| 167 | + if (this.downloading) return |
| 168 | + this.downloading = true |
| 169 | + try { |
| 170 | + await filebrowser.downloadFiles(logs) |
| 171 | + } finally { |
| 172 | + this.downloading = false |
| 173 | + } |
165 | 174 | }, |
166 | 175 | printSize(size_bytes: number): string { |
167 | 176 | return prettifySize(size_bytes / 1024) |
168 | 177 | }, |
169 | 178 | async removeLogs(): Promise<void> { |
170 | 179 | if (this.selected_logs.isEmpty()) return |
171 | 180 |
|
172 | | - await filebrowser.deleteFiles(this.selected_logs) |
173 | | -
|
174 | | - await this.fetchAvailableLogs() |
175 | | - this.selected_logs = [] |
| 181 | + this.deleting = true |
| 182 | + try { |
| 183 | + await filebrowser.deleteFiles(this.selected_logs) |
| 184 | + await this.fetchAvailableLogs() |
| 185 | + this.selected_logs = [] |
| 186 | + } finally { |
| 187 | + this.deleting = false |
| 188 | + } |
176 | 189 | }, |
177 | 190 | async replay_log(log: FilebrowserFile): Promise<void> { |
178 | 191 | const log_url = encodeURIComponent(await filebrowser.singleFileRelativeURL(log)) |
|
0 commit comments