// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import {Preferences} from '@constants'; import DatabaseManager from '@database/manager'; import NetworkManager from '@init/network_manager'; import {queryCurrentUserId} from '@queries/servers/system'; import {forceLogoutIfNecessary} from './session'; export type MyPreferencesRequest = { preferences?: PreferenceType[]; error?: unknown; } export const fetchMyPreferences = async (serverUrl: string, fetchOnly = false): Promise => { let client; try { client = NetworkManager.getClient(serverUrl); } catch (error) { return {error}; } try { const preferences = await client.getMyPreferences(); if (!fetchOnly) { const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; if (operator) { await operator.handlePreferences({ prepareRecordsOnly: false, preferences, sync: true, }); } } return {preferences}; } catch (error) { forceLogoutIfNecessary(serverUrl, error as ClientErrorProps); return {error}; } }; export const saveFavoriteChannel = async (serverUrl: string, channelId: string, isFavorite: boolean) => { const operator = DatabaseManager.serverDatabases[serverUrl]?.operator; if (!operator) { return {error: `${serverUrl} database not found`}; } let client; try { client = NetworkManager.getClient(serverUrl); } catch (error) { return {error}; } try { // Todo: @shaz I think you'll need to add the category handler here so that the channel is added/removed from the favorites category const userId = await queryCurrentUserId(operator.database); const favPref: PreferenceType = { category: Preferences.CATEGORY_FAVORITE_CHANNEL, name: channelId, user_id: userId, value: String(isFavorite), }; const preferences = [favPref]; client.savePreferences(userId, preferences); await operator.handlePreferences({ preferences, prepareRecordsOnly: false, }); return {preferences}; } catch (error) { forceLogoutIfNecessary(serverUrl, error as ClientErrorProps); return {error}; } };