From c53e8ecf9c2bda7b35a37f19ed2df872cb751b8c Mon Sep 17 00:00:00 2001 From: Xevion Date: Sat, 31 Oct 2020 17:14:20 -0500 Subject: [PATCH] add directory mediatype functionality via helpers, begin looking into static jquery (nothing yet) --- viewer/helpers.py | 29 ++++++++++++++++++++++++++++- viewer/static/hover.js | 1 + viewer/templates/browse.html | 5 ++++- viewer/views.py | 8 ++------ 4 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 viewer/static/hover.js 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)