diff --git a/viewer/helpers.py b/viewer/helpers.py
new file mode 100644
index 0000000..a073401
--- /dev/null
+++ b/viewer/helpers.py
@@ -0,0 +1,8 @@
+def get_mediatype(mimetype: str) -> str:
+ """Simple media type categorization based on the given mimetype"""
+ if mimetype is not None:
+ if mimetype.startswith('image'):
+ return 'image'
+ elif mimetype.startswith('video'):
+ return 'video'
+ return 'file'
diff --git a/viewer/templates/base.html b/viewer/templates/base.html
new file mode 100644
index 0000000..e03a51c
--- /dev/null
+++ b/viewer/templates/base.html
@@ -0,0 +1,37 @@
+
+
+
+ {% block head %}
+
+
+ {{ title }}
+
+ {% endblock head %}
+
+
+
+
+
+ {% block content %}
+ {% endblock %}
+
+
+
+
+
diff --git a/viewer/templates/browse.html b/viewer/templates/browse.html
new file mode 100644
index 0000000..eebe1ae
--- /dev/null
+++ b/viewer/templates/browse.html
@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+{% block content %}
+
+
+ Files
+
+ {{ files|length }}
+
+
+
+
+
+
+
+ {% for file in files %}
+
+
+
+
+ {{ file.0 }}
+
+ {% endfor %}
+
+{% endblock content %}
diff --git a/viewer/templates/index.html b/viewer/templates/index.html
new file mode 100644
index 0000000..e07255f
--- /dev/null
+++ b/viewer/templates/index.html
@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+{% block head %}
+ {{ block.super }}
+
+{% endblock head %}
+{% block content %}
+
+
Directories
+ {% for served_directory in directories %}
+
+ {% endfor %}
+
+{% endblock content %}
diff --git a/viewer/templates/message.html b/viewer/templates/message.html
new file mode 100644
index 0000000..d3be1c6
--- /dev/null
+++ b/viewer/templates/message.html
@@ -0,0 +1,15 @@
+{% extends 'base.html' %}
+{% block content %}
+
+{% endblock content %}
diff --git a/viewer/urls.py b/viewer/urls.py
index 2fcca0d..c6bf29a 100644
--- a/viewer/urls.py
+++ b/viewer/urls.py
@@ -3,5 +3,6 @@ from django.urls import path
from . import views
urlpatterns = [
- path('', views.index, name='index')
+ path('', views.index, name='index'),
+ path('//', views.browse, name='browse'),
]
diff --git a/viewer/views.py b/viewer/views.py
index e00860a..ae250e2 100644
--- a/viewer/views.py
+++ b/viewer/views.py
@@ -1,7 +1,39 @@
-from django.shortcuts import render
+import mimetypes
+import os
+
+from django.http import FileResponse
+from django.shortcuts import render, get_object_or_404
+
+from viewer.helpers import get_mediatype
+from viewer.models import ServedDirectory
-from django.http import HttpResponse
def index(request):
"""Index view for the simple-viewer project."""
- return HttpResponse('Hello, World.')
+ directories = ServedDirectory.objects.all()
+ context = {'title': 'Index',
+ 'directories': directories}
+ return render(request, 'index.html', context)
+
+
+def browse(request, directory_id):
+ dir = get_object_or_404(ServedDirectory, id=directory_id)
+
+ if os.path.isdir(dir.path):
+ files = [
+ (file, get_mediatype(mimetypes.guess_type(file)[0])) for file in os.listdir(dir.path)
+ ]
+ context = {
+ 'title': f'Browse - {os.path.dirname(dir.path)}',
+ 'files': files,
+ 'directory': dir
+ }
+ return render(request, 'browse.html', context)
+ else:
+ context = {
+ 'title': 'Invalid Directory',
+ 'message': 'The path this server directory points to {}.'.format(
+ 'exists, but is not a directory' if os.path.exists(dir.path) else 'does not exist'
+ )
+ }
+ return render(request, 'message.html', context, status=500)