Example #1
0
File: mp4.py Project: nkoep/blaplay
    def _save(self):
        try:
            audio = _Mp4(self.uri)
        except IOError:
            return False

        try:
            for tag in self._deleted_tags:
                try:
                    del audio[tag]
                except KeyError:
                    try:
                        del audio["----:%s" % tag]
                    except KeyError:
                        pass
            self._deleted_tags.clear()
        except AttributeError:
            pass

        for identifier in self.keys_tags():
            try:
                values = self.get(identifier)
                if not values:
                    raise KeyError
            except KeyError:
                continue

            # If a key is not from our specifically defined mapping dict it's a
            # freeform key so treat it accordingly.
            try:
                tag = self.__literal_to_tag[identifier]
            except KeyError:
                tag = "----:%s" % identifier
                values = [v.encode("utf-8") for v in values]

            # Track and disc numbers are stored as a list of tuples so handle
            # them separately.
            if identifier in (TRACK, DISC):
                values = values.split("/")
                try:
                    v1 = int(values[0])
                except (IndexError, ValueError):
                    continue
                try:
                    v2 = int(values[1])
                except (IndexError, ValueError):
                    v2 = 0
                audio[tag] = [(v1, v2)]
            else:
                audio[tag] = values

        audio.save()
        return True
Example #2
0
File: mp4.py Project: nkoep/blaplay
    def _read_tags(self):
        try:
            audio = _Mp4(self.uri)
        except Mp4Error:
            raise TagParseError

        for key, values in (audio.tags or {}).iteritems():
            if key in ("disk", "trkn"):
                value = ["%d/%d" % values[0]]
            elif key.startswith("----:"):
                key = key[5:]
                value = values
            elif self.__tag_to_literal.has_key(key):
                value = map(unicode, values)
            else:
                continue
            try:
                self[self.__tag_to_literal[key]] = value
            except KeyError:
                self[key] = value

        self._parse_info(audio.info)
        self[FORMAT] = "MPEG-4 AAC"
        self[ENCODING] = "lossy" if self[BITRATE] else "lossless"