Skip to content

Commit

Permalink
Merge pull request #289 from krymtkts:feature/max-pages-read
Browse files Browse the repository at this point in the history
Add max pages read
  • Loading branch information
krymtkts authored Dec 23, 2024
2 parents 0803333 + f624b5e commit 5e987f7
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 18 deletions.
48 changes: 32 additions & 16 deletions src/Booklog.fs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ type Streak =
endDate: DateTime
count: int }

type StreakSummary = { longest: Streak; current: Streak }

type StreakSummary =
{ longest: Streak
current: Streak
maxPagesRead: int }

[<RequireQualifiedAccess>]
module Parser =
Expand Down Expand Up @@ -139,6 +141,21 @@ module Misc =
]
]

let private (|Int|_|) (str: string) =
match System.Int32.TryParse str with
| true, int -> Some int
| _ -> None

let readPages (pages: string) =
pages.Split([| '~' |])
|> function
| [| Int s; Int e |] -> e - s + 1
| [| Int _ |] -> 1
| _ -> 0

let private getMaxPagesRead (booklogs: Booklog list) =
booklogs |> List.map (_.pages >> readPages) |> List.max

let private getStreakSummary (booklogs: Booklog list) =
let current, longest =
booklogs
Expand Down Expand Up @@ -168,16 +185,20 @@ module Misc =
Some current, Some longest)
(None, None)

let maxPagesRead = getMaxPagesRead booklogs

{ longest = longest.Value
current = current.Value }
current = current.Value
maxPagesRead = maxPagesRead }

let generateStreakSummary (booklogs: Booklog list) =
let generateBooklogStats (booklogs: Booklog list) =
let streak = booklogs |> getStreakSummary

Html.div [
prop.className "streak"
prop.children [
Html.text $"current: {streak.current.count}, longest: {streak.longest.count}"
Html.text
$"current: {streak.current.count}, longest: {streak.longest.count}, max pages read: {streak.maxPagesRead}"
]
]

Expand Down Expand Up @@ -217,17 +238,12 @@ module Misc =

let booklogCalendar = generateCalendar year logs

let (|Int|_|) (str: string) =
match System.Int32.TryParse str with
| true, int -> Some int
| _ -> None

let readPages (pages: string) =
pages.Split([| '~' |])
pages
|> readPages
|> function
| [| Int s; Int e |] -> $", pages read: {e - s + 1}"
| [| Int _ |] -> $",pages read: 1"
| _ -> ""
| 0 -> ""
| i -> $", pages read: {i}"

let booklogRows =
logs
Expand Down Expand Up @@ -369,14 +385,14 @@ module Misc =
links: Fable.React.ReactElement
books: Map<string, Book>
year: int
streak: Fable.React.ReactElement }
stats: Fable.React.ReactElement }

let generateYearlyBooklogContent (conf: FrameConfiguration) (def: BooklogDef) (booklogs: Booklog list) =
parseBooklog
conf
def
(fun def -> def.year |> string)
(fun def -> generateBooklogList def.basePath def.links def.streak def.books def.year)
(fun def -> generateBooklogList def.basePath def.links def.stats def.books def.year)
booklogs

type BookDef =
Expand Down
4 changes: 2 additions & 2 deletions src/Generator.fs
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ module Rendering =
let maxYear = now.Year
let years = [ minYear..maxYear ]
let basePath = $"%s{site.siteRoot}/%s{IO.leaf destDir}"
let streakSummary = generateStreakSummary booklogs
let stats = generateBooklogStats booklogs
let yearLinks = generateBooklogLinks basePath years
let bookLinks = bookMap |> Map.toList |> List.map snd |> generateBookLinks basePath

Expand All @@ -497,7 +497,7 @@ module Rendering =
links = links
books = bookMap
year = year
streak = streakSummary })
stats = stats })

do!
booklogContents
Expand Down

0 comments on commit 5e987f7

Please sign in to comment.