Files
fet2020/fet2020/gallery/views.py
2022-06-11 13:52:44 +00:00

95 lines
2.8 KiB
Python

import os
from collections import deque
from random import randint
from django.conf import settings
from django.http import Http404
from django.shortcuts import render
from django.utils.text import slugify
from authentications.decorators import authenticated_user
from .models import Album
from .utils import create_thumbs, get_folder_list, get_image_list
def index(request):
if request.user.is_authenticated:
albums = deque(Album.objects.all().order_by("-event_date"))
# get albums that are in the server but not in the db.
folders = get_folder_list()
if folders:
for folder in folders:
if not Album.objects.filter(folder_name=folder):
album = Album(
title=folder,
slug=slugify(folder),
folder_name=folder,
event_date=None,
)
else:
# show only PUBLIC albums.
albums = deque(
Album.objects.filter(status=Album.PUBLIC).order_by("-event_date")
)
for album in list(albums):
img_list = get_image_list(album.folder_name)
if img_list:
if album.thumbnail:
for img in img_list:
if album.thumbnail in img["title"]:
album.thumbnail = img["thumb_url"]
break
else:
value = randint(0, len(img_list) - 1)
album.thumbnail = img_list[value]["thumb_url"]
else:
value = randint(0, len(img_list) - 1)
album.thumbnail = img_list[value]["thumb_url"]
else:
# empty album is temporarily set to DRAFT.
album.thumbnail = settings.STATIC_URL + "img/FET-Logo-2014-quadrat.png"
album.status = Album.DRAFT
context = {
"albums": albums,
}
return render(request, "gallery/index.html", context)
def show_album(request, slug):
album = Album.objects.filter(slug=slug).first()
if not album:
for folder in get_folder_list():
if slug == slugify(folder):
album = Album(
title=folder,
slug=slugify(folder),
folder_name=folder,
event_date=None,
)
break
else:
raise Http404("wrong album slug")
img_list = get_image_list(album.folder_name)
if not img_list:
# empty album is temporarily set to DRAFT.
album.status = Album.DRAFT
create_thumbs(album.folder_name)
context = {
"album": album,
"images": img_list,
}
return render(request, "gallery/album.html", context)
@authenticated_user
def show_draft_album(request, slug):
return show_album(request, slug)