use of im.actor.core.entity.Group in project actor-platform by actorapp.
the class GroupRouter method editDescGroup.
private Promise<Void> editDescGroup(int groupId, Function<Group, Group> func) {
return forGroup(groupId, group -> {
Group g = func.apply(group);
groups().addOrUpdateItem(g);
return onGroupDescChanged(g);
});
}
use of im.actor.core.entity.Group in project actor-platform by actorapp.
the class SenderActor method doSendText.
// Sending text
public void doSendText(@NotNull Peer peer, @NotNull String text, @Nullable ArrayList<Integer> mentions, /*Ignored*/
@Nullable String markDownText, boolean autoDetect) {
text = text.trim();
long rid = RandomUtils.nextRid();
long date = createPendingDate();
long sortDate = date + 365 * 24 * 60 * 60 * 1000L;
if (autoDetect) {
mentions = new ArrayList<>();
if (peer.getPeerType() == PeerType.GROUP) {
Group group = getGroup(peer.getPeerId());
String lowText = text.toLowerCase();
if (group.getMembers() != null) {
for (GroupMember member : group.getMembers()) {
User user = getUser(member.getUid());
if (user.getNick() != null) {
String nick = "@" + user.getNick().toLowerCase();
// TODO: Better filtering
if (lowText.contains(nick + ":") || lowText.contains(nick + " ") || lowText.contains(" " + nick) || lowText.endsWith(nick) || lowText.equals(nick)) {
mentions.add(user.getUid());
}
}
}
}
}
}
TextContent content = TextContent.create(text, null, mentions);
Message message = new Message(rid, sortDate, date, myUid(), MessageState.PENDING, content);
context().getMessagesModule().getRouter().onOutgoingMessage(peer, message);
pendingMessages.getPendingMessages().add(new PendingMessage(peer, rid, content));
savePending();
performSendContent(peer, rid, content);
}
use of im.actor.core.entity.Group in project actor-platform by actorapp.
the class GlobalSearchSource method loadGlobalResults.
private void loadGlobalResults(String query, ArrayList<SearchResult> localResults, Consumer<List<SearchResult>> callback) {
context().getSearchModule().findPeers(query).then(r -> {
ArrayList<SearchResult> results = new ArrayList<>();
outer: for (PeerSearchEntity peerSearch : r) {
for (SearchResult l : localResults) {
if (peerSearch.getPeer().equals(l.getPeer())) {
continue outer;
}
}
if (peerSearch.getPeer().getPeerType() == PeerType.GROUP) {
Group group = context().getGroupsModule().getGroups().getValue(peerSearch.getPeer().getPeerId());
results.add(new SearchResult(peerSearch.getPeer(), group.getAvatar(), group.getTitle(), peerSearch.getOptMatchString()));
} else if (peerSearch.getPeer().getPeerType() == PeerType.PRIVATE) {
UserVM user = context().getUsersModule().getUsers().get(peerSearch.getPeer().getPeerId());
results.add(new SearchResult(peerSearch.getPeer(), user.getAvatar().get(), user.getName().get(), peerSearch.getOptMatchString()));
}
}
if (results.size() > 0) {
ArrayList<SearchResult> combined = new ArrayList<>();
combined.addAll(localResults);
combined.addAll(results);
callback.apply(combined);
}
});
}
use of im.actor.core.entity.Group in project actor-platform by actorapp.
the class RouterActor method notifyActiveDialogsVM.
private void notifyActiveDialogsVM() {
int counter = 0;
ArrayList<DialogGroup> groups = new ArrayList<>();
for (ActiveDialogGroup i : activeDialogStorage.getGroups()) {
ArrayListDialogSmall dialogSmalls = new ArrayListDialogSmall();
for (Peer p : i.getPeers()) {
String title;
Avatar avatar;
if (p.getPeerType() == PeerType.GROUP) {
Group group = getGroup(p.getPeerId());
title = group.getTitle();
avatar = group.getAvatar();
} else if (p.getPeerType() == PeerType.PRIVATE) {
User user = getUser(p.getPeerId());
title = user.getName();
avatar = user.getAvatar();
} else {
continue;
}
int unreadCount = conversationStates.getValue(p.getUnuqueId()).getUnreadCount();
counter += unreadCount;
dialogSmalls.add(new DialogSmall(p, title, avatar, unreadCount));
}
groups.add(new DialogGroup(i.getTitle(), i.getKey(), dialogSmalls));
}
context().getMessagesModule().getDialogGroupsVM().getGroupsValueModel().change(groups);
context().getConductor().getGlobalStateVM().onGlobalCounterChanged(counter);
}
use of im.actor.core.entity.Group in project actor-platform by actorapp.
the class PresenceActor method subscribe.
@Verified
private void subscribe(Peer peer) {
if (peer.getPeerType() == PeerType.PRIVATE) {
// Already subscribed
if (uids.contains(peer.getPeerId())) {
return;
}
User user = getUser(peer.getPeerId());
if (user == null) {
return;
}
// Subscribing to user online sates
uids.add(user.getUid());
} else if (peer.getPeerType() == PeerType.GROUP) {
// Already subscribed
if (gids.contains(peer.getPeerId())) {
return;
}
Group group = getGroup(peer.getPeerId());
if (group == null) {
return;
}
// Ignore subscription to channels
if (group.getGroupType() == GroupType.CHANNEL) {
return;
}
// Subscribing to group online sates
gids.add(peer.getPeerId());
} else {
return;
}
// Adding Pending Peer
if (pendingPeers.contains(peer)) {
return;
}
pendingPeers.add(peer);
onCheckQueue();
}
Aggregations