diff options
| author | Eugen Wissner <belka@caraus.de> | 2025-02-22 21:30:29 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2025-02-22 21:30:29 +0100 |
| commit | 2dd3856389f9080e122f3a76ceda9c64146eb262 (patch) | |
| tree | 79f10519b37575d623de2197165e62a5a4438389 /tea-cleaner/Main.hs | |
| parent | a4c56fb432e8fd75df930647427bcb582e989344 (diff) | |
| download | kazbek-2dd3856389f9080e122f3a76ceda9c64146eb262.tar.gz | |
tea-cleaner: Configure word lists
Diffstat (limited to 'tea-cleaner/Main.hs')
| -rw-r--r-- | tea-cleaner/Main.hs | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/tea-cleaner/Main.hs b/tea-cleaner/Main.hs index 949d62a..e9fead1 100644 --- a/tea-cleaner/Main.hs +++ b/tea-cleaner/Main.hs @@ -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 |
