2021-03-09 07:05:08 +00:00
|
|
|
{-# LANGUAGE LambdaCase #-}
|
|
|
|
|
2021-01-31 17:29:16 +00:00
|
|
|
module ChatOptions (getChatOpts, ChatOpts (..)) where
|
|
|
|
|
|
|
|
import qualified Data.Attoparsec.ByteString.Char8 as A
|
2021-04-07 20:20:32 +01:00
|
|
|
import Data.ByteString.Char8 (ByteString)
|
2021-01-31 17:29:16 +00:00
|
|
|
import qualified Data.ByteString.Char8 as B
|
|
|
|
import Options.Applicative
|
|
|
|
import Simplex.Messaging.Agent.Transmission (SMPServer (..), smpServerP)
|
2021-03-29 19:18:54 +04:00
|
|
|
import System.FilePath (combine)
|
2021-03-09 07:05:08 +00:00
|
|
|
import Types
|
2021-01-31 17:29:16 +00:00
|
|
|
|
|
|
|
data ChatOpts = ChatOpts
|
2021-04-07 20:20:32 +01:00
|
|
|
{ name :: Maybe ByteString,
|
2021-01-31 17:29:16 +00:00
|
|
|
dbFileName :: String,
|
2021-03-09 07:05:08 +00:00
|
|
|
smpServer :: SMPServer,
|
|
|
|
termMode :: TermMode
|
2021-01-31 17:29:16 +00:00
|
|
|
}
|
|
|
|
|
2021-03-29 19:18:54 +04:00
|
|
|
chatOpts :: FilePath -> Parser ChatOpts
|
2021-04-03 20:39:37 +01:00
|
|
|
chatOpts appDir =
|
2021-01-31 17:29:16 +00:00
|
|
|
ChatOpts
|
|
|
|
<$> option
|
2021-03-09 07:05:08 +00:00
|
|
|
(Just <$> str)
|
2021-01-31 17:29:16 +00:00
|
|
|
( long "name"
|
|
|
|
<> short 'n'
|
|
|
|
<> metavar "NAME"
|
|
|
|
<> help "optional name to use for invitations"
|
|
|
|
<> value Nothing
|
|
|
|
)
|
|
|
|
<*> strOption
|
|
|
|
( long "database"
|
|
|
|
<> short 'd'
|
|
|
|
<> metavar "DB_FILE"
|
2021-04-03 20:39:37 +01:00
|
|
|
<> help ("sqlite database file path (" <> defaultDbFilePath <> ")")
|
2021-03-29 19:18:54 +04:00
|
|
|
<> value defaultDbFilePath
|
2021-01-31 17:29:16 +00:00
|
|
|
)
|
|
|
|
<*> option
|
|
|
|
parseSMPServer
|
|
|
|
( long "server"
|
|
|
|
<> short 's'
|
|
|
|
<> metavar "SERVER"
|
2021-02-16 01:01:46 +04:00
|
|
|
<> help "SMP server to use (smp.simplex.im:5223)"
|
2021-01-31 17:29:16 +00:00
|
|
|
<> value (SMPServer "smp.simplex.im" (Just "5223") Nothing)
|
|
|
|
)
|
2021-03-09 07:05:08 +00:00
|
|
|
<*> option
|
|
|
|
parseTermMode
|
|
|
|
( long "term"
|
|
|
|
<> short 't'
|
|
|
|
<> metavar "TERM"
|
2021-04-10 11:57:28 +01:00
|
|
|
<> help ("terminal mode: editor or basic (" <> termModeName TermModeEditor <> ")")
|
|
|
|
<> value TermModeEditor
|
2021-03-09 07:05:08 +00:00
|
|
|
)
|
2021-04-03 20:39:37 +01:00
|
|
|
where
|
|
|
|
defaultDbFilePath = combine appDir "smp-chat.db"
|
2021-01-31 17:29:16 +00:00
|
|
|
|
|
|
|
parseSMPServer :: ReadM SMPServer
|
|
|
|
parseSMPServer = eitherReader $ A.parseOnly (smpServerP <* A.endOfInput) . B.pack
|
|
|
|
|
2021-03-09 07:05:08 +00:00
|
|
|
parseTermMode :: ReadM TermMode
|
|
|
|
parseTermMode = maybeReader $ \case
|
|
|
|
"basic" -> Just TermModeBasic
|
|
|
|
"editor" -> Just TermModeEditor
|
|
|
|
_ -> Nothing
|
|
|
|
|
2021-03-29 19:18:54 +04:00
|
|
|
getChatOpts :: FilePath -> IO ChatOpts
|
|
|
|
getChatOpts appDir = execParser opts
|
2021-01-31 17:29:16 +00:00
|
|
|
where
|
|
|
|
opts =
|
|
|
|
info
|
2021-03-29 19:18:54 +04:00
|
|
|
(chatOpts appDir <**> helper)
|
2021-01-31 17:29:16 +00:00
|
|
|
( fullDesc
|
|
|
|
<> header "Chat prototype using Simplex Messaging Protocol (SMP)"
|
|
|
|
<> progDesc "Start chat with DB_FILE file and use SERVER as SMP server"
|
|
|
|
)
|