fchat-rising/site/character_page/recon.vue

98 lines
3.0 KiB
Vue

<template>
<div class="recon row">
<div class="conversation" v-if="conversation && conversation.length > 0">
<div class="col-sm-10" style="margin-top:5px">
<h4>Latest Messages</h4>
<template v-for="message in conversation">
<message-view :message="message" :key="message.id">
</message-view>
</template>
</div>
</div>
<div class="row ad-viewer" v-if="ads.length > 0">
<div class="col-sm-10" style="margin-top:5px">
<h4>Latest Ads</h4>
<template v-for="message in ads">
<h3>#{{message.channelName}} <span class="message-time">{{formatTime(message.datePosted)}}</span></h3>
<div class="border-bottom">
<bbcode :text="message.message"></bbcode>
</div>
</template>
</div>
</div>
<div class="row" v-if="ads.length === 0 && conversation.length === 0">
<div class="col-sm-10" style="margin-top:5px">
You have not seen any ads or messages from this character.
</div>
</div>
</div>
</template>
<script lang="ts">
import { Component, Hook, Prop } from '@f-list/vue-ts';
import Vue from 'vue';
import {Character} from './interfaces';
import { Conversation } from '../../chat/interfaces';
import core from '../../chat/core';
import * as _ from 'lodash';
import { AdCachedPosting } from '../../learn/ad-cache';
import MessageView from '../../chat/message_view';
import {formatTime} from '../../chat/common';
@Component({
components: {
'message-view': MessageView
}
})
export default class ReconView extends Vue {
@Prop({required: true})
readonly character!: Character;
conversation: Conversation.Message[] = [];
ads: AdCachedPosting[] = [];
formatTime = formatTime;
@Hook('mounted')
async mounted(): Promise<void> {
await this.load();
}
async load(): Promise<void> {
this.conversation = [];
this.ads = [];
await Promise.all([
this.loadAds(),
this.loadConversation()
]);
}
async loadAds(): Promise<void> {
const cache = core.cache.adCache.get(this.character.character.name);
this.ads = _.uniq(((cache) ? _.takeRight(cache.posts, 5).reverse() : [])) as AdCachedPosting[];
}
async loadConversation(): Promise<void> {
const ownName = core.characters.ownCharacter.name;
const logKey = this.character.character.name.toLowerCase();
const logDates = await core.logs.getLogDates(ownName, logKey);
if (logDates.length === 0) {
return;
}
const messages = await core.logs.getLogs(ownName, logKey, _.last(logDates) as Date);
const matcher = /\[AUTOMATED MESSAGE]/;
this.conversation = _.takeRight(_.filter(messages, (m) => !matcher.exec(m.text)), 5);
}
}
</script>