diff --git a/src/bower_components/emby-apiclient/cameraroll.js b/src/bower_components/emby-apiclient/cameraroll.js
deleted file mode 100644
index fddd1a1850..0000000000
--- a/src/bower_components/emby-apiclient/cameraroll.js
+++ /dev/null
@@ -1,8 +0,0 @@
-define([], function() {
- "use strict";
-
- function CameraRoll() {}
- return CameraRoll.prototype.getFiles = function() {
- return Promise.resolve([])
- }, new CameraRoll
-});
\ No newline at end of file
diff --git a/src/bower_components/emby-apiclient/sync/contentuploader.js b/src/bower_components/emby-apiclient/sync/contentuploader.js
deleted file mode 100644
index e08dbe4dd2..0000000000
--- a/src/bower_components/emby-apiclient/sync/contentuploader.js
+++ /dev/null
@@ -1,57 +0,0 @@
-define(["localassetmanager", "cameraRoll"], function(localAssetManager, cameraRoll) {
- "use strict";
-
- function getFilesToUpload(files, uploadHistory) {
- return files.filter(function(file) {
- if (!file) return !1;
- var uploadId = getUploadId(file);
- return 0 === uploadHistory.FilesUploaded.filter(function(u) {
- return uploadId === u.Id
- }).length
- })
- }
-
- function getUploadId(file) {
- return btoa(file.Id + "1")
- }
-
- function uploadNext(files, index, server, apiClient, resolve, reject) {
- var length = files.length;
- if (index >= length) return void resolve();
- uploadFile(files[index], apiClient).then(function() {
- uploadNext(files, index + 1, server, apiClient, resolve, reject)
- }, function() {
- uploadNext(files, index + 1, server, apiClient, resolve, reject)
- })
- }
-
- function uploadFile(file, apiClient) {
- return new Promise(function(resolve, reject) {
- require(["fileupload"], function(FileUpload) {
- var url = apiClient.getUrl("Devices/CameraUploads", {
- DeviceId: apiClient.deviceId(),
- Name: file.Name,
- Album: "Camera Roll",
- Id: getUploadId(file),
- api_key: apiClient.accessToken()
- });
- console.log("Uploading file to " + url), (new FileUpload).upload(file, url).then(resolve, reject)
- })
- })
- }
-
- function ContentUploader() {}
- return ContentUploader.prototype.uploadImages = function(connectionManager, server) {
- return cameraRoll.getFiles().then(function(photos) {
- if (!photos.length) return Promise.resolve();
- var apiClient = connectionManager.getApiClient(server.Id);
- return apiClient.getContentUploadHistory().then(function(uploadHistory) {
- return photos = getFilesToUpload(photos, uploadHistory), console.log("Found " + photos.length + " files to upload"), new Promise(function(resolve, reject) {
- uploadNext(photos, 0, server, apiClient, resolve, reject)
- })
- }, function() {
- return Promise.resolve()
- })
- })
- }, ContentUploader
-});
\ No newline at end of file
diff --git a/src/bower_components/emby-apiclient/sync/serversync.js b/src/bower_components/emby-apiclient/sync/serversync.js
index 4299091c27..34a1b11e8e 100644
--- a/src/bower_components/emby-apiclient/sync/serversync.js
+++ b/src/bower_components/emby-apiclient/sync/serversync.js
@@ -12,11 +12,7 @@ define([], function() {
}
function uploadContent(connectionManager, server, options) {
- return new Promise(function(resolve, reject) {
- require(["contentuploader"], function(ContentUploader) {
- (new ContentUploader).uploadImages(connectionManager, server).then(resolve, reject)
- })
- })
+ return new Promise().reject();
}
function syncMedia(connectionManager, server, options) {
diff --git a/src/bower_components/emby-webcomponents/actionsheet/actionsheet.js b/src/bower_components/emby-webcomponents/actionsheet/actionsheet.js
index 067d427aef..87ee6e35fa 100644
--- a/src/bower_components/emby-webcomponents/actionsheet/actionsheet.js
+++ b/src/bower_components/emby-webcomponents/actionsheet/actionsheet.js
@@ -1,4 +1,4 @@
-define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-button', 'css!./actionsheet', 'material-icons', 'scrollStyles', 'listViewStyle'], function (dialogHelper, layoutManager, globalize, browser, dom) {
+define(['dialogHelper', 'layoutManager', 'globalize', 'browser', 'dom', 'emby-button', 'css!./actionsheet', 'material-icons', 'scrollStyles', 'listViewStyle'], function (dialogHelper, layoutManager, globalize, browser, dom) {
'use strict';
function getOffsets(elems) {
diff --git a/src/bower_components/emby-webcomponents/alphanumericshortcuts/alphanumericshortcuts.js b/src/bower_components/emby-webcomponents/alphanumericshortcuts/alphanumericshortcuts.js
index 8517d1c3df..03d0118cbe 100644
--- a/src/bower_components/emby-webcomponents/alphanumericshortcuts/alphanumericshortcuts.js
+++ b/src/bower_components/emby-webcomponents/alphanumericshortcuts/alphanumericshortcuts.js
@@ -1,4 +1,4 @@
-define(['dom', 'focusManager'], function (dom, focusManager) {
+define(['dom', 'focusManager'], function (dom, focusManager) {
'use strict';
var inputDisplayElement;
diff --git a/src/bower_components/emby-webcomponents/appfooter/appfooter.css b/src/bower_components/emby-webcomponents/appfooter/appfooter.css
index 320d34a4a9..789bc1db20 100644
--- a/src/bower_components/emby-webcomponents/appfooter/appfooter.css
+++ b/src/bower_components/emby-webcomponents/appfooter/appfooter.css
@@ -1,4 +1,4 @@
-.appfooter {
+.appfooter {
position: fixed;
left: 0;
right: 0;
diff --git a/src/bower_components/emby-webcomponents/appfooter/appfooter.js b/src/bower_components/emby-webcomponents/appfooter/appfooter.js
index 3f69efc573..4387ca8b77 100644
--- a/src/bower_components/emby-webcomponents/appfooter/appfooter.js
+++ b/src/bower_components/emby-webcomponents/appfooter/appfooter.js
@@ -1,4 +1,4 @@
-define(['browser', 'css!./appfooter'], function (browser) {
+define(['browser', 'css!./appfooter'], function (browser) {
'use strict';
function render(options) {
diff --git a/src/bower_components/emby-webcomponents/backdrop/backdrop.js b/src/bower_components/emby-webcomponents/backdrop/backdrop.js
index 12a077c68c..2187daac85 100644
--- a/src/bower_components/emby-webcomponents/backdrop/backdrop.js
+++ b/src/bower_components/emby-webcomponents/backdrop/backdrop.js
@@ -1,4 +1,4 @@
-define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style'], function (browser, connectionManager, playbackManager, dom) {
+define(['browser', 'connectionManager', 'playbackManager', 'dom', 'css!./style'], function (browser, connectionManager, playbackManager, dom) {
'use strict';
function enableAnimation(elem) {
diff --git a/src/bower_components/emby-webcomponents/browser.js b/src/bower_components/emby-webcomponents/browser.js
index cace0cb891..6329bbbd13 100644
--- a/src/bower_components/emby-webcomponents/browser.js
+++ b/src/bower_components/emby-webcomponents/browser.js
@@ -1,4 +1,4 @@
-define([], function () {
+define([], function () {
'use strict';
function isTv() {
diff --git a/src/bower_components/emby-webcomponents/chromecast/chromecasthelpers.js b/src/bower_components/emby-webcomponents/chromecast/chromecasthelpers.js
index 4950f6540e..c86233207d 100644
--- a/src/bower_components/emby-webcomponents/chromecast/chromecasthelpers.js
+++ b/src/bower_components/emby-webcomponents/chromecast/chromecasthelpers.js
@@ -1,4 +1,4 @@
-define(['events'], function (events) {
+define(['events'], function (events) {
'use strict';
// LinkParser
diff --git a/src/bower_components/emby-webcomponents/chromecast/chromecastplayer.js b/src/bower_components/emby-webcomponents/chromecast/chromecastplayer.js
index 4f8b4cf952..d276bb4de2 100644
--- a/src/bower_components/emby-webcomponents/chromecast/chromecastplayer.js
+++ b/src/bower_components/emby-webcomponents/chromecast/chromecastplayer.js
@@ -1,4 +1,4 @@
-define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', 'globalize', 'events', 'require', 'castSenderApiLoader'], function (appSettings, userSettings, playbackManager, connectionManager, globalize, events, require, castSenderApiLoader) {
+define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', 'globalize', 'events', 'require', 'castSenderApiLoader'], function (appSettings, userSettings, playbackManager, connectionManager, globalize, events, require, castSenderApiLoader) {
'use strict';
// Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js
diff --git a/src/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js b/src/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js
index 8e526fa114..e2381e6914 100644
--- a/src/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js
+++ b/src/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js
@@ -1,4 +1,4 @@
-define(['dialogHelper', 'loading', 'apphost', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-checkbox', 'emby-input', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button', 'emby-linkbutton', 'flexStyles'], function (dialogHelper, loading, appHost, layoutManager, connectionManager, appRouter, globalize) {
+define(['dialogHelper', 'loading', 'apphost', 'layoutManager', 'connectionManager', 'appRouter', 'globalize', 'emby-checkbox', 'emby-input', 'paper-icon-button-light', 'emby-select', 'material-icons', 'css!./../formdialog', 'emby-button', 'emby-linkbutton', 'flexStyles'], function (dialogHelper, loading, appHost, layoutManager, connectionManager, appRouter, globalize) {
'use strict';
var currentServerId;
diff --git a/src/bower_components/emby-webcomponents/datetime.js b/src/bower_components/emby-webcomponents/datetime.js
index 15d0c64865..a7ee1d946a 100644
--- a/src/bower_components/emby-webcomponents/datetime.js
+++ b/src/bower_components/emby-webcomponents/datetime.js
@@ -1,4 +1,4 @@
-define(['globalize'], function (globalize) {
+define(['globalize'], function (globalize) {
'use strict';
function parseISO8601Date(s, toLocal) {
diff --git a/src/bower_components/emby-webcomponents/dialog/dialog.template.html b/src/bower_components/emby-webcomponents/dialog/dialog.template.html
index cc1843fde4..eae210d14e 100644
--- a/src/bower_components/emby-webcomponents/dialog/dialog.template.html
+++ b/src/bower_components/emby-webcomponents/dialog/dialog.template.html
@@ -1,4 +1,4 @@
-