diff --git a/dashboard-ui/devices.html b/dashboard-ui/devices.html index f075ded563..72c3ebbab5 100644 --- a/dashboard-ui/devices.html +++ b/dashboard-ui/devices.html @@ -12,7 +12,7 @@
${TabDevices} ${TabCameraUpload} - + ${TabSync}
diff --git a/dashboard-ui/episodes.html b/dashboard-ui/episodes.html index 9a743d1260..ea6694ab26 100644 --- a/dashboard-ui/episodes.html +++ b/dashboard-ui/episodes.html @@ -27,6 +27,7 @@
+
diff --git a/dashboard-ui/movies.html b/dashboard-ui/movies.html index f035945d21..c9fd89bf6d 100644 --- a/dashboard-ui/movies.html +++ b/dashboard-ui/movies.html @@ -29,6 +29,7 @@ + diff --git a/dashboard-ui/musicalbumartists.html b/dashboard-ui/musicalbumartists.html index 5d271c895f..d8e938830f 100644 --- a/dashboard-ui/musicalbumartists.html +++ b/dashboard-ui/musicalbumartists.html @@ -22,8 +22,9 @@
diff --git a/dashboard-ui/musicalbums.html b/dashboard-ui/musicalbums.html index 0d9ad9850d..2acc0ba255 100644 --- a/dashboard-ui/musicalbums.html +++ b/dashboard-ui/musicalbums.html @@ -21,8 +21,9 @@
diff --git a/dashboard-ui/musicartists.html b/dashboard-ui/musicartists.html index 95de0f2042..70516d73d6 100644 --- a/dashboard-ui/musicartists.html +++ b/dashboard-ui/musicartists.html @@ -22,8 +22,9 @@
diff --git a/dashboard-ui/musicgenres.html b/dashboard-ui/musicgenres.html index 7ba5dd015b..49679c5786 100644 --- a/dashboard-ui/musicgenres.html +++ b/dashboard-ui/musicgenres.html @@ -19,8 +19,9 @@
diff --git a/dashboard-ui/scripts/channelitems.js b/dashboard-ui/scripts/channelitems.js index 3128c408a4..c6ae5201b0 100644 --- a/dashboard-ui/scripts/channelitems.js +++ b/dashboard-ui/scripts/channelitems.js @@ -7,7 +7,7 @@ SortBy: "", SortOrder: "Ascending", - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", StartIndex: 0 }; diff --git a/dashboard-ui/scripts/dashboardsync.js b/dashboard-ui/scripts/dashboardsync.js index 9fd106d5f8..a0ec06d512 100644 --- a/dashboard-ui/scripts/dashboardsync.js +++ b/dashboard-ui/scripts/dashboardsync.js @@ -1,5 +1,33 @@ (function () { + function cancelJob(page, id) { + + $('.jobMenu', page).on("popupafterclose.deleteuser", function () { + + $(this).off('popupafterclose.deleteuser'); + + var msg = Globalize.translate('CancelSyncJobConfirmation'); + + Dashboard.confirm(msg, Globalize.translate('HeaderCancelSyncJob'), function (result) { + + if (result) { + Dashboard.showLoadingMsg(); + + ApiClient.ajax({ + + url: ApiClient.getUrl('Sync/Jobs/' + id), + type: 'DELETE' + + }).done(function () { + + reloadData(page); + }); + } + }); + + }).popup('close'); + } + function getSyncTargetName(targets, id) { var target = targets.filter(function (t) { @@ -14,7 +42,7 @@ var html = ''; - html += "
"; + html += "
"; html += '
'; html += '
'; @@ -24,6 +52,7 @@ html += '
'; var imgUrl; + var style = ''; if (job.PrimaryImageItemId) { imgUrl = ApiClient.getScaledImageUrl(job.PrimaryImageItemId, { @@ -31,18 +60,27 @@ width: 400, tag: job.PrimaryImageTag }); + } else { + style = "background-color:#38c;background-position:center center;"; + imgUrl = "css/images/items/detail/video.png"; } - if (imgUrl) { - html += '
'; + html += '
'; + + if (job.Progress) { + html += '
'; + html += "
"; + html += ''; + html += "
"; html += "
"; } + html += "
"; + if (job.Status == 'Completed') { html += '
'; } else if (job.Status == 'Queued') { - html += '
'; } else if (job.Status == 'Transcoding' || job.Status == 'Transferring') { html += '
'; @@ -51,7 +89,7 @@ html += '
'; } else if (job.Status == 'TranscodingFailed') { - html += '
'; + html += '
'; } // cardContent @@ -80,37 +118,16 @@ textLines.push(' '); } + html += '
'; + html += ''; + html += "
"; + for (var i = 0, length = textLines.length; i < length; i++) { - html += "
"; + html += "
"; html += textLines[i]; html += "
"; } - //if (!plugin.isExternal) { - // html += "
"; - // html += plugin.price > 0 ? "$" + plugin.price.toFixed(2) : Globalize.translate('LabelFree'); - // html += RatingHelpers.getStoreRatingHtml(plugin.avgRating, plugin.id, plugin.name); - - // html += ""; - // html += " " + Globalize.translate('LabelNumberReviews').replace("{0}", plugin.totalRatings); - // html += ""; - - // html += "
"; - //} - - //var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) { - // return ip.Name == plugin.name; - //})[0]; - - //html += "
"; - - //if (installedPlugin) { - // html += Globalize.translate('LabelVersionInstalled').replace("{0}", installedPlugin.Version); - //} else { - // html += ' '; - //} - //html += "
"; - // cardFooter html += "
"; @@ -142,15 +159,49 @@ html += getSyncJobHtml(job); } - $('.syncActivity', page).html(html).trigger('create'); + var elem = $('.syncActivity', page).html(html).trigger('create'); + + $('.btnJobMenu', elem).on('click', function () { + showJobMenu(this); + }); } - $(document).on('pageshow', "#dashboardSyncPage", function () { + function showJobMenu(elem) { + + var card = $(elem).parents('.card'); + var page = $(elem).parents('.page'); + var id = card.attr('data-id'); + + $('.jobMenu', page).popup("close").remove(); + + var html = '
'; + + html += ''; + + html += '
'; + + page.append(html); + + var flyout = $('.jobMenu', page).popup({ positionTo: elem || "window" }).trigger('create').popup("open").on("popupafterclose", function () { + + $(this).off("popupafterclose").remove(); + + }); + + $('.btnCancelJob', flyout).on('click', function () { + cancelJob(page, this.getAttribute('data-id')); + }); + } + + function reloadData(page) { Dashboard.showLoadingMsg(); - var page = this; - var promise1 = ApiClient.getJSON(ApiClient.getUrl('Sync/Jobs')); var promise2 = ApiClient.getJSON(ApiClient.getUrl('Sync/Targets')); @@ -162,6 +213,13 @@ Dashboard.hideLoadingMsg(); }); + } + + $(document).on('pageshow', "#dashboardSyncPage", function () { + + var page = this; + + reloadData(page); }).on('pageinit', "#dashboardSyncPage", function () { diff --git a/dashboard-ui/scripts/devices.js b/dashboard-ui/scripts/devices.js index fa150733be..b28ec6b402 100644 --- a/dashboard-ui/scripts/devices.js +++ b/dashboard-ui/scripts/devices.js @@ -77,7 +77,11 @@ function loadData(page) { Dashboard.showLoadingMsg(); - ApiClient.getJSON(ApiClient.getUrl('Devices')).done(function (devices) { + ApiClient.getJSON(ApiClient.getUrl('Devices', { + + SupportsDeviceId: true + + })).done(function (devices) { load(page, devices); diff --git a/dashboard-ui/scripts/episodes.js b/dashboard-ui/scripts/episodes.js index 33c1408549..b8b904aca6 100644 --- a/dashboard-ui/scripts/episodes.js +++ b/dashboard-ui/scripts/episodes.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "Episode", Recursive: true, - Fields: "PrimaryImageAspectRatio,MediaSourceCount,IsUnidentified,UserData", + Fields: "PrimaryImageAspectRatio,MediaSourceCount,IsUnidentified,UserData,SyncInfo", StartIndex: 0, IsMissing: false, IsVirtualUnaired: false, diff --git a/dashboard-ui/scripts/favorites.js b/dashboard-ui/scripts/favorites.js index 54d2fcd422..2ec6f7734e 100644 --- a/dashboard-ui/scripts/favorites.js +++ b/dashboard-ui/scripts/favorites.js @@ -24,7 +24,7 @@ Filters: "IsFavorite", Limit: screenWidth >= 1920 ? 10 : (screenWidth >= 1440 ? 8 : 6), Recursive: true, - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", CollapseBoxSetItems: false, ExcludeLocationTypes: "Virtual" }; diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js index bd51824469..601dedb1da 100644 --- a/dashboard-ui/scripts/indexpage.js +++ b/dashboard-ui/scripts/indexpage.js @@ -126,7 +126,7 @@ var options = { Limit: 24, - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", IsPlayed: false }; @@ -163,7 +163,7 @@ var options = { Limit: screenWidth >= 2400 ? 10 : (screenWidth >= 1600 ? 10 : (screenWidth >= 1440 ? 8 : (screenWidth >= 800 ? 7 : 6))), - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", Filters: "IsUnplayed", UserId: userId }; @@ -279,7 +279,7 @@ Filters: "IsResumable", Limit: screenWidth >= 1920 ? 10 : (screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 9 : 6)), Recursive: true, - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", CollapseBoxSetItems: false, ExcludeLocationTypes: "Virtual" }; @@ -355,7 +355,7 @@ var options = { Limit: screenWidth >= 1600 ? 6 : (screenWidth >= 1440 ? 5 : (screenWidth >= 800 ? 6 : 6)), - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", Filters: "IsUnplayed", UserId: Dashboard.getCurrentUserId(), ChannelIds: channel.Id diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 58812d192b..e8063e37ae 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -596,7 +596,7 @@ var options = { userId: Dashboard.getCurrentUserId(), limit: 5, - fields: "PrimaryImageAspectRatio,UserData" + fields: "PrimaryImageAspectRatio,UserData,SyncInfo" }; if (item.Type == "Movie") { @@ -722,7 +722,7 @@ _childrenItemsQuery = null; - var fields = "ItemCounts,AudioInfo,PrimaryImageAspectRatio"; + var fields = "ItemCounts,AudioInfo,PrimaryImageAspectRatio,SyncInfo"; var query = { ParentId: item.Id, @@ -1069,7 +1069,7 @@ SortOrder: "Ascending", IncludeItemTypes: "MusicVideo", Recursive: true, - Fields: "DateCreated", + Fields: "DateCreated,SyncInfo", Albums: item.Name }).done(function (result) { diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js index 6b7c413011..8ec0fd9231 100644 --- a/dashboard-ui/scripts/itemlistpage.js +++ b/dashboard-ui/scripts/itemlistpage.js @@ -7,7 +7,7 @@ SortBy: "SortName", SortOrder: "Ascending", - Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount", + Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 575b997332..a50018ef97 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -26,11 +26,7 @@ // Chrome seems to have virtualization built-in and can handle large lists easily var isChrome = $.browser.chrome; - if (getWindowUrl().toString().toLowerCase().indexOf('localhost') != -1) { - return isChrome ? 200 : 100; - } - - return isChrome ? 100 : 50; + return isChrome ? 200 : 100; }, getDefaultItemsView: function (view, mobileView) { @@ -345,6 +341,10 @@ commands.push('refresh'); + if (SyncManager.isAvailable(item)) { + commands.push('sync'); + } + return commands; }, @@ -924,6 +924,10 @@ itemCommands.push('delete'); } + if (SyncManager.isAvailable(item)) { + itemCommands.push('sync'); + } + return itemCommands; }, diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 755df36b85..2e7e54c703 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -245,6 +245,20 @@ return false; } + function onSyncButtonClick() { + + var id = this.getAttribute('data-itemid'); + + closeContextMenu(); + + ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) { + + SyncManager.showMenu([item]); + }); + + return false; + } + function onExternalPlayerButtonClick() { closeContextMenu(); @@ -409,6 +423,10 @@ html += '
  • ' + Globalize.translate('ButtonRemoveFromPlaylist') + '
  • '; } + if (commands.indexOf('sync') != -1) { + html += '
  • ' + Globalize.translate('ButtonSync') + '
  • '; + } + if (commands.indexOf('delete') != -1) { html += '
  • ' + Globalize.translate('ButtonDelete') + '
  • '; } @@ -437,6 +455,7 @@ $('.btnQueueAllFromHere', elem).on('click', onQueueAllFromHereButtonClick); $('.btnExternalPlayer', elem).on('click', onExternalPlayerButtonClick); $('.btnDelete', elem).on('click', onDeleteButtonClick); + $('.btnSync', elem).on('click', onSyncButtonClick); }); } @@ -710,6 +729,38 @@ }).get(); } + function sync(page) { + + var selection = getSelectedItems(page); + + if (selection.length < 1) { + + Dashboard.alert({ + message: Globalize.translate('MessagePleaseSelectOneItem'), + title: Globalize.translate('HeaderError') + }); + + return; + } + + ApiClient.getItems({ + + ids: selection.join(','), + fields: 'SyncInfo', + userId: Dashboard.getCurrentUserId() + + }).done(function (result) { + + SyncManager.showMenu(result.Items); + + $(SyncManager).off('jobsubmit.librarylist').on('jobsubmit.librarylist', function () { + + hideSelections(page); + }); + + }); + } + function combineVersions(page) { var selection = getSelectedItems(page); @@ -850,6 +901,10 @@ combineVersions(page); }); + $('.btnSyncItems', page).on('click', function () { + sync(page); + }); + $('.btnAddToCollection', page).on('click', function () { addToCollection(page); }); diff --git a/dashboard-ui/scripts/moviecollections.js b/dashboard-ui/scripts/moviecollections.js index c3355bec5f..d36bec0fa2 100644 --- a/dashboard-ui/scripts/moviecollections.js +++ b/dashboard-ui/scripts/moviecollections.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "BoxSet", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName", + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/moviegenres.js b/dashboard-ui/scripts/moviegenres.js index afdb995319..4483766617 100644 --- a/dashboard-ui/scripts/moviegenres.js +++ b/dashboard-ui/scripts/moviegenres.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "Movie", Recursive: true, - Fields: "DateCreated", + Fields: "DateCreated,SyncInfo", StartIndex: 0 }; diff --git a/dashboard-ui/scripts/movies.js b/dashboard-ui/scripts/movies.js index f8def57735..900ff54f3f 100644 --- a/dashboard-ui/scripts/movies.js +++ b/dashboard-ui/scripts/movies.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "Movie", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,MediaSourceCount,IsUnidentified", + Fields: "PrimaryImageAspectRatio,SortName,MediaSourceCount,IsUnidentified,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/movieslatest.js b/dashboard-ui/scripts/movieslatest.js index bd47c0c2ef..c20c53ae27 100644 --- a/dashboard-ui/scripts/movieslatest.js +++ b/dashboard-ui/scripts/movieslatest.js @@ -11,7 +11,7 @@ IncludeItemTypes: "Movie", Limit: 30, - Fields: "PrimaryImageAspectRatio,MediaSourceCount", + Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", ParentId: parentId, IsPlayed: false, ImageTypeLimit: 1, diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js index d2a8e033ad..b3ab5fa267 100644 --- a/dashboard-ui/scripts/moviesrecommended.js +++ b/dashboard-ui/scripts/moviesrecommended.js @@ -54,7 +54,7 @@ Filters: "IsResumable", Limit: screenWidth >= 1920 ? 12 : (screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 6 : 3)), Recursive: true, - Fields: "PrimaryImageAspectRatio,MediaSourceCount", + Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", CollapseBoxSetItems: false, ParentId: parentId, ImageTypeLimit: 1, @@ -86,7 +86,7 @@ userId: Dashboard.getCurrentUserId(), categoryLimit: screenWidth >= 1200 ? 4 : 3, ItemLimit: screenWidth >= 1920 ? 10 : (screenWidth >= 1600 ? 7 : (screenWidth >= 1200 ? 7 : 7)), - Fields: "PrimaryImageAspectRatio,MediaSourceCount", + Fields: "PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" }); diff --git a/dashboard-ui/scripts/movietrailers.js b/dashboard-ui/scripts/movietrailers.js index 399d29d2f2..d7d77a0109 100644 --- a/dashboard-ui/scripts/movietrailers.js +++ b/dashboard-ui/scripts/movietrailers.js @@ -8,7 +8,7 @@ SortBy: "SortName", SortOrder: "Ascending", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName", + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/musicalbumartists.js b/dashboard-ui/scripts/musicalbumartists.js index 949d121522..dee774e6bb 100644 --- a/dashboard-ui/scripts/musicalbumartists.js +++ b/dashboard-ui/scripts/musicalbumartists.js @@ -10,7 +10,7 @@ SortBy: "SortName", SortOrder: "Ascending", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,DateCreated", + Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/musicalbums.js b/dashboard-ui/scripts/musicalbums.js index 7c9735f7ae..be182c3218 100644 --- a/dashboard-ui/scripts/musicalbums.js +++ b/dashboard-ui/scripts/musicalbums.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "MusicAlbum", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName", + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/musicartists.js b/dashboard-ui/scripts/musicartists.js index 37268e32cc..c81ea99d44 100644 --- a/dashboard-ui/scripts/musicartists.js +++ b/dashboard-ui/scripts/musicartists.js @@ -10,7 +10,7 @@ SortBy: "SortName", SortOrder: "Ascending", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,DateCreated", + Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/musicgenres.js b/dashboard-ui/scripts/musicgenres.js index 823a38e254..7248ebf338 100644 --- a/dashboard-ui/scripts/musicgenres.js +++ b/dashboard-ui/scripts/musicgenres.js @@ -7,7 +7,7 @@ SortOrder: "Ascending", IncludeItemTypes: "Audio,MusicVideo", Recursive: true, - Fields: "DateCreated", + Fields: "DateCreated,SyncInfo", StartIndex: 0 }; diff --git a/dashboard-ui/scripts/musicrecommended.js b/dashboard-ui/scripts/musicrecommended.js index ae5c9fb2a9..81b0cfd58b 100644 --- a/dashboard-ui/scripts/musicrecommended.js +++ b/dashboard-ui/scripts/musicrecommended.js @@ -12,7 +12,7 @@ var options = { IncludeItemTypes: "Audio", Limit: screenWidth >= 1920 ? 24 : (screenWidth >= 1600 ? 21 : (screenWidth >= 1200 ? 21 : 12)), - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", ParentId: parentId, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" @@ -38,7 +38,7 @@ IncludeItemTypes: "Audio", Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1600 ? 7 : (screenWidth >= 1200 ? 7 : 6)), Recursive: true, - Fields: "PrimaryImageAspectRatio,AudioInfo", + Fields: "PrimaryImageAspectRatio,AudioInfo,SyncInfo", Filters: "IsPlayed", ParentId: parentId, ImageTypeLimit: 1, @@ -72,7 +72,7 @@ IncludeItemTypes: "Audio", Limit: screenWidth >= 1920 ? 16 : (screenWidth >= 1600 ? 14 : (screenWidth >= 1200 ? 14 : 12)), Recursive: true, - Fields: "PrimaryImageAspectRatio,AudioInfo", + Fields: "PrimaryImageAspectRatio,AudioInfo,SyncInfo", Filters: "IsPlayed", ParentId: parentId, ImageTypeLimit: 1, diff --git a/dashboard-ui/scripts/musicvideos.js b/dashboard-ui/scripts/musicvideos.js index 6bae74ad1e..d841112b42 100644 --- a/dashboard-ui/scripts/musicvideos.js +++ b/dashboard-ui/scripts/musicvideos.js @@ -7,7 +7,7 @@ SortOrder: "Ascending", IncludeItemTypes: "MusicVideo", Recursive: true, - Fields: "DateCreated", + Fields: "DateCreated,SyncInfo", StartIndex: 0 }; diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index db5cd3abbf..fa56e5b7e8 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1257,7 +1257,8 @@ var Dashboard = { var capabilities = { PlayableMediaTypes: "Audio,Video", - SupportedCommands: Dashboard.getSupportedRemoteCommands().join(',') + SupportedCommands: Dashboard.getSupportedRemoteCommands().join(','), + SupportsDeviceId: false }; window.ConnectionManager = new MediaBrowser.ConnectionManager(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities); diff --git a/dashboard-ui/scripts/songs.js b/dashboard-ui/scripts/songs.js index 8e98b3e543..c907a6fb4a 100644 --- a/dashboard-ui/scripts/songs.js +++ b/dashboard-ui/scripts/songs.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "Audio", Recursive: true, - Fields: "AudioInfo,ParentId", + Fields: "AudioInfo,ParentId,SyncInfo", Limit: 200, StartIndex: 0, ImageTypeLimit: 1, diff --git a/dashboard-ui/scripts/sync.js b/dashboard-ui/scripts/sync.js index 9ee5d3599a..b75e0fc69b 100644 --- a/dashboard-ui/scripts/sync.js +++ b/dashboard-ui/scripts/sync.js @@ -23,7 +23,9 @@ return i.Id; }).join(','), - Quality: $('.radioSyncQuality', form)[0].getAttribute('data-value') + Quality: $('.radioSyncQuality', form)[0].getAttribute('data-value'), + + Name: $('#txtSyncJobName', form).val() }; ApiClient.ajax({ @@ -35,6 +37,8 @@ }).done(function () { + $('.syncPanel').panel('close'); + $(window.SyncManager).trigger('jobsubmit'); }); } @@ -51,19 +55,32 @@ var html = '
    '; html += '
    '; - html += '

    Sync Media

    '; + html += '

    ' + Globalize.translate('SyncMedia') + '

    '; html += '
    '; + if (items.length > 1) { + + html += '

    '; + html += ''; + html += ''; + html += '

    '; + } + html += '
    '; html += '
    '; html += 'Sync to:'; + var index = 0; + html += targets.map(function (t) { var targetHtml = ''; - targetHtml += ''; + var checkedHtml = index ? '' : ' checked="checked"'; + targetHtml += ''; + + index++; return targetHtml; }).join(''); @@ -110,7 +127,7 @@ function isAvailable(item, user) { - return false; + //return false; return item.SupportsSync; } diff --git a/dashboard-ui/scripts/tvlatest.js b/dashboard-ui/scripts/tvlatest.js index dc36347921..fbc0ca1a87 100644 --- a/dashboard-ui/scripts/tvlatest.js +++ b/dashboard-ui/scripts/tvlatest.js @@ -13,7 +13,7 @@ IncludeItemTypes: "Episode", Limit: 30, - Fields: "PrimaryImageAspectRatio", + Fields: "PrimaryImageAspectRatio,SyncInfo", ParentId: parentId, IsPlayed: false, ImageTypeLimit: 1, diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index ca93897d3a..32584d5b2d 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -5,7 +5,7 @@ var query = { Limit: 24, - Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated", + Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,SyncInfo", UserId: Dashboard.getCurrentUserId(), ExcludeLocationTypes: "Virtual", ImageTypeLimit: 1, @@ -40,7 +40,7 @@ var query = { Limit: 24, - Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated", + Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,SyncInfo", UserId: Dashboard.getCurrentUserId(), ExcludeLocationTypes: "Virtual", ImageTypeLimit: 1, @@ -101,7 +101,7 @@ Filters: "IsResumable", Limit: screenWidth >= 1920 ? 6 : (screenWidth >= 1200 ? 6 : 4), Recursive: true, - Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData", + Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo", ExcludeLocationTypes: "Virtual", ParentId: parentId, ImageTypeLimit: 1, diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index 51167692ab..8774f35b3c 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -9,7 +9,7 @@ SortOrder: "Ascending", IncludeItemTypes: "Series", Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName", + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", StartIndex: 0, ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/tvupcoming.js b/dashboard-ui/scripts/tvupcoming.js index 05b2254095..997cb5d833 100644 --- a/dashboard-ui/scripts/tvupcoming.js +++ b/dashboard-ui/scripts/tvupcoming.js @@ -7,7 +7,7 @@ var query = { Limit: 40, - Fields: "SeriesInfo,UserData,SeriesStudio", + Fields: "SeriesInfo,UserData,SeriesStudio,SyncInfo", UserId: Dashboard.getCurrentUserId(), ImageTypeLimit: 1, EnableImageTypes: "Primary,Backdrop,Banner,Thumb" diff --git a/dashboard-ui/scripts/userprofilespage.js b/dashboard-ui/scripts/userprofilespage.js index aaea643b29..a32f8d4e3e 100644 --- a/dashboard-ui/scripts/userprofilespage.js +++ b/dashboard-ui/scripts/userprofilespage.js @@ -59,7 +59,7 @@ $('.userMenu', page).popup("close").remove(); - var html = '
    '; + var html = '
    '; html += '
      '; html += '
    • ' + Globalize.translate('HeaderMenu') + '
    • '; @@ -201,7 +201,7 @@ $('.userMenu', page).popup("close").remove(); - var html = '
      '; + var html = '
      '; html += '
        '; html += '
      • ' + Globalize.translate('HeaderMenu') + '
      • ';