import { invoke } from '@tauri-apps/api/core' import type { BoardInfo } from '../types/boards' import type { Thread, Catalog } from '../types/api' export async function fetchAllBoardsWithMetadata(): Promise { return await invoke('fetch_all_boards_with_metadata') } export async function searchBoards(query: string): Promise { return await invoke('search_boards', { query }) } export async function fetchCatalog(board: string): Promise { return await invoke('fetch_catalog', { board }) } export async function fetchThread(board: string, threadId: number): Promise { return await invoke('fetch_thread', { board, threadId }) } // Image proxy to bypass CORS export async function fetchImageWithProxy(url: string): Promise { return await invoke('fetch_image_with_cors_bypass', { url }) } export async function clearImageCache(): Promise { return await invoke('clear_image_cache') } // Media caching export async function downloadMedia(url: string, board: string, threadId: number): Promise { return await invoke('download_media', { url, board, threadId }) } export async function getCachedMediaPath(board: string, threadId: number, filename: string): Promise { return await invoke('get_cached_media_path', { board, threadId, filename }) } export async function clearMediaCache(): Promise { return await invoke('clear_media_cache') } export async function getCacheSize(): Promise { return await invoke('get_cache_size') } // Posting functions export interface PostRequest { board: string resto?: number name?: string email?: string subject?: string comment: string file_path?: string file_name?: string } export interface PostResponse { success: boolean thread_id?: number post_id?: number error?: string } export async function submitPost(request: PostRequest, passToken?: string | null): Promise { return await invoke('submit_post', { request, passToken }) } export async function getPostCooldown(): Promise { return await invoke('get_post_cooldown') } export async function validatePassToken(token: string): Promise { return await invoke('validate_pass_token', { token }) } // Helper functions for image URLs export function getImageUrl(board: string, tim: number, ext: string): string { return `https://i.4cdn.org/${board}/${tim}${ext}` } export function getThumbnailUrl(board: string, tim: number): string { return `https://i.4cdn.org/${board}/${tim}s.jpg` } export function getThreadUrl(board: string, threadId: number): string { return `https://boards.4channel.org/${board}/thread/${threadId}` }