mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 10:51:17 +00:00
feat(anime) tr/diziWatch extension
This commit is contained in:
@@ -24,6 +24,7 @@ import 'src/id/otakudesu/source.dart';
|
||||
import 'src/it/animesaturn/source.dart';
|
||||
import 'src/pt/animesvision/source.dart';
|
||||
import 'src/sq/filma24/source.dart';
|
||||
import 'src/tr/diziwatch/source.dart';
|
||||
|
||||
List<Source> dartAnimesourceList = [
|
||||
gogoanimeSource,
|
||||
@@ -50,5 +51,6 @@ List<Source> dartAnimesourceList = [
|
||||
nyaaSource,
|
||||
animepaheSource,
|
||||
animetoast,
|
||||
animesvision
|
||||
animesvision,
|
||||
diziwatchSource
|
||||
];
|
||||
|
||||
213
dart/anime/src/tr/diziwatch/diziwatch.dart
Normal file
213
dart/anime/src/tr/diziwatch/diziwatch.dart
Normal file
@@ -0,0 +1,213 @@
|
||||
import 'package:mangayomi/bridge_lib.dart';
|
||||
import 'dart:convert';
|
||||
|
||||
class DiziWatch extends MProvider {
|
||||
DiziWatch({required this.source});
|
||||
|
||||
MSource source;
|
||||
|
||||
final Client client = Client(source);
|
||||
|
||||
@override
|
||||
bool get supportsLatest => true;
|
||||
|
||||
@override
|
||||
Map<String, String> get headers => {};
|
||||
|
||||
Future<MPages> parseMainList(int index) async {
|
||||
MDocument dom = parseHtml((await client.get(Uri.parse(source.baseUrl))) .body);
|
||||
List<MManga> list = [];
|
||||
MElement containingElement = dom.select("#list-series-hizala2")[index];
|
||||
List<MElement> results = containingElement.select("#list-series-main");
|
||||
for (MElement result in results) {
|
||||
MElement a = result.selectFirst("a");
|
||||
MElement img = a.selectFirst("img");
|
||||
MManga anime = new MManga();
|
||||
anime.name = img.attr("alt");
|
||||
anime.link = a.getHref;
|
||||
anime.imageUrl = img.getSrc;
|
||||
list.add(anime);
|
||||
}
|
||||
|
||||
return MPages(list, false);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getPopular(int page) async {
|
||||
return parseMainList(1);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getLatestUpdates(int page) async {
|
||||
return parseMainList(2);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> search(String query, int page, FilterList filterList) async {
|
||||
String orderby = "";
|
||||
String year = "";
|
||||
String imdb = "";
|
||||
String genre = "";
|
||||
for (var filter in filterList.filters) {
|
||||
if (filter.type == "Sort") {
|
||||
orderby = filter.values[filter.state].value;
|
||||
} else if (filter.type == "Year") {
|
||||
year = filter.state;
|
||||
} else if (filter.type == "MinIMDBRating") {
|
||||
imdb = filter.values[filter.state].value;
|
||||
} else if (filter.type == "Genre") {
|
||||
genre = filter.values[filter.state].value;
|
||||
}
|
||||
}
|
||||
MDocument dom = parseHtml((await client.get(Uri.parse("${source.baseUrl}/anime-arsivi/page/${page}/?orderby=${orderby}&yil=${year}&imdb=${imdb}&isim=${query}&tur=${genre}"))) .body);
|
||||
List<MElement> results = dom.select("#list-series");
|
||||
List<MManga> list = [];
|
||||
for (MElement result in results) {
|
||||
MElement a = result.select("a")[1];
|
||||
MElement img = a.selectFirst("img");
|
||||
MManga anime = new MManga();
|
||||
anime.name = result.selectFirst("div.cat-title a").text;
|
||||
anime.link = a.getHref;
|
||||
anime.imageUrl = img.getSrc;
|
||||
list.add(anime);
|
||||
}
|
||||
|
||||
MElement paginateLinksDiv = dom.selectFirst("div.paginate-links");
|
||||
int lastPage = int.parse(paginateLinksDiv.selectFirst("a.next").previousElementSibling.text ?? "1");
|
||||
|
||||
return MPages(list, lastPage > page);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MManga> getDetail(String url) async {
|
||||
MDocument dom = parseHtml((await client.get(Uri.parse(url))) .body);
|
||||
|
||||
var anime = new MManga();
|
||||
|
||||
anime.name = dom.selectFirst("h1.title-border").text;
|
||||
anime.link = url;
|
||||
anime.imageUrl = dom.selectFirst("div.category_image img").getSrc;
|
||||
anime.description = dom.selectFirst("div#series-info").text;
|
||||
|
||||
List<String> genres = dom.selectFirst("span.dizi-tur").text.split(", ");
|
||||
genres.remove("Anime"); // not needed
|
||||
anime.genre = genres;
|
||||
|
||||
List<MElement> results = dom.select("div.bolumust");
|
||||
List<MChapter> chapters = [];
|
||||
for (MElement result in results) {
|
||||
MElement a = result.select("a")[1];
|
||||
MChapter chapter = new MChapter();
|
||||
chapter.name = result.selectFirst(".baslik").text + " | " + result.selectFirst("#bolum-ismi").text;
|
||||
chapter.url = a.getHref;
|
||||
chapters.add(chapter);
|
||||
}
|
||||
anime.chapters = chapters;
|
||||
|
||||
return anime;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<MVideo>> getVideoList(String url) async {
|
||||
MDocument dom = parseHtml((await client.get(Uri.parse(url))) .body);
|
||||
String id = dom.selectFirst("#takip_et_izledim_Calis").attr("data-ilanid");
|
||||
var json = json.decode((await client.get(Uri.parse("${source.baseUrl}/wp-admin/admin-ajax.php?action=playlist&pid=${id}"))).body)[0];
|
||||
var sources = json["sources"];
|
||||
List<MVideo> videos = [];
|
||||
for (var source in sources) {
|
||||
MVideo video = new MVideo();
|
||||
video.url = source["file"];
|
||||
video.originalUrl = source["file"];
|
||||
video.quality = source["label"];
|
||||
video.headers = {"Referer": url};
|
||||
videos.add(video);
|
||||
}
|
||||
|
||||
String quality = getPreferenceValue(source.id, "preferred_quality");
|
||||
videos.sort((MVideo a, MVideo b) => (b.quality.contains(quality) ? 1 : 0) - (a.quality.contains(quality) ? 1 : 0));
|
||||
|
||||
return videos;
|
||||
}
|
||||
|
||||
@override
|
||||
List<dynamic> getFilterList() {
|
||||
return [
|
||||
HeaderFilter("Filtrele"),
|
||||
SelectFilter("Sort", "Sırala", 0, [
|
||||
SelectFilterOption("IMDb Puanına Göre", "meta_value"),
|
||||
SelectFilterOption("Alfabetik", "name"),
|
||||
SelectFilterOption("Eklenme Tarihine Göre", "ID")
|
||||
]),
|
||||
TextFilter("Year", "Yapım Yılı"),
|
||||
SelectFilter("Genre", "Tür", 0, [
|
||||
SelectFilterOption("Kategori Seçin", ""),
|
||||
SelectFilterOption("Aksiyon", "aksiyon"),
|
||||
SelectFilterOption("Arabalar", "araba"),
|
||||
SelectFilterOption("Askeri", "askeri"),
|
||||
SelectFilterOption("Bilim Kurgu", "bilim"),
|
||||
SelectFilterOption("Büyü", "buyu"),
|
||||
SelectFilterOption("Doğaüstü Güçler", "doga"),
|
||||
SelectFilterOption("Dövüş Sanatları", "dovus"),
|
||||
SelectFilterOption("Dram", "dram"),
|
||||
SelectFilterOption("Ecchi", "ecchi"),
|
||||
SelectFilterOption("Fantastik", "fantastik"),
|
||||
SelectFilterOption("Gerilim", "gerilim"),
|
||||
SelectFilterOption("Gizem", "gizem"),
|
||||
SelectFilterOption("Harem", "harem"),
|
||||
SelectFilterOption("Isekai", "isekai"),
|
||||
SelectFilterOption("Komedi", "komedi"),
|
||||
SelectFilterOption("Korku", "korku"),
|
||||
SelectFilterOption("Macera", "macera"),
|
||||
SelectFilterOption("Mecha", "mecha"),
|
||||
SelectFilterOption("Müzik", "muzik"),
|
||||
SelectFilterOption("Okul", "okul"),
|
||||
SelectFilterOption("Oyun", "oyun"),
|
||||
SelectFilterOption("Parodi", "parodi"),
|
||||
SelectFilterOption("Polisiye", "polisiye"),
|
||||
SelectFilterOption("Psikolojik", "psikolojik"),
|
||||
SelectFilterOption("Romantizm", "romantizm"),
|
||||
SelectFilterOption("Samuray", "samuray"),
|
||||
SelectFilterOption("Seinen", "seinen"),
|
||||
SelectFilterOption("Shoujo", "shoujo"),
|
||||
SelectFilterOption("Shounen", "shounen"),
|
||||
SelectFilterOption("Spor", "spor"),
|
||||
SelectFilterOption("Suç", "suc"),
|
||||
SelectFilterOption("Süper Güçler", "super"),
|
||||
SelectFilterOption("Şeytanlar", "seytan"),
|
||||
SelectFilterOption("Şizofreni", "sizofreni"),
|
||||
SelectFilterOption("Tarihi", "tarihi"),
|
||||
SelectFilterOption("Uzay", "uzay"),
|
||||
SelectFilterOption("Vampir", "vampir"),
|
||||
SelectFilterOption("Yaşamdan Kesitler", "yasam")
|
||||
]),
|
||||
SelectFilter("MinIMDBRating", "Min. IMBD Puanı", 0, [
|
||||
SelectFilterOption("1", "0"), // value 1 looks like buggy so use 0 it wont make any difference.
|
||||
SelectFilterOption("2", "2"),
|
||||
SelectFilterOption("3", "3"),
|
||||
SelectFilterOption("4", "4"),
|
||||
SelectFilterOption("5", "5"),
|
||||
SelectFilterOption("6", "6"),
|
||||
SelectFilterOption("7", "7"),
|
||||
SelectFilterOption("8", "8"),
|
||||
SelectFilterOption("9", "9")
|
||||
])
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
List<dynamic> getSourcePreferences() {
|
||||
return [
|
||||
ListPreference(
|
||||
key: "preferred_quality",
|
||||
title: "Tercih edilen kalite",
|
||||
summary: "",
|
||||
valueIndex: 0,
|
||||
entries: ["1080p", "480p"], // I only saw 1080p and 480p in diziWatch.
|
||||
entryValues: ["1080", "480"])
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
DiziWatch main(MSource source) {
|
||||
return DiziWatch(source:source);
|
||||
}
|
||||
BIN
dart/anime/src/tr/diziwatch/icon.png
Normal file
BIN
dart/anime/src/tr/diziwatch/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
16
dart/anime/src/tr/diziwatch/source.dart
Normal file
16
dart/anime/src/tr/diziwatch/source.dart
Normal file
@@ -0,0 +1,16 @@
|
||||
import '../../../../../model/source.dart';
|
||||
|
||||
Source get diziwatchSource => _diziwatchSource;
|
||||
const _diziwatchVersion = "0.0.1";
|
||||
const _diziwatchSourceCodeUrl =
|
||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/tr/diziwatch/diziwatch.dart";
|
||||
Source _diziwatchSource = Source(
|
||||
name: "diziWatch",
|
||||
baseUrl: "https://diziwatch.net",
|
||||
lang: "tr",
|
||||
typeSource: "single",
|
||||
iconUrl:
|
||||
"https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/anime/src/tr/diziwatch/icon.png",
|
||||
sourceCodeUrl: _diziwatchSourceCodeUrl,
|
||||
version: _diziwatchVersion,
|
||||
isManga: false);
|
||||
Reference in New Issue
Block a user