Пример #1
0
    def add_file(cls, file):
        '''Add a file or path.
        '''
        types = list(set(TYPES_DEF.values()))
        for file_ in files(file, types=types):
            info = file_.get_file_info()
            name = info.get('display_name')
            if not name:
                continue

            doc = {
                'name': name,
                'type': file_.type,
                'info': info,
                }
            res = cls.update({'$or': [
                    {'files': file_.file},
                    {'name': name},
                    ]},
                    {
                    '$set': doc,
                    '$addToSet': {'files': file_.file},
                    }, safe=True)
            if not res['updatedExisting']:
                doc['files'] = [file_.file]
                doc['created'] = datetime.utcnow()
                doc['date'] = get_mtime(file_.file)
                cls.insert(doc, safe=True)
Пример #2
0
    def download(self, url, dst, temp_dir):
        files_dst = []
        with mkdtemp(temp_dir) as temp_dst:
            file = self._download(url, temp_dst)
            if not file:
                return
            dir = unpack_download(file)
            for file_ in files(dir, types='subtitles'):
                file_dst = move_file(clean_file(file_.file), dst)
                if file_dst:
                    files_dst.append(file_dst)

        return files_dst
Пример #3
0
    def download(self, url, dst, temp_dir):
        files_dst = []
        with mkdtemp(temp_dir) as temp_dst:
            res = download_file(url, temp_dst, temp_dst)
            if not res:
                return
            if not self._check_file(res[0]):
                return
            dir = unpack_download(res[0])
            for file_ in files(dir, types='subtitles'):
                file_dst = move_file(clean_file(file_.file), dst)
                if file_dst:
                    files_dst.append(file_dst)

        return files_dst
Пример #4
0
def get_downloads(path_root):
    '''Clean and get download sub directories.

    :return: directories list
    '''
    paths = []
    for path in list(media.iter_files(path_root,
            incl_files=False, incl_dirs=True)) + [path_root]:

        if media.get_type(path) == 'audio':
            album = {}
            extra = []
            for file in media.files(path, recursive=False):
                # Get album files
                if file.type == 'audio' and file.ext.lower() not in ('.m3u',):
                    album[file.file] = file.get_file_info()
                # Get extra files
                elif file.type == 'video' or (file.type == 'image' \
                        and media.get_size(file.file) > SIZE_ALBUM_IMAGE_MIN):
                    extra.append(file.file)
                else:
                    media.remove_file(file.file)

            path_dst = path
            if album:
                stat = {}
                for info in album.values():
                    def set_stat(key, force=False):
                        stat.setdefault(key, [])
                        val = info.get(key)
                        if val and (force or val not in stat[key]):
                            stat[key].append(val)
                    set_stat('title', True)
                    for key in ('artist', 'album', 'date', 'track_number'):
                        set_stat(key)

                if len(stat['title']) == len(stat['track_number']) == len(album):
                    # Rename tracks files
                    for file, info in album.items():
                        track_name = '%02d-%s-%s' % (info.get('track_number', 0), info['artist'], info['title'])
                        track_name = re.sub(r'\s+', '_', track_name).lower()
                        file_dst = os.path.join(path, track_name + os.path.splitext(file)[1])
                        media.rename_file(file, file_dst)

                # Get album directory name
                if len(stat['artist']) == len(stat['album']) == 1:
                    date_str = '-%s' % stat['date'][0] if len(stat['date']) == 1 else ''
                    album_name = '%s-%s%s' % (stat['artist'][0].capitalize(), stat['album'][0].capitalize(), date_str)
                    album_name = re.sub(r'\s+', '_', album_name)

                    # Rename extra files using the album name
                    for file in extra:
                        filename_extra = os.path.basename(file)
                        if not filename_extra.startswith('00-'):
                            file_dst = os.path.join(path, '00-%s-%s' % (album_name.lower(), filename_extra.lower()))
                            media.rename_file(file, file_dst)

                    # Rename album directory
                    path_dst = media.rename_file(path,
                            os.path.join(os.path.dirname(path_root), album_name))
                    paths.append(path_dst)

    if os.path.exists(path_root) and path_root not in paths:
        paths.append(path_root)
    return paths