Skip to content

Commit 0e59444

Browse files
authored
Reestructure app folders (#216)
2 parents dce6167 + 6f01a7d commit 0e59444

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1825
-1628
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ lib
143143
│ ├───video_player.dart
144144
│ └───window.dart
145145
146+
├───screens [All the screens of the application.]
147+
146148
├───widgets [UI/UX & widgets used to display content.]
147149
148150
├───firebase_messaging_background_handler.dart [handles in-app notifications, snoozing, thumbnails etc. & other Firebase related hooks.]

lib/firebase_messaging_background_handler.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ import 'package:bluecherry_client/main.dart';
2828
import 'package:bluecherry_client/models/device.dart';
2929
import 'package:bluecherry_client/providers/server_provider.dart';
3030
import 'package:bluecherry_client/providers/settings_provider.dart';
31+
import 'package:bluecherry_client/screens/events_browser/events_screen.dart';
32+
import 'package:bluecherry_client/screens/players/live_player.dart';
3133
import 'package:bluecherry_client/utils/constants.dart';
3234
import 'package:bluecherry_client/utils/storage.dart';
3335
import 'package:bluecherry_client/utils/video_player.dart';
34-
import 'package:bluecherry_client/widgets/events/events_screen.dart';
35-
import 'package:bluecherry_client/widgets/player/live_player.dart';
3636
import 'package:firebase_core/firebase_core.dart';
3737
import 'package:firebase_messaging/firebase_messaging.dart';
3838
import 'package:flutter/material.dart';

lib/l10n/app_en.arb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,17 @@
5353
}
5454
}
5555
},
56-
"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!",
56+
"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!",
57+
"@serverNotAddedErrorDescription": {
58+
"placeholders": {
59+
"port": {
60+
"type": "String"
61+
},
62+
"rtspPort": {
63+
"type": "String"
64+
}
65+
}
66+
},
5767
"serverAlreadyAdded": "The {serverName} server is already added",
5868
"@serverAlreadyAdded": {
5969
"placeholders": {

lib/l10n/app_fr.arb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,17 @@
4949
"serverName": {}
5050
}
5151
},
52-
"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!",
52+
"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!",
53+
"@serverNotAddedErrorDescription": {
54+
"placeholders": {
55+
"port": {
56+
"type": "String"
57+
},
58+
"rtspPort": {
59+
"type": "String"
60+
}
61+
}
62+
},
5363
"serverAlreadyAdded": "Le serveur {serverName} a déjà été ajouté",
5464
"@serverAlreadyAdded": {
5565
"placeholders": {

lib/l10n/app_pl.arb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,17 @@
5353
}
5454
}
5555
},
56-
"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!",
56+
"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!",
57+
"@serverNotAddedErrorDescription": {
58+
"placeholders": {
59+
"port": {
60+
"type": "String"
61+
},
62+
"rtspPort": {
63+
"type": "String"
64+
}
65+
}
66+
},
5767
"serverAlreadyAdded": "The {serverName} server is already added",
5868
"@serverAlreadyAdded": {
5969
"placeholders": {

lib/l10n/app_pt.arb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,17 @@
5353
}
5454
}
5555
},
56-
"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!",
56+
"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!",
57+
"@serverNotAddedErrorDescription": {
58+
"placeholders": {
59+
"port": {
60+
"type": "String"
61+
},
62+
"rtspPort": {
63+
"type": "String"
64+
}
65+
}
66+
},
5767
"serverAlreadyAdded": "O {serverName} servidor já foi adicionado.",
5868
"@serverAlreadyAdded": {
5969
"placeholders": {

lib/main.dart

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ import 'package:bluecherry_client/providers/mobile_view_provider.dart';
3636
import 'package:bluecherry_client/providers/server_provider.dart';
3737
import 'package:bluecherry_client/providers/settings_provider.dart';
3838
import 'package:bluecherry_client/providers/update_provider.dart';
39+
import 'package:bluecherry_client/screens/downloads/close_dialog.dart';
40+
import 'package:bluecherry_client/screens/events_browser/events_screen.dart';
41+
import 'package:bluecherry_client/screens/home.dart';
42+
import 'package:bluecherry_client/screens/multi_window/single_camera_window.dart';
43+
import 'package:bluecherry_client/screens/multi_window/single_layout_window.dart';
44+
import 'package:bluecherry_client/screens/multi_window/window.dart';
45+
import 'package:bluecherry_client/screens/players/live_player.dart';
3946
import 'package:bluecherry_client/utils/app_links/app_links.dart' as app_links;
4047
import 'package:bluecherry_client/utils/logging.dart' as logging;
4148
import 'package:bluecherry_client/utils/methods.dart';
@@ -44,13 +51,6 @@ import 'package:bluecherry_client/utils/theme.dart';
4451
import 'package:bluecherry_client/utils/video_player.dart';
4552
import 'package:bluecherry_client/utils/window.dart';
4653
import 'package:bluecherry_client/widgets/desktop_buttons.dart';
47-
import 'package:bluecherry_client/widgets/downloads_manager.dart';
48-
import 'package:bluecherry_client/widgets/events/events_screen.dart';
49-
import 'package:bluecherry_client/widgets/home.dart';
50-
import 'package:bluecherry_client/widgets/multi_window/single_camera_window.dart';
51-
import 'package:bluecherry_client/widgets/multi_window/single_layout_window.dart';
52-
import 'package:bluecherry_client/widgets/multi_window/window.dart';
53-
import 'package:bluecherry_client/widgets/player/live_player.dart';
5454
import 'package:bluecherry_client/widgets/splash_screen.dart';
5555
import 'package:flutter/foundation.dart';
5656
import 'package:flutter/material.dart';
@@ -251,11 +251,7 @@ class _UnityAppState extends State<UnityApp>
251251
if (isPreventClose && mounted && context.mounted) {
252252
final downloadsManager = context.read<DownloadsManager>();
253253
if (downloadsManager.downloading.isNotEmpty) {
254-
final result = await showDialog<bool>(
255-
context: context,
256-
barrierDismissible: false,
257-
builder: (context) => const CloseDownloadsDialog(),
258-
);
254+
final result = await showCloseDownloadsDialog(context);
259255
if (result == null || !result) {
260256
return;
261257
}

lib/models/device.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import 'package:bluecherry_client/api/api.dart';
2323
import 'package:bluecherry_client/models/server.dart';
2424
import 'package:bluecherry_client/providers/server_provider.dart';
2525
import 'package:bluecherry_client/providers/settings_provider.dart';
26+
import 'package:bluecherry_client/screens/layouts/desktop/external_stream.dart';
2627
import 'package:bluecherry_client/utils/config.dart';
2728
import 'package:bluecherry_client/utils/extensions.dart';
28-
import 'package:bluecherry_client/widgets/device_grid/desktop/external_stream.dart';
2929
import 'package:flutter/foundation.dart';
3030

3131
class ExternalDeviceData {

lib/models/event.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class Event {
6767
.last
6868
.trim()
6969
.split(' ')
70-
.map((e) => e.uppercaseFirst())
70+
.map((e) => e.uppercaseFirst)
7171
.join(' ');
7272
}
7373

lib/widgets/direct_camera.dart renamed to lib/screens/direct_camera.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import 'package:bluecherry_client/utils/constants.dart';
2424
import 'package:bluecherry_client/utils/extensions.dart';
2525
import 'package:bluecherry_client/utils/theme.dart';
2626
import 'package:bluecherry_client/utils/video_player.dart';
27+
import 'package:bluecherry_client/widgets/drawer_button.dart';
2728
import 'package:bluecherry_client/widgets/error_warning.dart';
2829
import 'package:bluecherry_client/widgets/misc.dart';
2930
import 'package:bluecherry_client/widgets/search.dart';
@@ -201,7 +202,7 @@ class _DevicesForServer extends StatelessWidget {
201202
: Icons.videocam_off_outlined,
202203
),
203204
),
204-
title: Text(device.name.uppercaseFirst()),
205+
title: Text(device.name.uppercaseFirst),
205206
subtitle: Text([
206207
device.uri,
207208
'${device.resolutionX}x${device.resolutionY}',
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* This file is a part of Bluecherry Client (https://github.com/bluecherrydvr/unity).
3+
*
4+
* Copyright 2022 Bluecherry, LLC
5+
*
6+
* This program is free software; you can redistribute it and/or
7+
* modify it under the terms of the GNU General Public License as
8+
* published by the Free Software Foundation; either version 3 of
9+
* the License, or (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18+
*/
19+
20+
import 'package:bluecherry_client/providers/downloads_provider.dart';
21+
import 'package:bluecherry_client/screens/downloads/indicators.dart';
22+
import 'package:flutter/material.dart';
23+
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
24+
import 'package:provider/provider.dart';
25+
26+
Future<bool?> showCloseDownloadsDialog(BuildContext context) async {
27+
return showDialog<bool>(
28+
context: context,
29+
barrierDismissible: false,
30+
builder: (context) => const CloseDownloadsDialog(),
31+
);
32+
}
33+
34+
/// The dialog that appears when the user tries to close the app when there are
35+
/// downloads in progress.
36+
class CloseDownloadsDialog extends StatefulWidget {
37+
const CloseDownloadsDialog({super.key});
38+
39+
@override
40+
State<CloseDownloadsDialog> createState() => _CloseDownloadsDialogState();
41+
}
42+
43+
class _CloseDownloadsDialogState extends State<CloseDownloadsDialog> {
44+
bool _closeWhenDone = false;
45+
46+
@override
47+
Widget build(BuildContext context) {
48+
final downloadsManager = context.watch<DownloadsManager>();
49+
final loc = AppLocalizations.of(context);
50+
final navigator = Navigator.of(context);
51+
52+
return AlertDialog(
53+
title: Text(loc.nDownloadsProgress(downloadsManager.downloading.length)),
54+
content: Column(
55+
mainAxisSize: MainAxisSize.min,
56+
crossAxisAlignment: CrossAxisAlignment.start,
57+
children: [
58+
for (final entry in downloadsManager.downloading.entries)
59+
ListTile(
60+
dense: true,
61+
contentPadding: EdgeInsets.zero,
62+
trailing: SizedBox.fromSize(
63+
size: const Size(40.0, 40.0),
64+
child: DownloadProgressIndicator(progress: entry.value),
65+
),
66+
title: Text(entry.key.deviceName),
67+
subtitle: Text(entry.key.server.name),
68+
)
69+
],
70+
),
71+
actions: [
72+
TextButton(
73+
onPressed: () => navigator.pop<bool>(false),
74+
child: Text(loc.cancel),
75+
),
76+
OutlinedButton(
77+
onPressed: _closeWhenDone ? null : () => navigator.pop<bool>(true),
78+
child: Text(loc.closeAnyway),
79+
),
80+
FilledButton(
81+
onPressed: _closeWhenDone
82+
? null
83+
: () async {
84+
setState(() => _closeWhenDone = true);
85+
await downloadsManager.downloadsCompleter?.future;
86+
navigator.pop<bool>(true);
87+
},
88+
child: Text(loc.closeWhenDone),
89+
),
90+
],
91+
);
92+
}
93+
}

0 commit comments

Comments
 (0)