44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
from aiohttp import web
|
|
import aiohttp_jinja2
|
|
from pathlib import Path
|
|
|
|
from ..helpers.auth import login_required
|
|
|
|
|
|
class ViewerView(web.View):
|
|
@login_required
|
|
async def get(self):
|
|
file_path = self.request.query.get('path', '')
|
|
user = self.request.get('user')
|
|
|
|
if not file_path:
|
|
return web.Response(text="No file path specified", status=400)
|
|
|
|
# Get file extension to determine media type
|
|
file_ext = Path(file_path).suffix.lower()
|
|
|
|
# Determine media type
|
|
image_extensions = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg'}
|
|
video_extensions = {'.mp4', '.avi', '.mov', '.wmv', '.flv', '.webm', '.mkv'}
|
|
audio_extensions = {'.mp3', '.wav', '.flac', '.aac', '.ogg', '.m4a'}
|
|
|
|
if file_ext in image_extensions:
|
|
media_type = 'image'
|
|
elif file_ext in video_extensions:
|
|
media_type = 'video'
|
|
elif file_ext in audio_extensions:
|
|
media_type = 'audio'
|
|
else:
|
|
return web.Response(text="Unsupported file type for viewing", status=400)
|
|
|
|
return aiohttp_jinja2.render_template(
|
|
'pages/media_viewer.html',
|
|
self.request,
|
|
{
|
|
'request': self.request,
|
|
'user': user,
|
|
'file_path': file_path,
|
|
'media_type': media_type,
|
|
'active_page': 'files'
|
|
}
|
|
) |