]>
code.delx.au - notipod/blob - syncitunes.py
a35447054a383bd170a6f13c681b3af9b86dfea1
14 parser
= optparse
.OptionParser(version
="%prog " + VERSION
,
15 description
= "Synchronise an iTunes playlist with a directory",
16 usage
= "%prog destination playlist [playlist ...]"
18 parser
.add_option("-q", "--quiet",
19 action
="store_true", dest
="quiet", default
=False)
20 parser
.add_option("-v", "--verbose",
21 action
="store_true", dest
="verbose", default
=False)
22 parser
.add_option("-n", "--dry-run",
23 action
="store_true", dest
="dry_run", default
=False)
24 parser
.add_option("--itunes-library",
25 action
="store", dest
="itunes_library", default
=None)
26 parser
.add_option("--drive-letter",
27 action
="store", dest
="drive_letter", default
="E")
28 parser
.add_option("--media-dir",
29 action
="store", dest
="media_dir", default
="iTunes")
31 opts
, args
= parser
.parse_args(sys
.argv
[1:])
36 opts
.full_dest
= os
.path
.join(opts
.dest
, opts
.media_dir
)
37 opts
.playlists
= args
[1:]
42 opts
= parse_options()
46 logging
.basicConfig(format
="%(levelname)s: %(message)s")
48 # Support for Python 2.3
51 logging
.getLogger().setLevel(logging
.CRITICAL
)
53 logging
.getLogger().setLevel(logging
.DEBUG
)
55 logging
.getLogger().setLevel(logging
.INFO
)
57 if not os
.path
.isdir(opts
.dest
):
58 logging
.fatal("Destination must be specified as an absolute path.")
61 logging
.info("Loading library")
62 library
= libsyncitunes
.Library
.alloc()
63 if opts
.itunes_library
:
64 library
= library
.initWithFilename_(opts
.itunes_library
)
66 library
= library
.init()
68 for playlist
in opts
.playlists
:
69 if not library
.has_playlist(playlist
):
70 logging
.fatal("Could not find playlist: " + playlist
)
73 logging
.info("Loading playlists")
75 for playlist
in opts
.playlists
:
76 tracks
= list(library
.get_playlist(playlist
))
77 all_tracks
.extend(tracks
)
78 libsyncitunes
.export_m3u(opts
.dry_run
, opts
.full_dest
,
79 opts
.drive_letter
, opts
.media_dir
,
82 logging
.info("Synchronising")
83 libsyncitunes
.sync(opts
.dry_run
, library
.folder
, opts
.full_dest
, all_tracks
)
86 if __name__
== "__main__":