Skip to content

Commit

Permalink
Add more Linux binaries (#134)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdlukaa authored Aug 3, 2023
2 parents bfc57bb + de7eab4 commit b7b55ba
Show file tree
Hide file tree
Showing 25 changed files with 440 additions and 58 deletions.
58 changes: 46 additions & 12 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down Expand Up @@ -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 }}
Expand All @@ -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/[email protected]
- 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/[email protected]
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
Expand All @@ -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 }}
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,11 @@ appimage-build/
Bluecherry-latest-x86_64.AppImage
Bluecherry-latest-x86_64.AppImage.zsync
AppDirversion.txt
AppDirassets/
AppDirassets/

*.deb
/linux/debian/usr/bin
/linux/debian/usr/share/bluecherry
/linux/debian/usr/share/bluecherry_client
*.tar.gz
rpmbuild/
96 changes: 59 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
<img align="left" src="https://avatars.githubusercontent.com/u/618428?s=200&v=4" width="72" height="72"></img>
<div align="center">
<img src="https://avatars.githubusercontent.com/u/618428?s=200&v=4" width="20%" height="20%" />
<h1><a href="https://www.bluecherrydvr.com/">Bluecherry Client</a></h1>
<img src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" />
<img src="https://img.shields.io/github/downloads/bluecherrydvr/unity/total.svg" />
<img src="https://github.com/bluecherrydvr/unity/actions/workflows/main.yml/badge.svg" />

<h1 align="left"><a href="https://www.bluecherrydvr.com/">Bluecherry Client</a></h1>
<br/>
<b text-align="center"> Bluecherry DVR client to run across range of devices.</b>
<br/>

[![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)
<a href="https://www.bluecherrydvr.com/">Website</a> •
<a href="https://www.bluecherrydvr.com/product/v3license/">Purchase</a> •
<a href="https://www.bluecherrydvr.com/chat/">Chat</a>
</div>



**Bluecherry DVR client to run across range of devices.**

<a href="https://www.bluecherrydvr.com/">Website</a> •
<a href="https://www.bluecherrydvr.com/product/v3license/">Purchase</a> •
<a href="https://www.bluecherrydvr.com/chat/">Chat</a>

## License

[![](https://camo.githubusercontent.com/317e8956b95d7cd7ebdc2a75b836f19dee3c1ae5fa0fce5b277338e648880d4f/68747470733a2f2f7777772e676e752e6f72672f67726170686963732f67706c76332d3132377835312e706e67)](https://www.gnu.org/licenses/gpl-3.0.en.html)
Expand All @@ -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:
<br /> $~~~~$
💻 For larger screens, compact and multiple layout views are available.
<br /> $~~~~~$📱 For smaller screens, see multiple cameras in 2x3, 2x2, 2x1 or 1x1 view
<br /> $~~~~~$👆 Re-orgderable drag-and-drop camera viewer
<br /> $~~~~~$🛞 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

Expand Down Expand Up @@ -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
Expand All @@ -106,6 +127,7 @@ lib
│ ├───methods.dart
│ ├───storage.dart
│ ├───theme.dart
│ ├───video_player.dart
│ └───window.dart
├───widgets [UI/UX & widgets used to display content.]
Expand Down
19 changes: 19 additions & 0 deletions lib/api/ptz.dart
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

import 'package:flutter/widgets.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

Expand Down
19 changes: 19 additions & 0 deletions lib/utils/storage.dart
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

import 'package:bluecherry_client/utils/constants.dart';
import 'package:flutter/foundation.dart';
import 'package:hive_flutter/hive_flutter.dart';
Expand Down
19 changes: 19 additions & 0 deletions lib/utils/video_player.dart
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

import 'package:bluecherry_client/models/device.dart';
import 'package:flutter/foundation.dart';
import 'package:unity_video_player/unity_video_player.dart';
Expand Down
19 changes: 19 additions & 0 deletions lib/widgets/collapsable_sidebar.dart
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

Expand Down
5 changes: 3 additions & 2 deletions lib/widgets/desktop_buttons.dart
Original file line number Diff line number Diff line change
Expand Up @@ -265,10 +265,11 @@ class _WindowButtonsState extends State<WindowButtons> 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();
Expand Down
2 changes: 0 additions & 2 deletions lib/widgets/events/events_screen.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
// ignore_for_file: overridden_fields

/*
* This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
*
Expand Down
19 changes: 19 additions & 0 deletions lib/widgets/events_timeline/desktop/timeline.dart
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

import 'dart:async';
import 'dart:math';

Expand Down
19 changes: 19 additions & 0 deletions lib/widgets/events_timeline/desktop/timeline_card.dart
Original file line number Diff line number Diff line change
@@ -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 <http://www.gnu.org/licenses/>.
*/

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';
Expand Down
Loading

0 comments on commit b7b55ba

Please sign in to comment.