-
Notifications
You must be signed in to change notification settings - Fork 3
/
addon.js
117 lines (109 loc) · 2.76 KB
/
addon.js
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
const { addonBuilder } = require("stremio-addon-sdk");
const { getNameFromCinemetaId } = require("./lib/cinemeta");
const { getCatalog } = require("./lib/anilist");
const { getAnilistId } = require("./lib/id-mapping");
const { handleWatchedEpisode } = require("./lib/anilist");
const CATALOGS = [
{
id: "CURRENT",
type: "anime",
name: "Currently watching",
},
{
id: "REPEATING",
type: "anime",
name: "Repeating",
},
{
id: "PLANNING",
type: "anime",
name: "Planning to watch",
},
{
id: "COMPLETED",
type: "anime",
name: "Completed",
},
{
id: "PAUSED",
type: "anime",
name: "Paused",
},
];
// Docs: https://github.com/Stremio/stremio-addon-sdk/blob/master/docs/api/responses/manifest.md
const builder = new addonBuilder({
id: "com.jenryk.animeo",
version: "0.0.4",
catalogs: CATALOGS,
logo: "https://raw.githubusercontent.com/Jenrykster/animeo/main/logo.png",
resources: ["subtitles"],
types: ["movie", "series"],
idPrefixes: ["anilist", "tt", "kitsu"],
name: "animeo",
description: "Track your anime progress with anilist while using stremio.",
behaviorHints: {
configurable: true,
configurationRequired: true,
},
config: [
{
key: "token",
type: "text",
title: "Anilist token",
},
],
});
builder.defineSubtitlesHandler(async (args) => {
const { token, enableSearch, preAddedOnly } = args.config;
let anilistId = "0";
let animeName = "";
let episode = "0";
if (args.id.startsWith("kitsu")) {
const [_, id, currEp] = args.id.split(":");
anilistId = await getAnilistId(id, "kitsu");
episode = args.type === "movie" ? "1" : currEp;
} else {
let [id, seasonName, currEp] = args.id.split(":");
if (args.type === "movie") {
anilistId = await getAnilistId(id, "imdb");
episode = "1";
} else if (enableSearch) {
const season = parseInt(seasonName);
animeName = await getNameFromCinemetaId(id, args.type);
if (animeName && season > 1) {
animeName += ` ${season}`;
}
episode = currEp;
}
}
if ((animeName || anilistId) && episode) {
try {
await handleWatchedEpisode(
animeName,
parseInt(anilistId),
parseInt(episode),
preAddedOnly,
token
);
} catch (err) {
console.error(err);
}
}
return Promise.resolve({ subtitles: [] });
});
builder.defineCatalogHandler(async (args) => {
const { token } = args.config;
let metas = [];
const anilistListType = CATALOGS.find((catalog) => catalog.id === args.id);
if (anilistListType) {
try {
metas = await getCatalog(anilistListType.id, token);
} catch (err) {
console.error(err);
}
}
return {
metas,
};
});
module.exports = builder.getInterface();