mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-05-12 01:00:34 +00:00
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
import 'package:html/parser.dart' show parse;
|
|
import 'package:http_interceptor/http_interceptor.dart';
|
|
import 'package:mangayomi/models/video.dart';
|
|
import 'package:mangayomi/services/http/m_client.dart';
|
|
import 'package:mangayomi/utils/extensions/dom_extensions.dart';
|
|
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
|
import 'package:path/path.dart' as path;
|
|
|
|
class OkruExtractor {
|
|
final InterceptedClient client = MClient.init(
|
|
reqcopyWith: {'useDartHttpClient': true},
|
|
);
|
|
|
|
Future<List<Video>> videosFromUrl(
|
|
String url, {
|
|
String prefix = "",
|
|
bool fixQualities = true,
|
|
}) async {
|
|
final response = await client.get(Uri.parse(url));
|
|
final document = parse(response.body);
|
|
final videoString = document
|
|
.selectFirst('div[data-options]')
|
|
?.attr("data-options");
|
|
|
|
if (videoString == null) {
|
|
return [];
|
|
}
|
|
|
|
if (videoString.contains('ondemandHls')) {
|
|
final playlistUrl = Uri.parse(
|
|
videoString
|
|
.substringAfter("ondemandHls\\\":\\\"")
|
|
.substringBefore("\\\"")
|
|
.replaceAll("\\\\u0026", "&"),
|
|
);
|
|
|
|
final masterPlaylistResponse = await client.get(playlistUrl);
|
|
final masterPlaylist = masterPlaylistResponse.body;
|
|
|
|
const separator = "#EXT-X-STREAM-INF";
|
|
return masterPlaylist.substringAfter(separator).split(separator).map((
|
|
it,
|
|
) {
|
|
final resolution =
|
|
"${it.substringAfter("RESOLUTION=").substringBefore("\n").substringAfter("x").substringBefore(",")}p";
|
|
final m3u8Host =
|
|
"${playlistUrl.scheme}://${playlistUrl.host}${path.dirname(playlistUrl.path)}";
|
|
final videoUrl =
|
|
"$m3u8Host/${it.substringAfter("\n").substringBefore("\n")}";
|
|
return Video(
|
|
videoUrl,
|
|
"${prefix.isNotEmpty ? prefix : ""}Okru:$resolution",
|
|
videoUrl,
|
|
);
|
|
}).toList();
|
|
}
|
|
|
|
return [];
|
|
}
|
|
}
|