From 77b56a94aed69a8d78aab74009b282de5dcd85b9 Mon Sep 17 00:00:00 2001 From: IC Rainbow Date: Thu, 21 Dec 2023 13:23:40 +0200 Subject: [PATCH] resolve comments --- src/Simplex/Chat.hs | 20 +++++----- src/Simplex/Chat/Messages.hs | 37 +++++++++---------- .../Migrations/M20231219_notes_folders.hs | 8 ++-- src/Simplex/Chat/Store/Messages.hs | 28 +++++++------- src/Simplex/Chat/Types.hs | 8 ++-- src/Simplex/Chat/View.hs | 2 +- 6 files changed, 51 insertions(+), 52 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 6ea16719b0..b0a5416aff 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -611,8 +611,8 @@ processChatCommand = \case CTGroup -> do groupChat <- withStore (\db -> getGroupChat db user cId pagination search) pure $ CRApiChat user (AChat SCTGroup groupChat) - CTNotes -> do - error "TODO: APIGetChat.CTNotes" + CTLocal -> do + error "TODO: APIGetChat.CTLocal" CTContactRequest -> pure $ chatCmdError (Just user) "not implemented" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" APIGetChatItems pagination search -> withUser $ \user -> do @@ -761,7 +761,7 @@ processChatCommand = \case quoteData ChatItem {chatDir = CIGroupSnd, content = CISndMsgContent qmc} membership' = pure (qmc, CIQGroupSnd, True, membership') quoteData ChatItem {chatDir = CIGroupRcv m, content = CIRcvMsgContent qmc} _ = pure (qmc, CIQGroupRcv $ Just m, False, m) quoteData _ _ = throwChatError CEInvalidQuote - CTNotes -> pure $ chatCmdError (Just user) "TODO: send note" + CTLocal -> pure $ chatCmdError (Just user) "TODO: send local" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" where @@ -863,7 +863,7 @@ processChatCommand = \case else pure $ CRChatItemNotChanged user (AChatItem SCTGroup SMDSnd (GroupChat gInfo) ci) _ -> throwChatError CEInvalidChatItemUpdate CChatItem SMDRcv _ -> throwChatError CEInvalidChatItemUpdate - CTNotes -> pure $ chatCmdError (Just user) "TODO: update note" + CTLocal -> pure $ chatCmdError (Just user) "TODO: update local" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" APIDeleteChatItem (ChatRef cType chatId) itemId mode -> withUser $ \user -> withChatLock "deleteChatItem" $ case cType of @@ -888,7 +888,7 @@ processChatCommand = \case (SndMessage {msgId}, _) <- sendGroupMessage user gInfo ms $ XMsgDel itemSharedMId Nothing delGroupChatItem user gInfo ci msgId Nothing (CIDMBroadcast, _, _, _) -> throwChatError CEInvalidChatItemDelete - CTNotes -> pure $ chatCmdError (Just user) "TODO: APIDeleteChatItem.Note" + CTLocal -> pure $ chatCmdError (Just user) "TODO: APIDeleteChatItem.Local" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" APIDeleteMemberChatItem gId mId itemId -> withUser $ \user -> withChatLock "deleteChatItem" $ do @@ -939,7 +939,7 @@ processChatCommand = \case r = ACIReaction SCTGroup SMDSnd (GroupChat g) $ CIReaction CIGroupSnd ci' createdAt reaction pure $ CRChatItemReaction user add r _ -> throwChatError $ CECommandError "reaction not possible - no shared item ID" - CTNotes -> pure $ chatCmdError (Just user) "TODO: note reactions" + CTLocal -> pure $ chatCmdError (Just user) "TODO: note reactions" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" where @@ -971,8 +971,7 @@ processChatCommand = \case startProximateTimedItemThread user (ChatRef CTGroup chatId, itemId) deleteAt withStore' $ \db -> updateGroupChatItemsRead db userId chatId fromToIds ok user - CTNotes -> do - error "TODO: APIChatRead.CTNotes" + CTLocal -> error "TODO: APIChatRead.CTLocal" CTContactRequest -> pure $ chatCmdError Nothing "not supported" CTContactConnection -> pure $ chatCmdError Nothing "not supported" APIChatUnread (ChatRef cType chatId) unreadChat -> withUser $ \user -> case cType of @@ -1042,7 +1041,7 @@ processChatCommand = \case withStore' (\db -> setContactDeleted db user ct) `catchChatError` (toView . CRChatError (Just user)) pure $ map aConnId conns - CTNotes -> error "TODO: APIDeleteChat.CTNotes" + CTLocal -> error "TODO: APIDeleteChat.CTLocal" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" APIClearChat (ChatRef cType chatId) -> withUser $ \user -> case cType of CTDirect -> do @@ -1059,8 +1058,7 @@ processChatCommand = \case membersToDelete <- withStore' $ \db -> getGroupMembersForExpiration db user gInfo forM_ membersToDelete $ \m -> withStore' $ \db -> deleteGroupMember db user m pure $ CRChatCleared user (AChatInfo SCTGroup $ GroupChat gInfo) - CTNotes -> do - error "TODO: APIClearChat.CTNotes" + CTLocal -> error "TODO: APIClearChat.CTLocal" CTContactConnection -> pure $ chatCmdError (Just user) "not supported" CTContactRequest -> pure $ chatCmdError (Just user) "not supported" APIAcceptContact incognito connReqId -> withUser $ \_ -> withChatLock "acceptContact" $ do diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 176a5a8401..0a0c8f4f37 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -47,7 +47,7 @@ import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, fromTextFie import Simplex.Messaging.Protocol (MsgBody) import Simplex.Messaging.Util (eitherToMaybe, safeDecodeUtf8, (<$?>)) -data ChatType = CTDirect | CTGroup | CTContactRequest | CTContactConnection | CTNotes +data ChatType = CTDirect | CTGroup | CTLocal | CTContactRequest | CTContactConnection deriving (Eq, Show, Ord) data ChatName = ChatName {chatType :: ChatType, chatName :: Text} @@ -57,9 +57,9 @@ chatTypeStr :: ChatType -> Text chatTypeStr = \case CTDirect -> "@" CTGroup -> "#" + CTLocal -> "$" CTContactRequest -> "<@" CTContactConnection -> ":" - CTNotes -> "*" chatNameStr :: ChatName -> String chatNameStr (ChatName cType name) = T.unpack $ chatTypeStr cType <> if T.any isSpace name then "'" <> name <> "'" else name @@ -70,7 +70,7 @@ data ChatRef = ChatRef ChatType Int64 data ChatInfo (c :: ChatType) where DirectChat :: Contact -> ChatInfo 'CTDirect GroupChat :: GroupInfo -> ChatInfo 'CTGroup - NotesChat :: NotesFolder -> ChatInfo 'CTNotes + LocalChat :: NotesFolder -> ChatInfo 'CTLocal ContactRequest :: UserContactRequest -> ChatInfo 'CTContactRequest ContactConnection :: PendingContactConnection -> ChatInfo 'CTContactConnection @@ -86,7 +86,7 @@ chatInfoUpdatedAt :: ChatInfo c -> UTCTime chatInfoUpdatedAt = \case DirectChat Contact {updatedAt} -> updatedAt GroupChat GroupInfo {updatedAt} -> updatedAt - NotesChat NotesFolder {updatedAt} -> updatedAt + LocalChat NotesFolder {updatedAt} -> updatedAt ContactRequest UserContactRequest {updatedAt} -> updatedAt ContactConnection PendingContactConnection {updatedAt} -> updatedAt @@ -94,7 +94,7 @@ chatInfoToRef :: ChatInfo c -> ChatRef chatInfoToRef = \case DirectChat Contact {contactId} -> ChatRef CTDirect contactId GroupChat GroupInfo {groupId} -> ChatRef CTGroup groupId - NotesChat NotesFolder {notesFolderId} -> ChatRef CTNotes notesFolderId + LocalChat NotesFolder {notesFolderId} -> ChatRef CTLocal notesFolderId ContactRequest UserContactRequest {contactRequestId} -> ChatRef CTContactRequest contactRequestId ContactConnection PendingContactConnection {pccConnId} -> ChatRef CTContactConnection pccConnId @@ -106,7 +106,7 @@ chatInfoMembership = \case data JSONChatInfo = JCInfoDirect {contact :: Contact} | JCInfoGroup {groupInfo :: GroupInfo} - | JCInfoNotes {notesFolder :: NotesFolder} + | JCInfoLocal {notesFolder :: NotesFolder} | JCInfoContactRequest {contactRequest :: UserContactRequest} | JCInfoContactConnection {contactConnection :: PendingContactConnection} @@ -123,7 +123,7 @@ jsonChatInfo :: ChatInfo c -> JSONChatInfo jsonChatInfo = \case DirectChat c -> JCInfoDirect c GroupChat g -> JCInfoGroup g - NotesChat s -> JCInfoNotes s + LocalChat l -> JCInfoLocal l ContactRequest g -> JCInfoContactRequest g ContactConnection c -> JCInfoContactConnection c @@ -135,7 +135,7 @@ jsonAChatInfo :: JSONChatInfo -> AChatInfo jsonAChatInfo = \case JCInfoDirect c -> AChatInfo SCTDirect $ DirectChat c JCInfoGroup g -> AChatInfo SCTGroup $ GroupChat g - JCInfoNotes n -> AChatInfo SCTNotes $ NotesChat n + JCInfoLocal l -> AChatInfo SCTLocal $ LocalChat l JCInfoContactRequest g -> AChatInfo SCTContactRequest $ ContactRequest g JCInfoContactConnection c -> AChatInfo SCTContactConnection $ ContactConnection c @@ -175,7 +175,8 @@ data CIDirection (c :: ChatType) (d :: MsgDirection) where CIDirectRcv :: CIDirection 'CTDirect 'MDRcv CIGroupSnd :: CIDirection 'CTGroup 'MDSnd CIGroupRcv :: GroupMember -> CIDirection 'CTGroup 'MDRcv - CINote :: CIDirection 'CTNotes 'MDSnd + CILocalSnd :: CIDirection 'CTLocal 'MDSnd + CILocalRcv :: CIDirection 'CTLocal 'MDRcv deriving instance Show (CIDirection c d) @@ -205,7 +206,7 @@ jsonACIDirection = \case JCIDirectRcv -> ACID SCTDirect SMDRcv CIDirectRcv JCIGroupSnd -> ACID SCTGroup SMDSnd CIGroupSnd JCIGroupRcv m -> ACID SCTGroup SMDRcv $ CIGroupRcv m - JCINote -> ACID SCTNotes SMDSnd CINote + JCINote -> ACID SCTLocal SMDSnd CINote data CIReactionCount = CIReactionCount {reaction :: MsgReaction, userReacted :: Bool, totalReacted :: Int} deriving (Show) @@ -402,7 +403,6 @@ data CIQDirection (c :: ChatType) where CIQDirectRcv :: CIQDirection 'CTDirect CIQGroupSnd :: CIQDirection 'CTGroup CIQGroupRcv :: Maybe GroupMember -> CIQDirection 'CTGroup -- member can be Nothing in case MsgRef has memberId that the user is not notified about yet - CIQNote :: CIQDirection 'CTNotes deriving instance Show (CIQDirection c) @@ -415,7 +415,6 @@ jsonCIQDirection = \case CIQGroupSnd -> Just JCIGroupSnd CIQGroupRcv (Just m) -> Just $ JCIGroupRcv m CIQGroupRcv Nothing -> Nothing - CIQNote -> Just JCINote jsonACIQDirection :: Maybe JSONCIDirection -> ACIQDirection jsonACIQDirection = \case @@ -423,7 +422,7 @@ jsonACIQDirection = \case Just JCIDirectRcv -> ACIQDirection SCTDirect CIQDirectRcv Just JCIGroupSnd -> ACIQDirection SCTGroup CIQGroupSnd Just (JCIGroupRcv m) -> ACIQDirection SCTGroup $ CIQGroupRcv (Just m) - Just JCINote -> ACIQDirection SCTNotes CIQNote + Just JCINote -> ACIQDirection SCTLocal CIQNote Nothing -> ACIQDirection SCTGroup $ CIQGroupRcv Nothing quoteMsgDirection :: CIQDirection c -> MsgDirection @@ -731,18 +730,18 @@ type ChatItemTs = UTCTime data SChatType (c :: ChatType) where SCTDirect :: SChatType 'CTDirect SCTGroup :: SChatType 'CTGroup + SCTLocal :: SChatType 'CTLocal SCTContactRequest :: SChatType 'CTContactRequest SCTContactConnection :: SChatType 'CTContactConnection - SCTNotes :: SChatType 'CTNotes deriving instance Show (SChatType c) instance TestEquality SChatType where testEquality SCTDirect SCTDirect = Just Refl testEquality SCTGroup SCTGroup = Just Refl + testEquality SCTLocal SCTLocal = Just Refl testEquality SCTContactRequest SCTContactRequest = Just Refl testEquality SCTContactConnection SCTContactConnection = Just Refl - testEquality SCTNotes SCTNotes = Just Refl testEquality _ _ = Nothing data AChatType = forall c. ChatTypeI c => ACT (SChatType c) @@ -754,27 +753,27 @@ instance ChatTypeI 'CTDirect where chatTypeI = SCTDirect instance ChatTypeI 'CTGroup where chatTypeI = SCTGroup +instance ChatTypeI 'CTLocal where chatTypeI = SCTLocal + instance ChatTypeI 'CTContactRequest where chatTypeI = SCTContactRequest instance ChatTypeI 'CTContactConnection where chatTypeI = SCTContactConnection -instance ChatTypeI 'CTNotes where chatTypeI = SCTNotes - toChatType :: SChatType c -> ChatType toChatType = \case SCTDirect -> CTDirect SCTGroup -> CTGroup + SCTLocal -> CTLocal SCTContactRequest -> CTContactRequest SCTContactConnection -> CTContactConnection - SCTNotes -> CTNotes aChatType :: ChatType -> AChatType aChatType = \case CTDirect -> ACT SCTDirect CTGroup -> ACT SCTGroup + CTLocal -> ACT SCTLocal CTContactRequest -> ACT SCTContactRequest CTContactConnection -> ACT SCTContactConnection - CTNotes -> ACT SCTNotes checkChatType :: forall t c c'. (ChatTypeI c, ChatTypeI c') => t c' -> Either String (t c) checkChatType x = case testEquality (chatTypeI @c) (chatTypeI @c') of diff --git a/src/Simplex/Chat/Migrations/M20231219_notes_folders.hs b/src/Simplex/Chat/Migrations/M20231219_notes_folders.hs index 31ed051895..556068de4b 100644 --- a/src/Simplex/Chat/Migrations/M20231219_notes_folders.hs +++ b/src/Simplex/Chat/Migrations/M20231219_notes_folders.hs @@ -11,20 +11,20 @@ m20231219_notes_folders = CREATE TABLE notes_folders ( notes_folder_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE, + display_name TEXT NOT NULL, local_display_name TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, - chat_ts TEXT, + chat_ts TEXT NOT NULL, favorite INTEGER NOT NULL DEFAULT 0, unread_chat INTEGER DEFAULT 0 NOT NULL, - chat_item_id INTEGER DEFAULT NULL REFERENCES chat_items ON DELETE SET NULL, FOREIGN KEY (user_id, local_display_name) REFERENCES display_names (user_id, local_display_name) ON DELETE CASCADE ON UPDATE CASCADE, ); - CREATE UNIQUE INDEX idx_notes_user_local_display_name ON notes_fodler ( + CREATE UNIQUE INDEX idx_notes_folders_user_id_local_display_name ON notes_folders ( user_id, local_display_name ); @@ -35,7 +35,7 @@ m20231219_notes_folders = down_m20231219_notes_folders :: Query down_m20231219_notes_folders = [sql| -DROP INDEX idx_notes_user_local_display_name; +DROP INDEX idx_notes_folders_user_id_local_display_name; DROP TABLE notes_folders; ALTER TABLE chat_items DROP COLUMN notes_folder_id; |] diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 88e44b0605..8ab339033f 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -494,10 +494,10 @@ getChatPreviews :: DB.Connection -> User -> Bool -> PaginationByTime -> ChatList getChatPreviews db user withPCC pagination query = do directChats <- findDirectChatPreviews_ db user pagination query groupChats <- findGroupChatPreviews_ db user pagination query - notesChats <- findNotesChatPreview_ db user pagination query + localChats <- findLocalChatPreview_ db user pagination query cReqChats <- getContactRequestChatPreviews_ db user pagination query connChats <- if withPCC then getContactConnectionChatPreviews_ db user pagination query else pure [] - let refs = sortTake $ concat [directChats, groupChats, notesChats, cReqChats, connChats] + let refs = sortTake $ concat [directChats, groupChats, localChats, cReqChats, connChats] mapM (runExceptT <$> getChatPreview) refs where ts :: AChatPreviewData -> UTCTime @@ -506,7 +506,7 @@ getChatPreviews db user withPCC pagination query = do (GroupChatPD t _ _ _) -> t (ContactRequestPD t _) -> t (ContactConnectionPD t _) -> t - (NotesChatPD t _) -> t + (LocalChatPD t _) -> t sortTake = case pagination of PTLast count -> take count . sortBy (comparing $ Down . ts) PTAfter _ count -> reverse . take count . sortBy (comparing ts) @@ -517,14 +517,14 @@ getChatPreviews db user withPCC pagination query = do SCTGroup -> getGroupChatPreview_ db user cpd SCTContactRequest -> let (ContactRequestPD _ chat) = cpd in pure chat SCTContactConnection -> let (ContactConnectionPD _ chat) = cpd in pure chat - SCTNotes -> let (NotesChatPD _ chat) = cpd in pure chat + SCTNotes -> let (LocalChatPD _ chat) = cpd in pure chat data ChatPreviewData (c :: ChatType) where DirectChatPD :: UTCTime -> ContactId -> Maybe ChatItemId -> ChatStats -> ChatPreviewData 'CTDirect GroupChatPD :: UTCTime -> GroupId -> Maybe ChatItemId -> ChatStats -> ChatPreviewData 'CTGroup + LocalChatPD :: UTCTime -> AChat -> ChatPreviewData 'CTLocal ContactRequestPD :: UTCTime -> AChat -> ChatPreviewData 'CTContactRequest ContactConnectionPD :: UTCTime -> AChat -> ChatPreviewData 'CTContactConnection - NotesChatPD :: UTCTime -> AChat -> ChatPreviewData 'CTNotes data AChatPreviewData = forall c. ChatTypeI c => ACPD (SChatType c) (ChatPreviewData c) @@ -729,15 +729,15 @@ getGroupChatPreview_ db user (GroupChatPD _ groupId lastItemId_ stats) = do Nothing -> pure [] pure $ AChat SCTGroup (Chat (GroupChat groupInfo) lastItem stats) -findNotesChatPreview_ :: DB.Connection -> User -> PaginationByTime -> ChatListQuery -> IO [AChatPreviewData] -findNotesChatPreview_ db User {userId} pagination clq = pure [] +findLocalChatPreview_ :: DB.Connection -> User -> PaginationByTime -> ChatListQuery -> IO [AChatPreviewData] +findLocalChatPreview_ db User {userId} pagination clq = pure [] -getNotesChatPreview_ :: DB.Connection -> User -> ChatPreviewData 'CTNotes -> ExceptT StoreError IO AChat -getNotesChatPreview_ = error "TODO: getNotesChatPreview_" +getLocalChatPreview_ :: DB.Connection -> User -> ChatPreviewData 'CTLocal -> ExceptT StoreError IO AChat +getLocalChatPreview_ = error "TODO: getLocalChatPreview_" -- this function can be changed so it never fails, not only avoid failure on invalid json -toNoteChatItem :: UTCTime -> ChatItemRow -> Either StoreError (CChatItem 'CTNotes) -toNoteChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) = +toLocalChatItem :: UTCTime -> ChatItemRow -> Either StoreError (CChatItem 'CTLocal) +toLocalChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentText, itemText, itemStatus, sharedMsgId) :. (itemDeleted, deletedTs, itemEdited, createdAt, updatedAt) :. (timedTTL, timedDeleteAt, itemLive) :. (fileId_, fileName_, fileSize_, filePath, fileKey, fileNonce, fileStatus_, fileProtocol_)) = chatItem $ fromRight invalid $ dbParseACIContent itemContentText where invalid = ACIContent msgDir $ CIInvalidJSON itemContentText @@ -755,15 +755,15 @@ toNoteChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentText fileSource = (`CryptoFile` cfArgs) <$> filePath in Just CIFile {fileId, fileName, fileSize, fileSource, fileStatus, fileProtocol} _ -> Nothing - cItem :: MsgDirectionI d => SMsgDirection d -> CIDirection 'CTNotes d -> CIStatus d -> CIContent d -> Maybe (CIFile d) -> CChatItem 'CTNotes + cItem :: MsgDirectionI d => SMsgDirection d -> CIDirection 'CTLocal d -> CIStatus d -> CIContent d -> Maybe (CIFile d) -> CChatItem 'CTLocal cItem d chatDir ciStatus content file = CChatItem d ChatItem {chatDir, meta = ciMeta content ciStatus, content, formattedText = parseMaybeMarkdownList itemText, quotedItem = Nothing, reactions = [], file} badItem = Left $ SEBadChatItem itemId - ciMeta :: CIContent d -> CIStatus d -> CIMeta 'CTNotes d + ciMeta :: CIContent d -> CIStatus d -> CIMeta 'CTLocal d ciMeta content status = let itemDeleted' = case itemDeleted of DBCINotDeleted -> Nothing - _ -> Just (CIDeleted @'CTNotes deletedTs) + _ -> Just (CIDeleted @'CTLocal deletedTs) itemEdited' = fromMaybe False itemEdited in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt ciTimed :: Maybe CITimed diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index 665e8c9553..5d477e8f48 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -327,7 +327,7 @@ type ContactName = Text type GroupName = Text -type FolderName = Text +type NotesFolderName = Text optionalFullName :: ContactName -> Text -> Text optionalFullName displayName fullName @@ -1522,14 +1522,16 @@ data XGrpMemIntroCont = XGrpMemIntroCont } deriving (Show) +-- | An entity for local chats data NotesFolder = NotesFolder { notesFolderId :: NotesFolderId, userId :: UserId, - localDisplayName :: FolderName, + displayName :: NotesFolderName, + localDisplayName :: NotesFolderName, chatItemId :: Maybe Int64, createdAt :: UTCTime, updatedAt :: UTCTime, - chatTs :: Maybe UTCTime, + chatTs :: UTCTime, favorite :: Bool, unread :: Bool } diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 46a25880f3..f9ad4a0919 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -393,7 +393,7 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe toChatView :: AChat -> (Text, Text, Maybe ConnStatus) toChatView (AChat _ (Chat (DirectChat Contact {localDisplayName, activeConn}) items _)) = ("@" <> localDisplayName, toCIPreview items Nothing, connStatus <$> activeConn) toChatView (AChat _ (Chat (GroupChat GroupInfo {membership, localDisplayName}) items _)) = ("#" <> localDisplayName, toCIPreview items (Just membership), Nothing) - toChatView (AChat _ (Chat (NotesChat NotesFolder {localDisplayName}) items _)) = ("*" <> localDisplayName, toCIPreview items Nothing, Nothing) + toChatView (AChat _ (Chat (NotesChat NotesFolder {localDisplayName}) items _)) = ("$" <> localDisplayName, toCIPreview items Nothing, Nothing) toChatView (AChat _ (Chat (ContactRequest UserContactRequest {localDisplayName}) items _)) = ("<@" <> localDisplayName, toCIPreview items Nothing, Nothing) toChatView (AChat _ (Chat (ContactConnection PendingContactConnection {pccConnId, pccConnStatus}) items _)) = (":" <> T.pack (show pccConnId), toCIPreview items Nothing, Just pccConnStatus) toCIPreview :: [CChatItem c] -> Maybe GroupMember -> Text