Skip to content

Commit 99851bf

Browse files
committed
✨ [epgs] 追っかけ再生ができるように
一旦仕様: 追っかけ終わってしまうと再生が停止する
1 parent e79d24e commit 99851bf

File tree

4 files changed

+51
-21
lines changed

4 files changed

+51
-21
lines changed

src/miraktest-epgs/api.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,11 @@ export class EPGStationAPI {
9898
return objUrl
9999
}
100100
async getRecordings({ offset, limit }: { offset?: number; limit?: number }) {
101-
const { data } = await this.client.get<{ records: EPGSProgramRecord[] }>(
102-
"api/recording",
103-
{ params: { isHalfWidth: true, offset, limit } }
104-
)
105-
return data.records
101+
const { data } = await this.client.get<{
102+
records: EPGSProgramRecord[]
103+
total: number
104+
}>("api/recording", { params: { isHalfWidth: true, offset, limit } })
105+
return data
106106
}
107107
getVideoUrl({ videoId }: { videoId: number }) {
108108
return urljoin(this.baseUrl.href, `api/videos/${videoId}`)

src/miraktest-epgs/components/RecordList.tsx

+23-14
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ export const RecordList: React.VFC<{
2020
searchTerm: string | null
2121
setRecord: React.Dispatch<React.SetStateAction<EPGSProgramRecord | null>>
2222
reload: number
23-
}> = ({ api, services, searchTerm, setRecord, reload }) => {
23+
isRecording: boolean
24+
}> = ({ api, services, searchTerm, setRecord, reload, isRecording }) => {
2425
const [_records, setRecords] = useState<EPGSProgramRecord[] | null>(null)
2526
const records = useMemo(() => _records || [], [_records])
2627

@@ -87,22 +88,30 @@ export const RecordList: React.VFC<{
8788

8889
useEffect(() => {
8990
setPageSize(pageSize)
90-
api
91-
.getRecords({
92-
offset: pageSize * pageIndex,
93-
limit: pageSize,
94-
keyword: globalFilter || undefined,
95-
})
96-
.then(({ records, total }) => {
97-
setTotal(total)
98-
setRecords(records)
99-
})
100-
.catch(() => console.error("録画番組の取得に失敗しました"))
101-
}, [pageIndex, pageSize, globalFilter, reload])
91+
isRecording
92+
? api
93+
.getRecordings({ offset: pageSize * pageIndex, limit: pageSize })
94+
.then(({ records, total }) => {
95+
setTotal(total)
96+
setRecords(records)
97+
})
98+
.catch(() => console.error("録画番組の取得に失敗しました"))
99+
: api
100+
.getRecords({
101+
offset: pageSize * pageIndex,
102+
limit: pageSize,
103+
keyword: globalFilter || undefined,
104+
})
105+
.then(({ records, total }) => {
106+
setTotal(total)
107+
setRecords(records)
108+
})
109+
.catch(() => console.error("録画番組の取得に失敗しました"))
110+
}, [pageIndex, pageSize, globalFilter, reload, isRecording])
102111
useEffect(() => {
103112
gotoPage(0)
104113
setGlobalFilter(searchTerm)
105-
}, [searchTerm])
114+
}, [searchTerm, isRecording])
106115

107116
return (
108117
<div className="h-full flex flex-col">

src/miraktest-epgs/components/Records.tsx

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Switch } from "@headlessui/react"
12
import clsx from "clsx"
23
import React, { useState } from "react"
34
import { RotateCw, Search } from "react-feather"
@@ -21,6 +22,7 @@ export const Records: React.VFC<{
2122
const [record, setRecord] = useState<EPGSProgramRecord | null>(null)
2223

2324
const [reload, setReload] = useState(0)
25+
const [isRecording, setIsRecording] = useState(false)
2426

2527
return (
2628
<div className="w-full h-full flex flex-col">
@@ -29,7 +31,7 @@ export const Records: React.VFC<{
2931
<h2 className="font-semibold text-lg">録画番組</h2>
3032
<div
3133
className={clsx(
32-
"w-1/3",
34+
"w-1/2",
3335
"flex",
3436
"items-center",
3537
"justify-center",
@@ -49,6 +51,24 @@ export const Records: React.VFC<{
4951
>
5052
<RotateCw size={20} />
5153
</button>
54+
<Switch.Group>
55+
<div className="flex items-center justify-center flex-shrink-0">
56+
<Switch
57+
checked={isRecording}
58+
onChange={(e) => setIsRecording(e)}
59+
className={`${
60+
isRecording ? "bg-blue-600" : "bg-gray-300"
61+
} relative inline-flex items-center h-6 rounded-full w-11`}
62+
>
63+
<span
64+
className={`${
65+
isRecording ? "translate-x-6" : "translate-x-1"
66+
} inline-block w-4 h-4 transform bg-white rounded-full transition ease-in-out duration-200`}
67+
/>
68+
</Switch>
69+
<Switch.Label className="ml-2">録画中</Switch.Label>
70+
</div>
71+
</Switch.Group>
5272
<form
5373
className="flex items-center justify-center space-x-2 w-full"
5474
onSubmit={(e) => {
@@ -82,6 +102,7 @@ export const Records: React.VFC<{
82102
searchTerm={searchTerm || null}
83103
setRecord={setRecord}
84104
reload={reload}
105+
isRecording={isRecording}
85106
/>
86107
</div>
87108
{record ? (

src/miraktest-epgs/constants.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ export const EPGS_META = {
401401
id: EPGS_ID,
402402
name: "EPGStation",
403403
author: "ci7lus",
404-
version: "0.1.3",
404+
version: "0.1.4",
405405
description: "EPGStationの録画を再生するためのプラグインです。",
406406
authorUrl: "https://github.com/ci7lus",
407407
url: "https://github.com/ci7lus/miraktest-plugins/tree/master/src/miraktest-epgs",

0 commit comments

Comments
 (0)