mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-06-03 10:50:20 +00:00
Refactor minetest server config
Only load augeas once to read the config.
This commit is contained in:
parent
7361f870b7
commit
533118c7f5
@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
|
||||
and exit. It can be followed by "essential" or "optional" to only
|
||||
list those modules.
|
||||
- Added JS license web labels for LibreJS.
|
||||
- Added basic configuration form for Minetest server.
|
||||
|
||||
### Changed
|
||||
- frontpage: Show app logos instead of generic icons.
|
||||
|
||||
@ -30,16 +30,6 @@ from plinth import action_utils
|
||||
CONFIG_FILE = '/etc/minetest/minetest.conf'
|
||||
AUG_PATH = '/files' + CONFIG_FILE + '/.anon'
|
||||
|
||||
def load_augeas():
|
||||
"""Initialize Augeas."""
|
||||
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
|
||||
augeas.Augeas.NO_MODL_AUTOLOAD)
|
||||
aug.set('/augeas/load/Php/lens', 'Php.lns')
|
||||
aug.set('/augeas/load/Php/incl[last() + 1]', CONFIG_FILE)
|
||||
aug.load()
|
||||
return aug
|
||||
|
||||
aug = load_augeas()
|
||||
|
||||
def parse_arguments():
|
||||
"""Return parsed command line arguments as dictionary"""
|
||||
@ -47,7 +37,8 @@ def parse_arguments():
|
||||
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
||||
|
||||
configure = subparsers.add_parser('configure', help='Configure Minetest')
|
||||
configure.add_argument('--max_players', help='Set maximum number of players')
|
||||
configure.add_argument('--max_players',
|
||||
help='Set maximum number of players')
|
||||
configure.add_argument('--creative_mode', choices=['true', 'false'],
|
||||
help='Set creative mode true/false')
|
||||
configure.add_argument('--enable_pvp', choices=['true', 'false'],
|
||||
@ -57,42 +48,57 @@ def parse_arguments():
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def subcommand_configure(arguments):
|
||||
"""Configure Minetest."""
|
||||
aug = load_augeas()
|
||||
|
||||
if arguments.max_players:
|
||||
set_max_players(arguments.max_players)
|
||||
set_max_players(aug, arguments.max_players)
|
||||
if arguments.creative_mode:
|
||||
set_creative_mode(arguments.creative_mode)
|
||||
set_creative_mode(aug, arguments.creative_mode)
|
||||
if arguments.enable_pvp:
|
||||
enable_pvp(arguments.enable_pvp)
|
||||
enable_pvp(aug, arguments.enable_pvp)
|
||||
if arguments.enable_damage:
|
||||
enable_damage(arguments.enable_damage)
|
||||
enable_damage(aug, arguments.enable_damage)
|
||||
|
||||
action_utils.service_restart('minetest-server')
|
||||
|
||||
def set_max_players(max_players):
|
||||
|
||||
def set_max_players(aug, max_players):
|
||||
"""Sets the number of max players"""
|
||||
aug.set(AUG_PATH + '/max_users', max_players)
|
||||
|
||||
aug.save()
|
||||
|
||||
def enable_pvp(choice):
|
||||
|
||||
def enable_pvp(aug, choice):
|
||||
"""Enables pvp"""
|
||||
aug.set(AUG_PATH + '/enable_pvp', choice)
|
||||
|
||||
aug.save()
|
||||
|
||||
def set_creative_mode(choice):
|
||||
|
||||
def set_creative_mode(aug, choice):
|
||||
"""Enables or disables creative mode"""
|
||||
aug.set(AUG_PATH + '/creative_mode', choice)
|
||||
|
||||
aug.save()
|
||||
|
||||
def enable_damage(choice):
|
||||
|
||||
def enable_damage(aug, choice):
|
||||
"""Enables damage"""
|
||||
aug.set(AUG_PATH + '/enable_damage', choice)
|
||||
|
||||
aug.save()
|
||||
|
||||
|
||||
def load_augeas():
|
||||
"""Initialize Augeas."""
|
||||
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
|
||||
augeas.Augeas.NO_MODL_AUTOLOAD)
|
||||
aug.set('/augeas/load/Php/lens', 'Php.lns')
|
||||
aug.set('/augeas/load/Php/incl[last() + 1]', CONFIG_FILE)
|
||||
aug.load()
|
||||
return aug
|
||||
|
||||
|
||||
def main():
|
||||
"""Parse arguments and perform all duties"""
|
||||
arguments = parse_arguments()
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
#
|
||||
|
||||
"""
|
||||
Plinth module for minetest.
|
||||
Plinth module for Minetest server.
|
||||
"""
|
||||
|
||||
import augeas
|
||||
@ -44,8 +44,7 @@ managed_packages = ['minetest-server', 'minetest-mod-advspawning',
|
||||
'minetest-mod-animalmaterials', 'minetest-mod-animals',
|
||||
'minetest-mod-mesecons', 'minetest-mod-mobf-core',
|
||||
'minetest-mod-mobf-trap', 'minetest-mod-moreblocks',
|
||||
'minetest-mod-nether', 'minetest-mod-torches',
|
||||
]
|
||||
'minetest-mod-nether', 'minetest-mod-torches']
|
||||
|
||||
title = _('Block Sandbox \n (Minetest)')
|
||||
|
||||
@ -61,15 +60,6 @@ description = [
|
||||
CONFIG_FILE = '/etc/minetest/minetest.conf'
|
||||
AUG_PATH = '/files' + CONFIG_FILE + '/.anon'
|
||||
|
||||
def load_augeas():
|
||||
"""Initialize Augeas."""
|
||||
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
|
||||
augeas.Augeas.NO_MODL_AUTOLOAD)
|
||||
aug.set('/augeas/load/Php/lens', 'Php.lns')
|
||||
aug.set('/augeas/load/Php/incl[last() + 1]', CONFIG_FILE)
|
||||
aug.load()
|
||||
return aug
|
||||
|
||||
|
||||
def init():
|
||||
"""Initialize the module."""
|
||||
@ -129,38 +119,48 @@ def diagnose():
|
||||
return results
|
||||
|
||||
|
||||
def get_max_players_value():
|
||||
"""Return the current Max Players value."""
|
||||
aug = load_augeas()
|
||||
def load_augeas():
|
||||
"""Initialize Augeas."""
|
||||
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
|
||||
augeas.Augeas.NO_MODL_AUTOLOAD)
|
||||
aug.set('/augeas/load/Php/lens', 'Php.lns')
|
||||
aug.set('/augeas/load/Php/incl[last() + 1]', CONFIG_FILE)
|
||||
aug.load()
|
||||
return aug
|
||||
|
||||
|
||||
def get_max_players(aug):
|
||||
"""Return the maximum players allowed on the server at one time."""
|
||||
value = aug.get(AUG_PATH + '/max_users')
|
||||
if value:
|
||||
return int(value)
|
||||
|
||||
|
||||
def get_creative_mode_value():
|
||||
"""Return the current Creative mode value."""
|
||||
aug = load_augeas()
|
||||
def is_creative_mode_enabled(aug):
|
||||
"""Return whether creative mode is enabled."""
|
||||
value = aug.get(AUG_PATH + '/creative_mode')
|
||||
if value == "true":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
return value == 'true'
|
||||
|
||||
|
||||
def get_enable_pvp_value():
|
||||
"""Return the current Enable pvp value."""
|
||||
aug = load_augeas()
|
||||
def is_pvp_enabled(aug):
|
||||
"""Return whether PVP is enabled."""
|
||||
value = aug.get(AUG_PATH + '/enable_pvp')
|
||||
if value == "true":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
return value == 'true'
|
||||
|
||||
def get_enable_damage_value():
|
||||
"""Return the current Enable damage value."""
|
||||
aug = load_augeas()
|
||||
|
||||
def is_damage_enabled(aug):
|
||||
"""Return whether damage is enabled."""
|
||||
value = aug.get(AUG_PATH + '/enable_damage')
|
||||
if value == "true":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
return value == 'true'
|
||||
|
||||
|
||||
def get_configuration():
|
||||
"""Return the current configuration."""
|
||||
aug = load_augeas()
|
||||
conf = {
|
||||
'max_players': get_max_players(aug),
|
||||
'creative_mode': is_creative_mode_enabled(aug),
|
||||
'enable_pvp': is_pvp_enabled(aug),
|
||||
'enable_damage': is_damage_enabled(aug),
|
||||
}
|
||||
return conf
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
#
|
||||
|
||||
"""
|
||||
Forms for miinetest module.
|
||||
Forms for minetest module.
|
||||
"""
|
||||
|
||||
from django import forms
|
||||
@ -24,27 +24,30 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from plinth.forms import ServiceForm
|
||||
|
||||
|
||||
class MinetestForm(ServiceForm):
|
||||
"""Minetest configuration form"""
|
||||
max_players = forms.IntegerField(
|
||||
label=_('Maximum number of players'),
|
||||
required=True,
|
||||
help_text=_('You can change the maximum number of players playing \
|
||||
minetest at a single instance of time'))
|
||||
minetest at a single instance of time'))
|
||||
|
||||
creative_mode = forms.BooleanField(
|
||||
label=_('Enable creative mode'),
|
||||
required=False,
|
||||
help_text=_('Creative Mode changes the rules of the game to make it\
|
||||
more suitable for creative gameplay, rather than challenging\
|
||||
“survival” gameplay.'))
|
||||
help_text=_('Creative mode changes the rules of the game to make it \
|
||||
more suitable for creative gameplay, rather than \
|
||||
challenging "survival" gameplay.'))
|
||||
|
||||
enable_pvp = forms.BooleanField(
|
||||
label=_('Enable pvp'),
|
||||
label=_('Enable PVP'),
|
||||
required=False,
|
||||
help_text=_('Enabling Player Vs Player will cause players to damage \
|
||||
help_text=_('Enabling Player Vs Player will allow players to damage \
|
||||
other players'))
|
||||
|
||||
enable_damage = forms.BooleanField(
|
||||
label=_('Enable damage'),
|
||||
required=False)
|
||||
required=False,
|
||||
help_text=_('When disabled, players cannot die or receive damage of \
|
||||
any kind'))
|
||||
|
||||
@ -24,12 +24,9 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from plinth import actions
|
||||
from plinth.views import ServiceView
|
||||
from plinth import action_utils
|
||||
|
||||
|
||||
from . import description, managed_services, get_max_players_value,\
|
||||
get_enable_pvp_value, get_creative_mode_value,\
|
||||
get_enable_damage_value
|
||||
from . import description, managed_services, get_configuration
|
||||
from .forms import MinetestForm
|
||||
|
||||
|
||||
@ -44,59 +41,44 @@ class MinetestServiceView(ServiceView): # pylint: disable=too-many-ancestors
|
||||
def get_initial(self):
|
||||
"""Return the values to fill in the form."""
|
||||
initial = super().get_initial()
|
||||
|
||||
initial['max_players'] = get_max_players_value()
|
||||
initial['creative_mode'] = get_creative_mode_value()
|
||||
initial['enable_pvp'] = get_enable_pvp_value()
|
||||
initial['enable_damage'] = get_enable_damage_value()
|
||||
initial.update(get_configuration())
|
||||
return initial
|
||||
|
||||
def form_valid(self, form):
|
||||
"""Change the configurations of Minetest service."""
|
||||
data = form.cleaned_data
|
||||
old_config = get_configuration()
|
||||
|
||||
if get_max_players_value() != data['max_players'] and data['max_players'] != None:
|
||||
actions.superuser_run(
|
||||
'minetest',
|
||||
['configure', '--max_players', str(data['max_players'])])
|
||||
messages.success(self.request,
|
||||
_('Maximum players configuration updated'))
|
||||
if old_config['max_players'] != data['max_players'] \
|
||||
and data['max_players'] != None:
|
||||
actions.superuser_run(
|
||||
'minetest',
|
||||
['configure', '--max_players', str(data['max_players'])])
|
||||
messages.success(self.request,
|
||||
_('Maximum players configuration updated'))
|
||||
|
||||
if data['creative_mode'] is True:
|
||||
value = "true"
|
||||
else:
|
||||
value = "false"
|
||||
|
||||
if get_creative_mode_value() != data['creative_mode']:
|
||||
if old_config['creative_mode'] != data['creative_mode']:
|
||||
value = 'true' if data['creative_mode'] else 'false'
|
||||
actions.superuser_run(
|
||||
'minetest',
|
||||
['configure', '--creative_mode', value])
|
||||
messages.success(self.request,
|
||||
_('Creative mode configuration updated'))
|
||||
|
||||
if data['enable_pvp'] is True:
|
||||
value = "true"
|
||||
else:
|
||||
value = "false"
|
||||
|
||||
if get_enable_pvp_value() != data['enable_pvp']:
|
||||
if old_config['enable_pvp'] != data['enable_pvp']:
|
||||
value = 'true' if data['enable_pvp'] else 'false'
|
||||
actions.superuser_run(
|
||||
'minetest',
|
||||
['configure', '--enable_pvp', value])
|
||||
messages.success(self.request,
|
||||
_('PvP configuration updated'))
|
||||
_('PVP configuration updated'))
|
||||
|
||||
if data['enable_damage'] is True:
|
||||
value = "true"
|
||||
else:
|
||||
value = "false"
|
||||
|
||||
if get_enable_damage_value() != data['enable_damage']:
|
||||
if old_config['enable_damage'] != data['enable_damage']:
|
||||
value = 'true' if data['enable_damage'] else 'false'
|
||||
actions.superuser_run(
|
||||
'minetest',
|
||||
['configure', '--enable_damage', value])
|
||||
messages.success(self.request,
|
||||
_('Damage configuration updated'))
|
||||
|
||||
|
||||
return super().form_valid(form)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user