Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5cce1fc042 | ||
|
|
859f1d189e | ||
|
|
9959c36a42 | ||
|
|
dbacbb10ad | ||
|
|
d736766981 | ||
|
|
de08373d2d |
@@ -1,5 +1,12 @@
|
|||||||
# yore
|
# yore
|
||||||
|
|
||||||
|
[fz.beany.club](https://fz.beany.club) shows the [Freiburger Zeitung](https://www.ub.uni-freiburg.de/?id=117) (an important Freiburg im Breisgau newspaper going back to 1784) from exactly 100 years ago.
|
||||||
|
It is feature-poor on purpose: You can browse a daily issue during your coffee break and that is basically it.
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| --- | --- |
|
||||||
|
| October 5th, 1925 | September 15th, 1926 |
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
`flake.nix` defines a development shell that has everything you'll need. To enter, run
|
`flake.nix` defines a development shell that has everything you'll need. To enter, run
|
||||||
@@ -47,5 +54,4 @@ By setting `$BASE_DIR` you can persist the database for later runs.
|
|||||||
- [x] Test leap second handling in the `time` package
|
- [x] Test leap second handling in the `time` package
|
||||||
- [x] Fix container shutdown delay
|
- [x] Fix container shutdown delay
|
||||||
- [ ] Fix `responseFile` always returning 200
|
- [ ] Fix `responseFile` always returning 200
|
||||||
- [ ] use queue to sync logging of indexer and main thread
|
|
||||||
- [x] Vendor PDF.js for consistent cross-platform PDF rendering
|
- [x] Vendor PDF.js for consistent cross-platform PDF rendering
|
||||||
|
|||||||
+2
-3
@@ -65,7 +65,6 @@ import Yore.Time (addYears, getCurrentDay, getSecondsUntilMidnight)
|
|||||||
import Data.Fixed (Pico)
|
import Data.Fixed (Pico)
|
||||||
import Data.Time.Clock.POSIX (getPOSIXTime)
|
import Data.Time.Clock.POSIX (getPOSIXTime)
|
||||||
import qualified Envy
|
import qualified Envy
|
||||||
import System.IO (BufferMode (..), hSetBuffering, stdout)
|
|
||||||
import qualified Yore.DB as DB
|
import qualified Yore.DB as DB
|
||||||
import qualified Yore.Log as Log
|
import qualified Yore.Log as Log
|
||||||
|
|
||||||
@@ -83,7 +82,7 @@ deriving instance Show Config
|
|||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
hSetBuffering stdout NoBuffering
|
Log.setup
|
||||||
|
|
||||||
cfg <-
|
cfg <-
|
||||||
Envy.load @ConfigT >>= \case
|
Envy.load @ConfigT >>= \case
|
||||||
@@ -244,7 +243,7 @@ instance MimeRender HTML RootModel where
|
|||||||
H.iframe ! A.src (H.toValue url) ! A.class_ "content" $ mempty
|
H.iframe ! A.src (H.toValue url) ! A.class_ "content" $ mempty
|
||||||
where
|
where
|
||||||
url :: String
|
url :: String
|
||||||
url = printf "/static/pdfjs-5.7.284-dist/web/viewer.html?file=/api/today/issue/%d/fz.pdf" issue
|
url = printf "/static/pdfjs-5.7.284-dist/web/viewer.html?file=/api/today/issue/%d/fz.pdf#zoom=page-width" issue
|
||||||
|
|
||||||
(y, m, d) = toGregorian dateThen
|
(y, m, d) = toGregorian dateThen
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 152 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 190 KiB |
+9
-2
@@ -1,11 +1,18 @@
|
|||||||
module Yore.Log (Yore.Log.error, info) where
|
module Yore.Log (Yore.Log.error, info, setup) where
|
||||||
|
|
||||||
import Control.Monad.IO.Class (MonadIO (..))
|
import Control.Monad.IO.Class (MonadIO (..))
|
||||||
import Data.Time (ZonedTime, getZonedTime)
|
import Data.Time (ZonedTime, getZonedTime)
|
||||||
import Data.Time.Format (defaultTimeLocale, formatTime)
|
import Data.Time.Format (defaultTimeLocale, formatTime)
|
||||||
import GHC.Stack (HasCallStack, SrcLoc (..), callStack, getCallStack)
|
import GHC.Stack (HasCallStack, SrcLoc (..), callStack, getCallStack)
|
||||||
|
import System.IO (BufferMode (..), hSetBuffering, stdout)
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
|
|
||||||
|
import qualified Data.Text as Text
|
||||||
|
import qualified Data.Text.IO as TextIO
|
||||||
|
|
||||||
|
setup :: IO ()
|
||||||
|
setup = hSetBuffering stdout LineBuffering
|
||||||
|
|
||||||
info :: (HasCallStack, MonadIO m) => String -> m ()
|
info :: (HasCallStack, MonadIO m) => String -> m ()
|
||||||
info = doLog "INF"
|
info = doLog "INF"
|
||||||
|
|
||||||
@@ -16,7 +23,7 @@ doLog :: (HasCallStack, MonadIO m) => String -> String -> m ()
|
|||||||
doLog level msg = liftIO $ do
|
doLog level msg = liftIO $ do
|
||||||
now <- getZonedTime
|
now <- getZonedTime
|
||||||
let location = getLocation $ getCallStack callStack
|
let location = getLocation $ getCallStack callStack
|
||||||
printf "(%s) (%s) (%s) %s\n" (iso8601Show now) level location msg
|
TextIO.putStrLn $ Text.pack $ printf "(%s) (%s) (%s) %s" (iso8601Show now) level location msg
|
||||||
where
|
where
|
||||||
getLocation :: [(String, SrcLoc)] -> String
|
getLocation :: [(String, SrcLoc)] -> String
|
||||||
-- First entry is always a function from this module, skip it
|
-- First entry is always a function from this module, skip it
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
cabal-version: 3.4
|
cabal-version: 3.4
|
||||||
|
|
||||||
name: yore
|
name: yore
|
||||||
version: 0.0.10
|
version: 0.0.12
|
||||||
author: Paul Brinkmeier
|
author: Paul Brinkmeier
|
||||||
maintainer: hallo@pbrinkmeier.de
|
maintainer: hallo@pbrinkmeier.de
|
||||||
copyright: 2023 Paul Brinkmeier
|
copyright: 2023 Paul Brinkmeier
|
||||||
|
|||||||
Reference in New Issue
Block a user