mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 03:26:37 +08:00
95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
import type { DiscoverItem } from '../api/discover'
|
|
import { buildSiteSearchFeedURL, buildSubscriptionAliases } from '../api/subscriptions'
|
|
import { buildSubscribeKeyword } from './discoverPageModel'
|
|
import { defaultSubscriptionExcludeWords } from './subscriptionFormModel'
|
|
|
|
export type DiscoverSubscriptionForm = {
|
|
keyword: string
|
|
search_mode: string
|
|
imdb_id: string
|
|
media_type: string
|
|
resolution: string
|
|
quality: string
|
|
effects: string
|
|
release_groups: string
|
|
exclude_words: string
|
|
wash_enabled: boolean
|
|
wash_priority: string
|
|
save_path: string
|
|
media_category: string
|
|
priority: number
|
|
run_now: boolean
|
|
}
|
|
|
|
export function discoverSubscriptionKeyword(item: DiscoverItem): string {
|
|
return item.subscribe_keyword || buildSubscribeKeyword(item)
|
|
}
|
|
|
|
export function initialDiscoverSubscriptionForm(item: DiscoverItem): DiscoverSubscriptionForm {
|
|
return {
|
|
keyword: discoverSubscriptionKeyword(item),
|
|
search_mode: 'keyword',
|
|
imdb_id: '',
|
|
media_type: item.media_type || '',
|
|
resolution: 'best',
|
|
quality: '',
|
|
effects: '',
|
|
release_groups: '',
|
|
exclude_words: defaultSubscriptionExcludeWords,
|
|
wash_enabled: false,
|
|
wash_priority: 'balanced',
|
|
save_path: '',
|
|
media_category: '',
|
|
priority: 50,
|
|
run_now: true,
|
|
}
|
|
}
|
|
|
|
export function discoverItemMetaText(item: DiscoverItem): string {
|
|
return [
|
|
item.media_type,
|
|
item.year && item.year > 0 ? item.year : '',
|
|
item.rating ? `★ ${item.rating.toFixed(1)}` : '',
|
|
]
|
|
.filter(Boolean)
|
|
.join(' · ')
|
|
}
|
|
|
|
export function buildDiscoverSubscriptionInput(
|
|
item: DiscoverItem,
|
|
form: DiscoverSubscriptionForm,
|
|
source: string,
|
|
) {
|
|
const finalKeyword = form.keyword.trim() || discoverSubscriptionKeyword(item)
|
|
return {
|
|
name: `${item.title} 自动订阅`,
|
|
feed_url: buildSiteSearchFeedURL(finalKeyword, source, buildSubscriptionAliases(item)),
|
|
filter: finalKeyword,
|
|
media_type: form.media_type || undefined,
|
|
media_category: form.media_category || undefined,
|
|
save_path: form.save_path || undefined,
|
|
search_mode: form.search_mode,
|
|
imdb_id: form.imdb_id || undefined,
|
|
source,
|
|
poster_url: item.poster_url || undefined,
|
|
backdrop_url: item.backdrop_url || undefined,
|
|
overview: item.overview || undefined,
|
|
original_name: item.original_name || undefined,
|
|
year: item.year || undefined,
|
|
total_episodes: item.total_episodes || undefined,
|
|
resolution: form.resolution === 'best' ? 'best' : form.resolution,
|
|
quality: form.quality || undefined,
|
|
effects: form.effects || undefined,
|
|
release_groups: form.release_groups || undefined,
|
|
exclude_words: form.exclude_words || undefined,
|
|
wash_enabled: form.wash_enabled,
|
|
wash_priority: form.wash_priority,
|
|
priority: form.priority,
|
|
enabled: true,
|
|
}
|
|
}
|
|
|
|
export function apiErrorMessage(err: unknown, fallback: string): string {
|
|
return (err as { response?: { data?: { error?: string } } })?.response?.data?.error ?? fallback
|
|
}
|