[go: nahoru, domu]

Skip to content

Commit

Permalink
agenda app
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusandra committed Jul 16, 2024
1 parent c1285c1 commit 7972ca7
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 2 deletions.
68 changes: 68 additions & 0 deletions frameos/src/apps/data/eventsToAgenda/app.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import frameos/apps
import frameos/types
import json
import strformat
import strutils
import chrono
import times
import pixie

type
AppConfig* = object
events*: JsonNode
baseFontSize*: int
titleFontSize*: int
textColor*: Color
timeColor*: Color
titleColor*: Color

App* = ref object of AppRoot
appConfig*: AppConfig

const titleFormat = "{weekday}, {month/n} {day}"

proc get*(self: App, context: ExecutionContext): string =
let title = &"^({self.appConfig.titleFontSize},{self.appConfig.titleColor.toHtmlHex()})"
let normal = &"^({self.appConfig.baseFontSize},{self.appConfig.textColor.toHtmlHex()})"
let time = &"^({self.appConfig.baseFontSize},{self.appConfig.timeColor.toHtmlHex()})"
let events = self.appConfig.events
let todayTs = epochTime().Timestamp
let today = format(todayTs, titleFormat)

proc h1(text: string): string = &"{title}{text}\n{normal}\n"
proc formatDay(day: string): string = format(parseTs("{year/4}-{month/2}-{day/2}", day), titleFormat)

var currentDay = format(todayTs, "{year/4}-{month/2}-{day/2}")

result = h1(today)

if events == nil or events.kind != JArray or events.len == 0:
result &= &"No events found"
return

var hasAny = false
for obj in events.items():
let summary = obj{"summary"}.getStr()
let startDay = obj{"startTime"}.getStr()
let endDay = obj{"endTime"}.getStr()
let withTime = "T" in startDay
let startDate = startDay.split("T")[0]

if startDate > currentDay:
if not hasAny:
result &= "No events today\n"

result &= "\n" & h1(formatDay(startDate))
currentDay = startDate

hasAny = true

if withTime:
let startTime = if "T" in startDay: startDay.split("T")[1][0 .. 4] else: ""
let endTime = if "T" in endDay: endDay.split("T")[1][0 .. 4] else: ""
result &= &"{time}{startTime} - {endTime} {normal}{summary}\n"
else:
if startDay == currentDay and endDay == currentDay:
result &= &"{time}All day {normal}{summary}\n"
else:
result &= &"{time}Until {formatDay(endDay)} {normal}{summary}\n"
55 changes: 55 additions & 0 deletions frameos/src/apps/data/eventsToAgenda/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"name": "Events to Agenda",
"description": "Convert events to an basic-caret formatted agenda string",
"category": "data",
"version": "1.0.0",
"fields": [
{
"name": "events",
"type": "json",
"required": true,
"label": "Events"
},
{
"name": "baseFontSize",
"type": "integer",
"value": "24",
"required": true,
"label": "Base font size"
},
{
"name": "titleFontSize",
"type": "integer",
"value": "48",
"required": true,
"label": "Title font size"
},
{
"name": "titleColor",
"type": "color",
"value": "#FFFFFF",
"required": true,
"label": "Day title color"
},
{
"name": "textColor",
"type": "color",
"value": "#FFFFFF",
"required": true,
"label": "Base text color"
},
{
"name": "timeColor",
"type": "color",
"value": "#FF0000",
"required": true,
"label": "Time color"
}
],
"output": [
{
"name": "result",
"type": "string"
}
]
}
5 changes: 3 additions & 2 deletions frameos/src/apps/render/text/app.nim
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,9 @@ proc toTypeset*(self: App, text: string, fontSize: float, baseFontSize: float, c
let parts = tag.split(',')
for p in parts:
let part = strutils.strip(p)
if part.startsWith('#') and not border:
currentColor = parseHtmlColor(part)
if part.startsWith('#'):
if not border:
currentColor = parseHtmlColor(part)
elif part.isNumber():
currentSize = part.parseFloat() * factor
elif part == "underline":
Expand Down

0 comments on commit 7972ca7

Please sign in to comment.