mirror of
https://github.com/streamyfin/streamyfin.git
synced 2025-08-20 18:37:18 +02:00
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { atomWithStorage, createJSONStorage } from "jotai/utils";
|
|
import { storage } from "./mmkv";
|
|
|
|
type LogLevel = "INFO" | "WARN" | "ERROR";
|
|
|
|
interface LogEntry {
|
|
timestamp: string;
|
|
level: LogLevel;
|
|
message: string;
|
|
data?: any;
|
|
}
|
|
|
|
const mmkvStorage = createJSONStorage(() => ({
|
|
getItem: (key: string) => storage.getString(key) || null,
|
|
setItem: (key: string, value: string) => storage.set(key, value),
|
|
removeItem: (key: string) => storage.delete(key),
|
|
}));
|
|
const logsAtom = atomWithStorage("logs", [], mmkvStorage);
|
|
|
|
export const writeToLog = (level: LogLevel, message: string, data?: any) => {
|
|
const newEntry: LogEntry = {
|
|
timestamp: new Date().toISOString(),
|
|
level: level,
|
|
message: message,
|
|
data: data,
|
|
};
|
|
|
|
const currentLogs = storage.getString("logs");
|
|
const logs: LogEntry[] = currentLogs ? JSON.parse(currentLogs) : [];
|
|
logs.push(newEntry);
|
|
|
|
const maxLogs = 100;
|
|
const recentLogs = logs.slice(Math.max(logs.length - maxLogs, 0));
|
|
|
|
storage.set("logs", JSON.stringify(recentLogs));
|
|
};
|
|
|
|
export const readFromLog = (): LogEntry[] => {
|
|
const logs = storage.getString("logs");
|
|
return logs ? JSON.parse(logs) : [];
|
|
};
|
|
|
|
export const clearLogs = () => {
|
|
storage.delete("logs");
|
|
};
|
|
|
|
export default logsAtom;
|