mirror of
https://github.com/anidl/multi-downloader-nx.git
synced 2026-04-21 00:12:05 +00:00
Merge pull request #903 from Denoder/abs-numbering
[Feature][CR] Absolute Numbering
This commit is contained in:
commit
bc21460fe0
3 changed files with 29 additions and 6 deletions
1
@types/crunchyTypes.d.ts
vendored
1
@types/crunchyTypes.d.ts
vendored
|
|
@ -43,6 +43,7 @@ export type CrunchyDownloadOptions = {
|
|||
}
|
||||
|
||||
export type CrunchyMultiDownload = {
|
||||
absolute?: boolean,
|
||||
dubLang: string[],
|
||||
all?: boolean,
|
||||
but?: boolean,
|
||||
|
|
|
|||
25
crunchy.ts
25
crunchy.ts
|
|
@ -2428,7 +2428,8 @@ export default class Crunchy implements ServiceClass {
|
|||
|
||||
for (const key of Object.keys(sortedEpisodes)) {
|
||||
const item = sortedEpisodes[key];
|
||||
console.info(`[${key}] [${item.items[0].upload_date ? new Date(item.items[0].upload_date).toISOString().slice(0, 10) : '0000-00-00'}] ${
|
||||
const epNum = key.startsWith('E') ? (`E${data?.absolute ? (item.items[0].episode_number?.toString() || item.items[0].episode) : key.slice(1)}`) : key;
|
||||
console.info(`[${data?.absolute ? epNum : key}] [${item.items[0].upload_date ? new Date(item.items[0].upload_date).toISOString().slice(0, 10) : '0000-00-00'}] ${
|
||||
item.items.find(a => !a.season_title.match(/\(\w+ Dub\)/))?.season_title ?? item.items[0].season_title.replace(/\(\w+ Dub\)/g, '').trimEnd()
|
||||
} - Season ${item.items[0].season_number} - ${item.items[0].title} [${
|
||||
item.items.map((a, index) => {
|
||||
|
|
@ -2444,8 +2445,14 @@ export default class Crunchy implements ServiceClass {
|
|||
return { data: sortedEpisodes, list: Object.entries(sortedEpisodes).map(([key, value]) => {
|
||||
const images = (value.items[0].images.thumbnail ?? [[ { source: '/notFound.png' } ]])[0];
|
||||
const seconds = Math.floor(value.items[0].duration_ms / 1000);
|
||||
let epNum;
|
||||
if (data?.absolute) {
|
||||
epNum = value.items[0].episode_number !== null && value.items[0].episode_number !== undefined ? value.items[0].episode_number.toString() : (value.items[0].episode !== null && value.items[0].episode !== undefined ? value.items[0].episode : (key.startsWith('E') ? key.slice(1) : key));
|
||||
} else {
|
||||
epNum = key.startsWith('E') ? key.slice(1) : key;
|
||||
}
|
||||
return {
|
||||
e: key.startsWith('E') ? key.slice(1) : key,
|
||||
e: epNum,
|
||||
lang: value.langs.map(a => a?.code),
|
||||
name: value.items[0].title,
|
||||
season: value.items[0].season_number.toString(),
|
||||
|
|
@ -2465,7 +2472,7 @@ export default class Crunchy implements ServiceClass {
|
|||
console.info('');
|
||||
console.info('-'.repeat(30));
|
||||
console.info('');
|
||||
const selected = this.itemSelectMultiDub(episodes, data.dubLang, data.but, data.all, data.e);
|
||||
const selected = this.itemSelectMultiDub(episodes, data.dubLang, data.but, data.all, data.e, data.absolute);
|
||||
for (const key of Object.keys(selected)) {
|
||||
const item = selected[key];
|
||||
console.info(`[S${item.season}E${item.episodeNumber}] - ${item.episodeTitle} [${
|
||||
|
|
@ -2480,7 +2487,7 @@ export default class Crunchy implements ServiceClass {
|
|||
public itemSelectMultiDub (eps: Record<string, {
|
||||
items: CrunchyEpisode[],
|
||||
langs: langsData.LanguageItem[]
|
||||
}>, dubLang: string[], but?: boolean, all?: boolean, e?: string, ) {
|
||||
}>, dubLang: string[], but?: boolean, all?: boolean, e?: string, absolute?: boolean) {
|
||||
const doEpsFilter = parseSelect(e as string);
|
||||
|
||||
const ret: Record<string, CrunchyEpMeta> = {};
|
||||
|
|
@ -2501,7 +2508,13 @@ export default class Crunchy implements ServiceClass {
|
|||
item.series_title = 'NO_TITLE';
|
||||
}
|
||||
|
||||
const epNum = key.startsWith('E') ? key.slice(1) : key;
|
||||
let epNum;
|
||||
if (absolute) {
|
||||
epNum = item.episode_number !== null && item.episode_number !== undefined ? item.episode_number.toString() : (item.episode !== null && item.episode !== undefined ? item.episode : (key.startsWith('E') ? key.slice(1) : key));
|
||||
} else {
|
||||
epNum = key.startsWith('E') ? key.slice(1) : key;
|
||||
}
|
||||
|
||||
// set data
|
||||
const images = (item.images.thumbnail ?? [[ { source: '/notFound.png' } ]])[0];
|
||||
const epMeta: CrunchyEpMeta = {
|
||||
|
|
@ -2535,7 +2548,7 @@ export default class Crunchy implements ServiceClass {
|
|||
item.playback = item.streams_link;
|
||||
}
|
||||
}
|
||||
// find episode numbers
|
||||
|
||||
if(item.playback && ((but && !doEpsFilter.isSelected([epNum, item.id])) || (all || (doEpsFilter.isSelected([epNum, item.id])) && !but))) {
|
||||
if (Object.prototype.hasOwnProperty.call(ret, key)) {
|
||||
const epMe = ret[key];
|
||||
|
|
|
|||
|
|
@ -49,6 +49,15 @@ export type TAppArg<T extends boolean|string|number|unknown[], K = any> = {
|
|||
}
|
||||
|
||||
const args: TAppArg<boolean|number|string|unknown[]>[] = [
|
||||
{
|
||||
name: 'absolute',
|
||||
describe: 'Use absolute numbers for the episode',
|
||||
docDescribe: 'Use absolute numbers for the episode. If not set, it will use the default index numbers',
|
||||
group: 'dl',
|
||||
service: ['crunchy'],
|
||||
type: 'boolean',
|
||||
usage: '',
|
||||
},
|
||||
{
|
||||
name: 'auth',
|
||||
describe: 'Enter authentication mode',
|
||||
|
|
|
|||
Loading…
Reference in a new issue