diff --git a/src/ace-config.ts b/src/ace-config.ts
index 7621d39e..cf75cec0 100644
--- a/src/ace-config.ts
+++ b/src/ace-config.ts
@@ -70,7 +70,7 @@ function registerJinja2Mode() {
'boolean|defined|divisibleby|eq|escaped|even|false|filter|float|ge|gt|in|integer|iterable|le|lower|lt|mapping|ne|none|number|odd|sameas|sequence|string|test|true|undefined|upper'
const operators = 'and|in|is|not|or'
const contextVariables =
- 'title|en_title|original_title|season|season_fmt|year|title_year|type|category|vote_average|poster|backdrop|season_year|actors|overview|tmdbid|imdbid|doubanid|episode_title|episode_date|original_name|name|en_name|episode|season_episode|part|customization|fps|resourceType|effect|edition|videoFormat|resource_term|releaseGroup|videoCodec|audioCodec|webSource|torrent_title|pubdate|freedate|seeders|volume_factor|hit_and_run|labels|description|site_name|size|transfer_type|file_count|total_size|err_msg|fileExt|__meta__|__mediainfo__|__torrentinfo__|__transferinfo__|__episodes_info__'
+ 'title|en_title|original_title|season|season_fmt|year|title_year|type|category|vote_average|poster|backdrop|season_year|actors|overview|tmdbid|imdbid|doubanid|bangumiid|anilistid|media_source|media_id|episode_title|episode_date|original_name|name|en_name|episode|season_episode|part|customization|fps|resourceType|effect|edition|videoFormat|resource_term|releaseGroup|videoCodec|audioCodec|webSource|torrent_title|pubdate|freedate|seeders|volume_factor|hit_and_run|labels|description|site_name|size|transfer_type|file_count|total_size|err_msg|fileExt|__meta__|__mediainfo__|__torrentinfo__|__transferinfo__|__episodes_info__'
const keywordMapper = this.createKeywordMapper(
{
@@ -282,7 +282,7 @@ function registerJinja2Mode() {
'boolean|defined|divisibleby|eq|escaped|even|false|filter|float|ge|gt|in|integer|iterable|le|lower|lt|mapping|ne|none|number|odd|sameas|sequence|string|test|true|undefined|upper'
const operators = 'and|in|is|not|or'
const contextVariables =
- 'title|en_title|original_title|season|season_fmt|year|title_year|type|category|vote_average|poster|backdrop|season_year|actors|overview|tmdbid|imdbid|doubanid|episode_title|episode_date|original_name|name|en_name|episode|season_episode|part|customization|fps|resourceType|effect|edition|videoFormat|resource_term|releaseGroup|videoCodec|audioCodec|webSource|torrent_title|pubdate|freedate|seeders|volume_factor|hit_and_run|labels|description|site_name|size|transfer_type|file_count|total_size|err_msg|fileExt|__meta__|__mediainfo__|__torrentinfo__|__transferinfo__|__episodes_info__'
+ 'title|en_title|original_title|season|season_fmt|year|title_year|type|category|vote_average|poster|backdrop|season_year|actors|overview|tmdbid|imdbid|doubanid|bangumiid|anilistid|media_source|media_id|episode_title|episode_date|original_name|name|en_name|episode|season_episode|part|customization|fps|resourceType|effect|edition|videoFormat|resource_term|releaseGroup|videoCodec|audioCodec|webSource|torrent_title|pubdate|freedate|seeders|volume_factor|hit_and_run|labels|description|site_name|size|transfer_type|file_count|total_size|err_msg|fileExt|__meta__|__mediainfo__|__torrentinfo__|__transferinfo__|__episodes_info__'
const keywordMapper = this.createKeywordMapper(
{
diff --git a/src/api/types.ts b/src/api/types.ts
index e9f714af..4cf35750 100644
--- a/src/api/types.ts
+++ b/src/api/types.ts
@@ -1,4 +1,4 @@
-export type MediaDataSource = 'themoviedb' | 'douban' | 'bangumi' | 'anilist'
+export type MediaDataSource = 'themoviedb' | 'douban' | 'bangumi' | 'anilist' | (string & {})
// 手动刮削选项
export interface ManualScrapeOptions {
@@ -27,7 +27,13 @@ export interface Subscribe {
// 豆瓣ID
doubanid?: string
// Bangumi ID
- bangumiid?: string
+ bangumiid?: number
+ // AniList ID
+ anilistid?: number
+ // 主媒体数据源
+ media_source?: MediaDataSource
+ // 数据源原生ID
+ media_id?: string
// 其它媒体ID
mediaid?: string
// 季号
@@ -128,6 +134,12 @@ export interface SubscribeShare {
doubanid?: string
// Bangumi ID
bangumiid?: number
+ // AniList ID
+ anilistid?: number
+ // 主媒体数据源
+ media_source?: MediaDataSource
+ // 数据源原生ID
+ media_id?: string
// 季号
season?: number
// 海报
@@ -230,6 +242,10 @@ export interface TransferHistory {
tvdbid?: number
// 豆瓣ID
doubanid?: string
+ // Bangumi ID
+ bangumiid?: number
+ // AniList ID
+ anilistid?: number
// 媒体数据源
media_source?: MediaDataSource
// 数据源原生ID
@@ -1535,6 +1551,10 @@ export interface TransferForm {
tmdbid?: number
// 豆瓣 ID
doubanid?: string
+ // Bangumi ID
+ bangumiid?: number
+ // AniList ID
+ anilistid?: number
// 媒体数据源
media_source?: MediaDataSource
// 数据源原生ID
diff --git a/src/components/cards/MediaCard.vue b/src/components/cards/MediaCard.vue
index 0b73425a..1240a772 100644
--- a/src/components/cards/MediaCard.vue
+++ b/src/components/cards/MediaCard.vue
@@ -166,12 +166,17 @@ function getExistsStatusKey() {
}
function isSameSubscribeMedia(subscribe: Subscribe) {
+ const mediaId = getMediaId()
+ if (subscribe.media_source && subscribe.media_id) {
+ const prefix = subscribe.media_source === 'themoviedb' ? 'tmdb' : subscribe.media_source
+ return mediaId === `${prefix}:${subscribe.media_id}`
+ }
+ if (subscribe.mediaid) return mediaId === subscribe.mediaid
if (props.media?.tmdb_id && subscribe.tmdbid) return props.media.tmdb_id === subscribe.tmdbid
if (props.media?.douban_id && subscribe.doubanid) return props.media.douban_id === subscribe.doubanid
if (props.media?.bangumi_id && subscribe.bangumiid) return props.media.bangumi_id === subscribe.bangumiid
-
- const mediaId = props.media?.media_id ? `${props.media.mediaid_prefix}:${props.media.media_id}` : ''
- return Boolean(mediaId && subscribe.mediaid === mediaId)
+ if (props.media?.anilist_id && subscribe.anilistid) return props.media.anilist_id === subscribe.anilistid
+ return false
}
// 角标颜色
diff --git a/src/components/cards/SubscribeCard.vue b/src/components/cards/SubscribeCard.vue
index 07581725..977a8965 100644
--- a/src/components/cards/SubscribeCard.vue
+++ b/src/components/cards/SubscribeCard.vue
@@ -264,9 +264,14 @@ async function editSubscribeDialog() {
// 获得mediaid
function getMediaId() {
+ if (props.media?.media_source && props.media?.media_id) {
+ const prefix = props.media.media_source === 'themoviedb' ? 'tmdb' : props.media.media_source
+ return `${prefix}:${props.media.media_id}`
+ }
if (props.media?.tmdbid) return `tmdb:${props.media?.tmdbid}`
else if (props.media?.doubanid) return `douban:${props.media?.doubanid}`
else if (props.media?.bangumiid) return `bangumi:${props.media?.bangumiid}`
+ else if (props.media?.anilistid) return `anilist:${props.media?.anilistid}`
else return props.media?.mediaid
}
@@ -480,13 +485,7 @@ function handleCardClick() {