Skip to content

Commit c70e241

Browse files
core: frontend: components: SettingsMenu: Use new remove_log_stream
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
1 parent b1a5348 commit c70e241

File tree

1 file changed

+77
-18
lines changed

1 file changed

+77
-18
lines changed

core/frontend/src/components/app/SettingsMenu.vue

Lines changed: 77 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
<v-btn
7474
v-tooltip="'Frees up space on the SD card'"
7575
class="ma-2"
76-
:disabled="disable_remove"
76+
:disabled="disable_remove || deletion_in_progress"
7777
@click="remove_service_log_files"
7878
>
7979
<v-icon left>
@@ -83,6 +83,26 @@
8383
</v-btn>
8484
</v-card-actions>
8585

86+
<v-expand-transition>
87+
<div v-if="deletion_in_progress" class="pa-4">
88+
<v-progress-linear
89+
indeterminate
90+
color="primary"
91+
/>
92+
<div class="mt-2">
93+
<div class="text-subtitle-2">
94+
Deleting: {{ current_deletion_path }}
95+
</div>
96+
<div class="text-caption">
97+
Size: {{ formatSize(current_deletion_size / 1024) }}
98+
</div>
99+
<div class="text-caption">
100+
Status: {{ current_deletion_status }}
101+
</div>
102+
</div>
103+
</div>
104+
</v-expand-transition>
105+
86106
<v-divider />
87107

88108
<v-card-title class="align-center">
@@ -180,6 +200,10 @@ export default Vue.extend({
180200
operation_in_progress: false,
181201
operation_description: '',
182202
operation_error: undefined as undefined | string,
203+
deletion_in_progress: false,
204+
current_deletion_path: '',
205+
current_deletion_size: 0,
206+
current_deletion_status: '',
183207
}
184208
},
185209
computed: {
@@ -197,6 +221,9 @@ export default Vue.extend({
197221
this.operation_in_progress = true
198222
this.operation_description = description
199223
},
224+
formatSize(bytes: number): string {
225+
return prettifySize(bytes)
226+
},
200227
async download_service_log_files(): Promise<void> {
201228
const folder = await filebrowser.fetchFolder('system_logs')
202229
await filebrowser.downloadFolder(folder)
@@ -216,7 +243,7 @@ export default Vue.extend({
216243
const folder_data_bytes = response.data
217244
const one_hundred_MB = 100 * 2 ** 20
218245
this.disable_remove = folder_data_bytes < one_hundred_MB
219-
this.log_folder_size = prettifySize(folder_data_bytes / 1024)
246+
this.log_folder_size = this.formatSize(folder_data_bytes / 1024)
220247
})
221248
.catch((error) => {
222249
this.operation_error = String(error)
@@ -235,7 +262,7 @@ export default Vue.extend({
235262
const folder_data_bytes = response.data
236263
const one_hundred_MB = 100 * 2 ** 20
237264
this.disable_remove_mavlink = folder_data_bytes < one_hundred_MB
238-
this.mavlink_log_folder_size = prettifySize(folder_data_bytes / 1024)
265+
this.mavlink_log_folder_size = this.formatSize(folder_data_bytes / 1024)
239266
})
240267
.catch((error) => {
241268
this.operation_error = String(error)
@@ -265,23 +292,55 @@ export default Vue.extend({
265292
},
266293
async remove_service_log_files(): Promise<void> {
267294
this.prepare_operation('Removing system log files...')
295+
this.deletion_in_progress = true
296+
this.current_deletion_path = ''
297+
this.current_deletion_size = 0
298+
this.current_deletion_status = 'Starting deletion...'
268299
269-
await back_axios({
270-
url: `${API_URL}/services/remove_log`,
271-
method: 'post',
272-
params: {
273-
i_know_what_i_am_doing: true,
274-
},
275-
timeout: 20000,
276-
})
277-
.then(() => {
278-
this.get_log_folder_size()
300+
try {
301+
const response = await back_axios({
302+
url: `${API_URL}/services/remove_log_stream`,
303+
method: 'post',
304+
params: {
305+
i_know_what_i_am_doing: true,
306+
},
307+
responseType: 'stream',
308+
timeout: 60000,
279309
})
280-
.catch((error) => {
281-
this.operation_error = String(error)
282-
notifier.pushBackError('REMOVE_SERVICES_LOG_FAIL', error)
283-
})
284-
this.operation_in_progress = false
310+
311+
const reader = response.data.getReader()
312+
const decoder = new TextDecoder()
313+
314+
while (true) {
315+
const { done, value } = await reader.read()
316+
if (done) break
317+
318+
const chunk = decoder.decode(value)
319+
const lines = chunk.split('\n').filter(line => line.trim())
320+
321+
for (const line of lines) {
322+
try {
323+
const info = JSON.parse(line)
324+
this.current_deletion_path = info.path
325+
this.current_deletion_size = info.size
326+
this.current_deletion_status = info.success ? 'Successfully deleted' : 'Failed to delete'
327+
} catch (e) {
328+
console.error('Error parsing deletion info:', e)
329+
}
330+
}
331+
}
332+
333+
await this.get_log_folder_size()
334+
} catch (error) {
335+
this.operation_error = String(error)
336+
notifier.pushBackError('REMOVE_SERVICES_LOG_FAIL', error)
337+
} finally {
338+
this.operation_in_progress = false
339+
this.deletion_in_progress = false
340+
this.current_deletion_path = ''
341+
this.current_deletion_size = 0
342+
this.current_deletion_status = ''
343+
}
285344
},
286345
async remove_mavlink_log_files(): Promise<void> {
287346
this.prepare_operation('Removing MAVLink log files...')

0 commit comments

Comments
 (0)