54 lines
1.4 KiB
TypeScript
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();
|
|
}
|
|
}
|
|
}
|