mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-01-11 22:40:36 +00:00
79 lines
2.9 KiB
Dart
79 lines
2.9 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
import 'dart:typed_data';
|
|
import 'dart:ui';
|
|
import 'package:extended_image/extended_image.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:mangayomi/modules/manga/reader/reader_view.dart';
|
|
import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart';
|
|
import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart';
|
|
import 'package:mangayomi/utils/headers.dart';
|
|
import 'package:mangayomi/utils/reg_exp_matcher.dart';
|
|
|
|
extension LetExtension<T> on T {
|
|
R let<R>(R Function(T) block) {
|
|
return block(this);
|
|
}
|
|
}
|
|
|
|
extension ImageProviderExtension on ImageProvider {
|
|
Future<Uint8List?> getBytes(BuildContext context,
|
|
{ImageByteFormat format = ImageByteFormat.png}) async {
|
|
final imageStream = resolve(createLocalImageConfiguration(context));
|
|
final Completer<Uint8List?> completer = Completer<Uint8List?>();
|
|
final ImageStreamListener listener = ImageStreamListener(
|
|
(imageInfo, synchronousCall) async {
|
|
final bytes = await imageInfo.image.toByteData(format: format);
|
|
if (!completer.isCompleted) {
|
|
completer.complete(bytes?.buffer.asUint8List());
|
|
}
|
|
},
|
|
);
|
|
imageStream.addListener(listener);
|
|
final imageBytes = await completer.future;
|
|
imageStream.removeListener(listener);
|
|
return imageBytes;
|
|
}
|
|
}
|
|
|
|
extension UChapDataPreloadExtensions on UChapDataPreload {
|
|
Future<Uint8List?> get getImageBytes async {
|
|
Uint8List? imageBytes;
|
|
if (archiveImage != null) {
|
|
imageBytes = archiveImage;
|
|
} else if (isLocale!) {
|
|
imageBytes = File('${directory!.path}${padIndex(index! + 1)}.jpg')
|
|
.readAsBytesSync();
|
|
} else {
|
|
File? cachedImage;
|
|
if (url != null) {
|
|
cachedImage = await getCachedImageFile(url!);
|
|
}
|
|
imageBytes = cachedImage?.readAsBytesSync();
|
|
}
|
|
return imageBytes;
|
|
}
|
|
|
|
ImageProvider<Object> getImageProvider(WidgetRef ref) {
|
|
final data = this;
|
|
final isLocale = data.isLocale!;
|
|
final archiveImage = data.archiveImage;
|
|
final cropBorders = ref.watch(cropBordersStateProvider);
|
|
return cropBorders && data.cropImage != null
|
|
? ExtendedMemoryImageProvider(data.cropImage!)
|
|
: (isLocale
|
|
? archiveImage != null
|
|
? ExtendedMemoryImageProvider(archiveImage)
|
|
: ExtendedFileImageProvider(File(
|
|
'${data.directory!.path}${padIndex(data.index! + 1)}.jpg'))
|
|
: CustomExtendedNetworkImageProvider(
|
|
data.url!.trim().trimLeft().trimRight(),
|
|
cache: true,
|
|
cacheMaxAge: const Duration(days: 7),
|
|
headers: ref.watch(headersProvider(
|
|
source: data.chapter!.manga.value!.source!,
|
|
lang: data.chapter!.manga.value!
|
|
.lang!)))) as ImageProvider<Object>;
|
|
}
|
|
}
|