Spaces:
Build error
Build error
File size: 4,159 Bytes
0bfe2e3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
import {
Addon,
Option,
UserData,
ParsedStream,
Stream,
AIOStream,
} from '../db';
import { Preset, baseOptions } from './preset';
import { constants, Env, RESOURCES } from '../utils';
import { StreamParser } from '../parser';
class DMMCastStreamParser extends StreamParser {
protected override getFilename(
stream: Stream,
currentParsedStream: ParsedStream
): string | undefined {
let filename = stream.description
? stream.description
.split('\n')
.map((line) => line.replace(/-$/, ''))
.filter((line) => !line.includes('📦'))
.join('')
: stream.behaviorHints?.filename?.trim();
return filename;
}
protected override getMessage(
stream: Stream,
currentParsedStream: ParsedStream
): string | undefined {
if (!stream.description?.includes('📦')) {
currentParsedStream.filename = undefined;
return `${stream.name} - ${stream.description}`;
}
return undefined;
}
protected override getInLibrary(
stream: Stream,
currentParsedStream: ParsedStream
): boolean {
if (stream.name?.includes('Yours')) {
return true;
}
return false;
}
}
export class DMMCastPreset extends Preset {
static override getParser(): typeof StreamParser {
return DMMCastStreamParser;
}
static override get METADATA() {
const supportedResources = [constants.STREAM_RESOURCE];
const options: Option[] = [
{
id: 'name',
name: 'Name',
description: 'What to call this addon',
type: 'string',
required: true,
default: 'DMM Cast',
},
{
id: 'installationUrl',
name: 'Installation URL',
description:
'Provide the Unique Installation URL for your DMM Cast addon, available [here](https://debridmediamanager.com/stremio)',
type: 'password',
required: true,
},
{
id: 'timeout',
name: 'Timeout',
description: 'The timeout for this addon',
type: 'number',
default: Env.DEFAULT_DMM_CAST_TIMEOUT || Env.DEFAULT_TIMEOUT,
constraints: {
min: Env.MIN_TIMEOUT,
max: Env.MAX_TIMEOUT,
},
},
{
id: 'resources',
name: 'Resources',
description:
'Optionally override the resources that are fetched from this addon ',
type: 'multi-select',
required: false,
default: undefined,
options: RESOURCES.map((resource) => ({
label: resource,
value: resource,
})),
},
{
id: 'socials',
name: '',
description: '',
type: 'socials',
socials: [{ id: 'website', url: 'https://debridmediamanager.com' }],
},
];
return {
ID: 'dmm-cast',
NAME: 'DMM Cast',
LOGO: 'https://static.debridmediamanager.com/dmmcast.png',
URL: '',
TIMEOUT: Env.DEFAULT_DMM_CAST_TIMEOUT || Env.DEFAULT_TIMEOUT,
USER_AGENT: Env.DEFAULT_DMM_CAST_USER_AGENT || Env.DEFAULT_USER_AGENT,
SUPPORTED_SERVICES: [],
DESCRIPTION:
'Access streams casted from [DMM](https://debridmediamanager.com) by you or other users',
OPTIONS: options,
SUPPORTED_STREAM_TYPES: [],
SUPPORTED_RESOURCES: supportedResources,
};
}
static async generateAddons(
userData: UserData,
options: Record<string, any>
): Promise<Addon[]> {
if (!options.installationUrl.endsWith('/manifest.json')) {
throw new Error('Invalid installation URL');
}
return [this.generateAddon(userData, options)];
}
private static generateAddon(
userData: UserData,
options: Record<string, any>
): Addon {
return {
name: options.name || this.METADATA.NAME,
manifestUrl: options.installationUrl,
enabled: true,
library: false,
resources: options.resources || this.METADATA.SUPPORTED_RESOURCES,
timeout: options.timeout || this.METADATA.TIMEOUT,
presetType: this.METADATA.ID,
presetInstanceId: '',
headers: {
'User-Agent': this.METADATA.USER_AGENT,
},
};
}
}
|