All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.live.plugins.messenger.chat.ControlActionsManager Maven / Gradle / Ivy

The newest version!
package net.intelie.live.plugins.messenger.chat;

import net.intelie.live.*;
import net.intelie.live.plugins.feed.api.FeedDef;
import net.intelie.live.plugins.messenger.data.RoomData;
import net.intelie.live.plugins.messenger.data.UserData;
import net.intelie.live.plugins.messenger.data.UserRoomData;
import net.intelie.live.plugins.messenger.data.UserUpdateInfo;
import net.intelie.pipes.util.Escapes;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import static net.intelie.live.plugins.messenger.chat.EventUtils.toEvent;
import static net.intelie.live.plugins.messenger.chat.MessengerConstants.*;

public class ControlActionsManager {
    private static final List INDEX_FIELDS = Collections.singletonList(Event.TIMESTAMP);
    public static final String CONTROL_ACTION = "__messenger_control";
    public static final String ACTION_FIELD = "action";
    public static final String BROADCAST_FIELD = "broadcast";

    private final EventLobby lobby;
    private final LoggedUser user;

    public ControlActionsManager(Live live) throws Exception {
        this.lobby = live.engine().getEventLobby();
        this.user = live.auth().getLoggedUser();
        live.index().registerIndex(new IndexDef(CONTROL_ACTION, INDEX_FIELDS));
        MainStorageProvider storage = live.engine().getMainStorage();
        storage.ensureIndex(new IndexDef(CONTROL_ACTION, "uid"));
        storage.ensureIndex(new IndexDef(CONTROL_ACTION, "createdAt", "room.id"));
    }

    public void roomCreatedAction(RoomData roomData) {
        this.lobbyRoomAction(roomData, ROOM_CREATED_ACTION);
    }

    public void roomRenamedAction(String oldName, RoomData roomData) {
        HashMap map = commonEventFields(roomData, ROOM_RENAMED_ACTION);
        map.put("oldName", oldName);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    public void roomArchivedAction(RoomData roomData) {
        this.lobbyRoomAction(roomData, ROOM_ARCHIVED_ACTION);
    }

    public void roomDeletedAction(RoomData roomData) {
        this.lobbyRoomAction(roomData, ROOM_DELETED_ACTION);
    }

    public void roomRestoredAction(RoomData roomData) {
        this.lobbyRoomAction(roomData, ROOM_RESTORED_ACTION);
    }

    public void roomMutedAction(UserRoomData userRoomData) {
        HashMap map = commonEventFields(userRoomData, ROOM_MUTED_ACTION);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    public void roomFavoriteAction(UserRoomData userRoomData) {
        HashMap map = commonEventFields(userRoomData, ROOM_FAVORITE_ACTION);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    public void updateRoomUsersAction(RoomData roomData, List addedOrUpdatedUsers, List removedUsers) {
        HashMap map = commonEventFields(roomData, ROOM_USERS_UPDATED_ACTION);
        map.put("addedOrUpdatedUsers", addedOrUpdatedUsers);
        map.put("removedUsers", removedUsers);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    public void roomUserAddedAction(UserData user, RoomData roomData) {
        this.lobbyRoomUserAction(roomData, user, ROOM_USER_ADDED_ACTION);
    }

    public void roomUserRemovedAction(UserData user, RoomData roomData) {
        this.lobbyRoomUserAction(roomData, user, ROOM_USER_REMOVED_ACTION);
    }

    public void roomUserAdminChangedAction(UserData user, RoomData roomData) {
        this.lobbyRoomUserAction(roomData, user, ROOM_USER_ADMIN_CHANGED_ACTION);
    }

    public void userJoinedMessengerAction(UserData userData) {
        this.lobbyBroadCastAction(userData, USER_JOINED_MESSENGER_ACTION);
    }

    public void userLeftMessengerAction(UserData userData) {
        this.lobbyBroadCastAction(userData, USER_LEFT_MESSENGER_ACTION);
    }

    public FeedDef.FeedItem feedItem() {
        FeedDef.FeedItem item = new FeedDef.FeedItem();
        item.setType(CONTROL_ACTION);
        item.setTimestamp("createdAt");
        return item;
    }

    public FeedDef.FeedItem feedItem(String roomId) {
        FeedDef.FeedItem item = feedItem();
        item.setFilter("room->id!:" + Escapes.formatString(roomId));
        return item;
    }

    private HashMap commonEventFields(RoomData roomData, String action) {
        UserDef user = this.user.getUser();
        UserData userData = new UserData(user.getId(), user.getDisplayName());
        HashMap map = basicEvent();
        map.put("sender", userData);
        map.put("room", roomData);
        map.put(ACTION_FIELD, action);
        return map;
    }

    private void lobbyRoomAction(RoomData roomData, String action) {
        HashMap map = commonEventFields(roomData, action);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    private void lobbyBroadCastAction(UserData user, String action) {
        HashMap map = basicEvent();
        map.put("user", user);
        map.put(BROADCAST_FIELD, true);
        map.put(Event.SKIP_STORAGE, true);
        map.put(ACTION_FIELD, action);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    private void lobbyRoomUserAction(RoomData roomData, UserData userData, String action) {
        HashMap map = commonEventFields(roomData, action);
        map.put("user", userData);
        lobby.enter(CONTROL_ACTION, MESSENGER_EVENT_SRC, toEvent(map));
    }

    private static HashMap basicEvent() {
        HashMap map = new HashMap<>();
        String uid = UUID.randomUUID().toString().replace("-", "");
        map.put("uid", uid);
        map.put("createdAt", System.currentTimeMillis());
        return map;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy