9 changed files with 165 additions and 12 deletions
			
			
		| @ -0,0 +1,77 @@ | ||||
| part of '../neon.dart'; | ||||
| 
 | ||||
| abstract class NextPushBlocEvents {} | ||||
| 
 | ||||
| abstract class NextPushBlocStates { | ||||
|   BehaviorSubject get onNextPushSupported; | ||||
| } | ||||
| 
 | ||||
| class NextPushBloc extends Bloc implements NextPushBlocEvents, NextPushBlocStates { | ||||
|   NextPushBloc( | ||||
|     this._accountsBloc, | ||||
|     this._globalOptions, { | ||||
|     final bool disabled = false, | ||||
|   }) { | ||||
|     if (disabled) { | ||||
|       return; | ||||
|     } | ||||
|     Rx.merge([ | ||||
|       _globalOptions.pushNotificationsEnabled.stream, | ||||
|       _globalOptions.pushNotificationsDistributor.stream, | ||||
|       _globalOptions.pushNotificationsDistributor.values, | ||||
|       _accountsBloc.accounts, | ||||
|     ]).debounceTime(const Duration(milliseconds: 100)).listen((final _) async { | ||||
|       if (!_globalOptions.pushNotificationsEnabled.enabled.hasValue || | ||||
|           !_globalOptions.pushNotificationsEnabled.enabled.value || | ||||
|           !_globalOptions.pushNotificationsEnabled.hasValue || | ||||
|           !_globalOptions.pushNotificationsEnabled.value) { | ||||
|         return; | ||||
|       } | ||||
|       if (_globalOptions.pushNotificationsDistributor.value != null) { | ||||
|         return; | ||||
|       } | ||||
|       if (_globalOptions.pushNotificationsDistributor.values.value.containsKey(unifiedPushNextPushID)) { | ||||
|         // NextPush is already installed | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       var supported = false; | ||||
|       for (final account in _accountsBloc.accounts.value) { | ||||
|         if (!_supported.containsKey(account)) { | ||||
|           try { | ||||
|             _supported[account] = (await account.client.unifiedPushProvider.check()).success; | ||||
|           } catch (e, s) { | ||||
|             debugPrint(e.toString()); | ||||
|             debugPrint(s.toString()); | ||||
|             _supported[account] = false; | ||||
|           } | ||||
|         } | ||||
|         if (_supported[account]!) { | ||||
|           supported = true; | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (!supported) { | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       if (onNextPushSupported.hasValue) { | ||||
|         return; | ||||
|       } | ||||
|       onNextPushSupported.add(null); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   final AccountsBloc _accountsBloc; | ||||
|   final GlobalOptions _globalOptions; | ||||
|   final _supported = <Account, bool>{}; | ||||
| 
 | ||||
|   @override | ||||
|   void dispose() { | ||||
|     unawaited(onNextPushSupported.close()); | ||||
|   } | ||||
| 
 | ||||
|   @override | ||||
|   BehaviorSubject onNextPushSupported = BehaviorSubject(); | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue