Commit | Line | Data |
---|---|---|
e26514bb FT |
1 | #!/usr/bin/python |
2 | ||
3 | import sys, getopt | |
012c4cae | 4 | import manga.lib, manga.reader, manga.profile, manga.local |
e26514bb FT |
5 | import glib, gobject, gtk |
6 | ||
7 | gobject.threads_init() | |
8 | gtk.gdk.threads_init() | |
9 | ||
10 | def 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 | |
15 | libname = None | |
ffd12e71 | 16 | search = None |
012c4cae | 17 | profile = "" |
271d68da | 18 | alias = None |
ffd12e71 | 19 | opts, args = getopt.getopt(sys.argv[1:], "hl:sSp:a:") |
e26514bb FT |
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 | |
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 | |
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) | |
e26514bb | 44 | |
299d3f50 FT |
45 | def 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 |
138 | try: |
139 | main() | |
140 | except KeyboardInterrupt: | |
141 | pass |