mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-11-04 03:54:44 +00:00 
			
		
		
		
	* fix: reset server url when using appflowy cloud the first time * refactor: set authenticator in frontend * chore: log version * chore: show hint when changing the server type * chore: bump version * chore: fix test * chore: bump collab
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'dart:convert';
 | 
						|
import 'dart:io';
 | 
						|
 | 
						|
import 'package:appflowy/env/backend_env.dart';
 | 
						|
import 'package:appflowy/env/cloud_env.dart';
 | 
						|
import 'package:appflowy/user/application/auth/device_id.dart';
 | 
						|
import 'package:appflowy_backend/appflowy_backend.dart';
 | 
						|
import 'package:path_provider/path_provider.dart';
 | 
						|
import 'package:path/path.dart' as path;
 | 
						|
 | 
						|
import '../startup.dart';
 | 
						|
 | 
						|
class InitRustSDKTask extends LaunchTask {
 | 
						|
  const InitRustSDKTask({
 | 
						|
    this.customApplicationPath,
 | 
						|
  });
 | 
						|
 | 
						|
  // Customize the RustSDK initialization path
 | 
						|
  final Directory? customApplicationPath;
 | 
						|
 | 
						|
  @override
 | 
						|
  LaunchTaskType get type => LaunchTaskType.dataProcessing;
 | 
						|
 | 
						|
  @override
 | 
						|
  Future<void> initialize(LaunchContext context) async {
 | 
						|
    final root = await getApplicationSupportDirectory();
 | 
						|
    final applicationPath = await appFlowyApplicationDataDirectory();
 | 
						|
    final dir = customApplicationPath ?? applicationPath;
 | 
						|
    final deviceId = await getDeviceId();
 | 
						|
 | 
						|
    // Pass the environment variables to the Rust SDK
 | 
						|
    final env = _makeAppFlowyConfiguration(
 | 
						|
      root.path,
 | 
						|
      context.config.version,
 | 
						|
      dir.path,
 | 
						|
      applicationPath.path,
 | 
						|
      deviceId,
 | 
						|
      rustEnvs: context.config.rustEnvs,
 | 
						|
    );
 | 
						|
    await context.getIt<FlowySDK>().init(jsonEncode(env.toJson()));
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Future<void> dispose() async {}
 | 
						|
}
 | 
						|
 | 
						|
AppFlowyConfiguration _makeAppFlowyConfiguration(
 | 
						|
  String root,
 | 
						|
  String appVersion,
 | 
						|
  String customAppPath,
 | 
						|
  String originAppPath,
 | 
						|
  String deviceId, {
 | 
						|
  required Map<String, String> rustEnvs,
 | 
						|
}) {
 | 
						|
  final env = getIt<AppFlowyCloudSharedEnv>();
 | 
						|
  return AppFlowyConfiguration(
 | 
						|
    root: root,
 | 
						|
    app_version: appVersion,
 | 
						|
    custom_app_path: customAppPath,
 | 
						|
    origin_app_path: originAppPath,
 | 
						|
    device_id: deviceId,
 | 
						|
    authenticator_type: env.authenticatorType.value,
 | 
						|
    supabase_config: env.supabaseConfig,
 | 
						|
    appflowy_cloud_config: env.appflowyCloudConfig,
 | 
						|
    envs: rustEnvs,
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
/// The default directory to store the user data. The directory can be
 | 
						|
/// customized by the user via the [ApplicationDataStorage]
 | 
						|
Future<Directory> appFlowyApplicationDataDirectory() async {
 | 
						|
  switch (integrationMode()) {
 | 
						|
    case IntegrationMode.develop:
 | 
						|
      final Directory documentsDir = await getApplicationSupportDirectory()
 | 
						|
          .then((directory) => directory.create());
 | 
						|
      return Directory(path.join(documentsDir.path, 'data_dev')).create();
 | 
						|
    case IntegrationMode.release:
 | 
						|
      final Directory documentsDir = await getApplicationSupportDirectory();
 | 
						|
      return Directory(path.join(documentsDir.path, 'data')).create();
 | 
						|
    case IntegrationMode.unitTest:
 | 
						|
    case IntegrationMode.integrationTest:
 | 
						|
      return Directory(path.join(Directory.current.path, '.sandbox'));
 | 
						|
  }
 | 
						|
}
 |