diff --git a/web/src/routes/clipboard/+page.svelte b/web/src/routes/clipboard/+page.svelte index 06b9cb4f..5ebd9aa0 100644 --- a/web/src/routes/clipboard/+page.svelte +++ b/web/src/routes/clipboard/+page.svelte @@ -22,6 +22,9 @@ receivedSize: number; } + // Constants + const CHUNK_SIZE = 64 * 1024; // 64KB chunks for file transfer + // State variables let sessionId = ''; let joinCode = ''; @@ -32,6 +35,9 @@ let peerConnected = false; let qrCodeUrl = ''; + // Navigation state + let activeTab: 'files' | 'text' = 'files'; + // WebSocket and WebRTC let ws: WebSocket | null = null; let peerConnection: RTCPeerConnection | null = null; @@ -40,17 +46,17 @@ // Encryption let keyPair: CryptoKeyPair | null = null; let remotePublicKey: CryptoKey | null = null; - let sharedKey: CryptoKey | null = null; - - // File transfer + let sharedKey: CryptoKey | null = null; // File transfer let files: File[] = []; let receivedFiles: FileItem[] = []; let textContent = ''; + let receivedText = ''; let dragover = false; let sendingFiles = false; let receivingFiles = false; let transferProgress = 0; let currentReceivingFile: ReceivingFile | null = null; + let fileInput: HTMLInputElement; // Session persistence let storedSessionId = ''; @@ -184,8 +190,7 @@ was: wasConnected, now: isNowConnected, readyState: dataChannel.readyState - }); - peerConnected = isNowConnected; + }); peerConnected = isNowConnected; } } }, 1000); @@ -709,9 +714,8 @@ const message = JSON.parse(decryptedMessage); console.log('📩 Decrypted message type:', message.type); - - if (message.type === 'text') { - textContent = message.data; + if (message.type === 'text') { + receivedText = message.data; console.log('📝 Text content received'); } else if (message.type === 'file_info') { currentReceivingFile = { @@ -1018,9 +1022,7 @@ } else { console.log('⚠️ Only creator can initiate restart. Waiting for creator to restart...'); } - } - - function cleanup(): void { + } function cleanup(): void { if (dataChannel) { dataChannel.close(); dataChannel = null; @@ -1040,6 +1042,11 @@ sharedKey = null; remotePublicKey = null; qrCodeUrl = ''; + clearStoredSession(); + } + + function switchTab(tab: 'files' | 'text'): void { + activeTab = tab; } @@ -1061,9 +1068,11 @@
{$t("clipboard.create_description")}
{sessionId}
+ 拖放文件到这里或点击选择
+ +还没有接收到任何文件
+ {/if} + + {#if receivingFiles && currentReceivingFile} +{receivedText}+
还没有接收到任何文本
+ {/if} +{$t("clipboard.drop_files")}
-