(function (window, $) {
var currentDialogOptions;
function submitJob(userId, syncOptions, form) {
if (!userId) {
throw new Error('userId cannot be null');
}
if (!syncOptions) {
throw new Error('syncOptions cannot be null');
}
if (!form) {
throw new Error('form cannot be null');
}
var target = $('#selectSyncTarget', form).val();
if (!target) {
Dashboard.alert(Globalize.translate('MessagePleaseSelectDeviceToSyncTo'));
return;
}
var options = {
userId: userId,
TargetId: target,
ParentId: syncOptions.ParentId,
Category: syncOptions.Category
};
setJobValues(options, form);
if (syncOptions.items && syncOptions.items.length) {
options.ItemIds = (syncOptions.items || []).map(function (i) {
return i.Id || i;
}).join(',');
}
ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("Sync/Jobs"),
data: JSON.stringify(options),
contentType: "application/json"
}).done(function () {
$('.syncPanel').panel('close');
$(window.SyncManager).trigger('jobsubmit');
Dashboard.alert(Globalize.translate('MessageSyncJobCreated'));
});
}
function setJobValues(job, form) {
var bitrate = $('#txtBitrate', form).val() || null;
if (bitrate) {
bitrate = parseFloat(bitrate) * 1000000;
}
job.Name = $('#txtSyncJobName', form).val();
job.Quality = $('#selectQuality', form).val() || null;
job.Profile = $('#selectProfile', form).val() || null;
job.Bitrate = bitrate;
job.ItemLimit = $('#txtItemLimit', form).val() || null;
job.SyncNewContent = $('#chkSyncNewContent', form).checked();
job.UnwatchedOnly = $('#chkUnwatchedOnly', form).checked();
}
function renderForm(options) {
var elem = options.elem;
var dialogOptions = options.dialogOptions;
var targets = dialogOptions.Targets;
var html = '';
if (options.showName || dialogOptions.Options.indexOf('Name') != -1) {
html += '
';
html += '';
html += '';
html += '
';
}
html += '';
html += '
';
if (options.readOnlySyncTarget) {
html += '
';
} else {
html += '
';
if (!targets.length) {
html += '
' + Globalize.translate('LabelSyncNoTargetsHelp') + '
';
html += '
';
}
}
html += '
';
html += '';
html += '
';
html += '
';
html += '
';
html += '
';
html += '
';
html += '';
html += '
';
html += '
';
html += '
';
html += '
';
html += '
';
html += '';
html += '
';
html += '
';
html += '';
html += '';
html += '
';
html += '
';
if (dialogOptions.Options.indexOf('UnwatchedOnly') != -1) {
html += '
';
html += '';
html += '
';
html += '
';
html += '
' + Globalize.translate('OptionSyncUnwatchedVideosOnlyHelp') + '
';
html += '
';
}
if (dialogOptions.Options.indexOf('SyncNewContent') != -1 ||
dialogOptions.Options.indexOf('ItemLimit') != -1) {
html += '
';
html += '';
html += '
' + Globalize.translate('HeaderAdvanced') + '
';
html += '
';
if (dialogOptions.Options.indexOf('SyncNewContent') != -1) {
html += '
';
html += '
';
html += '
';
html += '
';
html += '
' + Globalize.translate('OptionAutomaticallySyncNewContentHelp') + '
';
html += '
';
}
if (dialogOptions.Options.indexOf('ItemLimit') != -1) {
html += '
';
html += '
';
html += '
';
html += '
';
html += '
' + Globalize.translate('LabelItemLimitHelp') + '
';
html += '
';
}
html += '
';
html += '
';
}
//html += '';
//html += '';
$(elem).html(html).trigger('create');
$('#selectSyncTarget', elem).on('change', function () {
loadQualityOptions(elem, this.value, options.dialogOptionsFn);
}).trigger('change');
$('#selectProfile', elem).on('change', function () {
onProfileChange(elem, this.value);
}).trigger('change');
$('#selectQuality', elem).on('change', function () {
onQualityChange(elem, this.value);
}).trigger('change');
}
function showSyncMenu(options) {
var userId = Dashboard.getCurrentUserId();
var dialogOptionsQuery = {
UserId: userId,
ItemIds: (options.items || []).map(function (i) {
return i.Id || i;
}).join(','),
ParentId: options.ParentId,
Category: options.Category
};
ApiClient.getJSON(ApiClient.getUrl('Sync/Options', dialogOptionsQuery)).done(function (dialogOptions) {
currentDialogOptions = dialogOptions;
var html = '';
$(document.body).append(html);
var elem = $('.syncPanel').panel({}).trigger('create').panel("open").on("panelclose", function () {
$(this).off("panelclose").remove();
});
$('form', elem).on('submit', function () {
submitJob(userId, options, this);
return false;
});
renderForm({
elem: $('.formFields', elem),
dialogOptions: dialogOptions,
dialogOptionsFn: getTargetDialogOptionsFn(dialogOptionsQuery)
});
});
}
function getTargetDialogOptionsFn(query) {
return function (targetId) {
query.TargetId = targetId;
return ApiClient.getJSON(ApiClient.getUrl('Sync/Options', query));
};
}
function onProfileChange(form, profileId) {
var options = currentDialogOptions || {};
var option = (options.ProfileOptions || []).filter(function (o) {
return o.Id == profileId;
})[0];
if (option) {
$('.profileDescription', form).html(option.Description || '');
setQualityFieldVisible(form, options.QualityOptions.length > 0 && option.EnableQualityOptions && options.Options.indexOf('Quality') != -1);
} else {
$('.profileDescription', form).html('');
setQualityFieldVisible(form, options.QualityOptions.length > 0 && options.Options.indexOf('Quality') != -1);
}
}
function onQualityChange(form, qualityId) {
var options = currentDialogOptions || {};
var option = (options.QualityOptions || []).filter(function (o) {
return o.Id == qualityId;
})[0];
if (option) {
$('.qualityDescription', form).html(option.Description || '');
} else {
$('.qualityDescription', form).html('');
}
if (qualityId == 'custom') {
$('.fldBitrate', form).show();
$('#txtBitrate', form).attr('required', 'required');
} else {
$('.fldBitrate', form).hide();
$('#txtBitrate', form).removeAttr('required').val('');
}
}
function loadQualityOptions(form, targetId, dialogOptionsFn) {
dialogOptionsFn(targetId).done(function (options) {
renderTargetDialogOptions(form, options);
});
}
function setQualityFieldVisible(form, visible) {
if (visible) {
$('.fldQuality', form).show();
$('#selectQuality', form).attr('required', 'required');
} else {
$('.fldQuality', form).hide();
$('#selectQuality', form).removeAttr('required');
}
}
function renderTargetDialogOptions(form, options) {
currentDialogOptions = options;
if (options.ProfileOptions.length && options.Options.indexOf('Profile') != -1) {
$('.fldProfile', form).show();
$('#selectProfile', form).attr('required', 'required');
} else {
$('.fldProfile', form).hide();
$('#selectProfile', form).removeAttr('required');
}
setQualityFieldVisible(options.QualityOptions.length > 0);
$('#selectProfile', form).html(options.ProfileOptions.map(function (o) {
var selectedAttribute = o.IsDefault ? ' selected="selected"' : '';
return '';
}).join('')).trigger('change').selectmenu('refresh');
$('#selectQuality', form).html(options.QualityOptions.map(function (o) {
var selectedAttribute = o.IsDefault ? ' selected="selected"' : '';
return '';
}).join('')).trigger('change').selectmenu('refresh');
}
function isAvailable(item, user) {
return item.SupportsSync;
}
window.SyncManager = {
showMenu: showSyncMenu,
isAvailable: isAvailable,
renderForm: renderForm,
setJobValues: setJobValues
};
function showSyncButtonsPerUser(page) {
var apiClient = window.ApiClient;
if (!apiClient || !apiClient.getCurrentUserId()) {
return;
}
Dashboard.getCurrentUser().done(function (user) {
if (user.Policy.EnableSync) {
$('.categorySyncButton', page).show();
} else {
$('.categorySyncButton', page).hide();
}
});
}
function onCategorySyncButtonClick(page, button) {
var category = button.getAttribute('data-category');
var parentId = LibraryMenu.getTopParentId();
SyncManager.showMenu({
ParentId: parentId,
Category: category
});
}
$(document).on('pageinitdepends', ".libraryPage", function () {
var page = this;
$('.categorySyncButton', page).on('click', function () {
onCategorySyncButtonClick(page, this);
});
}).on('pageshowready', ".libraryPage", function () {
var page = this;
if (!Dashboard.isServerlessPage()) {
showSyncButtonsPerUser(page);
}
});
})(window, jQuery);