(function () { function renderJob(page, job, dialogOptions) { var html = ''; html += '
'; html += Globalize.translate('ValueDateCreated', parseISO8601Date(job.DateCreated, { toLocal: true }).toLocaleString()); html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += ''; $('.syncJobForm', page).html(html); SyncManager.renderForm({ elem: $('.formFields', page), dialogOptions: dialogOptions, dialogOptionsFn: getTargetDialogOptionsFn(dialogOptions), showName: true, readOnlySyncTarget: true }).then(function () { fillJobValues(page, job, dialogOptions); }); } function getTargetDialogOptionsFn(dialogOptions) { return function (targetId) { var deferred = $.Deferred(); deferred.resolveWith(null, [dialogOptions]); return deferred.promise(); }; } function getJobItemHtml(jobItem, index) { var html = ''; html += ''; var hasActions = ['Queued', 'Cancelled', 'Failed', 'ReadyToTransfer', 'Transferring', 'Converting', 'Synced'].indexOf(jobItem.Status) != -1; var imgUrl; if (jobItem.PrimaryImageItemId) { imgUrl = ApiClient.getImageUrl(jobItem.PrimaryImageItemId, { type: "Primary", width: 80, tag: jobItem.PrimaryImageTag, minScale: 1.5 }); } if (imgUrl) { html += ''; } else { html += ''; } html += ''; html += '
'; html += jobItem.ItemName; html += '
'; if (jobItem.Status == 'Failed') { html += '
'; } else { html += '
'; } html += Globalize.translate('SyncJobItemStatus' + jobItem.Status); if (jobItem.Status == 'Synced' && jobItem.IsMarkedForRemoval) { html += '
'; html += Globalize.translate('SyncJobItemStatusSyncedMarkForRemoval'); } html += '
'; html += '
'; html += ''; html += '
'; html += ''; if (hasActions) { html += ''; } else { html += ''; } html += ''; return html; } $.fn.lazyChildren = function () { for (var i = 0, length = this.length; i < length; i++) { ImageLoader.lazyChildren(this[i]); } return this; }; function renderJobItems(page, items) { var html = ''; html += '

' + Globalize.translate('HeaderItems') + '

'; html += '
'; var index = 0; html += items.map(function (i) { return getJobItemHtml(i, index++); }).join(''); html += '
'; var elem = $('.jobItems', page).html(html).lazyChildren(); $('.btnJobItemMenu', elem).on('click', function () { showJobItemMenu(this); }); } function showJobItemMenu(elem) { var page = $(elem).parents('.page'); var listItem = $(elem).parents('paper-icon-item'); var jobItemId = listItem.attr('data-itemid'); var status = listItem.attr('data-status'); var remove = listItem.attr('data-remove').toLowerCase() == 'true'; var menuItems = []; if (status == 'Failed') { menuItems.push({ name: Globalize.translate('ButtonQueueForRetry'), id: 'retry', ironIcon: 'check' }); } else if (status == 'Cancelled') { menuItems.push({ name: Globalize.translate('ButtonReenable'), id: 'retry', ironIcon: 'check' }); } else if (status == 'Queued' || status == 'Transferring' || status == 'Converting' || status == 'ReadyToTransfer') { menuItems.push({ name: Globalize.translate('ButtonCancelItem'), id: 'cancel', ironIcon: 'delete' }); } else if (status == 'Synced' && remove) { menuItems.push({ name: Globalize.translate('ButtonUnmarkForRemoval'), id: 'unmarkforremoval', ironIcon: 'check' }); } else if (status == 'Synced') { menuItems.push({ name: Globalize.translate('ButtonMarkForRemoval'), id: 'markforremoval', ironIcon: 'delete' }); } require(['actionsheet'], function () { ActionSheetElement.show({ items: menuItems, positionTo: elem, callback: function (id) { switch (id) { case 'cancel': cancelJobItem(page, jobItemId); break; case 'retry': retryJobItem(page, jobItemId); break; case 'markforremoval': markForRemoval(page, jobItemId); break; case 'unmarkforremoval': unMarkForRemoval(page, jobItemId); break; default: break; } } }); }); } function cancelJobItem(page, jobItemId) { // Need a timeout because jquery mobile will not show a popup while another is in the act of closing Dashboard.showLoadingMsg(); ApiClient.ajax({ type: "DELETE", url: ApiClient.getUrl('Sync/JobItems/' + jobItemId) }).then(function () { loadJob(page); }); } function markForRemoval(page, jobItemId) { ApiClient.ajax({ type: "POST", url: ApiClient.getUrl('Sync/JobItems/' + jobItemId + '/MarkForRemoval') }).then(function () { loadJob(page); }); } function unMarkForRemoval(page, jobItemId) { ApiClient.ajax({ type: "POST", url: ApiClient.getUrl('Sync/JobItems/' + jobItemId + '/UnmarkForRemoval') }).then(function () { loadJob(page); }); } function retryJobItem(page, jobItemId) { ApiClient.ajax({ type: "POST", url: ApiClient.getUrl('Sync/JobItems/' + jobItemId + '/Enable') }).then(function () { loadJob(page); }); } function fillJobValues(page, job, editOptions) { var txtSyncJobName = page.querySelector('#txtSyncJobName'); if (txtSyncJobName) { txtSyncJobName.value = job.Name; } $('#selectProfile', page).val(job.Profile || '').trigger('change'); $('#selectQuality', page).val(job.Quality || '').trigger('change'); $('#chkUnwatchedOnly', page).checked(job.UnwatchedOnly); $('#chkSyncNewContent', page).checked(job.SyncNewContent); $('#txtItemLimit', page).val(job.ItemLimit); if (job.Bitrate) { $('#txtBitrate', page).val(job.Bitrate / 1000000); } else { $('#txtBitrate', page).val(''); } var target = editOptions.Targets.filter(function (t) { return t.Id == job.TargetId; })[0]; var targetName = target ? target.Name : ''; $('#selectSyncTarget', page).val(targetName); } var _jobOptions; function loadJob(page) { Dashboard.showLoadingMsg(); var id = getParameterByName('id'); ApiClient.getJSON(ApiClient.getUrl('Sync/Jobs/' + id)).then(function (job) { ApiClient.getJSON(ApiClient.getUrl('Sync/Options', { UserId: job.UserId, ItemIds: (job.RequestedItemIds && job.RequestedItemIds.length ? job.RequestedItemIds.join('') : null), ParentId: job.ParentId, Category: job.Category, TargetId: job.TargetId })).then(function (options) { _jobOptions = options; renderJob(page, job, options); Dashboard.hideLoadingMsg(); }); }); ApiClient.getJSON(ApiClient.getUrl('Sync/JobItems', { JobId: id, AddMetadata: true })).then(function (result) { renderJobItems(page, result.Items); Dashboard.hideLoadingMsg(); }); } function loadJobInfo(page, job, jobItems) { renderJob(page, job, _jobOptions); renderJobItems(page, jobItems); Dashboard.hideLoadingMsg(); } function saveJob(page) { Dashboard.showLoadingMsg(); var id = getParameterByName('id'); ApiClient.getJSON(ApiClient.getUrl('Sync/Jobs/' + id)).then(function (job) { SyncManager.setJobValues(job, page); ApiClient.ajax({ url: ApiClient.getUrl('Sync/Jobs/' + id), type: 'POST', data: JSON.stringify(job), contentType: "application/json" }).then(function () { Dashboard.hideLoadingMsg(); Dashboard.alert(Globalize.translate('SettingsSaved')); }); }); } function onWebSocketMessage(e, msg) { var page = $.mobile.activePage; if (msg.MessageType == "SyncJob") { loadJobInfo(page, msg.Data.Job, msg.Data.JobItems); } } function startListening(page) { var startParams = "0,1500"; startParams += "," + getParameterByName('id'); if (ApiClient.isWebSocketOpen()) { ApiClient.sendWebSocketMessage("SyncJobStart", startParams); } } function stopListening() { if (ApiClient.isWebSocketOpen()) { ApiClient.sendWebSocketMessage("SyncJobStop", ""); } } function onSubmit() { var form = this; var page = $(form).parents('.page'); saveJob(page); return false; } $(document).on('pageinit', ".syncJobPage", function () { $('.syncJobForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', ".syncJobPage", function () { var page = this; loadJob(page); startListening(page); Events.on(ApiClient, "websocketmessage", onWebSocketMessage); }).on('pagebeforehide', ".syncJobPage", function () { var page = this; stopListening(); Events.off(ApiClient, "websocketmessage", onWebSocketMessage); }); })();