tea-cleaner: Configure word lists

This commit is contained in:
2025-02-22 21:30:29 +01:00
parent a4c56fb432
commit 2dd3856389
4 changed files with 78 additions and 36 deletions

View File

@ -25,19 +25,32 @@ import TeaCleaner.Configuration
, execParser
)
import Control.Monad (when)
import Data.IORef (modifyIORef, readIORef)
handleResults :: Settings -> Bool -> Vector User -> IO ()
handleResults settings liveRun users = printCount
>> Vector.forM_ users (handleResult settings liveRun)
printStatistics :: Settings -> IO ()
printStatistics Settings{ statistics } =
readIORef statistics >>= printCount
where
printCount =
let count = Text.Builder.decimal $ Vector.length users
printCount count =
let count' = Text.Builder.decimal count
in Text.Lazy.IO.putStrLn
$ Text.Builder.toLazyText
$ "Count: " <> count
$ "Count: " <> count'
handleResult :: Settings -> Bool -> User -> IO ()
handleResult settings liveRun user = Text.IO.putStrLn buildValue
handleResults :: Settings -> Bool -> Vector FilterResult -> IO (Vector User)
handleResults settings liveRun =
Vector.foldM' handleResult Vector.empty
where
handleResult accumulator (FilterResult user FailedFilter)
= handleFailedFilter settings liveRun user
>> pure accumulator
handleResult accumulator (FilterResult _ PassFilter) = pure accumulator
handleResult accumulator (FilterResult user SuspiciousFilter) = pure
$ Vector.snoc accumulator user
handleFailedFilter :: Settings -> Bool -> User -> IO ()
handleFailedFilter settings liveRun user = Text.IO.putStrLn buildValue
>> modifyIORef (getField @"statistics" settings) (+ 1)
>> when liveRun (purgeUser settings user)
where
buildValue = getField @"username" user <> "\n"
@ -58,14 +71,7 @@ main = execParser commandLineInfo >>= withArguments
withSettings :: Bool -> Settings -> IO ()
withSettings liveRun settings = getUsers settings
>>= Vector.foldM' foldFilterResult Vector.empty . fmap filterByUserProperties
>>= handleResults settings liveRun . fmap (filterByUserProperties settings)
>>= traverse (filterByActivities settings)
>>= Vector.foldM' foldFilterResult Vector.empty
>>= handleResults settings liveRun
where
foldFilterResult accumulator (FilterResult user SuspiciousFilter)
= pure $ Vector.snoc accumulator user
foldFilterResult accumulator (FilterResult _ PassFilter) = pure accumulator
foldFilterResult accumulator (FilterResult user FailedFilter)
= handleResult settings liveRun user
>> pure accumulator
>> printStatistics settings