95 lines
No EOL
2.2 KiB
TypeScript
95 lines
No EOL
2.2 KiB
TypeScript
import { ipcEmit } from "@/composables/useEmitter";
|
|
|
|
class Profile implements Profile{
|
|
crimata_id = "";
|
|
name = "";
|
|
photo = "";
|
|
}
|
|
|
|
export default class UIState {
|
|
|
|
profile: Profile;
|
|
messages: Message[];
|
|
|
|
constructor() {
|
|
this.profile = new Profile();
|
|
this.messages = [];
|
|
}
|
|
|
|
emit() {
|
|
ipcEmit("set-profile", this.profile);
|
|
ipcEmit("init-messages", this.messages);
|
|
}
|
|
|
|
set (message: Init) {
|
|
this.profile = message.profile;
|
|
this.messages = message.messages;
|
|
this.emit();
|
|
}
|
|
|
|
update(update: Update) {
|
|
|
|
if (update.name === "profile") {
|
|
this.profile = update.data as Profile;
|
|
ipcEmit("set-profile", this.profile);
|
|
}
|
|
|
|
else if (update.name === "add") {
|
|
this.messages.push(update.data as Message);
|
|
ipcEmit("add-message", update.data);
|
|
}
|
|
|
|
else if (update.name === "annotate") {
|
|
this._annotate(update.data as Annotation);
|
|
ipcEmit("update-message", update.data);
|
|
}
|
|
|
|
else {
|
|
this._delete(update.data as string);
|
|
ipcEmit("delete-message", update.data);
|
|
}
|
|
|
|
}
|
|
|
|
reset() {
|
|
this.profile = new Profile();
|
|
this.messages = [];
|
|
this.emit();
|
|
}
|
|
|
|
_annotate(annotation: Annotation) {
|
|
|
|
for (const i in this.messages) {
|
|
|
|
if (this.messages[i].uid == annotation.uid) {
|
|
|
|
if (annotation.name == "content") {
|
|
this.messages[i].content = annotation.data as Content[];
|
|
}
|
|
|
|
if (annotation.name == "context") {
|
|
this.messages[i].context = annotation.data as Context;
|
|
}
|
|
|
|
if (annotation.name == "seen") {
|
|
this.messages[i].seen = annotation.data as boolean;
|
|
}
|
|
|
|
ipcEmit("update-message", annotation);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_delete(uid: string) {
|
|
for (let i = 0; i < this.messages.length; i++) {
|
|
if (this.messages[i].uid === uid) {
|
|
this.messages.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
} |