コード例 #1
0
ファイル: main.py プロジェクト: opmuse/opmuse
    def download(self, file):
        library_path = library_dao.get_library_path()

        ext = os.path.splitext(file)

        content_type = mimetypes.types_map.get(ext[1], None)

        # viewable in most browsers
        if content_type in ('image/jpeg', "image/png", "image/gif", 'application/pdf',
                            'text/x-nfo', 'text/plain', 'text/x-sfv', 'audio/x-mpegurl'):
            disposition = None

            if content_type in ('text/x-nfo', 'text/x-sfv', 'audio/x-mpegurl'):
                content_type = 'text/plain'

        # download...
        else:
            disposition = 'attachement'
            content_type = None

        return cherrypy.lib.static.serve_file(os.path.join(library_path, file),
                                              content_type=content_type, disposition=disposition)
コード例 #2
0
ファイル: library.py プロジェクト: opmuse/opmuse
    def _dir_tracks(self, tracks):
        dir_tracks = {}

        artist_covers = set()
        album_covers = set()

        for track in tracks:
            if track.artist is not None:
                artist_covers.add(track.artist.cover_path)

            if track.album is not None:
                album_covers.add(track.album.cover_path)

            if len(track.paths) == 0:
                continue

            for path in track.paths:
                dir = path.dir

                if dir not in dir_tracks:
                    dir_tracks[dir] = {
                        'paths': [],
                        'tracks': [],
                        'paths_and_tracks': [],
                        'pretty_dir': path.pretty_dir,
                        'files': [],
                    }

                dir_tracks[dir]['paths'].append(path.path)
                dir_tracks[dir]['tracks'].append(track)
                dir_tracks[dir]['paths_and_tracks'].append((path, track))

        for dir, dir_track in dir_tracks.items():
            dir_tracks[dir]['paths_and_tracks'] = sorted(dir_track['paths_and_tracks'], key=lambda pat: pat[0].path)

        for dir, item in dir_tracks.items():
            if not os.path.exists(dir):
                continue

            for file in os.listdir(dir):
                file = os.path.join(dir, file)

                if file not in item['paths']:
                    isdir = os.path.isdir(file)

                    if not isdir and LibraryService.is_supported(file):
                        track = library_dao.get_track_by_path(file)
                    else:
                        track = None

                    pretty_file = file[(len(dir) + 1):].decode("utf8", "replace")

                    if isdir:
                        pretty_file = "%s/" % pretty_file

                    if not isdir:
                        try:
                            stat = os.stat(file)
                            modified = datetime.datetime.fromtimestamp(stat.st_mtime)
                            size = stat.st_size
                        except FileNotFoundError:
                            continue
                    else:
                        size = modified = None

                    library_path = library_dao.get_library_path()

                    relative_file = file[len(library_path):]

                    dir_tracks[dir]['files'].append({
                        "file": file,
                        "relative_file": relative_file.decode('utf8', 'replace'),
                        "modified": modified,
                        "size": size,
                        "track": track,
                        "isdir": isdir,
                        "pretty_file": pretty_file,
                        "is_album_cover": file in album_covers,
                        "is_artist_cover": file in artist_covers
                    })

            dir_tracks[dir]['files'] = sorted(dir_tracks[dir]['files'],
                                              key=lambda item: "%d%s" % (not item["isdir"], item["file"]))

        dir_tracks = sorted(dir_tracks.items(), key=lambda d: d[0])

        return dir_tracks