From d7618274f84a0edbd86ba5ba528aa3e7f8071e94 Mon Sep 17 00:00:00 2001 From: Kazuma Tomatsu Date: Wed, 22 Oct 2025 01:59:21 +0900 Subject: [PATCH 1/3] =?UTF-8?q?cm=E3=82=92=E3=83=88=E3=83=BC=E3=82=AF?= =?UTF-8?q?=E5=8D=98=E4=BD=8D=E3=81=A7=E5=88=B6=E5=BE=A1=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=99=E3=82=8B=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Page5.tsx | 54 ++++++++++++++++++++++++++++++ src/components/models/talkView.ts | 4 +++ src/data/talks.ts | 2 ++ src/data/types.ts | 1 + src/pages/break/talks/[talkId].tsx | 21 +++++++++--- 5 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 src/components/Page5.tsx diff --git a/src/components/Page5.tsx b/src/components/Page5.tsx new file mode 100644 index 0000000..e0ce08c --- /dev/null +++ b/src/components/Page5.tsx @@ -0,0 +1,54 @@ +import { Optional } from '@/utils/types' +import { TalkView } from './models/talkView' +import { useContext } from 'react' +import { PageCtx } from './models/pageContext' +import VideoPlaylist, { Playlist } from './VideoPlaylist' + +type Props = { view: Optional } + +// CM スポンサーがいない時には 各 source をコメントアウトする + +const cmList = { + cyberagent: { + src: 'https://pub-ac15e822806e471884e2b63b26f353c6.r2.dev/cyberagent.mp4', + type: 'video/mp4', + }, + saasusplatform: { + src: 'https://pub-ac15e822806e471884e2b63b26f353c6.r2.dev/o11ycon2025/saasusplatform.mp4', + type: 'video/mp4', + }, + monotaro1: { + src: 'https://pub-ac15e822806e471884e2b63b26f353c6.r2.dev/monotaro1.mp4', + type: 'video/mp4', + }, + monotaro2: { + src: 'https://pub-ac15e822806e471884e2b63b26f353c6.r2.dev/monotaro2.mp4', + type: 'video/mp4', + }, +} + +export default function Page({ view }: Props) { + const { goNextPage } = useContext(PageCtx) + const playlist: Playlist = [] + + const cmids = view?.getCmIds() || [] + cmids.forEach((cmid) => { + const cm = (cmList as Record)[cmid] + if (cm) { + playlist.push({ + sources: [ + { + src: cm.src, + type: cm.type, + }, + ], + }) + } + }) + + return ( +
+ +
+ ) +} diff --git a/src/components/models/talkView.ts b/src/components/models/talkView.ts index 53a3a3a..0a91500 100644 --- a/src/components/models/talkView.ts +++ b/src/components/models/talkView.ts @@ -104,6 +104,10 @@ export class TalkView { talk.speakers.map((s) => s.id).includes(speaker.id) ) } + + getCmIds(): string[] { + return this.selectedTalk.cmIds || [] + } } type TimeSlot = { diff --git a/src/data/talks.ts b/src/data/talks.ts index 6196df7..b48017c 100644 --- a/src/data/talks.ts +++ b/src/data/talks.ts @@ -15,6 +15,7 @@ export const talks: Talk[] = [ startTime: '2025-10-27T10:00:00', endTime: '2025-10-27T10:10:00', conferenceDayId: 1, + cmIds: ['cyberagent'], }, { id: 102, @@ -31,6 +32,7 @@ export const talks: Talk[] = [ startTime: '2025-10-27T10:10:00', endTime: '2025-10-27T11:00:00', conferenceDayId: 1, + cmIds: ['monotaro1', 'monotaro2'], }, { id: 103, diff --git a/src/data/types.ts b/src/data/types.ts index e7dae44..a15d6e1 100644 --- a/src/data/types.ts +++ b/src/data/types.ts @@ -13,6 +13,7 @@ export type Talk = { talkCategory?: string | undefined conferenceDayId?: (number | null) | undefined showOnTimetable?: boolean | undefined + cmIds?: string[] | undefined } export type Track = { diff --git a/src/pages/break/talks/[talkId].tsx b/src/pages/break/talks/[talkId].tsx index a13824b..638b404 100644 --- a/src/pages/break/talks/[talkId].tsx +++ b/src/pages/break/talks/[talkId].tsx @@ -3,6 +3,7 @@ import Page1 from '@/components/Page1' import Page2, { AvatarPreLoader } from '@/components/Page2' import Page3 from '@/components/Page3' import Page4 from '@/components/Page4' +import Page5 from '@/components/Page5' import { PageCtx, PageCtxProvider } from '@/components/models/pageContext' import { TalkView } from '@/components/models/talkView' import config, { extendConfig } from '@/config' @@ -12,6 +13,7 @@ import { tracks } from '@/data/tracks' import { useRouter } from 'next/router' import { useContext, useEffect, useMemo } from 'react' import Image from 'next/image' +import { ReactElement } from 'react' function updateCache() { if (navigator.serviceWorker && navigator.serviceWorker.controller) { @@ -22,6 +24,8 @@ function updateCache() { function Pages() { const router = useRouter() const { talkId } = router.query + const isDk = router.asPath.includes('break-dk') + useEffect(() => { extendConfig(router.query as Record) }, [router.query]) @@ -34,12 +38,21 @@ function Pages() { } return TalkView.withoutDk(talkId as string, talks, tracks, speakers) }, [talkId]) + interface PageProps { + view: ReturnType | null + isDk?: boolean + talkId?: string + } - const pages = [ + const pages: ReactElement[] = [ , , , - // , + isDk ? ( + + ) : ( + + ), ] useEffect(() => { setTotalPage(pages.length) @@ -47,8 +60,8 @@ function Pages() { const audioSrc = '/pek2025/pek2025_intermission.mp3' - const shouldPlayAudio = current !== pages.length // Page4を使用しない場合 - // const shouldPlayAudio = current !== pages.length - 1 + // const shouldPlayAudio = current !== pages.length // Page4を使用しない場合 + const shouldPlayAudio = current !== pages.length - 1 if (!view && config.debug) { return
Loading...
From 8ef806595d000cba8af065e260a845878acb1320 Mon Sep 17 00:00:00 2001 From: Kazuma Tomatsu Date: Wed, 22 Oct 2025 02:02:57 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Page5=E3=82=B3=E3=83=B3=E3=83=9D=E3=83=BC?= =?UTF-8?q?=E3=83=8D=E3=83=B3=E3=83=88=E3=81=8B=E3=82=89talkId=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=91=E3=83=86=E3=82=A3=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=97=E3=80=81=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E7=B0=A1?= =?UTF-8?q?=E7=B4=A0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/break/talks/[talkId].tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/pages/break/talks/[talkId].tsx b/src/pages/break/talks/[talkId].tsx index 638b404..7330a1c 100644 --- a/src/pages/break/talks/[talkId].tsx +++ b/src/pages/break/talks/[talkId].tsx @@ -41,18 +41,13 @@ function Pages() { interface PageProps { view: ReturnType | null isDk?: boolean - talkId?: string } const pages: ReactElement[] = [ , , , - isDk ? ( - - ) : ( - - ), + isDk ? : , ] useEffect(() => { setTotalPage(pages.length) From bd2fb9a0b34d698cf747bf33b6f3bf0224065bc4 Mon Sep 17 00:00:00 2001 From: Kazuma Tomatsu Date: Fri, 24 Oct 2025 12:34:01 +0900 Subject: [PATCH 3/3] =?UTF-8?q?TalkView=E3=81=AEgetCmIds=E3=83=A1=E3=82=BD?= =?UTF-8?q?=E3=83=83=E3=83=89=E3=82=92undefined=E3=82=92=E8=BF=94=E3=81=99?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=E3=81=97=E3=80=81?= =?UTF-8?q?Page5=E3=82=B3=E3=83=B3=E3=83=9D=E3=83=BC=E3=83=8D=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=A7=E3=81=AECM=E5=86=8D=E7=94=9F=E3=83=AD?= =?UTF-8?q?=E3=82=B8=E3=83=83=E3=82=AF=E3=82=92=E6=94=B9=E5=96=84=E3=80=82?= =?UTF-8?q?talks=E3=83=87=E3=83=BC=E3=82=BF=E3=81=ABcmIds=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=91=E3=83=86=E3=82=A3=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Page5.tsx | 24 +++++++++++++++++++++--- src/components/models/talkView.ts | 4 ++-- src/data/talks.ts | 2 ++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/components/Page5.tsx b/src/components/Page5.tsx index e0ce08c..484c8b2 100644 --- a/src/components/Page5.tsx +++ b/src/components/Page5.tsx @@ -8,7 +8,7 @@ type Props = { view: Optional } // CM スポンサーがいない時には 各 source をコメントアウトする -const cmList = { +const cmList: Record = { cyberagent: { src: 'https://pub-ac15e822806e471884e2b63b26f353c6.r2.dev/cyberagent.mp4', type: 'video/mp4', @@ -31,9 +31,25 @@ export default function Page({ view }: Props) { const { goNextPage } = useContext(PageCtx) const playlist: Playlist = [] - const cmids = view?.getCmIds() || [] + const cmIds = view?.getCmIds() + let cmids: string[] + + if (cmIds === undefined) { + // undefined の場合: すべてのCMを再生 + cmids = Object.keys(cmList) + console.log('CM IDs (undefined - using all):', cmids) + } else if (cmIds.length === 0) { + // 空配列の場合: CMをスキップして次のページへ + console.log('CM IDs (empty - skipping):', cmIds) + return goNextPage() + } else { + // 配列に値がある場合: 指定されたCMを再生 + cmids = cmIds + console.log('CM IDs (specified):', cmids) + } + cmids.forEach((cmid) => { - const cm = (cmList as Record)[cmid] + const cm = cmList[cmid] if (cm) { playlist.push({ sources: [ @@ -46,6 +62,8 @@ export default function Page({ view }: Props) { } }) + console.log('Page5 playlist:', playlist) + return (
diff --git a/src/components/models/talkView.ts b/src/components/models/talkView.ts index 0a91500..5164e90 100644 --- a/src/components/models/talkView.ts +++ b/src/components/models/talkView.ts @@ -105,8 +105,8 @@ export class TalkView { ) } - getCmIds(): string[] { - return this.selectedTalk.cmIds || [] + getCmIds(): string[] | undefined { + return this.selectedTalk.cmIds } } diff --git a/src/data/talks.ts b/src/data/talks.ts index b48017c..31d0fab 100644 --- a/src/data/talks.ts +++ b/src/data/talks.ts @@ -49,6 +49,7 @@ export const talks: Talk[] = [ startTime: '2025-10-27T11:20:00', endTime: '2025-10-27T11:50:00', conferenceDayId: 1, + cmIds: [] }, { id: 201, @@ -81,6 +82,7 @@ export const talks: Talk[] = [ startTime: '2025-10-27T11:20:00', endTime: '2025-10-27T11:50:00', conferenceDayId: 1, + cmIds: [] }, { id: 104,