diff --git a/plugins/Sidebar/SidebarPlugin.py b/plugins/Sidebar/SidebarPlugin.py index 4bf716f2..962edba0 100644 --- a/plugins/Sidebar/SidebarPlugin.py +++ b/plugins/Sidebar/SidebarPlugin.py @@ -17,6 +17,7 @@ from Plugin import PluginManager from Debug import Debug from Translate import Translate from util import helper +from ZipStream import ZipStream plugin_dir = "plugins/Sidebar" media_dir = plugin_dir + "/media" @@ -62,6 +63,28 @@ class UiRequestPlugin(object): for part in super(UiRequestPlugin, self).actionUiMedia(path): yield part + def actionZip(self): + address = self.get["address"] + site = self.server.site_manager.get(address) + if not site: + return self.error404("Site not found") + + title = site.content_manager.contents.get("content.json", {}).get("title", "").encode('ascii', 'ignore') + filename = "%s-backup-%s.zip" % (title, time.strftime("%Y-%m-%d_%H_%M")) + self.sendHeader(content_type="application/zip", extra_headers={'Content-Disposition': 'attachment; filename="%s"' % filename}) + + return self.streamZip(site.storage.getPath(".")) + + def streamZip(self, file_path): + zs = ZipStream(file_path) + while 1: + data = zs.read() + if not data: + break + yield data + + + @PluginManager.registerTo("UiWebsocket") class UiWebsocketPlugin(object): @@ -137,7 +160,15 @@ class UiWebsocketPlugin(object): """)) def sidebarRenderFileStats(self, body, site): - body.append(_(u"