core: file status command for XFTP files (#2222)
This commit is contained in:
parent
549ffcefc0
commit
a06393f520
@ -1454,6 +1454,11 @@ processChatCommand = \case
|
|||||||
getChatItemByFileId db user fileId
|
getChatItemByFileId db user fileId
|
||||||
pure $ CRRcvFileCancelled user ci ftr
|
pure $ CRRcvFileCancelled user ci ftr
|
||||||
FileStatus fileId -> withUser $ \user -> do
|
FileStatus fileId -> withUser $ \user -> do
|
||||||
|
ci@(AChatItem _ _ _ ChatItem {file}) <- withStore $ \db -> getChatItemByFileId db user fileId
|
||||||
|
case file of
|
||||||
|
Just CIFile {fileProtocol = FPXFTP} ->
|
||||||
|
pure $ CRFileTransferStatusXFTP user ci
|
||||||
|
_ -> do
|
||||||
fileStatus <- withStore $ \db -> getFileTransferProgress db user fileId
|
fileStatus <- withStore $ \db -> getFileTransferProgress db user fileId
|
||||||
pure $ CRFileTransferStatus user fileStatus
|
pure $ CRFileTransferStatus user fileStatus
|
||||||
ShowProfile -> withUser $ \user@User {profile} -> pure $ CRUserProfile user (fromLocalProfile profile)
|
ShowProfile -> withUser $ \user@User {profile} -> pure $ CRUserProfile user (fromLocalProfile profile)
|
||||||
|
@ -411,6 +411,7 @@ data ChatResponse
|
|||||||
| CRGroupsList {user :: User, groups :: [GroupInfo]}
|
| CRGroupsList {user :: User, groups :: [GroupInfo]}
|
||||||
| CRSentGroupInvitation {user :: User, groupInfo :: GroupInfo, contact :: Contact, member :: GroupMember}
|
| CRSentGroupInvitation {user :: User, groupInfo :: GroupInfo, contact :: Contact, member :: GroupMember}
|
||||||
| CRFileTransferStatus User (FileTransfer, [Integer]) -- TODO refactor this type to FileTransferStatus
|
| CRFileTransferStatus User (FileTransfer, [Integer]) -- TODO refactor this type to FileTransferStatus
|
||||||
|
| CRFileTransferStatusXFTP User AChatItem
|
||||||
| CRUserProfile {user :: User, profile :: Profile}
|
| CRUserProfile {user :: User, profile :: Profile}
|
||||||
| CRUserProfileNoChange {user :: User}
|
| CRUserProfileNoChange {user :: User}
|
||||||
| CRUserPrivacy {user :: User, updatedUser :: User}
|
| CRUserPrivacy {user :: User, updatedUser :: User}
|
||||||
|
@ -118,6 +118,7 @@ responseToView user_ ChatConfig {logLevel, testView} liveItems ts = \case
|
|||||||
then [ttyContact' c <> " invited to group " <> ttyGroup' g <> " via your group link"]
|
then [ttyContact' c <> " invited to group " <> ttyGroup' g <> " via your group link"]
|
||||||
else ["invitation to join the group " <> ttyGroup' g <> " sent to " <> ttyContact' c]
|
else ["invitation to join the group " <> ttyGroup' g <> " sent to " <> ttyContact' c]
|
||||||
CRFileTransferStatus u ftStatus -> ttyUser u $ viewFileTransferStatus ftStatus
|
CRFileTransferStatus u ftStatus -> ttyUser u $ viewFileTransferStatus ftStatus
|
||||||
|
CRFileTransferStatusXFTP u ci -> ttyUser u $ viewFileTransferStatusXFTP ci
|
||||||
CRUserProfile u p -> ttyUser u $ viewUserProfile p
|
CRUserProfile u p -> ttyUser u $ viewUserProfile p
|
||||||
CRUserProfileNoChange u -> ttyUser u ["user profile did not change"]
|
CRUserProfileNoChange u -> ttyUser u ["user profile did not change"]
|
||||||
CRUserPrivacy u u' -> ttyUserPrefix u $ viewUserPrivacy u u'
|
CRUserPrivacy u u' -> ttyUserPrefix u $ viewUserPrivacy u u'
|
||||||
@ -1166,6 +1167,24 @@ viewFileTransferStatus (FTRcv ft@RcvFileTransfer {fileId, fileInvitation = FileI
|
|||||||
RFSCancelled (Just RcvFileInfo {filePath}) -> "cancelled, received part path: " <> plain filePath
|
RFSCancelled (Just RcvFileInfo {filePath}) -> "cancelled, received part path: " <> plain filePath
|
||||||
RFSCancelled Nothing -> "cancelled"
|
RFSCancelled Nothing -> "cancelled"
|
||||||
|
|
||||||
|
viewFileTransferStatusXFTP :: AChatItem -> [StyledString]
|
||||||
|
viewFileTransferStatusXFTP (AChatItem _ _ _ ChatItem {file = Just CIFile {fileId, fileName, fileSize, fileStatus, filePath}}) =
|
||||||
|
case fileStatus of
|
||||||
|
CIFSSndStored -> ["sending " <> fstr <> " just started"]
|
||||||
|
CIFSSndTransfer progress total -> ["sending " <> fstr <> " in progress " <> fileProgressXFTP progress total fileSize]
|
||||||
|
CIFSSndCancelled -> ["sending " <> fstr <> " cancelled"]
|
||||||
|
CIFSSndComplete -> ["sending " <> fstr <> " complete"]
|
||||||
|
CIFSSndError -> ["sending " <> fstr <> " error"]
|
||||||
|
CIFSRcvInvitation -> ["receiving " <> fstr <> " not accepted yet, use " <> highlight ("/fr " <> show fileId) <> " to receive file"]
|
||||||
|
CIFSRcvAccepted -> ["receiving " <> fstr <> " just started"]
|
||||||
|
CIFSRcvTransfer progress total -> ["receiving " <> fstr <> " progress " <> fileProgressXFTP progress total fileSize]
|
||||||
|
CIFSRcvComplete -> ["receiving " <> fstr <> " complete" <> maybe "" (\fp -> ", path: " <> plain fp) filePath]
|
||||||
|
CIFSRcvCancelled -> ["receiving " <> fstr <> " cancelled"]
|
||||||
|
CIFSRcvError -> ["receiving " <> fstr <> " error"]
|
||||||
|
where
|
||||||
|
fstr = fileTransferStr fileId fileName
|
||||||
|
viewFileTransferStatusXFTP _ = ["no file status"]
|
||||||
|
|
||||||
listRecipients :: [SndFileTransfer] -> StyledString
|
listRecipients :: [SndFileTransfer] -> StyledString
|
||||||
listRecipients = mconcat . intersperse ", " . map (ttyContact . recipientDisplayName)
|
listRecipients = mconcat . intersperse ", " . map (ttyContact . recipientDisplayName)
|
||||||
|
|
||||||
@ -1173,6 +1192,10 @@ fileProgress :: [Integer] -> Integer -> Integer -> StyledString
|
|||||||
fileProgress chunksNum chunkSize fileSize =
|
fileProgress chunksNum chunkSize fileSize =
|
||||||
sShow (sum chunksNum * chunkSize * 100 `div` fileSize) <> "% of " <> humanReadableSize fileSize
|
sShow (sum chunksNum * chunkSize * 100 `div` fileSize) <> "% of " <> humanReadableSize fileSize
|
||||||
|
|
||||||
|
fileProgressXFTP :: Int64 -> Int64 -> Integer -> StyledString
|
||||||
|
fileProgressXFTP progress total fileSize =
|
||||||
|
sShow (progress * 100 `div` total) <> "% of " <> humanReadableSize fileSize
|
||||||
|
|
||||||
viewCallInvitation :: Contact -> CallType -> Maybe C.Key -> [StyledString]
|
viewCallInvitation :: Contact -> CallType -> Maybe C.Key -> [StyledString]
|
||||||
viewCallInvitation ct@Contact {contactId} callType@CallType {media} sharedKey =
|
viewCallInvitation ct@Contact {contactId} callType@CallType {media} sharedKey =
|
||||||
[ ttyContact' ct <> " wants to connect with you via WebRTC " <> callMediaStr callType <> " call " <> encryptedCallText callType,
|
[ ttyContact' ct <> " wants to connect with you via WebRTC " <> callMediaStr callType <> " call " <> encryptedCallText callType,
|
||||||
|
@ -995,6 +995,11 @@ testXFTPFileTransfer =
|
|||||||
bob <## "started receiving file 1 (test.pdf) from alice"
|
bob <## "started receiving file 1 (test.pdf) from alice"
|
||||||
bob <## "completed receiving file 1 (test.pdf) from alice"
|
bob <## "completed receiving file 1 (test.pdf) from alice"
|
||||||
|
|
||||||
|
alice ##> "/fs 1"
|
||||||
|
alice <## "sending file 1 (test.pdf) complete"
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (test.pdf) complete, path: ./tests/tmp/test.pdf"
|
||||||
|
|
||||||
src <- B.readFile "./tests/fixtures/test.pdf"
|
src <- B.readFile "./tests/fixtures/test.pdf"
|
||||||
dest <- B.readFile "./tests/tmp/test.pdf"
|
dest <- B.readFile "./tests/tmp/test.pdf"
|
||||||
dest `shouldBe` src
|
dest `shouldBe` src
|
||||||
@ -1118,6 +1123,13 @@ testXFTPDeleteUploadedFileGroup =
|
|||||||
]
|
]
|
||||||
bob <## "completed receiving file 1 (test.pdf) from alice"
|
bob <## "completed receiving file 1 (test.pdf) from alice"
|
||||||
|
|
||||||
|
alice ##> "/fs 1"
|
||||||
|
alice <## "sending file 1 (test.pdf) complete"
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (test.pdf) complete, path: ./tests/tmp/test.pdf"
|
||||||
|
cath ##> "/fs 1"
|
||||||
|
cath <## "receiving file 1 (test.pdf) not accepted yet, use /fr 1 to receive file"
|
||||||
|
|
||||||
src <- B.readFile "./tests/fixtures/test.pdf"
|
src <- B.readFile "./tests/fixtures/test.pdf"
|
||||||
dest <- B.readFile "./tests/tmp/test.pdf"
|
dest <- B.readFile "./tests/tmp/test.pdf"
|
||||||
dest `shouldBe` src
|
dest `shouldBe` src
|
||||||
@ -1128,6 +1140,13 @@ testXFTPDeleteUploadedFileGroup =
|
|||||||
cath <## "alice cancelled sending file 1 (test.pdf)"
|
cath <## "alice cancelled sending file 1 (test.pdf)"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
alice ##> "/fs 1"
|
||||||
|
alice <## "sending file 1 (test.pdf) cancelled"
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (test.pdf) complete, path: ./tests/tmp/test.pdf"
|
||||||
|
cath ##> "/fs 1"
|
||||||
|
cath <## "receiving file 1 (test.pdf) cancelled"
|
||||||
|
|
||||||
cath ##> "/fr 1 ./tests/tmp"
|
cath ##> "/fr 1 ./tests/tmp"
|
||||||
cath <## "file cancelled: test.pdf"
|
cath <## "file cancelled: test.pdf"
|
||||||
where
|
where
|
||||||
@ -1221,6 +1240,10 @@ testXFTPContinueRcv tmp = do
|
|||||||
bob ##> "/fr 1 ./tests/tmp"
|
bob ##> "/fr 1 ./tests/tmp"
|
||||||
bob <## "started receiving file 1 (test.pdf) from alice"
|
bob <## "started receiving file 1 (test.pdf) from alice"
|
||||||
bob <## "saving file 1 from alice to ./tests/tmp/test.pdf"
|
bob <## "saving file 1 from alice to ./tests/tmp/test.pdf"
|
||||||
|
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (test.pdf) progress 0% of 266.0 KiB"
|
||||||
|
|
||||||
(bob </)
|
(bob </)
|
||||||
|
|
||||||
withXFTPServer $ do
|
withXFTPServer $ do
|
||||||
@ -1290,6 +1313,9 @@ testXFTPRcvError tmp = do
|
|||||||
bob <## "started receiving file 1 (test.pdf) from alice"
|
bob <## "started receiving file 1 (test.pdf) from alice"
|
||||||
bob <## "saving file 1 from alice to ./tests/tmp/test.pdf"
|
bob <## "saving file 1 from alice to ./tests/tmp/test.pdf"
|
||||||
bob <## "error receiving file 1 (test.pdf) from alice"
|
bob <## "error receiving file 1 (test.pdf) from alice"
|
||||||
|
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (test.pdf) error"
|
||||||
where
|
where
|
||||||
cfg = testCfg {xftpFileConfig = Just $ XFTPFileConfig {minFileSize = 0}, tempDir = Just "./tests/tmp"}
|
cfg = testCfg {xftpFileConfig = Just $ XFTPFileConfig {minFileSize = 0}, tempDir = Just "./tests/tmp"}
|
||||||
|
|
||||||
@ -1311,9 +1337,17 @@ testXFTPCancelRcvRepeat =
|
|||||||
alice <## "completed uploading file 1 (testfile) for bob"
|
alice <## "completed uploading file 1 (testfile) for bob"
|
||||||
bob <## "started receiving file 1 (testfile) from alice"
|
bob <## "started receiving file 1 (testfile) from alice"
|
||||||
|
|
||||||
|
threadDelay 100000
|
||||||
|
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <##. "receiving file 1 (testfile) progress"
|
||||||
|
|
||||||
bob ##> "/fc 1"
|
bob ##> "/fc 1"
|
||||||
bob <## "cancelled receiving file 1 (testfile) from alice"
|
bob <## "cancelled receiving file 1 (testfile) from alice"
|
||||||
|
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (testfile) not accepted yet, use /fr 1 to receive file"
|
||||||
|
|
||||||
bob ##> "/fr 1 ./tests/tmp"
|
bob ##> "/fr 1 ./tests/tmp"
|
||||||
bob
|
bob
|
||||||
<### [ "saving file 1 from alice to ./tests/tmp/testfile_1",
|
<### [ "saving file 1 from alice to ./tests/tmp/testfile_1",
|
||||||
@ -1321,6 +1355,9 @@ testXFTPCancelRcvRepeat =
|
|||||||
]
|
]
|
||||||
bob <## "completed receiving file 1 (testfile) from alice"
|
bob <## "completed receiving file 1 (testfile) from alice"
|
||||||
|
|
||||||
|
bob ##> "/fs 1"
|
||||||
|
bob <## "receiving file 1 (testfile) complete, path: ./tests/tmp/testfile_1"
|
||||||
|
|
||||||
src <- B.readFile "./tests/tmp/testfile"
|
src <- B.readFile "./tests/tmp/testfile"
|
||||||
dest <- B.readFile "./tests/tmp/testfile_1"
|
dest <- B.readFile "./tests/tmp/testfile_1"
|
||||||
dest `shouldBe` src
|
dest `shouldBe` src
|
||||||
|
Loading…
Reference in New Issue
Block a user