Remove unused cache.
[pwl6.git] / tools / generate-nw
1 #!/usr/bin/env python
2
3 # Generate an NW.js package.json file for a website.
4 #
5 # https://github.com/nwjs/nw.js/wiki/Manifest-format
6
7 import os
8 import re
9 import time
10 import json
11
12
13 def is_html(filename):
14 return filename.lower().endswith(".html")
15
16
17 def attr(name):
18 return ("data-" + name
19 + """=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?""")
20
21
22 def main(appdir, version=None):
23 if not os.path.isdir(appdir):
24 raise StandardError("input (%r) is not a directory" % appdir)
25 indexes = []
26 icons = []
27 for root, dirnames, filenames in os.walk(appdir):
28 root = os.path.relpath(root, appdir)
29 for filename in filenames:
30 flower = filename.lower()
31 if flower == "index.html":
32 indexes.append(os.path.join(root, filename))
33 if ("icon" in flower and flower.endswith((".ico", ".png"))):
34 icons.append(os.path.join(root, filename))
35
36 indexes.sort(key=lambda fn: (fn.count("/"), fn))
37 icons.sort(key=lambda fn: (fn.count("/"), fn))
38 name = os.path.basename(appdir).split(".")[0]
39 package = {
40 "main": indexes[0],
41 "name": name,
42 "version": version or "0.0.0",
43 "chromium-args": "--enable-webgl --ignore-gpu-blacklist",
44 "window": {
45 "show": False,
46 "toolbar": False,
47 "title": name,
48 "min_width": 300,
49 "min_height": 200,
50 }
51 }
52
53 if icons:
54 package["window"]["icon"] = icons[0]
55
56 with open(os.path.join(appdir, indexes[0]), "r") as fobj:
57 header = fobj.read(4096)
58 try:
59 title = re.search("<title>([^<]+)<", header).groups()[0]
60 except AttributeError:
61 print >>sys.stderr, "No <title> found in %r." % fobj.name
62 else:
63 package["window"]["title"] = title
64 try:
65 version = re.search(attr("version"), header).groups()[0]
66 except AttributeError:
67 print >>sys.stderr, "No version found in %r." % fobj.name
68 else:
69 package["version"] = version
70 try:
71 appid = re.search(attr("appid"), header).groups()[0]
72 except AttributeError:
73 print >>sys.stderr, "No appid found in %r." % fobj.name
74 else:
75 package["name"] = appid
76
77 if "+" not in package["version"]:
78 package["version"] += "+"
79 package["version"] += time.strftime("%Y%m%d%H%M%S")
80
81 with open(os.path.join(appdir, "package.json"), "w") as fobj:
82 json.dump(package, fobj)
83
84 if __name__ == "__main__":
85 import sys
86 main(*sys.argv[1:])