diff --git a/dashboard-ui/bower_components/emby-apiclient/.bower.json b/dashboard-ui/bower_components/emby-apiclient/.bower.json index f80b550020..4191171006 100644 --- a/dashboard-ui/bower_components/emby-apiclient/.bower.json +++ b/dashboard-ui/bower_components/emby-apiclient/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.0.37", - "_release": "1.0.37", + "version": "1.0.41", + "_release": "1.0.41", "_resolution": { "type": "version", - "tag": "1.0.37", - "commit": "b383fff379b92417525a3295ebbe3b7db9e0b1a4" + "tag": "1.0.41", + "commit": "19bdc440adac07ea1a5491abaec89cbdb1c99e17" }, "_source": "git://github.com/MediaBrowser/Emby.ApiClient.Javascript.git", "_target": "~1.0.3", diff --git a/dashboard-ui/bower_components/emby-apiclient/apiclient.js b/dashboard-ui/bower_components/emby-apiclient/apiclient.js index 75d4fc5a25..dac60ab80e 100644 --- a/dashboard-ui/bower_components/emby-apiclient/apiclient.js +++ b/dashboard-ui/bower_components/emby-apiclient/apiclient.js @@ -3444,5 +3444,57 @@ contentType: "application/json" }); }; + + self.createPin = function () { + + return self.ajax({ + type: "POST", + url: self.getUrl('Auth/Pin'), + data: { + deviceId: self.deviceId(), + appName: self.appName() + }, + dataType: "json" + }); + }; + + self.getPinStatus = function (pinInfo) { + + var queryString = { + deviceId: pinInfo.DeviceId, + pin: pinInfo.Pin + }; + + return self.ajax({ + type: 'GET', + url: self.getUrl('Auth/Pin', queryString), + dataType: 'json' + }); + }; + + function exchangePin(pinInfo) { + + return self.ajax({ + type: 'POST', + url: self.getUrl('Auth/Pin/Exchange'), + data: { + deviceId: pinInfo.DeviceId, + pin: pinInfo.Pin + }, + dataType: 'json' + }); + } + + self.exchangePin = function (pinInfo) { + + return exchangePin(pinInfo).then(function (result) { + + if (self.onAuthenticated) { + self.onAuthenticated(self, result); + } + + return result; + }); + }; }; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js index 0ae7ad43ba..bf130e3208 100644 --- a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js +++ b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js @@ -5,7 +5,8 @@ ServerSelection: 1, ServerSignIn: 2, SignedIn: 3, - ConnectSignIn: 4 + ConnectSignIn: 4, + ServerUpdateNeeded: 5 }; var ConnectionMode = { @@ -214,6 +215,16 @@ return connectUser; }; + var minServerVersion = '3.0.5724'; + self.minServerVersion = function (val) { + + if (val) { + minServerVersion = val; + } + + return minServerVersion; + }; + self.appVersion = function () { return appVersion; }; @@ -1014,6 +1025,30 @@ return (str1 || '').toLowerCase() == (str2 || '').toLowerCase(); } + function compareVersions(a, b) { + + // -1 a is smaller + // 1 a is larger + // 0 equal + a = a.split('.'); + b = b.split('.'); + + for (var i = 0, length = Math.max(a.length, b.length) ; i < length; i++) { + var aVal = parseInt(a[i] || '0'); + var bVal = parseInt(b[i] || '0'); + + if (aVal < bVal) { + return -1; + } + + if (aVal > bVal) { + return 1; + } + } + + return 0; + } + function testNextConnectionMode(tests, index, server, wakeOnLanSendTime, options, resolve) { if (index >= tests.length) { @@ -1052,8 +1087,18 @@ tryConnect(address, timeout).then(function (result) { - console.log('calling onSuccessfulConnection with connection mode ' + mode + ' with server ' + server.Name); - onSuccessfulConnection(server, result, mode, options, resolve); + if (compareVersions(self.minServerVersion(), result.Version) == 1) { + + console.log('minServerVersion requirement not met. Server version: ' + result.Version); + resolve({ + State: ConnectionState.ServerUpdateNeeded, + Servers: [server] + }); + + } else { + console.log('calling onSuccessfulConnection with connection mode ' + mode + ' with server ' + server.Name); + onSuccessfulConnection(server, result, mode, options, resolve); + } }, function () { diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js b/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js index 5a1fbe294e..9fa5d2ca74 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js @@ -6,7 +6,7 @@ self.uploadImages = function (server) { - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); LocalAssetManager.getCameraPhotos().then(function (photos) { @@ -77,7 +77,7 @@ function uploadFile(file, apiClient) { - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['fileupload', "cryptojs-sha1"], function () { diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js b/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js index 78d0c3e818..5ee7a511fd 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js @@ -6,7 +6,7 @@ self.sync = function (apiClient, serverInfo, options) { - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); reportOfflineActions(apiClient, serverInfo).then(function () { @@ -36,7 +36,7 @@ console.log('Begin reportOfflineActions'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -67,7 +67,7 @@ console.log('Begin syncData'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -117,7 +117,7 @@ console.log('Begin removeLocalItems'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); removeNextLocalItem(syncDataResult.ItemIdsToRemove, 0, serverId, deferred); @@ -146,7 +146,7 @@ console.log('Begin removeLocalItem'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -164,7 +164,7 @@ console.log('Begin getNewMedia'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); apiClient.getReadySyncItems(apiClient.deviceId()).then(function (jobItems) { @@ -201,7 +201,7 @@ console.log('Begin getNewItem'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -240,7 +240,7 @@ function downloadMedia(apiClient, jobItem, localItem, options) { console.log('Begin downloadMedia'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -276,7 +276,7 @@ function getImages(apiClient, jobItem, localItem) { console.log('Begin getImages'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); getNextImage(0, apiClient, localItem, deferred); @@ -348,7 +348,7 @@ function downloadImage(apiClient, serverId, itemId, imageTag, imageType) { console.log('Begin downloadImage'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -380,7 +380,7 @@ function getSubtitles(apiClient, jobItem, localItem) { console.log('Begin getSubtitles'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -424,7 +424,7 @@ function getItemSubtitle(file, apiClient, jobItem, localItem, mediaSource) { console.log('Begin getItemSubtitle'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); var subtitleStream = mediaSource.MediaStreams.filter(function (m) { return m.Type == 'Subtitle' && m.Index == file.Index; @@ -461,7 +461,7 @@ function syncUserItemAccess(syncDataResult, serverId) { console.log('Begin syncUserItemAccess'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); var itemIds = []; for (var id in syncDataResult.ItemUserAccess) { @@ -494,7 +494,7 @@ function syncUserAccessForItem(itemId, syncDataResult) { console.log('Begin syncUserAccessForItem'); - var deferred = jQuery.Deferred(); + var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 5d739f749c..b160c3c9b1 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -15,12 +15,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.0.84", - "_release": "1.0.84", + "version": "1.0.86", + "_release": "1.0.86", "_resolution": { "type": "version", - "tag": "1.0.84", - "commit": "8a8bc2b228f290e1e5616eba205bcd6f117167e2" + "tag": "1.0.86", + "commit": "e0329ec7873dc265487709c58f2457428e0c9c99" }, "_source": "git://github.com/MediaBrowser/emby-webcomponents.git", "_target": "~1.0.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js index a5f352b492..4845a5280a 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js +++ b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js @@ -162,6 +162,15 @@ define(['browser'], function (browser) { Container: audioFormat == 'webma' ? 'webma,webm' : audioFormat, Type: 'Audio' }); + + // aac also appears in the m4a container + if (audioFormat == 'aac') { + profile.DirectPlayProfiles.push({ + Container: 'm4a', + AudioCodec: audioFormat, + Type: 'Audio' + }); + } }); if (canPlayWebm) {