Added simplistic keyword searching to mrnet and local libraries.
[automanga.git] / automanga
1 #!/usr/bin/python
2
3 import sys, getopt
4 import manga.lib, manga.reader, manga.profile, manga.local
5 import glib, gobject, gtk
6
7 gobject.threads_init()
8 gtk.gdk.threads_init()
9
10 def usage(out):
11     out.write("usage: automanga [-h] [-p PROFILE] {DIRECTORY|-l LIBRARY ID|-a ALIAS}\n")
12     out.write("       automanga -a ALIAS=LIBRARY:ID\n")
13     out.write("       automanga -{s|S} LIBRARY NAME\n")
14
15 libname = None
16 search = None
17 profile = ""
18 alias = None
19 opts, args = getopt.getopt(sys.argv[1:], "hl:sSp:a:")
20 for o, a in opts:
21     if o == "-h":
22         usage(sys.stdout)
23         sys.exit(0)
24     elif o == "-l":
25         libname = a
26     elif o == "-a":
27         alias = a
28     elif o == "-s":
29         search = "name"
30     elif o == "-S":
31         search = "match"
32     elif o == "-p":
33         if a == "":
34             profile = None
35         else:
36             profile = a
37 if profile == "":
38     try:
39         profile = manga.profile.profile.last()
40     except KeyError:
41         profile = manga.profile.profile.byname("default")
42 elif profile is not None:
43     profile = manga.profile.profile.byname(profile)
44
45 if search:
46     if len(args) < 2:
47         usage(sys.stderr)
48         sys.exit(1)
49     try:
50         lib = manga.lib.findlib(args[0])
51     except ImportError:
52         sys.stderr.write("automanga: no such library: %s\n" % args[0])
53         sys.exit(1)
54     try:
55         if search == "name":
56             results = lib.byname(args[1])
57         elif search == "match":
58             results = lib.search(args[1])
59     except NotImplementedError:
60         sys.stderr.write("automanga: %s does not support searching\n" % args[0])
61         sys.exit(1)
62     for manga in results:
63         sys.stdout.write("\"%s\": %s\n" % (manga.name, manga.id))
64     sys.exit(0)
65
66 if alias and (alias.find('=') > 0):
67     alias, nm = alias.split('=', 1)
68     if not ':' in nm:
69         usage(sys.stderr)
70         sys.exit(1)
71     libname, mid = nm.split(':', 1)
72     try:
73         lib = manga.lib.findlib(libname)
74     except ImportError:
75         sys.stderr.write("automanga: no such library: %s\n" % libname)
76         sys.exit(1)
77     try:
78         mng = lib.byid(mid)
79     except KeyError:
80         sys.stderr.write("automanga: no such manga: %s\n" % mid)
81         sys.exit(1)
82     profile.setalias(alias, libname, mng.id)
83     sys.exit(0)
84
85 if alias:
86     try:
87         libname, mid = profile.getalias(alias)
88     except KeyError:
89         sys.stderr("automanga: no such alias: %s\n" % alias)
90         sys.exit(1)
91     try:
92         lib = manga.lib.findlib(libname)
93     except ImportError:
94         sys.stderr.write("automanga: no such library: %s\n" % libname)
95         sys.exit(1)
96     try:
97         mng = lib.byid(mid)
98     except KeyError:
99         sys.stderr.write("automanga: manga no longer found: %s\n" % mid)
100         sys.exit(1)
101 elif libname is not None:
102     if len(args) < 1:
103         usage(sys.stderr)
104         sys.exit(1)
105     try:
106         lib = manga.lib.findlib(libname)
107     except ImportError:
108         sys.stderr.write("automanga: no such library: %s\n" % libname)
109         sys.exit(1)
110     try:
111         mng = lib.byid(args[0])
112     except KeyError:
113         sys.stderr.write("automanga: no such manga: %s\n" % args[0])
114         sys.exit(1)
115 else:
116     libname = "local"
117     try:
118         if len(args) > 0:
119             mdir = args[0]
120         else:
121             mdir = "."
122         mng = manga.local.manga(mdir)
123     except TypeError:
124         sys.stderr.write("automanga: not a valid manga directory: %s\n" % mdir)
125         sys.exit(1)
126
127 mprof = None if profile is None else profile.getmanga(libname, mng.id, True)
128 if profile is not None:
129     profile.setlast()
130
131 reader = manga.reader.reader(mng, mprof)
132 reader.show()
133 gtk.main()