{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}

module Simplex.Chat.Help
  ( chatWelcome,
    chatHelpInfo,
    filesHelpInfo,
    groupsHelpInfo,
    contactsHelpInfo,
    myAddressHelpInfo,
    incognitoHelpInfo,
    messagesHelpInfo,
    remoteHelpInfo,
    markdownInfo,
    settingsInfo,
    databaseHelpInfo,
  )
where

import Data.List (intersperse)
import Data.Text (Text)
import qualified Data.Text as T
import Simplex.Chat.Markdown
import Simplex.Chat.Styled
import Simplex.Chat.Types (LocalProfile (..), User (..))
import System.Console.ANSI.Types

highlight :: Text -> Markdown
highlight :: Text -> Markdown
highlight = Format -> Text -> Markdown
markdown (Color -> Format
colored Color
Cyan)

green :: Text -> Markdown
green :: Text -> Markdown
green = Format -> Text -> Markdown
markdown (Color -> Format
colored Color
Green)

indent :: Markdown
indent :: Markdown
indent = Markdown
"        "

listHighlight :: [Text] -> Markdown
listHighlight :: [Text] -> Markdown
listHighlight = [Markdown] -> Markdown
forall a. Monoid a => [a] -> a
mconcat ([Markdown] -> Markdown)
-> ([Text] -> [Markdown]) -> [Text] -> Markdown
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Markdown -> [Markdown] -> [Markdown]
forall a. a -> [a] -> [a]
intersperse Markdown
", " ([Markdown] -> [Markdown])
-> ([Text] -> [Markdown]) -> [Text] -> [Markdown]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text -> Markdown) -> [Text] -> [Markdown]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Markdown
highlight

chatWelcome :: User -> [StyledString]
chatWelcome :: User -> [StyledString]
chatWelcome User
user =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Markdown
"                             __   __",
      Markdown
"  ___ ___ __  __ ___ _    ___" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"\\ \\ / /" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" ___ _  _   _ _____",
      Markdown
" / __|_ _|  \\/  | _ \\ |  | __ " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"\\ V /" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" / __| || | /_\\_   _|",
      Markdown
" \\__ \\| || |\\/| |  _/ |__| _|" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" / . \\" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"| (__| __ |/ _ \\| |",
      Markdown
" |___/___|_|  |_|_| |____|___" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"/_/ \\_\\" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"\\___|_||_/_/ \\_\\_|",
      Markdown
"",
      Markdown
"Welcome " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
green Text
userName Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"!",
      Markdown
"Thank you for installing SimpleX Chat!",
      Markdown
"",
      Markdown
"Connect to SimpleX Chat developers for any questions - just type " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/simplex",
      Markdown
"",
      Markdown
"Follow our updates:",
      Markdown
"> Reddit: https://www.reddit.com/r/SimpleXChat/",
      Markdown
"> Twitter: https://twitter.com/SimpleXChat",
      Markdown
"",
      Markdown
"Type " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/help" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" for usage info, " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/welcome" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" to show this message"
    ]
  where
    User {profile :: User -> LocalProfile
profile = LocalProfile {Text
displayName :: Text
displayName :: LocalProfile -> Text
displayName, Text
fullName :: Text
fullName :: LocalProfile -> Text
fullName}} = User
user
    userName :: Text
userName = if Text -> Bool
T.null Text
fullName then Text
displayName else Text
fullName

chatHelpInfo :: [StyledString]
chatHelpInfo :: [StyledString]
chatHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
highlight Text
"Using SimpleX Chat",
      Markdown
"Follow these steps to set up a connection:",
      Markdown
"",
      Text -> Markdown
green Text
"Step 1: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/connect" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - Alice adds a contact.",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"Alice should send the one-time invitation printed by the /connect command",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"to her contact, Bob, out-of-band, via any trusted channel.",
      Markdown
"",
      Text -> Markdown
green Text
"Step 2: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/connect <invitation>" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - Bob accepts the invitation.",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"Bob should use the invitation he received out-of-band.",
      Markdown
"",
      Text -> Markdown
green Text
"Step 3: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"Bob and Alice are notified that the connection is set up,",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"both can now send messages:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"@bob Hello, Bob!" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - Alice messages Bob (assuming Bob has display name 'bob').",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"@alice Hey, Alice!" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - Bob replies to Alice.",
      Markdown
"",
      Text -> Markdown
green Text
"Send file: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/file bob ./photo.jpg",
      Markdown
"",
      Text -> Markdown
green Text
"Create group: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/group team",
      Markdown
"",
      Text -> Markdown
green Text
"Create your address: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/address",
      Markdown
"",
      Text -> Markdown
green Text
"Other commands:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/help <topic>    " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - help on: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"groups", Text
"contacts", Text
"messages", Text
"files", Text
"address", Text
"incognito", Text
"remote", Text
"settings", Text
"db"],
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/profile         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show / update user profile",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete <contact>" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete contact and all messages with them",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/chats           " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - most recent chats",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/markdown        " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - supported markdown syntax",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/version         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - SimpleX Chat version",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/quit            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - quit chat",
      Markdown
"",
      Markdown
"The commands may be abbreviated: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"/c", Text
"/f", Text
"/g", Text
"/p", Text
"/ad"] Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
", etc."
    ]

filesHelpInfo :: [StyledString]
filesHelpInfo :: [StyledString]
filesHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"File transfer commands:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/file @<contact> <file_path>       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - send file to contact",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/file #<group> <file_path>         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - send file to group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/image <name> [<file_path>]        " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - send file as image to @contact or #group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/freceive <file_id> [<file_path>]  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - accept to receive file",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/fforward <name> [<file_id>]       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - forward received file to @contact or #group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/fcancel <file_id>                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - cancel sending / receiving file",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/fstatus <file_id>                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show file transfer status",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/imgf @<contact> <file_id>         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - forward received image to contact",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/imgf #<group> <file_id>           " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - forward received image to group",
      Markdown
"",
      Markdown
"The commands may be abbreviated: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"/f", Text
"/img", Text
"/fr", Text
"/ff", Text
"/fc", Text
"/fs"]
    ]

groupsHelpInfo :: [StyledString]
groupsHelpInfo :: [StyledString]
groupsHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Group commands:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/group <group> [<description>]     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - create group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/add <group> <contact> [<role>]    " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - add contact to group, roles: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"owner" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
", " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"admin" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" (default), " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"member",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/join <group>                      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - accept group invitation",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/members <group>                   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - list group members",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/remove <group> <member>           " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - remove member from group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/leave <group>                     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - leave group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/clear #<group>                    " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - clear all messages in the group locally",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete #<group>                   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete group and all messages",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/gp <group>                        " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - view group profile",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/gp <group> <name> [<description>] " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - update group profile names",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set welcome <group> <welcome>     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - set group welcome message",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete welcome <group>            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete group welcome message",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/show welcome <group>              " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show group welcome message",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/groups                            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - list groups",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"#<group> <message>                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - send message to group",
      Markdown
"",
      Text -> Markdown
green Text
"Public group links:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/create link #<group> [role]       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - create public group link (with optional role, default: member)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set link role #<group> role       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - change role assigned to the users joining via the link (member/observer)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/show link #<group>                " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show public group link and initial member role",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete link #<group>              " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete link to join the group (does NOT delete any members)",
      Markdown
"",
      Text -> Markdown
green Text
"Mute group messages:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/mute #<group>                     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - do not show contact's messages",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/unmute #<group>                   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show contact's messages",
      Markdown
"",
      Text -> Markdown
green Text
"Group member connection and security:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/code #<group> <member>            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show member's security code",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/verify #<group> <member> <code>   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - verify member's security code",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/verify #<group> <member>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - clear security code verification",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/info #<group> <member>            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - info about member connection",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/switch #<group> <member>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - switch receiving messages to another SMP relay",
      Markdown
"",
      Text -> Markdown
green Text
"Group chat preferences:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set voice #<group> on/off         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable/disable voice messages",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set files #<group> on/off         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable/disable files and media (other than voice)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set history #<group> on/off       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable/disable sending recent history to new members",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set delete #<group> on/off        " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable/disable full message deletion",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set direct #<group> on/off        " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable/disable direct messages to other members",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set disappear #<group> on <time>  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable disappearing messages with <time>:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"                                   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"   30s, 5min, 1h, 8h, day, week, month",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set disappear #<group> off        " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - disable disappearing messages",
      Markdown
"",
      Markdown
"The commands may be abbreviated: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"/g", Text
"/a", Text
"/j", Text
"/rm", Text
"/l", Text
"/d", Text
"/ms", Text
"/gs"]
    ]

contactsHelpInfo :: [StyledString]
contactsHelpInfo :: [StyledString]
contactsHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Contact commands:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/contacts                " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - list contacts",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/clear @<name>           " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - clear all messages with the contact locally",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete @<name>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete contact and all messages",
      Markdown
"",
      Text -> Markdown
green Text
"Mute contact messages:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/mute @<name>            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - do not show contact's messages",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/unmute @<name>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show contact's messages",
      Markdown
"",
      Text -> Markdown
green Text
"Contact connection and security:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/code @<name>            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show contact's security code",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/verify @<name> <code>   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - verify contact's security code",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/verify @<name>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - clear security code verification",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/info @<name>            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - info about contact connection",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/switch @<name>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - switch receiving messages to another SMP relay",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/pq @<name> on/off       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - [BETA] toggle quantum resistant / standard e2e encryption for a contact",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<>           Markdown
"                         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"   (both have to enable for quantum resistance)",
      Markdown
"",
      Text -> Markdown
green Text
"Contact chat preferences:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set voice @<name> yes/no/always   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - allow/prohibit voice messages with the contact",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set voice @<name>                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - reset voice messages to user's default",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set delete @<name> yes/no/always  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - allow/prohibit full message deletion",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set delete @<name>                " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - reset full deletion to user's default",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set disappear @<name> yes <time>  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable disappearing messages with <time>:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"                                   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"   30s, 5min, 1h, 8h, day, week, month",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set disappear @<name> yes         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - enable disappearing messages with offered time",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set disappear @<name> no          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - disable disappearing messages",
      Markdown
"",
      Markdown
"The commands may be abbreviated: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"/d", Text
"/i"]
    ]

myAddressHelpInfo :: [StyledString]
myAddressHelpInfo :: [StyledString]
myAddressHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Your contact address commands:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/address                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - create your address",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/profile_address on/off  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - share address with your contacts (it will be added to your profile)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete_address          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete your address (accepted contacts will remain connected)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/show_address            " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show your address",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/accept <name>           " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - accept contact request",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/reject <name>           " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - reject contact request",
      Markdown
"",
      Markdown
"Please note: you can receive spam contact requests, but it's safe to delete the address!",
      Markdown
"",
      Markdown
"The commands may be abbreviated: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"/ad", Text
"/da", Text
"/sa", Text
"/ac", Text
"/rc"]
    ]

incognitoHelpInfo :: [StyledString]
incognitoHelpInfo :: [StyledString]
incognitoHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Format -> Text -> Markdown
markdown (Color -> Format
colored Color
Red) Text
"/incognito" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" command is deprecated, use commands below instead.",
      Markdown
"",
      Markdown
"Incognito mode protects the privacy of your main profile — you can choose to create a new random profile for each new contact.",
      Markdown
"It allows having many anonymous connections without any shared data between them in a single chat profile.",
      Markdown
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.",
      Markdown
"",
      Text -> Markdown
green Text
"Incognito commands:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/connect incognito               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - create new invitation link using incognito profile",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/connect incognito <invitation>  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - accept invitation using incognito profile",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/accept incognito <name>         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - accept contact request using incognito profile",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/simplex incognito               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - connect to SimpleX Chat developers using incognito profile",
      Markdown
"",
      Markdown
"The commands may be abbreviated: " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> [Text] -> Markdown
listHighlight [Text
"/c i", Text
"/c i <invitation>", Text
"/ac i <name>"],
      Markdown
"To find the profile used for an incognito connection, use " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/info <contact>" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
"."
    ]

messagesHelpInfo :: [StyledString]
messagesHelpInfo :: [StyledString]
messagesHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Show recent chats",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/chats [N]               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the most recent N conversations (20 by default)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/chats all               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - all conversations",
      Markdown
"",
      Text -> Markdown
green Text
"Show recent messages",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/tail @alice [N]         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the last N messages with alice (10 by default)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/tail #team [N]          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the last N messages in the group team",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/tail [N]                " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the last N messages in all chats",
      Markdown
"",
      Text -> Markdown
green Text
"Search for messages",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/search @alice [N] <text>" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the last N messages with alice containing <text> (10 by default)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/search #team [N] <text> " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the last N messages in the group team containing <text>",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/search [N] <text>       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - the last N messages in all chats containing <text>",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/?" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" can be used instead of /search",
      Markdown
"",
      Text -> Markdown
green Text
"Sending replies to messages",
      Markdown
"To quote a message that starts with \"hi\":",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"> @alice (hi) <msg>      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to reply to alice's most recent message",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
">> @alice (hi) <msg>     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to quote user's most recent message to alice",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"> #team (hi) <msg>       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to quote most recent message in the group from any member",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"> #team @alice (hi) <msg>" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to quote alice's most recent message in the group #team",
      Markdown
"",
      Text -> Markdown
green Text
"Deleting sent messages (for everyone)",
      Markdown
"To delete a message that starts with \"hi\":",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"\\ @alice hi             " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to delete your message to alice",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"\\ #team hi              " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to delete your message in the group #team",
      Markdown
"",
      Text -> Markdown
green Text
"Editing sent messages",
      Markdown
"To edit your last message press up arrow, edit (keep the initial ! symbol) and press enter.",
      Markdown
"To edit your most recent message that starts with \"hi\":",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"! @alice (hi) <new msg>  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to edit your message to alice",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"! #team (hi) <new msg>   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - to edit your message in the group #team"
    ]

remoteHelpInfo :: [StyledString]
remoteHelpInfo :: [StyledString]
remoteHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Remote control",
      Markdown
"You can use CLI as a remote controller for a mobile app or as a remote host for a desktop app (or another CLI).",
      Markdown
"For example, you can run CLI on a server and use it from a desktop computer, connecting via SSH port forwarding.",
      Markdown
"",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/set device name <name> " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - set CLI name for remote connections",
      Markdown
"",
      Text -> Markdown
green Text
"Using as remote controller",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/start remote host new                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - pair and connect a new remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/start remote host <id> [multicast=on] " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - start connection with a known (paired) remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/stop remote host new                  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - cancel pairing with a new remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/stop remote host <id>                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - stop connection with connected remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/switch remote host local              " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - switch to using local database",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/switch remote host <id>               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - switch to connected remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/list remote hosts                     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - list known remote hosts",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete remote host <id>               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete (unpair) known remote hosts - also deletes all host files from controller",
      Markdown
"",
      Text -> Markdown
green Text
"Using as remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/connect remote ctrl <session_address> " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - connect to remote controller via the adress from /start remote host",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/stop remote ctrl                      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - stop connection with remote controller",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/find remote ctrl                      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - find known remote controller on the local network (it should be started with multicast=on)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/list remote ctrls                     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - list known remote controllers",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/delete remote ctrl <id>               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - delete known remote controller"
    ]

markdownInfo :: [StyledString]
markdownInfo :: [StyledString]
markdownInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Markdown:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"*bold*         " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Format -> Text -> Markdown
markdown Format
Bold Text
"bold text",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"_italic_       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Format -> Text -> Markdown
markdown Format
Italic Text
"italic text" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" (shown as underlined)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"~strikethrough~" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Format -> Text -> Markdown
markdown Format
StrikeThrough Text
"strikethrough text" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" (shown as inverse)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"`code snippet` " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Format -> Text -> Markdown
markdown Format
Snippet Text
"a + b // no *markdown* here",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"!1 text!       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Format -> Text -> Markdown
markdown (Color -> Format
colored Color
Red) Text
"red text" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" (1-6: red, green, blue, yellow, cyan, magenta)",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"#secret#       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Format -> Text -> Markdown
markdown Format
Secret Text
"secret text" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" (can be copy-pasted)"
    ]

settingsInfo :: [StyledString]
settingsInfo :: [StyledString]
settingsInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Chat settings:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/pq on/off               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - [BETA] toggle quantum resistant / standard e2e encryption for the new contacts",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/network                 " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show / set network access options",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/smp                     " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show / set configured SMP servers",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/xftp                    " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - show / set configured XFTP servers",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/info <contact>          " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - information about contact connection",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/info #<group> <member>  " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - information about member connection",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/(un)mute <contact>      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - (un)mute contact, the last messages can be printed with /tail command",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/(un)mute #<group>       " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - (un)mute group",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/get stats               " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - get usage statistics",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/reset stats             " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - reset usage statistics"
    ]

databaseHelpInfo :: [StyledString]
databaseHelpInfo :: [StyledString]
databaseHelpInfo =
  (Markdown -> StyledString) -> [Markdown] -> [StyledString]
forall a b. (a -> b) -> [a] -> [b]
map
    Markdown -> StyledString
styleMarkdown
    [ Text -> Markdown
green Text
"Database export:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/db export             " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - create database export file that can be imported in mobile apps",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/files_folder <path>   " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - set files folder path to include app files in the exported archive",
      Markdown
"",
      Text -> Markdown
green Text
"Database encryption:",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/db encrypt <key>      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - encrypt chat database with key/passphrase",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/db key <current> <new>" Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - change the key of the encrypted app database",
      Markdown
indent Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Text -> Markdown
highlight Text
"/db decrypt <key>      " Markdown -> Markdown -> Markdown
forall a. Semigroup a => a -> a -> a
<> Markdown
" - decrypt chat database"
    ]