143 lines
4.0 KiB
Dart
143 lines
4.0 KiB
Dart
import "package:moxxyv2/shared/models/conversation.dart";
|
|
import "package:moxxyv2/shared/models/message.dart";
|
|
import "package:moxxyv2/shared/models/roster.dart";
|
|
import "package:moxxyv2/ui/constants.dart";
|
|
import "package:moxxyv2/ui/redux/state.dart";
|
|
import "package:moxxyv2/ui/redux/conversation/actions.dart";
|
|
import "package:moxxyv2/ui/redux/login/actions.dart";
|
|
import "package:moxxyv2/ui/redux/addcontact/actions.dart";
|
|
import "package:moxxyv2/ui/redux/roster/actions.dart";
|
|
import "package:moxxyv2/ui/redux/account/state.dart";
|
|
import "package:moxxyv2/ui/redux/account/actions.dart";
|
|
|
|
import "package:get_it/get_it.dart";
|
|
import "package:flutter_background_service/flutter_background_service.dart";
|
|
import "package:redux/redux.dart";
|
|
import "package:flutter_redux_navigation/flutter_redux_navigation.dart";
|
|
import "package:logging/logging.dart";
|
|
|
|
/// Called whenever the background service sends data to the UI isolate.
|
|
void handleBackgroundServiceData(Map<String, dynamic>? data) {
|
|
final store = GetIt.I.get<Store<MoxxyState>>();
|
|
if (data == null) {
|
|
GetIt.I.get<Logger>().warning("handleBackgroundServiceData: Received null");
|
|
return;
|
|
}
|
|
|
|
switch (data["type"]) {
|
|
case "PreStartResult": {
|
|
if (data["state"] == "logged_in") {
|
|
FlutterBackgroundService().sendData({
|
|
"type": "LoadConversationsAction"
|
|
});
|
|
|
|
store.dispatch(SetAccountAction(
|
|
state: AccountState(
|
|
jid: data["jid"],
|
|
displayName: data["displayName"],
|
|
avatarUrl: data["avatarUrl"]
|
|
)
|
|
));
|
|
|
|
store.dispatch(NavigateToAction.replace(conversationsRoute));
|
|
} else {
|
|
store.dispatch(NavigateToAction.replace(loginRoute));
|
|
}
|
|
}
|
|
break;
|
|
case "LoginSuccessfulEvent": {
|
|
store.dispatch(
|
|
LoginSuccessfulAction(
|
|
jid: data["jid"]!,
|
|
displayName: data["displayName"]!
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "ConversationCreatedEvent": {
|
|
store.dispatch(AddConversationAction(
|
|
conversation: Conversation.fromJson(data["conversation"]!)
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "ConversationUpdatedEvent": {
|
|
store.dispatch(
|
|
UpdateConversationAction(
|
|
conversation: Conversation.fromJson(data["conversation"]!)
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "MessageReceivedEvent": {
|
|
store.dispatch(
|
|
AddMessageAction(
|
|
message: Message.fromJson(data["message"]!)
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "AddMultipleRosterItems": {
|
|
final List<RosterItem> tmp = List<RosterItem>.from(data["items"]!.map((i) => RosterItem.fromJson(i)));
|
|
store.dispatch(
|
|
AddMultipleRosterItemsAction(
|
|
items: tmp
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "RemoveMultipleRosterItems": {
|
|
store.dispatch(
|
|
RemoveMultipleRosterItemsAction(
|
|
items: List<String>.from(data["items"]!)
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "LoadConversationsResult": {
|
|
final List<Conversation> tmp = List<Conversation>.from(data["conversations"]!.map((c) => Conversation.fromJson(c)));
|
|
store.dispatch(AddMultipleConversationsAction(
|
|
conversations: tmp
|
|
));
|
|
}
|
|
break;
|
|
case "LoadMessagesForJidResult": {
|
|
final List<Message> tmp = List<Message>.from(data["messages"]!.map((m) => Message.fromJson(m)));
|
|
store.dispatch(
|
|
AddMultipleMessagesAction(
|
|
conversationJid: data["jid"]!,
|
|
messages: tmp,
|
|
replace: true
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "AddToRosterResult": {
|
|
store.dispatch(
|
|
AddToRosterDoneAction(
|
|
result: data["result"]!,
|
|
msg: data["msg"],
|
|
jid: data["jid"]
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "RosterItemModifiedEvent": {
|
|
store.dispatch(
|
|
ModifyRosterItemAction(
|
|
item: RosterItem.fromJson(data["item"]!)
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
case "MessageSendResult": {
|
|
store.dispatch(
|
|
AddMessageAction(
|
|
message: Message.fromJson(data["message"]!)
|
|
)
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
}
|