forked from rDrama/rDrama
downloadable videos on apple devices (#42)
![image](/attachments/bd1b3e1e-c0a9-4eee-9b1c-a03e1e8a8cbd) Co-authored-by: Aevann1 <randomname42029@gmail.com> Co-authored-by: Snakes <duolsm@outlook.com> Co-authored-by: Snakes <snakes@noreply.fsdfsd.net> Reviewed-on: rDrama/rDrama#42 Co-authored-by: Aevann <aevann@noreply.fsdfsd.net> Co-committed-by: Aevann <aevann@noreply.fsdfsd.net>master
parent
e105035272
commit
3eecec0a51
|
@ -6433,3 +6433,9 @@ div.markdown {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.download-video {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1016,12 +1016,15 @@ class User(Base):
|
||||||
Whether a user can strictly see this item. can_see_content is used where
|
Whether a user can strictly see this item. can_see_content is used where
|
||||||
content of a thing can be hidden from view
|
content of a thing can be hidden from view
|
||||||
'''
|
'''
|
||||||
|
browser = g and g.browser # TODO: request state object to pass to models for purity
|
||||||
if isinstance(other, (Submission, Comment)):
|
if isinstance(other, (Submission, Comment)):
|
||||||
if not cls.can_see(user, other.author): return False
|
if not cls.can_see(user, other.author): return False
|
||||||
if user and user.id == other.author_id: return True
|
if user and user.id == other.author_id: return True
|
||||||
if isinstance(other, Submission):
|
if isinstance(other, Submission):
|
||||||
if "!YOU!" in other.title and not user: return False
|
if "!YOU!" in other.title and not user: return False
|
||||||
if not g.webview and other.author_id == AEVANN_ID and other.title.startswith('[ANDROID]'):
|
if browser != 'webview' and other.author_id == AEVANN_ID and other.title.startswith('[ANDROID]'):
|
||||||
|
return False
|
||||||
|
if browser != 'apple' and other.author_id == CARP_ID and other.title.startswith('[APPLE]'):
|
||||||
return False
|
return False
|
||||||
if other.sub and not cls.can_see(user, other.subr): return False
|
if other.sub and not cls.can_see(user, other.subr): return False
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -30,7 +30,14 @@ def before_request():
|
||||||
|
|
||||||
if not get_setting('bots') and request.headers.get("Authorization"): abort(403)
|
if not get_setting('bots') and request.headers.get("Authorization"): abort(403)
|
||||||
|
|
||||||
g.webview = '; wv) ' in ua
|
if '; wv) ' in ua:
|
||||||
|
g.browser = 'webview'
|
||||||
|
elif ' firefox/' in ua:
|
||||||
|
g.browser = 'firefox'
|
||||||
|
elif 'iphone' in ua or 'ipad' in ua or 'ipod' in ua or 'mac os' in ua:
|
||||||
|
g.browser = 'apple'
|
||||||
|
else:
|
||||||
|
g.browser = 'chromium'
|
||||||
|
|
||||||
g.is_tor = request.headers.get("cf-ipcountry") == "T1"
|
g.is_tor = request.headers.get("cf-ipcountry") == "T1"
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,10 @@
|
||||||
<div class="ml-3 mt-4">
|
<div class="ml-3 mt-4">
|
||||||
<b>How to install {{SITE_NAME}}'s mobile app</b>
|
<b>How to install {{SITE_NAME}}'s mobile app</b>
|
||||||
|
|
||||||
{% set ua = g.agent.lower() %}
|
{% if not v and type == 'chromium' %}
|
||||||
{% if ' firefox/' in ua %}
|
|
||||||
{% set type = 'firefox' %}
|
|
||||||
{% elif 'iphone' in ua or 'ipad' in ua or 'ipod' in ua or 'mac os' in ua %}
|
|
||||||
{% set type = 'apple' %}
|
|
||||||
{% elif v %}
|
|
||||||
{% set type = 'chromium' %}
|
|
||||||
{% else %}
|
|
||||||
{% set type = 'chromium-lo' %}
|
{% set type = 'chromium-lo' %}
|
||||||
|
{% else %}
|
||||||
|
{% set type = g.browser %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div class="font-weight-bold mt-4 mb-2">First step:</div>
|
<div class="font-weight-bold mt-4 mb-2">First step:</div>
|
||||||
|
|
|
@ -70,4 +70,27 @@
|
||||||
<script defer src="{{'js/vendor/critters.js' | asset}}"></script>
|
<script defer src="{{'js/vendor/critters.js' | asset}}"></script>
|
||||||
<script defer src="{{'js/spider.js' | asset}}"></script>
|
<script defer src="{{'js/spider.js' | asset}}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if g.browser == 'apple' %}
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const videos = document.querySelectorAll('video')
|
||||||
|
|
||||||
|
for (const video of videos) {
|
||||||
|
const link = video.src
|
||||||
|
const htmlString = `
|
||||||
|
<a rel="nofollow noopener" href="${link}" target="_blank">
|
||||||
|
<div class="d-flex justify-content-between align-items-center border rounded p-2 mb-3 download-video">
|
||||||
|
<span>${link}</span>
|
||||||
|
<i class="fas fa-external-link-alt text-small"></i>
|
||||||
|
</div>
|
||||||
|
</a>`
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.innerHTML = htmlString;
|
||||||
|
video.after(div)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -97,7 +97,7 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if g.webview %}
|
{% if g.browser == 'webview' %}
|
||||||
<button type="button" class="mobile-nav-icon d-md-none" onclick="location.reload()"><i class="fas fa-arrow-rotate-right align-middle text-gray-500 black"></i></button>
|
<button type="button" class="mobile-nav-icon d-md-none" onclick="location.reload()"><i class="fas fa-arrow-rotate-right align-middle text-gray-500 black"></i></button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if request.path == '/' and not g.webview and time.time() > session.get('tooltip_last_dismissed',0)+86400*30 %}
|
{% if request.path == '/' and g.browser != 'webview' and time.time() > session.get('tooltip_last_dismissed',0)+86400*30 %}
|
||||||
<style>
|
<style>
|
||||||
.dismiss-beg {
|
.dismiss-beg {
|
||||||
color: #919191;
|
color: #919191;
|
||||||
|
|
|
@ -108,18 +108,6 @@
|
||||||
|
|
||||||
{% if not v_forbid_deleted %}
|
{% if not v_forbid_deleted %}
|
||||||
<div id="post-body" class="post-body mt-3">
|
<div id="post-body" class="post-body mt-3">
|
||||||
{% if p.realurl(v) %}
|
|
||||||
{% if not p.embed_url and not p.is_image %}
|
|
||||||
<a rel="nofollow noopener" href="{{p.realurl(v)}}" {% if not v or v.newtabexternal %}target="_blank"{% endif %}>
|
|
||||||
<div class="d-flex {% if p.is_video or p.is_audio %}d-md-none{% endif %} justify-content-between align-items-center border rounded p-2 mb-3">
|
|
||||||
<span>{{p.realurl(v)}}</span>
|
|
||||||
<i class="fas fa-external-link-alt text-small"></i>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
|
|
||||||
{% if p.embed_url %}
|
{% if p.embed_url %}
|
||||||
{% if p.domain == "twitter.com" %}
|
{% if p.domain == "twitter.com" %}
|
||||||
{{p.embed_url | safe}}
|
{{p.embed_url | safe}}
|
||||||
|
|
Loading…
Reference in New Issue