mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-16 20:00:30 +00:00
New source : KissKH (EN)
This commit is contained in:
@@ -5,6 +5,7 @@ import '../model/source.dart';
|
|||||||
import 'src/en/aniwatch/sources.dart';
|
import 'src/en/aniwatch/sources.dart';
|
||||||
import 'src/en/gogoanime/source.dart';
|
import 'src/en/gogoanime/source.dart';
|
||||||
// import 'src/en/wcostream/source.dart';
|
// import 'src/en/wcostream/source.dart';
|
||||||
|
import 'src/en/kisskh/source.dart';
|
||||||
import 'src/fr/animesultra/source.dart';
|
import 'src/fr/animesultra/source.dart';
|
||||||
import 'src/fr/franime/source.dart';
|
import 'src/fr/franime/source.dart';
|
||||||
import 'src/fr/otakufr/source.dart';
|
import 'src/fr/otakufr/source.dart';
|
||||||
@@ -18,7 +19,8 @@ void main() {
|
|||||||
otakufr,
|
otakufr,
|
||||||
// wcostreamSource,
|
// wcostreamSource,
|
||||||
animesultraSource,
|
animesultraSource,
|
||||||
...aniwatchSourcesList
|
...aniwatchSourcesList,
|
||||||
|
kisskhSource
|
||||||
];
|
];
|
||||||
final List<Map<String, dynamic>> jsonList =
|
final List<Map<String, dynamic>> jsonList =
|
||||||
_sourcesList.map((source) => source.toJson()).toList();
|
_sourcesList.map((source) => source.toJson()).toList();
|
||||||
|
|||||||
161
anime/src/en/kisskh/kisskh-v0.0.1.dart
Normal file
161
anime/src/en/kisskh/kisskh-v0.0.1.dart
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'package:bridge_lib/bridge_lib.dart';
|
||||||
|
|
||||||
|
getPopularAnime(MangaModel anime) async {
|
||||||
|
final data = {
|
||||||
|
"url":
|
||||||
|
"${anime.baseUrl}/api/DramaList/List?page=${anime.page}&type=0&sub=0&country=0&status=0&order=1&pageSize=40"
|
||||||
|
};
|
||||||
|
final res = await MBridge.http('GET', json.encode(data));
|
||||||
|
if (res.isEmpty) {
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
final jsonRes = json.decode(res);
|
||||||
|
final datas = jsonRes["data"] as List;
|
||||||
|
anime.names = datas.map((e) => e["title"]).toList();
|
||||||
|
anime.images = datas.map((e) => e["thumbnail"] ?? "").toList();
|
||||||
|
anime.urls = datas
|
||||||
|
.map((e) => "${anime.baseUrl}/api/DramaList/Drama/${e["id"]}?isq=false")
|
||||||
|
.toList();
|
||||||
|
final lastPage = jsonRes["totalCount"] as int;
|
||||||
|
final page = jsonRes["page"] as int;
|
||||||
|
|
||||||
|
anime.hasNextPage = page < lastPage;
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
|
||||||
|
getLatestUpdatesAnime(MangaModel anime) async {
|
||||||
|
final data = {
|
||||||
|
"url":
|
||||||
|
"${anime.baseUrl}/api/DramaList/List?page=${anime.page}&type=0&sub=0&country=0&status=0&order=12&pageSize=40"
|
||||||
|
};
|
||||||
|
final res = await MBridge.http('GET', json.encode(data));
|
||||||
|
if (res.isEmpty) {
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
final jsonRes = json.decode(res);
|
||||||
|
final datas = jsonRes["data"] as List;
|
||||||
|
anime.names = datas.map((e) => e["title"]).toList();
|
||||||
|
anime.images = datas.map((e) => e["thumbnail"] ?? "").toList();
|
||||||
|
anime.urls = datas
|
||||||
|
.map((e) => "${anime.baseUrl}/api/DramaList/Drama/${e["id"]}?isq=false")
|
||||||
|
.toList();
|
||||||
|
final lastPage = jsonRes["totalCount"] as int;
|
||||||
|
final page = jsonRes["page"] as int;
|
||||||
|
|
||||||
|
anime.hasNextPage = page < lastPage;
|
||||||
|
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
|
||||||
|
getAnimeDetail(MangaModel anime) async {
|
||||||
|
final statusList = [
|
||||||
|
{
|
||||||
|
"Ongoing": 0,
|
||||||
|
"Completed": 1,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
final data = {"url": anime.link};
|
||||||
|
final res = await MBridge.http('GET', json.encode(data));
|
||||||
|
if (res.isEmpty) {
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
final jsonRes = json.decode(res);
|
||||||
|
final status = jsonRes["status"] ?? "";
|
||||||
|
print(status);
|
||||||
|
anime.description = jsonRes["description"];
|
||||||
|
anime.status = MBridge.parseStatus(status, statusList);
|
||||||
|
anime.imageUrl = jsonRes["thumbnail"];
|
||||||
|
var episodes = jsonRes["episodes"];
|
||||||
|
String type = jsonRes["type"];
|
||||||
|
final episodesCount = jsonRes["episodesCount"] as int;
|
||||||
|
List<String> episodesNames = [];
|
||||||
|
List<String> episodesUrls = [];
|
||||||
|
bool containsAnime = type.contains("Anime") as bool;
|
||||||
|
bool containsTVSeries = type.contains("TVSeries") as bool;
|
||||||
|
bool containsHollywood = type.contains("Hollywood") as bool;
|
||||||
|
bool containsMovie = type.contains("Movie") as bool;
|
||||||
|
for (var a in episodes) {
|
||||||
|
String number = (a["number"] as double).toString().replaceAll(".0", "");
|
||||||
|
final id = a["id"];
|
||||||
|
if (containsAnime || containsTVSeries) {
|
||||||
|
episodesNames.add("Episode $number");
|
||||||
|
} else if (containsHollywood && episodesCount == 1 || containsMovie) {
|
||||||
|
episodesNames.add("Movie");
|
||||||
|
} else if (containsHollywood && episodesCount > 1) {
|
||||||
|
episodesNames.add("Episode $number");
|
||||||
|
}
|
||||||
|
|
||||||
|
episodesUrls.add(
|
||||||
|
"${anime.baseUrl}/api/DramaList/Episode/$id.png?err=false&ts=&time=");
|
||||||
|
}
|
||||||
|
anime.urls = episodesUrls;
|
||||||
|
anime.names = episodesNames;
|
||||||
|
anime.chaptersDateUploads = [];
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
|
||||||
|
getVideoList(MangaModel anime) async {
|
||||||
|
final datas = {"url": anime.link};
|
||||||
|
|
||||||
|
final res = await MBridge.http('GET', json.encode(datas));
|
||||||
|
|
||||||
|
if (res.isEmpty) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
final id = MBridge.substringAfter(
|
||||||
|
MBridge.substringBefore(anime.link, ".png"), "Episode/");
|
||||||
|
final jsonRes = json.decode(res);
|
||||||
|
final subRes = await MBridge.http(
|
||||||
|
'GET', json.encode({"url": "${anime.baseUrl}/api/Sub/$id"}));
|
||||||
|
var jsonSubRes = json.decode(subRes);
|
||||||
|
|
||||||
|
List<TrackModel> subtitles = [];
|
||||||
|
|
||||||
|
for (var sub in jsonSubRes) {
|
||||||
|
try {
|
||||||
|
final subUrl = sub["src"];
|
||||||
|
final label = sub["label"];
|
||||||
|
TrackModel subtitle = TrackModel();
|
||||||
|
subtitle
|
||||||
|
..label = label
|
||||||
|
..file = subUrl;
|
||||||
|
subtitles.add(subtitle);
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
final videoUrl = jsonRes["Video"];
|
||||||
|
VideoModel video = VideoModel();
|
||||||
|
video
|
||||||
|
..url = videoUrl
|
||||||
|
..originalUrl = videoUrl
|
||||||
|
..quality = "kisskh"
|
||||||
|
..subtitles = subtitles
|
||||||
|
..headers = {
|
||||||
|
"referer": "https://kisskh.me/",
|
||||||
|
"origin": "https://kisskh.me"
|
||||||
|
};
|
||||||
|
return [video];
|
||||||
|
}
|
||||||
|
|
||||||
|
searchAnime(MangaModel anime) async {
|
||||||
|
final data = {
|
||||||
|
"url": "${anime.baseUrl}/api/DramaList/Search?q=${anime.query}&type=0"
|
||||||
|
};
|
||||||
|
final res = await MBridge.http('GET', json.encode(data));
|
||||||
|
if (res.isEmpty) {
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
|
var jsonRes = json.decode(res) as List;
|
||||||
|
|
||||||
|
anime.names = jsonRes.map((e) => e["title"]).toList();
|
||||||
|
|
||||||
|
anime.images = jsonRes.map((e) => e["thumbnail"] ?? "").toList();
|
||||||
|
|
||||||
|
anime.urls = jsonRes
|
||||||
|
.map((e) => "${anime.baseUrl}/api/DramaList/Drama/${e["id"]}?isq=false")
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return anime;
|
||||||
|
}
|
||||||
17
anime/src/en/kisskh/source.dart
Normal file
17
anime/src/en/kisskh/source.dart
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import '../../../../model/source.dart';
|
||||||
|
import '../../../../utils/utils.dart';
|
||||||
|
|
||||||
|
Source get kisskhSource => _kisskhSource;
|
||||||
|
const kisskhVersion = "0.0.1";
|
||||||
|
const kisskhSourceCodeUrl =
|
||||||
|
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/main/anime/src/en/kisskh/kisskh-v$kisskhVersion.dart";
|
||||||
|
Source _kisskhSource = Source(
|
||||||
|
name: "KissKH",
|
||||||
|
baseUrl: "https://kisskh.co",
|
||||||
|
lang: "en",
|
||||||
|
typeSource: "single",
|
||||||
|
iconUrl: getIconUrl("kisskh", "en"),
|
||||||
|
sourceCodeUrl: kisskhSourceCodeUrl,
|
||||||
|
version: kisskhVersion,
|
||||||
|
appMinVerReq: "0.0.48",
|
||||||
|
isManga: false);
|
||||||
BIN
icons/mangayomi-en-kisskh.png
Normal file
BIN
icons/mangayomi-en-kisskh.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Reference in New Issue
Block a user