minidlna: Add media directory selection form

The form provides an option to select default directory, user specified
directory or samba shares if enabled.

The form also checks that the directory exists and is readable by the
minidlna user.

Tested that changing media directory to a samba share location works.

Closes #2084.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
Veiko Aasa 2024-04-18 12:52:12 +03:00 committed by Sunil Mohan Adapa
parent 430f9c6737
commit 552fabed15
No known key found for this signature in database
GPG Key ID: 43EA1CFF0AA7C5F2
3 changed files with 21 additions and 23 deletions

View File

@ -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."""

View File

@ -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)

View File

@ -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)