Skip to content

Commit c310337

Browse files
authored
hotfix: Getting events in release mode when settings fails (#273)
2 parents b69a95e + b68cd6b commit c310337

File tree

16 files changed

+110
-66
lines changed

16 files changed

+110
-66
lines changed

lib/api/api.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919

2020
import 'dart:convert';
21+
import 'dart:io';
2122

2223
import 'package:bluecherry_client/api/api_helpers.dart';
2324
import 'package:bluecherry_client/models/device.dart';
@@ -52,6 +53,8 @@ class API {
5253
}
5354
}
5455

56+
static String get cookieHeader => HttpHeaders.cookieHeader;
57+
5558
/// Checks details of a [server] entered by the user.
5659
/// If the attributes present in [Server] are correct, then the
5760
/// returned object will have [Server.serverUUID] & [Server.cookie]
@@ -139,7 +142,7 @@ class API {
139142
},
140143
),
141144
headers: {
142-
if (server.cookie != null) 'Cookie': server.cookie!,
145+
if (server.cookie != null) API.cookieHeader: server.cookie!,
143146
},
144147
);
145148
// debugPrint(response.body);
@@ -207,7 +210,7 @@ class API {
207210
'/mobile-app-config.json',
208211
),
209212
headers: {
210-
'Cookie': server.cookie!,
213+
if (server.cookie != null) API.cookieHeader: server.cookie!,
211214
},
212215
);
213216
final body = jsonDecode(response.body);
@@ -235,8 +238,8 @@ class API {
235238
final response = await client.post(
236239
Uri.parse('${uri!}store-token'),
237240
headers: {
238-
'Cookie': server.cookie!,
239-
'Content-Type': 'application/json',
241+
API.cookieHeader: server.cookie!,
242+
HttpHeaders.contentTypeHeader: 'application/json',
240243
},
241244
body: jsonEncode(
242245
{
@@ -279,7 +282,7 @@ class API {
279282
final response = await client.post(
280283
Uri.parse('${uri!}remove-token'),
281284
headers: {
282-
'Cookie': server.cookie!,
285+
API.cookieHeader: server.cookie!,
283286
'Content-Type': 'application/json',
284287
},
285288
body: jsonEncode(

lib/api/events.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,12 @@ extension EventsExtension on API {
8585
if (deviceId != null) 'device_id': '$deviceId',
8686
},
8787
);
88-
final response =
89-
await API.client.get(uri, headers: {'Cookie': server.cookie!});
88+
final response = await API.client.get(
89+
uri,
90+
headers: {
91+
if (server.cookie != null) API.cookieHeader: server.cookie!,
92+
},
93+
);
9094

9195
var events = const Iterable<Event>.empty();
9296

lib/api/ptz.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1818
*/
1919

20+
import 'dart:io';
21+
2022
import 'package:bluecherry_client/api/api.dart';
2123
import 'package:bluecherry_client/models/device.dart';
2224
import 'package:flutter/widgets.dart';
@@ -116,7 +118,7 @@ extension PtzApiExtension on API {
116118
url,
117119
headers: {
118120
'Content-Type': 'application/x-www-form-urlencoded',
119-
'Cookie': server.cookie!,
121+
if (server.cookie != null) API.cookieHeader: server.cookie!,
120122
},
121123
);
122124

@@ -158,8 +160,8 @@ extension PtzApiExtension on API {
158160
final response = await API.client.get(
159161
url,
160162
headers: {
161-
'Content-Type': 'application/x-www-form-urlencoded',
162-
'Cookie': server.cookie!,
163+
HttpHeaders.contentTypeHeader: 'application/x-www-form-urlencoded',
164+
if (server.cookie != null) API.cookieHeader: server.cookie!,
163165
},
164166
);
165167

lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ Future<void> main(List<String> args) async {
153153
// wait time at the splash screen
154154
// settings provider needs to be initalized alone
155155
await SettingsProvider.ensureInitialized();
156+
await ServersProvider.ensureInitialized();
156157
await Future.wait([
157158
DownloadsManager.ensureInitialized(),
158159
MobileViewProvider.ensureInitialized(),
159160
DesktopViewProvider.ensureInitialized(),
160-
ServersProvider.ensureInitialized(),
161161
UpdateManager.ensureInitialized(),
162162
EventsProvider.ensureInitialized(),
163163
]);

lib/models/device.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,10 @@ class Device {
277277
);
278278

279279
try {
280-
var response = await API.client.get(uri);
280+
var response = await API.client.get(uri, headers: {
281+
if (device.server.cookie != null)
282+
API.cookieHeader: device.server.cookie!,
283+
});
281284

282285
if (response.statusCode == 200) {
283286
var ret = json.decode(response.body) as Map;

lib/providers/events_provider.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import 'package:bluecherry_client/providers/app_provider_interface.dart';
2424
import 'package:bluecherry_client/providers/server_provider.dart';
2525
import 'package:bluecherry_client/screens/events_browser/filter.dart';
2626
import 'package:bluecherry_client/utils/constants.dart';
27+
import 'package:bluecherry_client/utils/extensions.dart';
2728
import 'package:bluecherry_client/utils/logging.dart';
2829
import 'package:bluecherry_client/utils/storage.dart';
2930
import 'package:flutter/foundation.dart';
@@ -133,6 +134,19 @@ class EventsProvider extends UnityProvider {
133134

134135
selectedDevices =
135136
List<String>.from(data['selectedDevices'] as List).toSet();
137+
selectedDevices.removeWhere((device) {
138+
final server = ServersProvider.instance.servers.firstWhereOrNull(
139+
(server) => server.devices.any((d) => d.streamURL == device),
140+
);
141+
return server == null ||
142+
!server.devices.any((d) {
143+
if (d.streamURL == device) {
144+
return d.status;
145+
} else {
146+
return false;
147+
}
148+
});
149+
});
136150

137151
super.restore(notifyListeners: notifyListeners);
138152
}

lib/providers/settings_provider.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ class SettingsProvider extends UnityProvider {
435435
};
436436
}
437437

438-
// TODO(bdlukaa): remove this in future releases
438+
// TODO(bdlukaa): Remove this migration in future releases
439439
var _hasMigratedTimezone = false;
440440
late final kConvertTimeToLocalTimezone = _SettingsOption<bool>(
441441
def: true,

lib/utils/logging.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ void handleError(
4545
writeErrorToFile(error, stackTrace, context);
4646
}
4747

48-
Future<File> getLogFile() async {
48+
Future<File?> getLogFile() async {
4949
try {
5050
return File(path.join(supportDir.path, 'logs.txt'));
5151
} catch (e) {
52-
debugPrint('Error getting log file: $e');
53-
return File('./logs.txt');
52+
// debugPrint('Error getting log file: $e');
53+
return null;
5454
}
5555
}
5656

@@ -67,9 +67,8 @@ Future<void> writeErrorToFile(
6767
'[$time]Stack trace: $stackTrace';
6868

6969
final file = await getLogFile();
70-
71-
await file.writeAsString(errorLog, mode: FileMode.append);
72-
Logger.root.log(Level.INFO, 'Wrote log file to "${file.path}"');
70+
await file?.writeAsString(errorLog, mode: FileMode.append);
71+
Logger.root.log(Level.INFO, 'Wrote log file to "${file?.path}"');
7372
Logger.root.log(Level.SEVERE, errorLog);
7473
}
7574

@@ -78,8 +77,8 @@ Future<void> writeLogToFile(String text, {bool print = false}) async {
7877
final time = DateTime.now().toIso8601String();
7978
final file = await getLogFile();
8079

81-
await file.writeAsString('\n[$time] $text', mode: FileMode.append);
82-
if (print) Logger.root.log(Level.INFO, 'Wrote log file to "${file.path}"');
80+
await file?.writeAsString('\n[$time] $text', mode: FileMode.append);
81+
if (print) Logger.root.log(Level.INFO, 'Wrote log file to "${file?.path}"');
8382
}
8483
if (print) debugPrint(text);
8584
}

lib/utils/video_player.dart

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

2020
import 'dart:async';
2121

22+
import 'package:bluecherry_client/api/api.dart';
2223
import 'package:bluecherry_client/models/device.dart';
2324
import 'package:bluecherry_client/models/event.dart';
2425
import 'package:bluecherry_client/providers/settings_provider.dart';
@@ -100,7 +101,10 @@ class UnityPlayers with ChangeNotifier {
100101
};
101102
debugPrint('Initializing $source');
102103
controller.fallbackUrl = fallback;
103-
await controller.setDataSource(source);
104+
await controller.setDataSource(source, headers: {
105+
if (device.server.cookie != null)
106+
API.cookieHeader: device.server.cookie!,
107+
});
104108

105109
_reloadable.add(source);
106110
}
@@ -155,12 +159,20 @@ class UnityPlayers with ChangeNotifier {
155159
softwareZoom: settings().kSoftwareZooming.value,
156160
onLog: (message) {
157161
logStreamToFile(
158-
event.mediaURL?.toString() ?? 'Event ${event.title} (${event.id})',
162+
event.mediaURL == null
163+
? 'Event ${event.title} (${event.id})'
164+
: event.mediaPath,
159165
message,
160166
);
161167
},
162168
)
163-
..setDataSource(event.mediaPath.toString())
169+
..setDataSource(
170+
event.mediaPath,
171+
headers: {
172+
if (event.server.cookie != null)
173+
API.cookieHeader: event.server.cookie!,
174+
},
175+
)
164176
..setVolume(1.0)
165177
..setSpeed(1.0);
166178

linux/flutter/generated_plugins.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ list(APPEND FLUTTER_PLUGIN_LIST
1313
)
1414

1515
list(APPEND FLUTTER_FFI_PLUGIN_LIST
16-
media_kit_native_event_loop
1716
)
1817

1918
set(PLUGIN_BUNDLED_LIBRARIES)

packages/unity_video_player/unity_video_player_flutter/lib/unity_video_player_flutter.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,11 @@ class UnityVideoPlayerFlutter extends UnityVideoPlayer {
164164
_videoStream.stream.map((value) => value.isPlaying);
165165

166166
@override
167-
Future<void> setDataSource(String url, {bool autoPlay = true}) async {
167+
Future<void> setDataSource(
168+
String url, {
169+
bool autoPlay = true,
170+
Map<String, String>? headers,
171+
}) async {
168172
if (url == dataSource) return Future.value();
169173

170174
if (player != null) {
@@ -180,7 +184,10 @@ class UnityVideoPlayerFlutter extends UnityVideoPlayer {
180184
if (uri.scheme == 'file') {
181185
player = VideoPlayerController.file(File.fromUri(uri));
182186
} else {
183-
player = VideoPlayerController.networkUrl(uri);
187+
player = VideoPlayerController.networkUrl(
188+
uri,
189+
httpHeaders: headers ?? const <String, String>{},
190+
);
184191
}
185192

186193
try {

packages/unity_video_player/unity_video_player_main/lib/unity_video_player_main.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,20 @@ class UnityVideoPlayerMediaKit extends UnityVideoPlayer {
306306
}
307307

308308
@override
309-
Future<void> setDataSource(String url, {bool autoPlay = true}) {
309+
Future<void> setDataSource(
310+
String url, {
311+
bool autoPlay = true,
312+
Map<String, String>? headers,
313+
}) {
310314
if (url == dataSource) return Future.value();
311315
debugPrint('Playing $url');
312316
return ensureVideoControllerInitialized((controller) async {
313317
await mkPlayer.setPlaylistMode(PlaylistMode.loop);
314318
// do not use mkPlayer.add because it doesn't support auto play
315-
await mkPlayer.open(Playlist([Media(url)]), play: autoPlay);
319+
await mkPlayer.open(
320+
Playlist([Media(url, httpHeaders: headers)]),
321+
play: autoPlay,
322+
);
316323
});
317324
}
318325

packages/unity_video_player/unity_video_player_main/pubspec.yaml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ dependencies:
2222
# git:
2323
# url: https://github.com/media-kit/media-kit/
2424
# path: media_kit/
25-
media_kit_native_event_loop:
26-
git:
27-
url: https://github.com/media-kit/media-kit/
28-
path: media_kit_native_event_loop/
25+
# media_kit_native_event_loop:
26+
# git:
27+
# url: https://github.com/media-kit/media-kit/
28+
# path: media_kit_native_event_loop/
2929
# media_kit_video:
3030
# git:
3131
# url: https://github.com/media-kit/media-kit/
@@ -57,18 +57,18 @@ dev_dependencies:
5757
flutter_lints: ^2.0.0
5858

5959
dependency_overrides:
60-
media_kit:
61-
git:
62-
url: https://github.com/media-kit/media-kit/
63-
path: media_kit/
60+
# media_kit:
61+
# git:
62+
# url: https://github.com/media-kit/media-kit/
63+
# path: media_kit/
6464
#media_kit_native_event_loop:
6565
# git:
6666
# url: https://github.com/media-kit/media-kit/
6767
# path: media_kit_native_event_loop/
68-
media_kit_video:
69-
git:
70-
url: https://github.com/media-kit/media-kit/
71-
path: media_kit_video/
68+
# media_kit_video:
69+
# git:
70+
# url: https://github.com/media-kit/media-kit/
71+
# path: media_kit_video/
7272
# media_kit_libs_android_video:
7373
# git:
7474
# url: https://github.com/media-kit/media-kit/

packages/unity_video_player/unity_video_player_platform_interface/lib/unity_video_player_platform_interface.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,11 @@ abstract class UnityVideoPlayer with ChangeNotifier {
395395
/// Whether the media is seekable
396396
bool get isSeekable;
397397

398-
Future<void> setDataSource(String url, {bool autoPlay = true});
398+
Future<void> setDataSource(
399+
String url, {
400+
bool autoPlay = true,
401+
Map<String, String>? headers,
402+
});
399403
Future<void> setMultipleDataSource(
400404
Iterable<String> url, {
401405
bool autoPlay = true,

0 commit comments

Comments
 (0)