mirror of
https://github.com/chibicitiberiu/ytsm.git
synced 2024-02-24 05:43:31 +00:00
Work on provider manager and UI
This commit is contained in:
59
app/YtManagerApp/views/settings/provider_config.py
Normal file
59
app/YtManagerApp/views/settings/provider_config.py
Normal file
@ -0,0 +1,59 @@
|
||||
from django import forms
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.views.generic import FormView
|
||||
|
||||
from YtManagerApp.providers.video_provider import VideoProvider, ProviderValidationError
|
||||
from YtManagerApp.services import Services
|
||||
from YtManagerApp.views.controls.modal import ModalMixin
|
||||
|
||||
|
||||
class ProviderConfigForm(forms.Form):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
self.provider_id = kwargs.pop('provider_id', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
if self.provider_id is not None:
|
||||
provider: VideoProvider = Services.videoProviderManager().get(self.provider_id)
|
||||
for key, field in provider.settings.items():
|
||||
self.fields[key] = field
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
provider: VideoProvider = Services.videoProviderManager().get(self.provider_id)
|
||||
|
||||
try:
|
||||
provider.validate_configuration(cleaned_data)
|
||||
except ProviderValidationError as ex:
|
||||
raise ValidationError(ex.field_messages)
|
||||
|
||||
|
||||
class ProviderConfigView(LoginRequiredMixin, ModalMixin, FormView):
|
||||
template_name = 'YtManagerApp/controls/provider_config_modal.html'
|
||||
form_class = ProviderConfigForm
|
||||
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs['provider_id'] = self.kwargs['provider_id']
|
||||
return kwargs
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super().get_context_data(**kwargs)
|
||||
data['provider'] = Services.videoProviderManager().get(self.kwargs['provider_id'])
|
||||
return data
|
||||
|
||||
def get_initial(self):
|
||||
initial = super().get_initial()
|
||||
cfg = Services.videoProviderManager().get_provider_config(self.kwargs['provider_id'])
|
||||
if cfg is not None:
|
||||
initial.update(cfg)
|
||||
|
||||
def form_valid(self, form):
|
||||
try:
|
||||
Services.videoProviderManager().configure_provider(self.kwargs['provider_id'], form.cleaned_data)
|
||||
except Exception as ex:
|
||||
super().modal_response(form, success=False, error_msg='Configuration of provider failed! ' + str(ex))
|
||||
|
||||
return super().form_valid(form)
|
@ -1,11 +1,12 @@
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from YtManagerApp.providers.video_provider import VideoProviderState
|
||||
from YtManagerApp.services import Services
|
||||
from collections import namedtuple
|
||||
|
||||
VideoProviderInfoViewModel = namedtuple('VideoProviderInfoViewModel',
|
||||
['id', 'name', 'is_configured', 'image_src'])
|
||||
['id', 'name', 'is_configured', 'has_error', 'image_src'])
|
||||
|
||||
|
||||
class ProvidersView(LoginRequiredMixin, TemplateView):
|
||||
@ -16,16 +17,23 @@ class ProvidersView(LoginRequiredMixin, TemplateView):
|
||||
|
||||
providers = []
|
||||
have_unconfigured = False
|
||||
have_configured = False
|
||||
|
||||
for provider in Services.videoProviderManager().get_available_providers():
|
||||
providers.append(VideoProviderInfoViewModel(
|
||||
id=provider.id,
|
||||
name=provider.name,
|
||||
is_configured=provider.is_configured,
|
||||
is_configured=provider.state != VideoProviderState.NOT_CONFIGURED,
|
||||
has_error=provider.state == VideoProviderState.ERROR,
|
||||
image_src=f"YtManagerApp/img/video_providers/{provider.id}.png"
|
||||
))
|
||||
if not provider.is_configured:
|
||||
|
||||
if provider.state != VideoProviderState.NOT_CONFIGURED:
|
||||
have_configured = True
|
||||
if provider.state == VideoProviderState.NOT_CONFIGURED:
|
||||
have_unconfigured = True
|
||||
|
||||
context['providers'] = sorted(providers, key=lambda x: x.name)
|
||||
context['have_unconfigured'] = have_unconfigured
|
||||
context['have_configured'] = have_configured
|
||||
return context
|
||||
|
Reference in New Issue
Block a user