style tweaks, update source page
This commit is contained in:
parent
c353e5c849
commit
cd8048b477
|
@ -4,7 +4,7 @@ $colour-near-black: #011627;
|
||||||
$colour-near-white: #fdfffc;
|
$colour-near-white: #fdfffc;
|
||||||
$colour-light-blue: #2e8ac4;
|
$colour-light-blue: #2e8ac4;
|
||||||
$colour-red: #e71d36;
|
$colour-red: #e71d36;
|
||||||
$colour-orange: #f69e12;
|
$colour-orange: #ef9912;
|
||||||
|
|
||||||
$background-colour: $colour-near-white;
|
$background-colour: $colour-near-white;
|
||||||
$text-colour: $colour-near-black;
|
$text-colour: $colour-near-black;
|
||||||
|
@ -52,3 +52,6 @@ $pagination-border-hover-colour: $colour-light-blue;
|
||||||
$pagination-current-background-colour: $colour-orange;
|
$pagination-current-background-colour: $colour-orange;
|
||||||
$pagination-current-text-colour: $colour-near-white;
|
$pagination-current-text-colour: $colour-near-white;
|
||||||
$pagination-current-border-colour: $colour-orange;
|
$pagination-current-border-colour: $colour-orange;
|
||||||
|
|
||||||
|
$infobox-background-colour: $colour-near-white;
|
||||||
|
$infobox-text-colour: $colour-near-black;
|
||||||
|
|
|
@ -14,6 +14,10 @@ strong {
|
||||||
margin-bottom: 20px !important;
|
margin-bottom: 20px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.padding-top {
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.errors {
|
.errors {
|
||||||
background-color: $box-error-background-colour;
|
background-color: $box-error-background-colour;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
|
|
@ -63,7 +63,7 @@ main {
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: $main-link-colour;
|
color: $main-link-colour;
|
||||||
text-decoration: underline;
|
text-decoration: none;
|
||||||
&:hover {
|
&:hover {
|
||||||
color: $main-link-hover-colour;
|
color: $main-link-hover-colour;
|
||||||
}
|
}
|
||||||
|
@ -131,6 +131,11 @@ main {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.infobox {
|
||||||
|
background-color: $infobox-background-colour;
|
||||||
|
color: $infobox-text-colour;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
{% if message %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col s12">
|
||||||
|
<div class="card infobox">
|
||||||
|
<div class="card-content">
|
||||||
|
<i class="fas fa-info-circle"></i> {{ message }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
|
@ -1,7 +1,11 @@
|
||||||
{% if paginator.num_pages > 1 %}
|
{% if paginator.num_pages > 1 %}
|
||||||
<div class="pagination">
|
<div class="row">
|
||||||
{% for i in paginator.page_range %}
|
<div class="col s12">
|
||||||
<a class="pagenum{% if i == page_obj.number %} currentpage{% endif %}" href="?page={{ i }}">{{ i }}</a>
|
<div class="pagination">
|
||||||
{% endfor %}
|
{% for i in paginator.page_range %}
|
||||||
|
<a class="pagenum{% if i == page_obj.number %} currentpage{% endif %}" href="?page={{ i }}">{{ i }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block headtitle %}Update source - {{ source.name }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row no-margin-bottom">
|
||||||
|
<div class="col s12">
|
||||||
|
<h1>Update source <strong>{{ source.name }}</strong></h1>
|
||||||
|
<p>
|
||||||
|
You can use this form to update your source. A source is what's polled on regular
|
||||||
|
basis to find new media to download, such as a channel or playlist. Any changes
|
||||||
|
to a source will only apply to new media and will not update media previously
|
||||||
|
downloaded.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<form method="post" action="{% url 'sync:update-source' pk=source.pk %}" class="col s12 simpleform">
|
||||||
|
{% csrf_token %}
|
||||||
|
{% include 'simpleform.html' with form=form %}
|
||||||
|
<div class="row no-margin-bottom padding-top">
|
||||||
|
<div class="col s12">
|
||||||
|
<button class="btn" type="submit" name="action">Update source <i class="fas fa-pen-square"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s12">
|
<div class="col s12">
|
||||||
<h1 class="truncate">Source <strong>{{ source.name }}</strong></h1>
|
<h1 class="truncate">Source <strong>{{ source.name }}</strong></h1>
|
||||||
<p class="truncate"><strong><a href="{{ source.url }}" target="_blank">{{ source.url }}</a></strong></p>
|
<p class="truncate"><strong><a href="{{ source.url }}" target="_blank"><i class="fas fa-link"></i> {{ source.url }}</a></strong></p>
|
||||||
<p class="truncate">Saving to: <strong>{{ source.directory_path }}</strong></p>
|
<p class="truncate">Saving to: <strong>{{ source.directory_path }}</strong></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -75,12 +75,12 @@
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row no-margin-bottom">
|
<div class="row no-margin-bottom padding-top">
|
||||||
<div class="col s12 l6 margin-bottom">
|
<div class="col s12 l6 margin-bottom">
|
||||||
<a href="" class="btn"><i class="fas fa-pen-square"></i> Edit source</a>
|
<a href="{% url 'sync:update-source' pk=source.pk %}" class="btn">Edit source <i class="fas fa-pen-square"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 l6 margin-bottom">
|
<div class="col s12 l6 margin-bottom">
|
||||||
<a href="" class="btn delete-button"><i class="fas fa-trash-alt"></i> Delete source</a>
|
<a href="" class="btn delete-button">Delete source <i class="fas fa-trash-alt"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -3,12 +3,13 @@
|
||||||
{% block headtitle %}Sources{% endblock %}
|
{% block headtitle %}Sources{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% include 'infobox.html' with message=message %}
|
||||||
<div class="row no-margin-bottom">
|
<div class="row no-margin-bottom">
|
||||||
<div class="col s12 l6 margin-bottom">
|
<div class="col s12 l6 margin-bottom">
|
||||||
<a href="{% url 'sync:validate-source' source_type='youtube-channel' %}" class="btn"><i class="fab fa-youtube"></i> Add a YouTube channel</a>
|
<a href="{% url 'sync:validate-source' source_type='youtube-channel' %}" class="btn">Add a YouTube channel <i class="fab fa-youtube"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 l6 margin-bottom">
|
<div class="col s12 l6 margin-bottom">
|
||||||
<a href="{% url 'sync:validate-source' source_type='youtube-playlist' %}" class="btn"><i class="fab fa-youtube"></i> Add a YouTube playlist</a>
|
<a href="{% url 'sync:validate-source' source_type='youtube-playlist' %}" class="btn">Add a YouTube playlist <i class="fab fa-youtube"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row no-margin-bottom">
|
<div class="row no-margin-bottom">
|
||||||
|
@ -27,11 +28,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if sources %}
|
{% include 'pagination.html' with pagination=sources.paginator %}
|
||||||
<div class="row">
|
|
||||||
<div class="col s12">
|
|
||||||
{% include 'pagination.html' with pagination=sources.paginator %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from .views import (DashboardView, SourcesView, ValidateSourceView, AddSourceView,
|
from .views import (DashboardView, SourcesView, ValidateSourceView, AddSourceView,
|
||||||
SourceView, MediaView, TasksView, LogsView)
|
SourceView, UpdateSourceView, MediaView, TasksView, LogsView)
|
||||||
|
|
||||||
|
|
||||||
app_name = 'sync'
|
app_name = 'sync'
|
||||||
|
@ -8,19 +8,23 @@ app_name = 'sync'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
||||||
|
# Dashboard URLs
|
||||||
|
|
||||||
path('',
|
path('',
|
||||||
DashboardView.as_view(),
|
DashboardView.as_view(),
|
||||||
name='dashboard'),
|
name='dashboard'),
|
||||||
|
|
||||||
|
# Source URLs
|
||||||
|
|
||||||
path('sources',
|
path('sources',
|
||||||
SourcesView.as_view(),
|
SourcesView.as_view(),
|
||||||
name='sources'),
|
name='sources'),
|
||||||
|
|
||||||
path('source/validate/<slug:source_type>',
|
path('source-validate/<slug:source_type>',
|
||||||
ValidateSourceView.as_view(),
|
ValidateSourceView.as_view(),
|
||||||
name='validate-source'),
|
name='validate-source'),
|
||||||
|
|
||||||
path('source/add',
|
path('source-add',
|
||||||
AddSourceView.as_view(),
|
AddSourceView.as_view(),
|
||||||
name='add-source'),
|
name='add-source'),
|
||||||
|
|
||||||
|
@ -28,14 +32,24 @@ urlpatterns = [
|
||||||
SourceView.as_view(),
|
SourceView.as_view(),
|
||||||
name='source'),
|
name='source'),
|
||||||
|
|
||||||
|
path('source-update/<uuid:pk>',
|
||||||
|
UpdateSourceView.as_view(),
|
||||||
|
name='update-source'),
|
||||||
|
|
||||||
|
# Media URLs
|
||||||
|
|
||||||
path('media',
|
path('media',
|
||||||
MediaView.as_view(),
|
MediaView.as_view(),
|
||||||
name='media'),
|
name='media'),
|
||||||
|
|
||||||
|
# Task URLs
|
||||||
|
|
||||||
path('tasks',
|
path('tasks',
|
||||||
TasksView.as_view(),
|
TasksView.as_view(),
|
||||||
name='tasks'),
|
name='tasks'),
|
||||||
|
|
||||||
|
# Log URLs
|
||||||
|
|
||||||
path('logs',
|
path('logs',
|
||||||
LogsView.as_view(),
|
LogsView.as_view(),
|
||||||
name='logs'),
|
name='logs'),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.views.generic import TemplateView, ListView, DetailView
|
from django.views.generic import TemplateView, ListView, DetailView
|
||||||
from django.views.generic.edit import FormView, CreateView
|
from django.views.generic.edit import FormView, CreateView, UpdateView
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.forms import ValidationError
|
from django.forms import ValidationError
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
|
@ -32,7 +32,7 @@ class SourcesView(ListView):
|
||||||
context_object_name = 'sources'
|
context_object_name = 'sources'
|
||||||
paginate_by = settings.SOURCES_PER_PAGE
|
paginate_by = settings.SOURCES_PER_PAGE
|
||||||
messages = {
|
messages = {
|
||||||
'source-added': _('Your new source has been added'),
|
'source-created': _('Your new source has been added'),
|
||||||
'source-deleted': _('Your selected source has been deleted.'),
|
'source-deleted': _('Your selected source has been deleted.'),
|
||||||
'source-updated': _('Your selected source has been updated.'),
|
'source-updated': _('Your selected source has been updated.'),
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ class ValidateSourceView(FormView):
|
||||||
Source.SOURCE_TYPE_YOUTUBE_PLAYLIST: {
|
Source.SOURCE_TYPE_YOUTUBE_PLAYLIST: {
|
||||||
'scheme': 'https',
|
'scheme': 'https',
|
||||||
'domain': 'www.youtube.com',
|
'domain': 'www.youtube.com',
|
||||||
'path_regex': '^\/playlist$',
|
'path_regex': '^\/(playlist|watch)$',
|
||||||
'qs_args': ['list'],
|
'qs_args': ['list'],
|
||||||
'extract_key': ('qs_args', 'list'),
|
'extract_key': ('qs_args', 'list'),
|
||||||
'example': 'https://www.youtube.com/playlist?list=PLAYLISTID'
|
'example': 'https://www.youtube.com/playlist?list=PLAYLISTID'
|
||||||
|
@ -233,6 +233,19 @@ class SourceView(DetailView):
|
||||||
model = Source
|
model = Source
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateSourceView(UpdateView):
|
||||||
|
|
||||||
|
template_name = 'sync/source-update.html'
|
||||||
|
model = Source
|
||||||
|
fields = ('source_type', 'key', 'name', 'directory', 'delete_old_media',
|
||||||
|
'days_to_keep', 'source_profile', 'prefer_60fps', 'prefer_hdr',
|
||||||
|
'output_format', 'fallback')
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
url = reverse_lazy('sync:sources')
|
||||||
|
return append_uri_params(url, {'message': 'source-updated'})
|
||||||
|
|
||||||
|
|
||||||
class MediaView(TemplateView):
|
class MediaView(TemplateView):
|
||||||
'''
|
'''
|
||||||
A bare list of media added with their states.
|
A bare list of media added with their states.
|
||||||
|
|
Loading…
Reference in New Issue