项目文件夹

文件
wehub-resource-sync 98e40dac97
CLI Smoke Test / smoke-test-linux (20) (push) Has been cancelled
CLI Smoke Test / smoke-test-linux (24) (push) Has been cancelled
CLI Smoke Test / smoke-test-windows (20) (push) Has been cancelled
CLI Smoke Test / smoke-test-windows (24) (push) Has been cancelled
Expo App TypeScript typecheck / typecheck (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:40:49 +08:00

54 行
1.6 KiB
TypeScript

import * as Clipboard from 'expo-clipboard';
import { Modal } from '@/modal';
import { Session } from '@/sync/storageTypes';
import { t } from '@/text';
import { log } from '@/log';
export async function copySessionMetadataToClipboard(session: Session): Promise<boolean> {
if (!session.metadata) {
Modal.alert(t('common.error'), t('sessionInfo.failedToCopyMetadata'));
return false;
}
try {
await Clipboard.setStringAsync(JSON.stringify(session.metadata, null, 2));
Modal.alert(t('common.success'), t('sessionInfo.metadataCopied'));
return true;
} catch {
Modal.alert(t('common.error'), t('sessionInfo.failedToCopyMetadata'));
return false;
}
}
export async function copySessionMetadataAndLogsToClipboard(session: Session): Promise<boolean> {
if (!session.metadata) {
Modal.alert(t('common.error'), t('sessionInfo.failedToCopyMetadata'));
return false;
}
try {
const metadata = JSON.stringify(session.metadata, null, 2);
const logs = log.getLogs();
const sections = [
'=== Session Metadata ===',
metadata,
];
if (logs.length > 0) {
sections.push(
'',
`=== Client Logs (${logs.length} entries) ===`,
logs.join('\n'),
);
}
await Clipboard.setStringAsync(sections.join('\n'));
Modal.alert(t('common.success'), t('sessionInfo.metadataCopied'));
return true;
} catch {
Modal.alert(t('common.error'), t('sessionInfo.failedToCopyMetadata'));
return false;
}
}