Skip to content

Commit 1580bf0

Browse files
committed
Update system loading anime page
1 parent 5821bc3 commit 1580bf0

17 files changed

+3907
-4032
lines changed

javascript/pages/watch.js

Lines changed: 186 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -1,191 +1,187 @@
1-
import { Main } from "../modules/ShikiUSR.js";
2-
import { LTransition } from "./watch/mod_transition.js";
3-
import { CheckID, LoadAnime } from "./watch/mod_resource.js";
4-
import { IPlayer } from "./watch/mod_player.js";
5-
import { AutoScrollEpisodes } from "./watch/mod_scrolling.js";
6-
import { Functional } from "./watch/mod_ui.js";
7-
import { ASynch } from "./watch/mod_dbanime.js";
8-
import { UserRate } from "./watch/mod_urate.js";
9-
import { Tunime } from "../modules/TunimeApi.js";
10-
import { History } from "./watch/mod_history.js";
11-
import { InitFranchiseVoices } from "./watch/mod_franchise.js";
12-
import { ClearParams } from "../modules/functions.js";
13-
import { Private } from "./watch/mod_private.js";
14-
15-
//ID ресурса из Shikimori
16-
export const $ID = new URLSearchParams(window.location.search).get("id");
17-
//Продолжение просмотра
18-
export let $CONTINUE = new URLSearchParams(window.location.search).get("continue");
19-
//Наведение на плеер
20-
export const $SHOWPLAYER = new URLSearchParams(window.location.search).get("player");
21-
//Существование аниме
22-
const $ISSET = new URLSearchParams(window.location.search).get("iss") ? true : false;
23-
24-
export const Player = IPlayer.Init({ standart: $PARAMETERS.player.standart });
25-
26-
ClearParams(['continue', 'player', 'iss']);
27-
28-
export let $RULES = undefined;
29-
30-
import(`/javascript/pages/watch/mod_collection.js`);
31-
32-
//Авторизируем пользователя
33-
Main(async (e) => {
34-
if ($PARAMETERS.anime.customstyle) {
35-
try {
36-
const data = await import(`/javascript/pages/anime/${$ID}.js`);
37-
$RULES = data.default;
38-
console.log(`[watch] - Custom RULES [${$ID}] loaded`);
39-
} catch { }
40-
}
41-
//Проверка на существование такого ID
42-
const check = await CheckID($ID, $ISSET);
43-
44-
if (!check) {
45-
//Аниме с такий ID не существует, перекидываем на страницу 404
46-
return document.location.replace('404a.html');
47-
}
48-
49-
Functional();
50-
51-
const aSynch = ASynch.Init();
52-
53-
UserRate().Events.OnInit((res) => {
54-
aSynch.Synch(res);
55-
});
56-
57-
//Автоматически проскролит до выбраного эпизода
58-
Player.on('loaded', ({ count }) => {
59-
if (count == 1) {
60-
AutoScrollEpisodes();
61-
}
62-
});
63-
64-
Player.CMessage.on('error', (data) => {
65-
console.log(`Eror Tunime Player:`, data);
66-
//Если ошибка Tunime плеера то переключаем на обычный плеер Kodik
67-
Player.Switch();
68-
})
69-
70-
//Выполняем сохранение аниме если выбирается озвучка только первого эпизода
71-
Player.CTranslation.on('selected', ({ id, user_handler }) => {
72-
const episode = Player.CEpisodes.selected;
73-
if (user_handler && episode == 1 && id) {
74-
aSynch.Save(episode, id);
75-
}
76-
});
77-
78-
//Событие отправки выбора озвучки первого просмотра
79-
Player.CMessage.on('play', () => {
80-
const data = aSynch.Diff;
81-
if (!data[0] && !data[1])
82-
return;
83-
if (data[0] && !data[1]) {
84-
Tunime.OnActiv.Voice($ID, data[0].kodik_dub);
85-
aSynch.difference = data[0];
86-
} else if (data[0] && data[1]) {
87-
if (data[0].kodik_dub != data[1].kodik_dub) {
88-
Tunime.OnActiv.Voice($ID, data[0].kodik_dub);
89-
aSynch.difference = data[0];
90-
}
91-
}
92-
});
93-
94-
//Подписываемся на обработчик событий выбора эпизода
95-
//Этот обработчик будет сохранять последние выбраное аниме
96-
Player.CEpisodes.on('selected', ({ episode, translation, user_handler }) => {
97-
if (user_handler) {
98-
aSynch.Save(episode, translation);
99-
100-
//Добавляем истоию просмотра
101-
History().add(false, 0, 0, episode);
102-
}
103-
});
104-
105-
//Подписываемся на обработчик событий пауза плеера
106-
Player.CMessage.on('pause', ({ time }) => {
107-
History().add(true, time)
108-
});
109-
110-
//Подписываемся на обрботчик событий
111-
Player.CMessage.on('play', ({ time, duration }) => {
112-
const userRate = UserRate().Get();
113-
if (userRate != null) {
114-
if (userRate.episodes > Player.CEpisodes.selected || userRate.status == "completed" || Private.INCOGNITO) {
115-
return;
116-
}
117-
UserRate().Controls.Episode(Player.CEpisodes.selected);
118-
}
119-
});
120-
121-
Player.CMessage.on('play', () => {
122-
if ($CONTINUE != null && $CONTINUE != false) {
123-
//Получаем историю спика продолжение просмотра
124-
let history = History().get();
125-
//Находим ID елемента из истории
126-
let id = history.findIndex((x) => { return x.id == $ID });
127-
128-
//Если найдено и совпадают текущии эпизоды
129-
if (id != -1 && Player.CEpisodes.selected == history[id].episode) {
130-
//Воспроизводим с остановившегося момента
131-
Player.PControl.Exec("seek", { seconds: history[id].duration })
132-
//Устанавливаем что продолжение было включено
133-
$CONTINUE = false;
134-
}
135-
}
136-
});
137-
138-
//Обработчик события следующего эпизода
139-
Player.CMessage.on('next', (e) => {
140-
if (Player.CEpisodes.count == Player.CEpisodes.selected) return;
141-
const next_episode = Player.CEpisodes.selected + 1;
142-
Player.PControl.Exec("set_episode", { episode: next_episode });
143-
Player.CEpisodes.Select(next_episode);
144-
aSynch.Save(next_episode, Player.CTranslation.id);
145-
History().add(false, 0, 0, next_episode);
146-
});
147-
148-
//Альтернативный полный экран видеоплеера
149-
Player.CMessage.on("fullscreen", ({ value }) => {
150-
if (value.full) {
151-
$('.player').addClass('fullscreen');
152-
} else {
153-
$('.player').removeClass('fullscreen');
154-
}
155-
});
156-
157-
//Переключение плеера через Tunime player
158-
Player.CMessage.on("switch", () => {
159-
Player.Switch();
160-
})
161-
162-
//Начинает загрузку плеера после получения синхронизированных данных
163-
aSynch.on("inited", (data) => {
164-
if (data) {
165-
Player.Init(data);
166-
} else {
167-
Player.Init();
168-
}
169-
});
170-
171-
//Загружаем аниме
172-
LoadAnime(async (e) => {
173-
if ($RULES) {
174-
$RULES.on.load();
175-
}
176-
await LTransition.Loaded(() => {
177-
if ($SHOWPLAYER) {
178-
const element = document.querySelector(".landscape-player");
179-
element.scrollIntoView({
180-
behavior: "smooth",
181-
block: "center",
182-
inline: "nearest",
183-
});
184-
}
185-
Tunime.OnActiv.Anime($ID);
186-
});
187-
History().shikiData = e;
188-
History().custom.init();
189-
InitFranchiseVoices();
190-
}, e);
1+
import { Main } from "../modules/ShikiUSR.js";
2+
import { LTransition } from "./watch/mod_transition.js";
3+
import { tLoad } from "./watch/mod.resource.js";
4+
import { IPlayer } from "./watch/mod_player.js";
5+
import { AutoScrollEpisodes } from "./watch/mod_scrolling.js";
6+
import { Functional } from "./watch/mod_ui.js";
7+
import { ASynch } from "./watch/mod_dbanime.js";
8+
import { UserRate } from "./watch/mod_urate.js";
9+
import { Tunime } from "../modules/TunimeApi.js";
10+
import { History } from "./watch/mod_history.js";
11+
import { tChronologyVoice } from "./watch/mod.chronology.js";
12+
import { ClearParams } from "../modules/functions.js";
13+
import { Private } from "./watch/mod_private.js";
14+
15+
//ID ресурса из Shikimori
16+
export const $ID = new URLSearchParams(window.location.search).get("id");
17+
//Продолжение просмотра
18+
export let $CONTINUE = new URLSearchParams(window.location.search).get("continue");
19+
//Наведение на плеер
20+
export const $SHOWPLAYER = new URLSearchParams(window.location.search).get("player");
21+
22+
export const Player = IPlayer.Init({ standart: $PARAMETERS.player.standart });
23+
24+
ClearParams(['continue', 'player', 'iss']);
25+
26+
export let $RULES = undefined;
27+
28+
//Авторизируем пользователя
29+
Main(async (e) => {
30+
if ($PARAMETERS.anime.customstyle) {
31+
try {
32+
const start = Date.now();
33+
const data = await import(`/javascript/pages/anime/${$ID}.js`);
34+
$RULES = data.default;
35+
console.log(`[mod.${$ID}] - load: ${Date.now() - start}ms.`);
36+
} catch (err) {
37+
console.log(`[mod.${$ID}] - ${err}`);
38+
}
39+
}
40+
41+
Functional();
42+
43+
const aSynch = ASynch.Init();
44+
45+
UserRate().Events.OnInit((res) => {
46+
aSynch.Synch(res);
47+
});
48+
49+
//Автоматически проскролит до выбраного эпизода
50+
Player.on('loaded', ({ count }) => {
51+
if (count == 1) {
52+
AutoScrollEpisodes();
53+
}
54+
});
55+
56+
Player.CMessage.on('error', (data) => {
57+
console.log(`Eror Tunime Player:`, data);
58+
//Если ошибка Tunime плеера то переключаем на обычный плеер Kodik
59+
Player.Switch();
60+
})
61+
62+
//Выполняем сохранение аниме если выбирается озвучка только первого эпизода
63+
Player.CTranslation.on('selected', ({ id, user_handler }) => {
64+
const episode = Player.CEpisodes.selected;
65+
if (user_handler && episode == 1 && id) {
66+
aSynch.Save(episode, id);
67+
}
68+
});
69+
70+
//Событие отправки выбора озвучки первого просмотра
71+
Player.CMessage.on('play', () => {
72+
const data = aSynch.Diff;
73+
if (!data[0] && !data[1])
74+
return;
75+
if (data[0] && !data[1]) {
76+
Tunime.OnActiv.Voice($ID, data[0].kodik_dub);
77+
aSynch.difference = data[0];
78+
} else if (data[0] && data[1]) {
79+
if (data[0].kodik_dub != data[1].kodik_dub) {
80+
Tunime.OnActiv.Voice($ID, data[0].kodik_dub);
81+
aSynch.difference = data[0];
82+
}
83+
}
84+
});
85+
86+
//Подписываемся на обработчик событий выбора эпизода
87+
//Этот обработчик будет сохранять последние выбраное аниме
88+
Player.CEpisodes.on('selected', ({ episode, translation, user_handler }) => {
89+
if (user_handler) {
90+
aSynch.Save(episode, translation);
91+
92+
//Добавляем истоию просмотра
93+
History().add(false, 0, 0, episode);
94+
}
95+
});
96+
97+
//Подписываемся на обработчик событий пауза плеера
98+
Player.CMessage.on('pause', ({ time }) => {
99+
History().add(true, time)
100+
});
101+
102+
//Подписываемся на обрботчик событий
103+
Player.CMessage.on('play', ({ time, duration }) => {
104+
const userRate = UserRate().Get();
105+
if (userRate != null) {
106+
if (userRate.episodes > Player.CEpisodes.selected || userRate.status == "completed" || Private.INCOGNITO) {
107+
return;
108+
}
109+
UserRate().Controls.Episode(Player.CEpisodes.selected);
110+
}
111+
});
112+
113+
Player.CMessage.on('play', () => {
114+
if ($CONTINUE != null && $CONTINUE != false) {
115+
//Получаем историю спика продолжение просмотра
116+
let history = History().get();
117+
//Находим ID елемента из истории
118+
let id = history.findIndex((x) => { return x.id == $ID });
119+
120+
//Если найдено и совпадают текущии эпизоды
121+
if (id != -1 && Player.CEpisodes.selected == history[id].episode) {
122+
//Воспроизводим с остановившегося момента
123+
Player.PControl.Exec("seek", { seconds: history[id].duration })
124+
//Устанавливаем что продолжение было включено
125+
$CONTINUE = false;
126+
}
127+
}
128+
});
129+
130+
//Обработчик события следующего эпизода
131+
Player.CMessage.on('next', (e) => {
132+
if (Player.CEpisodes.count == Player.CEpisodes.selected) return;
133+
const next_episode = Player.CEpisodes.selected + 1;
134+
Player.PControl.Exec("set_episode", { episode: next_episode });
135+
Player.CEpisodes.Select(next_episode);
136+
aSynch.Save(next_episode, Player.CTranslation.id);
137+
History().add(false, 0, 0, next_episode);
138+
});
139+
140+
//Альтернативный полный экран видеоплеера
141+
Player.CMessage.on("fullscreen", ({ value }) => {
142+
if (value.full) {
143+
$('.player').addClass('fullscreen');
144+
} else {
145+
$('.player').removeClass('fullscreen');
146+
}
147+
});
148+
149+
//Переключение плеера через Tunime player
150+
Player.CMessage.on("switch", () => {
151+
Player.Switch();
152+
})
153+
154+
//Начинает загрузку плеера после получения синхронизированных данных
155+
aSynch.on("inited", (data) => {
156+
if (data) {
157+
Player.Init(data);
158+
} else {
159+
Player.Init();
160+
}
161+
});
162+
163+
//Загружаем аниме
164+
tLoad(async (e) => {
165+
if ($RULES) {
166+
$RULES.on.load();
167+
}
168+
await LTransition.Loaded(() => {
169+
if ($SHOWPLAYER) {
170+
const element = document.querySelector(".landscape-player");
171+
element.scrollIntoView({
172+
behavior: "smooth",
173+
block: "center",
174+
inline: "nearest",
175+
});
176+
}
177+
Tunime.OnActiv.Anime($ID);
178+
});
179+
History().shikiData = e;
180+
History().custom.init();
181+
tChronologyVoice();
182+
}, { logged: e }).catch((err) => {
183+
if (err.message.startsWith('mod.resource.e.'))
184+
return document.location.replace('404a.html');
185+
console.log(err);
186+
});
191187
});

0 commit comments

Comments
 (0)