jQuery(document).ready(function ($) { $('[data-toggle="tooltip"]').tooltip(); $('.color-field').wpColorPicker(); var iupStopLoop = false; var iupProcessingLoop = false; var iupLoopErrors = 0; var iupAjaxCall = false; //show a confirmation warning if leaving page during a bulk action $(window).on("unload", function () { if (iupProcessingLoop) { return iup_data.strings.leave_confirmation; } }); //show an error at top of main settings page var showError = function (error_message) { $('#iup-error').text(error_message.substr(0, 200)).show(); $('html, body').animate({scrollTop: 0}, 1000); }; var buildFilelist = function (remaining_dirs, nonce = '') { if (iupStopLoop) { iupStopLoop = false; iupProcessingLoop = false; return false; } iupProcessingLoop = true; var data = {remaining_dirs: remaining_dirs}; if (nonce) { data.nonce = nonce; } else { data.nonce = iup_data.nonce.scan; } $.post( ajaxurl + '?action=infinite-uploads-filelist', data, function (json) { if (json.success) { $('#iup-scan-storage').text(json.data.local_size); $('#iup-scan-files').text(json.data.local_files); $('#iup-scan-progress').show(); if (!json.data.is_done) { buildFilelist( json.data.remaining_dirs, json.data.nonce ); } else { iupProcessingLoop = false; location.reload(); return true; } } else { showError(json.data); $('.modal').modal('hide'); } }, 'json' ).fail(function () { showError(iup_data.strings.ajax_error); $('.modal').modal('hide'); }); }; var fetchRemoteFilelist = function (next_token, nonce = '') { if (iupStopLoop) { iupStopLoop = false; iupProcessingLoop = false; return false; } iupProcessingLoop = true; var data = {next_token: next_token}; if (nonce) { data.nonce = nonce; } else { data.nonce = iup_data.nonce.scan; } $.post( ajaxurl + '?action=infinite-uploads-remote-filelist', data, function (json) { if (json.success) { $('#iup-scan-remote-storage').text( json.data.cloud_size ); $('#iup-scan-remote-files').text(json.data.cloud_files); $('#iup-scan-remote-progress').show(); if (!json.data.is_done) { fetchRemoteFilelist( json.data.next_token, json.data.nonce ); } else { if ('upload' === window.iupNextStep) { //update values in next modal $('#iup-progress-size').text( json.data.remaining_size ); $('#iup-progress-files').text( json.data.remaining_files ); if ('0' == json.data.remaining_files) { $('#iup-upload-progress').hide(); } else { $('#iup-upload-progress').show(); } $('#iup-sync-progress-bar') .css('width', json.data.pcnt_complete + '%') .attr( 'aria-valuenow', json.data.pcnt_complete ) .text(json.data.pcnt_complete + '%'); $('#iup-sync-button').attr( 'data-target', '#upload-modal' ); $('.modal').modal('hide'); $('#upload-modal').modal('show'); } else if ('download' === window.iupNextStep) { $('.modal').modal('hide'); $('#download-modal').modal('show'); } else { location.reload(); } } } else { showError(json.data); $('.modal').modal('hide'); } }, 'json' ).fail(function () { showError(iup_data.strings.ajax_error); $('.modal').modal('hide'); }); }; var syncFilelist = function (nonce = '') { if (iupStopLoop) { iupStopLoop = false; iupProcessingLoop = false; return false; } iupProcessingLoop = true; var data = {}; if (nonce) { data.nonce = nonce; } else { data.nonce = iup_data.nonce.sync; } iupAjaxCall = $.post( ajaxurl + '?action=infinite-uploads-sync', data, function (json) { iupLoopErrors = 0; if (json.success) { //$('.iup-progress-pcnt').text(json.data.pcnt_complete); $('#iup-progress-size').text(json.data.remaining_size); $('#iup-progress-files').text( json.data.remaining_files ); $('#iup-upload-progress').show(); $('#iup-sync-progress-bar') .css('width', json.data.pcnt_complete + '%') .attr('aria-valuenow', json.data.pcnt_complete) .text(json.data.pcnt_complete + '%'); if (!json.data.is_done) { data.nonce = json.data.nonce; //save for future errors syncFilelist(json.data.nonce); } else { iupStopLoop = true; $('#iup-upload-progress').hide(); //update values in next modal $('#iup-enable-errors span').text( json.data.permanent_errors ); if (json.data.permanent_errors) { $('.iup-enable-errors').show(); } $('#iup-sync-button').attr( 'data-target', '#enable-modal' ); $('.modal').modal('hide'); $('#enable-modal').modal('show'); } if ( Array.isArray(json.data.errors) && json.data.errors.length ) { $.each(json.data.errors, function (i, value) { $('#iup-sync-errors ul').append( '
  • ' + value + '
  • ' ); }); $('#iup-sync-errors').show(); var scroll = $('#iup-sync-errors')[0].scrollHeight; $('#iup-sync-errors').animate( {scrollTop: scroll}, 5000 ); } } else { showError(json.data); $('.modal').modal('hide'); } }, 'json' ).fail(function () { //if we get an error like 504 try up to 6 times with an exponential backoff to let the server cool down before giving up. iupLoopErrors++; if (iupLoopErrors > 6) { showError(iup_data.strings.ajax_error); $('.modal').modal('hide'); iupLoopErrors = 0; iupProcessingLoop = false; } else { var exponentialBackoff = Math.floor( Math.pow(iupLoopErrors, 2.5) * 1000 ); //max 90s console.log( 'Server error. Waiting ' + exponentialBackoff + 'ms before retrying' ); setTimeout(function () { syncFilelist(data.nonce); }, exponentialBackoff); } }); }; var getSyncStatus = function () { if (!iupProcessingLoop) { return false; } $.get( ajaxurl + '?action=infinite-uploads-status', function (json) { if (json.success) { $('#iup-progress-size').text(json.data.remaining_size); $('#iup-progress-files').text( json.data.remaining_files ); $('#iup-upload-progress').show(); $('#iup-sync-progress-bar') .css('width', json.data.pcnt_complete + '%') .attr('aria-valuenow', json.data.pcnt_complete) .text(json.data.pcnt_complete + '%'); } else { showError(json.data); } }, 'json' ) .fail(function () { showError(iup_data.strings.ajax_error); }) .always(function () { setTimeout(function () { getSyncStatus(); }, 15000); }); }; var deleteFiles = function () { if (iupStopLoop) { iupStopLoop = false; return false; } $.post( ajaxurl + '?action=infinite-uploads-delete', {nonce: iup_data.nonce.delete}, function (json) { if (json.success) { //$('.iup-progress-pcnt').text(json.data.pcnt_complete); $('#iup-delete-size').text(json.data.deletable_size); $('#iup-delete-files').text(json.data.deletable_files); if (!json.data.is_done) { deleteFiles(); } else { location.reload(); return true; } } else { showError(json.data); $('.modal').modal('hide'); } }, 'json' ).fail(function () { showError(iup_data.strings.ajax_error); $('.modal').modal('hide'); }); }; var downloadFiles = function (nonce = '') { if (iupStopLoop) { iupStopLoop = false; iupProcessingLoop = false; return false; } iupProcessingLoop = true; var data = {}; if (nonce) { data.nonce = nonce; } else { data.nonce = iup_data.nonce.download; } $.post( ajaxurl + '?action=infinite-uploads-download', data, function (json) { iupLoopErrors = 0; if (json.success) { //$('.iup-progress-pcnt').text(json.data.pcnt_complete); $('#iup-download-size').text(json.data.deleted_size); $('#iup-download-files').text(json.data.deleted_files); $('#iup-download-progress').show(); $('#iup-download-progress-bar') .css('width', json.data.pcnt_downloaded + '%') .attr('aria-valuenow', json.data.pcnt_downloaded) .text(json.data.pcnt_downloaded + '%'); if (!json.data.is_done) { data.nonce = json.data.nonce; //save for future errors downloadFiles(json.data.nonce); } else { iupProcessingLoop = false; location.reload(); return true; } if ( Array.isArray(json.data.errors) && json.data.errors.length ) { $.each(json.data.errors, function (i, value) { $('#iup-download-errors ul').append( '
  • ' + value + '
  • ' ); }); $('#iup-download-errors').show(); var scroll = $('#iup-download-errors')[0] .scrollHeight; $('#iup-download-errors').animate( {scrollTop: scroll}, 5000 ); } } else { showError(json.data); $('.modal').modal('hide'); } }, 'json' ).fail(function () { //if we get an error like 504 try up to 6 times before giving up. iupLoopErrors++; if (iupLoopErrors > 6) { showError(iup_data.strings.ajax_error); $('.modal').modal('hide'); iupLoopErrors = 0; iupProcessingLoop = false; } else { var exponentialBackoff = Math.floor( Math.pow(iupLoopErrors, 2.5) * 1000 ); //max 90s console.log( 'Server error. Waiting ' + exponentialBackoff + 'ms before retrying' ); setTimeout(function () { downloadFiles(data.nonce); }, exponentialBackoff); } }); }; //Scan $('#scan-modal') .on('show.bs.modal', function () { $('#iup-error').hide(); iupStopLoop = false; buildFilelist([]); }) .on('hide.bs.modal', function () { iupStopLoop = true; iupProcessingLoop = false; }); //Compare to live $('#scan-remote-modal') .on('show.bs.modal', function (e) { $('#iup-error').hide(); iupStopLoop = false; var button = $(e.relatedTarget); // Button that triggered the modal window.iupNextStep = button.data('next'); // Extract info from data-* attributes fetchRemoteFilelist(null); }) .on('hide.bs.modal', function () { iupStopLoop = true; iupProcessingLoop = false; }); //Sync $('#upload-modal') .on('show.bs.modal', function () { $('.iup-enable-errors').hide(); //hide errors on enable modal $('#iup-collapse-errors').collapse('hide'); $('#iup-error').hide(); $('#iup-sync-errors').hide(); $('#iup-sync-errors ul').empty(); iupStopLoop = false; syncFilelist(); setTimeout(function () { getSyncStatus(); }, 15000); }) .on('shown.bs.modal', function () { $('#scan-remote-modal').modal('hide'); }) .on('hide.bs.modal', function () { iupStopLoop = true; iupProcessingLoop = false; iupAjaxCall.abort(); }); //Make sure upload modal closes $('#enable-modal') .on('shown.bs.modal', function () { $('#upload-modal').modal('hide'); }) .on('hidden.bs.modal', function () { $('#iup-enable-spinner').addClass('text-hide'); $('#iup-enable-button').show(); }); $('#iup-collapse-errors').on('show.bs.collapse', function () { // load up list of errors via ajax $.get( ajaxurl + '?action=infinite-uploads-sync-errors', function (json) { if (json.success) { $('#iup-collapse-errors .list-group').html(json.data); } }, 'json' ); }); $('#iup-resync-button').on('click', function (e) { $('.iup-enable-errors').hide(); //hide errors on enable modal $('#iup-collapse-errors').collapse('hide'); $('#iup-enable-button').hide(); $('#iup-enable-spinner').removeClass('text-hide'); $.post( ajaxurl + '?action=infinite-uploads-reset-errors', {foo: 'bar'}, function (json) { if (json.success) { $('.modal').modal('hide'); $('#upload-modal').modal('show'); return true; } }, 'json' ).fail(function () { showError(iup_data.strings.ajax_error); $('.modal').modal('hide'); }); }); //Download $('#download-modal') .on('show.bs.modal', function () { $('#iup-error').hide(); $('#iup-download-errors').hide(); $('#iup-download-errors ul').empty(); iupStopLoop = false; downloadFiles(); }) .on('hide.bs.modal', function () { iupStopLoop = true; iupProcessingLoop = false; }); //Delete $('#delete-modal') .on('show.bs.modal', function () { $('#iup-error').hide(); iupStopLoop = false; $('#iup-delete-local-button').show(); $('#iup-delete-local-spinner').hide(); }) .on('hide.bs.modal', function () { iupStopLoop = true; }); //Delete local files $('#iup-delete-local-button').on('click', function () { $(this).hide(); $('#iup-delete-local-spinner').show(); deleteFiles(); }); //Enable infinite uploads $('#iup-enable-button').on('click', function () { $('.iup-enable-errors').hide(); //hide errors on enable modal $('#iup-collapse-errors').collapse('hide'); $('#iup-enable-button').hide(); $('#iup-enable-spinner').removeClass('text-hide'); $.post( ajaxurl + '?action=infinite-uploads-toggle', {enabled: true, nonce: iup_data.nonce.toggle}, function (json) { if (json.success) { location.reload(); return true; } }, 'json' ).fail(function () { showError(iup_data.strings.ajax_error); $('#iup-enable-spinner').addClass('text-hide'); $('#iup-enable-button').show(); $('.modal').modal('hide'); }); }); //Enable video cloud $('#iup-enable-video-button').on('click', function () { $('#iup-enable-video-button').hide(); $('#iup-enable-video-spinner').removeClass('d-none').addClass('d-block'); $.post( ajaxurl + '?action=infinite-uploads-video-activate', {nonce: iup_data.nonce.video}, function (json) { if (json.success) { location.reload(); return true; } else { $('#iup-enable-video-spinner').addClass('d-none').removeClass('d-block'); $('#iup-enable-video-button').show(); } }, 'json' ).fail(function () { showError(iup_data.strings.ajax_error); $('#iup-enable-video-spinner').addClass('d-none').removeClass('d-block'); $('#iup-enable-video-button').show(); }); }); //refresh api data $('.iup-refresh-icon .dashicons').on('click', function () { $(this).hide(); $('.iup-refresh-icon .spinner-grow').removeClass('text-hide'); window.location = $(this).attr('data-target'); }); //Charts var bandwidthFormat = function (bytes) { if (bytes < 1024) { return bytes + ' B'; } else if (bytes < 1024 * 1024) { return Math.round(bytes / 1024) + ' KB'; } else if (bytes < 1024 * 1024 * 1024) { return Math.round((bytes / 1024 / 1024) * 10) / 10 + ' MB'; } else { return ( Math.round((bytes / 1024 / 1024 / 1024) * 100) / 100 + ' GB' ); } }; var sizelabel = function (tooltipItem, data) { var label = ' ' + data.labels[tooltipItem.index] || ''; return label; }; window.onload = function () { var pie1 = document.getElementById('iup-local-pie'); if (pie1) { var config_local = { type: 'pie', data: iup_data.local_types, options: { responsive: true, legend: false, tooltips: { callbacks: { label: sizelabel, }, backgroundColor: '#F1F1F1', bodyFontColor: '#2A2A2A', }, title: { display: true, position: 'bottom', fontSize: 18, fontStyle: 'normal', text: iup_data.local_types.total, }, }, }; var ctx = pie1.getContext('2d'); window.myPieLocal = new Chart(ctx, config_local); } var pie2 = document.getElementById('iup-cloud-pie'); if (pie2) { var config_cloud = { type: 'pie', data: iup_data.cloud_types, options: { responsive: true, legend: false, tooltips: { callbacks: { label: sizelabel, }, backgroundColor: '#F1F1F1', bodyFontColor: '#2A2A2A', }, title: { display: true, position: 'bottom', fontSize: 18, fontStyle: 'normal', text: iup_data.cloud_types.total, }, }, }; var ctx = pie2.getContext('2d'); window.myPieCloud = new Chart(ctx, config_cloud); } }; });