Added simplistic keyword searching to mrnet and local libraries.
[automanga.git] / automanga
index 34c0805..53f8de6 100755 (executable)
--- a/automanga
+++ b/automanga
@@ -1,28 +1,46 @@
 #!/usr/bin/python
 
 import sys, getopt
-import manga.lib, manga.reader, manga.local
+import manga.lib, manga.reader, manga.profile, manga.local
 import glib, gobject, gtk
 
 gobject.threads_init()
 gtk.gdk.threads_init()
 
 def usage(out):
-    out.write("usage: automanga [-h] [DIR]\n")
-    out.write("       automanga [-h] -l LIBRARY ID\n")
-    out.write("       automanga [-h] -s LIBRARY NAME\n")
+    out.write("usage: automanga [-h] [-p PROFILE] {DIRECTORY|-l LIBRARY ID|-a ALIAS}\n")
+    out.write("       automanga -a ALIAS=LIBRARY:ID\n")
+    out.write("       automanga -{s|S} LIBRARY NAME\n")
 
 libname = None
-search = False
-opts, args = getopt.getopt(sys.argv[1:], "hl:s")
+search = None
+profile = ""
+alias = None
+opts, args = getopt.getopt(sys.argv[1:], "hl:sSp:a:")
 for o, a in opts:
     if o == "-h":
         usage(sys.stdout)
         sys.exit(0)
     elif o == "-l":
         libname = a
+    elif o == "-a":
+        alias = a
     elif o == "-s":
-        search = True
+        search = "name"
+    elif o == "-S":
+        search = "match"
+    elif o == "-p":
+        if a == "":
+            profile = None
+        else:
+            profile = a
+if profile == "":
+    try:
+        profile = manga.profile.profile.last()
+    except KeyError:
+        profile = manga.profile.profile.byname("default")
+elif profile is not None:
+    profile = manga.profile.profile.byname(profile)
 
 if search:
     if len(args) < 2:
@@ -33,11 +51,54 @@ if search:
     except ImportError:
         sys.stderr.write("automanga: no such library: %s\n" % args[0])
         sys.exit(1)
-    for manga in lib.byname(args[1]):
+    try:
+        if search == "name":
+            results = lib.byname(args[1])
+        elif search == "match":
+            results = lib.search(args[1])
+    except NotImplementedError:
+        sys.stderr.write("automanga: %s does not support searching\n" % args[0])
+        sys.exit(1)
+    for manga in results:
         sys.stdout.write("\"%s\": %s\n" % (manga.name, manga.id))
     sys.exit(0)
 
-if libname is not None:
+if alias and (alias.find('=') > 0):
+    alias, nm = alias.split('=', 1)
+    if not ':' in nm:
+        usage(sys.stderr)
+        sys.exit(1)
+    libname, mid = nm.split(':', 1)
+    try:
+        lib = manga.lib.findlib(libname)
+    except ImportError:
+        sys.stderr.write("automanga: no such library: %s\n" % libname)
+        sys.exit(1)
+    try:
+        mng = lib.byid(mid)
+    except KeyError:
+        sys.stderr.write("automanga: no such manga: %s\n" % mid)
+        sys.exit(1)
+    profile.setalias(alias, libname, mng.id)
+    sys.exit(0)
+
+if alias:
+    try:
+        libname, mid = profile.getalias(alias)
+    except KeyError:
+        sys.stderr("automanga: no such alias: %s\n" % alias)
+        sys.exit(1)
+    try:
+        lib = manga.lib.findlib(libname)
+    except ImportError:
+        sys.stderr.write("automanga: no such library: %s\n" % libname)
+        sys.exit(1)
+    try:
+        mng = lib.byid(mid)
+    except KeyError:
+        sys.stderr.write("automanga: manga no longer found: %s\n" % mid)
+        sys.exit(1)
+elif libname is not None:
     if len(args) < 1:
         usage(sys.stderr)
         sys.exit(1)
@@ -52,11 +113,21 @@ if libname is not None:
         sys.stderr.write("automanga: no such manga: %s\n" % args[0])
         sys.exit(1)
 else:
-    if len(args) > 0:
-        mng = manga.local.manga(args[0])
-    else:
-        mng = manga.local.manga(".")
+    libname = "local"
+    try:
+        if len(args) > 0:
+            mdir = args[0]
+        else:
+            mdir = "."
+        mng = manga.local.manga(mdir)
+    except TypeError:
+        sys.stderr.write("automanga: not a valid manga directory: %s\n" % mdir)
+        sys.exit(1)
+
+mprof = None if profile is None else profile.getmanga(libname, mng.id, True)
+if profile is not None:
+    profile.setlast()
 
-reader = manga.reader.reader(mng)
+reader = manga.reader.reader(mng, mprof)
 reader.show()
 gtk.main()