diff --git a/viewer/helpers.py b/viewer/helpers.py
index a073401..02cf123 100644
--- a/viewer/helpers.py
+++ b/viewer/helpers.py
@@ -1,4 +1,31 @@
-def get_mediatype(mimetype: str) -> str:
+import os
+from typing import Tuple, List
+
+
+def extra_listdir(path: str) -> List[Tuple[str, str]]:
+ """
+ Helper function used for identifying file media type for every file in a given directory, extending os.listdir
+
+ :param path: The path to the directory.
+ :return: A list of tuples, each containing two strings, the file or directory name, and the media type.
+ """
+ return [(file, get_all_mediatype(file, path)) for file in os.listdir(path)]
+
+
+def get_all_mediatype(head: str, tail: str) -> str:
+ """
+ A extra media type function supporting directories on top of files.
+
+ :param head: The head of the path, usually the directory name or filename at the very end.
+ :param tail: The rest of the path, everything that comes before the head.
+ :return: A media type in string form.
+ """
+ if os.path.isfile(os.path.join(tail, head)):
+ return get_file_mediatype(head)
+ return "folder"
+
+
+def get_file_mediatype(mimetype: str) -> str:
"""Simple media type categorization based on the given mimetype"""
if mimetype is not None:
if mimetype.startswith('image'):
diff --git a/viewer/static/hover.js b/viewer/static/hover.js
new file mode 100644
index 0000000..0247eeb
--- /dev/null
+++ b/viewer/static/hover.js
@@ -0,0 +1 @@
+asdas
diff --git a/viewer/templates/browse.html b/viewer/templates/browse.html
index 33ada3c..dde12aa 100644
--- a/viewer/templates/browse.html
+++ b/viewer/templates/browse.html
@@ -17,10 +17,13 @@
-
+
{{ file.0 }}
{% endfor %}
+
+ {% load static %}
+
{% endblock content %}
diff --git a/viewer/views.py b/viewer/views.py
index 98c7d8c..00b7aa3 100644
--- a/viewer/views.py
+++ b/viewer/views.py
@@ -1,10 +1,9 @@
-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.helpers import extra_listdir
from viewer.models import ServedDirectory
@@ -20,12 +19,9 @@ 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,
+ 'files': extra_listdir(dir.path),
'directory': dir
}
return render(request, 'browse.html', context)