core: read unparsable item status as unknown (#2805)

This commit is contained in:
spaced4ndy
2023-07-31 11:54:39 +04:00
committed by GitHub
parent cb4aa29549
commit 98e53fb35b
12 changed files with 34 additions and 2 deletions

View File

@@ -501,6 +501,7 @@ data CIFileStatus (d :: MsgDirection) where
CIFSRcvComplete :: CIFileStatus 'MDRcv
CIFSRcvCancelled :: CIFileStatus 'MDRcv
CIFSRcvError :: CIFileStatus 'MDRcv
CIFSInvalid :: {text :: Text} -> CIFileStatus 'MDSnd
deriving instance Eq (CIFileStatus d)
@@ -519,6 +520,7 @@ ciFileEnded = \case
CIFSRcvCancelled -> True
CIFSRcvComplete -> True
CIFSRcvError -> True
CIFSInvalid {} -> True
instance ToJSON (CIFileStatus d) where
toJSON = J.toJSON . jsonCIFileStatus
@@ -545,6 +547,7 @@ instance MsgDirectionI d => StrEncoding (CIFileStatus d) where
CIFSRcvComplete -> "rcv_complete"
CIFSRcvCancelled -> "rcv_cancelled"
CIFSRcvError -> "rcv_error"
CIFSInvalid {} -> "invalid"
strP = (\(AFS _ st) -> checkDirection st) <$?> strP
instance StrEncoding ACIFileStatus where
@@ -562,7 +565,7 @@ instance StrEncoding ACIFileStatus where
"rcv_complete" -> pure $ AFS SMDRcv CIFSRcvComplete
"rcv_cancelled" -> pure $ AFS SMDRcv CIFSRcvCancelled
"rcv_error" -> pure $ AFS SMDRcv CIFSRcvError
_ -> fail "bad file status"
text -> pure $ AFS SMDSnd (CIFSInvalid $ safeDecodeUtf8 text)
where
progress :: (Int64 -> Int64 -> a) -> A.Parser a
progress f = f <$> num <*> num <|> pure (f 0 1)
@@ -580,6 +583,7 @@ data JSONCIFileStatus
| JCIFSRcvComplete
| JCIFSRcvCancelled
| JCIFSRcvError
| JCIFSInvalid {text :: Text}
deriving (Generic)
instance ToJSON JSONCIFileStatus where
@@ -599,6 +603,7 @@ jsonCIFileStatus = \case
CIFSRcvComplete -> JCIFSRcvComplete
CIFSRcvCancelled -> JCIFSRcvCancelled
CIFSRcvError -> JCIFSRcvError
CIFSInvalid text -> JCIFSInvalid text
aciFileStatusJSON :: JSONCIFileStatus -> ACIFileStatus
aciFileStatusJSON = \case
@@ -613,6 +618,7 @@ aciFileStatusJSON = \case
JCIFSRcvComplete -> AFS SMDRcv CIFSRcvComplete
JCIFSRcvCancelled -> AFS SMDRcv CIFSRcvCancelled
JCIFSRcvError -> AFS SMDRcv CIFSRcvError
JCIFSInvalid text -> AFS SMDSnd $ CIFSInvalid text
-- to conveniently read file data from db
data CIFileInfo = CIFileInfo
@@ -630,6 +636,7 @@ data CIStatus (d :: MsgDirection) where
CISSndError :: String -> CIStatus 'MDSnd
CISRcvNew :: CIStatus 'MDRcv
CISRcvRead :: CIStatus 'MDRcv
CISInvalid :: Text -> CIStatus 'MDSnd
deriving instance Show (CIStatus d)
@@ -654,6 +661,7 @@ instance MsgDirectionI d => StrEncoding (CIStatus d) where
CISSndError e -> "snd_error " <> encodeUtf8 (T.pack e)
CISRcvNew -> "rcv_new"
CISRcvRead -> "rcv_read"
CISInvalid {} -> "invalid"
strP = (\(ACIStatus _ st) -> checkDirection st) <$?> strP
instance StrEncoding ACIStatus where
@@ -667,7 +675,7 @@ instance StrEncoding ACIStatus where
"snd_error" -> ACIStatus SMDSnd . CISSndError . T.unpack . safeDecodeUtf8 <$> (A.space *> A.takeByteString)
"rcv_new" -> pure $ ACIStatus SMDRcv CISRcvNew
"rcv_read" -> pure $ ACIStatus SMDRcv CISRcvRead
_ -> fail "bad status"
text -> pure $ ACIStatus SMDSnd (CISInvalid $ safeDecodeUtf8 text)
data JSONCIStatus
= JCISSndNew
@@ -677,6 +685,7 @@ data JSONCIStatus
| JCISSndError {agentError :: String}
| JCISRcvNew
| JCISRcvRead
| JCISInvalid {text :: Text}
deriving (Show, Generic)
instance ToJSON JSONCIStatus where
@@ -692,6 +701,7 @@ jsonCIStatus = \case
CISSndError e -> JCISSndError e
CISRcvNew -> JCISRcvNew
CISRcvRead -> JCISRcvRead
CISInvalid text -> JCISInvalid text
ciStatusNew :: forall d. MsgDirectionI d => CIStatus d
ciStatusNew = case msgDirection @d of

View File

@@ -1360,6 +1360,7 @@ viewFileTransferStatusXFTP (AChatItem _ _ _ ChatItem {file = Just CIFile {fileId
CIFSRcvComplete -> ["receiving " <> fstr <> " complete" <> maybe "" (\fp -> ", path: " <> plain fp) filePath]
CIFSRcvCancelled -> ["receiving " <> fstr <> " cancelled"]
CIFSRcvError -> ["receiving " <> fstr <> " error"]
CIFSInvalid text -> [fstr <> " invalid status: " <> plain text]
where
fstr = fileTransferStr fileId fileName
viewFileTransferStatusXFTP _ = ["no file status"]