X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=lightcards%2Flightcards.py;h=596f89644baffd6ad1b614db52b2e982cfb1e0a5;hb=b1a79e70ed02ceeac0f2343067e0f58deff3b37e;hp=3279f483d2764fcec9041d320d46e6ae1a16d372;hpb=7e88bca5413c5f6b2ccfab32699ebc617d698ee2;p=lightcards.git diff --git a/lightcards/lightcards.py b/lightcards/lightcards.py old mode 100755 new mode 100644 index 3279f48..596f896 --- a/lightcards/lightcards.py +++ b/lightcards/lightcards.py @@ -1,25 +1,37 @@ -#!/usr/bin/env python # Markdown flashcard utility # Armaan Bhojwani 2021 import argparse from curses import wrapper +import os from random import shuffle import sys -from . import display, parse +from . import parse, progress +from .display import Display from .deck import Status def parse_args(): - parser = argparse.ArgumentParser(description="Terminal flashcards from Markdown") + parser = argparse.ArgumentParser( + description="Terminal flashcards from Markdown") parser.add_argument("inp", metavar="input file", type=str, nargs=1) + parser.add_argument("-a", "--alphabetize", + action='store_true', + help="alphabetize card order") parser.add_argument("-f", "--flip", action='store_true', help="show second column first") + parser.add_argument("-p", "--purge", + action='store_true', + help="don't check cached info before starting") + # TODO: don't require input file when using -P + parser.add_argument("-P", "--purge-all", + action='store_true', + help="don't check cached info before starting") parser.add_argument("-r", "--reverse", action='store_true', help="reverse card order") @@ -28,25 +40,59 @@ def parse_args(): help="shuffle card order") parser.add_argument("-v", "--version", action='version', - version="lightcards 0.3.0") + version="lightcards 0.4.0") return parser.parse_args() def show(args, stack, headers): + """ + Get objects from cache, manipulate deck according to passed arguments, and + send it to the display functions + """ + # Purge caches if asked + if args.purge: + progress.purge(stack) + if args.purge_all: + progress.purge_all() + + # Check for caches idx = Status() + cache = progress.dive(get_orig()) + if cache: + (stack) = cache + + # Manipulate deck + if args.shuffle: + shuffle(stack) + if args.alphabetize: + stack.sort() + if args.reverse: + stack.reverse() if args.flip: for x in stack: x[0], x[1] = x[1], x[0] headers[0], headers[1] = headers[1], headers[0] - if args.shuffle: - shuffle(stack) - elif args.reverse: - stack.reverse() - wrapper(display.get_key, stack, headers, idx) + + # Send to display + win = Display(stack, headers, idx) + wrapper(win.run) + + +def reparse(): + """Parse arguments and input file again""" + args = parse_args() + os.system(f"$EDITOR {args.inp[0]}"), + return parse.parse_html(parse.md2html(args.inp[0])) + + +def get_orig(): + """Return original header and stack""" + return((headers, stack)) def main(args=sys.argv): args = parse_args() + global headers, stack (headers, stack) = parse.parse_html(parse.md2html(args.inp[0])) show(args, stack, headers)