tutanota/src/api/main/EntityEventController.js

41 lines
1.2 KiB
JavaScript
Raw Normal View History

2017-08-15 13:54:22 +02:00
// @flow
import {remove} from "../common/utils/ArrayUtils"
import {TypeRef} from "../common/EntityFunctions"
import {assertMainOrNode} from "../Env"
import type {LoginController} from "./LoginController"
2017-08-15 13:54:22 +02:00
assertMainOrNode()
export class EntityEventController {
_listeners: Array<EntityEventReceived>;
_logins: LoginController;
2017-08-15 13:54:22 +02:00
constructor(logins: LoginController) {
this._listeners = []
this._logins = logins
2017-08-15 13:54:22 +02:00
}
addListener(listener: EntityEventReceived) {
this._listeners.push(listener)
}
removeListener(listener: EntityEventReceived) {
remove(this._listeners, listener)
}
notificationReceived(entityUpdate: EntityUpdate) {
let typeRef = new TypeRef(entityUpdate.application, entityUpdate.type)
let promise = Promise.resolve()
if (this._logins.isUserLoggedIn()) {
// the UserController must be notified first as other event receivers depend on it to be up-to-date
2018-07-26 17:37:44 +02:00
promise = this._logins.getUserController()
.entityEventReceived(typeRef, entityUpdate.instanceListId, entityUpdate.instanceId, entityUpdate.operation)
}
promise.then(() => {
this._listeners.forEach(listener => {
listener(typeRef, entityUpdate.instanceListId, entityUpdate.instanceId, entityUpdate.operation);
})
2017-08-15 13:54:22 +02:00
})
}
}