mirror of
https://github.com/thelounge/thelounge.git
synced 2024-05-18 22:26:35 +02:00
d62dd3e62d
Message stores are more complicated that a sync "fire and forget" API allows for. For starters, non trivial stores (say sqlite) can fail during init and we want to be able to catch that. Second, we really need to be able to run migrations and such, which may block (and fail) the activation of the store. On the plus side, this pushes error handling to the caller rather than the stores, which is a good thing as that allows us to eventually push this to the client in the UI, rather than just logging it in the server on stdout
45 lines
1 KiB
TypeScript
45 lines
1 KiB
TypeScript
import type {Database} from "sqlite3";
|
|
|
|
import {Channel} from "../../models/channel";
|
|
import {Message} from "../../models/message";
|
|
import {Network} from "../../models/network";
|
|
import Client from "../../client";
|
|
|
|
interface MessageStorage {
|
|
client: Client;
|
|
isEnabled: boolean;
|
|
|
|
enable(): Promise<void>;
|
|
|
|
close(): Promise<void>;
|
|
|
|
index(network: Network, channel: Channel, msg: Message): Promise<void>;
|
|
|
|
deleteChannel(network: Network, channel: Channel): Promise<void>;
|
|
|
|
getMessages(network: Network, channel: Channel): Promise<Message[]>;
|
|
|
|
canProvideMessages(): boolean;
|
|
}
|
|
|
|
export type SearchQuery = {
|
|
searchTerm: string;
|
|
networkUuid: string;
|
|
channelName: string;
|
|
offset: number | string;
|
|
};
|
|
|
|
export type SearchResponse =
|
|
| Omit<SearchQuery, "channelName" | "offset"> & {
|
|
results: Message[];
|
|
target: string;
|
|
offset: number;
|
|
};
|
|
|
|
type SearchFunction = (query: SearchQuery) => Promise<SearchResponse>;
|
|
|
|
export interface SqliteMessageStorage extends MessageStorage {
|
|
database: Database;
|
|
search: SearchFunction | [];
|
|
}
|