From b6a1503c7a00a582fa08cb5cfb97490f8bfa07aa Mon Sep 17 00:00:00 2001
From: Wookey <wookey@wookware.org>
Date: Mon, 11 Jul 2011 23:19:48 +0100
Subject: [PATCH] Add changes from martin

---
 flatpages/views.py | 42 +++++++++++++++++++++++++++++++++++-------
 1 file changed, 35 insertions(+), 7 deletions(-)

diff --git a/flatpages/views.py b/flatpages/views.py
index 5f7b579..11cb457 100644
--- a/flatpages/views.py
+++ b/flatpages/views.py
@@ -15,6 +15,7 @@ import os
 import re
 
 def flatpage(request, path):
+    print "gggggg", path
     try:
         r = Redirect.objects.get(originalURL = path)
         return HttpResponseRedirect(r.newURL) # Redirect after POST
@@ -36,10 +37,22 @@ def flatpage(request, path):
 
     if path.startswith("noinfo") and settings.PUBLIC_SITE and not request.user.is_authenticated():
         return HttpResponseRedirect(reverse("auth_login") + '?next=%s' % request.path)
-    try:
-        o = open(os.path.normpath(settings.EXPOWEB + path), "rb")
-    except IOError:
-        raise Http404
+
+    if path.endswith("/") or path == "":        
+        try:
+            o = open(os.path.normpath(settings.EXPOWEB + path + "index.html"), "rb")
+            path = path + "index.html"
+        except IOError:
+            try:
+                o = open(os.path.normpath(settings.EXPOWEB + path + "index.htm"), "rb")
+                path = path + "index.html"
+            except IOError:
+                raise Http404
+    else:        
+        try:
+            o = open(os.path.normpath(settings.EXPOWEB + path), "rb")
+        except IOError:
+            raise Http404
     if path.endswith(".htm") or path.endswith(".html"):
         html = o.read()
         
@@ -56,14 +69,29 @@ def flatpage(request, path):
             body = unicode(body, "iso-8859-1")
         return render_with_context(request, 'flatpage.html', {'editable': True, 'path': path, 'head': head, 'body': body, "bodyid": bodyid})
     else:
-        return HttpResponse(o.read())
+        return HttpResponse(o.read(), mimetype=getmimetype(path))
+
+def getmimetype(path):
+    if path.endswith(".png"): return "image/png"
+    if path.endswith(".tif"): return "image/tif"
+    if path.endswith(".gif"): return "image/gif"
+    if path.endswith(".jpeg"): return "image/jpeg"
+    if path.endswith(".jpg"): return "image/jpeg"
+    if path.endswith("svg"): return "image/svg+xml"
+    if path.endswith(".pdf"): return "application/pdf"
+    if path.endswith(".ps"): return "application/postscript"
+    if path.endswith(".svx"): return "application/x-survex-svx"
+    if path.endswith(".3d"): return "application/x-survex-3d"
+    if path.endswith(".pos"): return "application/x-survex-pos"
+    if path.endswith(".err"): return "application/x-survex-err"
+    return ""
 
 @login_required_if_public
 def editflatpage(request, path):
     try:
-        r = CaveRedirect.objects.get(originalURL = path)
+        r = Cave.objects.get(url = path)
         return troggle.core.views_caves.editCave(request, r.cave.slug)
-    except CaveRedirect.DoesNotExist:
+    except Cave.DoesNotExist:
         pass