diff --git a/database.py b/database.py index 11d5983..757c805 100644 --- a/database.py +++ b/database.py @@ -185,6 +185,18 @@ class MusicDatabase: conn.close() return list(map(lambda i: i[0], results)) + def query_all_tags(self): + conn = sqlite3.connect(self.db_path) + cursor = conn.cursor() + results = cursor.execute("SELECT tags FROM music").fetchall() + tags = [] + for result in results: + for tag in result[0].strip(",").split(","): + if tag and tag not in tags: + tags.append(tag) + conn.close() + return tags + def query_music(self, **kwargs): condition = [] filler = [] @@ -242,8 +254,11 @@ class MusicDatabase: music_dict = json.loads(result[3]) music_dict['type'] = result[1] music_dict['title'] = result[2] - music_dict['tags'] = result[4].strip(",").split(",") music_dict['id'] = result[0] + music_dict['tags'] = result[4].strip(",").split(",") + if not music_dict['tags'][0]: + music_dict['tags'] = [] + music_dicts.append(music_dict) return music_dicts @@ -260,7 +275,7 @@ class MusicDatabase: if len(results) > 0: tags = results[0][0].strip(",").split(",") - return tags + return tags if tags[0] else [] else: return None diff --git a/interface.py b/interface.py index dc492b2..6dc9e2d 100644 --- a/interface.py +++ b/interface.py @@ -10,7 +10,7 @@ import shutil from werkzeug.utils import secure_filename import errno import media -from media.playlist import get_item_wrapper, get_item_wrapper_by_id +from media.playlist import get_item_wrapper, get_item_wrapper_by_id, get_item_wrappers_by_tags import logging import time @@ -90,20 +90,49 @@ def requires_auth(f): return f(*args, **kwargs) return decorated -def build_tags_lookup(): - lookup = {} - for path, id in var.library.file_id_lookup.items(): - lookup[path] = var.music_db.query_tags_by_id(id) +def tag_color(tag): + num = hash(tag) % 8 + if num == 0: + return "primary" + elif num == 1: + return "secondary" + elif num == 2: + return "success" + elif num == 3: + return "danger" + elif num == 4: + return "warning" + elif num == 5: + return "info" + elif num == 6: + return "light" + elif num == 7: + return "dark" - return lookup +def build_tags_color_lookup(): + color_lookup = {} + for tag in var.music_db.query_all_tags(): + color_lookup[tag] = tag_color(tag) + + + return color_lookup + +def build_path_tags_lookup(): + path_lookup = {} + for path, id in var.library.file_id_lookup.items(): + path_lookup[path] = var.music_db.query_tags_by_id(id) + + return path_lookup @web.route("/", methods=['GET']) @requires_auth def index(): - tags_lookup = build_tags_lookup() + tags_color_lookup = build_tags_color_lookup() + path_tags_lookup = build_path_tags_lookup() return render_template('index.html', all_files=var.library.files, - tags_lookup=tags_lookup, + tags_lookup=path_tags_lookup, + tags_color_lookup=tags_color_lookup, music_library=var.library.dir, os=os, playlist=var.playlist, @@ -121,11 +150,13 @@ def playlist(): )] }) + tags_color_lookup = build_tags_color_lookup() items = [] for index, item_wrapper in enumerate(var.playlist): items.append(render_template('playlist.html', index=index, + tags_color_lookup=tags_color_lookup, m=item_wrapper.item(), playlist=var.playlist ) @@ -258,6 +289,12 @@ def post(): shutil.rmtree(path) time.sleep(0.1) + elif 'add_tag' in request.form: + music_wrappers = get_item_wrappers_by_tags(var.bot, [request.form['add_tag']], user) + for music_wrapper in music_wrappers: + log.info("cmd: add to playlist: " + music_wrapper.format_debug_string()) + var.playlist.extend(music_wrappers) + elif 'action' in request.form: action = request.form['action'] if action == "randomize": diff --git a/static/css/custom.css b/static/css/custom.css index 7b49d00..80b43f2 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,5 +1,7 @@ .bs-docs-section{margin-top:4em} +.bs-docs-section .page-header h1 { padding: 2rem 0; font-size: 3rem; margin-bottom: 10px } .btn-space{margin-right:5px} .playlist-title-td{width:60%} .playlist-title{float:left; } .playlist-artwork{float:left; margin-left:10px;} +.tag-click{cursor:pointer;} diff --git a/templates/index.html b/templates/index.html index 5e3e88f..6f6c316 100644 --- a/templates/index.html +++ b/templates/index.html @@ -79,7 +79,7 @@ {{ filepath }} {% for tag in tags_lookup[filepath] %} - {{ tag }} + {% endfor %}