48 lines
2.0 KiB
Haskell
Raw Normal View History

2025-01-24 22:38:58 +01:00
module Main
( main
) where
2025-01-26 10:17:33 +01:00
import Data.Text (StrictText)
2025-01-24 22:38:58 +01:00
import Data.Vector (Vector)
import qualified Data.Text as Text
2025-01-26 10:17:33 +01:00
import Text.URI (URI, mkURI)
2025-01-24 22:38:58 +01:00
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(..))
2025-01-26 10:17:33 +01:00
import TeaCleaner.Filter (filterByActivities, filterByUserProperties)
import TeaCleaner.Client (User(..), getUsers, purgeUser)
import TeaCleaner.CommandLine (ProgramOptions(..), commandLineInfo, execParser)
2025-01-24 22:38:58 +01:00
2025-01-26 10:17:33 +01:00
printUsers :: URI -> StrictText -> Bool -> Vector User -> IO ()
printUsers server token liveRun users = printCount
>> Vector.forM_ users (printUser liveRun)
2025-01-24 22:38:58 +01:00
where
printCount =
let count = Text.Builder.decimal $ Vector.length users
in Text.Lazy.IO.putStrLn
$ Text.Builder.toLazyText
$ "Count: " <> count
2025-01-26 10:17:33 +01:00
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)
2025-01-24 22:38:58 +01:00
main :: IO ()
2025-01-26 10:17:33 +01:00
main = execParser commandLineInfo >>= withArguments
2025-01-24 22:38:58 +01:00
where
2025-01-26 10:17:33 +01:00
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