From abd5eb8e95d7ffa6406371c3ead13b4e6f65f988 Mon Sep 17 00:00:00 2001 From: Terry Geng Date: Tue, 4 Feb 2020 23:30:56 +0800 Subject: [PATCH] beautify and enhance web interface, debug --- interface.py | 31 +++++++-- media/playlist.py | 9 +++ mumbleBot.py | 17 +++-- static/css/custom.css | 1 - templates/index.html | 142 +++++++++++++++++++++++++----------------- variables.py | 3 +- 6 files changed, 132 insertions(+), 71 deletions(-) diff --git a/interface.py b/interface.py index 151b70e..1d4be14 100644 --- a/interface.py +++ b/interface.py @@ -9,6 +9,7 @@ import random from werkzeug.utils import secure_filename import errno import media +import logging class ReverseProxied(object): @@ -67,14 +68,24 @@ def index(): music_library.add_file(file) if request.method == 'POST': - print(request.form) - if 'add_file' in request.form and ".." not in request.form['add_file']: + logging.debug("Post request: "+ str(request.form)) + if 'add_file_bottom' in request.form and ".." not in request.form['add_file_bottom']: item = {'type': 'file', - 'path' : request.form['add_file'], + 'path' : request.form['add_file_bottom'], 'title' : 'Unknown', 'user' : 'Web'} var.playlist.append(var.botamusique.get_music_tag_info(item, var.config.get('bot', 'music_folder') + item['path'])) + elif 'add_file_next' in request.form and ".." not in request.form['add_file_next']: + item = {'type': 'file', + 'path' : request.form['add_file_next'], + 'title' : 'Unknown', + 'user' : 'Web'} + var.playlist.insert( + var.playlist.current_index + 1, + var.botamusique.get_music_tag_info(item, var.config.get('bot', 'music_folder') + item['path']) + ) + elif ('add_folder' in request.form and ".." not in request.form['add_folder']) or ('add_folder_recursively' in request.form and ".." not in request.form['add_folder_recursively']): try: folder = request.form['add_folder'] @@ -108,7 +119,13 @@ def index(): elif 'delete_music' in request.form: if len(var.playlist.playlist) >= int(request.form['delete_music']): - var.playlist.remove(int(request.form['delete_music'])) + if var.playlist.current_index == int(request.form['delete_music']): + var.botamusique.pause() + var.playlist.remove(int(request.form['delete_music'])) + var.botamusique.launch_music() + else: + var.playlist.remove(int(request.form['delete_music'])) + elif 'play_music' in request.form: if len(var.playlist.playlist) >= int(request.form['play_music']): @@ -121,7 +138,8 @@ def index(): random.shuffle(var.playlist.playlist) elif action == "stop": var.botamusique.pause() - + elif action == "clear": + var.botamusique.stop() return render_template('index.html', all_files=files, @@ -137,7 +155,8 @@ def upload(): if not file: return redirect("./", code=406) - filename = secure_filename(file.filename).strip() + #filename = secure_filename(file.filename).strip() + filename = file.filename if filename == '': return redirect("./", code=406) diff --git a/media/playlist.py b/media/playlist.py index 049999e..b688732 100644 --- a/media/playlist.py +++ b/media/playlist.py @@ -8,6 +8,15 @@ class PlayList: def append(self, item): self.playlist.append(item) + def insert(self, index, item): + if index == -1: + index = self.current_index + + self.playlist.insert(index, item) + + if index <= self.current_index: + self.current_index += 1 + def length(self): return len(self.playlist) diff --git a/mumbleBot.py b/mumbleBot.py index f3e0fe4..32a6084 100644 --- a/mumbleBot.py +++ b/mumbleBot.py @@ -547,7 +547,7 @@ class MumbleBot: # Allow to remove specific music into the queue with a number if parameter is not None and parameter.isdigit() and int(parameter) > 0: if int(parameter) < len(var.playlist.playlist): - removed = var.playlist.pop(int(parameter)) + removed = var.playlist.jump(int(parameter)) # the Title isn't here if the music wasn't downloaded self.send_msg(var.config.get('strings', 'removing_item') % ( @@ -609,7 +609,7 @@ class MumbleBot: uri = "" music = None if index == -1: - music = var.playlist.next() + music = var.playlist.current_item() else: music = var.playlist.jump(index) @@ -636,7 +636,7 @@ class MumbleBot: music['thumbnail'] + '"/>' if var.config.getboolean('bot', 'announce_current_music'): self.send_msg(var.config.get( - 'strings', 'now_playing') % (music['title'], thumbnail_html)) + 'strings', 'now_playing') % (music['artist'] + ' - ' + music['title'], thumbnail_html)) elif music["type"] == "file": uri = var.config.get('bot', 'music_folder') + \ @@ -650,7 +650,7 @@ class MumbleBot: #logging.debug("Thumbnail data " + thumbnail_html) if var.config.getboolean('bot', 'announce_current_music'): self.send_msg(var.config.get( - 'strings', 'now_playing') % (music['title'], thumbnail_html)) + 'strings', 'now_playing') % (music['artist'] + ' - ' + music['title'], thumbnail_html)) elif music["type"] == "radio": uri = music["url"] @@ -671,6 +671,7 @@ class MumbleBot: # The ffmpeg process is a thread self.thread = sp.Popen(command, stdout=sp.PIPE, bufsize=480) self.is_playing = True + self.is_pause = False def download_music(self, index=-1): if index == -1: @@ -781,7 +782,11 @@ class MumbleBot: elif uri[-3:] == "mp3": tags = mutagen.File(uri) if "APIC:" in tags: - music['thumbnail'] = base64.b64encode(tags["APIC:"].data).decode('utf-8') + im = Image.open(BytesIO(tags["APIC:"].data)) + im.thumbnail((100, 100), Image.ANTIALIAS) + buffer = BytesIO() + im.save(buffer, format="JPEG") + music['thumbnail'] = base64.b64encode(buffer.getvalue()).decode('utf-8') return music @@ -789,7 +794,7 @@ class MumbleBot: def async_download_next(self): # Function start if the next music isn't ready # Do nothing in case the next music is already downloaded - logging.info("Async download next asked") + logging.info("Async download next asked ") if len(var.playlist.playlist) > 1 and var.playlist.next_item()['type'] == 'url' and var.playlist.next_item()['ready'] in ["no", "validation"]: th = threading.Thread( target=self.download_music, kwargs={'index': var.playlist.next_index()}) diff --git a/static/css/custom.css b/static/css/custom.css index f2cedf6..c826894 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,5 +1,4 @@ .bs-docs-section{margin-top:4em} -.line{display:flex; margin-bottom:1rem} .btn-space{margin-right:5px} .playlist-title{display:inline-block} .playlist-artwork{display:inline-block; margin-left:5px;} diff --git a/templates/index.html b/templates/index.html index 2f3062d..109a5b3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,24 +4,33 @@ {%- set subdirpath = os.path.relpath(subdirobj.fullpath, music_library.fullpath) %} {%- set subdirid = subdirpath.replace("/","-") %}
  • - {{ subdirpath }}/ 
    -
    - - -
    -
    - - -
    +
    + + +
    +
    - +
    -
    + + {{ subdirpath }}/
  • {{- dirlisting(subdirobj, subdirpath) -}} @@ -33,15 +42,29 @@ {% set filepath = os.path.relpath(os.path.join(dir.fullpath, file), music_library.fullpath) %}
  • -
    - - -
    +
    + + +
    +
    - +
    -
     {{ filepath }} +
  •   + {{ filepath }} {% endfor %} {%- endif %} @@ -71,31 +94,18 @@
    -

    Play List

    +

    Play List

    -
    -

    Currently Playing: - {% if playlist.length() > 0 %} - {% if 'url' in playlist.current_item() %} - {{ playlist.current_item()['url'] }} - {% elif 'path' in playlist.current_item() %} - {{ playlist.current_item()['path'] }} - {% endif %} - {% else %} - No music - {% endif %} -

    -
    -
    +
    - +
    - +
    @@ -103,13 +113,17 @@ # - Type Title Url/Path Action + {% if playlist.length() == 0 %} + + Play list is empty. + + {% else %} {% for m in playlist.playlist %} {% if loop.index0 == playlist.current_index %} @@ -117,9 +131,8 @@ {% endif %} {{ loop.index }} - {{ m['type'].capitalize() }} -
    +
    {% if 'thumbnail' in m %} {% else %} @@ -132,6 +145,7 @@ {% else %} {{ m['url'] }} {% endif %} + {{ m['type'].capitalize() }}
    {% if 'artist' in m %} {{ m['artist'] }} @@ -142,27 +156,35 @@ {% if 'url' in m %} - {{ m['url'] }} + {{ m['url']|truncate(50) }} {% elif 'path' in m %} - {{ m['path'] }} + {{ m['path']|truncate(50) }} {% endif %} -
    +
    - +
    - +
    {% endfor %} + {% endif %} + +
    +
    + + +
    +
    @@ -174,19 +196,18 @@
    -

    Music library

    +

    Music Library

    -
    +
    - +
    - +

    @@ -209,14 +230,14 @@
    -
    +
    Upload To - +
    @@ -244,9 +266,11 @@
    - - - + +
    + + +
    @@ -258,9 +282,11 @@
    - - - + +
    + + +
    @@ -271,6 +297,8 @@ + +