diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a615d061..1d8916b8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,6 +18,15 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} submodules: recursive + # We need to enforce java 17 because newer Flutter packages are + # requiring this Java Version. + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: '17' + cache: 'gradle' + check-latest: true - uses: subosito/flutter-action@v2.8.0 with: channel: "stable" diff --git a/README.md b/README.md index 32301032..ffccfe64 100644 --- a/README.md +++ b/README.md @@ -153,7 +153,7 @@ lib packages │ -├───unity_multi_window [multi-window support for desktop platforms.] +├───unity_multi_window [multi-window support for desktop platforms.] │ ├───unity_video_player │ ├───unity_video_player [the core video player logic.] @@ -165,6 +165,22 @@ packages Feel free to send any pull-requests to add any features you wish or fix any bugs you notice. +### Video Rendering + +We support multiple platforms and each platform uses its own rendering backend. + +| Platform | Rendering Backend | Flutter Package | +| ------------ | ----------------- | --------------- | +| Android | MPV | media_kit | +| iOS | MPV | media_kit | +| Windows | MPV | media_kit | +| MacOS | MPV | media_kit | +| Web | HTML5 | fvp | +| Linux | MDK | fvp | +| Raspberry Pi | MDK | fvp | + +MDK is used for Linux and Raspberry Pi because MPV has shown to be unstable on these platforms, causing crashes. Additionally, `fvp` doesn't require the user to install any additional dependencies. + ### Build The build process is pretty straight-forward. You need to have [Flutter](https://flutter.dev/docs/get-started/install) installed on your system. @@ -192,4 +208,4 @@ When running on debug, you must disable the CORS policy in your browser. Note th ```bash flutter run -d chrome --web-browser-flag "--disable-web-security" -``` \ No newline at end of file +``` diff --git a/android/app/build.gradle b/android/app/build.gradle index 9d549f4f..2c695ee7 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -31,8 +31,8 @@ android { ndkVersion flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { diff --git a/bluecherry_appcast.xml b/bluecherry_appcast.xml index 4644fbb7..881dd203 100644 --- a/bluecherry_appcast.xml +++ b/bluecherry_appcast.xml @@ -2,6 +2,11 @@ Bluecherry - Appcast + + Version 3.0.0-beta19 + Linux and Timeline enhancements. + Mon, 09 Sep 2024 + Version 3.0.0-beta18 Time Filter for Events; Fixed crash on newer versions of Windows. diff --git a/installer/windows-installer.iss b/installer/windows-installer.iss index de9c85f5..0ad52487 100644 --- a/installer/windows-installer.iss +++ b/installer/windows-installer.iss @@ -2,7 +2,7 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Bluecherry DVR" -#define MyAppVersion "3.0.0-beta18" +#define MyAppVersion "3.0.0-beta19" #define MyAppPublisher "Bluecherry DVR" #define MyAppURL "https://www.bluecherrydvr.com/" #define MyAppExeName "bluecherry_client.exe" diff --git a/lib/main.dart b/lib/main.dart index a1695014..217d33fc 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -18,7 +18,6 @@ */ import 'dart:async'; -import 'dart:convert'; import 'dart:io'; import 'package:bluecherry_client/api/api.dart'; @@ -117,12 +116,12 @@ Future main(List args) async { await SettingsProvider.ensureInitialized(); await DesktopViewProvider.ensureInitialized(); - final windowType = MultiWindowType.values[int.tryParse(args[1]) ?? 0]; - final themeMode = ThemeMode.values[int.tryParse(args[3]) ?? 0]; + final (windowType, themeMode, map) = + LayoutWindowExtension.fromArgs(args); switch (windowType) { case MultiWindowType.device: - final device = Device.fromJson(json.decode(args[2])); + final device = Device.fromJson(map); configureWindowTitle(device.fullName); runApp(AlternativeWindow( @@ -131,7 +130,7 @@ Future main(List args) async { )); break; case MultiWindowType.layout: - final layout = Layout.fromJson(args[2]); + final layout = Layout.fromMap(map); configureWindowTitle(layout.name); runApp(AlternativeWindow( @@ -268,10 +267,11 @@ class _UnityAppState extends State case NetworkUsage.wifiOnly: debugPrint('Pausing all streams'); final connectionType = await Connectivity().checkConnectivity(); - if (connectionType == ConnectivityResult.mobile || - connectionType == ConnectivityResult.bluetooth) { - UnityPlayers.pauseAll(); - } + if ([ + ConnectivityResult.bluetooth, + ConnectivityResult.mobile, + ].any(connectionType.contains)) UnityPlayers.pauseAll(); + break; case NetworkUsage.never: break; diff --git a/lib/models/layout.dart b/lib/models/layout.dart index b3c67816..2c3bd6a2 100644 --- a/lib/models/layout.dart +++ b/lib/models/layout.dart @@ -17,7 +17,6 @@ * along with this program. If not, see . */ -import 'dart:convert'; import 'dart:io'; import 'package:bluecherry_client/models/device.dart'; @@ -107,10 +106,6 @@ class Layout { ); } - String toJson() => json.encode(toMap()); - - factory Layout.fromJson(String source) => Layout.fromMap(json.decode(source)); - Layout copyWith({ String? name, List? devices, diff --git a/lib/providers/desktop_view_provider.dart b/lib/providers/desktop_view_provider.dart index 9bef40cb..a826b2bf 100644 --- a/lib/providers/desktop_view_provider.dart +++ b/lib/providers/desktop_view_provider.dart @@ -169,6 +169,8 @@ class DesktopViewProvider extends UnityProvider { return save(notifyListeners: false); } + Iterable get allDevices => layouts.expand((layout) => layout.devices); + /// Removes all the [devices] provided /// /// This is usually used when a server is deleted diff --git a/lib/providers/home_provider.dart b/lib/providers/home_provider.dart index f0f7a8ef..45fc3e09 100644 --- a/lib/providers/home_provider.dart +++ b/lib/providers/home_provider.dart @@ -18,10 +18,12 @@ */ import 'package:bluecherry_client/main.dart'; +import 'package:bluecherry_client/providers/desktop_view_provider.dart'; import 'package:bluecherry_client/providers/server_provider.dart'; import 'package:bluecherry_client/providers/settings_provider.dart'; import 'package:bluecherry_client/providers/update_provider.dart'; import 'package:bluecherry_client/utils/methods.dart'; +import 'package:bluecherry_client/utils/video_player.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -91,19 +93,51 @@ class HomeProvider extends ChangeNotifier { List loadReasons = []; + /// Stores the volume of each device. + /// + /// These are filled when the user leaves the Devices tab and cleared when + /// they come back. + Map volumes = {}; + Future setTab(UnityTab tab, BuildContext context) async { if (tab == this.tab) return; + final currentTab = this.tab; + final nextTab = tab; + this.tab = tab; - if (tab != UnityTab.downloads) { - initiallyExpandedDownloadEventId = null; - } + if (nextTab != UnityTab.downloads) initiallyExpandedDownloadEventId = null; - if (tab != UnityTab.addServer) { + if (nextTab != UnityTab.addServer) { automaticallyGoToAddServersScreen = false; } + if (currentTab == UnityTab.deviceGrid) { + // If we're moving out of the device grid tab, we should not be able to + // hear the live feed anymore. + + final devices = DesktopViewProvider.instance.allDevices; + final players = UnityPlayers.players.entries + .where((entry) => devices.any((device) => device.uuid == entry.key)) + .toList(); + + for (final player in players) { + volumes[player.key] = player.value.volume; + player.value.setVolume(0.0); + } + } else if (nextTab == UnityTab.deviceGrid) { + // When the user comes back to the device grid, we should restore the + // volume of the devices. + + for (final entry in volumes.entries) { + final player = UnityPlayers.players[entry.key]; + if (player != null) player.setVolume(entry.value); + } + + volumes.clear(); + } + refreshDeviceOrientation(context); updateWakelock(context); notifyListeners(); diff --git a/lib/screens/events_timeline/events_playback.dart b/lib/screens/events_timeline/events_playback.dart index 3070608e..92715701 100644 --- a/lib/screens/events_timeline/events_playback.dart +++ b/lib/screens/events_timeline/events_playback.dart @@ -154,6 +154,8 @@ class _EventsPlaybackState extends EventsScreenState { initialPosition: switch (settings.kTimelineInitialPoint.value) { TimelineInitialPoint.beginning => Duration.zero, TimelineInitialPoint.firstEvent => () { + if (parsedTiles.isEmpty) return Duration.zero; + final firstEvent = parsedTiles .map((e) { final earliestEvent = e.events.reduce( diff --git a/lib/screens/layouts/desktop/layout_view.dart b/lib/screens/layouts/desktop/layout_view.dart index 9d8cbdbc..dec478dd 100644 --- a/lib/screens/layouts/desktop/layout_view.dart +++ b/lib/screens/layouts/desktop/layout_view.dart @@ -246,17 +246,22 @@ class LayoutView extends StatelessWidget { ); } + final isAlternativeWindow = AlternativeWindow.maybeOf(context) != null; + final parent = context.findAncestorWidgetOfExactType(); final isReversed = - context.findAncestorWidgetOfExactType()!.width <= - _kReverseBreakpoint; + parent == null ? false : parent.width <= _kReverseBreakpoint; return Material( color: Colors.black, shape: RoundedRectangleBorder( - borderRadius: BorderRadiusDirectional.only( - topStart: isReversed ? Radius.zero : const Radius.circular(8.0), - topEnd: isReversed ? const Radius.circular(8.0) : Radius.zero, - ), + borderRadius: isAlternativeWindow + ? BorderRadius.zero + : BorderRadiusDirectional.only( + topStart: + isReversed ? Radius.zero : const Radius.circular(8.0), + topEnd: + isReversed ? const Radius.circular(8.0) : Radius.zero, + ), ), child: SafeArea( child: Column( diff --git a/lib/screens/layouts/device_grid.dart b/lib/screens/layouts/device_grid.dart index dd3e9bbb..ecffbbe8 100644 --- a/lib/screens/layouts/device_grid.dart +++ b/lib/screens/layouts/device_grid.dart @@ -35,6 +35,7 @@ import 'package:bluecherry_client/screens/layouts/desktop/external_stream.dart'; import 'package:bluecherry_client/screens/layouts/desktop/layout_manager.dart'; import 'package:bluecherry_client/screens/layouts/desktop/viewport.dart'; import 'package:bluecherry_client/screens/layouts/mobile/device_view.dart'; +import 'package:bluecherry_client/screens/multi_window/window.dart'; import 'package:bluecherry_client/utils/app_links/app_links.dart' as app_links; import 'package:bluecherry_client/utils/constants.dart'; import 'package:bluecherry_client/utils/extensions.dart'; diff --git a/lib/utils/app_links/app_links_real.dart b/lib/utils/app_links/app_links_real.dart index d8f41adf..f088b92b 100644 --- a/lib/utils/app_links/app_links_real.dart +++ b/lib/utils/app_links/app_links_real.dart @@ -66,7 +66,7 @@ void listen() { // See https://github.com/llfbandit/app_links/issues/20 for more info. if (isDesktopPlatform && !Platform.isLinux) { WidgetsBinding.instance.addPostFrameCallback((_) { - instance.allUriLinkStream.listen((uri) async { + instance.uriLinkStream.listen((uri) async { debugPrint('Received URI: $uri'); await writeLogToFile('Received URI $uri'); final handleType = await _handleUri(uri); diff --git a/lib/utils/window.dart b/lib/utils/window.dart index a21f8fdd..818350f9 100644 --- a/lib/utils/window.dart +++ b/lib/utils/window.dart @@ -96,10 +96,9 @@ extension DeviceWindowExtension on Device { debugPrint('Opening a new window'); final window = await MultiWindow.run([ - 'multi_window', '${MultiWindowType.device.index}', - json.encode(toJson()), '${SettingsProvider.instance.kThemeMode.value.index}', + json.encode(toJson()), ]); debugPrint('Opened window with id ${window.windowId}'); @@ -107,6 +106,15 @@ extension DeviceWindowExtension on Device { } extension LayoutWindowExtension on Layout { + static (MultiWindowType, ThemeMode, Map) fromArgs( + List args, + ) { + final type = MultiWindowType.values[int.parse(args[0])]; + final themeMode = ThemeMode.values[int.parse(args[1])]; + final map = json.decode(args[2]); + return (type, themeMode, map); + } + Future openInANewWindow() async { assert( isDesktopPlatform, @@ -118,8 +126,8 @@ extension LayoutWindowExtension on Layout { debugPrint('Opening a new window'); final window = await MultiWindow.run([ '${MultiWindowType.layout.index}', - json.encode(toMap()), '${SettingsProvider.instance.kThemeMode.value.index}', + json.encode(toMap()), ]); debugPrint('Opened window with id ${window.windowId}'); diff --git a/linux/debian/DEBIAN/control b/linux/debian/DEBIAN/control index 9904edda..4a10fde5 100644 --- a/linux/debian/DEBIAN/control +++ b/linux/debian/DEBIAN/control @@ -1,5 +1,5 @@ Package: bluecherrydvr -Version: 3.0.0-beta18 +Version: 3.0.0-beta19 Section: base Priority: optional Homepage: https://www.bluecherrydvr.com/ diff --git a/linux/debian/usr/share/metainfo/bluecherry.appdata.xml b/linux/debian/usr/share/metainfo/bluecherry.appdata.xml index 7114a092..5c7a4056 100644 --- a/linux/debian/usr/share/metainfo/bluecherry.appdata.xml +++ b/linux/debian/usr/share/metainfo/bluecherry.appdata.xml @@ -36,6 +36,7 @@ bluecherrydvr.desktop + | | | | diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 6dc847c4..25d8069e 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -9,10 +9,8 @@ #include #include #include -#include #include #include -#include #include #include @@ -26,18 +24,12 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) gtk_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin"); gtk_plugin_register_with_registrar(gtk_registrar); - g_autoptr(FlPluginRegistrar) media_kit_libs_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "MediaKitLibsLinuxPlugin"); - media_kit_libs_linux_plugin_register_with_registrar(media_kit_libs_linux_registrar); g_autoptr(FlPluginRegistrar) media_kit_video_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "MediaKitVideoPlugin"); media_kit_video_plugin_register_with_registrar(media_kit_video_registrar); g_autoptr(FlPluginRegistrar) screen_retriever_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); - g_autoptr(FlPluginRegistrar) system_date_time_format_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "SystemDateTimeFormatPlugin"); - system_date_time_format_plugin_register_with_registrar(system_date_time_format_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 06e9c034..9d520730 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -6,10 +6,8 @@ list(APPEND FLUTTER_PLUGIN_LIST awesome_notifications fvp gtk - media_kit_libs_linux media_kit_video screen_retriever - system_date_time_format url_launcher_linux window_manager ) diff --git a/linux/rpm/bluecherry.spec b/linux/rpm/bluecherry.spec index 8dc19e82..9ef4d7ae 100644 --- a/linux/rpm/bluecherry.spec +++ b/linux/rpm/bluecherry.spec @@ -1,5 +1,5 @@ Name: bluecherrydvr -Version: 3.0.0_beta18 +Version: 3.0.0_beta19 Release: 1 Summary: Bluecherry client written in Flutter. License: EULA diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 5398a142..b7e2e9f1 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -18,7 +18,6 @@ import package_info_plus import path_provider_foundation import screen_brightness_macos import screen_retriever -import system_date_time_format import url_launcher_macos import video_player_avfoundation import wakelock_plus @@ -27,7 +26,7 @@ import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin")) AwesomeNotificationsPlugin.register(with: registry.registrar(forPlugin: "AwesomeNotificationsPlugin")) - ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) + ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) @@ -38,7 +37,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) ScreenBrightnessMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenBrightnessMacosPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) - SystemDateTimeFormatPlugin.register(with: registry.registrar(forPlugin: "SystemDateTimeFormatPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) diff --git a/packages/pub_resolver.dart b/packages/pub_resolver.dart index a3ceee9c..cf494fa7 100644 --- a/packages/pub_resolver.dart +++ b/packages/pub_resolver.dart @@ -9,11 +9,9 @@ void main() async { print('Resolving dependencies'); final packagePaths = [ - '.', 'packages/unity_multi_window', 'packages/unity_video_player/unity_video_player', 'packages/unity_video_player/unity_video_player_flutter', - 'packages/unity_video_player/unity_video_player_fvp', 'packages/unity_video_player/unity_video_player_main', 'packages/unity_video_player/unity_video_player_platform_interface', ]; @@ -24,6 +22,9 @@ void main() async { print('Running pub upgrade in all packages:'); await Future.wait(packagePaths.map(_runPubUpgrade)); + await _runPubGet('.'); + await _runPubUpgrade('.'); + print('All done'); } diff --git a/packages/unity_video_player/unity_video_player_main/pubspec.yaml b/packages/unity_video_player/unity_video_player_main/pubspec.yaml index 7f1c5c4e..6effe1af 100644 --- a/packages/unity_video_player/unity_video_player_main/pubspec.yaml +++ b/packages/unity_video_player/unity_video_player_main/pubspec.yaml @@ -12,8 +12,8 @@ environment: dependencies: flutter: sdk: flutter - media_kit: ^1.1.10 # Primary package. - media_kit_video: ^1.2.4 # For video rendering. + media_kit: ^1.1.11 # Primary package. + media_kit_video: ^1.2.5 # For video rendering. #media_kit_libs_video: ^1.0.4 # Native video dependencies. unity_video_player_platform_interface: path: ../unity_video_player_platform_interface/ @@ -38,10 +38,10 @@ dependencies: git: url: https://github.com/media-kit/media-kit/ path: libs/ios/media_kit_libs_ios_video - media_kit_libs_linux: - git: - url: https://github.com/media-kit/media-kit/ - path: libs/linux/media_kit_libs_linux + # media_kit_libs_linux: + # git: + # url: https://github.com/media-kit/media-kit/ + # path: libs/linux/media_kit_libs_linux media_kit_libs_macos_video: git: url: https://github.com/media-kit/media-kit/ diff --git a/pubspec.lock b/pubspec.lock index f5409666..262fa6d6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,10 +21,34 @@ packages: dependency: "direct main" description: name: app_links - sha256: "3ced568a5d9e309e99af71285666f1f3117bddd0bd5b3317979dccc1a40cada4" + sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99 url: "https://pub.dev" source: hosted - version: "3.5.1" + version: "6.3.2" + app_links_linux: + dependency: transitive + description: + name: app_links_linux + sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + app_links_platform_interface: + dependency: transitive + description: + name: app_links_platform_interface + sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + app_links_web: + dependency: transitive + description: + name: app_links_web + sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555 + url: "https://pub.dev" + source: hosted + version: "1.0.4" archive: dependency: transitive description: @@ -125,18 +149,18 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0" + sha256: "2056db5241f96cdc0126bd94459fc4cdc13876753768fc7a31c425e50a7177d0" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "6.0.5" connectivity_plus_platform_interface: dependency: transitive description: name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" url: "https://pub.dev" source: hosted - version: "1.2.4" + version: "2.0.1" console: dependency: transitive description: @@ -145,6 +169,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.0" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" + url: "https://pub.dev" + source: hosted + version: "0.3.4+2" crypto: dependency: transitive description: @@ -173,10 +205,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 url: "https://pub.dev" source: hosted - version: "9.1.2" + version: "10.1.2" device_info_plus_platform_interface: dependency: transitive description: @@ -189,10 +221,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "0dfb6b6a1979dac1c1245e17cef824d7b452ea29bd33d3467269f9bef3715fb0" + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" url: "https://pub.dev" source: hosted - version: "5.6.0" + version: "5.7.0" dio_web_adapter: dependency: transitive description: @@ -205,10 +237,10 @@ packages: dependency: "direct main" description: name: duration - sha256: "8b9020df63d2894f29fe250b60ca5b7f9e943d4a3cf766c2b161efeb617a0ea3" + sha256: "13e5d20723c9c1dde8fb318cf86716d10ce294734e81e44ae1a817f3ae714501" url: "https://pub.dev" source: hosted - version: "3.0.15" + version: "4.0.3" fake_async: dependency: transitive description: @@ -237,10 +269,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "1bbf65dd997458a08b531042ec3794112a6c39c07c37ff22113d2e7e4f81d4e4" + sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12" url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "8.1.2" firebase_core: dependency: "direct main" description: @@ -314,10 +346,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "4.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -417,10 +449,10 @@ packages: dependency: "direct main" description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.2" http_parser: dependency: transitive description: @@ -489,10 +521,10 @@ packages: dependency: transitive description: name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.0" logging: dependency: "direct main" description: @@ -543,15 +575,6 @@ packages: url: "https://github.com/media-kit/media-kit/" source: git version: "1.1.4" - media_kit_libs_linux: - dependency: transitive - description: - path: "libs/linux/media_kit_libs_linux" - ref: HEAD - resolved-ref: e41e50c8cfb370e69612b205dcfd9f3ca80690f5 - url: "https://github.com/media-kit/media-kit/" - source: git - version: "1.1.3" media_kit_libs_macos_video: dependency: transitive description: @@ -631,18 +654,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" + sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918 url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "8.0.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" path: dependency: transitive description: @@ -936,14 +959,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.2.0" - system_date_time_format: - dependency: "direct main" - description: - name: system_date_time_format - sha256: e5d42be622123f4f0fe0c4dfb2eee7a390d1fa04541d77cb7a529353f8375024 - url: "https://pub.dev" - source: hosted - version: "0.7.0" term_glyph: dependency: transitive description: @@ -997,13 +1012,6 @@ packages: relative: true source: path version: "0.0.1" - unity_video_player_fvp: - dependency: transitive - description: - path: "packages/unity_video_player/unity_video_player_fvp" - relative: true - source: path - version: "0.0.1" unity_video_player_main: dependency: transitive description: @@ -1086,10 +1094,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" url_launcher_windows: dependency: transitive description: @@ -1102,10 +1110,10 @@ packages: dependency: "direct main" description: name: uuid - sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90" + sha256: f33d6bb662f0e4f79dcd7ada2e6170f3b3a2530c28fc41f49a411ddedd576a77 url: "https://pub.dev" source: hosted - version: "4.4.2" + version: "4.5.0" vector_math: dependency: transitive description: @@ -1134,10 +1142,10 @@ packages: dependency: transitive description: name: video_player_android - sha256: "101028b643a3b43ced72107aacdbc4d30d55365487751de001a36cf0d86038d1" + sha256: "38d8fe136c427abdce68b5e8c3c08ea29d7a794b453c7a51b12ecfad4aad9437" url: "https://pub.dev" source: hosted - version: "2.7.2" + version: "2.7.3" video_player_avfoundation: dependency: transitive description: @@ -1182,10 +1190,10 @@ packages: dependency: "direct main" description: name: wakelock_plus - sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d + sha256: bf4ee6f17a2fa373ed3753ad0e602b7603f8c75af006d5b9bdade263928c0484 url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.2.8" wakelock_plus_platform_interface: dependency: transitive description: @@ -1198,10 +1206,10 @@ packages: dependency: transitive description: name: web - sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" + sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062 url: "https://pub.dev" source: hosted - version: "0.4.2" + version: "1.0.0" win32: dependency: transitive description: @@ -1222,10 +1230,10 @@ packages: dependency: "direct main" description: name: window_manager - sha256: "8699323b30da4cdbe2aa2e7c9de567a6abd8a97d9a5c850a3c86dcd0b34bbfbf" + sha256: ab8b2a7f97543d3db2b506c9d875e637149d48ee0c6a5cb5f5fd6e0dac463792 url: "https://pub.dev" source: hosted - version: "0.3.9" + version: "0.4.2" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 90c18a79..016178cf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Bluecherry client written in Flutter. publish_to: "none" -version: 3.0.0-beta18 +version: 3.0.0-beta19 environment: sdk: ">=3.0.0 <4.0.0" @@ -31,31 +31,31 @@ dependencies: intl: ^0.18.1 flutter_localized_locales: ^2.0.5 - duration: ^3.0.13 + duration: ^4.0.3 firebase_core: 2.10.0 firebase_messaging: ^14.4.1 awesome_notifications: ^0.9.3 wakelock_plus: ^1.1.4 - app_links: ^3.5.0 + app_links: ^6.3.2 win32_registry: ^1.1.2 - system_date_time_format: ^0.7.0 - device_info_plus: ^9.1.2 - package_info_plus: ^5.0.1 - connectivity_plus: ^5.0.2 + # system_date_time_format: ^0.7.0 + device_info_plus: ^10.1.2 + package_info_plus: ^8.0.2 + connectivity_plus: ^6.0.5 version: ^3.0.2 url_launcher: ^6.2.4 logging: ^1.2.0 path_provider: ^2.1.2 - file_picker: ^6.1.1 + file_picker: ^8.1.2 safe_local_storage: ^1.0.0 permission_handler: ^11.1.0 uuid: ^4.3.3 # Desktop - window_manager: ^0.3.8 + window_manager: ^0.4.2 titlebar_buttons: ^1.0.0 unity_multi_window: path: packages/unity_multi_window/ @@ -63,7 +63,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^3.0.0 + flutter_lints: ^4.0.0 msix: ^3.7.0 flutter_launcher_icons: ^0.13.0 diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index fe26da3a..2831f7e2 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,5 +1,5 @@ name: bluecherry-client -version: 3.0.0-beta18 +version: 3.0.0-beta19 summary: Bluecherry DVR Client description: Bluecherry DVR client diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 9d1d583d..a532209f 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -38,8 +37,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("ScreenBrightnessWindowsPlugin")); ScreenRetrieverPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); - SystemDateTimeFormatPluginCApiRegisterWithRegistrar( - registry->GetRegistrarForPlugin("SystemDateTimeFormatPluginCApi")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); WindowManagerPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index f7b0a094..ed265f3e 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -12,7 +12,6 @@ list(APPEND FLUTTER_PLUGIN_LIST permission_handler_windows screen_brightness_windows screen_retriever - system_date_time_format url_launcher_windows window_manager )