mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-27 00:21:07 +00:00
webish: implement delete (for files only, not directories)
This commit is contained in:
parent
c8e0024c41
commit
6f21b4248a
@ -90,6 +90,7 @@ class MutableDirectoryNode(Referenceable):
|
|||||||
os.unlink(absname)
|
os.unlink(absname)
|
||||||
else:
|
else:
|
||||||
raise BadFileError("Cannot delete non-existent file '%s'" % name)
|
raise BadFileError("Cannot delete non-existent file '%s'" % name)
|
||||||
|
remote_remove = remove
|
||||||
|
|
||||||
|
|
||||||
class GlobalVirtualDrive(service.MultiService):
|
class GlobalVirtualDrive(service.MultiService):
|
||||||
|
@ -106,8 +106,23 @@ class VDrive(service.MultiService):
|
|||||||
d.addCallback(lambda parent: parent.callRemote("add_directory", name))
|
d.addCallback(lambda parent: parent.callRemote("add_directory", name))
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def remove(self, something): # TODO
|
def remove(self, parent, name):
|
||||||
pass
|
assert not isinstance(parent, str)
|
||||||
|
log.msg("vdrive removing %s" % name)
|
||||||
|
# first find the verifierid
|
||||||
|
d = self.get_verifierid_from_parent(parent, name)
|
||||||
|
def _got_verifierid(vid):
|
||||||
|
# TODO: delete the file's shares using this
|
||||||
|
pass
|
||||||
|
d.addCallback(_got_verifierid)
|
||||||
|
def _delete_from_parent(res):
|
||||||
|
return parent.callRemote("remove", name)
|
||||||
|
d.addCallback(_delete_from_parent)
|
||||||
|
def _done(res):
|
||||||
|
log.msg("vdrive done removing %s" % name)
|
||||||
|
d.addCallback(_done)
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
def get_file(self, dir_and_name_or_path, download_target):
|
def get_file(self, dir_and_name_or_path, download_target):
|
||||||
"""Retrieve a file from the virtual drive and put it somewhere.
|
"""Retrieve a file from the virtual drive and put it somewhere.
|
||||||
|
@ -17,11 +17,13 @@
|
|||||||
<td>Filename</td>
|
<td>Filename</td>
|
||||||
<td>Type</td>
|
<td>Type</td>
|
||||||
<td>fileid</td>
|
<td>fileid</td>
|
||||||
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr n:pattern="item" n:render="row">
|
<tr n:pattern="item" n:render="row">
|
||||||
<td><n:slot name="filename"/></td>
|
<td><n:slot name="filename"/></td>
|
||||||
<td><n:slot name="type"/></td>
|
<td><n:slot name="type"/></td>
|
||||||
<td><n:slot name="fileid"/></td>
|
<td><n:slot name="fileid"/></td>
|
||||||
|
<td><n:slot name="delete"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr n:pattern="empty"><td>directory is empty!</td></tr>
|
<tr n:pattern="empty"><td>directory is empty!</td></tr>
|
||||||
|
@ -86,11 +86,23 @@ class Directory(rend.Page):
|
|||||||
ctx.fillSlots("filename", T.a(href=dlurl)[name])
|
ctx.fillSlots("filename", T.a(href=dlurl)[name])
|
||||||
ctx.fillSlots("type", "FILE")
|
ctx.fillSlots("type", "FILE")
|
||||||
ctx.fillSlots("fileid", idlib.b2a(target))
|
ctx.fillSlots("fileid", idlib.b2a(target))
|
||||||
|
|
||||||
|
# this creates a button which will cause our child__delete method
|
||||||
|
# to be invoked, which deletes the file and then redirects the
|
||||||
|
# browser back to this directory
|
||||||
|
del_url = url.here.child("_delete")
|
||||||
|
#del_url = del_url.add("verifierid", idlib.b2a(target))
|
||||||
|
del_url = del_url.add("name", name)
|
||||||
|
delete = T.form(action=del_url, method="post")[
|
||||||
|
T.input(type='submit', value='del', name="del"),
|
||||||
|
]
|
||||||
|
ctx.fillSlots("delete", delete)
|
||||||
else:
|
else:
|
||||||
# directory
|
# directory
|
||||||
ctx.fillSlots("filename", T.a(href=name)[name])
|
ctx.fillSlots("filename", T.a(href=name)[name])
|
||||||
ctx.fillSlots("type", "DIR")
|
ctx.fillSlots("type", "DIR")
|
||||||
ctx.fillSlots("fileid", "-")
|
ctx.fillSlots("fileid", "-")
|
||||||
|
ctx.fillSlots("delete", "-")
|
||||||
return ctx.tag
|
return ctx.tag
|
||||||
|
|
||||||
child_webform_css = webform.defaultCSS
|
child_webform_css = webform.defaultCSS
|
||||||
@ -153,6 +165,16 @@ class Directory(rend.Page):
|
|||||||
d.addCallback(_done)
|
d.addCallback(_done)
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
def child__delete(self, ctx):
|
||||||
|
# perform the delete, then redirect back to the directory page
|
||||||
|
args = inevow.IRequest(ctx).args
|
||||||
|
vdrive = self._client.getServiceNamed("vdrive")
|
||||||
|
d = vdrive.remove(self._dirnode, args["name"][0])
|
||||||
|
def _deleted(res):
|
||||||
|
return url.here.up()
|
||||||
|
d.addCallback(_deleted)
|
||||||
|
return d
|
||||||
|
|
||||||
class WebDownloadTarget:
|
class WebDownloadTarget:
|
||||||
implements(IDownloadTarget)
|
implements(IDownloadTarget)
|
||||||
def __init__(self, req):
|
def __init__(self, req):
|
||||||
|
Loading…
Reference in New Issue
Block a user