mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
+
This commit is contained in:
parent
0fd9936cc9
commit
3fbbf7cf49
21 changed files with 141 additions and 98 deletions
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
|
|
@ -1,7 +1,7 @@
|
|||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: kodjodevf
|
||||
patreon: #
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: #
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import 'package:extended_image/extended_image.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_center.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_paged.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/reader_view.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/widgets/circular_progress_indicator_animate_rotate.dart';
|
||||
import 'package:mangayomi/modules/more/settings/reader/reader_screen.dart';
|
||||
|
|
@ -124,7 +124,7 @@ class _DoubleColummViewState extends State<DoubleColummView>
|
|||
children: [
|
||||
if (widget.datas[0] != null)
|
||||
Flexible(
|
||||
child: ImageViewCenter(
|
||||
child: ImageViewPaged(
|
||||
data: widget.datas[0]!,
|
||||
loadStateChanged: (state) {
|
||||
if (state.extendedImageLoadState ==
|
||||
|
|
@ -202,7 +202,7 @@ class _DoubleColummViewState extends State<DoubleColummView>
|
|||
// if (widget.datas[1] != null) const SizedBox(width: 10),
|
||||
if (widget.datas[1] != null)
|
||||
Flexible(
|
||||
child: ImageViewCenter(
|
||||
child: ImageViewPaged(
|
||||
data: widget.datas[1]!,
|
||||
loadStateChanged: (state) {
|
||||
if (state.extendedImageLoadState ==
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:extended_image/extended_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_center.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_paged.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/reader_view.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/widgets/circular_progress_indicator_animate_rotate.dart';
|
||||
import 'package:mangayomi/modules/more/settings/reader/reader_screen.dart';
|
||||
|
|
@ -35,7 +35,7 @@ class DoubleColummVerticalView extends StatelessWidget {
|
|||
children: [
|
||||
if (datas[0] != null)
|
||||
Flexible(
|
||||
child: ImageViewCenter(
|
||||
child: ImageViewPaged(
|
||||
data: datas[0]!,
|
||||
loadStateChanged: (state) {
|
||||
if (state.extendedImageLoadState == LoadState.loading) {
|
||||
|
|
@ -106,7 +106,7 @@ class DoubleColummVerticalView extends StatelessWidget {
|
|||
// if (datas[1] != null) const SizedBox(width: 10),
|
||||
if (datas[1] != null)
|
||||
Flexible(
|
||||
child: ImageViewCenter(
|
||||
child: ImageViewPaged(
|
||||
data: datas[1]!,
|
||||
loadStateChanged: (state) {
|
||||
if (state.extendedImageLoadState == LoadState.loading) {
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@ import 'package:mangayomi/modules/manga/reader/widgets/color_filter_widget.dart'
|
|||
import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart';
|
||||
import 'package:mangayomi/utils/extensions/others.dart';
|
||||
|
||||
class ImageViewCenter extends ConsumerWidget {
|
||||
class ImageViewPaged extends ConsumerWidget {
|
||||
final UChapDataPreload data;
|
||||
final Function(UChapDataPreload data) onLongPressData;
|
||||
final Widget? Function(ExtendedImageState state) loadStateChanged;
|
||||
final Function(ExtendedImageGestureState state)? onDoubleTap;
|
||||
final GestureConfig Function(ExtendedImageState state)?
|
||||
initGestureConfigHandler;
|
||||
const ImageViewCenter({
|
||||
const ImageViewPaged({
|
||||
super.key,
|
||||
required this.data,
|
||||
required this.onLongPressData,
|
||||
|
|
@ -25,10 +25,6 @@ class ImageViewCenter extends ConsumerWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return _imageView(ref);
|
||||
}
|
||||
|
||||
Widget _imageView(WidgetRef ref) {
|
||||
final scaleType = ref.watch(scaleTypeStateProvider);
|
||||
final image = data.getImageProvider(ref);
|
||||
return GestureDetector(
|
||||
|
|
@ -26,18 +26,11 @@ class ImageViewVertical extends ConsumerWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return _imageView(context, ref);
|
||||
}
|
||||
|
||||
Widget _imageView(BuildContext context, WidgetRef ref) {
|
||||
final image = data.getImageProvider(ref);
|
||||
final scaleType = ref.watch(scaleTypeStateProvider);
|
||||
final l10n = l10nLocalizations(context)!;
|
||||
final imageWidget = ExtendedImage(
|
||||
image: image,
|
||||
image: data.getImageProvider(ref),
|
||||
filterQuality: FilterQuality.medium,
|
||||
handleLoadingProgress: true,
|
||||
fit: getBoxFit(scaleType),
|
||||
fit: getBoxFit(ref.watch(scaleTypeStateProvider)),
|
||||
enableMemoryCache: true,
|
||||
enableLoadState: true,
|
||||
loadStateChanged: (state) {
|
||||
|
|
@ -66,7 +59,7 @@ class ImageViewVertical extends ConsumerWidget {
|
|||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(l10n.image_loading_error,
|
||||
Text(context.l10n.image_loading_error,
|
||||
style: TextStyle(color: Colors.white.withOpacity(0.7))),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
|
|
@ -87,7 +80,7 @@ class ImageViewVertical extends ConsumerWidget {
|
|||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 8, horizontal: 16),
|
||||
child: Text(
|
||||
l10n.retry,
|
||||
context.l10n.retry,
|
||||
),
|
||||
),
|
||||
)),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/reader_view.dart';
|
||||
import 'package:mangayomi/src/rust/api/imagecrop.dart';
|
||||
import 'package:mangayomi/src/rust/api/image.dart';
|
||||
import 'package:mangayomi/utils/extensions/others.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'crop_borders_provider.g.dart';
|
||||
|
|
@ -18,7 +18,7 @@ Future<Uint8List?> cropBorders(CropBordersRef ref,
|
|||
return null;
|
||||
}
|
||||
|
||||
return await startCropping(image: imageBytes);
|
||||
return processCropImage(image: imageBytes);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
|
|||
import 'package:mangayomi/utils/extensions/others.dart';
|
||||
import 'package:mangayomi/utils/global_style.dart';
|
||||
import 'package:mangayomi/utils/headers.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_center.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_paged.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/image_view_vertical.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/providers/reader_controller_provider.dart';
|
||||
import 'package:mangayomi/modules/manga/reader/widgets/circular_progress_indicator_animate_rotate.dart';
|
||||
|
|
@ -653,7 +653,7 @@ class _MangaChapterPageGalleryState
|
|||
},
|
||||
itemBuilder:
|
||||
(BuildContext context, int index) {
|
||||
return ImageViewCenter(
|
||||
return ImageViewPaged(
|
||||
data: _uChapDataPreload[index],
|
||||
loadStateChanged: (state) {
|
||||
if (state.extendedImageLoadState ==
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ class _ChapterListWidgetState extends State<ChapterListWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scrollbar(
|
||||
interactive: true,
|
||||
interactive: true,
|
||||
thickness: 12,
|
||||
radius: const Radius.circular(10),
|
||||
controller: controller,
|
||||
|
|
@ -111,8 +111,10 @@ class _ChapterListTileState extends State<ChapterListTile> {
|
|||
selectedColor:
|
||||
chapter.isRead! ? Colors.white.withOpacity(0.3) : Colors.white,
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
pushReplacementMangaReaderView(context: context, chapter: chapter);
|
||||
if (!widget.currentChap) {
|
||||
Navigator.pop(context);
|
||||
pushReplacementMangaReaderView(context: context, chapter: chapter);
|
||||
}
|
||||
},
|
||||
title: Text(
|
||||
chapter.name!,
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import
|
||||
|
||||
import '../frb_generated.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
|
||||
|
||||
// The functions `crop_image` are not `pub`, thus are ignored.
|
||||
// These functions are ignored because they are not marked as `pub`: `crop_image`
|
||||
|
||||
Future<Uint8List> startCropping({required List<int> image}) =>
|
||||
RustLib.instance.api.crateApiImagecropStartCropping(image: image);
|
||||
Uint8List processCropImage({required List<int> image}) =>
|
||||
RustLib.instance.api.crateApiImageProcessCropImage(image: image);
|
||||
|
|
@ -1,11 +1,12 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
|
||||
|
||||
import 'api/imagecrop.dart';
|
||||
import 'api/image.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'frb_generated.dart';
|
||||
import 'frb_generated.io.dart' if (dart.library.html) 'frb_generated.web.dart';
|
||||
import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart';
|
||||
|
||||
|
|
@ -51,10 +52,10 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
|
|||
kDefaultExternalLibraryLoaderConfig;
|
||||
|
||||
@override
|
||||
String get codegenVersion => '2.0.0-dev.37';
|
||||
String get codegenVersion => '2.0.0-dev.39';
|
||||
|
||||
@override
|
||||
int get rustContentHash => -560186126;
|
||||
int get rustContentHash => -287789500;
|
||||
|
||||
static const kDefaultExternalLibraryLoaderConfig =
|
||||
ExternalLibraryLoaderConfig(
|
||||
|
|
@ -65,7 +66,7 @@ class RustLib extends BaseEntrypoint<RustLibApi, RustLibApiImpl, RustLibWire> {
|
|||
}
|
||||
|
||||
abstract class RustLibApi extends BaseApi {
|
||||
Future<Uint8List> crateApiImagecropStartCropping({required List<int> image});
|
||||
Uint8List crateApiImageProcessCropImage({required List<int> image});
|
||||
}
|
||||
|
||||
class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
|
||||
|
|
@ -77,27 +78,26 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
|
|||
});
|
||||
|
||||
@override
|
||||
Future<Uint8List> crateApiImagecropStartCropping({required List<int> image}) {
|
||||
return handler.executeNormal(NormalTask(
|
||||
callFfi: (port_) {
|
||||
Uint8List crateApiImageProcessCropImage({required List<int> image}) {
|
||||
return handler.executeSync(SyncTask(
|
||||
callFfi: () {
|
||||
final serializer = SseSerializer(generalizedFrbRustBinding);
|
||||
sse_encode_list_prim_u_8_loose(image, serializer);
|
||||
pdeCallFfi(generalizedFrbRustBinding, serializer,
|
||||
funcId: 1, port: port_);
|
||||
return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 1)!;
|
||||
},
|
||||
codec: SseCodec(
|
||||
decodeSuccessData: sse_decode_list_prim_u_8_strict,
|
||||
decodeErrorData: null,
|
||||
),
|
||||
constMeta: kCrateApiImagecropStartCroppingConstMeta,
|
||||
constMeta: kCrateApiImageProcessCropImageConstMeta,
|
||||
argValues: [image],
|
||||
apiImpl: this,
|
||||
));
|
||||
}
|
||||
|
||||
TaskConstMeta get kCrateApiImagecropStartCroppingConstMeta =>
|
||||
TaskConstMeta get kCrateApiImageProcessCropImageConstMeta =>
|
||||
const TaskConstMeta(
|
||||
debugName: "start_cropping",
|
||||
debugName: "process_crop_image",
|
||||
argNames: ["image"],
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
|
||||
|
||||
import 'api/imagecrop.dart';
|
||||
import 'api/image.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi' as ffi;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
// ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field
|
||||
|
||||
// Static analysis wrongly picks the IO variant, thus ignore this
|
||||
// ignore_for_file: argument_type_not_assignable
|
||||
|
||||
import 'api/imagecrop.dart';
|
||||
import 'api/image.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'frb_generated.dart';
|
||||
|
|
@ -81,10 +81,4 @@ external RustLibWasmModule get wasmModule;
|
|||
|
||||
@JS()
|
||||
@anonymous
|
||||
class RustLibWasmModule implements WasmModule {
|
||||
@override
|
||||
external Object /* Promise */ call([String? moduleName]);
|
||||
|
||||
@override
|
||||
external RustLibWasmModule bind(dynamic thisArg, String moduleName);
|
||||
}
|
||||
extension type RustLibWasmModule._(JSObject _) implements JSObject {}
|
||||
|
|
|
|||
|
|
@ -528,10 +528,10 @@ packages:
|
|||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_rust_bridge
|
||||
sha256: d8a8419099180408b224235e2e2aa386b67ebfd59cc65610d618bb06fb640954
|
||||
sha256: ee0d9798156ba523ca24bfb690efd15614f823685df270447c480dd5923d9a0b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.0-dev.37"
|
||||
version: "2.0.0-dev.39"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ dependencies:
|
|||
highlight: ^0.7.0
|
||||
json_view: ^0.4.2
|
||||
super_sliver_list: ^0.4.1
|
||||
flutter_rust_bridge: ^2.0.0-dev.37
|
||||
flutter_rust_bridge: ^2.0.0-dev.39
|
||||
rust_lib_mangayomi:
|
||||
path: rust_builder
|
||||
|
||||
|
|
@ -88,6 +88,7 @@ dependency_overrides:
|
|||
ffi: ^2.1.2
|
||||
flex_seed_scheme: ^2.0.0
|
||||
analyzer: ">=5.2.0 <7.0.0"
|
||||
html: ^0.15.4
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
|
|||
75
rust/Cargo.lock
generated
75
rust/Cargo.lock
generated
|
|
@ -34,9 +34,9 @@ checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1"
|
|||
|
||||
[[package]]
|
||||
name = "allo-isolate"
|
||||
version = "0.1.24"
|
||||
version = "0.1.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2f5a5fd28223e6f3cafb7d9cd685f51eafdd71d33ca1229f8316925d5957240"
|
||||
checksum = "97b6d794345b06592d0ebeed8e477e41b71e5a0a49df4fc0e4184d5938b99509"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"atomic",
|
||||
|
|
@ -158,6 +158,15 @@ version = "2.3.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e"
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "build-target"
|
||||
version = "0.4.0"
|
||||
|
|
@ -276,6 +285,16 @@ version = "0.2.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dart-sys-fork"
|
||||
version = "4.1.1"
|
||||
|
|
@ -306,6 +325,16 @@ dependencies = [
|
|||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
||||
dependencies = [
|
||||
"block-buffer",
|
||||
"crypto-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.12.0"
|
||||
|
|
@ -374,9 +403,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "flutter_rust_bridge"
|
||||
version = "2.0.0-dev.37"
|
||||
version = "2.0.0-dev.39"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7bc10f01bad9c10018ecd7c998b35d37e6856ffc62b735ef796c617e2006bf00"
|
||||
checksum = "92c9a3d358c2df51ac5ab05440334a63d7e2ce3229ca05d285769498bfe7fb8d"
|
||||
dependencies = [
|
||||
"allo-isolate",
|
||||
"android_logger",
|
||||
|
|
@ -401,11 +430,13 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "flutter_rust_bridge_macros"
|
||||
version = "2.0.0-dev.37"
|
||||
version = "2.0.0-dev.39"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "728da530efd18249b5adda2b932a69f92c1d861c18d93dd8b6b9d6df0a2a7d27"
|
||||
checksum = "7c73c8b391f3c0aed00493871aee6541c03d117d553fa5c121f126dfbbad5157"
|
||||
dependencies = [
|
||||
"hex",
|
||||
"md-5",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
|
@ -499,6 +530,16 @@ dependencies = [
|
|||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.14"
|
||||
|
|
@ -717,6 +758,16 @@ dependencies = [
|
|||
"rayon",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "md-5"
|
||||
version = "0.10.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.6.4"
|
||||
|
|
@ -1283,6 +1334,12 @@ dependencies = [
|
|||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.12"
|
||||
|
|
@ -1306,6 +1363,12 @@ version = "0.2.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@ edition = "2021"
|
|||
crate-type = ["cdylib", "staticlib"]
|
||||
|
||||
[dependencies]
|
||||
flutter_rust_bridge = "=2.0.0-dev.37"
|
||||
flutter_rust_bridge = "=2.0.0-dev.39"
|
||||
image = "0.25.0"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
use flutter_rust_bridge::frb;
|
||||
use image::{DynamicImage, GenericImageView, Pixel};
|
||||
use std::io::Cursor;
|
||||
|
||||
|
|
@ -56,12 +57,11 @@ fn crop_image(image: Vec<u8>) -> DynamicImage {
|
|||
return decoded_image;
|
||||
}
|
||||
|
||||
let cropped_image = decoded_image.crop(left, top, right - left + 1, bottom - top + 1);
|
||||
|
||||
return cropped_image;
|
||||
return decoded_image.crop(left, top, right - left + 1, bottom - top + 1);
|
||||
}
|
||||
|
||||
pub async fn start_cropping(image: Vec<u8>) -> Vec<u8> {
|
||||
#[frb(sync)]
|
||||
pub fn process_crop_image(image: Vec<u8>) -> Vec<u8> {
|
||||
let res = crop_image(image);
|
||||
let mut image_data: Vec<u8> = Vec::new();
|
||||
res.write_to(&mut Cursor::new(&mut image_data), image::ImageFormat::Png)
|
||||
|
|
@ -2,4 +2,4 @@
|
|||
// Do not put code in `mod.rs`, but put in e.g. `simple.rs`.
|
||||
//
|
||||
|
||||
pub mod imagecrop;
|
||||
pub mod image;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
// Section: imports
|
||||
|
||||
use super::*;
|
||||
use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
||||
use flutter_rust_bridge::for_generated::transform_result_dco;
|
||||
use flutter_rust_bridge::for_generated::{transform_result_dco, Lockable};
|
||||
use flutter_rust_bridge::{Handler, IntoIntoDart};
|
||||
|
||||
// Section: boilerplate
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
#![allow(
|
||||
non_camel_case_types,
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
// Section: imports
|
||||
|
||||
use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
||||
use flutter_rust_bridge::for_generated::transform_result_dco;
|
||||
use flutter_rust_bridge::for_generated::{transform_result_dco, Lockable};
|
||||
use flutter_rust_bridge::{Handler, IntoIntoDart};
|
||||
|
||||
// Section: boilerplate
|
||||
|
|
@ -32,8 +32,8 @@ flutter_rust_bridge::frb_generated_boilerplate!(
|
|||
default_rust_opaque = RustOpaqueMoi,
|
||||
default_rust_auto_opaque = RustAutoOpaqueMoi,
|
||||
);
|
||||
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.0.0-dev.37";
|
||||
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -560186126;
|
||||
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.0.0-dev.39";
|
||||
pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -287789500;
|
||||
|
||||
// Section: executor
|
||||
|
||||
|
|
@ -41,17 +41,16 @@ flutter_rust_bridge::frb_generated_default_handler!();
|
|||
|
||||
// Section: wire_funcs
|
||||
|
||||
fn wire__crate__api__imagecrop__start_cropping_impl(
|
||||
port_: flutter_rust_bridge::for_generated::MessagePort,
|
||||
fn wire__crate__api__image__process_crop_image_impl(
|
||||
ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr,
|
||||
rust_vec_len_: i32,
|
||||
data_len_: i32,
|
||||
) {
|
||||
FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::<flutter_rust_bridge::for_generated::SseCodec, _, _, _>(
|
||||
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
|
||||
FLUTTER_RUST_BRIDGE_HANDLER.wrap_sync::<flutter_rust_bridge::for_generated::SseCodec, _>(
|
||||
flutter_rust_bridge::for_generated::TaskInfo {
|
||||
debug_name: "start_cropping",
|
||||
port: Some(port_),
|
||||
mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal,
|
||||
debug_name: "process_crop_image",
|
||||
port: None,
|
||||
mode: flutter_rust_bridge::for_generated::FfiCallMode::Sync,
|
||||
},
|
||||
move || {
|
||||
let message = unsafe {
|
||||
|
|
@ -65,14 +64,9 @@ fn wire__crate__api__imagecrop__start_cropping_impl(
|
|||
flutter_rust_bridge::for_generated::SseDeserializer::new(message);
|
||||
let api_image = <Vec<u8>>::sse_decode(&mut deserializer);
|
||||
deserializer.end();
|
||||
move |context| async move {
|
||||
transform_result_sse(
|
||||
(move || async move {
|
||||
Result::<_, ()>::Ok(crate::api::imagecrop::start_cropping(api_image).await)
|
||||
})()
|
||||
.await,
|
||||
)
|
||||
}
|
||||
transform_result_sse((move || {
|
||||
Result::<_, ()>::Ok(crate::api::image::process_crop_image(api_image))
|
||||
})())
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
@ -126,7 +120,6 @@ fn pde_ffi_dispatcher_primary_impl(
|
|||
) {
|
||||
// Codec=Pde (Serialization + dispatch), see doc to use other codecs
|
||||
match func_id {
|
||||
1 => wire__crate__api__imagecrop__start_cropping_impl(port, ptr, rust_vec_len, data_len),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
|
@ -139,6 +132,7 @@ fn pde_ffi_dispatcher_sync_impl(
|
|||
) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse {
|
||||
// Codec=Pde (Serialization + dispatch), see doc to use other codecs
|
||||
match func_id {
|
||||
1 => wire__crate__api__image__process_crop_image_impl(ptr, rust_vec_len, data_len),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
// This file is automatically generated, so please do not edit it.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.37.
|
||||
// Generated by `flutter_rust_bridge`@ 2.0.0-dev.39.
|
||||
|
||||
// Section: imports
|
||||
|
||||
use super::*;
|
||||
use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt};
|
||||
use flutter_rust_bridge::for_generated::transform_result_dco;
|
||||
use flutter_rust_bridge::for_generated::wasm_bindgen;
|
||||
use flutter_rust_bridge::for_generated::wasm_bindgen::prelude::*;
|
||||
use flutter_rust_bridge::for_generated::{transform_result_dco, Lockable};
|
||||
use flutter_rust_bridge::{Handler, IntoIntoDart};
|
||||
|
||||
// Section: boilerplate
|
||||
|
|
|
|||
Loading…
Reference in a new issue