aboutsummaryrefslogtreecommitdiff
path: root/tea-cleaner/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'tea-cleaner/Main.hs')
-rw-r--r--tea-cleaner/Main.hs40
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