]> git.p6c8.net - jirafeau_mojo42.git/blobdiff - lib/functions.js.php
Update functions.php.
[jirafeau_mojo42.git] / lib / functions.js.php
index ebf8531ac414aeb26655f1ab68ed1efdab4d88ae..71ce17ba0dafdc18a92ae8a022d98677f9f7d6f8 100644 (file)
@@ -273,12 +273,18 @@ function control_selected_file_size(max_size, error_str)
     }
 }
 
+function XHRErrorHandler(e)
+{
+    var text = "${e.type}: ${e.loaded} bytes transferred"
+    console.log(text)
+}
+
 function pop_failure (e)
 {
-    var text = "An error occured";
+    var text = "<p>An error occured";
     if (typeof e !== 'undefined')
-        text = e;
-    text = "<p>" + text + "</p>";
+        text += ": " + e;
+    text += "</p>";
     document.getElementById('error_pop').innerHTML = e;
 
     document.getElementById('uploading').style.display = 'none';
@@ -339,8 +345,8 @@ function classic_upload (file, time, password, one_time, upload_password)
 
     var req = new XMLHttpRequest ();
     req.upload.addEventListener ("progress", upload_progress, false);
-    req.addEventListener ("error", pop_failure, false);
-    req.addEventListener ("abort", pop_failure, false);
+    req.addEventListener ("error", XHRErrorHandler, false);
+    req.addEventListener ("abort", XHRErrorHandler, false);
     req.onreadystatechange = function ()
     {
         if (req.readyState == 4 && req.status == 200)
@@ -412,8 +418,8 @@ function async_upload_start (max_size, file, time, password, one_time, upload_pa
     async_global_time = time;
 
     var req = new XMLHttpRequest ();
-    req.addEventListener ("error", pop_failure, false);
-    req.addEventListener ("abort", pop_failure, false);
+    req.addEventListener ("error", XHRErrorHandler, false);
+    req.addEventListener ("abort", XHRErrorHandler, false);
     req.onreadystatechange = function ()
     {
         if (req.readyState == 4 && req.status == 200)
@@ -484,8 +490,8 @@ function async_upload_push (code)
     }
     var req = new XMLHttpRequest ();
     req.upload.addEventListener ("progress", async_upload_progress, false);
-    req.addEventListener ("error", pop_failure, false);
-    req.addEventListener ("abort", pop_failure, false);
+    req.addEventListener ("error", XHRErrorHandler, false);
+    req.addEventListener ("abort", XHRErrorHandler, false);
     req.onreadystatechange = function ()
     {
         if (req.readyState == 4)
@@ -494,7 +500,16 @@ function async_upload_push (code)
             {
                 var res = req.responseText;
 
-                if (/^Error/.test(res))
+                // This error may be triggered when Jirafeau does not receive any file in POST.
+                // This may be due to bad php configuration where post_max_size is too low
+                // comparing to upload_max_filesize. Let's retry with lower file size.
+                if (res === "Error 23")
+                {
+                    async_global_max_size = Math.max(1, async_global_max_size - 500);
+                    async_upload_push (async_global_last_code);
+                    return;
+                }
+                else if (/^Error/.test(res))
                 {
                     pop_failure (res);
                     return;
@@ -504,15 +519,17 @@ function async_upload_push (code)
                 var code = res[0]
                 async_global_transfered = async_global_transfering;
                 async_upload_push (code);
+                return;
             }
             else
             {
                 if (req.status == 413) // Request Entity Too Large
                 {
                     // lower async_global_max_size and retry
-                    async_global_max_size = parseInt (async_global_max_size * 0.8);
+                    async_global_max_size = Math.max(1, parseInt (async_global_max_size * 0.8));
                 }
                 async_upload_push (async_global_last_code);
+                return;
             }
         }
     }
@@ -535,8 +552,8 @@ function async_upload_push (code)
 function async_upload_end (code)
 {
     var req = new XMLHttpRequest ();
-    req.addEventListener ("error", pop_failure, false);
-    req.addEventListener ("abort", pop_failure, false);
+    req.addEventListener ("error", XHRErrorHandler, false);
+    req.addEventListener ("abort", XHRErrorHandler, false);
     req.onreadystatechange = function ()
     {
         if (req.readyState == 4 && req.status == 200)

patrick-canterino.de