summaryrefslogtreecommitdiff
path: root/sync-music-to-n900
diff options
context:
space:
mode:
Diffstat (limited to 'sync-music-to-n900')
-rwxr-xr-xsync-music-to-n900116
1 files changed, 0 insertions, 116 deletions
diff --git a/sync-music-to-n900 b/sync-music-to-n900
deleted file mode 100755
index 9ca85bb..0000000
--- a/sync-music-to-n900
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/python
-# Copyright 2010 Lars Wirzenius
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-import os
-import re
-import shutil
-import sys
-import ttystatus
-
-
-def parse_playlist(filename):
- pat = re.compile(r'^File\d+=(?P<filename>.*)$')
- f = open(filename)
- for line in f:
- m = pat.match(line)
- if m:
- yield m.group('filename')
- f.close()
-
-
-class Playlist(object):
-
- def __init__(self, filename):
- self.media_filenames = list(parse_playlist(filename))
- prefix = os.path.commonprefix(self.media_filenames)
- i = prefix.rfind('/')
- if i >= 0:
- self.dirname = prefix[:i]
- self.media_filenames = [x[i+1:] for x in self.media_filenames]
- else:
- self.dirname = '.'
- self.dirname = os.path.join(os.path.dirname(filename), self.dirname)
-
-
-def identical(source, target):
- source_st = os.lstat(source)
-
- try:
- target_st = os.lstat(target)
- except OSError:
- return False
-
- return source_st.st_size == target_st.st_size
-
-
-def cleanup(pathname):
- badchars = ':?*[]'
- for c in badchars:
- pathname = '_'.join(pathname.split(c))
- return pathname
-
-
-def main():
- ts = ttystatus.TerminalStatus()
-
- target_dir = '/media/Nokia N900/music'
-
- playlists = []
- ts['done'] = 0
- ts['total'] = 0
- for filename in sys.argv[1:]:
- playlist = Playlist(filename)
- playlists.append(playlist)
- for x in playlist.media_filenames:
- xx = os.path.join(playlist.dirname, x)
- ts['total'] += os.path.getsize(xx)
-
- ts.add(ttystatus.ElapsedTime())
- ts.add(ttystatus.Literal(' '))
- ts.add(ttystatus.RemainingTime('done', 'total'))
- ts.add(ttystatus.Literal(' '))
- ts.add(ttystatus.ByteSize('done'))
- ts.add(ttystatus.Literal('/'))
- ts.add(ttystatus.ByteSize('total'))
- ts.add(ttystatus.Literal(' '))
- ts.add(ttystatus.ProgressBar('done', 'total'))
-
- for playlist in playlists:
- for relative_name in playlist.media_filenames:
- source = os.path.join(playlist.dirname, relative_name)
- target = os.path.join(target_dir, cleanup(relative_name))
- if not identical(source, target):
- x = os.path.dirname(target)
- if not os.path.exists(x):
- os.makedirs(x)
- source_f = open(source)
- target_f = file(target, 'wb')
- while True:
- data = source_f.read(4096)
- if not data:
- break
- target_f.write(data)
- ts['done'] += len(data)
- source_f.close()
- target_f.close()
- else:
- ts['done'] += os.path.getsize(source)
-
- ts.finish()
-
-if __name__ == '__main__':
- main()