From 820ceda49988d698e1de0a48937a3c42d3bbc2ff Mon Sep 17 00:00:00 2001 From: dragongoose Date: Wed, 19 Jul 2023 20:26:43 -0400 Subject: [PATCH] Vod support --- src/assets/badges.ts | 8 +- src/assets/messageParser.ts | 29 ++++-- src/components/TwitchChat.vue | 95 +++++++++++++----- src/components/VideoPlayer.vue | 7 ++ src/components/user/VideoPreview.vue | 11 ++- src/router/index.ts | 5 + src/types/VOD.ts | 23 ++++- src/types/index.ts | 3 +- src/views/UserView.vue | 2 +- src/views/VodView.vue | 139 +++++++++++++++++++++++++++ 10 files changed, 282 insertions(+), 40 deletions(-) create mode 100644 src/views/VodView.vue diff --git a/src/assets/badges.ts b/src/assets/badges.ts index 01dfbf3..ef9f532 100644 --- a/src/assets/badges.ts +++ b/src/assets/badges.ts @@ -1,4 +1,4 @@ -import type { Badge, ParsedMessage } from './types' +import type { Badge } from './types' export function getBadges(badges: Badge[], badgesToFind: { setId: string; version: string }[]) { const foundBadges = [] @@ -17,8 +17,8 @@ export function getBadges(badges: Badge[], badgesToFind: { setId: string; versio return foundBadges } -export const getBadgesFromMessage = (message: ParsedMessage, allBadges: Badge[]) => { - const badgesString = message.data.tags.badges +export const getBadgesFromMessage = (tags: any, allBadges: Badge[]) => { + const badgesString = tags.badges if (!badgesString) return const badges = badgesString.split(',') const formatedBadges = badges.map((badgeWithVersion: string) => { @@ -27,4 +27,4 @@ export const getBadgesFromMessage = (message: ParsedMessage, allBadges: Badge[]) }) return getBadges(allBadges, formatedBadges) -} +} \ No newline at end of file diff --git a/src/assets/messageParser.ts b/src/assets/messageParser.ts index 45573cc..758bc5d 100644 --- a/src/assets/messageParser.ts +++ b/src/assets/messageParser.ts @@ -1,21 +1,36 @@ import type { Badge, ParsedMessage } from './types' import { getBadgesFromMessage } from './badges' -export function parseMessage(messageData: string, allBadges: Badge[]): ParsedMessage { +export function parseMessage(messageData: any, allBadges: Badge[]): ParsedMessage { const message = JSON.parse(messageData) + if (message.type === undefined && message.cursor !== "") { + const data: ParsedMessage = { + type: 'PRIVMSG', + data: { + message: message.message, + username: message.messager.name, + badges: message.badges, + offset: message.offset, + color: message.messager.colorHex + } + } + + return data + } + switch (message.type) { case 'PRIVMSG': { - const tags = message.tags - const username = message.username const data: ParsedMessage = { type: 'PRIVMSG', - data: { message: message.message, username, tags } + data: { + message: message.message, + username: message.username, + color: message.tags.color, + badges: getBadgesFromMessage(message.tags, allBadges) + } } - const badges = getBadgesFromMessage(data, allBadges) - data.data.badges = badges - return data } case 'USERNOTICE': { diff --git a/src/components/TwitchChat.vue b/src/components/TwitchChat.vue index b586557..c674d37 100644 --- a/src/components/TwitchChat.vue +++ b/src/components/TwitchChat.vue @@ -1,5 +1,5 @@