diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index d7649381..e1bc35a6 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -85,7 +85,7 @@ jobs:
# draft: true
# prerelease: false
# body: ""
- # tag_name: "vnext"
+ # tag_name: "bleeding_edge"
# files: |
# bluecherry-dvr-setup.exe
# token: ${{ secrets.GITHUB_TOKEN }}
@@ -123,7 +123,7 @@ jobs:
draft: true
prerelease: false
body: ""
- tag_name: "vnext"
+ tag_name: "bleeding_edge"
files: |
bluecherry-dvr-setup.exe
token: ${{ secrets.GITHUB_TOKEN }}
@@ -138,21 +138,52 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
submodules: recursive
- - run: sudo apt-get update -y
- - run: sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev mpv libmpv-dev dpkg-dev p7zip-full p7zip-rar
- - uses: subosito/flutter-action@v2.8.0
+ - name: Install dependencies
+ run: |
+ sudo apt-get update -y
+ sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev mpv libmpv-dev dpkg-dev p7zip-full p7zip-rar
+
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2.8.0
with:
# Stable channel is necessary because playback is broken on master
channel: "stable"
# cache: true
- - run: flutter gen-l10n
- - run: flutter pub get
- - run: flutter build linux --verbose
+ - name: Build Flutter
+ run: |
+ flutter gen-l10n
+ flutter pub get
+ flutter build linux --verbose
- - run: sudo pip3 install git+https://github.com/AppImageCrafters/appimage-builder.git
- - run: appimage-builder --skip-tests
+ - name: Build AppImage
+ run: |
+ sudo pip3 install git+https://github.com/AppImageCrafters/appimage-builder.git
+ appimage-builder --skip-tests
+ cp Bluecherry-latest-x86_64.AppImage bluecherry-linux-x86_64.AppImage
+
+ - name: Build RPM Package
+ run: |
+ mkdir -p linux/debian/usr/bin
+ cp -fr build/linux/x64/release/bundle linux/debian/usr/share/bluecherry_client
+ ln -sr linux/debian/usr/share/bluecherry_client/bluecherry_client linux/debian/usr/bin/bluecherry_client
+ sed -i "s:cp -rf :cp -rf $(pwd)/:" linux/rpm/bluecherry.spec
+ cd linux/debian
+ sed -i "s:FILES_HERE:$(find usr \( -type l -o -type f \) -follow -print | awk '{printf "/%s\\n", $0}'):" ../rpm/bluecherry.spec
+ cd ../../
+ rpmbuild -bb linux/rpm/bluecherry.spec -D "_topdir $(pwd)/rpmbuild"
+ cp rpmbuild/RPMS/x86_64/*.rpm bluecherry-linux-x86_64.rpm
- - run: cp Bluecherry-latest-x86_64.AppImage Bluecherry-latest.AppImage
+ - name: Build DEB Package
+ run: |
+ dpkg-deb --build --root-owner-group linux/debian
+ cp linux/*.deb bluecherry-linux-x86_64.deb
+
+ - name: Build Tarball
+ run: |
+ mkdir -p AppDir/
+ cp -r linux/debian/usr AppDir/
+ ln -sr AppDir/usr/bin/bluecherry_client AppDir/bluecherry_client
+ tar czf bluecherry-linux-x86_64.tar.gz -C AppDir/ .
- name: Release
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-using-contexts
@@ -164,5 +195,8 @@ jobs:
body: ""
tag_name: "bleeding_edge"
files: |
- Bluecherry-latest.AppImage
+ bluecherry-linux-x86_64.AppImage
+ bluecherry-linux-x86_64.deb
+ bluecherry-linux-x86_64.tar.gz
+ bluecherry-linux-x86_64.rpm
token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 5594524f..92150d30 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,4 +56,11 @@ appimage-build/
Bluecherry-latest-x86_64.AppImage
Bluecherry-latest-x86_64.AppImage.zsync
AppDirversion.txt
-AppDirassets/
\ No newline at end of file
+AppDirassets/
+
+*.deb
+/linux/debian/usr/bin
+/linux/debian/usr/share/bluecherry
+/linux/debian/usr/share/bluecherry_client
+*.tar.gz
+rpmbuild/
\ No newline at end of file
diff --git a/README.md b/README.md
index a24642e4..d7e5af80 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,20 @@
-
+
+
+
+
+
+
-
+
+
Bluecherry DVR client to run across range of devices.
+
-[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/bluecherrydvr/unity/graphs/commit-activity)
-[![Github all releases](https://img.shields.io/github/downloads/bluecherrydvr/unity/total.svg)](https://GitHub.com/bluecherrydvr/unity/releases/)
-![Build status](https://github.com/bluecherrydvr/unity/actions/workflows/main.yml/badge.svg)
+
Website โข
+
Purchase โข
+
Chat
+
-
-**Bluecherry DVR client to run across range of devices.**
-
-Website โข
-Purchase โข
-Chat
-
## License
[![](https://camo.githubusercontent.com/317e8956b95d7cd7ebdc2a75b836f19dee3c1ae5fa0fce5b277338e648880d4f/68747470733a2f2f7777772e676e752e6f72672f67726170686963732f67706c76332d3132377835312e706e67)](https://www.gnu.org/licenses/gpl-3.0.en.html)
@@ -25,34 +26,51 @@ This project & work under this repository is licensed under [GNU General Public
## Download
-- [iOS](https://apps.apple.com/us/app/bluecherry-mobile/id1555805139)
-- [Android](https://github.com/bluecherrydvr/unity/releases/tag/vnext)
-- [Windows](https://github.com/bluecherrydvr/unity/releases/)
-- [Linux](https://snapcraft.io/bluecherry-client)
+| Android | iOS | Windows | GNU/Linux | MacOS |
+| ------- | --- | ------- | ----- | ----- |
+| [arm64 `.apk`](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/bluecherry-android-arm64-v8a-release.apk) | [App Store](https://apps.apple.com/us/app/bluecherry-mobile/id1555805139) | [Windows Setup](https://github.com/bluecherrydvr/unity/releases/download/v3.0.0-beta8/bluecherry-dvr-setup.exe) | [AppImage](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/Bluecherry-latest.AppImage) | ๐ง **SOON** ~~[App Store](https://github.com/bluecherrydvr/unity/issues/112)~~ |
+| [armabi `.apk`](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/bluecherry-android-armeabi-v7a-release.apk) | | ๐ง **SOON** ~~`winget install bluecherry`~~ | [Ubuntu/Debian `.deb`](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/bluecherry-linux-x86_64.deb) | |
+| [x86_64 `.apk`](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/bluecherry-android-x86_64-release.apk) | | ๐ง **SOON** ~~Microsoft Store~~ | [Raw Executable `.tar.gz`](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/bluecherry-linux-x86_64.tar.gz) | |
+| ๐ง **SOON** ~~Play Store~~ | | | [Fedora/Red Hat Linux `.rpm`](https://github.com/bluecherrydvr/unity/releases/download/bleeding_edge/bluecherry-linux-x86_64.rpm) | |
+
+### Installation
+
+Most platforms will not require any extra steps to install the app.
+
+#### Linux
+
+You need mpv & libmpv-dev installed:
+```bash
+sudo apt install mpv libmpv-dev
+```
+
+To install the `.deb` file, run:
+```bash
+sudo dpkg -i bluecherry-linux-x86_64.deb
+```
+
## Features
-- Ability to add multiple [Bluecherry DVR servers](https://www.bluecherrydvr.com/downloads/).
-- Interactive camera grid viewer, with support for multiple layouts:
- - For larger screens, compact and multiple layout views are available.
- - For smaller screens, see multiple cameras in 4x4, 2x1 or 1x1 view
- - Re-orgderable drag-and-drop camera viewer
- - Cycle through different layout views
-- Pinch-to-zoom fullscreen camera viewer.
-- Events viewer.
-- Direct camera viewer.
-- Consistent & configurable system-aware, light & dark app theme.
-- Configurable in-app date & time format.
-- System camera event notifications with screenshot thumbnails.
-- Ability to snooze notifications directly from notification or within the app.
-- Adaptive and responsive design for larger screens
-- Directionality support for right-to-left languages
-- Cross-platform
- - [x] Android
- - [x] iOS ([_App store link_](https://apps.apple.com/us/app/bluecherry-mobile/id1555805139))
- - [x] Windows
- - [x] Linux ([_Snap store link_](https://snapcraft.io/bluecherry-client))
- - [ ] macOS
+* ๐ฒ๏ธ Ability to add multiple [Bluecherry DVR servers](https://www.bluecherrydvr.com/downloads/).
+- ๐๏ธ Interactive camera grid viewer, with support for multiple layouts:
+
$~~~~$
+๐ป For larger screens, compact and multiple layout views are available.
+
$~~~~~$๐ฑ For smaller screens, see multiple cameras in 2x3, 2x2, 2x1 or 1x1 view
+
$~~~~~$๐ Re-orgderable drag-and-drop camera viewer
+
$~~~~~$๐ Cycle through different layout views automatically
+* ๐ Pinch-to-zoom fullscreen camera viewer.
+* ๐ Events List Viewer
+* ๐ก Events Timeline Viewer
+* ๐ธ Direct camera viewer.
+* ๐ฎ Pan-Tilt-Zoom controls for supported cameras.
+* ๐ Consistent & configurable system-aware, light & dark app theme.
+* โฒ๏ธ Configurable in-app date & time format.
+* ๐ฐ System camera event notifications with screenshot thumbnails.
+* โฐ Ability to snooze notifications directly from notification or within the app.
+* ๐บ Adaptive and responsive design for larger screens
+* ๐ธ๏ธ Directionality support for right-to-left languages
+* ๐ฑ Cross-platform
## Translate
@@ -84,6 +102,9 @@ lib
โ
โโโโapi [API wrapper around Bluecherry DVR server.]
โ โโโapi.dart
+โ โโโptz.dart [API related to Pan-Tilt-Zoom controls]
+โ
+โโโโl10n [Tranlations]
โ
โโโโmodels [model classes to serve & bind type-safe data together in various entities.]
โ โโโโdevice.dart
@@ -106,6 +127,7 @@ lib
โ โโโโmethods.dart
โ โโโโstorage.dart
โ โโโโtheme.dart
+โ โโโโvideo_player.dart
โ โโโโwindow.dart
โ
โโโโwidgets [UI/UX & widgets used to display content.]
diff --git a/lib/api/ptz.dart b/lib/api/ptz.dart
index b3c8b6ff..43dbcb4f 100644
--- a/lib/api/ptz.dart
+++ b/lib/api/ptz.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart
index 98f2b765..412bd4b8 100644
--- a/lib/utils/storage.dart
+++ b/lib/utils/storage.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:bluecherry_client/utils/constants.dart';
import 'package:flutter/foundation.dart';
import 'package:hive_flutter/hive_flutter.dart';
diff --git a/lib/utils/video_player.dart b/lib/utils/video_player.dart
index a45b9155..488c625e 100644
--- a/lib/utils/video_player.dart
+++ b/lib/utils/video_player.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:bluecherry_client/models/device.dart';
import 'package:flutter/foundation.dart';
import 'package:unity_video_player/unity_video_player.dart';
diff --git a/lib/widgets/collapsable_sidebar.dart b/lib/widgets/collapsable_sidebar.dart
index f56a93e5..5d3dba9e 100644
--- a/lib/widgets/collapsable_sidebar.dart
+++ b/lib/widgets/collapsable_sidebar.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
diff --git a/lib/widgets/desktop_buttons.dart b/lib/widgets/desktop_buttons.dart
index 7530fc50..eca473f1 100644
--- a/lib/widgets/desktop_buttons.dart
+++ b/lib/widgets/desktop_buttons.dart
@@ -265,10 +265,11 @@ class _WindowButtonsState extends State with WindowListener {
// We ensure all the players are disposed in order to not keep the app alive
// in background, wasting unecessary resources!
if (isPreventClose) {
- await Future.microtask(() {
+ windowManager.hide();
+ await Future.microtask(() async {
for (final player in UnityVideoPlayerInterface.players.toList()) {
debugPrint('Disposing player ${player.hashCode}');
- player.dispose();
+ await player.dispose();
}
});
windowManager.destroy();
diff --git a/lib/widgets/events/events_screen.dart b/lib/widgets/events/events_screen.dart
index b071ad28..086ddb1b 100644
--- a/lib/widgets/events/events_screen.dart
+++ b/lib/widgets/events/events_screen.dart
@@ -1,5 +1,3 @@
-// ignore_for_file: overridden_fields
-
/*
* This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
*
diff --git a/lib/widgets/events_timeline/desktop/timeline.dart b/lib/widgets/events_timeline/desktop/timeline.dart
index 4cef88bc..c5694d22 100644
--- a/lib/widgets/events_timeline/desktop/timeline.dart
+++ b/lib/widgets/events_timeline/desktop/timeline.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'dart:async';
import 'dart:math';
diff --git a/lib/widgets/events_timeline/desktop/timeline_card.dart b/lib/widgets/events_timeline/desktop/timeline_card.dart
index d9e625a0..f3f7b9d2 100644
--- a/lib/widgets/events_timeline/desktop/timeline_card.dart
+++ b/lib/widgets/events_timeline/desktop/timeline_card.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:bluecherry_client/utils/extensions.dart';
import 'package:bluecherry_client/widgets/events_timeline/desktop/timeline.dart';
import 'package:bluecherry_client/widgets/hover_button.dart';
diff --git a/lib/widgets/events_timeline/desktop/timeline_sidebar.dart b/lib/widgets/events_timeline/desktop/timeline_sidebar.dart
index fcad79ba..3f8baeb3 100644
--- a/lib/widgets/events_timeline/desktop/timeline_sidebar.dart
+++ b/lib/widgets/events_timeline/desktop/timeline_sidebar.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:auto_size_text/auto_size_text.dart';
import 'package:bluecherry_client/providers/settings_provider.dart';
import 'package:bluecherry_client/utils/extensions.dart';
diff --git a/lib/widgets/events_timeline/events_playback.dart b/lib/widgets/events_timeline/events_playback.dart
index d8a3aad7..d2addd49 100644
--- a/lib/widgets/events_timeline/events_playback.dart
+++ b/lib/widgets/events_timeline/events_playback.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:bluecherry_client/api/api.dart';
import 'package:bluecherry_client/models/device.dart';
import 'package:bluecherry_client/models/event.dart';
diff --git a/lib/widgets/events_timeline/mobile/timeline_device_view.dart b/lib/widgets/events_timeline/mobile/timeline_device_view.dart
index 680b575e..1a157018 100644
--- a/lib/widgets/events_timeline/mobile/timeline_device_view.dart
+++ b/lib/widgets/events_timeline/mobile/timeline_device_view.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'dart:async';
import 'package:bluecherry_client/models/device.dart';
diff --git a/lib/widgets/multi_window/single_camera_window.dart b/lib/widgets/multi_window/single_camera_window.dart
index 05b0d08e..96f9e6fa 100644
--- a/lib/widgets/multi_window/single_camera_window.dart
+++ b/lib/widgets/multi_window/single_camera_window.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'dart:async';
import 'package:bluecherry_client/models/device.dart';
diff --git a/lib/widgets/multi_window/single_layout_window.dart b/lib/widgets/multi_window/single_layout_window.dart
index 139f5cd5..407a6085 100644
--- a/lib/widgets/multi_window/single_layout_window.dart
+++ b/lib/widgets/multi_window/single_layout_window.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:bluecherry_client/models/layout.dart';
import 'package:bluecherry_client/widgets/desktop_buttons.dart';
import 'package:bluecherry_client/widgets/device_grid/device_grid.dart';
diff --git a/lib/widgets/multi_window/window.dart b/lib/widgets/multi_window/window.dart
index 257e473f..58c51cee 100644
--- a/lib/widgets/multi_window/window.dart
+++ b/lib/widgets/multi_window/window.dart
@@ -1,3 +1,22 @@
+/*
+ * This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
+ *
+ * Copyright 2022 Bluecherry, LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
import 'package:bluecherry_client/main.dart';
import 'package:bluecherry_client/providers/desktop_view_provider.dart';
import 'package:bluecherry_client/providers/home_provider.dart';
diff --git a/linux/debian/DEBIAN/control b/linux/debian/DEBIAN/control
new file mode 100644
index 00000000..6b658e22
--- /dev/null
+++ b/linux/debian/DEBIAN/control
@@ -0,0 +1,9 @@
+Package: bluecherrydvr
+Version: 3.0.0-beta8
+Section: base
+Priority: optional
+Homepage: https://www.bluecherrydvr.com/
+Architecture: amd64
+Depends: mpv, libmpv-dev
+Maintainer: Bluecherry DVR
+Description: Bluecherry client written in Flutter.
diff --git a/linux/debian/usr/share/applications/bluecherry.desktop b/linux/debian/usr/share/applications/bluecherry.desktop
new file mode 100644
index 00000000..241b8105
--- /dev/null
+++ b/linux/debian/usr/share/applications/bluecherry.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Bluecherry
+Comment=Bluecherry client written in Flutter.
+Icon=bluecherry
+Exec=bluecherry_client %f
+StartupWMClass=bluecherry_client
+Terminal=false
+Categories=Player;
+GenericName=Bluecherry
+Keywords=surveillance;
diff --git a/linux/debian/usr/share/icons/hicolor/128x128/apps/bluecherry.png b/linux/debian/usr/share/icons/hicolor/128x128/apps/bluecherry.png
new file mode 100644
index 00000000..1832090e
Binary files /dev/null and b/linux/debian/usr/share/icons/hicolor/128x128/apps/bluecherry.png differ
diff --git a/linux/debian/usr/share/icons/hicolor/256x256/apps/bluecherry.png b/linux/debian/usr/share/icons/hicolor/256x256/apps/bluecherry.png
new file mode 100644
index 00000000..8e88eb3c
Binary files /dev/null and b/linux/debian/usr/share/icons/hicolor/256x256/apps/bluecherry.png differ
diff --git a/linux/debian/usr/share/metainfo/bluecherry.appdata.xml b/linux/debian/usr/share/metainfo/bluecherry.appdata.xml
new file mode 100644
index 00000000..a7f14a90
--- /dev/null
+++ b/linux/debian/usr/share/metainfo/bluecherry.appdata.xml
@@ -0,0 +1,42 @@
+
+
+ bluecherrydvr
+ Bluecherry
+
+ CC0-1.0
+
+ LicenseRef-proprietary=https://github.com/blueckerrydvr/unity/blob/master/LICENSE
+
+ pointing
+ keyboard
+ touch
+
+ Bluecherry DVR
+
+ bluecherrydvr.desktop
+
+
+
+
+ support@bluecherrydvr.com
+
\ No newline at end of file
diff --git a/linux/rpm/bluecherry.spec b/linux/rpm/bluecherry.spec
new file mode 100644
index 00000000..9a2c99ba
--- /dev/null
+++ b/linux/rpm/bluecherry.spec
@@ -0,0 +1,29 @@
+Name: bluecherrydvr
+Version: 3.0.0_beta8
+Release: 1
+Summary: Bluecherry client written in Flutter.
+License: EULA
+Requires: mpv, mpv-libs-devel
+AutoReqProv: no
+
+%define __os_install_post %{nil}
+
+%description
+Bluecherry client written in Flutter.
+
+%prep
+# no source
+
+%build
+# no source
+
+%install
+export DONT_STRIP=1
+mkdir -p %{buildroot}
+cp -rf linux/debian/usr/ %{buildroot}
+
+%files
+FILES_HERE
+
+%changelog
+# no changelog
\ No newline at end of file
diff --git a/packages/unity_video_player/unity_video_player_media_kit/lib/unity_video_player_media_kit.dart b/packages/unity_video_player/unity_video_player_media_kit/lib/unity_video_player_media_kit.dart
index 4268f1cb..2a63a0b6 100644
--- a/packages/unity_video_player/unity_video_player_media_kit/lib/unity_video_player_media_kit.dart
+++ b/packages/unity_video_player/unity_video_player_media_kit/lib/unity_video_player_media_kit.dart
@@ -269,9 +269,9 @@ class UnityVideoPlayerMediaKit extends UnityVideoPlayer {
}
@override
- void dispose() async {
- errorStream.cancel();
- mkPlayer.dispose();
+ Future dispose() async {
+ await errorStream.cancel();
+ await mkPlayer.dispose();
UnityVideoPlayerInterface.unregisterPlayer(this);
}
}
diff --git a/packages/unity_video_player/unity_video_player_platform_interface/lib/unity_video_player_platform_interface.dart b/packages/unity_video_player/unity_video_player_platform_interface/lib/unity_video_player_platform_interface.dart
index 7a3e57a7..49c4f7b5 100644
--- a/packages/unity_video_player/unity_video_player_platform_interface/lib/unity_video_player_platform_interface.dart
+++ b/packages/unity_video_player/unity_video_player_platform_interface/lib/unity_video_player_platform_interface.dart
@@ -312,5 +312,5 @@ abstract class UnityVideoPlayer {
Future release();
Future reset();
- void dispose();
+ Future dispose();
}