mirror of
https://github.com/thelounge/thelounge.git
synced 2026-03-14 14:35:50 +01:00
Merge branch 'storageCleanup'
This commit is contained in:
commit
375164ca88
6 changed files with 30 additions and 40 deletions
|
|
@ -138,12 +138,12 @@ class Client {
|
|||
|
||||
if (!Config.values.public && client.config.log) {
|
||||
if (Config.values.messageStorage.includes("sqlite")) {
|
||||
client.messageProvider = new SqliteMessageStorage(client);
|
||||
client.messageProvider = new SqliteMessageStorage(client.name);
|
||||
client.messageStorage.push(client.messageProvider);
|
||||
}
|
||||
|
||||
if (Config.values.messageStorage.includes("text")) {
|
||||
client.messageStorage.push(new TextFileMessageStorage(client));
|
||||
client.messageStorage.push(new TextFileMessageStorage(client.name));
|
||||
}
|
||||
|
||||
for (const messageStorage of client.messageStorage) {
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ class Chan {
|
|||
}
|
||||
|
||||
client.messageProvider
|
||||
.getMessages(network, this)
|
||||
.getMessages(network, this, () => client.idMsg++)
|
||||
.then((messages) => {
|
||||
if (messages.length === 0) {
|
||||
if (network.irc!.network.cap.isEnabled("znc.in/playback")) {
|
||||
|
|
|
|||
|
|
@ -5,14 +5,9 @@ import path from "path";
|
|||
import fs from "fs/promises";
|
||||
import Config from "../../config";
|
||||
import Msg, {Message} from "../../models/msg";
|
||||
import Client from "../../client";
|
||||
import Chan, {Channel} from "../../models/chan";
|
||||
import Helper from "../../helper";
|
||||
import type {
|
||||
SearchResponse,
|
||||
SearchQuery,
|
||||
SqliteMessageStorage as ISqliteMessageStorage,
|
||||
} from "./types";
|
||||
import type {SearchResponse, SearchQuery, SearchableMessageStorage} from "./types";
|
||||
import Network from "../../models/network";
|
||||
|
||||
// TODO; type
|
||||
|
|
@ -49,21 +44,21 @@ class Deferred {
|
|||
}
|
||||
}
|
||||
|
||||
class SqliteMessageStorage implements ISqliteMessageStorage {
|
||||
client: Client;
|
||||
class SqliteMessageStorage implements SearchableMessageStorage {
|
||||
isEnabled: boolean;
|
||||
database!: Database;
|
||||
initDone: Deferred;
|
||||
userName: string;
|
||||
|
||||
constructor(client: Client) {
|
||||
this.client = client;
|
||||
constructor(userName: string) {
|
||||
this.userName = userName;
|
||||
this.isEnabled = false;
|
||||
this.initDone = new Deferred();
|
||||
}
|
||||
|
||||
async _enable() {
|
||||
const logsPath = Config.getUserLogsPath();
|
||||
const sqlitePath = path.join(logsPath, `${this.client.name}.sqlite3`);
|
||||
const sqlitePath = path.join(logsPath, `${this.userName}.sqlite3`);
|
||||
|
||||
try {
|
||||
await fs.mkdir(logsPath, {recursive: true});
|
||||
|
|
@ -190,13 +185,11 @@ class SqliteMessageStorage implements ISqliteMessageStorage {
|
|||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load messages for given channel on a given network and resolve a promise with loaded messages.
|
||||
*
|
||||
* @param network Network - Network object where the channel is
|
||||
* @param channel Channel - Channel object for which to load messages for
|
||||
*/
|
||||
async getMessages(network: Network, channel: Channel): Promise<Message[]> {
|
||||
async getMessages(
|
||||
network: Network,
|
||||
channel: Channel,
|
||||
nextID: () => number
|
||||
): Promise<Message[]> {
|
||||
await this.initDone.promise;
|
||||
|
||||
if (!this.isEnabled || Config.values.maxHistory === 0) {
|
||||
|
|
@ -219,7 +212,7 @@ class SqliteMessageStorage implements ISqliteMessageStorage {
|
|||
msg.type = row.type;
|
||||
|
||||
const newMsg = new Msg(msg);
|
||||
newMsg.id = this.client.idMsg++;
|
||||
newMsg.id = nextID();
|
||||
|
||||
return newMsg;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,17 +5,16 @@ import filenamify from "filenamify";
|
|||
|
||||
import Config from "../../config";
|
||||
import {MessageStorage} from "./types";
|
||||
import Client from "../../client";
|
||||
import Channel from "../../models/chan";
|
||||
import {Message, MessageType} from "../../models/msg";
|
||||
import Network from "../../models/network";
|
||||
|
||||
class TextFileMessageStorage implements MessageStorage {
|
||||
client: Client;
|
||||
isEnabled: boolean;
|
||||
username: string;
|
||||
|
||||
constructor(client: Client) {
|
||||
this.client = client;
|
||||
constructor(username: string) {
|
||||
this.username = username;
|
||||
this.isEnabled = false;
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +35,7 @@ class TextFileMessageStorage implements MessageStorage {
|
|||
|
||||
const logPath = path.join(
|
||||
Config.getUserLogsPath(),
|
||||
this.client.name,
|
||||
this.username,
|
||||
TextFileMessageStorage.getNetworkFolderName(network)
|
||||
);
|
||||
|
||||
|
|
|
|||
8
server/plugins/messageStorage/types.d.ts
vendored
8
server/plugins/messageStorage/types.d.ts
vendored
|
|
@ -6,7 +6,6 @@ import {Network} from "../../models/network";
|
|||
import Client from "../../client";
|
||||
|
||||
interface MessageStorage {
|
||||
client: Client;
|
||||
isEnabled: boolean;
|
||||
|
||||
enable(): Promise<void>;
|
||||
|
|
@ -17,7 +16,7 @@ interface MessageStorage {
|
|||
|
||||
deleteChannel(network: Network, channel: Channel): Promise<void>;
|
||||
|
||||
getMessages(network: Network, channel: Channel): Promise<Message[]>;
|
||||
getMessages(network: Network, channel: Channel, nextID: () => number): Promise<Message[]>;
|
||||
|
||||
canProvideMessages(): boolean;
|
||||
}
|
||||
|
|
@ -35,7 +34,6 @@ export type SearchResponse = SearchQuery & {
|
|||
|
||||
type SearchFunction = (query: SearchQuery) => Promise<SearchResponse>;
|
||||
|
||||
export interface SqliteMessageStorage extends MessageStorage {
|
||||
database: Database;
|
||||
search: SearchFunction | [];
|
||||
export interface SearchableMessageStorage extends MessageStorage {
|
||||
search: SearchFunction;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue