BlueSky & more on desktop
lazurite.stormlightlabs.org/
tauri
rust
typescript
bluesky
appview
atproto
solid
1import { invoke } from "@tauri-apps/api/core";
2import type {
3 ActorSearchResult,
4 EmbeddingsConfig,
5 LocalPostResult,
6 NetworkSearchParams,
7 NetworkSearchResult,
8 SavedPostSource,
9 SavedPostsPage,
10 SearchMode,
11 SyncStatus,
12} from "./types/search";
13
14function searchPostsNetwork(params: NetworkSearchParams): Promise<NetworkSearchResult> {
15 return invoke("search_posts_network", {
16 queryParams: {
17 author: params.author ?? null,
18 cursor: params.cursor ?? null,
19 limit: params.limit ?? null,
20 mentions: params.mentions ?? null,
21 query: params.query,
22 since: params.since ?? null,
23 sort: params.sort ?? null,
24 tags: params.tags?.length ? params.tags : null,
25 until: params.until ?? null,
26 },
27 });
28}
29
30function searchPosts(query: string, mode: SearchMode, limit: number): Promise<LocalPostResult[]> {
31 return invoke("search_posts", { query, mode, limit });
32}
33
34function listSavedPosts(source: SavedPostSource, limit: number, offset = 0, query?: string): Promise<SavedPostsPage> {
35 return invoke("list_saved_posts", { source, limit, offset, query: query?.trim() ? query.trim() : null });
36}
37
38function searchActors(query: string, limit?: number, cursor?: string | null): Promise<ActorSearchResult> {
39 return invoke("search_actors", { query, limit: limit ?? null, cursor: cursor ?? null });
40}
41
42function syncPosts(did: string, source: SavedPostSource): Promise<SyncStatus> {
43 return invoke("sync_posts", { did, source });
44}
45
46function getSyncStatus(did: string): Promise<SyncStatus[]> {
47 return invoke("get_sync_status", { did });
48}
49
50function reindexEmbeddings(): Promise<number> {
51 return invoke("reindex_embeddings");
52}
53
54function setEmbeddingsEnabled(enabled: boolean): Promise<void> {
55 return invoke("set_embeddings_enabled", { enabled });
56}
57
58function setEmbeddingsPreflightSeen(seen: boolean): Promise<void> {
59 return invoke("set_embeddings_preflight_seen", { seen });
60}
61
62function getEmbeddingsConfig(): Promise<EmbeddingsConfig> {
63 return invoke("get_embeddings_config");
64}
65
66function prepareEmbeddingsModel(): Promise<EmbeddingsConfig> {
67 return invoke("prepare_embeddings_model");
68}
69
70export const SearchController = {
71 searchPostsNetwork,
72 searchPosts,
73 listSavedPosts,
74 searchActors,
75 syncPosts,
76 getSyncStatus,
77 reindexEmbeddings,
78 setEmbeddingsEnabled,
79 setEmbeddingsPreflightSeen,
80 getEmbeddingsConfig,
81 prepareEmbeddingsModel,
82};