diff --git a/app/YtManagerApp/templates/YtManagerApp/js/common.js b/app/YtManagerApp/templates/YtManagerApp/js/common.js index aa2dfc5..0501a5d 100644 --- a/app/YtManagerApp/templates/YtManagerApp/js/common.js +++ b/app/YtManagerApp/templates/YtManagerApp/js/common.js @@ -198,6 +198,85 @@ function ajaxLink_Clicked() { return false; } +/// +/// Notifications +/// +const JOB_QUERY_INTERVAL = 1500; + + +function get_and_process_running_jobs() +{ + $.get("{% url 'ajax_get_running_jobs' %}") + .done(function(data) { + + let progress = $('#status-progress'); + let jobPanel = $('#job_panel'); + let jobTitle = jobPanel.find('#job_panel_title'); + let jobTitleNoJobs = jobPanel.find('#job_panel_no_jobs_title'); + let jobTemplate = jobPanel.find('#job_panel_item_template'); + + if (data.length > 0) { + + // Update status bar + if (data.length > 1) { + $('#status-message').text(`Running ${data.length} jobs...`); + } + else { + $('#status-message').text(`${data[0].description} | ${data[0].message}`); + } + + // Update global progress bar + let combinedProgress = 0; + for (let entry of data) { + combinedProgress += entry.progress; + } + + let percent = 100 * combinedProgress / data.length; + + progress.removeClass('invisible'); + let bar = progress.find('.progress-bar'); + bar.width(percent + '%'); + bar.text(`${percent.toFixed(0)}%`); + + // Update entries in job list + jobTitle.removeClass('collapse'); + jobTitleNoJobs.addClass('collapse'); + + data.sort(function (a, b) { return a.id - b.id }); + jobPanel.find('.job_entry').remove(); + + for (let entry of data) { + let jobEntry = jobTemplate.clone(); + jobEntry.attr('id', `job_${entry.id}`); + jobEntry.addClass('job_entry'); + jobEntry.removeClass('collapse'); + jobEntry.find('#job_panel_item_title').text(entry.description); + jobEntry.find('#job_panel_item_subtitle').text(entry.message); + + let entryPercent = 100 * entry.progress; + let jobEntryProgress = jobEntry.find('#job_panel_item_progress'); + jobEntryProgress.width(entryPercent + '%'); + jobEntryProgress.text(`${entryPercent.toFixed(0)}%`); + + jobEntry.appendTo(jobPanel); + } + + $('#btn_toggle_job_panel').dropdown('update'); + } + else { + progress.addClass('invisible'); + $('#status-message').text(""); + + jobTitle.addClass('collapse'); + jobTitleNoJobs.removeClass('collapse'); + jobPanel.find('.job_entry').remove(); + + $('#btn_toggle_job_panel').dropdown('update'); + } + }); +} + + /// /// Initialization /// @@ -205,4 +284,9 @@ $(document).ready(function () { $(".ajax-link").on("click", ajaxLink_Clicked); $("#btn_sync_now").on("click", syncNow); + $('[data-toggle="tooltip"]').tooltip() + + // Notifications + get_and_process_running_jobs(); + setInterval(get_and_process_running_jobs, JOB_QUERY_INTERVAL); }); diff --git a/app/YtManagerApp/templates/YtManagerApp/js/index.js b/app/YtManagerApp/templates/YtManagerApp/js/index.js index 7a7b79e..1fb7438 100644 --- a/app/YtManagerApp/templates/YtManagerApp/js/index.js +++ b/app/YtManagerApp/templates/YtManagerApp/js/index.js @@ -175,84 +175,6 @@ function videos_Submit(e) e.preventDefault(); } -/// -/// Notifications -/// -const JOB_QUERY_INTERVAL = 1500; - - -function get_and_process_running_jobs() -{ - $.get("{% url 'ajax_get_running_jobs' %}") - .done(function(data) { - - let progress = $('#status-progress'); - let jobPanel = $('#job_panel'); - let jobTitle = jobPanel.find('#job_panel_title'); - let jobTitleNoJobs = jobPanel.find('#job_panel_no_jobs_title'); - let jobTemplate = jobPanel.find('#job_panel_item_template'); - - if (data.length > 0) { - - // Update status bar - if (data.length > 1) { - $('#status-message').text(`Running ${data.length} jobs...`); - } - else { - $('#status-message').text(`${data[0].description} | ${data[0].message}`); - } - - // Update global progress bar - let combinedProgress = 0; - for (let entry of data) { - combinedProgress += entry.progress; - } - - let percent = 100 * combinedProgress / data.length; - - progress.removeClass('invisible'); - let bar = progress.find('.progress-bar'); - bar.width(percent + '%'); - bar.text(`${percent.toFixed(0)}%`); - - // Update entries in job list - jobTitle.removeClass('collapse'); - jobTitleNoJobs.addClass('collapse'); - - data.sort(function (a, b) { return a.id - b.id }); - jobPanel.find('.job_entry').remove(); - - for (let entry of data) { - let jobEntry = jobTemplate.clone(); - jobEntry.attr('id', `job_${entry.id}`); - jobEntry.addClass('job_entry'); - jobEntry.removeClass('collapse'); - jobEntry.find('#job_panel_item_title').text(entry.description); - jobEntry.find('#job_panel_item_subtitle').text(entry.message); - - let entryPercent = 100 * entry.progress; - let jobEntryProgress = jobEntry.find('#job_panel_item_progress'); - jobEntryProgress.width(entryPercent + '%'); - jobEntryProgress.text(`${entryPercent.toFixed(0)}%`); - - jobEntry.appendTo(jobPanel); - } - - $('#btn_toggle_job_panel').dropdown('update'); - } - else { - progress.addClass('invisible'); - $('#status-message').text(""); - - jobTitle.addClass('collapse'); - jobTitleNoJobs.removeClass('collapse'); - jobPanel.find('.job_entry').remove(); - - $('#btn_toggle_job_panel').dropdown('update'); - } - }); -} - /// /// Initialization /// @@ -292,8 +214,4 @@ $(document).ready(function () filters_form.find('select[name=results_per_page]').on('change', videos_ResetPageAndReloadWithTimer); videos_Reload(); - - // Notifications - get_and_process_running_jobs(); - setInterval(get_and_process_running_jobs, JOB_QUERY_INTERVAL); });