aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/soon.nim97
1 files changed, 55 insertions, 42 deletions
diff --git a/src/soon.nim b/src/soon.nim
index 3040f84..0850bd6 100644
--- a/src/soon.nim
+++ b/src/soon.nim
@@ -1,4 +1,4 @@
-import std/[times, os, strutils, strbasics, strscans, sets, strtabs, tables], parseopt
+import std/[times, os, strutils, strbasics, sequtils, strscans, sets, strtabs, tables], parseopt
import soon/[conditions, config, typechecker]
const VERSION = "0.1"
@@ -13,19 +13,23 @@ proc printHelp(badCmd: string) =
if badCmd != "":
echo badCmd & " is not a valid option\n"
echo """
-Usage:
- soon [options] [commands]
-
-OPTIONS
- -h, --help show list of CLI options
- -v, --version show soon version
- --future=DAYS set future
- --past=DAYS set past
-
-COMMANDS
- a print upcoming agenda (default command)
- e open default calendar file in $EDITOR
- j print the modified julian day
+Usage: soon [options]
+
+Options:
+-a print agenda (default behavior if no options)
+-c print reference calendar
+-t print todos
+-e open default calendar file in $EDITOR
+-i open TUI in interactive mode to schedule/archive events
+-w, -m, -y print agenda for upcoming week, month, or year
+-j print the modified julian day
+-d print today's date
+-p, --past=DAYS days in past to print agenda (default: 1)
+-f, --future=DAYS days in future to print agenda (default: 14)
+-h, --help show this help
+-v, --version print version
+
+Check the docs at https://codeberg.org/historia/soon
"""
quit()
@@ -33,6 +37,10 @@ proc printVersion() =
echo "soon " & VERSION
quit()
+proc createDefaultCalendarFile(file: string) =
+ if not fileExists(file):
+ writeFile(file, "# This is your first calendar file. Put events and todos in here.")
+
# Splits a string on whitespace, but maintains whitespace in date groups
proc splitWhitespaceExceptParens(str:string): seq[string] =
var output: seq[string] = newSeq[string]()
@@ -90,47 +98,52 @@ proc printEvents(cal: seq[string], date: DateTime, format: string) =
for e in events:
echo date.format(format), " ", e
-proc openCal(file: string): seq[string] =
+proc printCalendar(calendar: seq[string], config: StringTableRef) =
+ let past = 0 - parseInt(config["past"])
+ let future = parseInt(config["future"])
+ let now = now()
+ for i in past..future:
+ let curDay = now + i.days
+ printEvents(calendar, curDay, "ddd yyyy MMM dd")
+
+proc openCalendar(file: string): seq[string] =
let f = open(file)
- var cal: seq[string]
for line in f.lines:
if line == "": continue
if line.strip[0] == '#': continue
- cal.add(line)
+ result.add(line)
f.close()
- return cal
-proc printCalendar() =
- let cal = openCal(defaultCalendarFile)
- var past = -3
- var future = 7
- let now = now()
+proc processCalendars(config: StringTableRef) =
+ var calendar = newSeq[string]()
+ for file in os.walkDirRec(config["calendarPath"]):
+ if file.toLower().endsWith(".soon"):
+ calendar = calendar.concat(openCalendar(file))
+ printCalendar(calendar, config)
- for i in past..future:
- let curDay = now + i.days
- printEvents(cal, curDay, "ddd yyyy MMM dd")
-
-proc parseArgs(config: StringTableRef): StringTableRef =
+proc parseArgs(config: StringTableRef): seq[string] =
for kind, key, val in getopt():
case kind
+ of cmdEnd: break
of cmdLongOption, cmdShortOption:
case key
- of "help", "h":
- printHelp("")
- of "version", "v":
- printVersion()
- else:
- printHelp(key)
- else:
- discard
+ of "past", "p": config["past"] = val
+ of "future", "f": config["future"] = val
+ of "help", "h": printHelp("")
+ of "version", "v": printVersion()
+ else:
+ result.add(key)
+ of cmdArgument:
+ printHelp(key)
+
+proc validateConfig(config: StringTableRef) =
+ createDefaultCalendarFile(config["path"] / config["defaultFile"])
proc main() =
- var config = loadConfig()
- config = parseArgs(config)
- var noArg: bool = true
-
- if noArg:
- printCalendar()
+ var conf = config.loadConfig()
+ let commands = parseArgs(conf)
+ validateConfig(conf)
+ processCalendars(conf)
when isMainModule:
main()