diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd8282187..2989051df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,10 +78,18 @@ jobs: shell: bash run: | case ${{ matrix.job.target }} in - x86_64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake ;; + x86_64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake libclang-dev;; # arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; # aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; esac + + - name: Install flutter + uses: subosito/flutter-action@v2 + with: + channel: 'stable' + - name: Install flutter rust bridge deps + run: | + dart pub global activate ffigen - name: Restore from cache and install vcpkg uses: lukka/run-vcpkg@v7 diff --git a/build.rs b/build.rs index 0f734715a..aaf0858c1 100644 --- a/build.rs +++ b/build.rs @@ -82,11 +82,11 @@ fn main() { hbb_common::gen_version(); install_oboe(); // there is problem with cfg(target_os) in build.rs, so use our workaround - let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); - if target_os == "android" || target_os == "ios" { + // let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); + // if target_os == "android" || target_os == "ios" { gen_flutter_rust_bridge(); - return; - } + // return; + // } #[cfg(all(windows, feature = "inline"))] build_manifest(); #[cfg(windows)] diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart new file mode 100644 index 000000000..9ed485df8 --- /dev/null +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/models/model.dart'; +import 'package:provider/provider.dart'; + +class DesktopHomePage extends StatefulWidget { + DesktopHomePage({Key? key}) : super(key: key); + + @override + State createState() => _DesktopHomePageState(); +} + +class _DesktopHomePageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + child: Row( + children: [ + Flexible( + child: buildServerInfo(context), + flex: 1, + ), + Flexible( + child: buildServerBoard(context), + flex: 4, + ), + ], + ), + ), + ); + } + + buildServerInfo(BuildContext context) { + return ChangeNotifierProvider.value( + value: FFI.serverModel, + child: Column( + children: [buildIDBoard(context)], + ), + ); + } + + buildServerBoard(BuildContext context) { + return Center( + child: Text("waiting implementation"), + ); + } + + buildIDBoard(BuildContext context) { + final model = FFI.serverModel; + return Card( + elevation: 0.5, + child: Container( + margin: EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.baseline, + textBaseline: TextBaseline.alphabetic, + children: [ + Container( + width: 4, + height: 70, + decoration: BoxDecoration(color: MyTheme.accent), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + translate("ID"), + style: + TextStyle(fontSize: 18, fontWeight: FontWeight.w500), + ), + TextFormField( + controller: model.serverId, + ), + ], + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 63a1c405b..f69ab6465 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -1,16 +1,13 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; -import 'package:flutter_hbb/pages/desktop_home_page.dart'; +import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:provider/provider.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:firebase_core/firebase_core.dart'; + import 'common.dart'; +import 'mobile/pages/home_page.dart'; +import 'mobile/pages/server_page.dart'; +import 'mobile/pages/settings_page.dart'; import 'models/model.dart'; -import 'pages/home_page.dart'; -import 'pages/server_page.dart'; -import 'pages/settings_page.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -20,6 +17,10 @@ Future main() async { toAndroidChannelInit(); } refreshCurrentUser(); + if (isDesktop) { + print("desktop mode: starting service"); + FFI.serverModel.startService(); + } runApp(App()); } diff --git a/flutter/lib/pages/chat_page.dart b/flutter/lib/mobile/pages/chat_page.dart similarity index 98% rename from flutter/lib/pages/chat_page.dart rename to flutter/lib/mobile/pages/chat_page.dart index af940a29e..a4cf83ab8 100644 --- a/flutter/lib/pages/chat_page.dart +++ b/flutter/lib/mobile/pages/chat_page.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/models/chat_model.dart'; import 'package:provider/provider.dart'; -import '../models/model.dart'; +import '../../models/model.dart'; import 'home_page.dart'; ChatPage chatPage = ChatPage(); diff --git a/flutter/lib/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart similarity index 98% rename from flutter/lib/pages/connection_page.dart rename to flutter/lib/mobile/pages/connection_page.dart index 1b5268586..8067ca146 100644 --- a/flutter/lib/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:flutter_hbb/pages/file_manager_page.dart'; +import 'package:flutter_hbb/mobile/pages/file_manager_page.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'dart:async'; -import '../common.dart'; -import '../models/model.dart'; +import '../../common.dart'; +import '../../models/model.dart'; import 'home_page.dart'; import 'remote_page.dart'; import 'settings_page.dart'; diff --git a/flutter/lib/pages/file_manager_page.dart b/flutter/lib/mobile/pages/file_manager_page.dart similarity index 99% rename from flutter/lib/pages/file_manager_page.dart rename to flutter/lib/mobile/pages/file_manager_page.dart index 2cb980f44..0370bedff 100644 --- a/flutter/lib/pages/file_manager_page.dart +++ b/flutter/lib/mobile/pages/file_manager_page.dart @@ -7,8 +7,8 @@ import 'package:flutter_breadcrumb/flutter_breadcrumb.dart'; import 'package:wakelock/wakelock.dart'; import 'package:toggle_switch/toggle_switch.dart'; -import '../common.dart'; -import '../models/model.dart'; +import '../../common.dart'; +import '../../models/model.dart'; import '../widgets/dialog.dart'; class FileManagerPage extends StatefulWidget { diff --git a/flutter/lib/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart similarity index 92% rename from flutter/lib/pages/home_page.dart rename to flutter/lib/mobile/pages/home_page.dart index 371aa3f64..756df7f91 100644 --- a/flutter/lib/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter_hbb/pages/chat_page.dart'; -import 'package:flutter_hbb/pages/server_page.dart'; -import 'package:flutter_hbb/pages/settings_page.dart'; -import '../common.dart'; +import 'package:flutter_hbb/mobile/pages/chat_page.dart'; +import 'package:flutter_hbb/mobile/pages/server_page.dart'; +import 'package:flutter_hbb/mobile/pages/settings_page.dart'; +import '../../common.dart'; import '../widgets/overlay.dart'; import 'connection_page.dart'; diff --git a/flutter/lib/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart similarity index 99% rename from flutter/lib/pages/remote_page.dart rename to flutter/lib/mobile/pages/remote_page.dart index 1d8c02709..bf6220998 100644 --- a/flutter/lib/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -1,16 +1,16 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/models/chat_model.dart'; -import 'package:flutter_hbb/widgets/gesture_help.dart'; +import 'package:flutter_hbb/mobile/widgets/gesture_help.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:provider/provider.dart'; import 'package:flutter/services.dart'; import 'dart:ui' as ui; import 'dart:async'; import 'package:wakelock/wakelock.dart'; -import '../common.dart'; +import '../../common.dart'; import '../widgets/gestures.dart'; -import '../models/model.dart'; +import '../../models/model.dart'; import '../widgets/dialog.dart'; import '../widgets/overlay.dart'; diff --git a/flutter/lib/pages/scan_page.dart b/flutter/lib/mobile/pages/scan_page.dart similarity index 99% rename from flutter/lib/pages/scan_page.dart rename to flutter/lib/mobile/pages/scan_page.dart index 0bc6dfb21..a7d01f0b8 100644 --- a/flutter/lib/pages/scan_page.dart +++ b/flutter/lib/mobile/pages/scan_page.dart @@ -6,8 +6,8 @@ import 'package:zxing2/qrcode.dart'; import 'dart:io'; import 'dart:async'; import 'dart:convert'; -import '../common.dart'; -import '../models/model.dart'; +import '../../common.dart'; +import '../../models/model.dart'; class ScanPage extends StatefulWidget { @override diff --git a/flutter/lib/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart similarity index 99% rename from flutter/lib/pages/server_page.dart rename to flutter/lib/mobile/pages/server_page.dart index 9377f495d..9caa327ea 100644 --- a/flutter/lib/pages/server_page.dart +++ b/flutter/lib/mobile/pages/server_page.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/models/model.dart'; -import 'package:flutter_hbb/widgets/dialog.dart'; +import 'package:flutter_hbb/mobile/widgets/dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:provider/provider.dart'; -import '../common.dart'; -import '../models/server_model.dart'; +import '../../common.dart'; +import '../../models/server_model.dart'; import 'home_page.dart'; -import '../models/model.dart'; +import '../../models/model.dart'; class ServerPage extends StatelessWidget implements PageShape { @override diff --git a/flutter/lib/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart similarity index 99% rename from flutter/lib/pages/settings_page.dart rename to flutter/lib/mobile/pages/settings_page.dart index 90ff0d564..a1225ae85 100644 --- a/flutter/lib/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -4,9 +4,9 @@ import 'package:url_launcher/url_launcher.dart'; import 'package:provider/provider.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; -import '../common.dart'; +import '../../common.dart'; import '../widgets/dialog.dart'; -import '../models/model.dart'; +import '../../models/model.dart'; import 'home_page.dart'; import 'scan_page.dart'; diff --git a/flutter/lib/widgets/dialog.dart b/flutter/lib/mobile/widgets/dialog.dart similarity index 99% rename from flutter/lib/widgets/dialog.dart rename to flutter/lib/mobile/widgets/dialog.dart index 7781cfe40..57d44e2aa 100644 --- a/flutter/lib/widgets/dialog.dart +++ b/flutter/lib/mobile/widgets/dialog.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; -import '../common.dart'; -import '../models/model.dart'; +import '../../common.dart'; +import '../../models/model.dart'; void clientClose() { msgBox('', 'Close', 'Are you sure to close the connection?'); diff --git a/flutter/lib/widgets/gesture_help.dart b/flutter/lib/mobile/widgets/gesture_help.dart similarity index 99% rename from flutter/lib/widgets/gesture_help.dart rename to flutter/lib/mobile/widgets/gesture_help.dart index e907890b0..37cc77c8f 100644 --- a/flutter/lib/widgets/gesture_help.dart +++ b/flutter/lib/mobile/widgets/gesture_help.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:toggle_switch/toggle_switch.dart'; -import '../models/model.dart'; +import '../../models/model.dart'; class GestureIcons { static const String _family = 'gestureicons'; diff --git a/flutter/lib/widgets/gestures.dart b/flutter/lib/mobile/widgets/gestures.dart similarity index 100% rename from flutter/lib/widgets/gestures.dart rename to flutter/lib/mobile/widgets/gestures.dart diff --git a/flutter/lib/widgets/overlay.dart b/flutter/lib/mobile/widgets/overlay.dart similarity index 99% rename from flutter/lib/widgets/overlay.dart rename to flutter/lib/mobile/widgets/overlay.dart index a90492f51..b2176ef0a 100644 --- a/flutter/lib/widgets/overlay.dart +++ b/flutter/lib/mobile/widgets/overlay.dart @@ -2,7 +2,7 @@ import 'package:draggable_float_widget/draggable_float_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; -import '../models/model.dart'; +import '../../models/model.dart'; import '../pages/chat_page.dart'; OverlayEntry? chatIconOverlayEntry; diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index eaf8d2243..efef5f1e4 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -3,7 +3,7 @@ import 'dart:convert'; import 'package:dash_chat/dash_chat.dart'; import 'package:flutter/material.dart'; -import '../widgets/overlay.dart'; +import '../../mobile/widgets/overlay.dart'; import 'model.dart'; class MessageBody { diff --git a/flutter/lib/models/file_model.dart b/flutter/lib/models/file_model.dart index 49184cf5b..2122b146f 100644 --- a/flutter/lib/models/file_model.dart +++ b/flutter/lib/models/file_model.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'dart:convert'; import 'package:flutter_hbb/common.dart'; -import 'package:flutter_hbb/pages/file_manager_page.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_hbb/mobile/pages/file_manager_page.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:path/path.dart' as Path; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 72c960be7..aef7a535d 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -12,8 +12,8 @@ import 'package:flutter/material.dart'; import 'package:tuple/tuple.dart'; import 'dart:async'; import '../common.dart'; -import '../widgets/dialog.dart'; -import '../widgets/overlay.dart'; +import '../mobile/widgets/dialog.dart'; +import '../mobile/widgets/overlay.dart'; import 'native_model.dart' if (dart.library.html) 'web_model.dart'; typedef HandleMsgBox = void Function(Map evt, String id); diff --git a/flutter/lib/models/native_model.dart b/flutter/lib/models/native_model.dart index ffbe7a2f3..21ecd37e3 100644 --- a/flutter/lib/models/native_model.dart +++ b/flutter/lib/models/native_model.dart @@ -1,15 +1,17 @@ import 'dart:convert'; +import 'dart:ffi'; import 'dart:io'; import 'dart:typed_data'; -import 'dart:ffi'; -import 'package:ffi/ffi.dart'; -import 'package:path_provider/path_provider.dart'; + import 'package:device_info/device_info.dart'; -import 'package:package_info/package_info.dart'; import 'package:external_path/external_path.dart'; +import 'package:ffi/ffi.dart'; import 'package:flutter/services.dart'; -import '../generated_bridge.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:path_provider/path_provider.dart'; + import '../common.dart'; +import '../generated_bridge.dart'; class RgbaFrame extends Struct { @Uint32() @@ -60,13 +62,19 @@ class PlatformFFI { isIOS = Platform.isIOS; isAndroid = Platform.isAndroid; isDesktop = Platform.isWindows || Platform.isMacOS || Platform.isLinux; - if (isDesktop) { - // TODO - return; - } + // if (isDesktop) { + // // TODO + // return; + // } final dylib = Platform.isAndroid ? DynamicLibrary.open('librustdesk.so') - : DynamicLibrary.process(); + : Platform.isLinux + ? DynamicLibrary.open("/usr/lib/rustdesk/librustdesk.so") + : Platform.isWindows + ? DynamicLibrary.open("librustdesk.dll") + : Platform.isMacOS + ? DynamicLibrary.open("librustdesk.dylib") + : DynamicLibrary.process(); print('initializing FFI'); try { _getByName = dylib.lookupFunction('get_by_name'); diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index f3a366cf1..681ff3c25 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -1,9 +1,12 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:wakelock/wakelock.dart'; + import '../common.dart'; -import '../pages/server_page.dart'; +import '../mobile/pages/server_page.dart'; import 'model.dart'; const loginDialogTag = "LOGIN"; @@ -203,7 +206,10 @@ class ServerModel with ChangeNotifier { FFI.setByName("start_service"); getIDPasswd(); updateClientState(); - Wakelock.enable(); + if (!Platform.isLinux) { + // current linux is not supported + Wakelock.enable(); + } } Future stopService() async { @@ -212,7 +218,10 @@ class ServerModel with ChangeNotifier { await FFI.invokeMethod("stop_service"); FFI.setByName("stop_service"); notifyListeners(); - Wakelock.disable(); + if (!Platform.isLinux) { + // current linux is not supported + Wakelock.disable(); + } } Future initInput() async { diff --git a/flutter/lib/pages/desktop_home_page.dart b/flutter/lib/pages/desktop_home_page.dart deleted file mode 100644 index a5d38b08b..000000000 --- a/flutter/lib/pages/desktop_home_page.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter/material.dart'; - -class DesktopHomePage extends StatefulWidget { - DesktopHomePage({Key? key}) : super(key: key); - - @override - State createState() => _DesktopHomePageState(); -} - -class _DesktopHomePageState extends State { - @override - Widget build(BuildContext context) { - return Text("Hello Desktop"); - } -} diff --git a/flutter/macos/Flutter/GeneratedPluginRegistrant.swift b/flutter/macos/Flutter/GeneratedPluginRegistrant.swift index 086b7f675..a540eabec 100644 --- a/flutter/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/flutter/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,7 +7,7 @@ import Foundation import firebase_analytics import firebase_core -import package_info +import package_info_plus_macos import path_provider_macos import shared_preferences_macos import url_launcher_macos @@ -16,7 +16,7 @@ import wakelock_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FLTFirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAnalyticsPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) - FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin")) + FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index 0f9691f3a..083c4a494 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -262,14 +262,14 @@ packages: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.1" image: dependency: "direct main" description: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.1.3" + version: "3.2.0" image_picker: dependency: "direct main" description: @@ -297,7 +297,7 @@ packages: name: image_picker_ios url: "https://pub.dartlang.org" source: hosted - version: "0.8.5+2" + version: "0.8.5+5" image_picker_platform_interface: dependency: transitive description: @@ -347,13 +347,48 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" - package_info: + package_info_plus: dependency: "direct main" description: - name: package_info + name: package_info_plus url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "1.4.2" + package_info_plus_linux: + dependency: transitive + description: + name: package_info_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_macos: + dependency: transitive + description: + name: package_info_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + package_info_plus_web: + dependency: transitive + description: + name: package_info_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_windows: + dependency: transitive + description: + name: package_info_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" path: dependency: transitive description: @@ -423,7 +458,7 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "5.0.0" platform: dependency: transitive description: @@ -603,7 +638,7 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" url_launcher: dependency: "direct main" description: @@ -624,7 +659,7 @@ packages: name: url_launcher_ios url: "https://pub.dartlang.org" source: hosted - version: "6.0.16" + version: "6.0.17" url_launcher_linux: dependency: transitive description: @@ -715,7 +750,7 @@ packages: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.5.2" + version: "2.6.1" xdg_directories: dependency: transitive description: @@ -729,7 +764,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.3.1" + version: "6.0.1" yaml: dependency: transitive description: @@ -745,5 +780,5 @@ packages: source: hosted version: "0.1.0" sdks: - dart: ">=2.17.0-0 <3.0.0" + dart: ">=2.17.0 <3.0.0" flutter: ">=2.10.0" diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index eba7dfd12..c8d31e87e 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: wakelock: ^0.5.2 device_info: ^2.0.2 firebase_analytics: ^9.1.5 - package_info: ^2.0.2 + package_info_plus: ^1.4.2 url_launcher: ^6.0.9 shared_preferences: ^2.0.6 toggle_switch: ^1.4.0 diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index ce0fc509a..e6ca46ee3 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -39,7 +39,7 @@ lazy_static::lazy_static! { pub static ref PROD_RENDEZVOUS_SERVER: Arc> = Default::default(); pub static ref APP_NAME: Arc> = Arc::new(RwLock::new("RustDesk".to_owned())); } -#[cfg(any(target_os = "android", target_os = "ios"))] +// #[cfg(any(target_os = "android", target_os = "ios"))] lazy_static::lazy_static! { pub static ref APP_DIR: Arc> = Default::default(); pub static ref APP_HOME_DIR: Arc> = Default::default(); diff --git a/src/common.rs b/src/common.rs index 2a865afbb..03e5f4f4b 100644 --- a/src/common.rs +++ b/src/common.rs @@ -12,7 +12,7 @@ use hbb_common::{ rendezvous_proto::*, sleep, socket_client, tokio, ResultType, }; -#[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] +// #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] use hbb_common::{config::RENDEZVOUS_PORT, futures::future::join_all}; use std::sync::{Arc, Mutex}; @@ -336,7 +336,7 @@ pub async fn get_nat_type(ms_timeout: u64) -> i32 { crate::ipc::get_nat_type(ms_timeout).await } -#[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] +// #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] #[tokio::main(flavor = "current_thread")] async fn test_rendezvous_server_() { let servers = Config::get_rendezvous_servers(); @@ -363,7 +363,7 @@ async fn test_rendezvous_server_() { join_all(futs).await; } -#[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] +// #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] pub fn test_rendezvous_server() { std::thread::spawn(test_rendezvous_server_); } diff --git a/src/lib.rs b/src/lib.rs index 8dafb727e..556d22594 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,11 +21,11 @@ pub mod ipc; pub mod ui; mod version; pub use version::*; -#[cfg(any(target_os = "android", target_os = "ios"))] +// #[cfg(any(target_os = "android", target_os = "ios"))] mod bridge_generated; -#[cfg(any(target_os = "android", target_os = "ios"))] +// #[cfg(any(target_os = "android", target_os = "ios"))] pub mod mobile; -#[cfg(any(target_os = "android", target_os = "ios"))] +// #[cfg(any(target_os = "android", target_os = "ios"))] pub mod mobile_ffi; use common::*; #[cfg(feature = "cli")] diff --git a/src/mobile.rs b/src/mobile.rs index 200c0b24d..80dd1f807 100644 --- a/src/mobile.rs +++ b/src/mobile.rs @@ -1165,7 +1165,7 @@ pub fn make_fd_to_json(fd: FileDirectory) -> String { // Server Side // TODO connection_manager need use struct and trait,impl default method -#[cfg(target_os = "android")] +#[cfg(not(any(target_os = "ios")))] pub mod connection_manager { use std::{ collections::HashMap, @@ -1191,6 +1191,7 @@ pub mod connection_manager { task::spawn_blocking, }, }; + #[cfg(any(target_os = "android"))] use scrap::android::call_main_service_set_by_name; use serde_derive::Serialize; @@ -1253,6 +1254,7 @@ pub mod connection_manager { client.authorized = true; let client_json = serde_json::to_string(&client).unwrap_or("".into()); // send to Android service,active notification no matter UI is shown or not. + #[cfg(any(target_os = "android"))] if let Err(e) = call_main_service_set_by_name( "on_client_authorized", Some(&client_json), @@ -1265,6 +1267,7 @@ pub mod connection_manager { } else { let client_json = serde_json::to_string(&client).unwrap_or("".into()); // send to Android service,active notification no matter UI is shown or not. + #[cfg(any(target_os = "android"))] if let Err(e) = call_main_service_set_by_name( "try_start_without_auth", Some(&client_json), @@ -1343,6 +1346,7 @@ pub mod connection_manager { .next() .is_none() { + #[cfg(any(target_os = "android"))] if let Err(e) = call_main_service_set_by_name("stop_capture", None, None) { log::debug!("stop_capture err:{}", e); } diff --git a/src/mobile_ffi.rs b/src/mobile_ffi.rs index 2d1b90e7c..ec6ef9082 100644 --- a/src/mobile_ffi.rs +++ b/src/mobile_ffi.rs @@ -29,6 +29,7 @@ fn initialize(app_dir: &str) { use hbb_common::env_logger::*; init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "debug")); } + #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] crate::common::test_rendezvous_server(); crate::common::test_nat_type(); #[cfg(target_os = "android")] @@ -182,9 +183,11 @@ unsafe extern "C" fn set_by_name(name: *const c_char, value: *const c_char) { "init" => { initialize(value); } + #[cfg(any(target_os = "android", target_os = "ios"))] "info1" => { *crate::common::MOBILE_INFO1.lock().unwrap() = value.to_owned(); } + #[cfg(any(target_os = "android", target_os = "ios"))] "info2" => { *crate::common::MOBILE_INFO2.lock().unwrap() = value.to_owned(); } @@ -293,6 +296,7 @@ unsafe extern "C" fn set_by_name(name: *const c_char, value: *const c_char) { if name == "custom-rendezvous-server" { #[cfg(target_os = "android")] crate::rendezvous_mediator::RendezvousMediator::restart(); + #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] crate::common::test_rendezvous_server(); } }