fix origin problem

This commit is contained in:
Julian Freeman
2026-02-22 19:58:34 -04:00
parent ce358e5b76
commit fb98ab5472
6 changed files with 254 additions and 53 deletions

View File

@@ -14,7 +14,8 @@ import {
Sun,
Moon
} from 'lucide-vue-next';
import { fetch } from '@tauri-apps/plugin-http';
import { invoke } from '@tauri-apps/api/core';
import { listen } from '@tauri-apps/api/event';
import { useSettingsStore, LANGUAGES, DEFAULT_TEMPLATE } from './stores/settings';
import pkg from '../package.json';
import { clsx, type ClassValue } from 'clsx';
@@ -81,6 +82,20 @@ const targetText = ref('');
const isTranslating = ref(false);
const showCopyFeedback = ref(false);
let unlisten: (() => void) | null = null;
onMounted(async () => {
unlisten = await listen<string>('translation-chunk', (event) => {
if (isTranslating.value) {
targetText.value += event.payload;
}
});
});
onUnmounted(() => {
if (unlisten) unlisten();
});
// Language Selection
const sourceLangCode = computed({
get: () => settings.sourceLang.code,
@@ -146,50 +161,18 @@ const translate = async () => {
settings.addLog('request', requestBody);
try {
const response = await fetch(`${settings.ollamaApiAddress}/api/generate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(requestBody)
const response = await invoke<string>('translate', {
apiAddress: settings.ollamaApiAddress,
payload: requestBody
});
if (!response.ok) {
const errorText = await response.text();
settings.addLog('error', { status: response.status, text: errorText });
throw new Error(`API error (${response.status}): ${errorText || response.statusText}`);
}
if (settings.enableStreaming) {
const reader = response.body?.getReader();
const decoder = new TextDecoder();
if (reader) {
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value, { stream: true });
const lines = chunk.split('\n');
for (const line of lines) {
if (!line.trim()) continue;
try {
const data = JSON.parse(line);
if (data.response) {
targetText.value += data.response;
}
if (data.done) {
settings.addLog('response', 'Stream finished');
}
} catch (e) {
settings.addLog('error', `Chunk parse error: ${line}`);
}
}
}
}
} else {
const data = await response.json();
settings.addLog('response', data);
targetText.value = data.response;
// For non-streaming, response is returned as string
if (!settings.enableStreaming) {
targetText.value = response;
}
settings.addLog('response', 'Translation completed');
} catch (err: any) {
const errorMsg = err instanceof Error ? err.message : String(err);
const errorMsg = String(err);
settings.addLog('error', errorMsg);
targetText.value = `Error: ${errorMsg}`;
} finally {