component file sharing (plugin management): new command to get available quota/used space.

This commit is contained in:
Goffi 2021-05-05 15:37:33 +02:00
commit 63875ae4f1
2 changed files with 30 additions and 2 deletions

View file

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

View file

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