diff options
| -rw-r--r-- | src/Main.hs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/Main.hs b/src/Main.hs index b65d67e..7506fe4 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -3,7 +3,7 @@ {-# LANGUAGE ViewPatterns #-} module Main (main) where -import Control.Monad (forM, guard) +import Control.Monad (forM, guard, forM_) import Data.ByteString (ByteString) import Data.ByteString qualified as BS import Data.ByteString.Char8 qualified as BS8 @@ -20,6 +20,7 @@ import Data.Text.IO.Utf8 qualified as T import Data.Time (Day, toGregorian, fromGregorianValid) import System.Environment import System.Exit (die) +import System.FilePath ((</>)) import Text.Mustache (Template, compileTemplate, substituteValue, (~>)) import Text.Mustache qualified as M import Text.Mustache.Types (Value(..)) @@ -35,6 +36,7 @@ import Config import Index import Util import ZNC +import System.Directory (listDirectory) newtype Pages = Pages (Map String Template) @@ -274,8 +276,24 @@ mainServe confpath = do testParseLog :: FilePath -> IO () testParseLog fname = print =<< parseLog <$> BS.readFile fname +testCount :: FilePath -> IO () +testCount confpath = do + config <- enrichConfig <$> readConfig confpath + forM_ (econfChannels config) $ \(Channel nw ch) -> do + -- forM_ [Channel "liberachat" "#haskell"] $ \(Channel nw ch) -> do + let dir = confLogsDir config </> T.unpack nw </> T.unpack ch + files <- listDirectory dir + forM_ files $ \file -> do + evs <- parseLog <$> BS.readFile (dir </> file) + forM_ evs $ \case + (_, Talk _ msg) -> return () + (_, Notice n msg) -> error (show (n, msg)) + (_, Act _ msg) -> return () + _ -> return () + main :: IO () main = getArgs >>= \case ["test", "parselog", fname] -> testParseLog fname + ["test", "count", fname] -> testCount fname ["serve", fname] -> mainServe fname _ -> die "Expected command-line argument (see Main.hs)" |
