bk/bk.nim

63 lines
1.6 KiB
Nim

import json, os, times, unicode, uri
import cligen
import bakalari
type
Config = object
website: string
username: string
refreshToken: string
const
defaultConfigFile = getConfigDir() / "bk.json"
proc loadConfig(configFile = defaultConfigFile): Config =
defaultConfigFile.readFile.parseJson.to(Config)
proc saveConfig(configFile = defaultConfigFile, config: Config) =
configFile.writeFile((%*config).pretty)
proc signin(
website: string,
username: string,
password: string,
configFile = defaultConfigFile,
) =
let
bakalari = newBakalari(website.parseUri, username, password)
config = Config(
website: website,
username: username,
refreshToken: bakalari.refreshToken,
)
configFile.saveConfig(config)
proc rozvrh(
configFile = defaultConfigFile,
date = "",
oneDay = false,
permanent = false,
) =
var config = configFile.loadConfig
let bakalari = newBakalari(config.website.parseUri, config.refreshToken)
config.refreshToken = bakalari.refreshToken
configFile.saveConfig(config)
let timetable = bakalari.timetable(permanent)
for day in timetable.days:
stdout.writeLine day.date.format("yyyyMMdd")
for lesson in day.lessons:
var line = ""
line &= lesson.hour.number
line &= ". "
line &= lesson.hour.beginTime.align(5, '0'.Rune)
line &= "-"
line &= lesson.hour.endTime.align(5, '0'.Rune)
line &= " "
line &= lesson.subject.abbrev.align(4)
line &= " "
line &= lesson.teacher.abbrev.align(4)
line &= " "
line &= lesson.room.abbrev.align(4)
stdout.writeLine line
dispatchMulti([signin], [rozvrh])