';
+ return '';
},
getPlayedIndicatorHtml: function (item) {
diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js
index 45004c5582..1058fe6e6b 100644
--- a/dashboard-ui/scripts/librarymenu.js
+++ b/dashboard-ui/scripts/librarymenu.js
@@ -33,7 +33,12 @@
html += '';
- if (!$.browser.mobile) {
+ //if (AppInfo.isNativeApp && $.browser.android)
+ //{
+ // html += '';
+ //}
+
+ if (!$.browser.mobile && !AppInfo.isTouchPreferred) {
html += 'settings';
}
@@ -94,8 +99,27 @@
// Have to wait for document ready here because otherwise
// we may see the jQM redirect back and forth problem
$(initViewMenuBarHeadroom);
+
+ //$('.headerButtonViewMenu').off('click', onViewButtonClick).on('click', onViewButtonClick);
}
+ //function onViewButtonClick() {
+
+ // var html = '
';
+
+
+ // html += '
';
+
+ // $(document.body).append(html);
+
+ // var elem = $('.appViewMenuPanel').panel({}).trigger('create').panel("open").on("panelclose", function () {
+
+ // $(this).off("panelclose").remove();
+ // });
+
+
+ //}
+
function initViewMenuBarHeadroom() {
// grab an element
diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js
index 8e543e0521..6745e54aba 100644
--- a/dashboard-ui/scripts/mediacontroller.js
+++ b/dashboard-ui/scripts/mediacontroller.js
@@ -508,7 +508,7 @@
Dashboard.loadLocalAssetManager().done(function () {
- var serverInfo = ApiClient.serverInfo().Id;
+ var serverInfo = ApiClient.serverInfo();
if (serverInfo.Id) {
var localMediaSource = window.LocalAssetManager.getLocalMediaSource(serverInfo.Id, itemId);
diff --git a/dashboard-ui/scripts/mypreferenceswebclient.js b/dashboard-ui/scripts/mypreferenceswebclient.js
index 6059cafd46..5b7bc5f11d 100644
--- a/dashboard-ui/scripts/mypreferenceswebclient.js
+++ b/dashboard-ui/scripts/mypreferenceswebclient.js
@@ -18,6 +18,7 @@
$('#selectEnableItemPreviews', page).val(AppSettings.enableItemPreviews().toString().toLowerCase()).selectmenu("refresh");
$('#chkEnableLibraryTileNames', page).checked(displayPreferences.CustomPrefs.enableLibraryTileNames != '0').checkboxradio("refresh");
+ $('#chkEnableFullScreen', page).checked(AppSettings.enableFullScreen().toString().toLowerCase() == 'true').checkboxradio("refresh");
Dashboard.hideLoadingMsg();
}
@@ -52,6 +53,7 @@
AppSettings.maxChromecastBitrate($('#selectMaxChromecastBitrate', page).val());
AppSettings.enableItemPreviews($('#selectEnableItemPreviews', page).val() == 'true');
+ AppSettings.enableFullScreen($('#chkEnableFullScreen', page).checked());
var userId = getParameterByName('userId') || Dashboard.getCurrentUserId();
@@ -100,6 +102,12 @@
$('.labelGenericExternalPlayers', page).show();
$('.labelNativeExternalPlayers', page).hide();
}
+
+ if (AppInfo.supportsFullScreen) {
+ $('.fldFullscreen', page).show();
+ } else {
+ $('.fldFullscreen', page).hide();
+ }
});
})(jQuery, window, document);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index 434988d984..ee86337624 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -1626,6 +1626,7 @@ var AppInfo = {};
} else {
apiClient = new MediaBrowser.ApiClient(Logger, Dashboard.serverAddress(), AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId);
+ apiClient.enableAutomaticNetworking = false;
ConnectionManager.addApiClient(apiClient);
}
diff --git a/dashboard-ui/thirdparty/apiclient/apiclient.js b/dashboard-ui/thirdparty/apiclient/apiclient.js
index d9917e76df..b6dd7b6ad3 100644
--- a/dashboard-ui/thirdparty/apiclient/apiclient.js
+++ b/dashboard-ui/thirdparty/apiclient/apiclient.js
@@ -173,7 +173,7 @@
}
}
- if (!self.enableAutomaticNetwork || self.connectionMode == null) {
+ if (self.enableAutomaticNetworking === false || request.type != "GET") {
logger.log('Requesting url without automatic networking: ' + request.url);
return AjaxApi.ajax(request).fail(onRequestFail);
}
@@ -230,7 +230,7 @@
logger.log("Reconnect succeeeded to " + url);
- self.connectionMode = connectionMode;
+ self.serverInfo().LastConnectionMode = connectionMode;
self.serverAddress(url);
deferred.resolve();
@@ -257,7 +257,7 @@
var deferred = DeferredBuilder.Deferred();
setTimeout(function () {
- tryReconnectInternal(deferred, self.connectionMode, 0);
+ tryReconnectInternal(deferred, self.serverInfo().LastConnectionMode, 0);
}, 500);
return deferred.promise();
}
@@ -271,7 +271,9 @@
if (replaceUrl) {
- var baseUrl = MediaBrowser.ServerInfo.getServerAddress(self.serverInfo(), self.connectionMode);
+ var currentServerInfo = self.serverInfo();
+
+ var baseUrl = MediaBrowser.ServerInfo.getServerAddress(currentServerInfo, currentServerInfo.LastConnectionMode);
request.url = replaceServerAddress(request.url, baseUrl);
}
@@ -360,7 +362,7 @@
return url;
};
- self.enableAutomaticNetworking = function (server, connectionMode, serverUrl) {
+ self.updateServerInfo = function (server, connectionMode) {
if (server == null) {
throw new Error('server cannot be null');
@@ -370,16 +372,11 @@
throw new Error('connectionMode cannot be null');
}
- if (!serverUrl) {
- throw new Error('serverUrl cannot be null or empty');
- }
-
- logger.log('Begin enableAutomaticNetworking');
+ logger.log('Begin updateServerInfo');
self.serverInfo(server);
- self.connectionMode = connectionMode;
- self.enableAutomaticNetwork = true;
+ var serverUrl = MediaBrowser.ServerInfo.getServerAddress(connectionMode);
logger.log('Setting server address to ' + serverUrl);
self.serverAddress(serverUrl);
};
diff --git a/dashboard-ui/thirdparty/apiclient/connectionmanager.js b/dashboard-ui/thirdparty/apiclient/connectionmanager.js
index a29f44b75d..6a737cdfa8 100644
--- a/dashboard-ui/thirdparty/apiclient/connectionmanager.js
+++ b/dashboard-ui/thirdparty/apiclient/connectionmanager.js
@@ -221,19 +221,28 @@
}
var credentials = credentialProvider.credentials();
- var server = credentials.Servers.filter(function (s) {
+ var servers = credentials.Servers.filter(function (s) {
return stringEqualsIgnoreCase(s.Id, serverId);
- })[0];
+ });
+
+ if (!servers.length) {
+ throw new Error('Server not found: ' + serverId);
+ }
+
+ var server = servers[0];
return getOrAddApiClient(server, server.LastConnectionMode);
};
function onAuthenticated(apiClient, result, options, saveCredentials) {
- var server = apiClient.serverInfo();
-
var credentials = credentialProvider.credentials();
+ var servers = credentials.Servers.filter(function (s) {
+ return s.Id == result.ServerId;
+ });
+
+ var server = servers.length ? servers[0] : apiClient.serverInfo();
server.DateLastAccessed = new Date().getTime();
server.Id = result.ServerId;
@@ -942,7 +951,7 @@
MediaBrowser.ConnectionState.ServerSignIn;
result.Servers.push(server);
- result.ApiClient.enableAutomaticNetworking(server, connectionMode, MediaBrowser.ServerInfo.getServerAddress(server, connectionMode));
+ result.ApiClient.updateServerInfo(server, connectionMode);
if (result.State == MediaBrowser.ConnectionState.SignedIn) {
afterConnected(result.ApiClient, options);
diff --git a/dashboard-ui/thirdparty/cordova/android/iap.js b/dashboard-ui/thirdparty/cordova/android/iap.js
index 16fd22553a..82038233f9 100644
--- a/dashboard-ui/thirdparty/cordova/android/iap.js
+++ b/dashboard-ui/thirdparty/cordova/android/iap.js
@@ -3,7 +3,7 @@
var unlockId = "com.mb.android.unlock";
var updatedProducts = [];
- function updateProductInfo(id, owned) {
+ function updateProductInfo(id, owned, price) {
updatedProducts = updatedProducts.filter(function (r) {
return r.id != id;
@@ -11,7 +11,8 @@
var product = {
id: id,
- owned: owned
+ owned: owned,
+ price: price
};
updatedProducts.push(product);
@@ -19,12 +20,6 @@
Events.trigger(IapManager, 'productupdated', [product]);
}
- function hasPurchased(id) {
- var product = getProduct(id);
-
- return product != null && product.owned;
- }
-
function getProduct(id) {
var products = updatedProducts.filter(function (r) {
return r.id == id;
@@ -55,7 +50,7 @@
window.IapManager = {
isPurchaseAvailable: isPurchaseAvailable,
- hasPurchased: hasPurchased,
+ getProductInfo: getProduct,
updateProduct: updateProductInfo,
beginPurchase: beginPurchase,
onPurchaseComplete: onPurchaseComplete
diff --git a/dashboard-ui/thirdparty/cordova/iap.js b/dashboard-ui/thirdparty/cordova/iap.js
index 428d1e28a0..b092bd74ef 100644
--- a/dashboard-ui/thirdparty/cordova/iap.js
+++ b/dashboard-ui/thirdparty/cordova/iap.js
@@ -1,15 +1,19 @@
(function () {
var unlockAlias = "premium features";
+ var unlockAppProductId = 'appunlock';
+
var updatedProducts = [];
- function updateProductInfo(p) {
+ function updateProductInfo(product) {
updatedProducts = updatedProducts.filter(function (r) {
- return r.id != p.id;
+ return r.id != product.id;
});
- updatedProducts.push(p);
+ updatedProducts.push(product);
+
+ Events.trigger(IapManager, 'productupdated', [product]);
}
function normalizeId(id) {
@@ -31,20 +35,15 @@
return products.length ? products[0] : null;
}
- function hasPurchased(id) {
- var product = getProduct(id);
-
- return product != null && product.owned;
- }
-
function isPurchaseAvailable(id) {
var product = getProduct(id);
- return product != null && product.canPurchase;
+ return product != null && product.valid /*&& product.canPurchase*/;
}
function beginPurchase(id) {
-
+ id = normalizeId(id);
+ store.order(id);
}
function validateProduct(product, callback) {
@@ -80,22 +79,33 @@
// iOS
store.register({
- id: "appunlock",
+ id: unlockAppProductId,
alias: unlockAlias,
type: store.NON_CONSUMABLE
});
// When purchase of the full version is approved,
// show some logs and finish the transaction.
- store.when(unlockAlias).approved(function (order) {
+ store.when(unlockAppProductId).approved(function (order) {
log('You just unlocked the FULL VERSION!');
+ alert('approved');
order.finish();
});
+ store.when(unlockAppProductId).verified(function (p) {
+ alert('verified');
+ log("verified");
+ p.finish();
+ });
+
// The play button can only be accessed when the user
// owns the full version.
- store.when(unlockAlias).updated(function (product) {
+ store.when(unlockAppProductId).updated(function (product) {
+ if (product.loaded && product.valid && product.state == store.APPROVED) {
+ console.log('finishing previously created transaction');
+ product.finish();
+ }
updateProductInfo(product);
});
@@ -114,7 +124,7 @@
window.IapManager = {
isPurchaseAvailable: isPurchaseAvailable,
- hasPurchased: hasPurchased,
+ getProductInfo: getProduct,
beginPurchase: beginPurchase
};
diff --git a/dashboard-ui/thirdparty/cordova/registrationservices.js b/dashboard-ui/thirdparty/cordova/registrationservices.js
index 34f1d6e7ce..fc195a0d93 100644
--- a/dashboard-ui/thirdparty/cordova/registrationservices.js
+++ b/dashboard-ui/thirdparty/cordova/registrationservices.js
@@ -13,7 +13,7 @@
return "com.mb.android.unlock";
}
- return 'premiumunlock';
+ return 'appunlock';
}
function validatePlayback(deferred) {
@@ -24,20 +24,12 @@
return;
}
- validateFeature({
-
- id: getPremiumUnlockFeatureId()
-
- }, deferred);
+ validateFeature(getPremiumUnlockFeatureId(), deferred);
}
function validateLiveTV(deferred) {
- validateFeature({
-
- id: getPremiumUnlockFeatureId()
-
- }, deferred);
+ validateFeature(getPremiumUnlockFeatureId(), deferred);
}
function getRegistrationInfo(feature, enableSupporterUnlock) {
@@ -50,17 +42,20 @@
return ConnectionManager.getRegistrationInfo(feature, ApiClient);
}
- function validateFeature(info, deferred) {
+ function validateFeature(id, deferred) {
- if (IapManager.hasPurchased(info.id)) {
+ var info = IapManager.getProductInfo(id) || {};
+
+ if (info.owned) {
deferred.resolve();
return;
}
var productInfo = {
enableSupporterUnlock: isAndroid(),
- enableAppUnlock: IapManager.isPurchaseAvailable(info.id),
- id: info.id
+ enableAppUnlock: IapManager.isPurchaseAvailable(id),
+ id: id,
+ price: info.price
};
var prefix = isAndroid() ? 'android' : 'ios';
@@ -89,7 +84,7 @@
html += '
';
- html += '
';
html += '';
@@ -155,10 +155,9 @@
currentDisplayingProductInfo = info;
currentDisplayingDeferred = deferred;
- $('.inAppPurchaseForm', elem).on('submit', function () {
+ $('.btnAppUnlock', elem).on('click', function () {
IapManager.beginPurchase(info.id);
- return false;
});
$('.btnCancel', elem).on('click', function () {
@@ -166,12 +165,7 @@
clearCurrentDisplayingInfo();
cancelInAppPurchase();
- // For testing purposes
- if (!info.enableSupporterUnlock && !info.enableAppUnlock) {
- deferred.resolve();
- } else {
- deferred.reject();
- }
+ deferred.reject();
});
$('.btnSignInSupporter', elem).on('click', function () {
@@ -238,9 +232,9 @@
}
if (isAndroid()) {
- requirejs(['thirdparty/cordova/android/iap', onIapManagerLoaded]);
+ requirejs(['thirdparty/cordova/android/iap'], onIapManagerLoaded);
} else {
- requirejs(['thirdparty/cordova/iap', onIapManagerLoaded]);
+ requirejs(['thirdparty/cordova/iap'], onIapManagerLoaded);
}
})();
\ No newline at end of file