watch_page: refactor music list into flask template

This commit is contained in:
James Taylor 2019-07-07 17:29:25 -07:00
parent 6261add37d
commit b89d90a0d3
2 changed files with 33 additions and 41 deletions

View File

@ -185,14 +185,31 @@
<span>{{ format['resolution'] }}</span>
<span>{{ format['note'] }}</span>
</a>
{% endfor %}
{% endfor %}
</div>
</div>
<input class="checkbox" name="video_info_list" value="{{ video_info }}" form="playlist-edit" type="checkbox">
<span class="description">{{ description }}</span>
<div class="music-list">
{{ music_list|safe }}
{% if music_list.__len__() != 0 %}
<hr>
<table>
<caption>Music</caption>
<tr>
{% for attribute in music_attributes %}
<th>{{ attribute }}</th>
{% endfor %}
</tr>
{% for track in music_list %}
<tr>
{% for attribute in music_attributes %}
<td>{{ track.get(attribute.lower(), '') }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endif %}
</div>
{{ comments|safe }}
</article>

View File

@ -110,46 +110,20 @@ def get_subtitle_sources(info):
return sources
def get_music_list_html(music_list):
if len(music_list) == 0:
music_list_html = ''
else:
# get the set of attributes which are used by atleast 1 track
# so there isn't an empty, extraneous album column which no tracks use, for example
used_attributes = set()
for track in music_list:
used_attributes = used_attributes | track.keys()
# now put them in the right order
ordered_attributes = []
for attribute in ('Artist', 'Title', 'Album'):
if attribute.lower() in used_attributes:
ordered_attributes.append(attribute)
music_list_html = '''<hr>
<table>
<caption>Music</caption>
<tr>
'''
# table headings
for attribute in ordered_attributes:
music_list_html += "<th>" + attribute + "</th>\n"
music_list_html += '''</tr>\n'''
for track in music_list:
music_list_html += '''<tr>\n'''
for attribute in ordered_attributes:
try:
value = track[attribute.lower()]
except KeyError:
music_list_html += '''<td></td>'''
else:
music_list_html += '''<td>''' + html.escape(value) + '''</td>'''
music_list_html += '''</tr>\n'''
music_list_html += '''</table>\n'''
return music_list_html
def get_ordered_music_list_attributes(music_list):
# get the set of attributes which are used by atleast 1 track
# so there isn't an empty, extraneous album column which no tracks use, for example
used_attributes = set()
for track in music_list:
used_attributes = used_attributes | track.keys()
# now put them in the right order
ordered_attributes = []
for attribute in ('Artist', 'Title', 'Album'):
if attribute.lower() in used_attributes:
ordered_attributes.append(attribute)
return ordered_attributes
def extract_info(downloader, *args, **kwargs):
@ -231,10 +205,11 @@ def get_watch_page():
video_sources = get_video_sources(info),
subtitle_sources = get_subtitle_sources(info),
related = related_videos,
music_list = info['music_list'],
music_attributes = get_ordered_music_list_attributes(info['music_list']),
# TODO: refactor these
comments = comments_html,
music_list = get_music_list_html(info['music_list']),
title = info['title'],
uploader = info['uploader'],