Compare commits
3 commits
84698dafca
...
13a3cc5ca5
Author | SHA1 | Date | |
---|---|---|---|
13a3cc5ca5 | |||
a314305469 | |||
2d4eacfdf8 |
|
@ -6,10 +6,10 @@ AniX is an unofficial web client for the Android application Anixart. It allows
|
||||||
|
|
||||||
## Changelog [RU]
|
## Changelog [RU]
|
||||||
|
|
||||||
|
- [3.6.0](./public/changelog/3.6.0.md)
|
||||||
- [3.5.0](./public/changelog/3.5.0.md)
|
- [3.5.0](./public/changelog/3.5.0.md)
|
||||||
- [3.4.0](./public/changelog/3.4.0.md)
|
- [3.4.0](./public/changelog/3.4.0.md)
|
||||||
- [3.3.0](./public/changelog/3.3.0.md)
|
- [3.3.0](./public/changelog/3.3.0.md)
|
||||||
- [3.2.3](./public/changelog/3.2.3.md)
|
|
||||||
|
|
||||||
[other versions](./public/changelog)
|
[other versions](./public/changelog)
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,6 @@ export const ContinueWatching = () => {
|
||||||
...(plannedData.content || []),
|
...(plannedData.content || []),
|
||||||
...(delayedData.content || []),
|
...(delayedData.content || []),
|
||||||
];
|
];
|
||||||
console.log("loaded data:", data);
|
|
||||||
const randomizedData = _randomize(data, 3);
|
const randomizedData = _randomize(data, 3);
|
||||||
setReleaseData(randomizedData);
|
setReleaseData(randomizedData);
|
||||||
}
|
}
|
||||||
|
@ -67,8 +66,6 @@ export const ContinueWatching = () => {
|
||||||
)
|
)
|
||||||
return <></>;
|
return <></>;
|
||||||
|
|
||||||
console.log("randomized data:", releaseData);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card>
|
<Card>
|
||||||
<div className="flex justify-between py-2 border-b-2 border-black dark:border-white">
|
<div className="flex justify-between py-2 border-b-2 border-black dark:border-white">
|
||||||
|
|
|
@ -105,18 +105,30 @@ export const ReleasePlayerCustom = (props: {
|
||||||
}
|
}
|
||||||
|
|
||||||
const _fetchKodikManifest = async (url: string) => {
|
const _fetchKodikManifest = async (url: string) => {
|
||||||
|
// Fetch data through a proxy
|
||||||
const data = await _fetchPlayer(
|
const data = await _fetchPlayer(
|
||||||
`https://anix-player.wah.su/?url=${url}&player=kodik`
|
`https://anix-player.wah.su/?url=${url}&player=kodik`
|
||||||
);
|
);
|
||||||
if (data) {
|
if (data) {
|
||||||
let lowQualityLink = data.links["360"][0].src;
|
let lowQualityLink = data.links["360"][0].src; // we assume that 360p is always present
|
||||||
if (lowQualityLink.includes("https://")) {
|
|
||||||
|
if (!lowQualityLink.includes("//")) { // check if link is encrypted, else do nothing
|
||||||
|
const decryptedBase64 = lowQualityLink.replace(/[a-zA-Z]/g, (e) => {
|
||||||
|
return String.fromCharCode(
|
||||||
|
(e <= "Z" ? 90 : 122) >= (e = e.charCodeAt(0) + 18) ? e : e - 26
|
||||||
|
);
|
||||||
|
});
|
||||||
|
lowQualityLink = atob(decryptedBase64);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lowQualityLink.includes("https://")) { // string the https prefix, since we add it manually
|
||||||
lowQualityLink = lowQualityLink.replace("https://", "//");
|
lowQualityLink = lowQualityLink.replace("https://", "//");
|
||||||
}
|
}
|
||||||
|
|
||||||
let manifest = `https:${lowQualityLink.replace("360.mp4:hls:", "")}`;
|
let manifest = `https:${lowQualityLink.replace("360.mp4:hls:", "")}`;
|
||||||
let poster = `https:${lowQualityLink.replace("360.mp4:hls:manifest.m3u8", "thumb001.jpg")}`;
|
let poster = `https:${lowQualityLink.replace("360.mp4:hls:manifest.m3u8", "thumb001.jpg")}`;
|
||||||
|
|
||||||
if (lowQualityLink.includes("animetvseries")) {
|
if (lowQualityLink.includes("animetvseries")) { // if link includes "animetvseries" we need to construct manifest ourselves
|
||||||
let blobTxt = "#EXTM3U\n";
|
let blobTxt = "#EXTM3U\n";
|
||||||
|
|
||||||
if (data.links.hasOwnProperty("240")) {
|
if (data.links.hasOwnProperty("240")) {
|
||||||
|
@ -212,7 +224,7 @@ export const ReleasePlayerCustom = (props: {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
__getInfo();
|
__getInfo();
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [props.id, props.token]);
|
}, [props.id, props.token]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -245,7 +257,7 @@ export const ReleasePlayerCustom = (props: {
|
||||||
if (voiceover.selected) {
|
if (voiceover.selected) {
|
||||||
__getInfo();
|
__getInfo();
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [voiceover.selected]);
|
}, [voiceover.selected]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -286,7 +298,7 @@ export const ReleasePlayerCustom = (props: {
|
||||||
if (source.selected) {
|
if (source.selected) {
|
||||||
__getInfo();
|
__getInfo();
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [source.selected]);
|
}, [source.selected]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -349,7 +361,7 @@ export const ReleasePlayerCustom = (props: {
|
||||||
setPlayerError(null);
|
setPlayerError(null);
|
||||||
__getInfo();
|
__getInfo();
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [episode.selected]);
|
}, [episode.selected]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -437,7 +449,12 @@ export const ReleasePlayerCustom = (props: {
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
: <iframe src={playerProps.src} className="w-full aspect-video" allowFullScreen={true} />}
|
: <iframe
|
||||||
|
src={playerProps.src}
|
||||||
|
className="w-full aspect-video"
|
||||||
|
allowFullScreen={true}
|
||||||
|
/>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
|
@ -6,10 +6,10 @@ AniX - это неофициальный веб-клиент для Android-пр
|
||||||
|
|
||||||
## Список изменений
|
## Список изменений
|
||||||
|
|
||||||
|
- [3.6.0](/public/changelog/3.6.0.md)
|
||||||
- [3.5.0](/public/changelog/3.5.0.md)
|
- [3.5.0](/public/changelog/3.5.0.md)
|
||||||
- [3.4.0](/public/changelog/3.4.0.md)
|
- [3.4.0](/public/changelog/3.4.0.md)
|
||||||
- [3.3.0](/public/changelog/3.3.0.md)
|
- [3.3.0](/public/changelog/3.3.0.md)
|
||||||
- [3.2.3](/public/changelog/3.2.3.md)
|
|
||||||
|
|
||||||
[другие версии](/public/changelog)
|
[другие версии](/public/changelog)
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 529 KiB |
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 632 KiB |
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 731 KiB |
Before Width: | Height: | Size: 267 KiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 1.8 MiB |
|
@ -16,3 +16,7 @@
|
||||||
- Изменён блок активности на странице профиля
|
- Изменён блок активности на странице профиля
|
||||||
- Изменены виды блоков "Оценки" и "Недавно просмотренные" на странице профиля с карусели карточек на список
|
- Изменены виды блоков "Оценки" и "Недавно просмотренные" на странице профиля с карусели карточек на список
|
||||||
- Изменён вид блока профиля (соц. сети и роли)
|
- Изменён вид блока профиля (соц. сети и роли)
|
||||||
|
|
||||||
|
## Исправлено
|
||||||
|
|
||||||
|
- Получение прямых ссылок на источник кодик в собственном плеере, если кодик отдал зашифрованные ссылки
|