add folder clear

This commit is contained in:
IC Rainbow
2023-12-26 12:33:17 +02:00
parent 982f380971
commit 1c5eaf94ac
4 changed files with 24 additions and 9 deletions
+13 -7
View File
@@ -1040,7 +1040,7 @@ processChatCommand' vr = \case
withStore' $ \db -> deleteNoteFolder db user nf
pure $ CRNoteFolderDeleted user nf
CTContactRequest -> pure $ chatCmdError (Just user) "not supported"
APIClearChat (ChatRef cType chatId) -> withUser $ \user -> case cType of
APIClearChat (ChatRef cType chatId) -> withUser $ \user@User {userId} -> case cType of
CTDirect -> do
ct <- withStore $ \db -> getContact db user chatId
filesInfo <- withStore' $ \db -> getContactFileInfo db user ct
@@ -1055,7 +1055,14 @@ processChatCommand' vr = \case
membersToDelete <- withStore' $ \db -> getGroupMembersForExpiration db user gInfo
forM_ membersToDelete $ \m -> withStore' $ \db -> deleteGroupMember db user m
pure $ CRChatCleared user (AChatInfo SCTGroup $ GroupChat gInfo)
CTLocal -> error "TODO: APIClearChat.CTLocal"
CTLocal -> do
nf <- withStore $ \db -> getNoteFolder db user chatId
filesInfo <- withStore' $ \db -> getNoteFolderFileInfo db user nf
withChatLock "clearChat local" . procCmd $ do
mapM_ (deleteFile user) filesInfo
withStore' $ \db -> deleteNoteFolderFiles db userId nf
withStore' $ \db -> deleteNoteFolderCIs db user nf
pure $ CRChatCleared user (AChatInfo SCTLocal $ LocalChat nf)
CTContactConnection -> pure $ chatCmdError (Just user) "not supported"
CTContactRequest -> pure $ chatCmdError (Just user) "not supported"
APIAcceptContact incognito connReqId -> withUser $ \_ -> withChatLock "acceptContact" $ do
@@ -1836,13 +1843,12 @@ processChatCommand' vr = \case
quotedItemId <- withStore $ \db -> getGroupChatItemIdByText db user groupId cName quotedMsg
let mc = MCText msg
processChatCommand . APISendMessage (ChatRef CTGroup groupId) False Nothing $ ComposedMessage Nothing (Just quotedItemId) mc
-- APINewLocalChat userId localChatProfile -> withUserId userId $ \user -> do
-- checkValidName displayName
-- CRLocalChatCreated user <$> createLocalChat userId localChatProfile
NewNoteFolder displayName -> withUser $ \user@User {userId} -> do
-- processChatCommand $ APINewLocalChat userId localChatProfile
checkValidName displayName
withStore $ \db -> CRNoteFolderCreated user <$> createNewNoteFolder db userId displayName
ClearNoteFolder displayName -> withUser $ \user -> do
folderId <- withStore $ \db -> getNoteFolderIdByName db user displayName
processChatCommand $ APIClearChat (ChatRef CTLocal folderId)
DeleteNoteFolder displayName -> withUser $ \user -> do
folderId <- withStore $ \db -> getNoteFolderIdByName db user displayName
processChatCommand $ APIDeleteChat (ChatRef CTLocal folderId) True
@@ -6367,7 +6373,7 @@ chatCommandP =
("/delete #" <|> "/d #") *> (DeleteGroup <$> displayName),
("/delete $" <|> "/d $") *> (DeleteNoteFolder <$> displayName),
("/delete " <|> "/d ") *> char_ '@' *> (DeleteContact <$> displayName),
-- TODO: "/clear $" *> (ClearNoteFolder <$> displayName),
"/clear $" *> (ClearNoteFolder <$> displayName),
"/clear #" *> (ClearGroup <$> displayName),
"/clear " *> char_ '@' *> (ClearContact <$> displayName),
("/members " <|> "/ms ") *> char_ '#' *> (ListMembers <$> displayName),
+1 -1
View File
@@ -408,8 +408,8 @@ data ChatCommand
| DeleteGroupLink GroupName
| ShowGroupLink GroupName
| SendGroupMessageQuote {groupName :: GroupName, contactName_ :: Maybe ContactName, quotedMsg :: Text, message :: Text}
-- | APINewLocalChat UserId LocalChatProfile
| NewNoteFolder NoteFolderName
| ClearNoteFolder NoteFolderName
| DeleteNoteFolder NoteFolderName
| LastChats (Maybe Int) -- UserId (not used in UI)
| LastMessages (Maybe ChatName) Int (Maybe String) -- UserId (not used in UI)
+6 -1
View File
@@ -79,7 +79,12 @@ deleteNoteFolderFiles db userId NoteFolder {noteFolderId} = do
AND chat_item_id IN (
SELECT chat_item_id FROM chat_items WHERE user_id = ? AND note_folder_id = ?
)
|] (userId, userId, noteFolderId)
|]
(userId, userId, noteFolderId)
deleteNoteFolderCIs :: DB.Connection -> User -> NoteFolder -> IO ()
deleteNoteFolderCIs db User {userId} NoteFolder {noteFolderId} =
DB.execute db [sql| DELETE FROM chat_items WHERE user_id = ? AND note_folder_id = ? |] (userId, noteFolderId)
deleteNoteFolder :: DB.Connection -> User -> NoteFolder -> IO ()
deleteNoteFolder db User {userId} NoteFolder {noteFolderId} =
+4
View File
@@ -70,6 +70,10 @@ testFiles tmp = withNewTestChat tmp "alice" aliceProfile $ \alice -> do
alice ##> "/fs 1"
alice <## "local file 1 (test.jpg)"
alice ##> "/clear $self"
alice ##> "/fs 1"
alice <## "chat db error: SEChatItemNotFoundByFileId {fileId = 1}"
createFolder :: TestCC -> String -> IO ()
createFolder cc label = do
cc ##> ("/note folder " <> label)