Added simplistic keyword searching to mrnet and local libraries.
[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
FT
44
45if search:
46 if len(args) < 2:
47 usage(sys.stderr)
48 sys.exit(1)
49 try:
31ea855c
FT
50 lib = manga.lib.findlib(args[0])
51 except ImportError:
e26514bb
FT
52 sys.stderr.write("automanga: no such library: %s\n" % args[0])
53 sys.exit(1)
ffd12e71
FT
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:
e26514bb
FT
63 sys.stdout.write("\"%s\": %s\n" % (manga.name, manga.id))
64 sys.exit(0)
65
271d68da
FT
66if 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)
1caa1dca 82 profile.setalias(alias, libname, mng.id)
271d68da
FT
83 sys.exit(0)
84
85if 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)
101elif libname is not None:
e26514bb
FT
102 if len(args) < 1:
103 usage(sys.stderr)
104 sys.exit(1)
105 try:
31ea855c
FT
106 lib = manga.lib.findlib(libname)
107 except ImportError:
e26514bb
FT
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)
115else:
012c4cae 116 libname = "local"
462b7343
FT
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)
e26514bb 126
7f4e185b 127mprof = None if profile is None else profile.getmanga(libname, mng.id, True)
012c4cae
FT
128if profile is not None:
129 profile.setlast()
130
7f4e185b 131reader = manga.reader.reader(mng, mprof)
e26514bb
FT
132reader.show()
133gtk.main()