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

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

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

import net.intelie.live.SettingsNode;
import net.intelie.live.SettingsOptions;
import net.intelie.live.SettingsRoot;
import net.intelie.live.plugins.messenger.data.UserRoomData;

public class UserRoomSettingsManager {
    private static final String LASTREAD_PREFIX = "messages/";
    private static final String LASTREAD_SUFFIX = "/lastRead";
    private final SettingsNode nodeSettings;
    private final SettingsRoot rootSettings;

    public UserRoomSettingsManager(SettingsRoot rootSettings) {
        this.rootSettings = rootSettings;
        this.nodeSettings = this.rootSettings.home().cd("user-config");
    }

    public synchronized UserRoomState setRoomMuted(Integer userId, String roomId, boolean opt) {
        UserRoomState userRoomState = getUserRoomState(userId, roomId);
        userRoomState.setMuted(opt);
        return writeUserRoomState(userId, roomId, userRoomState);
    }

    public synchronized UserRoomState setRoomFavorite(Integer userId, String roomId, boolean opt) {
        UserRoomState userRoomState = getUserRoomState(userId, roomId);
        userRoomState.setFavorite(opt);
        return writeUserRoomState(userId, roomId, userRoomState);
    }

    public synchronized UserRoomState getUserRoomState(Integer userId, String roomId) {
        UserRoomState state = nodeSettings.cd(userId.toString()).cd(roomId).get(UserRoomState.class);
        if (state != null){
            return state;
        }

        return addRoomToUserConfig(userId, roomId);
    }

    public synchronized UserRoomState setLastRead(Integer userId, String roomId, UserRoomData.LastReadData data) {
        UserRoomState userRoomState = getUserRoomState(userId, roomId);
        userRoomState.lastReadState().setTimestamp(data.getTimestamp());
        userRoomState.lastReadState().setUid(data.getUid());
        return writeUserRoomState(userId, roomId, userRoomState);
    }

    private synchronized UserRoomState addRoomToUserConfig(Integer userId, String roomId) {
        Long oldLastReadTimestamp = getOldLastReadTimestampTicket(userId, roomId);
        UserRoomState userRoomState = new UserRoomState(roomId);
        if (oldLastReadTimestamp != null) {
            userRoomState.lastReadState().setTimestamp(oldLastReadTimestamp);
        }
        writeUserRoomState(userId, roomId, userRoomState);
        return userRoomState;
    }

    private UserRoomState writeUserRoomState(Integer userId, String roomId, UserRoomState state) {
        SettingsOptions options = new SettingsOptions();
        options = options.enableLog(false);
        nodeSettings.withOptions(options, () -> {
            nodeSettings.cd(userId.toString()).cd(roomId).set(state);
            return null;
        });
        return state;
    }

    private Long getOldLastReadTimestampTicket(Integer userId, String roomId) {
        String path = LASTREAD_PREFIX + roomId + LASTREAD_SUFFIX;
        return rootSettings.privateUser(userId).cd("ui").cd(path).get(Long.class);
    }

//    public void setLastRead(String channel, Long timestamp) {
//        lastReadSettingsNode(channel).set(timestamp);
//    }
//
//    private SettingsNode lastReadSettingsNode(String channel) {
//        UserDef user = loggedUser.getUser();
//        String path = LASTREAD_PREFIX + channel + LASTREAD_SUFFIX;
//        return settings.privateUser(user.getId()).cd("ui").cd(path);
//    }
//
//    private Long getLastReadPlusOne(String channel) {
//        Long value = lastReadSettingsNode(channel).get(Long.class);
//        if (value != null)
//            value += 1;
//        return value;
//    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy