From 37ba35d1b2361b742f5aeab1ed7a202a54052a43 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 27 Jul 2011 16:37:59 +0200 Subject: Add ogg support --- lib/audio.py | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- lib/mat.py | 19 +++++++++++--- 2 files changed, 98 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/audio.py b/lib/audio.py index 55562cc..0c8859d 100644 --- a/lib/audio.py +++ b/lib/audio.py @@ -2,10 +2,15 @@ Care about audio fileformat ''' from mutagen.flac import FLAC +from mutagen.apev2 import APEv2 +from mutagen.oggvorbis import OggVorbis + + import parser import shutil + class MpegAudioStripper(parser.GenericParser): ''' Represent mpeg audio file (mp3, ...) @@ -16,6 +21,80 @@ class MpegAudioStripper(parser.GenericParser): else: return False + +class OggStripper(parser.GenericParser): + ''' + Represent an ogg vorbis file + ''' + def remove_all(self): + if self.backup is True: + shutil.copy2(self.filename, self.output) + self.filename = self.output + + mfile = OggVorbis(self.filename) + mfile.delete() + mfile.save() + + def is_clean(self): + ''' + Check if the "metadata" block is present in the file + ''' + mfile = OggVorbis(self.filename) + print mfile.tags + if mfile.tags == []: + return True + else: + return False + + def get_meta(self): + ''' + Return the content of the metadata block if present + ''' + metadata = {} + mfile = OggVorbis(self.filename) + for key, value in mfile.tags: + metadata[key] = value + return metadata + +class Apev2Stripper(parser.GenericParser): + ''' + Represent a Apev2 audio file + ''' + def remove_all(self): + ''' + Remove the "metadata" block from the file + ''' + if self.backup is True: + shutil.copy2(self.filename, self.output) + self.filename = self.output + + mfile = APEv2(self.filename) + mfile.delete() + mfile.save() + + def is_clean(self): + ''' + Check if the "metadata" block is present in the file + ''' + mfile = APEv2(self.filename) + if mfile.tags is None: + return True + else: + return False + + def get_meta(self): + ''' + Return the content of the metadata block if present + ''' + metadata = {} + mfile = APEv2(self.filename) + if mfile.tags is None: + return metadata + for key, value in mfile.tags: + metadata[key] = value + return metadata + + class FlacStripper(parser.GenericParser): ''' Represent a Flac audio file @@ -30,6 +109,7 @@ class FlacStripper(parser.GenericParser): mfile = FLAC(self.filename) mfile.delete() + mfile.clear_pictures() mfile.save() def is_clean(self): @@ -37,7 +117,7 @@ class FlacStripper(parser.GenericParser): Check if the "metadata" block is present in the file ''' mfile = FLAC(self.filename) - if mfile.tags is None: + if mfile.tags is None and mfile.pictures == []: return True else: return False @@ -52,4 +132,6 @@ class FlacStripper(parser.GenericParser): return metadata for key, value in mfile.tags: metadata[key] = value + if mfile.pictures != []: + metadata['picture :'] = 'yes' return metadata diff --git a/lib/mat.py b/lib/mat.py index 3d1687f..0283fbc 100644 --- a/lib/mat.py +++ b/lib/mat.py @@ -39,17 +39,29 @@ STRIPPERS = { try: import mutagen STRIPPERS['audio/x-flac'] = audio.FlacStripper + STRIPPERS['audio/x-ape'] = audio.Apev2Stripper + STRIPPERS['audio/x-wavpack'] = audio.Apev2Stripper + STRIPPERS['audio/vorbis'] = audio.OggStripper except ImportError: print('unable to import python-mutagen : limited audio format support') + def secure_remove(filename): ''' securely remove the file ''' + removed = False try: subprocess.call('shred --remove %s' % filename, shell=True) + removed = True except: - logging.error('Unable to remove %s' % filename) + logging.error('Unable to securely remove %s' % filename) + + if removed is False: + try: + os.remove(filename) + except: + logging.error('Unable to remove %s' % filename) def is_secure(filename): @@ -72,8 +84,6 @@ def create_class_file(name, backup, add2archive): return filename = '' - realname = name - try: filename = hachoir_core.cmd_line.unicodeFilename(name) except TypeError: # get rid of "decoding Unicode is not supported" @@ -85,6 +95,7 @@ def create_class_file(name, backup, add2archive): return mime = parser.mime_type + print mime if mime.startswith('application/vnd.oasis.opendocument'): mime = 'application/vnd.oasis.opendocument' # opendocument fileformat @@ -92,7 +103,7 @@ def create_class_file(name, backup, add2archive): try: stripper_class = STRIPPERS[mime] except KeyError: - logging.info('Don\'t have stripper for %s\' format' % filename) + logging.info('Don\'t have stripper for %s\'s format' % name) return return stripper_class(filename, parser, mime, backup, add2archive) -- cgit v1.3