diff --git a/plinth/modules/minidlna/__init__.py b/plinth/modules/minidlna/__init__.py index edf97e245..11291ad4d 100644 --- a/plinth/modules/minidlna/__init__.py +++ b/plinth/modules/minidlna/__init__.py @@ -29,6 +29,8 @@ _description = [ 'such as PS3 and Xbox 360) or applications such as totem and Kodi.') ] +SYSTEM_USER = 'minidlna' + class MiniDLNAApp(app_module.App): """Freedombox app managing miniDlna.""" diff --git a/plinth/modules/minidlna/forms.py b/plinth/modules/minidlna/forms.py index 556c34e13..388cb19be 100644 --- a/plinth/modules/minidlna/forms.py +++ b/plinth/modules/minidlna/forms.py @@ -3,20 +3,21 @@ FreedomBox configuration form for MiniDLNA server. """ -from django import forms from django.utils.translation import gettext_lazy as _ +from plinth.modules.storage.forms import (DirectorySelectForm, + DirectoryValidator) -class MiniDLNAServerForm(forms.Form): +from . import SYSTEM_USER + + +class MiniDLNAServerForm(DirectorySelectForm): """MiniDLNA server configuration form.""" - media_dir = forms.CharField( - label=_('Media Files Directory'), - help_text=_('Directory that MiniDLNA Server will read for content. All' - ' sub-directories of this will be also scanned for media ' - 'files. ' - 'If you change the default ensure that the new directory ' - 'exists and that is readable from the "minidlna" user. ' - 'Any user media directories ("/home/username/") will ' - 'usually work.'), - required=False, - ) + + def __init__(self, *args, **kw): + validator = DirectoryValidator(username=SYSTEM_USER) + super().__init__( + title=_('Media Files Directory'), help_text=_( + 'Directory that MiniDLNA Server will read for content. All ' + 'sub-directories of this will be also scanned for media files.' + ), default='/var/lib/minidlna', validator=validator, *args, **kw) diff --git a/plinth/modules/minidlna/views.py b/plinth/modules/minidlna/views.py index 16f58fdfa..df2529fa9 100644 --- a/plinth/modules/minidlna/views.py +++ b/plinth/modules/minidlna/views.py @@ -1,8 +1,6 @@ # SPDX-License-Identifier: AGPL-3.0-or-later """Views for the minidlna module.""" -import os - from django.contrib import messages from django.utils.translation import gettext_lazy as _ @@ -21,7 +19,8 @@ class MiniDLNAAppView(AppView): def get_initial(self): """Return initial values of the form.""" initial = super().get_initial() - initial.update({'media_dir': privileged.get_media_dir()}) + initial.update({'storage_path': privileged.get_media_dir()}) + return initial def form_valid(self, form): @@ -29,12 +28,8 @@ class MiniDLNAAppView(AppView): old_config = form.initial new_config = form.cleaned_data - if old_config['media_dir'].strip() != new_config['media_dir']: - if os.path.isdir(new_config['media_dir']) is False: - messages.error(self.request, - _('Specified directory does not exist.')) - else: - privileged.set_media_dir(new_config['media_dir']) - messages.success(self.request, _('Updated media directory')) + if old_config['storage_path'] != new_config['storage_path']: + privileged.set_media_dir(new_config['storage_path']) + messages.success(self.request, _('Updated media directory')) return super().form_valid(form)