1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

sync updates

This commit is contained in:
Luke Pulverenti 2015-03-15 00:17:35 -04:00
parent 7c293a7dd1
commit 66845e0403
2 changed files with 247 additions and 148 deletions

View file

@ -1,5 +1,7 @@
(function (window, $) {
var currentDialogOptions;
function submitJob(userId, syncOptions, form) {
if (!userId) {
@ -22,12 +24,19 @@
return;
}
var quality = $('#selectQuality', form).val();
if (quality == 'custom') {
quality = $('#txtBitrate', form).val();
}
var options = {
userId: userId,
TargetId: target,
Quality: $('#selectQuality', form).val() || null,
Profile: $('#selectProfile', form).val() || null,
Quality: quality || null,
Name: $('#txtSyncJobName', form).val(),
@ -60,13 +69,122 @@
});
}
function renderForm(options) {
var elem = options.elem;
var dialogOptions = options.dialogOptions;
var targets = dialogOptions.Targets;
var html = '';
if (dialogOptions.Options.indexOf('Name') != -1) {
html += '<p>';
html += '<label for="txtSyncJobName">' + Globalize.translate('LabelSyncJobName') + '</label>';
html += '<input type="text" id="txtSyncJobName" class="txtSyncJobName" required="required" />';
html += '</p>';
}
html += '<div>';
html += '<label for="selectSyncTarget">' + Globalize.translate('LabelSyncTo') + '</label>';
html += '<select id="selectSyncTarget" required="required" data-mini="true">';
html += targets.map(function (t) {
return '<option value="' + t.Id + '">' + t.Name + '</option>';
}).join('');
html += '</select>';
if (!targets.length) {
html += '<div class="fieldDescription">' + Globalize.translate('LabelSyncNoTargetsHelp') + '</div>';
html += '<div class="fieldDescription"><a href="https://github.com/MediaBrowser/Wiki/wiki/Sync" target="_blank">' + Globalize.translate('ButtonLearnMore') + '</a></div>';
}
html += '</div>';
html += '<div class="fldProfile" style="display:none;">';
html += '<br/>';
html += '<label for="selectProfile">' + Globalize.translate('LabelProfile') + '</label>';
html += '<select id="selectProfile" data-mini="true">';
html += '</select>';
html += '<div class="fieldDescription profileDescription"></div>';
html += '</div>';
html += '<div class="fldQuality" style="display:none;">';
html += '<br/>';
html += '<label for="selectQuality">' + Globalize.translate('LabelQuality') + '</label>';
html += '<select id="selectQuality" data-mini="true" required="required">';
html += '</select>';
html += '<div class="fieldDescription qualityDescription"></div>';
html += '</div>';
html += '<div class="fldBitrate" style="display:none;">';
html += '<br/>';
html += '<div>';
html += '<label for="txtBitrate">' + Globalize.translate('LabelBitrateMbps') + '</label>';
html += '<input type="number" id="txtBitrate" step=".1" min=".1" />';
html += '</div>';
html += '</div>';
if (dialogOptions.Options.indexOf('SyncNewContent') != -1) {
html += '<br/>';
html += '<div>';
html += '<label for="chkSyncNewContent">' + Globalize.translate('OptionAutomaticallySyncNewContent') + '</label>';
html += '<input type="checkbox" id="chkSyncNewContent" data-mini="true" checked="checked" />';
html += '<div class="fieldDescription">' + Globalize.translate('OptionAutomaticallySyncNewContentHelp') + '</div>';
html += '</div>';
}
if (dialogOptions.Options.indexOf('UnwatchedOnly') != -1) {
html += '<br/>';
html += '<div>';
html += '<label for="chkUnwatchedOnly">' + Globalize.translate('OptionSyncUnwatchedVideosOnly') + '</label>';
html += '<input type="checkbox" id="chkUnwatchedOnly" data-mini="true" />';
html += '<div class="fieldDescription">' + Globalize.translate('OptionSyncUnwatchedVideosOnlyHelp') + '</div>';
html += '</div>';
}
if (dialogOptions.Options.indexOf('ItemLimit') != -1) {
html += '<br/>';
html += '<div>';
html += '<label for="txtItemLimit">' + Globalize.translate('LabelItemLimit') + '</label>';
html += '<input type="number" id="txtItemLimit" step="1" min="1" />';
html += '<div class="fieldDescription">' + Globalize.translate('LabelItemLimitHelp') + '</div>';
html += '</div>';
}
//html += '</div>';
//html += '</div>';
$(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) {
ItemIds: (options.items || []).map(function (i) {
return i.Id || i;
}).join(','),
@ -74,14 +192,16 @@
Category: options.Category
};
ApiClient.getJSON(ApiClient.getUrl('Sync/Options', dialogOptionsQuery)).done(function (result) {
ApiClient.getJSON(ApiClient.getUrl('Sync/Options', dialogOptionsQuery)).done(function (dialogOptions) {
var targets = result.Targets;
currentDialogOptions = dialogOptions;
var html = '<div data-role="panel" data-position="right" data-display="overlay" class="syncPanel" data-position-fixed="true" data-theme="a">';
html += '<div>';
html += '<form class="formSubmitSyncRequest">';
html += '<div style="margin:1em 0 1.5em;">';
html += '<h1 style="margin: 0;display:inline-block;vertical-align:middle;">' + Globalize.translate('SyncMedia') + '</h1>';
html += '<a class="accentButton accentButton-g" style="display:inline-block;vertical-align:middle;margin-top:0;margin-left: 20px;" href="https://github.com/MediaBrowser/Wiki/wiki/Sync" target="_blank">';
@ -90,76 +210,7 @@
html += '</a>';
html += '</div>';
html += '<form class="formSubmitSyncRequest">';
if (result.Options.indexOf('Name') != -1) {
html += '<p>';
html += '<label for="txtSyncJobName">' + Globalize.translate('LabelSyncJobName') + '</label>';
html += '<input type="text" id="txtSyncJobName" class="txtSyncJobName" required="required" />';
html += '</p>';
}
html += '<div>';
html += '<label for="selectSyncTarget">' + Globalize.translate('LabelSyncTo') + '</label>';
html += '<select id="selectSyncTarget" required="required" data-mini="true">';
html += targets.map(function (t) {
return '<option value="' + t.Id + '">' + t.Name + '</option>';
}).join('');
html += '</select>';
if (!targets.length) {
html += '<div class="fieldDescription">' + Globalize.translate('LabelSyncNoTargetsHelp') + '</div>';
html += '<div class="fieldDescription"><a href="https://github.com/MediaBrowser/Wiki/wiki/Sync" target="_blank">' + Globalize.translate('ButtonLearnMore') + '</a></div>';
}
html += '</div>';
html += '<br/>';
if (result.Options.indexOf('Quality') != -1) {
html += '<div>';
html += '<label for="selectQuality">' + Globalize.translate('LabelQuality') + '</label>';
html += '<select id="selectQuality" data-mini="true" required="required">';
html += '</select>';
html += '<div class="fieldDescription">' + Globalize.translate('LabelSyncQualityHelp') + '</div>';
html += '</div>';
}
//html += '<div data-role="collapsible" style="margin:1.5em 0">';
//html += '<h2>' + Globalize.translate('HeaderSettings') + '</h2>';
//html += '<div style="margin:0 -.5em 0 -.25em;">';
if (result.Options.indexOf('SyncNewContent') != -1) {
html += '<br/>';
html += '<div>';
html += '<label for="chkSyncNewContent">' + Globalize.translate('OptionAutomaticallySyncNewContent') + '</label>';
html += '<input type="checkbox" id="chkSyncNewContent" data-mini="true" checked="checked" />';
html += '<div class="fieldDescription">' + Globalize.translate('OptionAutomaticallySyncNewContentHelp') + '</div>';
html += '</div>';
}
if (result.Options.indexOf('UnwatchedOnly') != -1) {
html += '<br/>';
html += '<div>';
html += '<label for="chkUnwatchedOnly">' + Globalize.translate('OptionSyncUnwatchedVideosOnly') + '</label>';
html += '<input type="checkbox" id="chkUnwatchedOnly" data-mini="true" />';
html += '<div class="fieldDescription">' + Globalize.translate('OptionSyncUnwatchedVideosOnlyHelp') + '</div>';
html += '</div>';
}
if (result.Options.indexOf('ItemLimit') != -1) {
html += '<br/>';
html += '<div>';
html += '<label for="txtItemLimit">' + Globalize.translate('LabelItemLimit') + '</label>';
html += '<input type="number" id="txtItemLimit" step="1" min="1" />';
html += '<div class="fieldDescription">' + Globalize.translate('LabelItemLimitHelp') + '</div>';
html += '</div>';
}
//html += '</div>';
//html += '</div>';
html += '<div class="formFields"></div>';
html += '<br/>';
html += '<p>';
@ -176,35 +227,113 @@
$(this).off("panelclose").remove();
});
$('#selectSyncTarget', elem).on('change', function () {
loadQualityOptions(elem, this.value, dialogOptionsQuery);
}).trigger('change');
$('form', elem).on('submit', function () {
submitJob(userId, options, this);
return false;
});
renderForm({
elem: $('.formFields', elem),
dialogOptions: dialogOptions,
dialogOptionsFn: getTargetDialogOptionsFn(dialogOptionsQuery)
});
});
}
function loadQualityOptions(panel, targetId, dialogOptionsQuery) {
function getTargetDialogOptionsFn(query) {
dialogOptionsQuery.TargetId = targetId;
return function (targetId) {
ApiClient.getJSON(ApiClient.getUrl('Sync/Options', dialogOptionsQuery)).done(function (options) {
query.TargetId = targetId;
return ApiClient.getJSON(ApiClient.getUrl('Sync/Options', query));
};
}
$('#selectQuality', panel).html(options.QualityOptions.map(function (o) {
function onProfileChange(form, profileId) {
var selectedAttribute = o.IsDefault ? ' selected="selected"' : '';
return '<option value="' + o.Id + '"' + selectedAttribute + '>' + o.Name + '</option>';
var options = currentDialogOptions || {};
var option = (options.ProfileOptions || []).filter(function (o) {
return o.Id == profileId;
})[0];
}).join('')).selectmenu('refresh');
if (option) {
$('.profileDescription', form).html(option.Description || '');
setQualityFieldVisible(form, options.QualityOptions.length > 0 && option.EnableQualityOptions);
} else {
$('.profileDescription', form).html('');
setQualityFieldVisible(form, options.QualityOptions.length > 0);
}
}
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');
}
}
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) {
$('.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 '<option value="' + o.Id + '"' + selectedAttribute + '>' + o.Name + '</option>';
}).join('')).trigger('change').selectmenu('refresh');
$('#selectQuality', form).html(options.QualityOptions.map(function (o) {
var selectedAttribute = o.IsDefault ? ' selected="selected"' : '';
return '<option value="' + o.Id + '"' + selectedAttribute + '>' + o.Name + '</option>';
}).join('')).trigger('change').selectmenu('refresh');
}
function isAvailable(item, user) {
@ -215,8 +344,8 @@
window.SyncManager = {
showMenu: showSyncMenu,
isAvailable: isAvailable
isAvailable: isAvailable,
renderForm: renderForm
};