diff --git a/src/api/constants.ts b/src/api/constants.ts index 83a31079..86322c4e 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -68,6 +68,10 @@ export const mediaServerOptions = [ value: 'emby', title: i18n.global.t('setting.system.emby'), }, + { + value: 'zspace', + title: i18n.global.t('setting.system.zspace'), + }, { value: 'jellyfin', title: i18n.global.t('setting.system.jellyfin'), diff --git a/src/api/types.ts b/src/api/types.ts index ca0918fe..639f59c1 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -1145,7 +1145,7 @@ export interface StorageConf { export interface MediaServerConf { // 名称 name: string - // 类型 emby/jellyfin/plex/trimemedia/ugreen + // 类型 emby/zspace/jellyfin/plex/trimemedia/ugreen type: string // 配置 config: { [key: string]: any } diff --git a/src/assets/images/logos/zspace.webp b/src/assets/images/logos/zspace.webp new file mode 100644 index 00000000..94ae4b87 Binary files /dev/null and b/src/assets/images/logos/zspace.webp differ diff --git a/src/components/cards/LibraryCard.vue b/src/components/cards/LibraryCard.vue index a2c19af0..23cc7f84 100644 --- a/src/components/cards/LibraryCard.vue +++ b/src/components/cards/LibraryCard.vue @@ -40,6 +40,7 @@ function imageErrorHandler() { function getDefaultImage() { if (props.media?.server_type === 'plex') return plex else if (props.media?.server_type === 'emby') return emby + else if (props.media?.server_type === 'zspace') return getLogoUrl('zspace') else if (props.media?.server_type === 'jellyfin') return jellyfin else if (props.media?.server_type === 'trimemedia') return getLogoUrl('trimemedia') else if (props.media?.server_type === 'ugreen') return getLogoUrl('ugreen') diff --git a/src/components/cards/MediaServerCard.vue b/src/components/cards/MediaServerCard.vue index cb1870a2..3fe53130 100644 --- a/src/components/cards/MediaServerCard.vue +++ b/src/components/cards/MediaServerCard.vue @@ -121,6 +121,8 @@ const getIcon = computed(() => { switch (props.mediaserver.type) { case 'emby': return getLogoUrl('emby') + case 'zspace': + return getLogoUrl('zspace') case 'jellyfin': return getLogoUrl('jellyfin') case 'trimemedia': @@ -318,6 +320,77 @@ onMounted(() => { /> + + + + + + + + + + + + + + + + + + + + = { webUrl: 'https://emby.media', timeout: 2000, }, + zspace: { + appScheme: 'emby://', + webUrl: 'https://www.zspace.com.cn', + timeout: 2000, + }, trimemedia: { appScheme: 'trimemedia://', webUrl: 'https://trimemedia.com', @@ -135,6 +140,9 @@ function buildDeepLinkUrl(appType: AppType, params: string | DoubanAppParams): s case 'emby': return buildEmbyDeepLink(params as string) + case 'zspace': + return buildEmbyDeepLink(params as string) + case 'trimemedia': return buildTrimemediaDeepLink(params as string) @@ -634,7 +642,7 @@ export async function openMediaServerWithAutoDetect( // 优先使用传入的 serverType 参数 if (serverType) { const type = serverType.toLowerCase() - if (type === 'plex' || type === 'jellyfin' || type === 'emby' || type === 'trimemedia') { + if (type === 'plex' || type === 'jellyfin' || type === 'emby' || type === 'zspace' || type === 'trimemedia') { detectedServerType = type as AppType } } @@ -649,6 +657,8 @@ export async function openMediaServerWithAutoDetect( detectedServerType = 'jellyfin' } else if (url.includes('emby')) { detectedServerType = 'emby' + } else if (url.includes('zspace')) { + detectedServerType = 'zspace' } } @@ -698,6 +708,8 @@ export function getAppDownloadUrl(appType: AppType): string { return 'https://jellyfin.org/downloads/' case 'emby': return 'https://emby.media/download.html' + case 'zspace': + return 'https://www.zspace.com.cn/' case 'trimemedia': return 'https://trimemedia.com/download' case 'douban': diff --git a/src/utils/imageUtils.ts b/src/utils/imageUtils.ts index 1a1ffaeb..7d9f7c80 100644 --- a/src/utils/imageUtils.ts +++ b/src/utils/imageUtils.ts @@ -8,6 +8,7 @@ import qbittorrentLogo from '@/assets/images/logos/qbittorrent.png' import transmissionLogo from '@/assets/images/logos/transmission.png' import rtorrentLogo from '@/assets/images/logos/rtorrent.png' import embyLogo from '@/assets/images/logos/emby.png' +import zspaceLogo from '@/assets/images/logos/zspace.webp' import jellyfinLogo from '@/assets/images/logos/jellyfin.png' import plexLogo from '@/assets/images/logos/plex.png' import trimemediaLogo from '@/assets/images/logos/trimemedia.png' @@ -40,6 +41,7 @@ const logoMap: Record = { transmission: transmissionLogo, rtorrent: rtorrentLogo, emby: embyLogo, + zspace: zspaceLogo, jellyfin: jellyfinLogo, plex: plexLogo, trimemedia: trimemediaLogo, diff --git a/src/views/setup/MediaServerSettingsStep.vue b/src/views/setup/MediaServerSettingsStep.vue index 62cc66fa..8f6516af 100644 --- a/src/views/setup/MediaServerSettingsStep.vue +++ b/src/views/setup/MediaServerSettingsStep.vue @@ -122,6 +122,19 @@ watch( + + + + +
极影视
+
+
+
+ + + + + + + + + + + + + + + + + + + +