mirror of
https://github.com/kodjodevf/mangayomi-extensions.git
synced 2026-02-14 02:41:39 +00:00
@@ -24,6 +24,7 @@ import 'src/id/otakudesu/source.dart';
|
|||||||
import 'src/it/animesaturn/source.dart';
|
import 'src/it/animesaturn/source.dart';
|
||||||
import 'src/pt/animesvision/source.dart';
|
import 'src/pt/animesvision/source.dart';
|
||||||
import 'src/sq/filma24/source.dart';
|
import 'src/sq/filma24/source.dart';
|
||||||
|
import 'src/tr/diziwatch/source.dart';
|
||||||
|
|
||||||
List<Source> dartAnimesourceList = [
|
List<Source> dartAnimesourceList = [
|
||||||
gogoanimeSource,
|
gogoanimeSource,
|
||||||
@@ -50,5 +51,6 @@ List<Source> dartAnimesourceList = [
|
|||||||
nyaaSource,
|
nyaaSource,
|
||||||
animepaheSource,
|
animepaheSource,
|
||||||
animetoast,
|
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.reversed.toList();
|
||||||
|
|
||||||
|
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