Skip to content

Commit

Permalink
refactor: support media titles in m3u8 playlist (#176)
Browse files Browse the repository at this point in the history
  • Loading branch information
qilme authored May 23, 2024
1 parent 148557a commit b9e187a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 11 deletions.
20 changes: 13 additions & 7 deletions src/hooks/useDownload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ async function getSaveDir(rpc_url: string, rpc_secret: string) {
return save_dir
}
export const useDownload = () => {
const { rawLinks, rawLinksText } = useSelectedLink()
const { rawLinks } = useSelectedLink()
const t = useT()
const { pathname } = useRouter()
return {
Expand Down Expand Up @@ -159,19 +159,25 @@ export const useDownload = () => {
notify.error(`failed to send to aria2: ${e}`)
}
},
playlist_download: () => {
const a = document.createElement("a")
a.href = URL.createObjectURL(
new Blob([rawLinksText(true)], { type: "application/x-mpegURL" }),
)
const selectedObjs = _selectedObjs()
playlistDownloadSelected: () => {
const selectedObjs = _selectedObjs().filter((obj) => !obj.is_dir)
let saveName = pathBase(pathname())
if (selectedObjs.length === 1) {
saveName = selectedObjs[0].name
}
if (!saveName) {
saveName = t("manage.sidemenu.home")
}
const m3u8Content = selectedObjs.reduce(
(acc, obj, index) =>
`${acc}#EXTINF:-1,${obj.name}\n${rawLinks(true)[index]}\n`,
"#EXTM3U\n",
)
const m3u8Blob = new Blob([m3u8Content], {
type: "application/x-mpegURL",
})
const a = document.createElement("a")
a.href = URL.createObjectURL(m3u8Blob)
a.download = `${saveName}.m3u8`
a.click()
URL.revokeObjectURL(a.href)
Expand Down
4 changes: 2 additions & 2 deletions src/pages/home/folder/context-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const ContextMenu = () => {
const t = useT()
const { colorMode } = useColorMode()
const { copySelectedRawLink, copySelectedPreviewPage } = useCopyLink()
const { batchDownloadSelected, sendToAria2, playlist_download } =
const { batchDownloadSelected, sendToAria2, playlistDownloadSelected } =
useDownload()
const canPackageDownload = () => {
return UserMethods.is_admin(me()) || getSettingBool("package_download")
Expand Down Expand Up @@ -148,7 +148,7 @@ export const ContextMenu = () => {
<Item onClick={() => bus.emit("tool", "package_download")}>
{t("home.toolbar.package_download")}
</Item>
<Item onClick={playlist_download}>
<Item onClick={playlistDownloadSelected}>
{t("home.toolbar.playlist_download")}
</Item>
</Show>
Expand Down
7 changes: 5 additions & 2 deletions src/pages/home/toolbar/Download.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { CenterIcon } from "./Icon"
export const Download = () => {
const t = useT()
const colorScheme = "neutral"
const { batchDownloadSelected, sendToAria2, playlist_download } =
const { batchDownloadSelected, sendToAria2, playlistDownloadSelected } =
useDownload()
return (
<Menu placement="top" offset={10}>
Expand All @@ -45,7 +45,10 @@ export const Download = () => {
>
{t("home.toolbar.package_download")}
</MenuItem>
<MenuItem colorScheme={colorScheme} onSelect={playlist_download}>
<MenuItem
colorScheme={colorScheme}
onSelect={playlistDownloadSelected}
>
{t("home.toolbar.playlist_download")}
</MenuItem>
</Show>
Expand Down

0 comments on commit b9e187a

Please sign in to comment.