diff --git a/photologue/static/upload.js b/photologue/static/upload.js index e54c304..401bbd4 100644 --- a/photologue/static/upload.js +++ b/photologue/static/upload.js @@ -5,20 +5,21 @@ // When user drags files, register them in the file field const dropZone = document.getElementById('drop_zone'); const uploadInput = document.getElementById('id_file_field'); +const form = document.getElementById('upload_form') -dropZone.ondrop = function(e) { +dropZone.ondrop = function (e) { e.preventDefault(); this.className = 'upload-drop-zone'; console.log(e.dataTransfer.files) uploadInput.files = e.dataTransfer.files; } -dropZone.ondragover = function() { +dropZone.ondragover = function () { this.className = 'upload-drop-zone drop'; return false; } -dropZone.ondragleave = function() { +dropZone.ondragleave = function () { this.className = 'upload-drop-zone'; return false; } @@ -39,4 +40,93 @@ gallerySelectUpdate(); document.getElementById('upload_form').addEventListener('submit', (e) => { document.getElementById('submit-id-submit').disabled = true; document.getElementById('submit-id-submit').value = "Please be patient"; -}) +}); + + +submitbtn = document.getElementById('submit-id-submit'); +submitbtn.type = "button"; + +async function uplaodfnc() { + + console.log(uploadInput.files); + files = uploadInput.files; + submitbtn.disabled = true; + actual = 0; + submitbtn.value = "Please be patient 0% (" + actual + "/" + files.length + ")"; + + csrfvalue = document.getElementsByName("csrfmiddlewaretoken")[0].value; + + gallery_ID = gallerySelect.value; + + if (gallery_ID == "") { + // Create gallery + } + + total = files.length; + + fdata = new FormData(uploadInput.form); + fdata.delete("file_field"); + fdata.append("reptype", "json"); + console.log(fdata); + + const response = await fetch("/upload/", { + method: "POST", + body: fdata, + }); + returned = await response.json(); + + console.log(returned); + console.log(returned.code); + if (returned.code != 200) { + window.alert("There is an error in the form" + returned.error); + } + + // Upload files + for (let file of files) { + actual++; + sendform = new FormData(); + sendform.append("csrfmiddlewaretoken", csrfvalue); + sendform.append("file_field", file); + sendform.append("reptype", "json"); + sendform.append("gallery", returned.galleryID); + + try { + const response = await fetch("/upload/", { + method: "POST", + body: sendform, + }); + okpass = await response.ok; + console.log(file.name, okpass); + if ( !okpass) { + window.alert("Error with " + file.name + "code" + await response.code); + } + submitbtn.value = "Please be patient " + Math.round(100 * actual / total) + "% (" + actual + "/" + files.length + ")"; + + } catch (e) { + console.error(e); + } + + } + + fdata = new FormData(uploadInput.form); + fdata.delete("file_field"); + fdata.append("reptype", "json"); + fdata.append("end","end") + console.log(fdata); + + const response = await fetch("/upload/", { + method: "POST", + body: fdata, + }); + returned = await response.json(); + + submitbtn.value = "Upload Complete Please reload the page"; +} + +submitbtn.addEventListener("click", uplaodfnc); + +console.log("New Upload File"); + + + + diff --git a/photologue/views.py b/photologue/views.py index 088b40c..fbda394 100644 --- a/photologue/views.py +++ b/photologue/views.py @@ -12,6 +12,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMix from django.core.mail import mail_admins from django.db import IntegrityError from django.http import HttpResponse +from django.http import JsonResponse from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.text import slugify @@ -189,7 +190,17 @@ class GalleryUpload(PermissionRequiredMixin, FormView): def form_valid(self, form): # Get or create gallery + + if form.data.get("reptype","")=="json": + response_json = True + finish_json = form.data.get("end","")=="end" + else : + response_json = False + gallery = form.get_or_create_gallery() + + jsondata = {"galleryID":gallery.id,"code":200} + gallery_year = Path(str(gallery.date_start.year)) gallery_dir = gallery_year / gallery.slug @@ -207,6 +218,8 @@ class GalleryUpload(PermissionRequiredMixin, FormView): messages.error( self.request, f"{photo_file.name} was not recognized as an image" ) + jsondata["code"]=400 + jsondata["error"] = f"{photo_file.name} was not recognized as an image" continue title = f"{gallery.title} - {photo_file.name}" @@ -228,24 +241,38 @@ class GalleryUpload(PermissionRequiredMixin, FormView): uploaded_photo_name.append(photo_file.name) + # Notify user then managers n_success = len(uploaded_photo_name) - if already_exists: - messages.success( - self.request, - f"{n_success} photo(s) uploaded, {already_exists} photo(s) skipped as they already exist in this gallery.", - ) - else: - messages.success(self.request, f"{n_success} photo(s) uploaded.") + if not response_json : + if already_exists: + messages.success( + self.request, + f"{n_success} photo(s) uploaded, {already_exists} photo(s) skipped as they already exist in this gallery.", + ) + else: + messages.success(self.request, f"{n_success} photo(s) uploaded.") + # Notify administrators on new uploads gallery_url = reverse_lazy("photologue:pl-gallery", args=[gallery.slug]) gallery_url = self.request.build_absolute_uri(gallery_url) - if uploaded_photo_name: + if uploaded_photo_name and (not response_json): photos = ", ".join(uploaded_photo_name) mail_admins( subject=f"New upload from {self.request.user.username}", message=f"{self.request.user.username} has uploaded in <{gallery_url}>:\n{photos}", ) - return super().form_valid(form) + elif response_json and finish_json : + photos = ", ".join(uploaded_photo_name) + mail_admins( + subject=f"New continious upload from {self.request.user.username}", + message=f"{self.request.user.username} has uploaded multiples photo with continious upload in <{gallery_url}>", + ) + if response_json : + jsondata["uploadeds"] = uploaded_photo_name + return JsonResponse(jsondata) + + else : + return super().form_valid(form)