From: Michael Tremer Date: Tue, 4 Dec 2012 16:06:33 +0000 (+0100) Subject: Make package files viewable. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=de4e09a51a094b0dcad0a48236648be0e3cea271;p=pbs.git Make package files viewable. --- diff --git a/data/static/js/pbs.js b/data/static/js/pbs.js index 74e02fed..77b8fde8 100644 --- a/data/static/js/pbs.js +++ b/data/static/js/pbs.js @@ -1,7 +1,6 @@ -// Activate Google Prettify for pretty-printing code. -addEventListener('load', prettyPrint, false); - $(document).ready(function() { + // Activate Google Prettify for pretty-printing code. + window.prettyPrint && prettyPrint() }); function getCookie(name) { diff --git a/data/templates/modules/packages-files-table.html b/data/templates/modules/packages-files-table.html index 58de689d..dd7633cf 100644 --- a/data/templates/modules/packages-files-table.html +++ b/data/templates/modules/packages-files-table.html @@ -21,7 +21,7 @@
{% if file.viewable %} - + {% end %} diff --git a/data/templates/packages/view-file.html b/data/templates/packages/view-file.html new file mode 100644 index 00000000..0b962eda --- /dev/null +++ b/data/templates/packages/view-file.html @@ -0,0 +1,53 @@ +{% extends "../base.html" %} + +{% block title %}{{ _("View %(filename)s from %(pkg)s") % { "filename" : filename, "pkg" : pkg.friendly_name } }}{% end block %} + +{% block body %} + + + + +
= 1024 ** 2 %}class="prettyprint linenums"{% end %}>{{ content }}
+ +

+ {{ _("Mimetype: %s") % mimetype }} - {{ _("Size: %s") % format_size(filesize) }} - + {{ _("Download file") }} +

+{% end block %} diff --git a/web/__init__.py b/web/__init__.py index 710b7688..4986f02c 100644 --- a/web/__init__.py +++ b/web/__init__.py @@ -119,6 +119,7 @@ class Application(tornado.web.Application): (r"/package/([\w\-\+]+)", PackageNameHandler), (r"/package/([\w\-\+]+)/changelog", PackageChangelogHandler), (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/download(.*)", PackageFileDownloadHandler), + (r"/package/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/view(.*)", PackageFileViewHandler), # Files (r"/file/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", FileDetailHandler), diff --git a/web/handlers_packages.py b/web/handlers_packages.py index 9883088d..d2602735 100644 --- a/web/handlers_packages.py +++ b/web/handlers_packages.py @@ -169,7 +169,7 @@ class PackagePropertiesHandler(BaseHandler): class PackageFileDownloadHandler(BaseHandler): - def get(self, pkg_uuid, filename): + def get_file(self, pkg_uuid, filename): # Fetch package. pkg = self.pakfire.packages.get_by_uuid(pkg_uuid) if not pkg: @@ -189,14 +189,19 @@ class PackageFileDownloadHandler(BaseHandler): if not f: raise tornado.web.HTTPError(404, "Package %s does not contain file %s" % (pkg_file, filename)) - # Send the filename in header. - self.set_header("Content-Disposition", "attachment; filename=%s" % os.path.basename(filename)) - # Guess the MIME type of the file. (type, encoding) = mimetypes.guess_type(filename) if not type: type = "text/plain" - self.set_header("Content-Type", type) + + return (pkg, f, type) + + def get(self, pkg_uuid, filename): + pkg, f, mimetype = self.get_file(pkg_uuid, filename) + + # Send the filename and mimetype in header. + self.set_header("Content-Disposition", "attachment; filename=%s" % os.path.basename(filename)) + self.set_header("Content-Type", mimetype) # Transfer the content chunk by chunk. while True: @@ -210,3 +215,15 @@ class PackageFileDownloadHandler(BaseHandler): # Done. self.finish() + + +class PackageFileViewHandler(PackageFileDownloadHandler): + def get(self, pkg_uuid, filename): + pkg, f, mimetype = self.get_file(pkg_uuid, filename) + + # Read in the data. + content = f.read() + f.close() + + self.render("packages/view_file.html", pkg=pkg, filename=filename, + mimetype=mimetype, content=content, filesize=f.size)