Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reestructure app folders #216

Merged
merged 8 commits into from
Feb 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ lib
│ ├───video_player.dart
│ └───window.dart
├───screens [All the screens of the application.]
├───widgets [UI/UX & widgets used to display content.]
├───firebase_messaging_background_handler.dart [handles in-app notifications, snoozing, thumbnails etc. & other Firebase related hooks.]
Expand Down
4 changes: 2 additions & 2 deletions lib/firebase_messaging_background_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ import 'package:bluecherry_client/main.dart';
import 'package:bluecherry_client/models/device.dart';
import 'package:bluecherry_client/providers/server_provider.dart';
import 'package:bluecherry_client/providers/settings_provider.dart';
import 'package:bluecherry_client/screens/events_browser/events_screen.dart';
import 'package:bluecherry_client/screens/players/live_player.dart';
import 'package:bluecherry_client/utils/constants.dart';
import 'package:bluecherry_client/utils/storage.dart';
import 'package:bluecherry_client/utils/video_player.dart';
import 'package:bluecherry_client/widgets/events/events_screen.dart';
import 'package:bluecherry_client/widgets/player/live_player.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
Expand Down
12 changes: 11 additions & 1 deletion lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,17 @@
}
}
},
"serverNotAddedErrorDescription": "Please check the entered details and ensure the server is online.\n\nIf you are connecting remote, make sure the 7001 and 7002 ports are open to the Bluecherry server!",
"serverNotAddedErrorDescription": "Please check the entered details and ensure the server is online.\n\nIf you are connecting remote, make sure the {port} and {rtspPort} ports are open to the Bluecherry server!",
"@serverNotAddedErrorDescription": {
"placeholders": {
"port": {
"type": "String"
},
"rtspPort": {
"type": "String"
}
}
},
"serverAlreadyAdded": "The {serverName} server is already added",
"@serverAlreadyAdded": {
"placeholders": {
Expand Down
12 changes: 11 additions & 1 deletion lib/l10n/app_fr.arb
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,17 @@
"serverName": {}
}
},
"serverNotAddedErrorDescription": "S.V.P. vérifiez les informations entrées et assurez-vous que le serveur est en ligne.\n\nSi vous tentez de vous connectez à distance, assurez-vous que les ports 7001 et 7002 sont ouverts vers le serveur Bluecherry!",
"serverNotAddedErrorDescription": "Please check the entered details and ensure the server is online.\n\nIf you are connecting remote, make sure the {port} and {rtspPort} ports are open to the Bluecherry server!",
"@serverNotAddedErrorDescription": {
"placeholders": {
"port": {
"type": "String"
},
"rtspPort": {
"type": "String"
}
}
},
"serverAlreadyAdded": "Le serveur {serverName} a déjà été ajouté",
"@serverAlreadyAdded": {
"placeholders": {
Expand Down
12 changes: 11 additions & 1 deletion lib/l10n/app_pl.arb
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,17 @@
}
}
},
"serverNotAddedErrorDescription": "Sprawdź wprowadzone dane i upewnij się, że serwer jest online.\n\nJeśli łączysz się zdalnie to upewnij się, że porty na serwerzy Blueberry: 7001 i 7002, są otwarte!",
"serverNotAddedErrorDescription": "Please check the entered details and ensure the server is online.\n\nIf you are connecting remote, make sure the {port} and {rtspPort} ports are open to the Bluecherry server!",
"@serverNotAddedErrorDescription": {
"placeholders": {
"port": {
"type": "String"
},
"rtspPort": {
"type": "String"
}
}
},
"serverAlreadyAdded": "The {serverName} server is already added",
"@serverAlreadyAdded": {
"placeholders": {
Expand Down
12 changes: 11 additions & 1 deletion lib/l10n/app_pt.arb
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,17 @@
}
}
},
"serverNotAddedErrorDescription": "Por favor verifique os dados inseridos e certifique-se que o servidor está online.\n\nSe você está conectando remotamente, certifique-se que as portas 7001 e 7002 estão abertas para o servidor Bluecherry!",
"serverNotAddedErrorDescription": "Please check the entered details and ensure the server is online.\n\nIf you are connecting remote, make sure the {port} and {rtspPort} ports are open to the Bluecherry server!",
"@serverNotAddedErrorDescription": {
"placeholders": {
"port": {
"type": "String"
},
"rtspPort": {
"type": "String"
}
}
},
"serverAlreadyAdded": "O {serverName} servidor já foi adicionado.",
"@serverAlreadyAdded": {
"placeholders": {
Expand Down
20 changes: 8 additions & 12 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ import 'package:bluecherry_client/providers/mobile_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/screens/downloads/close_dialog.dart';
import 'package:bluecherry_client/screens/events_browser/events_screen.dart';
import 'package:bluecherry_client/screens/home.dart';
import 'package:bluecherry_client/screens/multi_window/single_camera_window.dart';
import 'package:bluecherry_client/screens/multi_window/single_layout_window.dart';
import 'package:bluecherry_client/screens/multi_window/window.dart';
import 'package:bluecherry_client/screens/players/live_player.dart';
import 'package:bluecherry_client/utils/app_links/app_links.dart' as app_links;
import 'package:bluecherry_client/utils/logging.dart' as logging;
import 'package:bluecherry_client/utils/methods.dart';
Expand All @@ -44,13 +51,6 @@ import 'package:bluecherry_client/utils/theme.dart';
import 'package:bluecherry_client/utils/video_player.dart';
import 'package:bluecherry_client/utils/window.dart';
import 'package:bluecherry_client/widgets/desktop_buttons.dart';
import 'package:bluecherry_client/widgets/downloads_manager.dart';
import 'package:bluecherry_client/widgets/events/events_screen.dart';
import 'package:bluecherry_client/widgets/home.dart';
import 'package:bluecherry_client/widgets/multi_window/single_camera_window.dart';
import 'package:bluecherry_client/widgets/multi_window/single_layout_window.dart';
import 'package:bluecherry_client/widgets/multi_window/window.dart';
import 'package:bluecherry_client/widgets/player/live_player.dart';
import 'package:bluecherry_client/widgets/splash_screen.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -251,11 +251,7 @@ class _UnityAppState extends State<UnityApp>
if (isPreventClose && mounted && context.mounted) {
final downloadsManager = context.read<DownloadsManager>();
if (downloadsManager.downloading.isNotEmpty) {
final result = await showDialog<bool>(
context: context,
barrierDismissible: false,
builder: (context) => const CloseDownloadsDialog(),
);
final result = await showCloseDownloadsDialog(context);
if (result == null || !result) {
return;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/models/device.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ import 'package:bluecherry_client/api/api.dart';
import 'package:bluecherry_client/models/server.dart';
import 'package:bluecherry_client/providers/server_provider.dart';
import 'package:bluecherry_client/providers/settings_provider.dart';
import 'package:bluecherry_client/screens/layouts/desktop/external_stream.dart';
import 'package:bluecherry_client/utils/config.dart';
import 'package:bluecherry_client/utils/extensions.dart';
import 'package:bluecherry_client/widgets/device_grid/desktop/external_stream.dart';
import 'package:flutter/foundation.dart';

class ExternalDeviceData {
Expand Down
2 changes: 1 addition & 1 deletion lib/models/event.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class Event {
.last
.trim()
.split(' ')
.map((e) => e.uppercaseFirst())
.map((e) => e.uppercaseFirst)
.join(' ');
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import 'package:bluecherry_client/utils/constants.dart';
import 'package:bluecherry_client/utils/extensions.dart';
import 'package:bluecherry_client/utils/theme.dart';
import 'package:bluecherry_client/utils/video_player.dart';
import 'package:bluecherry_client/widgets/drawer_button.dart';
import 'package:bluecherry_client/widgets/error_warning.dart';
import 'package:bluecherry_client/widgets/misc.dart';
import 'package:bluecherry_client/widgets/search.dart';
Expand Down Expand Up @@ -201,7 +202,7 @@ class _DevicesForServer extends StatelessWidget {
: Icons.videocam_off_outlined,
),
),
title: Text(device.name.uppercaseFirst()),
title: Text(device.name.uppercaseFirst),
subtitle: Text([
device.uri,
'${device.resolutionX}x${device.resolutionY}',
Expand Down
93 changes: 93 additions & 0 deletions lib/screens/downloads/close_dialog.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* 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/providers/downloads_provider.dart';
import 'package:bluecherry_client/screens/downloads/indicators.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';

Future<bool?> showCloseDownloadsDialog(BuildContext context) async {
return showDialog<bool>(
context: context,
barrierDismissible: false,
builder: (context) => const CloseDownloadsDialog(),
);
}

/// The dialog that appears when the user tries to close the app when there are
/// downloads in progress.
class CloseDownloadsDialog extends StatefulWidget {
const CloseDownloadsDialog({super.key});

@override
State<CloseDownloadsDialog> createState() => _CloseDownloadsDialogState();
}

class _CloseDownloadsDialogState extends State<CloseDownloadsDialog> {
bool _closeWhenDone = false;

@override
Widget build(BuildContext context) {
final downloadsManager = context.watch<DownloadsManager>();
final loc = AppLocalizations.of(context);
final navigator = Navigator.of(context);

return AlertDialog(
title: Text(loc.nDownloadsProgress(downloadsManager.downloading.length)),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
for (final entry in downloadsManager.downloading.entries)
ListTile(
dense: true,
contentPadding: EdgeInsets.zero,
trailing: SizedBox.fromSize(
size: const Size(40.0, 40.0),
child: DownloadProgressIndicator(progress: entry.value),
),
title: Text(entry.key.deviceName),
subtitle: Text(entry.key.server.name),
)
],
),
actions: [
TextButton(
onPressed: () => navigator.pop<bool>(false),
child: Text(loc.cancel),
),
OutlinedButton(
onPressed: _closeWhenDone ? null : () => navigator.pop<bool>(true),
child: Text(loc.closeAnyway),
),
FilledButton(
onPressed: _closeWhenDone
? null
: () async {
setState(() => _closeWhenDone = true);
await downloadsManager.downloadsCompleter?.future;
navigator.pop<bool>(true);
},
child: Text(loc.closeWhenDone),
),
],
);
}
}
Loading
Loading