Skip to content

Commit

Permalink
Reestructure app folders (#216)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdlukaa authored Feb 18, 2024
2 parents dce6167 + 6f01a7d commit 0e59444
Show file tree
Hide file tree
Showing 72 changed files with 1,825 additions and 1,628 deletions.
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

0 comments on commit 0e59444

Please sign in to comment.