Browse Source

Add utility to search & open

boyska 3 years ago
parent
commit
3448bf5cb3
2 changed files with 60 additions and 3 deletions
  1. 6 3
      marxbook/cli.py
  2. 54 0
      misc/mxb-search

+ 6 - 3
marxbook/cli.py

@@ -6,6 +6,7 @@ import sys
 import tempfile
 
 import marxbook
+import marxbook.extract
 
 
 def get_parser():
@@ -16,6 +17,7 @@ def get_parser():
     p.set_defaults(func=None)
     subcommands = p.add_subparsers(help="Sub-commands")
     list_p = subcommands.add_parser("list")
+    list_p.add_argument("--format", default="{Path}\t{Tag}\t{Title}\t{Url}", dest='fmt')
     list_p.add_argument("folder", nargs="?", default="")
     list_p.set_defaults(func=main_list)
 
@@ -44,9 +46,10 @@ def main():
 
 def main_list(store, args):
     for mark in store.folder(args.folder):
-        tag = ",".join(mark["Tag"])
-        line = [mark["Path"], tag, mark["Title"], mark["Url"]]
-        print("\t".join(line))
+        markdata = {"Folder": os.path.dirname(mark['Path'])}
+        markdata.update(mark)
+        markdata['Tag'] = ','.join(mark['Tag'])
+        print(args.fmt.replace(r'\t', '\t').format(**markdata))
 
 
 def edit_before_add(data: dict, args) -> dict:

+ 54 - 0
misc/mxb-search

@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+from argparse import ArgumentParser
+import os
+from subprocess import Popen, PIPE
+from logging import getLogger
+
+FILTER_CMDLINE = ["peco"]  # ["fzf"] is also fine
+BROWSER_CMDLINE = ["firefox"]
+
+logger = getLogger()
+
+
+def get_urls(folder: str):
+    fmt = "{Folder}\t{Tag}\t{Title}\t{Url}"
+    mxb_list = Popen(
+        ["mxb", "list", "--format", fmt, folder],
+        stdout=PIPE,
+    )
+    filter_cmd = Popen(FILTER_CMDLINE, stdin=mxb_list.stdout, stdout=PIPE)
+
+    logger.debug("running...")
+    output = filter_cmd.communicate()[0].decode("utf8")
+    logger.debug("got output!")
+    for line in output.split("\n"):
+        url = line.split("\t")[-1]
+        if url:
+            yield url
+
+
+def get_parser():
+    p = ArgumentParser()
+    p.add_argument("--folder", default="")
+    p.add_argument("--action", choices=["open", "echo"], default="open")
+    return p
+
+
+def main():
+    args = get_parser().parse_args()
+
+    urls = get_urls(args.folder)
+    logger.debug("URLs= %s", urls)
+    if not urls:
+        return
+
+    for u in urls:
+        if args.action == "open":
+            cmd = BROWSER_CMDLINE + [u]
+            Popen(cmd, preexec_fn=os.setpgrp)
+        elif args.action == "echo":
+            logger.debug(u)
+
+
+if __name__ == "__main__":
+    main()