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

more sync movement

This commit is contained in:
Luke Pulverenti 2014-12-12 22:56:30 -05:00
parent ebe849f9b0
commit a2b7ece263
21 changed files with 128 additions and 85 deletions

View file

@ -1,25 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>${TitleServer}</title>
</head>
<body>
<div id="dashboardSyncPage" data-role="page" class="page type-interior devicesPage">
<div data-role="content">
<div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="devices.html" data-role="button">${TabDevices}</a>
<a href="devicesupload.html" data-role="button">${TabCameraUpload}</a>
<a href="dashboardsync.html" data-role="button" class="ui-btn-active">${TabSync}</a>
</div>
<div class="syncActivity">
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -12,7 +12,6 @@
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true"> <div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">${TabDevices}</a> <a href="#" data-role="button" class="ui-btn-active">${TabDevices}</a>
<a href="devicesupload.html" data-role="button">${TabCameraUpload}</a> <a href="devicesupload.html" data-role="button">${TabCameraUpload}</a>
<a href="dashboardsync.html" data-role="button">${TabSync}</a>
</div> </div>
<div class="readOnlyContent"> <div class="readOnlyContent">

View file

@ -79,11 +79,11 @@
ApiClient.getJSON(ApiClient.getUrl('Devices', { ApiClient.getJSON(ApiClient.getUrl('Devices', {
SupportsDeviceId: true SupportsUniqueIdentifier: true
})).done(function (devices) { })).done(function (result) {
load(page, devices); load(page, result.Items);
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
}); });

View file

@ -77,7 +77,7 @@
$.when(promise1, promise2).done(function (response1, response2) { $.when(promise1, promise2).done(function (response1, response2) {
load(page, response2[0], response1[0]); load(page, response2[0].Items, response1[0]);
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
}); });

View file

@ -1,6 +1,6 @@
(function ($, document) { (function ($, document) {
var view = LibraryBrowser.getDefaultItemsView('Poster', 'List'); var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
// The base query options // The base query options
var query = { var query = {

View file

@ -1543,7 +1543,9 @@
$('.btnSync', page).on('click', function () { $('.btnSync', page).on('click', function () {
SyncManager.showMenu([currentItem]); SyncManager.showMenu({
items: [currentItem]
});
}); });
$('.btnMoreCommands', page).on('click', function () { $('.btnMoreCommands', page).on('click', function () {

View file

@ -251,9 +251,8 @@
closeContextMenu(); closeContextMenu();
ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) { SyncManager.showMenu({
items: [id]
SyncManager.showMenu([item]);
}); });
return false; return false;
@ -743,22 +742,14 @@
return; return;
} }
ApiClient.getItems({ SyncManager.showMenu({
items: selection
ids: selection.join(','), });
fields: 'SyncInfo',
userId: Dashboard.getCurrentUserId()
}).done(function (result) {
SyncManager.showMenu(result.Items);
$(SyncManager).off('jobsubmit.librarylist').on('jobsubmit.librarylist', function () { $(SyncManager).off('jobsubmit.librarylist').on('jobsubmit.librarylist', function () {
hideSelections(page); hideSelections(page);
}); });
});
} }
function combineVersions(page) { function combineVersions(page) {

View file

@ -925,6 +925,15 @@
Limit: itemLimit Limit: itemLimit
}); });
}
else if (item.Type == "Playlist") {
promise = ApiClient.getInstantMixFromPlaylist(id, {
UserId: Dashboard.getCurrentUserId(),
Fields: getItemFields,
Limit: itemLimit
});
} }
else if (item.Type == "Audio") { else if (item.Type == "Audio") {

View file

@ -1,6 +1,6 @@
(function ($, document) { (function ($, document) {
var view = LibraryBrowser.getDefaultItemsView('Poster', 'List'); var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
// The base query options // The base query options
var query = { var query = {

View file

@ -1,6 +1,6 @@
(function ($, document) { (function ($, document) {
var view = LibraryBrowser.getDefaultItemsView('Poster', 'List'); var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
// The base query options // The base query options
var query = { var query = {

View file

@ -52,7 +52,7 @@
SortOrder: "Descending", SortOrder: "Descending",
IncludeItemTypes: "Movie", IncludeItemTypes: "Movie",
Filters: "IsResumable", Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 12 : (screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 6 : 3)), Limit: screenWidth >= 1920 ? 12 : (screenWidth >= 1600 ? 8 : 6),
Recursive: true, Recursive: true,
Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo",
CollapseBoxSetItems: false, CollapseBoxSetItems: false,
@ -85,7 +85,7 @@
userId: Dashboard.getCurrentUserId(), userId: Dashboard.getCurrentUserId(),
categoryLimit: screenWidth >= 1200 ? 4 : 3, categoryLimit: screenWidth >= 1200 ? 4 : 3,
ItemLimit: screenWidth >= 1920 ? 10 : (screenWidth >= 1600 ? 7 : (screenWidth >= 1200 ? 7 : 7)), ItemLimit: screenWidth >= 1920 ? 10 : (screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 7 : 6)),
Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo",
ImageTypeLimit: 1, ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb" EnableImageTypes: "Primary,Backdrop,Banner,Thumb"

View file

@ -760,6 +760,10 @@ var Dashboard = {
name: Globalize.translate('TabPlayback'), name: Globalize.translate('TabPlayback'),
href: "playbackconfiguration.html", href: "playbackconfiguration.html",
selected: page.hasClass('playbackConfigurationPage') selected: page.hasClass('playbackConfigurationPage')
}, {
name: Globalize.translate('TabSync'),
href: "syncactivity.html",
selected: page.hasClass('syncConfigurationPage')
}, { }, {
divider: true, divider: true,
name: Globalize.translate('TabAutoOrganize'), name: Globalize.translate('TabAutoOrganize'),
@ -1258,7 +1262,7 @@ var Dashboard = {
PlayableMediaTypes: "Audio,Video", PlayableMediaTypes: "Audio,Video",
SupportedCommands: Dashboard.getSupportedRemoteCommands().join(','), SupportedCommands: Dashboard.getSupportedRemoteCommands().join(','),
SupportsDeviceId: false SupportsUniqueIdentifier: false
}; };
window.ConnectionManager = new MediaBrowser.ConnectionManager(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities); window.ConnectionManager = new MediaBrowser.ConnectionManager(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities);

View file

@ -1,6 +1,18 @@
(function (window, $) { (function (window, $) {
function submitJob(userId, items, form) { 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 = $('.radioSync:checked', form).get().map(function (c) { var target = $('.radioSync:checked', form).get().map(function (c) {
@ -10,7 +22,7 @@
if (!target) { if (!target) {
Dashboard.alert('Please select a device to sync to.'); Dashboard.alert(Globalize.translate('MessagePleaseSelectDeviceToSyncTo'));
return; return;
} }
@ -19,8 +31,8 @@
userId: userId, userId: userId,
TargetId: target, TargetId: target,
ItemIds: items.map(function (i) { ItemIds: syncOptions.items.map(function (i) {
return i.Id; return i.Id || i;
}).join(','), }).join(','),
Quality: $('.radioSyncQuality', form)[0].getAttribute('data-value'), Quality: $('.radioSyncQuality', form)[0].getAttribute('data-value'),
@ -39,10 +51,11 @@
$('.syncPanel').panel('close'); $('.syncPanel').panel('close');
$(window.SyncManager).trigger('jobsubmit'); $(window.SyncManager).trigger('jobsubmit');
Dashboard.alert(Globalize.translate('MessageSyncJobCreated'));
}); });
} }
function showSyncMenu(items) { function showSyncMenu(options) {
var userId = Dashboard.getCurrentUserId(); var userId = Dashboard.getCurrentUserId();
@ -59,17 +72,17 @@
html += '<form class="formSubmitSyncRequest">'; html += '<form class="formSubmitSyncRequest">';
if (items.length > 1) { if (options.items.length > 1) {
html += '<p>'; html += '<p>';
html += '<label for="txtSyncJobName">Sync job name:</label>'; html += '<label for="txtSyncJobName">' + Globalize.translate('LabelSyncJobName') + '</label>';
html += '<input type="text" id="txtSyncJobName" class="txtSyncJobName" required="required" />'; html += '<input type="text" id="txtSyncJobName" class="txtSyncJobName" required="required" />';
html += '</p>'; html += '</p>';
} }
html += '<div>'; html += '<div>';
html += '<fieldset data-role="controlgroup">'; html += '<fieldset data-role="controlgroup">';
html += '<legend>Sync to:</legend>'; html += '<legend>' + Globalize.translate('LabelSyncTo') + '</legend>';
var index = 0; var index = 0;
@ -92,19 +105,19 @@
html += '<div>'; html += '<div>';
html += '<fieldset data-role="controlgroup">'; html += '<fieldset data-role="controlgroup">';
html += '<legend>Quality:</legend>'; html += '<legend>' + Globalize.translate('LabelQuality') + '</legend>';
html += '<label for="radioHighSyncQuality">High</label>'; html += '<label for="radioHighSyncQuality">' + Globalize.translate('OptionHigh') + '</label>';
html += '<input type="radio" id="radioHighSyncQuality" name="radioSyncQuality" checked="checked" class="radioSyncQuality" data-value="High" />'; html += '<input type="radio" id="radioHighSyncQuality" name="radioSyncQuality" checked="checked" class="radioSyncQuality" data-value="High" />';
html += '<label for="radioMediumSyncQuality">Medium</label>'; html += '<label for="radioMediumSyncQuality">' + Globalize.translate('OptionMedium') + '</label>';
html += '<input type="radio" id="radioMediumSyncQuality" name="radioSyncQuality" class="radioSyncQuality" data-value="Medium" />'; html += '<input type="radio" id="radioMediumSyncQuality" name="radioSyncQuality" class="radioSyncQuality" data-value="Medium" />';
html += '<label for="radioLowSyncQuality">Low</label>'; html += '<label for="radioLowSyncQuality">' + Globalize.translate('OptionLow') + '</label>';
html += '<input type="radio" id="radioLowSyncQuality" name="radioSyncQuality" class="radioSyncQuality" data-value="Low" />'; html += '<input type="radio" id="radioLowSyncQuality" name="radioSyncQuality" class="radioSyncQuality" data-value="Low" />';
html += '</fieldset>'; html += '</fieldset>';
html += '</div>'; html += '</div>';
html += '<br/>'; html += '<br/>';
html += '<p>'; html += '<p>';
html += '<button type="submit" data-icon="refresh" data-theme="b">Sync</button>'; html += '<button type="submit" data-icon="refresh" data-theme="b">' + Globalize.translate('ButtonSync') + '</button>';
html += '</p>'; html += '</p>';
html += '</form>'; html += '</form>';
@ -119,7 +132,7 @@
$('form', elem).on('submit', function () { $('form', elem).on('submit', function () {
submitJob(userId, items, this); submitJob(userId, options, this);
return false; return false;
}); });
}); });

View file

@ -60,6 +60,7 @@
width: 400, width: 400,
tag: job.PrimaryImageTag tag: job.PrimaryImageTag
}); });
style = "background-position:center center;";
} else { } else {
style = "background-color:#38c;background-position:center center;"; style = "background-color:#38c;background-position:center center;";
imgUrl = "css/images/items/detail/video.png"; imgUrl = "css/images/items/detail/video.png";
@ -80,16 +81,8 @@
if (job.Status == 'Completed') { if (job.Status == 'Completed') {
html += '<div class="playedIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>'; html += '<div class="playedIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
} }
else if (job.Status == 'Queued') { else if (job.Status == 'CompletedWithError') {
} html += '<div class="playedIndicator" style="background-color:#cc0000;"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
else if (job.Status == 'Transcoding' || job.Status == 'Transferring') {
html += '<div class="playedIndicator"><div class="ui-icon-refresh ui-btn-icon-notext"></div></div>';
}
else if (job.Status == 'Cancelled') {
html += '<div class="playedIndicator" style="background-color:#FF6A00;"><div class="ui-icon-minus ui-btn-icon-notext"></div></div>';
}
else if (job.Status == 'TranscodingFailed') {
html += '<div class="playedIndicator" style="background-color:#cc0000;"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>';
} }
// cardContent // cardContent
@ -215,13 +208,13 @@
}); });
} }
$(document).on('pageshow', "#dashboardSyncPage", function () { $(document).on('pageshow', "#syncActivityPage", function () {
var page = this; var page = this;
reloadData(page); reloadData(page);
}).on('pageinit', "#dashboardSyncPage", function () { }).on('pageinit', "#syncActivityPage", function () {
var page = this; var page = this;

View file

@ -0,0 +1 @@


View file

@ -2,7 +2,6 @@
$(document).on('pagebeforeshow', "#tvNextUpPage", function () { $(document).on('pagebeforeshow', "#tvNextUpPage", function () {
var screenWidth = $(window).width();
var userId = Dashboard.getCurrentUserId(); var userId = Dashboard.getCurrentUserId();
var parentId = LibraryMenu.getTopParentId(); var parentId = LibraryMenu.getTopParentId();
@ -30,7 +29,7 @@
showParentTitle: false, showParentTitle: false,
showUnplayedIndicator: false, showUnplayedIndicator: false,
showChildCountIndicator: true, showChildCountIndicator: true,
overlayText: screenWidth >= 600, overlayText: true,
lazy: true lazy: true
})).trigger('create').createCardMenus(); })).trigger('create').createCardMenus();

View file

@ -89,8 +89,6 @@
function loadResume(page) { function loadResume(page) {
var screenWidth = $(window).width();
var parentId = LibraryMenu.getTopParentId(); var parentId = LibraryMenu.getTopParentId();
var options = { var options = {
@ -99,7 +97,7 @@
SortOrder: "Descending", SortOrder: "Descending",
IncludeItemTypes: "Episode", IncludeItemTypes: "Episode",
Filters: "IsResumable", Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 6 : (screenWidth >= 1200 ? 6 : 4), Limit: 6,
Recursive: true, Recursive: true,
Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo", Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo",
ExcludeLocationTypes: "Virtual", ExcludeLocationTypes: "Virtual",

View file

@ -1,6 +1,6 @@
(function ($, document) { (function ($, document) {
var view = LibraryBrowser.getDefaultItemsView('Thumb', 'List'); var view = LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb');
// The base query options // The base query options
var query = { var query = {

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<title>${TitleSync}</title>
</head>
<body>
<div id="syncActivityPage" data-role="page" class="page type-interior syncConfigurationPage">
<div data-role="content">
<div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">${TabActivity}</a>
<a href="syncsettings.html" data-role="button">${TabSettings}</a>
</div>
<div class="syncActivity">
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<title>${TitleSync}</title>
</head>
<body>
<div id="syncSettingsPage" data-role="page" class="page type-interior syncConfigurationPage">
<div data-role="content">
<div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="syncactivity.html" data-role="button">${TabActivity}</a>
<a href="#" data-role="button" class="ui-btn-active">${TabSettings}</a>
</div>
<div class="syncActivity">
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -1104,6 +1104,17 @@
}); });
}; };
self.getInstantMixFromPlaylist = function (itemId, options) {
var url = self.getUrl("Playlists/" + itemId + "/InstantMix", options);
return self.ajax({
type: "GET",
url: url,
dataType: "json"
});
};
self.getEpisodes = function (itemId, options) { self.getEpisodes = function (itemId, options) {
var url = self.getUrl("Shows/" + itemId + "/Episodes", options); var url = self.getUrl("Shows/" + itemId + "/Episodes", options);