diff --git a/javascript/anime/src/all/netflixmirror.js b/javascript/anime/src/all/netflixmirror.js index b4a2d5c7..a52254dd 100644 --- a/javascript/anime/src/all/netflixmirror.js +++ b/javascript/anime/src/all/netflixmirror.js @@ -7,21 +7,29 @@ const mangayomiSources = [{ "iconUrl": "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/javascript/icon/all.netflixmirror.png", "typeSource": "single", "itemType": 1, - "version": "0.1.5", + "version": "0.2.0", "pkgPath": "anime/src/all/netflixmirror.js" }]; class DefaultExtension extends MProvider { - getTVApi() { - return "https://pcmirror.cc" - } - getPreference(key) { const preferences = new SharedPreferences(); return preferences.get(key); } + getMobileBaseUrl() { + return this.getPreference("netmirror_override_mobile_base_url"); + } + + getTVBaseUrl() { + return this.getPreference("netmirror_override_tv_base_url"); + } + + getServiceDetails() { + return this.getPreference("netmirror_pref_service"); + } + getPoster(id, service) { if (service === "nf") return `https://imgcdn.media/poster/v/${id}.jpg` @@ -29,9 +37,6 @@ class DefaultExtension extends MProvider { return `https://imgcdn.media/pv/480/${id}.jpg` } - getServiceDetails() { - return this.getPreference("netmirror_pref_service"); - } async getCookie() { const preferences = new SharedPreferences(); @@ -41,13 +46,13 @@ class DefaultExtension extends MProvider { // Cookie lasts for 24hrs but still checking for 12hrs if (now_ts - cookie_ts > 60 * 60 * 12) { - const check = await new Client().get(`${this.source.baseUrl}/home`, { "cookie": cookie }); + const check = await new Client().get(this.getMobileBaseUrl() + `/mobile/home`, { "cookie": cookie }); const hDocBody = new Document(check.body).selectFirst("body") const addhash = hDocBody.attr("data-addhash"); const data_time = hDocBody.attr("data-time"); - var res = await new Client().post(`${this.getTVApi()}/tv/p.php`, { "cookie": "" }, { "hash": addhash }); + var res = await new Client().post(`${this.getTVBaseUrl()}/tv/p.php`, { "cookie": "" }, { "hash": addhash }); cookie = res.headers["set-cookie"]; preferences.setString("cookie", cookie); preferences.setString("cookie_ts", data_time); @@ -64,8 +69,11 @@ class DefaultExtension extends MProvider { var slug = ""; if (url == "/home") slug = ""; else if (service == "pv") slug = "/pv"; + if (!(url.startsWith("https"))) { + url = this.getMobileBaseUrl() + "/mobile" + slug + url + } - return (await new Client().get(this.source.baseUrl + slug + url, { "cookie": cookie })).body; + return (await new Client().get(url, { "cookie": cookie })).body; } async getPopular(page) { return await this.getPages(await this.request("/home"), ".tray-container, #top10") @@ -194,18 +202,18 @@ class DefaultExtension extends MProvider { async getVideoList(url) { var src = this.getPreference("netmirror_pref_stream_extraction"); - - var baseUrl = src === 'tv' ? this.getTVApi() : this.source.baseUrl + var baseUrl = src === 'tv' ? this.getTVBaseUrl() : this.getMobileBaseUrl() var service = this.getServiceDetails(); - if (service === "nf" && src === 'tv') baseUrl += "/tv"; - - const data = JSON.parse(await this.request(`/playlist.php?id=${url}`)); + var slug = "/mobile" + if (service === "nf" && src === 'tv') slug = "/tv"; + url = baseUrl + slug + `/playlist.php?id=${url}` + const data = JSON.parse(await this.request(url)); let videoList = []; let subtitles = []; let audios = []; for (const playlist of data) { var source = playlist.sources[0] - var link = baseUrl + source.file; + var link = baseUrl.replace(slug, "") + source.file; var headers = { 'Origin': baseUrl, @@ -269,41 +277,60 @@ class DefaultExtension extends MProvider { } getSourcePreferences() { - return [{ - key: 'netmirror_pref_video_resolution', - listPreference: { - title: 'Preferred video resolution', - summary: '', - valueIndex: 0, - entries: ["1080p", "720p", "480p"], - entryValues: ["1080", "720", "480"] - } - }, { - "key": "netmirror_pref_display_name_1", - "switchPreferenceCompat": { - "title": "Display media name on home page", - "summary": "Homepage loads faster by not calling details API", - "value": true - } - }, { - key: 'netmirror_pref_service', - listPreference: { - title: 'Preferred OTT service', - summary: '', - valueIndex: 0, - entries: ["Net mirror", "Prime mirror"], - entryValues: ["nf", "pv",] - } - }, { - key: 'netmirror_pref_stream_extraction', - listPreference: { - title: 'Preferred stream extraction source', - summary: 'Extract stream from which source (if one source fails choose another)', - valueIndex: 0, - entries: ["TV", "Mobile"], - entryValues: ["tv", "mobile"] - } - }, + return [ + { + key: "netmirror_override_mobile_base_url", + editTextPreference: { + title: "Override mobile base url", + summary: "", + value: "https://netfree.cc", + dialogTitle: "Override base url", + dialogMessage: "", + } + }, { + key: "netmirror_override_tv_base_url", + editTextPreference: { + title: "Override tv base url", + summary: "", + value: "https://pcmirror.cc", + dialogTitle: "Override base url", + dialogMessage: "", + } + }, { + key: 'netmirror_pref_video_resolution', + listPreference: { + title: 'Preferred video resolution', + summary: '', + valueIndex: 0, + entries: ["1080p", "720p", "480p"], + entryValues: ["1080", "720", "480"] + } + }, { + "key": "netmirror_pref_display_name_1", + "switchPreferenceCompat": { + "title": "Display media name on home page", + "summary": "Homepage loads faster by not calling details API", + "value": true + } + }, { + key: 'netmirror_pref_service', + listPreference: { + title: 'Preferred OTT service', + summary: '', + valueIndex: 0, + entries: ["Net mirror", "Prime mirror"], + entryValues: ["nf", "pv",] + } + }, { + key: 'netmirror_pref_stream_extraction', + listPreference: { + title: 'Preferred stream extraction source', + summary: 'Extract stream from which source (if one source fails choose another)', + valueIndex: 0, + entries: ["TV", "Mobile"], + entryValues: ["tv", "mobile"] + } + }, ]; }