fchat-rising/chat/character/memo.ts

54 lines
1.4 KiB
TypeScript

import core from '../core';
import { CharacterMemo } from '../../site/character_page/interfaces';
import { EventBus } from '../preview/event-bus';
export class MemoManager {
memo?: CharacterMemo;
constructor(protected character: string) {
}
get(): CharacterMemo {
if (!this.memo) {
throw new Error('Missing character memo');
}
return this.memo;
}
async set(message: string | null): Promise<void> {
if (!this.memo) {
await this.load(true);
}
const response = await core.connection.queryApi('character-memo-save.php', {target: this.memo!.id, note: message});
this.memo!.memo = (response as any).note;
await this.updateStores();
}
protected async updateStores(): Promise<void> {
const character = await core.cache.profileCache.get(this.character);
if (character && character.character?.memo?.memo !== this.memo!.memo) {
character.character.memo = this.memo;
await core.cache.profileCache.register(character.character);
}
EventBus.$emit('character-memo', { character: this.character, memo: this.memo! });
}
async load(skipStoreUpdate: boolean = false): Promise<void> {
const memo = await core.connection.queryApi<{note: string | null, id: number}>('character-memo-get2.php', {target: this.character});
this.memo = { id: memo.id, memo: memo.note || '' };
if (!skipStoreUpdate) {
await this.updateStores();
}
}
}