95 lines
3.0 KiB
Dart
95 lines
3.0 KiB
Dart
import 'package:bloc/bloc.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
import 'package:get_it/get_it.dart';
|
|
import 'package:moxplatform/moxplatform.dart';
|
|
import 'package:moxxyv2/shared/commands.dart';
|
|
import 'package:moxxyv2/shared/events.dart';
|
|
import 'package:moxxyv2/shared/models/omemo_device.dart';
|
|
import 'package:moxxyv2/ui/bloc/navigation_bloc.dart';
|
|
import 'package:moxxyv2/ui/constants.dart';
|
|
import 'package:moxxyv2/ui/helpers.dart';
|
|
|
|
part 'devices_bloc.freezed.dart';
|
|
part 'devices_event.dart';
|
|
part 'devices_state.dart';
|
|
|
|
class DevicesBloc extends Bloc<DevicesEvent, DevicesState> {
|
|
DevicesBloc() : super(DevicesState()) {
|
|
on<DevicesRequestedEvent>(_onRequested);
|
|
on<DeviceEnabledSetEvent>(_onDeviceEnabledSet);
|
|
on<SessionsRecreatedEvent>(_onSessionsRecreated);
|
|
on<DeviceVerifiedEvent>(_onDeviceVerified);
|
|
}
|
|
|
|
Future<void> _onRequested(DevicesRequestedEvent event, Emitter<DevicesState> emit) async {
|
|
emit(state.copyWith(working: true, jid: event.jid));
|
|
|
|
GetIt.I.get<NavigationBloc>().add(
|
|
PushedNamedEvent(
|
|
const NavigationDestination(devicesRoute),
|
|
),
|
|
);
|
|
|
|
// ignore: cast_nullable_to_non_nullable
|
|
final result = await MoxplatformPlugin.handler.getDataSender().sendData(
|
|
GetConversationOmemoFingerprintsCommand(
|
|
jid: event.jid,
|
|
),
|
|
) as GetConversationOmemoFingerprintsResult;
|
|
|
|
emit(
|
|
state.copyWith(
|
|
working: false,
|
|
devices: result.fingerprints,
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<void> _onDeviceEnabledSet(DeviceEnabledSetEvent event, Emitter<DevicesState> emit) async {
|
|
// ignore: cast_nullable_to_non_nullable
|
|
final result = await MoxplatformPlugin.handler.getDataSender().sendData(
|
|
SetOmemoDeviceEnabledCommand(
|
|
jid: state.jid,
|
|
deviceId: event.deviceId,
|
|
enabled: event.enabled,
|
|
),
|
|
) as GetConversationOmemoFingerprintsResult;
|
|
emit(state.copyWith(devices: result.fingerprints));
|
|
}
|
|
|
|
Future<void> _onSessionsRecreated(SessionsRecreatedEvent event, Emitter<DevicesState> emit) async {
|
|
// ignore: cast_nullable_to_non_nullable
|
|
await MoxplatformPlugin.handler.getDataSender().sendData(
|
|
RecreateSessionsCommand(jid: state.jid),
|
|
awaitable: false,
|
|
);
|
|
emit(state.copyWith(devices: <OmemoDevice>[]));
|
|
|
|
GetIt.I.get<NavigationBloc>().add(PoppedRouteEvent());
|
|
}
|
|
|
|
Future<void> _onDeviceVerified(DeviceVerifiedEvent event, Emitter<DevicesState> emit) async {
|
|
final result = isVerificationUriValid(
|
|
state.devices,
|
|
event.uri,
|
|
state.jid,
|
|
event.deviceId,
|
|
);
|
|
if (result == -1) return;
|
|
|
|
final devices = List<OmemoDevice>.from(state.devices);
|
|
devices[result] = devices[result].copyWith(
|
|
verified: true,
|
|
);
|
|
emit(state.copyWith(devices: devices));
|
|
|
|
await MoxplatformPlugin.handler.getDataSender().sendData(
|
|
MarkOmemoDeviceAsVerifiedCommand(
|
|
jid: state.jid,
|
|
deviceId: event.deviceId,
|
|
),
|
|
awaitable: false,
|
|
);
|
|
}
|
|
}
|