annotate service/starArduino/makeBarcodes.py @ 1144:b9981f50b82d

audioInputLevels robustness and cleanup Ignore-this: f7bf0ef344cc704ed15d5d7f330e235e darcs-hash:1699712f056d62957ff365b9f6051ca6ddc54eca
author drewp <drewp@bigasterisk.com>
date Sat, 03 Mar 2018 18:12:18 -0800
parents d337de14235d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
833
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 import os, re
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 from subprocess import check_call
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 from tempfile import NamedTemporaryFile
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 from pymongo import Connection
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 def makeCode(s):
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 #return 'code'
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 psFile = NamedTemporaryFile(suffix='.ps')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 check_call(['barcode',
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 '-b', s,
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 '-E',
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 '-o', psFile.name])
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 svgFile = NamedTemporaryFile(suffix='.svg')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 check_call(['pstoedit',
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 '-f', 'plot-svg',
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 '-yshift', '580',
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 '-xshift', '20',
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 psFile.name, svgFile.name])
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 lines = open(svgFile.name).readlines()
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 return ''.join(lines[2:])
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 def codeElem(s):
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 return '<div class="bc">%s</div>' % makeCode(s)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 mpdPaths = Connection("bang", 27017)['barcodePlayer']['mpdPaths']
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 # {mpdPath:"music/path/to/album/or/song", "_id":12}
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 mpdPaths.ensure_index([('mpdPath', 1)])
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 def idForMpdPath(p):
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 match = mpdPaths.find_one({"mpdPath" : p})
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 if match:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 return match['_id']
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 top = list(mpdPaths.find().sort([('_id', -1)]).limit(1))
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 newId = top[0]['_id'] + 1 if top else 0
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 mpdPaths.insert({"mpdPath" : p, "_id" : newId})
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 return newId
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 out = open("out.xhtml", "w")
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 out.write("""<?xml version="1.0" encoding="utf-8"?>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 <html xmlns="http://www.w3.org/1999/xhtml">
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 <head>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 <title>barcodes</title>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 <link rel="stylesheet" href="barcode.css"/>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 </head>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 <body>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49 <div class="cards">
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50 """)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 mpdRoot = "/my/music"
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 paths = open("mpdPaths.txt").read().strip().splitlines()
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 cardsSeen = 0
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 for path in paths:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 if os.path.isdir(os.path.join(mpdRoot, path)):
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 albumDir = path.split('/')[-1]
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 songFile = None
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62 else:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 albumDir, songFile = path.split('/')[-2:]
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 if '-' in albumDir:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 artistName, albumName = albumDir.replace('_', ' ').split('-', 1)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 else:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 artistName, albumName = '', albumDir
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 if artistName in ['', 'Original Soundtrack', 'Various']:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 artistName = albumName
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 albumName = ''
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 if songFile:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75 songName = re.sub(r'(^\d+\.)|(^\d+\s*-)', '', songFile)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 songName = songName.rsplit('.',1)[0].replace('_', ' ')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 out.write('<div class="card">')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79 out.write('<div class="artist">%s</div>' % artistName)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 out.write('<div class="album">%s</div>' % albumName)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 print (albumName, songName if songFile else '')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
83 out.write(codeElem("music %s" % idForMpdPath(path)))
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
84
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 if songFile:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86 out.write('<div class="song">%s</div>' % songName)
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 out.write('</div>')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 cardsSeen += 1
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 if cardsSeen % 8 == 0:
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91 out.write('<div class="pgbr"/>')
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
93 out.write("""
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94 </div>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
95 </body>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 </html>
d337de14235d barcode maker tool
drewp <drewp@bigasterisk.com>
parents:
diff changeset
97 """)