factored testing feed updateness out
[riffle.git] / update-shuffle
blob559f84517dba5bddf8013a7ab8ef56545fd600a3
1 #!/usr/bin/env python
2 import sys, os, os.path
3 from shuffle import ShuffleDB
4 import logging
6 # where am i?
7 mydir = os.path.abspath( os.path.dirname( sys.argv[0] ))
9 # logging setup
10 logging.basicConfig(
11 level=logging.DEBUG,
12 format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
13 datefmt='%m-%d %H:%M',
14 filename=os.path.join(mydir, 'update.log'),
15 filemode='w')
16 console = logging.StreamHandler()
17 console.setLevel(logging.INFO)
18 formatter = logging.Formatter('%(levelname)-8s %(message)s')
19 console.setFormatter(formatter)
20 logging.getLogger('').addHandler(console)
22 ipod_root = os.path.dirname( mydir )
23 control = os.path.join(ipod_root, "iPod_Control", "iTunes")
25 logging.info( "Loading old database" )
26 db = ShuffleDB()
27 tracks, pstate = db.read_all( control )
28 db.set_old_tracks( tracks )
30 dirs = []
31 force_bm = False
32 bm_dirs = []
33 for arg in sys.argv[1:]:
34 if arg == '-b':
35 force_bm = True
36 elif arg == '-B':
37 force_bm = False
38 else:
39 dirs.append(arg)
40 if force_bm:
41 bm_dirs.append(arg)
42 if len(dirs) == 0:
43 dirs = [ipod_root]
45 logging.info( "Indexing files in dirs: %s", dirs )
46 logging.info( "Will force podcast under: %s", bm_dirs )
47 os.chdir(ipod_root)
48 tracks = []
49 for d in dirs:
50 for root, dirs, files in os.walk( d ):
51 for f in files:
52 if f.endswith(ShuffleDB.supported_file_types):
53 path = os.path.join(root, f)
54 logging.debug("Found file %s, making track record", path)
55 if path.startswith(ipod_root):
56 ipod_path = path.replace(ipod_root, u'')
57 else:
58 ipod_path = u"/" + path
59 t = db.make_track_record( ipod_path )
60 if d in bm_dirs:
61 logging.debug(" - forcing bookmarkflag under %s", d)
62 t['bookmarkflag'] = True
63 t['shuffleflag'] = False
64 tracks.append( t )
65 # refresh pstate
66 found = False
67 try:
68 old_current = db.old_tracks[ pstate['trackno'] ]
69 logging.debug( "old current:", old_current )
70 for i in xrange( len(tracks) ):
71 if tracks[i] == old_current:
72 found = True
73 pstate['trackno'] = i
74 except KeyError:
75 pass
76 if not found:
77 # if we set these to correct numbers we might override existing bookmark
78 pstate['trackno'] = -1
79 pstate['trackpos'] = -1
80 pstate['shufflepos'] = 0
83 logging.info( "Writing new database" )
84 db.write_all(control, tracks, pstate)