From 63875ae4f1c648514d4f1124814abd25a2d85112 Mon Sep 17 00:00:00 2001 From: Goffi Date: Wed, 5 May 2021 15:37:33 +0200 Subject: [PATCH] component file sharing (plugin management): new command to get available quota/used space. --- .../plugin_comp_file_sharing_management.py | 28 +++++++++++++++++++ sat/plugins/plugin_xep_0050.py | 4 +-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/sat/plugins/plugin_comp_file_sharing_management.py b/sat/plugins/plugin_comp_file_sharing_management.py index 49bf1bd6..98a29e87 100644 --- a/sat/plugins/plugin_comp_file_sharing_management.py +++ b/sat/plugins/plugin_comp_file_sharing_management.py @@ -23,6 +23,7 @@ from sat.core.i18n import _, D_ from sat.core import exceptions from sat.core.constants import Const as C from sat.core.log import getLogger +from sat.tools.common import utils from wokkel import data_form from twisted.internet import defer from twisted.words.protocols.jabber import jid @@ -50,6 +51,7 @@ NS_FILE_MANAGEMENT = "https://salut-a-toi.org/protocol/file-management:0" NS_FILE_MANAGEMENT_PERM = "https://salut-a-toi.org/protocol/file-management:0#perm" NS_FILE_MANAGEMENT_DELETE = "https://salut-a-toi.org/protocol/file-management:0#delete" NS_FILE_MANAGEMENT_THUMB = "https://salut-a-toi.org/protocol/file-management:0#thumb" +NS_FILE_MANAGEMENT_QUOTA = "https://salut-a-toi.org/protocol/file-management:0#quota" class WorkflowError(Exception): @@ -98,6 +100,11 @@ class FileSharingManagement(object): node=NS_FILE_MANAGEMENT_THUMB, allowed_magics=C.ENTITY_ALL, ) + self._c.addAdHocCommand( + client, self._onQuota, "Get Quota", + node=NS_FILE_MANAGEMENT_QUOTA, + allowed_magics=C.ENTITY_ALL, + ) def _delete(self, service_jid_s, path, namespace, profile): client = self.host.getClient(profile) @@ -458,3 +465,24 @@ class FileSharingManagement(object): payload = None note = (self._c.NOTE.INFO, _("thumbnails generated")) defer.returnValue((payload, status, None, note)) + + async def _onQuota(self, client, command_elt, session_data, action, node): + requestor = session_data['requestor'] + quota = self.host.plugins["file_sharing"].getQuota(client, requestor) + try: + size_used = await self.host.memory.fileGetUsedSpace(client, requestor) + except exceptions.PermissionError: + raise WorkflowError(self._err(_("forbidden"))) + status = self._c.STATUS.COMPLETED + payload = None + note = ( + self._c.NOTE.INFO, + _("You are currently using {size_used} on {size_quota}").format( + size_used = utils.getHumanSize(size_used), + size_quota = ( + _("unlimited quota") if quota is None + else utils.getHumanSize(quota) + ) + ) + ) + return (payload, status, None, note) diff --git a/sat/plugins/plugin_xep_0050.py b/sat/plugins/plugin_xep_0050.py index 64c193e7..cbc08159 100644 --- a/sat/plugins/plugin_xep_0050.py +++ b/sat/plugins/plugin_xep_0050.py @@ -34,7 +34,7 @@ from sat.core.log import getLogger from sat.core.xmpp import SatXMPPEntity from sat.core import exceptions from sat.memory.memory import Sessions -from sat.tools import xml_tools +from sat.tools import xml_tools, utils from sat.tools.common import data_format @@ -233,7 +233,7 @@ class AdHocCommand(XMPPHandler): if action == XEP_0050.ACTION.CANCEL: d = defer.succeed((None, XEP_0050.STATUS.CANCELED, None, None)) else: - d = defer.maybeDeferred( + d = utils.asDeferred( self.callback, self.client, command_elt,