Fixed a few bugs.
[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 def main():
46     global libname
47
48     if search:
49         if len(args) < 2:
50             usage(sys.stderr)
51             sys.exit(1)
52         try:
53             lib = manga.lib.findlib(args[0])
54         except ImportError:
55             sys.stderr.write("automanga: no such library: %s\n" % args[0])
56             sys.exit(1)
57         try:
58             if search == "name":
59                 results = lib.byname(args[1])
60             elif search == "match":
61                 results = lib.search(args[1])
62                 if hasattr(results, "__length_hint__"):
63                     sys.stderr.write("%i results:\n" % results.__length_hint__())
64         except NotImplementedError:
65             sys.stderr.write("automanga: %s does not support searching\n" % args[0])
66             sys.exit(1)
67         for mng in results:
68             sys.stdout.write("\"%s\": %s\n" % (mng.name, mng.id))
69         return
70
71     if alias and (alias.find('=') > 0):
72         tgt, nm = alias.split('=', 1)
73         if not ':' in nm:
74             usage(sys.stderr)
75             sys.exit(1)
76         libname, mid = nm.split(':', 1)
77         try:
78             lib = manga.lib.findlib(libname)
79         except ImportError:
80             sys.stderr.write("automanga: no such library: %s\n" % libname)
81             sys.exit(1)
82         try:
83             mng = lib.byid(mid)
84         except KeyError:
85             sys.stderr.write("automanga: no such manga: %s\n" % mid)
86             sys.exit(1)
87         profile.setalias(tgt, libname, mng.id)
88         return
89
90     if alias:
91         try:
92             libname, mid = profile.getalias(alias)
93         except KeyError:
94             sys.stderr("automanga: no such alias: %s\n" % alias)
95             sys.exit(1)
96         try:
97             lib = manga.lib.findlib(libname)
98         except ImportError:
99             sys.stderr.write("automanga: no such library: %s\n" % libname)
100             sys.exit(1)
101         try:
102             mng = lib.byid(mid)
103         except KeyError:
104             sys.stderr.write("automanga: manga no longer found: %s\n" % mid)
105             sys.exit(1)
106     elif libname is not None:
107         if len(args) < 1:
108             usage(sys.stderr)
109             sys.exit(1)
110         try:
111             lib = manga.lib.findlib(libname)
112         except ImportError:
113             sys.stderr.write("automanga: no such library: %s\n" % libname)
114             sys.exit(1)
115         try:
116             mng = lib.byid(args[0])
117         except KeyError:
118             sys.stderr.write("automanga: no such manga: %s\n" % args[0])
119             sys.exit(1)
120     else:
121         libname = "local"
122         try:
123             if len(args) > 0:
124                 mdir = args[0]
125             else:
126                 mdir = "."
127             mng = manga.local.manga(mdir)
128         except TypeError:
129             sys.stderr.write("automanga: not a valid manga directory: %s\n" % mdir)
130             sys.exit(1)
131
132     mprof = None if profile is None else profile.getmanga(libname, mng.id, True)
133     if profile is not None:
134         profile.setlast()
135
136     reader = manga.reader.reader(mng, mprof)
137     reader.show()
138     gtk.main()
139
140 try:
141     main()
142 except KeyboardInterrupt:
143     pass