Bluecherry DVR client to run across range of devices. 💙

Overview

Bluecherry Client

Bluecherry DVR client to run across range of devices.

Website • Purchase • Chat

[work-in-progress]

Download

Screenshots

Features

  • Ability to add multiple Bluecherry DVR servers.
  • Re-orderable drag-and-drop camera grid viewer. See multiple cameras in 4x4, 2x1 or 1x1 view.
  • 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.
  • Event notifications with camera screenshot thumbnail. View any camera or event directly by single notifcation tap.
  • Ability to snooze notifications directly from notification or within the app.
  • Cross-platform. Currently targets mobile platforms. Desktop support coming in future.

Videos

[demo data & footage is shown]

CameraGridView.mp4
TabsAndPinchToZoom.mp4

Translate

You may provide translations for the application to see it running in your own language. Please follow these steps:

Let's say, we're adding French (fr-FR) translation.

  1. Fork the repository & navigate here.
  2. Create a new file named fr-FR.json.
  3. Add your translations to your new fr-FR.json file in correspondence to existing en-US translations.
  4. Add your language here. Example:
  const kSupportedLocales = [
    Locale('en', 'US'),
+   Locale('fr', 'FR'),
  ];
  1. Send us a new pull-request. 🎉

NOTE: Do not translate the value of tip_count.

Bug-Reports

Send us details about any issues you discover in the issues or in the forums.

Contribute

The code in-general follows OOPs & uses provider for state-management because it is widely known by developers in Flutter community. Everything is well-documented (e.g. this) & other little quirks/tweaks at places are also noted.

Current source tree has following files:

lib
|
├───api                                                [API wrapper around Bluecherry DVR server.]
|   └──api.dart
│
├───models                                             [model classes to serve & bind type-safe data together in various entities.]
│   ├───device.dart
│   ├───event.dart
│   └───server.dart
│
├───providers                                          [core business logic of the application.]
│   ├───mobile_view_provider.dart                      [stores, provides & caches mobile camera layout etc.]
│   ├───server_provider.dart                           [stores, provides & caches multiple DVR servers added by the user.]
│   └───settings_provider.dart                         [stores, provides & caches various in-app configurations & settings.]
│
├───utils                                              [constant values, helper functions & theme-related stuff.]
│   ├───constants.dart
│   ├───methods.dart
│   └───theme.dart
│
├───widgets                                            [UI/UX & widgets used to display content.]
│   ├───add_server_wizard.dart
│   ├───device_grid.dart
│   ├───device_selector_screen.dart
│   ├───device_tile.dart
│   ├───device_tile_selector.dart
│   ├───direct_camera.dart
│   ├───events_screen.dart
│   ├───home.dart
│   ├───misc.dart
│   └───settings.dart
│
├───firebase_messaging_background_handler.dart         [handles in-app notifications, snoozing, thumbnails etc. & other Firebase related hooks.]
├───firebase_options.dart                              [auto-generated firebase configuration.]
└───main.dart                                          [entry-point of the application.]

Feel free to send any pull-requests to add any features you wish or fix any bugs you notice.

License

Copyright © 2022, Bluecherry DVR.

This project & work under this repository is licensed under GNU General Public License v3.0.

Comments
  • change layout order to 1, 2 & 4; rename

    change layout order to 1, 2 & 4; rename "Event Browser" to "History"; force portrait mode in AddServerWizard; add menu button in AddServerWizard

    Changes

    • change layout order to 1, 2 & 4.
    • rename "Event Browser" to "History".
    • force portrait mode in AddServerWizard.
    • add menu button in AddServerWizard.
    • no longer show "0 devices" for an added server while fetching details in Settings page.
    • show "Add new server" button in settings if no server is added, instead of showing "No servers added".
    • fix confirmation dialog upon removing a server (in Settings page) not closing after tapping "YES".
    • switch to flutter_localizations. see: https://docs.flutter.dev/development/accessibility-and-localization/internationalization.

    Related Issues

    Closes #11 Closes #12 Closes #13 Closes #14

    opened by alexmercerind 1
  • UI:  Unable to exit 'Add Server'

    UI: Unable to exit 'Add Server'

    Android: Back button doesn't work and you are stuck in the screen unless you force quit or proceed to the next step Apple: Same as above, but obviously no back button.

    bug 
    opened by curtishall 1
  • [feature] provide ability to configure cover/contain/fill/fit-width/fit-height of camera views

    [feature] provide ability to configure cover/contain/fill/fit-width/fit-height of camera views

    This is somewhat important. Being able to configure video aspect ratio / fitting options for various camera views in settings will be a good option.

    • Cover
    • Contain
    • Fill
    • Fit-Width
    • Fit-Height

    Not urgent ATM.

    enhancement 
    opened by alexmercerind 1
  • configure iOS compilation

    configure iOS compilation

    • [x] Add configuration for various third-party plugins & packages.
    • [x] Adding app icons & splash screen.
    • [x] Setup Firebase.
    • [x] Configure push notifications from Firebase (only works on real device, not XCode Simulator).
    • [x] ~~Add the CI for iOS to pump .ipa files.~~
    opened by alexmercerind 1
  • fix: iOS crash on quit from App Switcher

    fix: iOS crash on quit from App Switcher

    • fix: iOS crash on app quit from App Switcher.
      • This crash could be only reproduced on iOS 16 & took place when there was a playing camera & user made an attempt to dismiss app from the AppSwitcher.
      • Flutter engine seems to be deallocated first from the memory upon quit, while IJKPlayer's render callback referenced it even after deallocation. This slight race caused bad memory access.
      • Major changes in the fix may be seen here:
        • https://github.com/alexmercerind/fijkplayer/blob/master/ios/Classes/FijkPlayer.m#L240-L246
        • https://github.com/alexmercerind/fijkplayer/blob/master/ios/Classes/FijkPlugin.m#L107-L118
      • This was caused by Flutter engine being deallocated before IJKPlayer.
    • style: center AppBar subtitle in AddServerWizard.
    opened by alexmercerind 0
  • fix: iOS UI

    fix: iOS UI

    • fix: status bar icon brightness.
    • fix: SafeArea handling.
    • fix: camera tile labels clipped on newer iOS versions.
    • style: unify sub header styling.
    • chore: tweak translations.
    opened by alexmercerind 0
  • UI: Add server shouldn't be in landscape mode

    UI: Add server shouldn't be in landscape mode

    Tested on iOS / Android, if the phone is in landscape mode and you click 'Add Server' it defaults to adding the server however the buttons are missing and you can't scroll down.

    Forcing into portrait mode would be better.

    bug 
    opened by curtishall 0
  • feat: notification thumbnail & snooze buttons

    feat: notification thumbnail & snooze buttons

    other fixes, advancements & features include:

    • notification thumbnail & snooze buttons.
      • closes #1.
      • closes #2.
    • ability to configure whether to show direct-camera or events screen upon notification click.
    • exposed notification snoozing in application settings page.
    • theme related tweaks e.g. system navigation bar color.

    raised #5 to target iOS specific things. after that, we'll be done for the mobile platforms & i'll add a nice documentation about project.

    opened by alexmercerind 0
  • Integrated event player

    Integrated event player

    Currently, the event player shows only a snippet of the player.

    Proposal

    Implement an integrated event player for a specific camera, showing a complete timeline for the given camera

    References

    (253) Playback of Recorded Video from your NVR or DVR using SmartPSS - YouTube e mais 8 páginas - Pessoa 2 — Microsoft​ Edge 06_01_2023 13_46_32

    https://www.youtube.com/watch?v=pxje3ciJEUk&t=41s&ab_channel=CCTVCameraWorld

    enhancement 
    opened by bdlukaa 0
  • Add option to edit server information

    Add option to edit server information

    Currently you can not edit the server information (credentials / ip address / ports, etc) from inside the mobile app. You have to delete the server and add it again.

    enhancement 
    opened by curtishall 0
  • Initial desktop support

    Initial desktop support

    Initial desktop support

    • Created packages/unity_video_player, which contains the platform-specific code for video playback
    • Added adaptive navigation:
      • On small screens (< 640 px - phones), minimal side navigation is used (drawer).
      • On wide screens (640 px > - tablets), compact side navigation is used (compact navigation rail).
      • On extra wide screens (1008 px - desktop), top navigation is used
    • Added directionality support (right to left / left to right - https://api.flutter.dev/flutter/widgets/Directionality-class.html)
    • Added layout funcitonality:
      • Possibility to create multiple layouts
      • Cycle for layouts every 5 seconds, when enabled
      • Multiple layout types: ¹single view, ²multiple view and ³compact view
    • Created /installer, which contains info about the app installer (windows-only)

    For desktop: image

    For tablets: image

    opened by bdlukaa 2
Releases(1.1.0-build2)
Owner
null
RelativeScale is a simple custom sizing system for flutter widgets to achieve the same physical sizes across different devices.

RelativeScale is a simple custom sizing system for flutter widgets to achieve the same physical sizes across different devices. Usage It is VERY easy

xamantra 19 Nov 25, 2022
A productivity manager application, designed to sync across your devices

Potato A productivity manager application, designed to sync across your devices, it currently supports macOS! Demo Kapture.2022-08-22.at.11.10.44.mp4

Rohith Gilla 10 Sep 15, 2022
Custom calendar dialog widget for flutter with (multi select, single select, date range) mode

some calendar Custom calendar with Multi-select & range configurable calendar New Features Added View Mode Somecalendar #15 Help Maintenance I've take

Irvan Lutfi Gunawan 69 Jan 3, 2023
A flutter plugin to play Youtube Videos without API Key in range of Quality(144p, 240p,360p,480p,720p and 1080p).

Youtube Player Plugin This plugin is discontinued. Please use youtube_player_flutter which is an officially provided way of playing youtube videos, su

Sarbagya Dhaubanjar 120 Nov 13, 2022
Flutter package for Android and iOS allow you to show a wide range of hyperlinks either in the input field or in an article view

Tagtly package help you to detect a lot of hyperlink text such as.. email, url, social media tags, hashtag and more either when user type in text field or when appear a text read only.

Mohamed Nasr 4 Jul 25, 2022
An open-source unofficial GitHub mobile client, that aims to deliver the ultimate GitHub experience on mobile devices.

DioHub for Github Summary Features Roadmap Support Screenshots Build Instructions Summary DioHub is an open-source unofficial GitHub mobile client, th

Naman Shergill 401 Jan 4, 2023
Flutter widget to change `themeMode` during runtime and persist it across restarts.

theme_mode_handler Flutter widget to change themeMode during runtime and persist it across restarts. Motivation Flutter 1.9 introduced a new way to co

Arthur Denner 28 Oct 29, 2022
State Persistence - Persist state across app launches. By default this library store state as a local JSON file called `data.json` in the applications data directory. Maintainer: @slightfoot

State Persistence Persist state across app launches. By default this library store state as a local JSON file called data.json in the applications dat

Flutter Community 70 Sep 28, 2022
Demo app with continuous integration setup for auto across android/iOS app stores

demo_flutter_ci A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

null 0 Dec 25, 2021
Find a good meeting time across multiple timezones.

meeting_scheduler Adventures in scheduling across timezones. A project by the Adventures In [Dart, Flutter, Firebase] group. Goals: Help people find a

Adventures In [Dart, Flutter, Firebase] 3 May 23, 2022
Data Migrator - provide a universal translator for data by being portable, diverse, and efficient in migrating and converting data across discrete schemas

Data Migrator - provide a universal translator for data by being portable, diverse, and efficient in migrating and converting data across discrete schemas

Tanner Meade 77 Jan 2, 2023
This project uses transactions in Firebase(FirebaseAuth and FireStore) to send and receive virtual money across accounts

FinTech (WIP) This project uses transactions in Firebase(FirebaseAuth and FireStore) to send and receive virtual money across accounts. On account cre

Godson 4 Nov 15, 2022
An e-learning Application for students to gather knowledge across various domains from the web.

EduHub A new Flutter App with advanced features to help students to access varoius study materials and contents without seraching loads of websites an

SAGNIK SANYAL 5 Jul 22, 2022
Practice code of simple flutter app to explain how provider works as across the widget state management.

vdo A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is y

Syed Uzair 9 Nov 7, 2022
Flutter Multi-platform allows developers to unleash their app to run on the wide variety of different platforms with little or no change.

Flutter Multi-platform sample Flutter Multi-platform allows developers to unleash their app to run on the wide variety of different platforms with lit

MindInventory 22 Dec 31, 2022
An E-Commerce application developed on Flutter, which helps to run the app on Android / IOS / Windows's OS / MacOS / Web Browser from a single codebase

BuySmart An E-Commerce application developed on Flutter, which helps to run the app on Android / IOS / Windows's OS / MacOS / Web Browser from a singl

Sumit Kumar 11 Oct 10, 2022
Learn how to build a tensorflow model on Techable Machine and then run it on flutter app.

Ml With Flutter Learn how to build a tensorflow model on Techable Machine and then run it on flutter app. Youtube Tutorial Show Support Recommend Me O

Sanskar Tiwari 133 Jan 3, 2023
This is the standard Flutter template application, modified to run on desktop.

Desktop Flutter Example This is the standard Flutter template application, modified to run on desktop. The linux, macos, and windows directories serve

Sheikh Shofiullah 8 Sep 26, 2022
Run your MIT App Inventor projects on (nearly) any operating system!

xaif Run your MIT App Inventor projects on (nearly) any operating system! This tool is in an early development phase, see the disclaimer below. Prereq

null 14 Oct 17, 2022