@@ -3,9 +3,15 @@ import 'dart:async';
33import 'package:bloc/bloc.dart' ;
44import 'package:freezed_annotation/freezed_annotation.dart' ;
55import 'package:shiori/domain/enums/enums.dart' ;
6+ import 'package:shiori/domain/extensions/datetime_extensions.dart' ;
7+ import 'package:shiori/domain/models/dtos.dart' ;
8+ import 'package:shiori/domain/models/entities.dart' ;
69import 'package:shiori/domain/models/models.dart' ;
10+ import 'package:shiori/domain/services/api_service.dart' ;
11+ import 'package:shiori/domain/services/data_service.dart' ;
712import 'package:shiori/domain/services/device_info_service.dart' ;
813import 'package:shiori/domain/services/locale_service.dart' ;
14+ import 'package:shiori/domain/services/network_service.dart' ;
915import 'package:shiori/domain/services/resources_service.dart' ;
1016import 'package:shiori/domain/services/settings_service.dart' ;
1117import 'package:shiori/domain/services/telemetry_service.dart' ;
@@ -20,6 +26,9 @@ class SplashBloc extends Bloc<SplashEvent, SplashState> {
2026 final SettingsService _settingsService;
2127 final DeviceInfoService _deviceInfoService;
2228 final TelemetryService _telemetryService;
29+ final DataService _dataService;
30+ final ApiService _apiService;
31+ final NetworkService _networkService;
2332 final LanguageModel _language;
2433
2534 StreamSubscription ? _downloadStream;
@@ -29,12 +38,17 @@ class SplashBloc extends Bloc<SplashEvent, SplashState> {
2938 this ._settingsService,
3039 this ._deviceInfoService,
3140 this ._telemetryService,
41+ this ._dataService,
42+ this ._apiService,
43+ this ._networkService,
3244 LocaleService localeService,
3345 ) : _language = localeService.getLocaleWithoutLang (),
3446 super (const SplashState .loading ());
3547
3648 @override
3749 Stream <SplashState > mapEventToState (SplashEvent event) async * {
50+ await _sendTelemetryData ();
51+
3852 if (event is _Init ) {
3953 final noResourcesHasBeenDownloaded = _settingsService.noResourcesHasBeenDownloaded;
4054 //This is just to trigger a change in the ui
@@ -209,4 +223,23 @@ class SplashBloc extends Bloc<SplashEvent, SplashState> {
209223 return (type == AppResourceUpdateResultType .unknownError || type == AppResourceUpdateResultType .apiIsUnavailable) &&
210224 _settingsService.noResourcesHasBeenDownloaded;
211225 }
226+
227+ Future <void > _sendTelemetryData () async {
228+ final bool isNetworkAvailable = await _networkService.isInternetAvailable ();
229+ if (! isNetworkAvailable) {
230+ return ;
231+ }
232+ final List <Telemetry > telemetryData = _dataService.telemetry.getAll ();
233+ final bool send = telemetryData.isNotEmpty && telemetryData.length > 5 ;
234+ if (! send) {
235+ return ;
236+ }
237+
238+ final logs = telemetryData.map ((t) => SaveAppLogRequestDto (timestamp: t.createdAt.ticks, message: t.message)).toList ();
239+ final request = SaveAppLogsRequestDto (logs: logs);
240+ await Future .wait ([
241+ _apiService.sendTelemetryData (request),
242+ _dataService.telemetry.deleteByIds (telemetryData.map ((t) => t.id).toList ()),
243+ ]);
244+ }
212245}
0 commit comments