Add a script that uses the JSON metadata to create ordered symlinks.
This commit is contained in:
parent
a1b5bfb68f
commit
1314da3ffb
1 changed files with 68 additions and 0 deletions
68
scripts/order-symlinks.py
Executable file
68
scripts/order-symlinks.py
Executable file
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python
|
||||
# Copyright (C) 2013 Tobias Gruetzmacher
|
||||
"""
|
||||
This script takes the JSON file created by 'dosage -o json' and uses the
|
||||
metadata to build a symlink farm in the deduced order of the comic. It created
|
||||
those in a subdirectory called 'inorder'.
|
||||
"""
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import os
|
||||
import codecs
|
||||
import json
|
||||
|
||||
def jsonFn(d):
|
||||
return os.path.join(d, 'dosage.json')
|
||||
|
||||
def loadJson(d):
|
||||
with codecs.open(jsonFn(d), 'r', 'utf-8') as f:
|
||||
data = json.load(f)
|
||||
return data
|
||||
|
||||
def prepare_output(d):
|
||||
outDir = os.path.join(d, 'inorder')
|
||||
if not os.path.exists(outDir):
|
||||
os.mkdir(outDir)
|
||||
for f in os.listdir(outDir):
|
||||
f = os.path.join(outDir, f)
|
||||
if os.path.islink(f):
|
||||
os.remove(f)
|
||||
return outDir
|
||||
|
||||
def create_symlinks(d):
|
||||
data = loadJson(d)
|
||||
outDir = prepare_output(d)
|
||||
|
||||
unseen = data["pages"].keys()
|
||||
while len(unseen) > 0:
|
||||
latest = work = unseen[0]
|
||||
while work in unseen:
|
||||
unseen.remove(work)
|
||||
if "prev" in data["pages"][work]:
|
||||
work = data["pages"][work]["prev"]
|
||||
print("Latest page: %s" % (latest))
|
||||
|
||||
order = []
|
||||
work = latest
|
||||
while work in data["pages"]:
|
||||
order.extend(data["pages"][work]["images"].values())
|
||||
if "prev" in data["pages"][work]:
|
||||
work = data["pages"][work]["prev"]
|
||||
else:
|
||||
work = None
|
||||
order.reverse()
|
||||
|
||||
for i, img in enumerate(order):
|
||||
os.symlink(os.path.join('..', img), os.path.join(outDir, '%05i_%s' % (i, img)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) > 1:
|
||||
for d in sys.argv[1:]:
|
||||
if os.path.exists(jsonFn(d)):
|
||||
create_symlinks(d)
|
||||
else:
|
||||
print("No JSON file found in '%s'." % (d))
|
||||
else:
|
||||
print("Usage: %s comic-dirs" % (os.path.basename(sys.argv[0])))
|
||||
|
Loading…
Reference in a new issue