diff --git a/app/lib/config/init.dart b/app/lib/config/init.dart index a08db00e..5e279a56 100644 --- a/app/lib/config/init.dart +++ b/app/lib/config/init.dart @@ -37,7 +37,6 @@ import 'package:localsend_app/rust/frb_generated.dart'; import 'package:localsend_app/util/i18n.dart'; import 'package:localsend_app/util/native/autostart_helper.dart'; import 'package:localsend_app/util/native/cache_helper.dart'; -import 'package:localsend_app/util/native/content_uri_helper.dart'; import 'package:localsend_app/util/native/context_menu_helper.dart'; import 'package:localsend_app/util/native/cross_file_converters.dart'; import 'package:localsend_app/util/native/device_info_helper.dart'; @@ -188,13 +187,7 @@ Future preInit(List args) async { }), ); - await container - .redux(parentIsolateProvider) - .dispatchAsync( - IsolateSetupAction( - uriContentStreamResolver: AndroidUriContentStreamResolver(), - ), - ); + await container.redux(parentIsolateProvider).dispatchAsync(IsolateSetupAction()); return container; } diff --git a/app/lib/isolate/isolate.dart b/app/lib/isolate/isolate.dart index 88555488..3ab3dc33 100644 --- a/app/lib/isolate/isolate.dart +++ b/app/lib/isolate/isolate.dart @@ -14,8 +14,7 @@ export 'package:localsend_app/isolate/src/isolate/child/upload_isolate.dart' HttpUploadFileFailedEvent, HttpUploadFileFinishedEvent, HttpUploadFileProgressEvent, - HttpUploadFileStartedEvent, - UriContentStreamResolver; + HttpUploadFileStartedEvent; export 'package:localsend_app/isolate/src/isolate/parent/actions.dart'; export 'package:localsend_app/isolate/src/isolate/parent/actions_sync.dart'; export 'package:localsend_app/isolate/src/isolate/parent/parent_isolate_provider.dart'; diff --git a/app/lib/isolate/src/isolate/child/upload_isolate.dart b/app/lib/isolate/src/isolate/child/upload_isolate.dart index e6316914..73a4a018 100644 --- a/app/lib/isolate/src/isolate/child/upload_isolate.dart +++ b/app/lib/isolate/src/isolate/child/upload_isolate.dart @@ -1,5 +1,4 @@ -import 'dart:typed_data'; - +import 'package:flutter/services.dart'; import 'package:localsend_app/isolate/isolate.dart'; import 'package:localsend_app/isolate/model/device.dart'; import 'package:localsend_app/isolate/src/isolate/child/main.dart'; @@ -13,14 +12,6 @@ import 'package:typed_isolates/typed_isolates.dart'; sealed class BaseHttpUploadTask {} -class HttpUploadSetContentStreamResolverTask implements BaseHttpUploadTask { - final UriContentStreamResolver resolver; - - HttpUploadSetContentStreamResolverTask({ - required this.resolver, - }); -} - class HttpUploadFile { final String remoteFileToken; final String fileId; @@ -102,15 +93,6 @@ class HttpUploadFileFailedEvent extends HttpUploadEvent { /// Task ID -> CancelToken final _cancelTokenProvider = Provider((ref) => {}); -abstract class UriContentStreamResolver { - /// Separate initialization method to create instance in the child isolate. - /// Cannot reference the RootIsolateToken class because it is not part of Dart. - void init({required Object? rootIsolateToken}); - - /// Resolves the content stream for the given URI. - Stream resolve(Uri uri); -} - Future setupHttpUploadIsolate( Stream>> receiveFromMain, void Function(IsolateTaskStreamResult) sendToMain, @@ -121,15 +103,16 @@ Future setupHttpUploadIsolate( receiveFromMain: receiveFromMain, sendToMain: sendToMain, initialData: initialData, + init: (ref) async { + // Initialize the platform method channel so getFileDescriptorAndroid + // (used to resolve "content://" files) works inside this isolate. + BackgroundIsolateBinaryMessenger.ensureInitialized( + ref.read(syncProvider).rootIsolateToken as RootIsolateToken, + ); + }, handler: (ref, task) async { final HttpUploadFilesTask uploadTask; switch (task.data) { - case HttpUploadSetContentStreamResolverTask task: - final rootIsolateToken = ref.read(syncProvider).rootIsolateToken; - task.resolver.init( - rootIsolateToken: rootIsolateToken, - ); - return; case HttpUploadFilesTask task: uploadTask = task; break; diff --git a/app/lib/isolate/src/isolate/parent/parent_isolate_provider.dart b/app/lib/isolate/src/isolate/parent/parent_isolate_provider.dart index 8633a670..c42e4d3c 100644 --- a/app/lib/isolate/src/isolate/parent/parent_isolate_provider.dart +++ b/app/lib/isolate/src/isolate/parent/parent_isolate_provider.dart @@ -64,13 +64,6 @@ class IsolateController extends ReduxNotifier { /// Starts the required isolates. /// Should be called by the main isolate. class IsolateSetupAction extends AsyncReduxAction { - /// If provided, file paths starting with "content://" will be resolved using this resolver. - final UriContentStreamResolver? uriContentStreamResolver; - - IsolateSetupAction({ - required this.uriContentStreamResolver, - }); - @override Future reduce() async { final httpScanDiscovery = @@ -108,18 +101,6 @@ class IsolateSetupAction extends AsyncReduxAction resolve(Uri uri) { - return _uriContent!.getContentStream(uri); - } -}