mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-27 22:18:36 +00:00
core: store extended contact and group preferences, for forward compatibility (#7506)
* core: store extended contact and group preferences, for forward compatibility * simiplify * fix * fix bot api types * query plans --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
This commit is contained in:
co-authored by
Evgeny @ SimpleX Chat
parent
23136f1cd5
commit
3af6e2abfe
@@ -20,7 +20,7 @@ import Data.Char (isUpper, toLower, toUpper)
|
||||
import Data.List (find, mapAccumL, sortOn)
|
||||
import qualified Data.List.NonEmpty as L
|
||||
import qualified Data.Map.Strict as M
|
||||
import Data.Maybe (fromMaybe)
|
||||
import Data.Maybe (fromMaybe, mapMaybe)
|
||||
import qualified Data.Set as S
|
||||
import Data.Text (Text)
|
||||
import GHC.Generics
|
||||
@@ -177,11 +177,15 @@ normalizeConsName pfx consName
|
||||
|
||||
-- making chatDir optional because clients use CIDirection? instead of CIQDirection (the type is replaced in Types.hs)
|
||||
ciQuoteType :: SumTypeInfo
|
||||
ciQuoteType =
|
||||
let st@(STI _ records) = sti @(CIQuote 'CTDirect)
|
||||
optChatDir f@(FieldInfo n t) = if n == "chatDir" then FieldInfo n (TIOptional t) else f
|
||||
updateRecord (RecordTypeInfo name fields) = RecordTypeInfo name $ map optChatDir fields
|
||||
in st {recordTypes = map updateRecord records} -- need to map even though there is one constructor in this type
|
||||
ciQuoteType = updateFields mkOptional $ sti @(CIQuote 'CTDirect)
|
||||
where
|
||||
mkOptional = map (\f@(FieldInfo n t) -> if n == "chatDir" then FieldInfo n (TIOptional t) else f)
|
||||
|
||||
removeField :: String -> SumTypeInfo -> SumTypeInfo
|
||||
removeField n = updateFields $ mapMaybe (\f@(FieldInfo n' _) -> if n == n' then Nothing else Just f)
|
||||
|
||||
updateFields :: ([FieldInfo] -> [FieldInfo]) -> SumTypeInfo -> SumTypeInfo
|
||||
updateFields f st@(STI _ records) = st {recordTypes = map (\(RecordTypeInfo name fields) -> RecordTypeInfo name $ f fields) records}
|
||||
|
||||
-- type info, JSON encoding, constructor prefix, removed constructors, string encoding for commands, description
|
||||
chatTypesDocsData :: [(SumTypeInfo, SumTypeJsonEncoding, String, [ConsName], Expr, Text)]
|
||||
@@ -302,7 +306,7 @@ chatTypesDocsData =
|
||||
(sti @GroupMemberSettings, STRecord, "", [], "", ""),
|
||||
(sti @GroupMemberStatus, STEnum' ((\case "group_deleted" -> "deleted"; "intro_invited" -> "intro-inv"; s -> s) . consSep "GSMem" '_'), "", [], "", ""),
|
||||
(sti @GroupPreference, STRecord, "", [], "", ""),
|
||||
(sti @GroupPreferences, STRecord, "", [], "", ""),
|
||||
(removeField "_json" $ sti @GroupPreferences, STRecord, "", [], "", ""),
|
||||
(sti @GroupProfile, STRecord, "", [], "", ""),
|
||||
(sti @GroupRelay, STRecord, "", [], "", ""),
|
||||
(sti @GroupShortLinkData, STRecord, "", [], "", ""),
|
||||
@@ -338,7 +342,7 @@ chatTypesDocsData =
|
||||
(sti @PendingContactConnection, STRecord, "", [], "", ""),
|
||||
(sti @PlanResolveMode, STEnum, "PRM", [], "", ""),
|
||||
(sti @PrefEnabled, STRecord, "", [], "", ""),
|
||||
(sti @Preferences, STRecord, "", [], "", ""),
|
||||
(removeField "_json" $ sti @Preferences, STRecord, "", [], "", ""),
|
||||
(sti @PreparedContact, STRecord, "", [], "", ""),
|
||||
(sti @GroupDirectInvitation, STRecord, "", [], "", ""),
|
||||
(sti @PreparedGroup, STRecord, "", [], "", ""),
|
||||
|
||||
Reference in New Issue
Block a user