50 lines
1.5 KiB
Haskell
50 lines
1.5 KiB
Haskell
|
module Main (main) where
|
||
|
|
||
|
import Data.String.Interpolate (i)
|
||
|
import Data.Text qualified as Text
|
||
|
import Data.Text.Lazy qualified as LazyText
|
||
|
import Data.Time qualified as Time
|
||
|
import Relude
|
||
|
import System.FilePattern.Directory qualified as Directory
|
||
|
import Text.Atom.Feed qualified as Feed
|
||
|
import Text.Atom.Feed.Export qualified as Feed
|
||
|
import Witch
|
||
|
|
||
|
timestamp :: Time.UTCTime -> Text
|
||
|
timestamp = into . Time.formatTime Time.defaultTimeLocale "%Y-%m-%d %H:%M"
|
||
|
|
||
|
todayMask :: Time.UTCTime -> Directory.FilePattern
|
||
|
todayMask = Time.formatTime Time.defaultTimeLocale "%Y-%m-%d-*/index.html"
|
||
|
|
||
|
feedFromFileName :: Time.UTCTime -> Text -> Feed.Entry
|
||
|
feedFromFileName now file_name =
|
||
|
( Feed.nullEntry
|
||
|
folder_name
|
||
|
(Feed.TextString [i|mastodon digest #{digest_name}|])
|
||
|
(timestamp now)
|
||
|
)
|
||
|
{ Feed.entryLinks = [Feed.nullLink [i|http://hera.vpn.m-0.eu:8842/mastodon/#{file_name}|]]
|
||
|
}
|
||
|
where
|
||
|
digest_name = Text.drop 11 folder_name
|
||
|
folder_name =
|
||
|
Text.dropEnd 11 file_name
|
||
|
|
||
|
makeFeed :: Time.UTCTime -> [FilePath] -> Maybe LazyText.Text
|
||
|
makeFeed now file_names =
|
||
|
Feed.textFeed emptyFeed{Feed.feedEntries = feedFromFileName now . into <$> file_names}
|
||
|
where
|
||
|
emptyFeed =
|
||
|
Feed.nullFeed
|
||
|
[i|mastodon-summary-#{timestamp now}|]
|
||
|
(Feed.TextString "Mastodon Digests")
|
||
|
(timestamp now)
|
||
|
|
||
|
main :: IO ()
|
||
|
main = do
|
||
|
[out_file, dir] <- getArgs
|
||
|
now <- Time.getCurrentTime
|
||
|
file_names <- Directory.getDirectoryFiles dir [todayMask now]
|
||
|
whenJust (makeFeed now file_names) $
|
||
|
\file -> writeFileLText out_file file
|