Fix of critical bug with config files and easier error handling

This commit is contained in:
Adam Blažek 2020-09-27 12:34:38 +02:00
parent d4e470b442
commit 0911886487
1 changed files with 12 additions and 14 deletions

View File

@ -20,25 +20,25 @@ const
7: "Sun",
]
proc error(message: string) {.noReturn.} =
stderr.writeLine("Error: " & message)
quit QuitFailure
proc loadConfig(configFile = defaultConfigFile): Config =
try:
defaultConfigFile.readFile.parseJson.to(Config)
configFile.readFile.parseJson.to(Config)
except IOError:
stderr.writeLine "Error: Can't read the config file. Are you signed in?"
quit QuitFailure
error "Can't read the config file. Are you signed in?"
except JsonParsingError, JsonKindError:
stderr.writeLine "Error: Invalid config file. Make sure it's in JSON format."
quit QuitFailure
error "Invalid config file. Make sure it's in JSON format."
except KeyError:
stderr.writeLine "Error: The config file doesn't contain all necessary fields."
quit QuitFailure
error "The config file doesn't contain all necessary fields."
proc saveConfig(configFile = defaultConfigFile, config: Config) =
try:
configFile.writeFile((%*config).pretty)
except IOError:
stderr.writeLine "Error: Can't write the config file."
quit QuitFailure
error "Can't write the config file."
template withBakalari(configFile: string, body: untyped): untyped =
var config = configFile.loadConfig
@ -89,8 +89,7 @@ proc timetable(
try:
date.parse("yyyyMMdd")
except TimeParseError:
stderr.writeLine "Error: Can't parse the date. Make sure it's in YYYYMMDD format."
quit QuitFailure
error "Can't parse the date. Make sure it's in YYYYMMDD format."
else:
nextWeek ? (now() + 1.weeks) ! now()
withBakalari(configFile):
@ -137,7 +136,6 @@ try:
}],
)
except OSError:
stderr.writeLine "Error: Generic OS error. Check your internet connection."
error "Generic OS error. Check your internet connection."
except SslError:
stderr.writeLine "Error: Connection interrupted. Check your internet connection."
quit QuitFailure
error "Connection interrupted. Check your internet connection."