automated reformat pass
This commit is contained in:
parent
66fe9bc514
commit
d0d8588e5f
1 changed files with 458 additions and 442 deletions
|
@ -14,15 +14,18 @@
|
|||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
from __future__ import print_function
|
||||
from __future__ import division
|
||||
from past.builtins import cmp
|
||||
from __future__ import print_function
|
||||
|
||||
from builtins import chr
|
||||
from builtins import input
|
||||
from builtins import map
|
||||
from builtins import range
|
||||
from past.utils import old_div
|
||||
from functools import reduce
|
||||
|
||||
from past.builtins import cmp
|
||||
from past.utils import old_div
|
||||
|
||||
__title__ = "KeyJ's iPod shuffle Database Builder"
|
||||
__version__ = "1.0"
|
||||
__author__ = "Martin Fiedler"
|
||||
|
@ -71,9 +74,9 @@ __email__="martin.fiedler@gmx.net"
|
|||
* initial public release, Win32 only
|
||||
"""
|
||||
|
||||
import sys, os, os.path, array, getopt, random, fnmatch, operator, string
|
||||
|
||||
import sys,os,os.path,array,getopt,random,types,fnmatch,operator,string
|
||||
|
||||
# @formatter:off
|
||||
KnownProps = ('filename', 'size', 'ignore', 'type', 'shuffle', 'reuse', 'bookmark')
|
||||
Rules = [
|
||||
([('filename', '~', '*.mp3')], {'type': 1, 'shuffle': 1, 'bookmark': 0}),
|
||||
|
@ -85,6 +88,7 @@ Rules=[
|
|||
([('filename', '~', '*.announce.???')], { 'shuffle': 0, 'bookmark': 0}),
|
||||
([('filename', '~', '/recycled/*')], {'ignore': 1}),
|
||||
]
|
||||
# @formatter:on
|
||||
|
||||
Options = {
|
||||
"volume": None,
|
||||
|
@ -179,6 +183,7 @@ def ParseValue(val):
|
|||
except ValueError:
|
||||
return val
|
||||
|
||||
|
||||
def ParseRule(rule):
|
||||
sep_pos = min([rule.find(sep) for sep in "~=<>" if rule.find(sep) > 0])
|
||||
prop = rule[:sep_pos].strip()
|
||||
|
@ -186,12 +191,14 @@ def ParseRule(rule):
|
|||
log("WARNING: unknown property `%s'" % prop)
|
||||
return (prop, rule[sep_pos], ParseValue(rule[sep_pos + 1:].strip()))
|
||||
|
||||
|
||||
def ParseAction(action):
|
||||
prop, value = list(map(string.strip, action.split('=', 1)))
|
||||
if not prop in KnownProps:
|
||||
log("WARNING: unknown property `%s'" % prop)
|
||||
return (prop, ParseValue(value))
|
||||
|
||||
|
||||
def ParseRuleLine(line):
|
||||
line = line.strip()
|
||||
if not (line) or line[0] == "#":
|
||||
|
@ -219,6 +226,7 @@ def safe_char(c):
|
|||
return c
|
||||
return "_"
|
||||
|
||||
|
||||
def rename_safely(path, name):
|
||||
base, ext = os.path.splitext(name)
|
||||
newname = ''.join(map(safe_char, base))
|
||||
|
@ -283,12 +291,14 @@ def make_key(s):
|
|||
if s[j].isdigit(): j += 1
|
||||
return (s[:i], int(s[i:j]), make_key(s[j:]))
|
||||
|
||||
|
||||
def key_repr(x):
|
||||
if type(x) == tuple:
|
||||
return "%s%d%s" % (x[0], x[1], key_repr(x[2]))
|
||||
else:
|
||||
return x
|
||||
|
||||
|
||||
def cmp_key(a, b):
|
||||
if type(a) == tuple and type(b) == tuple:
|
||||
return cmp(a[0], b[0]) or cmp(a[1], b[1]) or cmp_key(a[2], b[2])
|
||||
|
@ -347,7 +357,8 @@ def browse(path, interactive):
|
|||
for dir in subdirs:
|
||||
subpath = "%s/%s" % (path, dir)
|
||||
try:
|
||||
files.extend([x for x in [file_entry(subpath,name,dir+"/") for name in os.listdir(subpath)] if x and x[0]])
|
||||
files.extend(
|
||||
[x for x in [file_entry(subpath, name, dir + "/") for name in os.listdir(subpath)] if x and x[0]])
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
|
@ -376,6 +387,7 @@ def stringval(i):
|
|||
if i < 0: i += 0x1000000
|
||||
return "%c%c%c" % (i & 0xFF, (i >> 8) & 0xFF, (i >> 16) & 0xFF)
|
||||
|
||||
|
||||
def listval(i):
|
||||
if i < 0: i += 0x1000000
|
||||
return [i & 0xFF, (i >> 8) & 0xFF, (i >> 16) & 0xFF]
|
||||
|
@ -438,7 +450,9 @@ def smart_shuffle():
|
|||
if not domains[d]: continue
|
||||
for n in domains[d]:
|
||||
# find slices where the nearest track of the same domain is far away
|
||||
metric=[min([slice_count]+[min(abs(s-u),abs(s-u+slice_count),abs(s-u-slice_count)) for u in used]) for s in range(slice_count)]
|
||||
metric = [
|
||||
min([slice_count] + [min(abs(s - u), abs(s - u + slice_count), abs(s - u - slice_count)) for u in used])
|
||||
for s in range(slice_count)]
|
||||
thresh = old_div((max(metric) + 1), 2)
|
||||
farthest = [s for s in range(slice_count) if metric[s] >= thresh]
|
||||
|
||||
|
@ -603,10 +617,12 @@ def opterr(msg):
|
|||
print("use `%s -h' to get help" % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_options():
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "hiv:snlfL:r", \
|
||||
["help","interactive","volume=","nosmart","nochdir","nolog","force","logfile=","rename"])
|
||||
["help", "interactive", "volume=", "nosmart", "nochdir", "nolog", "force",
|
||||
"logfile=", "rename"])
|
||||
except getopt.GetoptError as message:
|
||||
opterr(message)
|
||||
for opt, arg in opts:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue