48 lines
2.0 KiB
Haskell
48 lines
2.0 KiB
Haskell
module Main
|
|
( main
|
|
) where
|
|
|
|
import Data.Text (StrictText)
|
|
import Data.Vector (Vector)
|
|
import qualified Data.Text as Text
|
|
import Text.URI (URI, mkURI)
|
|
import qualified Data.Vector as Vector
|
|
import qualified Data.Text.IO as Text.IO
|
|
import qualified Data.Text.Lazy.IO as Text.Lazy.IO
|
|
import qualified Data.Text.Lazy.Builder as Text.Builder
|
|
import qualified Data.Text.Lazy.Builder.Int as Text.Builder
|
|
import GHC.Records (HasField(..))
|
|
import TeaCleaner.Filter (filterByActivities, filterByUserProperties)
|
|
import TeaCleaner.Client (User(..), getUsers, purgeUser)
|
|
import TeaCleaner.CommandLine (ProgramOptions(..), commandLineInfo, execParser)
|
|
|
|
printUsers :: URI -> StrictText -> Bool -> Vector User -> IO ()
|
|
printUsers server token liveRun users = printCount
|
|
>> Vector.forM_ users (printUser liveRun)
|
|
where
|
|
printCount =
|
|
let count = Text.Builder.decimal $ Vector.length users
|
|
in Text.Lazy.IO.putStrLn
|
|
$ Text.Builder.toLazyText
|
|
$ "Count: " <> count
|
|
buildValue user = getField @"username" user <> "\n"
|
|
<> " Website: " <> getField @"website" user <> "\n"
|
|
<> " Created: " <> Text.pack (show $ getField @"created" user) <> "\n"
|
|
<> " Last login: " <> Text.pack (show $ getField @"lastLogin" user) <> "\n"
|
|
<> " Email: " <> getField @"email" user <> "\n"
|
|
<> " Website: " <> getField @"website" user <> "\n"
|
|
<> " Description: " <> getField @"description" user <> "\n"
|
|
<> " Avatar: " <> getField @"avatarUrl" user <> "\n"
|
|
<> "\n"
|
|
printUser True user = Text.IO.putStrLn (buildValue user)
|
|
>> purgeUser server token user
|
|
printUser False user = Text.IO.putStrLn (buildValue user)
|
|
|
|
main :: IO ()
|
|
main = execParser commandLineInfo >>= withArguments
|
|
where
|
|
withArguments ProgramOptions{..} = mkURI server >>= withServer liveRun token
|
|
withServer liveRun token server = getUsers server token
|
|
>>= Vector.filterM (filterByActivities server token) . Vector.filter filterByUserProperties
|
|
>>= printUsers server token liveRun
|