From 6f21b4248a9f30df77639da268b89f50d44f2984 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Mon, 4 Dec 2006 19:27:38 -0700 Subject: [PATCH] webish: implement delete (for files only, not directories) --- allmydata/filetable.py | 1 + allmydata/vdrive.py | 19 +++++++++++++++++-- allmydata/web/directory.xhtml | 2 ++ allmydata/webish.py | 22 ++++++++++++++++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/allmydata/filetable.py b/allmydata/filetable.py index e93413c17..bb96b02ad 100644 --- a/allmydata/filetable.py +++ b/allmydata/filetable.py @@ -90,6 +90,7 @@ class MutableDirectoryNode(Referenceable): os.unlink(absname) else: raise BadFileError("Cannot delete non-existent file '%s'" % name) + remote_remove = remove class GlobalVirtualDrive(service.MultiService): diff --git a/allmydata/vdrive.py b/allmydata/vdrive.py index c0eed1fb5..22e012d08 100644 --- a/allmydata/vdrive.py +++ b/allmydata/vdrive.py @@ -106,8 +106,23 @@ class VDrive(service.MultiService): d.addCallback(lambda parent: parent.callRemote("add_directory", name)) return d - def remove(self, something): # TODO - pass + def remove(self, parent, name): + 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): """Retrieve a file from the virtual drive and put it somewhere. diff --git a/allmydata/web/directory.xhtml b/allmydata/web/directory.xhtml index 47f8cd473..5b4d9c7aa 100644 --- a/allmydata/web/directory.xhtml +++ b/allmydata/web/directory.xhtml @@ -17,11 +17,13 @@ Filename Type fileid + + directory is empty! diff --git a/allmydata/webish.py b/allmydata/webish.py index 43e5772ac..4d41cbc06 100644 --- a/allmydata/webish.py +++ b/allmydata/webish.py @@ -86,11 +86,23 @@ class Directory(rend.Page): ctx.fillSlots("filename", T.a(href=dlurl)[name]) ctx.fillSlots("type", "FILE") 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: # directory ctx.fillSlots("filename", T.a(href=name)[name]) ctx.fillSlots("type", "DIR") ctx.fillSlots("fileid", "-") + ctx.fillSlots("delete", "-") return ctx.tag child_webform_css = webform.defaultCSS @@ -153,6 +165,16 @@ class Directory(rend.Page): d.addCallback(_done) 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: implements(IDownloadTarget) def __init__(self, req):