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