63 lines
1.6 KiB
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])
|