use of im.actor.runtime.annotations.Verified in project actor-platform by actorapp.
the class DialogsActor method onUserChanged.
@Verified
private Promise<Void> onUserChanged(User user) {
Dialog dialog = dialogs.getValue(user.peer().getUnuqueId());
if (dialog != null) {
// Ignore if nothing changed
if (dialog.getDialogTitle().equals(user.getName()) && equalsE(dialog.getDialogAvatar(), user.getAvatar())) {
return Promise.success(null);
}
// Update dialog peer info
Dialog updated = dialog.editPeerInfo(user.getName(), user.getAvatar());
addOrUpdateItem(updated);
updateSearch(updated);
}
return Promise.success(null);
}
use of im.actor.runtime.annotations.Verified in project actor-platform by actorapp.
the class DialogsActor method onHistoryLoaded.
@Verified
private Promise<Void> onHistoryLoaded(List<DialogHistory> history) {
ArrayList<Dialog> updated = new ArrayList<Dialog>();
for (DialogHistory dialogHistory : history) {
// Ignore already available dialogs
if (dialogs.getValue(dialogHistory.getPeer().getUnuqueId()) != null) {
continue;
}
PeerDesc peerDesc = buildPeerDesc(dialogHistory.getPeer());
if (peerDesc == null) {
continue;
}
ContentDescription description = ContentDescription.fromContent(dialogHistory.getContent());
DialogBuilder builder = new DialogBuilder().setPeer(dialogHistory.getPeer()).setDialogTitle(peerDesc.getTitle()).setDialogAvatar(peerDesc.getAvatar()).setSortKey(dialogHistory.getSortDate()).setRid(dialogHistory.getRid()).setTime(dialogHistory.getDate()).setMessageType(description.getContentType()).setText(description.getText()).setSenderId(dialogHistory.getSenderId()).setRelatedUid(description.getRelatedUser()).setUnreadCount(dialogHistory.getUnreadCount());
if (dialogHistory.isRead()) {
builder.updateKnownReadDate(dialogHistory.getDate());
builder.updateKnownReceiveDate(dialogHistory.getDate());
} else if (dialogHistory.isReceived()) {
builder.updateKnownReceiveDate(dialogHistory.getDate());
}
updated.add(builder.createDialog());
}
addOrUpdateItems(updated);
updateSearch(updated);
notifyState(true);
return Promise.success(null);
}
use of im.actor.runtime.annotations.Verified in project actor-platform by actorapp.
the class DialogsActor method onMessage.
@Verified
private Promise<Void> onMessage(Peer peer, Message message, boolean forceWrite, int counter) {
long start = im.actor.runtime.Runtime.getCurrentTime();
PeerDesc peerDesc = buildPeerDesc(peer);
if (peerDesc == null) {
Log.d("DialogsActor", "unknown peer desc");
return Promise.success(null);
}
if (message == null) {
// Ignore empty message if not forcing write
if (!forceWrite) {
Log.d("DialogsActor", "not force");
return Promise.success(null);
}
// Else perform chat clear
onChatClear(peer);
} else {
Dialog dialog = dialogs.getValue(peer.getUnuqueId());
ContentDescription contentDescription = ContentDescription.fromContent(message.getContent());
DialogBuilder builder = new DialogBuilder().setRid(message.getRid()).setTime(message.getDate()).setMessageType(contentDescription.getContentType()).setText(contentDescription.getText()).setRelatedUid(contentDescription.getRelatedUser()).setSenderId(message.getSenderId()).setDialogTitle(peerDesc.getTitle()).setDialogAvatar(peerDesc.getAvatar()).setIsBot(peerDesc.isBot()).setIsChannel(peerDesc.isChannel());
if (counter >= 0) {
builder.setUnreadCount(counter);
}
boolean forceUpdate = false;
boolean needUpdateSearch = false;
if (dialog != null) {
// Ignore old messages if no force
if (!forceWrite && dialog.getSortDate() > message.getSortDate()) {
Log.d("DialogsActor", "too old");
return Promise.success(null);
}
builder.setPeer(dialog.getPeer()).setSortKey(dialog.getSortDate()).updateKnownReceiveDate(dialog.getKnownReceiveDate()).updateKnownReadDate(dialog.getKnownReadDate());
// Do not push up dialogs for silent messages
if (!contentDescription.isSilent()) {
builder.setSortKey(message.getSortDate());
}
} else {
// Do not create dialogs for silent messages
if (contentDescription.isSilent()) {
Log.d("DialogsActor", "is silent in");
return Promise.success(null);
}
builder.setPeer(peer).setSortKey(message.getSortDate());
needUpdateSearch = true;
forceUpdate = true;
}
Dialog dialog1 = builder.createDialog();
addOrUpdateItem(dialog1);
if (needUpdateSearch) {
updateSearch(dialog1);
}
notifyState(forceUpdate);
}
return Promise.success(null);
}
use of im.actor.runtime.annotations.Verified in project actor-platform by actorapp.
the class UserRouter method onLoadFullUser.
//
// Users changed
//
@Verified
private void onLoadFullUser(int uid) {
if (requestedFullUsers.contains(uid)) {
return;
}
requestedFullUsers.add(uid);
freeze();
users().getValueAsync(uid).flatMap((Function<User, Promise<Tuple2<ResponseLoadFullUsers, User>>>) u -> {
if (!u.isHaveExtension()) {
ArrayList<ApiUserOutPeer> users = new ArrayList<>();
users.add(new ApiUserOutPeer(u.getUid(), u.getAccessHash()));
return api(new RequestLoadFullUsers(users)).map(responseLoadFullUsers -> new Tuple2<>(responseLoadFullUsers, u));
} else {
if (!getUserVM(uid).isInPhoneBook().get()) {
return checkIsInPhoneBook(u).flatMap(new Function<Void, Promise<Tuple2<ResponseLoadFullUsers, User>>>() {
@Override
public Promise<Tuple2<ResponseLoadFullUsers, User>> apply(Void aVoid) {
return Promise.failure(new RuntimeException("Already loaded"));
}
});
} else {
return Promise.failure(new RuntimeException("Already loaded"));
}
}
}).then(r -> {
User upd = r.getT2().updateExt(r.getT1().getFullUsers().get(0));
users().addOrUpdateItem(upd);
}).chain(r -> checkIsInPhoneBook(r.getT2().updateExt(r.getT1().getFullUsers().get(0)))).after((r, e) -> unfreeze());
}
Aggregations