mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-08-30 12:39:26 +08:00
feat(v3): add music search and subscription UI
This commit is contained in:
+53
-28
@@ -33,15 +33,21 @@ export const storageAttributes = [
|
||||
},
|
||||
]
|
||||
|
||||
export const storageIconDict = storageAttributes.reduce((dict, item) => {
|
||||
dict[item.type] = item.icon
|
||||
return dict
|
||||
}, {} as Record<string, string>)
|
||||
export const storageIconDict = storageAttributes.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.type] = item.icon
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
)
|
||||
|
||||
export const storageRemoteDict = storageAttributes.reduce((dict, item) => {
|
||||
dict[item.type] = item.remote
|
||||
return dict
|
||||
}, {} as Record<string, boolean>)
|
||||
export const storageRemoteDict = storageAttributes.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.type] = item.remote
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, boolean>,
|
||||
)
|
||||
|
||||
export const downloaderOptions = [
|
||||
{
|
||||
@@ -58,10 +64,13 @@ export const downloaderOptions = [
|
||||
},
|
||||
]
|
||||
|
||||
export const downloaderDict = downloaderOptions.reduce((dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
}, {} as Record<string, string>)
|
||||
export const downloaderDict = downloaderOptions.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
)
|
||||
|
||||
export const mediaServerOptions = [
|
||||
{
|
||||
@@ -90,10 +99,13 @@ export const mediaServerOptions = [
|
||||
},
|
||||
]
|
||||
|
||||
export const mediaServerDict = mediaServerOptions.reduce((dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
}, {} as Record<string, string>)
|
||||
export const mediaServerDict = mediaServerOptions.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
)
|
||||
|
||||
export const innerFilterRules = [
|
||||
{ title: i18n.global.t('filterRules.specSub'), value: ' SPECSUB ' },
|
||||
@@ -236,6 +248,10 @@ export const mediaTypeOptions = [
|
||||
title: i18n.global.t('mediaType.tv'),
|
||||
value: '电视剧',
|
||||
},
|
||||
{
|
||||
title: i18n.global.t('mediaType.music'),
|
||||
value: '音乐',
|
||||
},
|
||||
{
|
||||
title: i18n.global.t('mediaType.anime'),
|
||||
value: '动漫',
|
||||
@@ -251,10 +267,13 @@ export const mediaTypeOptions = [
|
||||
]
|
||||
|
||||
// 媒体类型字典
|
||||
export const mediaTypeDict = mediaTypeOptions.reduce((dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
}, {} as Record<string, string>)
|
||||
export const mediaTypeDict = mediaTypeOptions.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
)
|
||||
|
||||
// 通知开关选项
|
||||
export const notificationSwitchOptions = [
|
||||
@@ -297,10 +316,13 @@ export const notificationSwitchOptions = [
|
||||
]
|
||||
|
||||
// 通知开关字典
|
||||
export const notificationSwitchDict = notificationSwitchOptions.reduce((dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
}, {} as Record<string, string>)
|
||||
export const notificationSwitchDict = notificationSwitchOptions.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
)
|
||||
|
||||
// 操作步骤选项
|
||||
export const actionStepOptions = [
|
||||
@@ -367,7 +389,10 @@ export const actionStepOptions = [
|
||||
]
|
||||
|
||||
// 操作步骤字典
|
||||
export const actionStepDict = actionStepOptions.reduce((dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
}, {} as Record<string, string>)
|
||||
export const actionStepDict = actionStepOptions.reduce(
|
||||
(dict, item) => {
|
||||
dict[item.value] = item.title
|
||||
return dict
|
||||
},
|
||||
{} as Record<string, string>,
|
||||
)
|
||||
|
||||
+27
-3
@@ -1,4 +1,4 @@
|
||||
export type MediaDataSource = 'themoviedb' | 'douban' | 'bangumi' | 'anilist' | (string & {})
|
||||
export type MediaDataSource = 'themoviedb' | 'douban' | 'bangumi' | 'anilist' | 'musicbrainz' | (string & {})
|
||||
|
||||
// 手动刮削选项
|
||||
export interface ManualScrapeOptions {
|
||||
@@ -330,9 +330,9 @@ export interface DownloadHistory {
|
||||
|
||||
// 媒体信息
|
||||
export interface MediaInfo {
|
||||
// 来源:themoviedb、douban、bangumi、anilist
|
||||
// 来源:themoviedb、douban、bangumi、anilist、musicbrainz
|
||||
source?: string
|
||||
// 类型 电影、电视剧、合集
|
||||
// 类型 电影、电视剧、音乐、合集
|
||||
type?: string
|
||||
// 媒体标题
|
||||
title?: string
|
||||
@@ -436,6 +436,30 @@ export interface MediaInfo {
|
||||
names?: string[]
|
||||
// 剧集组
|
||||
episode_group?: string
|
||||
// 音乐艺术家列表
|
||||
artists?: string[]
|
||||
// 音乐艺术家展示文本
|
||||
artist?: string
|
||||
// 专辑
|
||||
album?: string
|
||||
// 专辑艺术家
|
||||
album_artist?: string
|
||||
// 发行版本
|
||||
version?: string
|
||||
// 音轨号
|
||||
track_number?: number
|
||||
// 碟号
|
||||
disc_number?: number
|
||||
// 总音轨数
|
||||
total_tracks?: number
|
||||
// 音轨时长(秒)
|
||||
duration?: number
|
||||
// ISRC
|
||||
isrc?: string
|
||||
// 音乐封面
|
||||
cover_url?: string
|
||||
// ListenBrainz 收听次数
|
||||
listen_count?: number
|
||||
}
|
||||
|
||||
// 季信息
|
||||
|
||||
Reference in New Issue
Block a user