fix chat width; fix placement of dates in chat; italicise chat dates in text browsers; show uptime properly in text browsers; show settings in comment box when reloaded if user decides against kicking themselves out of the secret club; always give 403 response when secret club is active to hide if stream is live
このコミットが含まれているのは:
コミット
c123b74b1b
|
@ -66,8 +66,6 @@ def broadcaster():
|
||||||
|
|
||||||
@current_app.route('/stream.m3u8')
|
@current_app.route('/stream.m3u8')
|
||||||
def playlist():
|
def playlist():
|
||||||
if not stream.is_online():
|
|
||||||
return abort(404)
|
|
||||||
token = get_token()
|
token = get_token()
|
||||||
viewership.made_request(token)
|
viewership.made_request(token)
|
||||||
if not viewership.is_allowed(token):
|
if not viewership.is_allowed(token):
|
||||||
|
@ -76,6 +74,8 @@ def playlist():
|
||||||
viewership.video_was_corrupted.remove(token)
|
viewership.video_was_corrupted.remove(token)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
if not stream.is_online():
|
||||||
|
return abort(404)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
token_playlist = stream.token_playlist(token)
|
token_playlist = stream.token_playlist(token)
|
||||||
|
@ -88,8 +88,6 @@ def playlist():
|
||||||
|
|
||||||
@current_app.route(f'/{SEGMENT_INIT}')
|
@current_app.route(f'/{SEGMENT_INIT}')
|
||||||
def segment_init():
|
def segment_init():
|
||||||
if not stream.is_online():
|
|
||||||
return abort(404)
|
|
||||||
token = get_token() or new_token()
|
token = get_token() or new_token()
|
||||||
viewership.made_request(token)
|
viewership.made_request(token)
|
||||||
if not viewership.is_allowed(token):
|
if not viewership.is_allowed(token):
|
||||||
|
@ -98,6 +96,8 @@ def segment_init():
|
||||||
viewership.video_was_corrupted.remove(token)
|
viewership.video_was_corrupted.remove(token)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
if not stream.is_online():
|
||||||
|
return abort(404)
|
||||||
|
|
||||||
response = send_from_directory(SEGMENTS_DIR, f'init.mp4', add_etags=False)
|
response = send_from_directory(SEGMENTS_DIR, f'init.mp4', add_etags=False)
|
||||||
response.headers['Cache-Control'] = 'no-cache'
|
response.headers['Cache-Control'] = 'no-cache'
|
||||||
|
@ -106,8 +106,6 @@ def segment_init():
|
||||||
|
|
||||||
@current_app.route('/stream<int:n>.m4s')
|
@current_app.route('/stream<int:n>.m4s')
|
||||||
def segment_arbitrary(n):
|
def segment_arbitrary(n):
|
||||||
if not stream.is_online():
|
|
||||||
return abort(404)
|
|
||||||
token = get_token()
|
token = get_token()
|
||||||
if not viewership.is_allowed(token):
|
if not viewership.is_allowed(token):
|
||||||
return abort(403)
|
return abort(403)
|
||||||
|
@ -115,6 +113,8 @@ def segment_arbitrary(n):
|
||||||
viewership.video_was_corrupted.remove(token)
|
viewership.video_was_corrupted.remove(token)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
if not stream.is_online():
|
||||||
|
return abort(404)
|
||||||
|
|
||||||
# only send segments that are listed in stream.m3u8
|
# only send segments that are listed in stream.m3u8
|
||||||
# this stops old segments from previous streams being sent
|
# this stops old segments from previous streams being sent
|
||||||
|
@ -127,8 +127,6 @@ def segment_arbitrary(n):
|
||||||
|
|
||||||
@current_app.route('/stream.mp4')
|
@current_app.route('/stream.mp4')
|
||||||
def segments():
|
def segments():
|
||||||
if not stream.is_online():
|
|
||||||
return abort(404)
|
|
||||||
token = get_token() or new_token()
|
token = get_token() or new_token()
|
||||||
viewership.made_request(token)
|
viewership.made_request(token)
|
||||||
if not viewership.is_allowed(token):
|
if not viewership.is_allowed(token):
|
||||||
|
@ -137,6 +135,8 @@ def segments():
|
||||||
viewership.video_was_corrupted.remove(token)
|
viewership.video_was_corrupted.remove(token)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
if not stream.is_online():
|
||||||
|
return abort(404)
|
||||||
|
|
||||||
def should_close_connection():
|
def should_close_connection():
|
||||||
if not stream.is_online():
|
if not stream.is_online():
|
||||||
|
@ -299,6 +299,7 @@ def settings():
|
||||||
return redirect(url_for('index'))
|
return redirect(url_for('index'))
|
||||||
viewers[token]['nickname'] = old_nickname
|
viewers[token]['nickname'] = old_nickname
|
||||||
viewers[token]['tripcode'] = old_tripcode
|
viewers[token]['tripcode'] = old_tripcode
|
||||||
|
viewership.preset_comment_iframe[token] = {'note': N_NONE, 'show_settings': True}
|
||||||
return render_template('comment-confirm-iframe.html', token=token, nickname=old_nickname or viewership.default_nickname(token))
|
return render_template('comment-confirm-iframe.html', token=token, nickname=old_nickname or viewership.default_nickname(token))
|
||||||
|
|
||||||
viewership.preset_comment_iframe[token] = {'note': note, 'show_settings': True}
|
viewership.preset_comment_iframe[token] = {'note': note, 'show_settings': True}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
.rotate {transform: rotate(-180deg);}
|
.rotate {transform: rotate(-180deg);}
|
||||||
.reverse {direction: rtl;}
|
.reverse {direction: rtl;}
|
||||||
|
|
||||||
.comment {color:white;padding:3px 2px;overflow:hidden;display:inline-block;width:calc(100vw - 2em);}
|
.comment {color:white;padding:3px 2px;overflow:hidden;display:inline-block;width:calc(100vw - 1.25em);}
|
||||||
.comment:hover{background-color:#333;border-radius:4px;}
|
.comment:hover{background-color:#333;border-radius:4px;}
|
||||||
.date {color:gray;font-size:75%;text-align:center;border-bottom:1px solid #333;margin:0.5em 0 0.75em 0;cursor:default;}
|
.date {color:gray;font-size:75%;text-align:center;border-bottom:1px solid #333;margin:0.5em 0 0.75em 0;cursor:default;}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
<div class="textonly">
|
<div class="textonly">
|
||||||
<br>
|
<br>
|
||||||
<div><b>{{ stream_title }}</b></div>
|
<div><b>{{ stream_title }}</b></div>
|
||||||
<div>{{ stream_viewers }} viewer(s), {% if uptime %}{{ stream_uptime }} uptime{% else %}offline{% endif %}</div>
|
<div>{{ stream_viewers }} viewer(s), {% if stream_uptime %}{{ stream_uptime }} uptime{% else %}offline{% endif %}</div>
|
||||||
<br>
|
<br>
|
||||||
<div>== Chat ==</div>
|
<div>== Chat ==</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -119,10 +119,10 @@
|
||||||
<table border="1" frame="void" rules="rows" style="border-collapse:separate;border-spacing:0 2px;">
|
<table border="1" frame="void" rules="rows" style="border-collapse:separate;border-spacing:0 2px;">
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
{% if message.get('special') == 'date' %}
|
|
||||||
<div class="date rotate">{{ message['content'] }}</div>
|
|
||||||
{% else %}
|
|
||||||
<tr>
|
<tr>
|
||||||
|
{% if message.get('special') == 'date' %}
|
||||||
|
<td class="date rotate"><i style="font-style:normal;">{{ message['content'] }}</i></td>
|
||||||
|
{% else %}
|
||||||
<td class="comment rotate">
|
<td class="comment rotate">
|
||||||
{% if not message['hidden'] %}
|
{% if not message['hidden'] %}
|
||||||
{% if broadcaster %}
|
{% if broadcaster %}
|
||||||
|
@ -139,8 +139,8 @@
|
||||||
><span class="barrier"></span><br class="textonly"><span class="message">{{ message['text'] }}</span>
|
><span class="barrier"></span><br class="textonly"><span class="message">{{ message['text'] }}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
読み込み中…
新しいイシューから参照