mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-07-29 12:09:37 +00:00
package: Add ability to receive notification on install
- Fix issue with Mumble firewall enabling after a fresh install.
This commit is contained in:
parent
2028a63deb
commit
be838a30c1
@ -43,7 +43,7 @@ def init():
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('firewalld')
|
||||
@package.required(['firewalld'])
|
||||
def index(request):
|
||||
"""Serve introcution page"""
|
||||
if not get_enabled_status():
|
||||
|
||||
@ -33,8 +33,13 @@ from plinth.modules import mumble
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def on_install():
|
||||
"""Notify that the service is now enabled."""
|
||||
mumble.service.notify_enabled(None, True)
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('mumble-server')
|
||||
@package.required(['mumble-server'], on_install=on_install)
|
||||
def index(request):
|
||||
"""Serve configuration page."""
|
||||
status = get_status()
|
||||
|
||||
@ -48,7 +48,7 @@ def init():
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('postgresql', 'php5-pgsql', 'owncloud')
|
||||
@package.required(['postgresql', 'php5-pgsql', 'owncloud'])
|
||||
def index(request):
|
||||
"""Serve the ownCloud configuration page"""
|
||||
status = get_status()
|
||||
|
||||
@ -102,7 +102,7 @@ https://pagekite.net/wiki/Howto/SshOverPageKite/">instructions</a>'))
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('pagekite')
|
||||
@package.required(['pagekite'])
|
||||
def configure(request):
|
||||
"""Serve the configuration form"""
|
||||
status = get_status()
|
||||
|
||||
@ -44,7 +44,7 @@ def init():
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('tor')
|
||||
@package.required(['tor'])
|
||||
def index(request):
|
||||
"""Service the index page"""
|
||||
status = get_status()
|
||||
|
||||
@ -46,7 +46,7 @@ def init():
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('unattended-upgrades')
|
||||
@package.required(['unattended-upgrades'])
|
||||
def index(request):
|
||||
"""Serve the index page."""
|
||||
return TemplateResponse(request, 'upgrades.html',
|
||||
@ -56,7 +56,7 @@ def index(request):
|
||||
|
||||
@login_required
|
||||
@require_POST
|
||||
@package.required('unattended-upgrades')
|
||||
@package.required(['unattended-upgrades'])
|
||||
def run(request):
|
||||
"""Run upgrades and show the output page."""
|
||||
output = ''
|
||||
@ -85,7 +85,7 @@ available.'))
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('unattended-upgrades')
|
||||
@package.required(['unattended-upgrades'])
|
||||
def configure(request):
|
||||
"""Serve the configuration form."""
|
||||
status = get_status()
|
||||
|
||||
@ -62,7 +62,7 @@ def init():
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required('jwchat', 'ejabberd')
|
||||
@package.required(['jwchat', 'ejabberd'])
|
||||
def index(request):
|
||||
"""Serve XMPP page"""
|
||||
return TemplateResponse(request, 'xmpp.html',
|
||||
|
||||
@ -35,12 +35,14 @@ packages_resolved = {}
|
||||
class Transaction(object):
|
||||
"""Information about an ongoing transaction."""
|
||||
|
||||
def __init__(self, package_names):
|
||||
def __init__(self, package_names, on_install=None):
|
||||
"""Initialize transaction object.
|
||||
|
||||
Set most values to None until they are sent as progress update.
|
||||
"""
|
||||
self.package_names = package_names
|
||||
# XXX: This is hack, remove after implementing proper setup mechanism.
|
||||
self.on_install = on_install
|
||||
|
||||
# Progress
|
||||
self.allow_cancel = None
|
||||
@ -120,10 +122,13 @@ class Transaction(object):
|
||||
|
||||
Remove self from global transactions list.
|
||||
"""
|
||||
if self.status == packagekit.StatusEnum.FINISHED:
|
||||
self.on_install()
|
||||
|
||||
del transactions[self.get_id()]
|
||||
|
||||
|
||||
def required(*package_names):
|
||||
def required(package_names, on_install=None):
|
||||
"""Decorate a view to check and install required packages."""
|
||||
|
||||
def wrapper2(func):
|
||||
@ -137,7 +142,8 @@ def required(*package_names):
|
||||
return func(request, *args, **kwargs)
|
||||
|
||||
view = plinth.views.PackageInstallView.as_view()
|
||||
return view(request, package_names=package_names, *args, **kwargs)
|
||||
return view(request, package_names=package_names,
|
||||
on_install=on_install, *args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
@ -155,7 +161,7 @@ def check_installed(package_names):
|
||||
|
||||
client = packagekit.Client()
|
||||
response = client.resolve(packagekit.FilterEnum.INSTALLED,
|
||||
package_names + (None, ), None,
|
||||
tuple(package_names) + (None, ), None,
|
||||
_callback, None)
|
||||
|
||||
installed_package_names = []
|
||||
@ -173,12 +179,12 @@ def is_installing(package_names):
|
||||
return frozenset(package_names) in transactions
|
||||
|
||||
|
||||
def start_install(package_names):
|
||||
def start_install(package_names, on_install=None):
|
||||
"""Start a PackageKit transaction to install given list of packages.
|
||||
|
||||
This operation is non-blocking at it spawns a new thread.
|
||||
"""
|
||||
transaction = Transaction(package_names)
|
||||
transaction = Transaction(package_names, on_install=on_install)
|
||||
transactions[frozenset(package_names)] = transaction
|
||||
|
||||
transaction.start_install()
|
||||
|
||||
@ -58,5 +58,6 @@ class PackageInstallView(TemplateView):
|
||||
Start the package installation, and refresh the page every x seconds to
|
||||
keep displaying PackageInstallView.get() with the installation status.
|
||||
"""
|
||||
package_module.start_install(self.kwargs['package_names'])
|
||||
package_module.start_install(self.kwargs['package_names'],
|
||||
on_install=self.kwargs.get('on_install'))
|
||||
return self.render_to_response(self.get_context_data())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user