You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.8 KiB
TypeScript
105 lines
3.8 KiB
TypeScript
import { defaults } from 'lodash';
|
|
import { LastMessageStatusType } from '../state/ducks/conversations';
|
|
|
|
export enum ConversationTypeEnum {
|
|
GROUP = 'group',
|
|
PRIVATE = 'private',
|
|
}
|
|
|
|
/**
|
|
* all: all notifications enabled, the default
|
|
* disabled: no notifications at all
|
|
* mentions_only: trigger a notification only on mentions of ourself
|
|
*/
|
|
export const ConversationNotificationSetting = ['all', 'disabled', 'mentions_only'] as const;
|
|
export type ConversationNotificationSettingType = typeof ConversationNotificationSetting[number];
|
|
|
|
export interface ConversationAttributes {
|
|
id: string;
|
|
type: string;
|
|
|
|
// 0 means inactive (undefined and null too but we try to get rid of them and only have 0 = inactive)
|
|
active_at: number;
|
|
|
|
displayNameInProfile?: string; // no matter the type of conversation, this is the real name as set by the user/name of the open or closed group
|
|
nickname?: string; // this is the name WE gave to that user (only applicable to private chats, not closed group neither opengroups)
|
|
|
|
profileKey?: string; // Consider this being a hex string if it is set
|
|
|
|
members: Array<string>; // members are all members for this group. zombies excluded
|
|
zombies: Array<string>; // only used for closed groups. Zombies are users which left but not yet removed by the admin
|
|
left: boolean;
|
|
expireTimer: number;
|
|
mentionedUs: boolean;
|
|
unreadCount: number;
|
|
lastMessageStatus: LastMessageStatusType;
|
|
|
|
/**
|
|
* lastMessage is actually just a preview of the last message text, shortened to 60 chars.
|
|
* This is to avoid filling the redux store with a huge last message when it's only used in the
|
|
* preview of a conversation (leftpane).
|
|
* The shortening is made in sql.ts directly.
|
|
*/
|
|
lastMessage: string | null;
|
|
lastJoinedTimestamp: number; // ClosedGroup: last time we were added to this group
|
|
groupAdmins: Array<string>; // for sogs and closed group: the admins of that group.
|
|
groupModerators: Array<string>; // for sogs only, this is the moderator in that room.
|
|
isKickedFromGroup: boolean;
|
|
|
|
subscriberCount: number;
|
|
readCapability: boolean;
|
|
writeCapability: boolean;
|
|
uploadCapability: boolean;
|
|
|
|
is_medium_group: boolean;
|
|
|
|
avatarPointer?: string; // this is the url of the avatar on the file server v2. we use this to detect if we need to redownload the avatar from someone (not used for opengroups)
|
|
avatarInProfile?: string; // this is the avatar path locally once downloaded and stored in the application attachments folder
|
|
avatarImageId?: number; //Avatar imageID is currently used only for opengroupv2. It's the fileID of the image uploaded and set as the sogs avatar
|
|
|
|
triggerNotificationsFor: ConversationNotificationSettingType;
|
|
isTrustedForAttachmentDownload: boolean;
|
|
isPinned: boolean;
|
|
isApproved: boolean;
|
|
didApproveMe: boolean;
|
|
|
|
/** The open group chat this conversation originated from (if from closed group) */
|
|
conversationIdOrigin?: string;
|
|
}
|
|
|
|
/**
|
|
* This function mutates optAttributes
|
|
* @param optAttributes the entry object attributes to set the defaults to.
|
|
*
|
|
* Test are in ConversationModels_test.ts
|
|
*/
|
|
export const fillConvoAttributesWithDefaults = (
|
|
optAttributes: ConversationAttributes
|
|
): ConversationAttributes => {
|
|
return defaults(optAttributes, {
|
|
members: [],
|
|
zombies: [],
|
|
groupAdmins: [],
|
|
|
|
unreadCount: 0,
|
|
lastJoinedTimestamp: 0,
|
|
subscriberCount: 0,
|
|
expireTimer: 0,
|
|
active_at: 0,
|
|
|
|
lastMessageStatus: undefined,
|
|
lastMessage: null,
|
|
|
|
triggerNotificationsFor: 'all', // if the settings is not set in the db, this is the default
|
|
|
|
isTrustedForAttachmentDownload: false, // we don't trust a contact until we say so
|
|
isPinned: false,
|
|
isApproved: false,
|
|
didApproveMe: false,
|
|
is_medium_group: false,
|
|
mentionedUs: false,
|
|
isKickedFromGroup: false,
|
|
left: false,
|
|
});
|
|
};
|