mirror of
https://github.com/Xevion/simple-viewer.git
synced 2025-12-06 09:16:31 -06:00
add directory mediatype functionality via helpers, begin looking into static jquery (nothing yet)
This commit is contained in:
@@ -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"""
|
"""Simple media type categorization based on the given mimetype"""
|
||||||
if mimetype is not None:
|
if mimetype is not None:
|
||||||
if mimetype.startswith('image'):
|
if mimetype.startswith('image'):
|
||||||
|
|||||||
1
viewer/static/hover.js
Normal file
1
viewer/static/hover.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
asdas
|
||||||
@@ -17,10 +17,13 @@
|
|||||||
<span class="panel-icon pr-4">
|
<span class="panel-icon pr-4">
|
||||||
<i class="fas fa-{{ file.1 }} fa-lg" aria-hidden="true"></i>
|
<i class="fas fa-{{ file.1 }} fa-lg" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
<a href="{% url 'file' directory.id file.0 %}">
|
<a href="{% if file.1 != 'folder' %}{% url 'file' directory.id file.0 %}{% endif %}">
|
||||||
{{ file.0 }}
|
{{ file.0 }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>
|
||||||
|
{% load static %}
|
||||||
|
<script src="{% static "hover.js" %}"></script>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import mimetypes
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.http import FileResponse
|
from django.http import FileResponse
|
||||||
from django.shortcuts import render, get_object_or_404
|
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
|
from viewer.models import ServedDirectory
|
||||||
|
|
||||||
|
|
||||||
@@ -20,12 +19,9 @@ def browse(request, directory_id):
|
|||||||
dir = get_object_or_404(ServedDirectory, id=directory_id)
|
dir = get_object_or_404(ServedDirectory, id=directory_id)
|
||||||
|
|
||||||
if os.path.isdir(dir.path):
|
if os.path.isdir(dir.path):
|
||||||
files = [
|
|
||||||
(file, get_mediatype(mimetypes.guess_type(file)[0])) for file in os.listdir(dir.path)
|
|
||||||
]
|
|
||||||
context = {
|
context = {
|
||||||
'title': f'Browse - {os.path.dirname(dir.path)}',
|
'title': f'Browse - {os.path.dirname(dir.path)}',
|
||||||
'files': files,
|
'files': extra_listdir(dir.path),
|
||||||
'directory': dir
|
'directory': dir
|
||||||
}
|
}
|
||||||
return render(request, 'browse.html', context)
|
return render(request, 'browse.html', context)
|
||||||
|
|||||||
Reference in New Issue
Block a user