transmission: New directory selection form

- use new directory selection form (#1703)
- add transmission-daemon to the freedombox-share group
- pass only needed data to the template
- do not change or validate download directory if transmission
  module is going to be disabled
- yapf3 validation changes

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Veiko Aasa 2019-12-05 17:29:49 +03:00 committed by James Valleroy
parent ea48f9a74b
commit 6bf6740b23
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
3 changed files with 31 additions and 28 deletions

View File

@ -28,11 +28,11 @@ from plinth import frontpage, menu
from plinth.daemon import Daemon from plinth.daemon import Daemon
from plinth.modules.apache.components import Webserver from plinth.modules.apache.components import Webserver
from plinth.modules.firewall.components import Firewall from plinth.modules.firewall.components import Firewall
from plinth.modules.users import register_group from plinth.modules.users import register_group, add_user_to_share_group
from .manifest import backup, clients # noqa, pylint: disable=unused-import from .manifest import backup, clients # noqa, pylint: disable=unused-import
version = 2 version = 3
managed_services = ['transmission-daemon'] managed_services = ['transmission-daemon']
@ -74,11 +74,10 @@ class TransmissionApp(app_module.App):
parent_url_name='apps') parent_url_name='apps')
self.add(menu_item) self.add(menu_item)
shortcut = frontpage.Shortcut('shortcut-transmission', name, shortcut = frontpage.Shortcut(
short_description=short_description, 'shortcut-transmission', name, short_description=short_description,
icon=icon_filename, url='/transmission', icon=icon_filename, url='/transmission', clients=clients,
clients=clients, login_required=True, login_required=True, allowed_groups=[group[0]])
allowed_groups=[group[0]])
self.add(shortcut) self.add(shortcut)
firewall = Firewall('firewall-transmission', name, firewall = Firewall('firewall-transmission', name,
@ -114,7 +113,7 @@ def setup(helper, old_version=None):
helper.call('post', actions.superuser_run, 'transmission', helper.call('post', actions.superuser_run, 'transmission',
['merge-configuration'], ['merge-configuration'],
input=json.dumps(new_configuration).encode()) input=json.dumps(new_configuration).encode())
add_user_to_share_group(reserved_usernames[0], managed_services[0])
helper.call('post', app.enable) helper.call('post', app.enable)

View File

@ -18,16 +18,20 @@
FreedomBox app for configuring Transmission. FreedomBox app for configuring Transmission.
""" """
from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from plinth.forms import AppForm from plinth.modules.transmission import reserved_usernames
from plinth.modules.storage.forms import (DirectorySelectForm,
DirectoryValidator)
class TransmissionForm(AppForm): # pylint: disable=W0232 class TransmissionForm(DirectorySelectForm):
"""Transmission configuration form""" """Transmission configuration form"""
download_dir = forms.CharField(
label=_('Download directory'), def __init__(self, *args, **kw):
help_text=_('Directory where downloads are saved. If you change the ' validator = DirectoryValidator(
'default directory, ensure that the new directory exists ' username=reserved_usernames[0], check_writable=True)
'and is writable by "debian-transmission" user.')) super(TransmissionForm, self).__init__(
title=_('Download directory'),
default='/var/lib/transmission-daemon/downloads/',
validator=validator, *args, **kw)

View File

@ -20,11 +20,11 @@ FreedomBox app for configuring Transmission Server.
import json import json
import logging import logging
import os
import socket import socket
from django.contrib import messages from django.contrib import messages
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from plinth import actions, views from plinth import actions, views
from plinth.modules import transmission from plinth.modules import transmission
@ -50,10 +50,8 @@ class TransmissionAppView(views.AppView):
configuration = actions.superuser_run('transmission', configuration = actions.superuser_run('transmission',
['get-configuration']) ['get-configuration'])
configuration = json.loads(configuration) configuration = json.loads(configuration)
status.update({ status['storage_path'] = os.path.normpath(
key.translate(str.maketrans({'-': '_'})): value configuration['download-dir'])
for key, value in configuration.items()
})
status['hostname'] = socket.gethostname() status['hostname'] = socket.gethostname()
return status return status
@ -63,12 +61,14 @@ class TransmissionAppView(views.AppView):
old_status = form.initial old_status = form.initial
new_status = form.cleaned_data new_status = form.cleaned_data
if old_status['download_dir'] != new_status['download_dir']: if new_status['is_enabled'] or not old_status['is_enabled']:
if old_status['storage_path'] != new_status['storage_path']:
new_configuration = { new_configuration = {
'download-dir': new_status['download_dir'], 'download-dir': new_status['storage_path'],
} }
actions.superuser_run('transmission', ['merge-configuration'], actions.superuser_run(
'transmission', ['merge-configuration'],
input=json.dumps(new_configuration).encode()) input=json.dumps(new_configuration).encode())
messages.success(self.request, _('Configuration updated')) messages.success(self.request, _('Configuration updated'))