restructure html to allow for non boxed-content classes within content blocks, #98
parent
8c5bb0bc1f
commit
e2238c16f5
@ -1,17 +1,19 @@
|
|||||||
{% extends "home/base.html" %}
|
{% extends "home/base.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="title-bar">
|
<div class="boxed-content">
|
||||||
<h1>About The Tube Archivist</h1>
|
<div class="title-bar">
|
||||||
</div>
|
<h1>About The Tube Archivist</h1>
|
||||||
<div class="about-section">
|
</div>
|
||||||
<h2>Useful Links</h2>
|
<div class="about-section">
|
||||||
<p>This project is in active and constant development, take a look at the <a href="https://github.com/bbilly1/tubearchivist#roadmap" target="_blank">roadmap</a> for a overview.</p>
|
<h2>Useful Links</h2>
|
||||||
<p>For any questions on what a button or a function does, You can find the up-to-date user documentation on <a href="https://github.com/bbilly1/tubearchivist/wiki" target="_blank">Github</a>.</p>
|
<p>This project is in active and constant development, take a look at the <a href="https://github.com/bbilly1/tubearchivist#roadmap" target="_blank">roadmap</a> for a overview.</p>
|
||||||
<p>All contributions are welcome: Open an <a href="https://github.com/bbilly1/tubearchivist/issues" target="_blank">issue</a> for any bugs and errors, start a <a href="https://github.com/bbilly1/tubearchivist/discussions" target="_blank">discussion</a> for anything that will require a more indepth look. The <a href="https://github.com/bbilly1/tubearchivist/blob/master/CONTRIBUTING.md" target="_blank">contributing</a> page is a good place to get started.</p>
|
<p>For any questions on what a button or a function does, You can find the up-to-date user documentation on <a href="https://github.com/bbilly1/tubearchivist/wiki" target="_blank">Github</a>.</p>
|
||||||
</div>
|
<p>All contributions are welcome: Open an <a href="https://github.com/bbilly1/tubearchivist/issues" target="_blank">issue</a> for any bugs and errors, start a <a href="https://github.com/bbilly1/tubearchivist/discussions" target="_blank">discussion</a> for anything that will require a more indepth look. The <a href="https://github.com/bbilly1/tubearchivist/blob/master/CONTRIBUTING.md" target="_blank">contributing</a> page is a good place to get started.</p>
|
||||||
<div class="about-section">
|
</div>
|
||||||
<h2>Donate</h2>
|
<div class="about-section">
|
||||||
<p>Here are <a href="https://github.com/bbilly1/tubearchivist#donate" target="_blank">some links</a>, if you want to buy the developer a coffee. Thank you for your support!</p>
|
<h2>Donate</h2>
|
||||||
|
<p>Here are <a href="https://github.com/bbilly1/tubearchivist#donate" target="_blank">some links</a>, if you want to buy the developer a coffee. Thank you for your support!</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
@ -1,92 +1,94 @@
|
|||||||
{% extends "home/base.html" %}
|
{% extends "home/base.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="title-bar">
|
<div class="boxed-content">
|
||||||
<h1>Downloads</h1>
|
<div class="title-bar">
|
||||||
</div>
|
<h1>Downloads</h1>
|
||||||
<div id="notifications" data="download"></div>
|
|
||||||
<div id="downloadControl"></div>
|
|
||||||
<div class="info-box info-box-3">
|
|
||||||
<div class="icon-text">
|
|
||||||
<img id="rescan-icon" onclick="rescanPending()" src="{% static 'img/icon-rescan.svg' %}" alt="rescan-icon">
|
|
||||||
<p>Rescan subscriptions</p>
|
|
||||||
</div>
|
|
||||||
<div class="icon-text">
|
|
||||||
<img id="download-icon" onclick="dlPending()" src="{% static 'img/icon-download.svg' %}" alt="download-icon">
|
|
||||||
<p>Start download</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="icon-text">
|
<div id="notifications" data="download"></div>
|
||||||
<img id="add-icon" onclick="showForm()" src="{% static 'img/icon-add.svg' %}" alt="add-icon">
|
<div id="downloadControl"></div>
|
||||||
<p>Add to download queue</p>
|
<div class="info-box info-box-3">
|
||||||
<div class="show-form">
|
<div class="icon-text">
|
||||||
<form id='hidden-form' action="/downloads/" method="post">
|
<img id="rescan-icon" onclick="rescanPending()" src="{% static 'img/icon-rescan.svg' %}" alt="rescan-icon">
|
||||||
{% csrf_token %}
|
<p>Rescan subscriptions</p>
|
||||||
{{ add_form }}
|
|
||||||
<button type="submit">Add to download queue</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="icon-text">
|
||||||
</div>
|
<img id="download-icon" onclick="dlPending()" src="{% static 'img/icon-download.svg' %}" alt="download-icon">
|
||||||
<div class="view-controls">
|
<p>Start download</p>
|
||||||
<div class="toggle">
|
</div>
|
||||||
<span>Show only ignored videos:</span>
|
<div class="icon-text">
|
||||||
<div class="toggleBox">
|
<img id="add-icon" onclick="showForm()" src="{% static 'img/icon-add.svg' %}" alt="add-icon">
|
||||||
<input
|
<p>Add to download queue</p>
|
||||||
id="show_ignored_only" onclick="toggleCheckbox(this)" type="checkbox"
|
<div class="show-form">
|
||||||
{% if show_ignored_only %}
|
<form id='hidden-form' action="/downloads/" method="post">
|
||||||
checked
|
{% csrf_token %}
|
||||||
{% endif %}
|
{{ add_form }}
|
||||||
>
|
<button type="submit">Add to download queue</button>
|
||||||
<label for="" class="onbtn">On</label>
|
</form>
|
||||||
<label for="" class="ofbtn">Off</label>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="view-icons">
|
<div class="view-controls">
|
||||||
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="downloads" data-value="grid" alt="grid view">
|
<div class="toggle">
|
||||||
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="downloads" data-value="list" alt="list view">
|
<span>Show only ignored videos:</span>
|
||||||
</div>
|
<div class="toggleBox">
|
||||||
</div>
|
<input
|
||||||
<div class="title-split">
|
id="show_ignored_only" onclick="toggleCheckbox(this)" type="checkbox"
|
||||||
{% if show_ignored_only %}
|
|
||||||
<h2>Ignored from download</h2>
|
|
||||||
<button onclick="deleteQueue(this)" data-id="ignore" title="Delete all previously ignored videos from the queue">Delete all ignored</button>
|
|
||||||
{% else %}
|
|
||||||
<h2>Download queue</h2>
|
|
||||||
<button onclick="deleteQueue(this)" data-id="pending" title="Delete all pending videos from the queue">Delete all queued</button>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<h3>Total videos: {{ max_hits }}</h3>
|
|
||||||
<div class="dl-list {{ view_style }}">
|
|
||||||
{% if all_video_hits %}
|
|
||||||
{% for video in all_video_hits %}
|
|
||||||
<div class="dl-item {{ view_style }}" id="dl-{{ video.youtube_id }}">
|
|
||||||
<div class="dl-thumb {{ view_style }}">
|
|
||||||
<img src="/cache/{{ video.vid_thumb_url }}" alt="video_thumb">
|
|
||||||
{% if show_ignored_only %}
|
|
||||||
<span>ignored</span>
|
|
||||||
{% else %}
|
|
||||||
<span>queued</span>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<div class="dl-desc {{ view_style }}">
|
|
||||||
<h3>{{ video.title }}</h3>
|
|
||||||
{% if video.channel_indexed %}
|
|
||||||
<a href="{% url 'channel_id' video.channel_id %}">{{ video.channel_name }}</a>
|
|
||||||
{% else %}
|
|
||||||
<span>{{ video.channel_name }}</span>
|
|
||||||
{% endif %}
|
|
||||||
<p>Published: {{ video.published }} | Duration: {{ video.duration }} | {{ video.youtube_id }}</p>
|
|
||||||
{% if show_ignored_only %}
|
{% if show_ignored_only %}
|
||||||
<button data-id="{{ video.youtube_id }}" onclick="forgetIgnore(this)">Forget</button>
|
checked
|
||||||
<button data-id="{{ video.youtube_id }}" onclick="addSingle(this)">Add to queue</button>
|
|
||||||
{% else %}
|
|
||||||
<button data-id="{{ video.youtube_id }}" onclick="toIgnore(this)">Ignore</button>
|
|
||||||
<button id="{{ video.youtube_id }}" data-id="{{ video.youtube_id }}" onclick="downloadNow(this)">Download now</button>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
>
|
||||||
|
<label for="" class="onbtn">On</label>
|
||||||
|
<label for="" class="ofbtn">Off</label>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
</div>
|
||||||
{% endif %}
|
<div class="view-icons">
|
||||||
|
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="downloads" data-value="grid" alt="grid view">
|
||||||
|
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="downloads" data-value="list" alt="list view">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="title-split">
|
||||||
|
{% if show_ignored_only %}
|
||||||
|
<h2>Ignored from download</h2>
|
||||||
|
<button onclick="deleteQueue(this)" data-id="ignore" title="Delete all previously ignored videos from the queue">Delete all ignored</button>
|
||||||
|
{% else %}
|
||||||
|
<h2>Download queue</h2>
|
||||||
|
<button onclick="deleteQueue(this)" data-id="pending" title="Delete all pending videos from the queue">Delete all queued</button>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<h3>Total videos: {{ max_hits }}</h3>
|
||||||
|
<div class="dl-list {{ view_style }}">
|
||||||
|
{% if all_video_hits %}
|
||||||
|
{% for video in all_video_hits %}
|
||||||
|
<div class="dl-item {{ view_style }}" id="dl-{{ video.youtube_id }}">
|
||||||
|
<div class="dl-thumb {{ view_style }}">
|
||||||
|
<img src="/cache/{{ video.vid_thumb_url }}" alt="video_thumb">
|
||||||
|
{% if show_ignored_only %}
|
||||||
|
<span>ignored</span>
|
||||||
|
{% else %}
|
||||||
|
<span>queued</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="dl-desc {{ view_style }}">
|
||||||
|
<h3>{{ video.title }}</h3>
|
||||||
|
{% if video.channel_indexed %}
|
||||||
|
<a href="{% url 'channel_id' video.channel_id %}">{{ video.channel_name }}</a>
|
||||||
|
{% else %}
|
||||||
|
<span>{{ video.channel_name }}</span>
|
||||||
|
{% endif %}
|
||||||
|
<p>Published: {{ video.published }} | Duration: {{ video.duration }} | {{ video.youtube_id }}</p>
|
||||||
|
{% if show_ignored_only %}
|
||||||
|
<button data-id="{{ video.youtube_id }}" onclick="forgetIgnore(this)">Forget</button>
|
||||||
|
<button data-id="{{ video.youtube_id }}" onclick="addSingle(this)">Add to queue</button>
|
||||||
|
{% else %}
|
||||||
|
<button data-id="{{ video.youtube_id }}" onclick="toIgnore(this)">Ignore</button>
|
||||||
|
<button id="{{ video.youtube_id }}" data-id="{{ video.youtube_id }}" onclick="downloadNow(this)">Download now</button>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript" src="{% static 'progress.js' %}"></script>
|
<script type="text/javascript" src="{% static 'progress.js' %}"></script>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
@ -1,95 +1,97 @@
|
|||||||
{% extends "home/base.html" %}
|
{% extends "home/base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<div class="title-bar">
|
<div class="boxed-content">
|
||||||
<h1>Recent Videos</h1>
|
<div class="title-bar">
|
||||||
</div>
|
<h1>Recent Videos</h1>
|
||||||
<div class="info-box info-box-2">
|
|
||||||
<div class="sort">
|
|
||||||
<p>Sort by <span class="settings-current">{{ sort_by }}</span>
|
|
||||||
<select name="sort" id="sort" onchange="sortChange(this.value)">
|
|
||||||
<option value="" disabled selected> -- change sort by -- </option>
|
|
||||||
<option value="published">date published</option>
|
|
||||||
<option value="downloaded">date downloaded</option>
|
|
||||||
<option value="views">views</option>
|
|
||||||
<option value="likes">likes</option>
|
|
||||||
</select>
|
|
||||||
<select name="sord-order" id="sort-order" onchange="sortChange(this.value)">
|
|
||||||
{% if sort_order == "asc" %}
|
|
||||||
<option value="asc" selected>asc</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="asc">asc</option>
|
|
||||||
{% endif %}
|
|
||||||
{% if sort_order == "desc" %}
|
|
||||||
<option value="desc" selected>desc</option>
|
|
||||||
{% else %}
|
|
||||||
<option value="desc">desc</option>
|
|
||||||
{% endif %}
|
|
||||||
</select>
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="search-form icon-text">
|
<div class="info-box info-box-2">
|
||||||
<div class="search-icon">
|
<div class="sort">
|
||||||
<img src="{% static 'img/icon-search.svg' %}" alt="search-icon" onclick="showSearch()">
|
<p>Sort by <span class="settings-current">{{ sort_by }}</span>
|
||||||
|
<select name="sort" id="sort" onchange="sortChange(this.value)">
|
||||||
|
<option value="" disabled selected> -- change sort by -- </option>
|
||||||
|
<option value="published">date published</option>
|
||||||
|
<option value="downloaded">date downloaded</option>
|
||||||
|
<option value="views">views</option>
|
||||||
|
<option value="likes">likes</option>
|
||||||
|
</select>
|
||||||
|
<select name="sord-order" id="sort-order" onchange="sortChange(this.value)">
|
||||||
|
{% if sort_order == "asc" %}
|
||||||
|
<option value="asc" selected>asc</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="asc">asc</option>
|
||||||
|
{% endif %}
|
||||||
|
{% if sort_order == "desc" %}
|
||||||
|
<option value="desc" selected>desc</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="desc">desc</option>
|
||||||
|
{% endif %}
|
||||||
|
</select>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<form action="/" method="POST" id="search-box">
|
<div class="search-form icon-text">
|
||||||
{% csrf_token %}
|
<div class="search-icon">
|
||||||
{{ search_form }}
|
<img src="{% static 'img/icon-search.svg' %}" alt="search-icon" onclick="showSearch()">
|
||||||
</form>
|
</div>
|
||||||
</div>
|
<form action="/" method="POST" id="search-box">
|
||||||
</div>
|
{% csrf_token %}
|
||||||
<div class="view-controls">
|
{{ search_form }}
|
||||||
<div class="toggle">
|
</form>
|
||||||
<span>Hide watched videos:</span>
|
|
||||||
<div class="toggleBox">
|
|
||||||
<input
|
|
||||||
id="hide_watched" onclick="toggleCheckbox(this)" type="checkbox"
|
|
||||||
{% if hide_watched %}
|
|
||||||
checked
|
|
||||||
{% endif %}
|
|
||||||
>
|
|
||||||
<label for="" class="onbtn">On</label>
|
|
||||||
<label for="" class="ofbtn">Off</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="view-icons">
|
<div class="view-controls">
|
||||||
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="home" data-value="grid" alt="grid view">
|
<div class="toggle">
|
||||||
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="home" data-value="list" alt="list view">
|
<span>Hide watched videos:</span>
|
||||||
|
<div class="toggleBox">
|
||||||
|
<input
|
||||||
|
id="hide_watched" onclick="toggleCheckbox(this)" type="checkbox"
|
||||||
|
{% if hide_watched %}
|
||||||
|
checked
|
||||||
|
{% endif %}
|
||||||
|
>
|
||||||
|
<label for="" class="onbtn">On</label>
|
||||||
|
<label for="" class="ofbtn">Off</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="view-icons">
|
||||||
|
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="home" data-value="grid" alt="grid view">
|
||||||
|
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="home" data-value="list" alt="list view">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id="player" class="video-player"></div>
|
||||||
<div id="player" class="video-player"></div>
|
<div class="video-list {{ view_style }}">
|
||||||
<div class="video-list {{ view_style }}">
|
{% if videos %}
|
||||||
{% if videos %}
|
{% for video in videos %}
|
||||||
{% for video in videos %}
|
<div class="video-item {{ view_style }}">
|
||||||
<div class="video-item {{ view_style }}">
|
<a href="#player" data-src="/media/{{ video.source.media_url }}" data-thumb="/cache/{{ video.source.vid_thumb_url }}" data-title="{{ video.source.title }}" data-channel="{{ video.source.channel.channel_name }}" data-id="{{ video.source.youtube_id }}" onclick="createPlayer(this)">
|
||||||
<a href="#player" data-src="/media/{{ video.source.media_url }}" data-thumb="/cache/{{ video.source.vid_thumb_url }}" data-title="{{ video.source.title }}" data-channel="{{ video.source.channel.channel_name }}" data-id="{{ video.source.youtube_id }}" onclick="createPlayer(this)">
|
<div class="video-thumb-wrap {{ view_style }}">
|
||||||
<div class="video-thumb-wrap {{ view_style }}">
|
<div class="video-thumb">
|
||||||
<div class="video-thumb">
|
<img src="/cache/{{ video.source.vid_thumb_url }}" alt="video-thumb">
|
||||||
<img src="/cache/{{ video.source.vid_thumb_url }}" alt="video-thumb">
|
</div>
|
||||||
|
<div class="video-play">
|
||||||
|
<img src="{% static 'img/icon-play.svg' %}" alt="play-icon">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="video-play">
|
</a>
|
||||||
<img src="{% static 'img/icon-play.svg' %}" alt="play-icon">
|
<div class="video-desc {{ view_style }}">
|
||||||
|
<div class="video-desc-player" id="video-info-{{ video.source.youtube_id }}">
|
||||||
|
{% if video.source.player.watched %}
|
||||||
|
<img src="{% static 'img/icon-seen.svg' %}" alt="seen-icon" id="{{ video.source.youtube_id }}" onclick="isUnwatched(this.id)" class="seen-icon" title="Mark as unwatched">
|
||||||
|
{% else %}
|
||||||
|
<img src="{% static 'img/icon-unseen.svg' %}" alt="unseen-icon" id="{{ video.source.youtube_id }}" onclick="isWatched(this.id)" class="unseen-icon" title="Mark as watched.">
|
||||||
|
{% endif %}
|
||||||
|
<span>{{ video.source.published }} | {{ video.source.player.duration_str }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="{% url 'channel_id' video.source.channel.channel_id %}"><h3>{{ video.source.channel.channel_name }}</h3></a>
|
||||||
|
<a class="video-more" href="{% url 'video' video.source.youtube_id %}"><h2>{{ video.source.title }}</h2></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
<div class="video-desc {{ view_style }}">
|
|
||||||
<div class="video-desc-player" id="video-info-{{ video.source.youtube_id }}">
|
|
||||||
{% if video.source.player.watched %}
|
|
||||||
<img src="{% static 'img/icon-seen.svg' %}" alt="seen-icon" id="{{ video.source.youtube_id }}" onclick="isUnwatched(this.id)" class="seen-icon" title="Mark as unwatched">
|
|
||||||
{% else %}
|
|
||||||
<img src="{% static 'img/icon-unseen.svg' %}" alt="unseen-icon" id="{{ video.source.youtube_id }}" onclick="isWatched(this.id)" class="unseen-icon" title="Mark as watched.">
|
|
||||||
{% endif %}
|
|
||||||
<span>{{ video.source.published }} | {{ video.source.player.duration_str }}</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<a href="{% url 'channel_id' video.source.channel.channel_id %}"><h3>{{ video.source.channel.channel_name }}</h3></a>
|
|
||||||
<a class="video-more" href="{% url 'video' video.source.youtube_id %}"><h2>{{ video.source.title }}</h2></a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endfor %}
|
||||||
{% endfor %}
|
{% else %}
|
||||||
{% else %}
|
<h2>No videos found...</h2>
|
||||||
<h2>No videos found...</h2>
|
{% endif %}
|
||||||
{% endif %}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
@ -1,82 +1,84 @@
|
|||||||
{% extends "home/base.html" %}
|
{% extends "home/base.html" %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="title-bar">
|
<div class="boxed-content">
|
||||||
<h1>Playlists</h1>
|
<div class="title-bar">
|
||||||
</div>
|
<h1>Playlists</h1>
|
||||||
<div id="notifications" data="playlist"></div>
|
|
||||||
<div class="info-box info-box-2">
|
|
||||||
<div class="icon-text">
|
|
||||||
{% if running == "subscribing" %}
|
|
||||||
<p>Subscribing in progress, refresh.</p>
|
|
||||||
{% else %}
|
|
||||||
<img id="add-icon" onclick="showForm()" src="{% static 'img/icon-add.svg' %}" alt="add-icon">
|
|
||||||
<p>Subscribe to Playlist</p>
|
|
||||||
<div class="show-form">
|
|
||||||
<form id="hidden-form" action="/playlist/" method="post">
|
|
||||||
{% csrf_token %}
|
|
||||||
{{ subscribe_form }}
|
|
||||||
<button type="submit">Subscribe</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="search-form icon-text">
|
<div id="notifications" data="playlist"></div>
|
||||||
<div class="search-icon">
|
<div class="info-box info-box-2">
|
||||||
<img src="{% static 'img/icon-search.svg' %}" alt="search-icon" onclick="showSearch()">
|
<div class="icon-text">
|
||||||
<p>Search your Playlists</p>
|
{% if running == "subscribing" %}
|
||||||
|
<p>Subscribing in progress, refresh.</p>
|
||||||
|
{% else %}
|
||||||
|
<img id="add-icon" onclick="showForm()" src="{% static 'img/icon-add.svg' %}" alt="add-icon">
|
||||||
|
<p>Subscribe to Playlist</p>
|
||||||
|
<div class="show-form">
|
||||||
|
<form id="hidden-form" action="/playlist/" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ subscribe_form }}
|
||||||
|
<button type="submit">Subscribe</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<form action="/playlist/" method="POST" id="search-box">
|
<div class="search-form icon-text">
|
||||||
{% csrf_token %}
|
<div class="search-icon">
|
||||||
{{ search_form }}
|
<img src="{% static 'img/icon-search.svg' %}" alt="search-icon" onclick="showSearch()">
|
||||||
</form>
|
<p>Search your Playlists</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<form action="/playlist/" method="POST" id="search-box">
|
||||||
<div class="view-controls">
|
{% csrf_token %}
|
||||||
<div class="toggle">
|
{{ search_form }}
|
||||||
<span>Show only subscribed playlists:</span>
|
</form>
|
||||||
<div class="toggleBox">
|
|
||||||
<input
|
|
||||||
id="show_subed_only" onclick="toggleCheckbox(this)" type="checkbox"
|
|
||||||
{% if show_subed_only %}
|
|
||||||
checked
|
|
||||||
{% endif %}
|
|
||||||
>
|
|
||||||
<label for="" class="onbtn">On</label>
|
|
||||||
<label for="" class="ofbtn">Off</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="view-icons">
|
<div class="view-controls">
|
||||||
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="playlist" data-value="grid" alt="grid view">
|
<div class="toggle">
|
||||||
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="playlist" data-value="list" alt="list view">
|
<span>Show only subscribed playlists:</span>
|
||||||
</div>
|
<div class="toggleBox">
|
||||||
</div>
|
<input
|
||||||
<div class="playlist-list {{ view_style }}">
|
id="show_subed_only" onclick="toggleCheckbox(this)" type="checkbox"
|
||||||
{% if playlists %}
|
{% if show_subed_only %}
|
||||||
{% for playlist in playlists %}
|
checked
|
||||||
<div class="playlist-item {{ view_style }}">
|
|
||||||
<div class="playlist-thumbnail">
|
|
||||||
<a href="{% url 'playlist_id' playlist.source.playlist_id %}">
|
|
||||||
<img src="/cache/playlists/{{ playlist.source.playlist_id }}.jpg" alt="{{ playlist.source.playlist_id }}-thumbnail">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="playlist-desc {{ view_style }}">
|
|
||||||
<a href="{% url 'channel_id' playlist.source.playlist_channel_id %}"><h3>{{ playlist.source.playlist_channel }}</h3></a>
|
|
||||||
<a href="{% url 'playlist_id' playlist.source.playlist_id %}"><h2>{{ playlist.source.playlist_name }}</h2></a>
|
|
||||||
<p>Last refreshed: {{ playlist.source.playlist_last_refresh }}</p>
|
|
||||||
<p>Subscribed:
|
|
||||||
{% if playlist.source.playlist_subscribed %}
|
|
||||||
<button type="button" id="{{ playlist.source.playlist_id }}" onclick="unsubscribe(this.id)" title="Unsubscribe from {{ playlist.source.playlist_name }}">Unsubscribe</button>
|
|
||||||
{% else %}
|
|
||||||
<button type="button" id="{{ playlist.source.playlist_id }}" onclick="subscribe(this.id)" title="Subscribe to {{ playlist.source.playlist_name }}">Subscribe</button>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
>
|
||||||
|
<label for="" class="onbtn">On</label>
|
||||||
|
<label for="" class="ofbtn">Off</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
<div class="view-icons">
|
||||||
{% else %}
|
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="playlist" data-value="grid" alt="grid view">
|
||||||
<h2>No playlists found...</h2>
|
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="playlist" data-value="list" alt="list view">
|
||||||
{% endif %}
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="playlist-list {{ view_style }}">
|
||||||
|
{% if playlists %}
|
||||||
|
{% for playlist in playlists %}
|
||||||
|
<div class="playlist-item {{ view_style }}">
|
||||||
|
<div class="playlist-thumbnail">
|
||||||
|
<a href="{% url 'playlist_id' playlist.source.playlist_id %}">
|
||||||
|
<img src="/cache/playlists/{{ playlist.source.playlist_id }}.jpg" alt="{{ playlist.source.playlist_id }}-thumbnail">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="playlist-desc {{ view_style }}">
|
||||||
|
<a href="{% url 'channel_id' playlist.source.playlist_channel_id %}"><h3>{{ playlist.source.playlist_channel }}</h3></a>
|
||||||
|
<a href="{% url 'playlist_id' playlist.source.playlist_id %}"><h2>{{ playlist.source.playlist_name }}</h2></a>
|
||||||
|
<p>Last refreshed: {{ playlist.source.playlist_last_refresh }}</p>
|
||||||
|
<p>Subscribed:
|
||||||
|
{% if playlist.source.playlist_subscribed %}
|
||||||
|
<button type="button" id="{{ playlist.source.playlist_id }}" onclick="unsubscribe(this.id)" title="Unsubscribe from {{ playlist.source.playlist_name }}">Unsubscribe</button>
|
||||||
|
{% else %}
|
||||||
|
<button type="button" id="{{ playlist.source.playlist_id }}" onclick="subscribe(this.id)" title="Subscribe to {{ playlist.source.playlist_name }}">Subscribe</button>
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<h2>No playlists found...</h2>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript" src="{% static 'progress.js' %}"></script>
|
<script type="text/javascript" src="{% static 'progress.js' %}"></script>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
@ -1,188 +1,190 @@
|
|||||||
{% extends "home/base.html" %}
|
{% extends "home/base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="title-bar">
|
<div class="boxed-content">
|
||||||
<h1>User Configurations</h1>
|
<div class="title-bar">
|
||||||
</div>
|
<h1>User Configurations</h1>
|
||||||
<form action="/settings/" method="POST" name="user-update">
|
</div>
|
||||||
{% csrf_token %}
|
<form action="/settings/" method="POST" name="user-update">
|
||||||
<div class="settings-group">
|
{% csrf_token %}
|
||||||
<h2>Color scheme</h2>
|
<div class="settings-group">
|
||||||
<div class="settings-item">
|
<h2>Color scheme</h2>
|
||||||
<p>Current color scheme: <span class="settings-current">{{ config.application.colors }}</span></p>
|
<div class="settings-item">
|
||||||
<i>Select your preferred color scheme between dark and light mode.</i><br>
|
<p>Current color scheme: <span class="settings-current">{{ config.application.colors }}</span></p>
|
||||||
{{ user_form.colors }}
|
<i>Select your preferred color scheme between dark and light mode.</i><br>
|
||||||
</div>
|
{{ user_form.colors }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-group">
|
||||||
|
<h2>Archive View</h2>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current page size: <span class="settings-current">{{ config.archive.page_size }}</span></p>
|
||||||
|
<i>Result of videos showing in archive page</i><br>
|
||||||
|
{{ user_form.page_size }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" name="user-settings">Update User Configurations</button>
|
||||||
|
</form>
|
||||||
|
<div class="title-bar">
|
||||||
|
<h1>Application Configurations</h1>
|
||||||
|
</div>
|
||||||
|
<form action="/settings/" method="POST" name="application-update">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="settings-group">
|
||||||
|
<h2 id="subscriptions">Subscriptions</h2>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current page size: <span class="settings-current">{{ config.subscriptions.channel_size }}</span></p>
|
||||||
|
<i>Recent videos for channels and playlist to check when running <b>Rescan subscriptions</b>, max recommended 50.</i><br>
|
||||||
|
{{ app_form.subscriptions_channel_size }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Auto scan subscribed channels:</p>
|
||||||
|
<i>Coming soon</i>
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Auto download pending:</p>
|
||||||
|
<i>Coming soon</i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-group">
|
||||||
|
<h2 id="downloads">Downloads</h2>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current download limit: <span class="settings-current">{{ config.downloads.limit_count }}</span></p>
|
||||||
|
<i>Limit the number of videos getting downloaded on every run. 0 (zero) to deactivate.</i><br>
|
||||||
|
{{ app_form.downloads_limit_count }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current download speed limit in KB/s: <span class="settings-current">{{ config.downloads.limit_speed }}</span></p>
|
||||||
|
<i>Limit download speed. 0 (zero) to deactivate, e.g. 1000 (1MB/s). Speeds are in KB/s.</i><br>
|
||||||
|
{{ app_form.downloads_limit_speed }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current throttled rate limit in KB/s: <span class="settings-current">{{ config.downloads.throttledratelimit }}</span></p>
|
||||||
|
<i>Download will restart if speeds drop below specified amount. 0 (zero) to deactivate, e.g. 100. Speeds are in KB/s.</i><br>
|
||||||
|
{{ app_form.downloads_throttledratelimit }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current scraping sleep interval: <span class="settings-current">{{ config.downloads.sleep_interval }}</p>
|
||||||
|
<i>Seconds to sleep between calls to YouTube. Might be necessary to avoid throttling. Recommended 3.</i><br>
|
||||||
|
{{ app_form.downloads_sleep_interval }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>External downloader:</p>
|
||||||
|
<i>Coming soon</i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-group">
|
||||||
|
<h2 id="format">Download Format</h2>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Limit video and audio quality format for yt-dlp.<br>
|
||||||
|
Currently: <span class="settings-current">{{ config.downloads.format }}</span>
|
||||||
|
</p>
|
||||||
|
<p>Example configurations:</p>
|
||||||
|
<ul>
|
||||||
|
<li><span class="settings-current">bestvideo[height<=720]+bestaudio/best[height<=720]</span>: best audio and max video height of 720p.</li>
|
||||||
|
<li><span class="settings-current">bestvideo[height<=1080]+bestaudio/best[height<=1080]</span>: best audio and max video height of 1080p.</li>
|
||||||
|
<li><span class="settings-current">bestvideo[height<=1080][VCODEC=avc1]+bestaudio[ACODEC=mp4a]/mp4</span>: Max 1080p video height with iOS compatible video and audio codecs.</li>
|
||||||
|
<li><span class="settings-current">0</span>: deactivate and download the best quality possible as decided by yt-dlp.</li>
|
||||||
|
</ul>
|
||||||
|
<i>Make sure your custom format gets merged into a single file. Check out the <a href="https://github.com/yt-dlp/yt-dlp#format-selection" target="_blank">documentation</a> for valid configurations.</i><br>
|
||||||
|
{{ app_form.downloads_format }}
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current metadata embed setting: <span class="settings-current">{{ config.downloads.add_metadata }}</span></p>
|
||||||
|
<i>Metadata is not embedded into the downloaded files by default.</i><br>
|
||||||
|
{{ app_form.downloads_add_metadata }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<p>Current thumbnail embed setting: <span class="settings-current">{{ config.downloads.add_thumbnail }}</span></p>
|
||||||
|
<i>Embed thumbnail into the mediafile.</i><br>
|
||||||
|
{{ app_form.downloads_add_thumbnail }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" name="application-settings">Update Application Configurations</button>
|
||||||
|
</form>
|
||||||
|
<div class="title-bar">
|
||||||
|
<h1>Scheduler setup</h1>
|
||||||
|
</div>
|
||||||
|
<form action="/settings/" method="POST" name="scheduler-update">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="settings-group">
|
||||||
|
<div class="settings-item">
|
||||||
|
<h2>Rescan Subscriptions</h2>
|
||||||
|
<p>Periodically rescan your subscriptions.</p>
|
||||||
|
{{ scheduler_form.update_subscribed }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<h2>Start download</h2>
|
||||||
|
<p>Periodically download videos.</p>
|
||||||
|
{{ scheduler_form.download_pending }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<h2>Refresh Metadata</h2>
|
||||||
|
<p>Periodically refresh metadata from YouTube.</p>
|
||||||
|
{{ scheduler_form.check_reindex }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<h2>Thumbnail check</h2>
|
||||||
|
<p>Periodically check and cleanup thumbnails.</p>
|
||||||
|
{{ scheduler_form.thumbnail_check }}
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<h2>Index backup</h2>
|
||||||
|
<p>Periodically backup metadata.</p>
|
||||||
|
{{ scheduler_form.run_backup }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" name="scheduler-settings">Update Scheduler Settings</button>
|
||||||
|
</form>
|
||||||
|
<div class="title-bar">
|
||||||
|
<h1>Actions</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-group">
|
<div class="settings-group">
|
||||||
<h2>Archive View</h2>
|
<h2>Manual media files import.</h2>
|
||||||
<div class="settings-item">
|
<p>Add files to the <span class="settings-current">cache/import</span> folder. Make sure to follow the instructions in the Github <a href="https://github.com/bbilly1/tubearchivist/wiki/Settings" target="_blank">Wiki</a>.</p>
|
||||||
<p>Current page size: <span class="settings-current">{{ config.archive.page_size }}</span></p>
|
<div id="manual-import">
|
||||||
<i>Result of videos showing in archive page</i><br>
|
<button onclick="manualImport()">Start import</button>
|
||||||
{{ user_form.page_size }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" name="user-settings">Update User Configurations</button>
|
|
||||||
</form>
|
|
||||||
<div class="title-bar">
|
|
||||||
<h1>Application Configurations</h1>
|
|
||||||
</div>
|
|
||||||
<form action="/settings/" method="POST" name="application-update">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="settings-group">
|
<div class="settings-group">
|
||||||
<h2 id="subscriptions">Subscriptions</h2>
|
<h2>Embed thumbnails into media file.</h2>
|
||||||
<div class="settings-item">
|
<p>Set extracted youtube thumbnail as cover art of the media file.</p>
|
||||||
<p>Current page size: <span class="settings-current">{{ config.subscriptions.channel_size }}</span></p>
|
<div id="re-embed">
|
||||||
<i>Recent videos for channels and playlist to check when running <b>Rescan subscriptions</b>, max recommended 50.</i><br>
|
<button onclick="reEmbed()">Start process</button>
|
||||||
{{ app_form.subscriptions_channel_size }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Auto scan subscribed channels:</p>
|
|
||||||
<i>Coming soon</i>
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Auto download pending:</p>
|
|
||||||
<i>Coming soon</i>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-group">
|
<div class="settings-group">
|
||||||
<h2 id="downloads">Downloads</h2>
|
<h2>Backup database</h2>
|
||||||
<div class="settings-item">
|
<p>Export your database to a zip file stored at <span class="settings-current">cache/backup</span>.</p>
|
||||||
<p>Current download limit: <span class="settings-current">{{ config.downloads.limit_count }}</span></p>
|
<div id="db-backup">
|
||||||
<i>Limit the number of videos getting downloaded on every run. 0 (zero) to deactivate.</i><br>
|
<button onclick="dbBackup()">Start backup</button>
|
||||||
{{ app_form.downloads_limit_count }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Current download speed limit in KB/s: <span class="settings-current">{{ config.downloads.limit_speed }}</span></p>
|
|
||||||
<i>Limit download speed. 0 (zero) to deactivate, e.g. 1000 (1MB/s). Speeds are in KB/s.</i><br>
|
|
||||||
{{ app_form.downloads_limit_speed }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Current throttled rate limit in KB/s: <span class="settings-current">{{ config.downloads.throttledratelimit }}</span></p>
|
|
||||||
<i>Download will restart if speeds drop below specified amount. 0 (zero) to deactivate, e.g. 100. Speeds are in KB/s.</i><br>
|
|
||||||
{{ app_form.downloads_throttledratelimit }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Current scraping sleep interval: <span class="settings-current">{{ config.downloads.sleep_interval }}</p>
|
|
||||||
<i>Seconds to sleep between calls to YouTube. Might be necessary to avoid throttling. Recommended 3.</i><br>
|
|
||||||
{{ app_form.downloads_sleep_interval }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>External downloader:</p>
|
|
||||||
<i>Coming soon</i>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-group">
|
<div class="settings-group">
|
||||||
<h2 id="format">Download Format</h2>
|
<h2>Restore from backup</h2>
|
||||||
<div class="settings-item">
|
<p><span class="danger-zone">Danger Zone</span>: This will replace your existing index with the backup.</p>
|
||||||
<p>Limit video and audio quality format for yt-dlp.<br>
|
<p>Add the backup zip file to the <span class="settings-current">cache/backup</span> folder.</p>
|
||||||
Currently: <span class="settings-current">{{ config.downloads.format }}</span>
|
<div id="db-restore">
|
||||||
</p>
|
<button onclick="dbRestore()">Restore backup</button>
|
||||||
<p>Example configurations:</p>
|
|
||||||
<ul>
|
|
||||||
<li><span class="settings-current">bestvideo[height<=720]+bestaudio/best[height<=720]</span>: best audio and max video height of 720p.</li>
|
|
||||||
<li><span class="settings-current">bestvideo[height<=1080]+bestaudio/best[height<=1080]</span>: best audio and max video height of 1080p.</li>
|
|
||||||
<li><span class="settings-current">bestvideo[height<=1080][VCODEC=avc1]+bestaudio[ACODEC=mp4a]/mp4</span>: Max 1080p video height with iOS compatible video and audio codecs.</li>
|
|
||||||
<li><span class="settings-current">0</span>: deactivate and download the best quality possible as decided by yt-dlp.</li>
|
|
||||||
</ul>
|
|
||||||
<i>Make sure your custom format gets merged into a single file. Check out the <a href="https://github.com/yt-dlp/yt-dlp#format-selection" target="_blank">documentation</a> for valid configurations.</i><br>
|
|
||||||
{{ app_form.downloads_format }}
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Current metadata embed setting: <span class="settings-current">{{ config.downloads.add_metadata }}</span></p>
|
|
||||||
<i>Metadata is not embedded into the downloaded files by default.</i><br>
|
|
||||||
{{ app_form.downloads_add_metadata }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<p>Current thumbnail embed setting: <span class="settings-current">{{ config.downloads.add_thumbnail }}</span></p>
|
|
||||||
<i>Embed thumbnail into the mediafile.</i><br>
|
|
||||||
{{ app_form.downloads_add_thumbnail }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" name="application-settings">Update Application Configurations</button>
|
|
||||||
</form>
|
|
||||||
<div class="title-bar">
|
|
||||||
<h1>Scheduler setup</h1>
|
|
||||||
</div>
|
|
||||||
<form action="/settings/" method="POST" name="scheduler-update">
|
|
||||||
{% csrf_token %}
|
|
||||||
<div class="settings-group">
|
<div class="settings-group">
|
||||||
<div class="settings-item">
|
<h2>Rescan filesystem</h2>
|
||||||
<h2>Rescan Subscriptions</h2>
|
<p><span class="danger-zone">Danger Zone</span>: This will delete the metadata of deleted videos from the filesystem.</p>
|
||||||
<p>Periodically rescan your subscriptions.</p>
|
<p>Rescan your media folder looking for missing videos and clean up index. More infos on the Github <a href="https://github.com/bbilly1/tubearchivist/wiki/Settings" target="_blank">Wiki</a>.</p>
|
||||||
{{ scheduler_form.update_subscribed }}
|
<div id="fs-rescan">
|
||||||
</div>
|
<button onclick="fsRescan()">Rescan filesystem</button>
|
||||||
<div class="settings-item">
|
|
||||||
<h2>Start download</h2>
|
|
||||||
<p>Periodically download videos.</p>
|
|
||||||
{{ scheduler_form.download_pending }}
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<h2>Refresh Metadata</h2>
|
|
||||||
<p>Periodically refresh metadata from YouTube.</p>
|
|
||||||
{{ scheduler_form.check_reindex }}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-item">
|
</div>
|
||||||
<h2>Thumbnail check</h2>
|
{% if request.user.is_superuser %}
|
||||||
<p>Periodically check and cleanup thumbnails.</p>
|
<div class="title-bar">
|
||||||
{{ scheduler_form.thumbnail_check }}
|
<h1>Users</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-item">
|
<div class="settings-group">
|
||||||
<h2>Index backup</h2>
|
<h2>User Management</h2>
|
||||||
<p>Periodically backup metadata.</p>
|
<p>Access the admin interface for basic user management functionality like adding and deleting users, changing passwords and more.</p>
|
||||||
{{ scheduler_form.run_backup }}
|
<a href="/admin/"><button>Admin Interface</button></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endif %}
|
||||||
<button type="submit" name="scheduler-settings">Update Scheduler Settings</button>
|
|
||||||
</form>
|
|
||||||
<div class="title-bar">
|
|
||||||
<h1>Actions</h1>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="settings-group">
|
{% endblock content %}
|
||||||
<h2>Manual media files import.</h2>
|
|
||||||
<p>Add files to the <span class="settings-current">cache/import</span> folder. Make sure to follow the instructions in the Github <a href="https://github.com/bbilly1/tubearchivist/wiki/Settings" target="_blank">Wiki</a>.</p>
|
|
||||||
<div id="manual-import">
|
|
||||||
<button onclick="manualImport()">Start import</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="settings-group">
|
|
||||||
<h2>Embed thumbnails into media file.</h2>
|
|
||||||
<p>Set extracted youtube thumbnail as cover art of the media file.</p>
|
|
||||||
<div id="re-embed">
|
|
||||||
<button onclick="reEmbed()">Start process</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="settings-group">
|
|
||||||
<h2>Backup database</h2>
|
|
||||||
<p>Export your database to a zip file stored at <span class="settings-current">cache/backup</span>.</p>
|
|
||||||
<div id="db-backup">
|
|
||||||
<button onclick="dbBackup()">Start backup</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="settings-group">
|
|
||||||
<h2>Restore from backup</h2>
|
|
||||||
<p><span class="danger-zone">Danger Zone</span>: This will replace your existing index with the backup.</p>
|
|
||||||
<p>Add the backup zip file to the <span class="settings-current">cache/backup</span> folder.</p>
|
|
||||||
<div id="db-restore">
|
|
||||||
<button onclick="dbRestore()">Restore backup</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="settings-group">
|
|
||||||
<h2>Rescan filesystem</h2>
|
|
||||||
<p><span class="danger-zone">Danger Zone</span>: This will delete the metadata of deleted videos from the filesystem.</p>
|
|
||||||
<p>Rescan your media folder looking for missing videos and clean up index. More infos on the Github <a href="https://github.com/bbilly1/tubearchivist/wiki/Settings" target="_blank">Wiki</a>.</p>
|
|
||||||
<div id="fs-rescan">
|
|
||||||
<button onclick="fsRescan()">Rescan filesystem</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% if request.user.is_superuser %}
|
|
||||||
<div class="title-bar">
|
|
||||||
<h1>Users</h1>
|
|
||||||
</div>
|
|
||||||
<div class="settings-group">
|
|
||||||
<h2>User Management</h2>
|
|
||||||
<p>Access the admin interface for basic user management functionality like adding and deleting users, changing passwords and more.</p>
|
|
||||||
<a href="/admin/"><button>Admin Interface</button></a>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock content %}
|
|
Loading…
Reference in New Issue