]> git.armaanb.net Git - lightcards.git/blobdiff - lightcards/lightcards.py
Reformat using Black
[lightcards.git] / lightcards / lightcards.py
old mode 100755 (executable)
new mode 100644 (file)
index 23f94df..5aec89e
-#!/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="Simple terminal flashcards")
-    parser.add_argument("inp",
-                        metavar="input file",
-                        type=str,
-                        nargs="*")
-    parser.add_argument("-v", "--version",
-                        action='store_true',
-                        help="print version")
+    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"
+    )
+    parser.add_argument(
+        "-s", "--shuffle", action="store_true", help="shuffle card order"
+    )
+    parser.add_argument(
+        "-v", "--version", action="version", version="lightcards 0.6.0"
+    )
     return parser.parse_args()
 
 
-def show(stack, headers):
-    wrapper(display.get_key, stack, headers)
+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
 
-def main():
+    # 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]
+
+    # Send to display
+    win = Display(stack, headers, idx)
+    wrapper(win.run)
+
+
+def reparse():
+    """Parse arguments and input file again"""
     args = parse_args()
-    if args.version:
-        print("0.0.0")
-        exit(0)
+    os.system(f"$EDITOR {args.inp[0]}"),
+    return parse.parse_html(parse.md2html(args.inp[0]))
+
 
-    headers = parse.parse_html(parse.md2html(args.inp[0]))[0]
-    stack = parse.parse_html(parse.md2html(args.inp[0]))[1]
-    show(stack, headers)
+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)
 
 
 if __name__ == "__main__":