From 2dd3856389f9080e122f3a76ceda9c64146eb262 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 22 Feb 2025 21:30:29 +0100 Subject: tea-cleaner: Configure word lists --- tea-cleaner/Main.hs | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to 'tea-cleaner/Main.hs') 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 -- cgit v1.2.3