feat:Receiver adds a secure save button

Receiver adds a secure save button, used to save cache files during connection interruptions, making it convenient to resume transfers next time.
Button tooltip information added in multiple languages.
This commit is contained in:
david_bai
2025-08-15 23:49:24 +08:00
parent bf9aa9f7ed
commit 7ee9360b17
13 changed files with 95 additions and 10 deletions
+2
View File
@@ -76,6 +76,7 @@ const ClipboardApp = () => {
senderDisconnected,
resetReceiverConnection,
resetSenderConnection,
manualSafeSave,
} = useWebRTCConnection({
shareContent,
sendFiles,
@@ -307,6 +308,7 @@ const ClipboardApp = () => {
retrieveMessage={retrieveMessage}
senderDisconnected={senderDisconnected}
handleLeaveRoom={handleLeaveReceiverRoom}
manualSafeSave={manualSafeSave}
/>
)}
</CardContent>
@@ -40,6 +40,7 @@ interface FileListDisplayProps {
onRequest?: (item: FileMeta) => void; // Request file
onDelete?: (item: FileMeta) => void;
onLocationPick?: () => Promise<boolean>;
onSafeSave?: () => void; // New prop for safe save functionality
saveType?: { [fileId: string]: boolean }; // File stored on disk or in memory
largeFileThreshold?: number;
}
@@ -61,6 +62,7 @@ const FileListDisplay: React.FC<FileListDisplayProps> = ({
onRequest,
onDelete,
onLocationPick,
onSafeSave,
saveType,
largeFileThreshold = 500 * 1024 * 1024, // 500MB default
}) => {
@@ -380,6 +382,28 @@ const FileListDisplay: React.FC<FileListDisplayProps> = ({
{messages.text.FileListDisplay.chooseSavePath_dis}
</Button>
)}
{/* Safe Save Button - only show when location is picked and files are saved to disk */}
{onSafeSave &&
pickedLocation &&
(isAnyFileTransferring ||
(saveType && Object.values(saveType).some(
(isSavedToDisk) => isSavedToDisk
))) && (
<Tooltip
content={messages.text.FileListDisplay.safeSave_tooltip}
>
<Button
onClick={() => {
onSafeSave();
}}
variant="outline"
size="sm"
className="mr-2 text-green-600 border-green-600 hover:bg-green-50"
>
{messages.text.FileListDisplay.safeSave_dis}
</Button>
</Tooltip>
)}
</div>
</div>
)}
@@ -39,6 +39,7 @@ interface RetrieveTabPanelProps {
directoryHandle: FileSystemDirectoryHandle
) => Promise<void>;
getReceiverSaveType: () => { [fileId: string]: boolean } | undefined;
manualSafeSave: () => void; // Add manual safe save function
retrieveMessage: string;
senderDisconnected: boolean;
handleLeaveRoom: () => void;
@@ -63,6 +64,7 @@ export function RetrieveTabPanel({
requestFolder,
setReceiverDirectoryHandle,
getReceiverSaveType,
manualSafeSave,
retrieveMessage,
senderDisconnected,
handleLeaveRoom,
@@ -180,6 +182,7 @@ export function RetrieveTabPanel({
onDownload={handleDownloadFile}
onRequest={handleFileRequestFromPanel} // Use the panel's own handler
onLocationPick={onLocationPick} // Use the panel's own handler
onSafeSave={manualSafeSave} // Add safe save handler
saveType={getReceiverSaveType()}
/>
{retrieveMessage && (