add: clean finished transfers button

This commit is contained in:
2026-02-05 16:03:38 +08:00
parent d9db99946d
commit 5960a25309
3 changed files with 30 additions and 13 deletions

View File

@@ -20,8 +20,8 @@ export function CancelTransfer(transferID: string): $CancellablePromise<void> {
/** /**
* CleanTransferList 清理完成的 transfer * CleanTransferList 清理完成的 transfer
*/ */
export function CleanTransferList(): $CancellablePromise<void> { export function CleanFinishedTransferList(): $CancellablePromise<void> {
return $Call.ByID(3775121017); return $Call.ByID(1852624467);
} }
export function DeleteTransfer(transferID: string): $CancellablePromise<void> { export function DeleteTransfer(transferID: string): $CancellablePromise<void> {

View File

@@ -14,7 +14,10 @@ import { Transfer } from "../../bindings/mesh-drop/internal/transfer";
// --- Service & 后端绑定 --- // --- Service & 后端绑定 ---
import { Events } from "@wailsio/runtime"; import { Events } from "@wailsio/runtime";
import { GetPeers } from "../../bindings/mesh-drop/internal/discovery/service"; import { GetPeers } from "../../bindings/mesh-drop/internal/discovery/service";
import { GetTransferList } from "../../bindings/mesh-drop/internal/transfer/service"; import {
GetTransferList,
CleanFinishedTransferList,
} from "../../bindings/mesh-drop/internal/transfer/service";
// --- 状态 --- // --- 状态 ---
const peers = ref<Peer[]>([]); const peers = ref<Peer[]>([]);
@@ -53,10 +56,7 @@ const menuItems = computed(() => [
onMounted(async () => { onMounted(async () => {
checkMobile(); checkMobile();
window.addEventListener("resize", checkMobile); window.addEventListener("resize", checkMobile);
const list = await GetTransferList(); transferList.value = (await GetTransferList()) as Transfer[];
transferList.value = (
(list || []).filter((t) => t !== null) as Transfer[]
).sort((a, b) => b.create_time - a.create_time);
if (isMobile.value) { if (isMobile.value) {
drawer.value = false; drawer.value = false;
@@ -75,10 +75,7 @@ Events.On("peers:update", (event) => {
}); });
Events.On("transfer:refreshList", async () => { Events.On("transfer:refreshList", async () => {
const list = await GetTransferList(); transferList.value = (await GetTransferList()) as Transfer[];
transferList.value = (
(list || []).filter((t) => t !== null) as Transfer[]
).sort((a, b) => b.create_time - a.create_time);
}); });
// --- 方法 --- // --- 方法 ---
@@ -96,6 +93,10 @@ const handleMenuClick = (key: string) => {
drawer.value = false; drawer.value = false;
} }
}; };
const handleCleanFinished = async () => {
await CleanFinishedTransferList();
};
</script> </script>
<template> <template>
@@ -176,6 +177,16 @@ const handleMenuClick = (key: string) => {
<!-- 传输视图 --> <!-- 传输视图 -->
<div v-show="activeKey === 'transfers'"> <div v-show="activeKey === 'transfers'">
<div v-if="transferList.length > 0"> <div v-if="transferList.length > 0">
<div class="d-flex justify-end mb-2">
<v-btn
prepend-icon="mdi-delete-sweep"
variant="text"
color="error"
@click="handleCleanFinished"
>
Clear Finished
</v-btn>
</div>
<TransferItem <TransferItem
v-for="transfer in transferList" v-for="transfer in transferList"
:key="transfer.id" :key="transfer.id"

View File

@@ -10,6 +10,7 @@ import (
"mesh-drop/internal/security" "mesh-drop/internal/security"
"net/http" "net/http"
"path/filepath" "path/filepath"
"sort"
"sync" "sync"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@@ -96,9 +97,14 @@ func (s *Service) Start() {
func (s *Service) GetTransferList() []*Transfer { func (s *Service) GetTransferList() []*Transfer {
var requests []*Transfer = make([]*Transfer, 0) var requests []*Transfer = make([]*Transfer, 0)
s.transferList.Range(func(key, value any) bool { s.transferList.Range(func(key, value any) bool {
requests = append(requests, value.(*Transfer)) transfer := value.(*Transfer)
requests = append(requests, transfer)
return true return true
}) })
// 按照创建时间降序排序,方便前端展示
sort.Slice(requests, func(i, j int) bool {
return requests[i].CreateTime-requests[j].CreateTime > 0
})
return requests return requests
} }
@@ -139,7 +145,7 @@ func (s *Service) NotifyTransferListUpdate() {
} }
// CleanTransferList 清理完成的 transfer // CleanTransferList 清理完成的 transfer
func (s *Service) CleanTransferList() { func (s *Service) CleanFinishedTransferList() {
s.transferList.Range(func(key, value any) bool { s.transferList.Range(func(key, value any) bool {
task := value.(*Transfer) task := value.(*Transfer)
if task.Status == TransferStatusCompleted || if task.Status == TransferStatusCompleted ||