Skip to content

Commit 2af0fb2

Browse files
authored
Certificates and Devices Parsing (#235)
2 parents 3697975 + 8ec08f6 commit 2af0fb2

File tree

9 files changed

+92
-43
lines changed

9 files changed

+92
-43
lines changed

lib/models/device.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,11 @@ class Device {
172172

173173
factory Device.fromServerJson(Map map, Server server) {
174174
return Device(
175-
name: map['device_name'],
176-
id: int.tryParse(map['id']) ?? 0,
175+
name: map['device_name'] ?? map['device'] ?? 'Unkown Device',
176+
id: int.tryParse('${map['id']}') ?? 0,
177177
status: map['status'] == 'OK',
178-
resolutionX: int.tryParse(map['resolutionX']),
179-
resolutionY: int.tryParse(map['resolutionY']),
178+
resolutionX: int.tryParse('${map['resolutionX']}'),
179+
resolutionY: int.tryParse('${map['resolutionY']}'),
180180
server: server,
181181
hasPTZ: map['ptz_control_protocol'] != null,
182182
);

lib/providers/settings_provider.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import 'dart:io';
2121

22+
import 'package:bluecherry_client/models/server.dart';
2223
import 'package:bluecherry_client/providers/app_provider_interface.dart';
2324
import 'package:bluecherry_client/providers/downloads_provider.dart';
2425
import 'package:bluecherry_client/providers/update_provider.dart';
@@ -573,6 +574,18 @@ class SettingsProvider extends UnityProvider {
573574
await settings.delete();
574575
await initialize();
575576
}
577+
578+
/// Check if the server certificates passes
579+
///
580+
/// If [kAllowUntrustedCertificates] is enabled, it will return true.
581+
/// Otherwise, it will return the server's [Server.passedCertificates] value.
582+
bool checkServerCertificates(Server server) {
583+
if (kAllowUntrustedCertificates.value) {
584+
return true;
585+
}
586+
587+
return server.passedCertificates;
588+
}
576589
}
577590

578591
enum NotificationClickBehavior {

lib/screens/direct_camera.dart

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import 'package:bluecherry_client/models/device.dart';
2121
import 'package:bluecherry_client/models/server.dart';
2222
import 'package:bluecherry_client/providers/server_provider.dart';
23+
import 'package:bluecherry_client/providers/settings_provider.dart';
2324
import 'package:bluecherry_client/utils/constants.dart';
2425
import 'package:bluecherry_client/utils/extensions.dart';
2526
import 'package:bluecherry_client/utils/theme.dart';
@@ -108,17 +109,22 @@ class _DevicesForServer extends StatelessWidget {
108109
final theme = Theme.of(context);
109110
final loc = AppLocalizations.of(context);
110111
final servers = context.watch<ServersProvider>();
112+
final settings = context.watch<SettingsProvider>();
111113

112114
final isLoading = servers.isServerLoading(server);
113115

114116
final serverIndicator = SubHeader(
115117
server.name,
116118
materialType: MaterialType.canvas,
117-
subtext: !server.passedCertificates
118-
? loc.certificateNotPassed
119-
: server.online
120-
? loc.nDevices(server.devices.length)
121-
: loc.offline,
119+
subtext: () {
120+
if (!settings.checkServerCertificates(server)) {
121+
return loc.certificateNotPassed;
122+
} else if (server.online) {
123+
return loc.nDevices(server.devices.length);
124+
} else {
125+
return loc.offline;
126+
}
127+
}(),
122128
subtextStyle: TextStyle(
123129
color: !server.online ? theme.colorScheme.error : null,
124130
),

lib/screens/events_browser/events_screen_mobile.dart

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class _EventsScreenMobileState extends State<EventsScreenMobile> {
5555
final theme = Theme.of(context);
5656
final servers = context.watch<ServersProvider>();
5757
final loc = AppLocalizations.of(context);
58+
final settings = context.watch<SettingsProvider>();
5859

5960
final isLoading = context.watch<HomeProvider>().isLoadingFor(
6061
UnityLoadingReason.fetchingEventsHistory,
@@ -137,11 +138,15 @@ class _EventsScreenMobileState extends State<EventsScreenMobile> {
137138
style: const TextStyle(fontWeight: FontWeight.bold),
138139
),
139140
subtitle: Text(
140-
!server.passedCertificates
141-
? loc.certificateNotPassed
142-
: server.online
143-
? loc.nEvents(serverEvents.length)
144-
: loc.offline,
141+
() {
142+
if (!settings.checkServerCertificates(server)) {
143+
return loc.certificateNotPassed;
144+
} else if (server.online) {
145+
return loc.nEvents(serverEvents.length);
146+
} else {
147+
return loc.offline;
148+
}
149+
}(),
145150
),
146151
trailing: !server.online
147152
? Icon(

lib/screens/layouts/desktop/device_info_dialog.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,12 @@ class _DeviceInfoDialogState extends State<DeviceInfoDialog> {
6363
),
6464
),
6565
_buildInfoTile(loc.uri, widget.device.uri),
66-
_buildInfoTile(loc.resolution,
67-
'${widget.device.resolutionX}x${widget.device.resolutionY}'),
66+
_buildInfoTile(
67+
loc.resolution,
68+
'${widget.device.resolutionX ?? '${loc.unknown} '}'
69+
'x'
70+
'${widget.device.resolutionY ?? ' ${loc.unknown}'}',
71+
),
6872
_buildInfoTile(
6973
loc.isPtzSupported, widget.device.hasPTZ ? loc.yes : loc.no),
7074
_buildInfoTileWidget(

lib/screens/layouts/desktop/sidebar.dart

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class _DesktopSidebarState extends State<DesktopSidebar> {
4343

4444
final servers = context.watch<ServersProvider>();
4545
final view = context.watch<DesktopViewProvider>();
46+
final settings = context.watch<SettingsProvider>();
4647

4748
return SafeArea(
4849
top: false,
@@ -99,11 +100,15 @@ class _DesktopSidebarState extends State<DesktopSidebar> {
99100
child: SubHeader(
100101
server.name,
101102
materialType: MaterialType.canvas,
102-
subtext: !server.passedCertificates
103-
? loc.certificateNotPassed
104-
: server.online
105-
? loc.nDevices(devices.length)
106-
: loc.offline,
103+
subtext: () {
104+
if (!settings.checkServerCertificates(server)) {
105+
return loc.certificateNotPassed;
106+
} else if (server.online) {
107+
return loc.nDevices(devices.length);
108+
} else {
109+
return loc.offline;
110+
}
111+
}(),
107112
subtextStyle: TextStyle(
108113
color: !server.online
109114
? theme.colorScheme.error

lib/screens/layouts/desktop/stream_data.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,8 @@ class _StreamDataState extends State<StreamData> {
112112

113113
const borderSize = 4.0;
114114

115-
//This, basically, would
116-
// contain all the information about this stream - and provide
117-
// more options, such as adding/changing overlays.
115+
// This, basically, would contain all the information about this stream -
116+
// and provide more options, such as adding/changing overlays.
118117
return AlertDialog(
119118
title: RichText(
120119
text: TextSpan(

lib/screens/settings/shared/server_tile.dart

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,11 @@ class ServerTile extends StatelessWidget {
203203
!isLoading
204204
? [
205205
if (server.name != server.ip) server.ip,
206-
if (!server.passedCertificates)
207-
loc.certificateNotPassed
208-
else if (server.online)
206+
if (server.online)
209207
loc.nDevices(server.devices.length)
210208
else
211209
loc.offline,
210+
if (!server.passedCertificates) loc.certificateNotPassed
212211
].join(' • ')
213212
: loc.gettingDevices,
214213
overflow: TextOverflow.ellipsis,
@@ -246,6 +245,7 @@ class ServerCard extends StatelessWidget {
246245
final loc = AppLocalizations.of(context);
247246
final theme = Theme.of(context);
248247
final servers = context.watch<ServersProvider>();
248+
final settings = context.watch<SettingsProvider>();
249249

250250
final isLoading = servers.isServerLoading(server);
251251

@@ -299,17 +299,28 @@ class ServerCard extends StatelessWidget {
299299
style: theme.textTheme.bodySmall,
300300
),
301301
Text(
302-
!server.passedCertificates
303-
? loc.certificateNotPassed
304-
: !server.online
305-
? loc.offline
306-
: !isLoading
307-
? loc.nDevices(server.devices.length)
308-
: '',
302+
() {
303+
if (!settings.checkServerCertificates(server)) {
304+
return loc.certificateNotPassed;
305+
} else if (!server.online) {
306+
return loc.offline;
307+
} else if (!isLoading) {
308+
return loc.nDevices(server.devices.length);
309+
}
310+
311+
return '';
312+
}(),
309313
style: TextStyle(
310-
color: !server.online || !server.passedCertificates
311-
? theme.colorScheme.error
312-
: null,
314+
color: () {
315+
if (settings.checkServerCertificates(server)) {
316+
return theme.colorScheme.error;
317+
}
318+
if (!server.online) {
319+
return theme.colorScheme.error;
320+
}
321+
322+
return null;
323+
}(),
313324
),
314325
textAlign: TextAlign.center,
315326
),

lib/widgets/device_selector.dart

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import 'package:bluecherry_client/models/device.dart';
2121
import 'package:bluecherry_client/providers/server_provider.dart';
22+
import 'package:bluecherry_client/providers/settings_provider.dart';
2223
import 'package:bluecherry_client/utils/extensions.dart';
2324
import 'package:bluecherry_client/utils/theme.dart';
2425
import 'package:bluecherry_client/widgets/error_warning.dart';
@@ -80,9 +81,10 @@ class DeviceSelector extends StatelessWidget {
8081
@override
8182
Widget build(BuildContext context) {
8283
final theme = Theme.of(context);
83-
final servers = context.watch<ServersProvider>();
8484
final loc = AppLocalizations.of(context);
8585
final viewPadding = MediaQuery.viewPaddingOf(context);
86+
final servers = context.watch<ServersProvider>();
87+
final settings = context.watch<SettingsProvider>();
8688

8789
return Scaffold(
8890
appBar: AppBar(
@@ -109,11 +111,15 @@ class DeviceSelector extends StatelessWidget {
109111
child: SubHeader(
110112
server.name,
111113
materialType: MaterialType.canvas,
112-
subtext: !server.passedCertificates
113-
? loc.certificateNotPassed
114-
: server.online
115-
? loc.nDevices(server.devices.length)
116-
: loc.offline,
114+
subtext: () {
115+
if (!settings.checkServerCertificates(server)) {
116+
return loc.certificateNotPassed;
117+
} else if (server.online) {
118+
return loc.nDevices(server.devices.length);
119+
} else {
120+
return loc.offline;
121+
}
122+
}(),
117123
subtextStyle: TextStyle(
118124
color: !server.online || !server.passedCertificates
119125
? theme.colorScheme.error

0 commit comments

Comments
 (0)