98 lines
3.0 KiB
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>
|