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

update card layouts

This commit is contained in:
Luke Pulverenti 2015-05-13 00:55:19 -04:00
parent 8f4f29888e
commit bb38230c23
46 changed files with 1086 additions and 332 deletions

View file

@ -126,6 +126,7 @@
Events.trigger(self, 'requestfail', [
{
url: this.url,
type: this.type,
status: e.status,
errorCode: e.getResponseHeader("X-Application-Error-Code")
}]);

View file

@ -1070,39 +1070,56 @@
self.deleteServer = function (serverId) {
var connectToken = self.connectToken();
var credentials = credentialProvider.credentials();
if (!serverId) {
throw new Error("null serverId");
}
if (!connectToken) {
throw new Error("null connectToken");
}
if (!self.connectUserId()) {
throw new Error("null connectUserId");
}
var serverInfo = credentials.servers = credentials.servers.filter(function (s) {
return s.ConnectServerId == serverId;
});
var url = "https://connect.mediabrowser.tv/service/serverAuthorizations?serverId=" + serverId + "&userId=" + self.connectUserId();
return AjaxApi.ajax({
type: "DELETE",
url: url,
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
}).done(function () {
var credentials = credentialProvider.credentials();
function onDone() {
credentials = credentialProvider.credentials();
credentials.servers = credentials.servers.filter(function (s) {
return s.ConnectServerId != serverId;
});
credentialProvider.credentials(credentials);
}
});
if (serverInfo.ExchangeToken) {
var connectToken = self.connectToken();
if (!serverId) {
throw new Error("null serverId");
}
if (!connectToken) {
throw new Error("null connectToken");
}
if (!self.connectUserId()) {
throw new Error("null connectUserId");
}
var url = "https://connect.mediabrowser.tv/service/serverAuthorizations?serverId=" + serverId + "&userId=" + self.connectUserId();
return AjaxApi.ajax({
type: "DELETE",
url: url,
headers: {
"X-Connect-UserToken": connectToken,
"X-Application": appName + "/" + appVersion
}
}).done(onDone);
} else {
onDone();
var deferred = DeferredBuilder.Deferred();
deferred.resolve();
return deferred.promise();
}
};
self.rejectServer = function (serverId) {

View file

@ -57,18 +57,15 @@
}
var params = [artist, title, album, url, duration, elapsedTime];
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
try {
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
} catch (err) {
onUpdateMetasFail(err);
}
}
function onStateChanged(e, state) {
//console.log('nowplaying event: ' + e.type);
var player = this;
if (player.isDefaultPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
return;
}
updatePlayerState(state);
}
@ -115,7 +112,12 @@
var elapsedTime = 0;
var params = [artist, title, album, image, duration, elapsedTime];
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
try {
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
} catch (err) {
onUpdateMetasFail(err);
}
}
function onUpdateMetasSuccess() {
@ -125,7 +127,7 @@
function onUpdateMetasFail(fail) {
console.log('onUpdateMetasFail' + fail);
console.log('onUpdateMetasFail: ' + fail);
}
function bindToPlayer(player) {
@ -138,6 +140,8 @@
return;
}
console.log('binding remotecontrols to MediaPlayer');
player.getPlayerState().done(function (state) {
if (state.NowPlayingItem) {
@ -153,8 +157,12 @@
.on('positionchange.cordovaremote', onStateChanged);
}
console.log('binding remotecontrols to MediaController');
document.addEventListener("deviceready", function () {
console.log('binding remotecontrols to MediaController');
$(function () {
$(MediaController).on('playerchange', function () {

View file

@ -14,28 +14,29 @@
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
globalScope.ServerDiscovery = {
function findServersInternal(timeoutMs) {
findServers: function (timeoutMs) {
var deferred = DeferredBuilder.Deferred();
var deferred = DeferredBuilder.Deferred();
var servers = [];
var servers = [];
// Expected server properties
// Name, Id, Address, EndpointAddress (optional)
// Expected server properties
// Name, Id, Address, EndpointAddress (optional)
var chrome = globalScope.chrome;
var chrome = globalScope.chrome;
if (!chrome) {
deferred.resolveWith(null, [servers]);
return deferred.promise();
}
if (!chrome) {
deferred.resolveWith(null, [servers]);
return deferred.promise();
}
var isTimedOut = false;
var timeout;
var socketId;
var isTimedOut = false;
var socketId;
function startTimer() {
var timeout = setTimeout(function () {
timeout = setTimeout(function () {
isTimedOut = true;
deferred.resolveWith(null, [servers]);
@ -43,22 +44,22 @@
if (socketId) {
chrome.sockets.udp.onReceive.removeListener(onReceive);
chrome.sockets.udp.close(socketId);
}
}, timeoutMs);
}
function onReceive(info) {
function onReceive(info) {
console.log('ServerDiscovery message received');
console.log('ServerDiscovery message received');
console.log(info);
console.log(info);
if (info.socketId == socketId) {
if (info.socketId == socketId) {
try {
var json = arrayBufferToString(info.data);
console.log('Server discovery json: ' + json);
var server = JSON.parse(json);
server.RemoteAddress = info.remoteAddress;
@ -68,37 +69,61 @@
}
servers.push(server);
} catch (err) {
console.log('Error receiving server info: ' + err);
}
}
}
var port = 7359;
chrome.sockets.udp.create(function (createInfo) {
var port = 7359;
console.log('chrome.sockets.udp.create');
chrome.sockets.udp.create(function (createInfo) {
socketId = createInfo.socketId;
socketId = createInfo.socketId;
chrome.sockets.udp.bind(createInfo.socketId, '0.0.0.0', port, function (result) {
console.log('chrome.sockets.udp.bind');
var data = stringToArrayBuffer('who is EmbyServer?');
chrome.sockets.udp.bind(createInfo.socketId, '0.0.0.0', port, function (result) {
chrome.sockets.udp.send(createInfo.socketId, data, '255.255.255.255', port, function (result) {
if (result < 0) {
console.log('send fail: ' + result);
chrome.sockets.udp.close(createInfo.socketId);
var data = stringToArrayBuffer('who is EmbyServer?');
if (!isTimedOut) {
clearTimeout(timeout);
deferred.resolveWith(null, [servers]);
}
console.log('chrome.sockets.udp.send');
chrome.sockets.udp.send(createInfo.socketId, data, '255.255.255.255', port, function (result) {
} else {
if (result < 0) {
console.log('send fail: ' + result);
deferred.resolveWith(null, [servers]);
chrome.sockets.udp.close(createInfo.socketId);
console.log('sendTo: success ' + port);
} else {
if (!isTimedOut) {
chrome.sockets.udp.onReceive.addListener(onReceive);
}
}
});
console.log('sendTo: success ' + port);
startTimer();
chrome.sockets.udp.onReceive.addListener(onReceive);
}
});
});
});
return deferred.promise();
}
globalScope.ServerDiscovery = {
findServers: function (timeoutMs) {
var deferred = DeferredBuilder.Deferred();
deviceReadyPromise.done(function () {
findServersInternal(timeoutMs).done(function (result) {
deferred.resolveWith(null, [result]);
}).fail(function () {
deferred.reject();
});
});
@ -106,4 +131,14 @@
}
};
var deviceReadyDeferred = DeferredBuilder.Deferred();
var deviceReadyPromise = deviceReadyDeferred.promise();
document.addEventListener("deviceready", function () {
deviceReadyDeferred.resolve();
}, false);
})(window);

View file

@ -12,13 +12,23 @@
var unveilId = 0;
// Test search before setting to 0
var threshold = 100;
function getThreshold() {
var threshold = 100;
if (window.AppInfo && AppInfo.hasLowImageBandwidth) {
return 0;
}
// Test search before setting to 0
return 100;
}
$.fn.unveil = function () {
var $w = $(window),
th = threshold || 0,
th = getThreshold(),
attrib = "data-src",
images = this,
loaded;
@ -90,7 +100,7 @@
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
dbVersion = 1.0;
var dbName = "emby3";
var dbName = "emby4";
var imagesStoreName = "images";
function createObjectStore(dataBase) {
@ -160,9 +170,10 @@
var self = this;
var openPromise = openDb().done(function (db) {
openDb().done(function (db) {
self._db = db;
window.ImageStore = self;
});
self.addImageToDatabase = function (blob, key) {
@ -176,13 +187,6 @@
var put = transaction.objectStore(imagesStoreName).put(blob, key);
};
self.revokeUrl = function (url) {
// Get window.URL object
var URL = window.URL || window.webkitURL;
URL.revokeObjectURL(url);
};
self.db = function () {
return self._db;
@ -283,6 +287,7 @@
self.addImageToDatabase(dataURL, key);
deferred.resolve();
} catch (err) {
console.log("Error adding image to database");
deferred.reject();
}
} else {
@ -301,13 +306,9 @@
setImageIntoElement(elem, url);
}
openPromise.done(function () {
self.getImageUrl(url).done(function (localUrl) {
self.getImageUrl(url).done(function (localUrl) {
setImageIntoElement(elem, localUrl);
}).fail(onFail);
setImageIntoElement(elem, localUrl);
}).fail(onFail);
@ -318,9 +319,10 @@
var self = this;
var openPromise = openDb().done(function (db) {
openDb().done(function (db) {
self._db = db;
window.ImageStore = self;
});
self.addImageToDatabase = function (blob, key) {
@ -334,13 +336,6 @@
var put = transaction.objectStore(imagesStoreName).put(blob, key);
};
self.revokeUrl = function (url) {
// Get window.URL object
var URL = window.URL || window.webkitURL;
URL.revokeObjectURL(url);
};
self.db = function () {
return self._db;
@ -437,6 +432,8 @@
self.addImageToDatabase(blob, key);
deferred.resolve();
} catch (err) {
console.log("Error adding blob to database");
alert("Error adding blob to database");
deferred.reject();
}
} else {
@ -455,16 +452,250 @@
setImageIntoElement(elem, url);
}
openPromise.done(function () {
self.getImageUrl(url).done(function (localUrl) {
self.getImageUrl(url).done(function (localUrl) {
setImageIntoElement(elem, localUrl);
}).fail(onFail);
setImageIntoElement(elem, localUrl);
}).fail(onFail);
};
}
function indexedDbWebpImageStore() {
var self = this;
openDb().done(function (db) {
self._db = db;
window.ImageStore = self;
});
self.addImageToDatabase = function (blob, key) {
console.log("addImageToDatabase");
// Open a transaction to the database
var transaction = self.db().transaction([imagesStoreName], "readwrite");
// Put the blob into the dabase
var put = transaction.objectStore(imagesStoreName).put(blob, key);
};
self.db = function () {
return self._db;
};
self.get = function (key) {
var deferred = DeferredBuilder.Deferred();
var transaction = self.db().transaction([imagesStoreName], "readonly");
// Open a transaction to the database
var getRequest = transaction.objectStore(imagesStoreName).get(key);
getRequest.onsuccess = function (event) {
var imgFile = event.target.result;
if (imgFile) {
deferred.resolveWith(null, [imgFile]);
} else {
deferred.reject();
}
};
getRequest.onerror = function () {
deferred.reject();
};
return deferred.promise();
};
self.getImageUrl = function (originalUrl) {
console.log('getImageUrl:' + originalUrl);
var key = CryptoJS.SHA1(originalUrl).toString();
var deferred = DeferredBuilder.Deferred();
self.get(key).done(function (url) {
deferred.resolveWith(null, [url]);
}).fail(function () {
self.downloadImage(originalUrl, key).done(function () {
self.get(key).done(function (url) {
deferred.resolveWith(null, [url]);
}).fail(function () {
deferred.reject();
});
}).fail(function () {
deferred.reject();
});
});
return deferred.promise();
};
self.downloadImage = function (url, key) {
var deferred = DeferredBuilder.Deferred();
console.log('downloadImage:' + url);
// Create XHR
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
// Set the responseType to blob
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
console.log("Image retrieved");
try {
self.addImageToDatabase(this.response, key);
deferred.resolve();
} catch (err) {
console.log("Error adding image to database");
deferred.reject();
}
} else {
deferred.reject();
}
}, false);
// Send XHR
xhr.send();
return deferred.promise();
};
function decode(data, elem) {
console.log('decoding webp');
var WebPImage = { width: { value: 0 }, height: { value: 0 } }
var decoder = new WebPDecoder();
//Config, you can set all arguments or what you need, nothing no objeect
var config = decoder.WebPDecoderConfig;
var output_buffer = config.j;
var bitstream = config.input;
if (!decoder.WebPInitDecoderConfig(config)) {
throw new Error("Library version mismatch!\n");
}
var StatusCode = decoder.VP8StatusCode;
var status = decoder.WebPGetFeatures(data, data.length, bitstream);
if (status != 0) {
console.log('error');
}
var mode = decoder.WEBP_CSP_MODE;
output_buffer.J = 4;
status = decoder.WebPDecode(data, data.length, config);
var ok = (status == 0);
if (!ok) {
throw new Error("Decoding of %s failed.\n");
}
drawIntoElement(output_buffer, elem);
}
function drawIntoElement(output_buffer, elem) {
console.log('drawing canvas');
var bitmap = output_buffer.c.RGBA.ma;
var canvas = document.createElement("canvas");
var biHeight = output_buffer.height; var biWidth = output_buffer.width;
canvas.height = biHeight;
canvas.width = biWidth;
var context = canvas.getContext('2d');
var output = context.createImageData(canvas.width, canvas.height);
var outputData = output.data;
for (var h = 0; h < biHeight; h++) {
for (var w = 0; w < biWidth; w++) {
outputData[0 + w * 4 + (biWidth * 4) * h] = bitmap[1 + w * 4 + (biWidth * 4) * h];
outputData[1 + w * 4 + (biWidth * 4) * h] = bitmap[2 + w * 4 + (biWidth * 4) * h];
outputData[2 + w * 4 + (biWidth * 4) * h] = bitmap[3 + w * 4 + (biWidth * 4) * h];
outputData[3 + w * 4 + (biWidth * 4) * h] = bitmap[0 + w * 4 + (biWidth * 4) * h];
};
}
context.putImageData(output, 0, 0);
elem.appendChild(canvas);
}
self.setImageInto = function (elem, url) {
if (url.indexOf('format=webp') == -1 || elem.tagName != 'DIV') {
setImageIntoElement(elem, url);
return;
}
// Create XHR
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
// Set the responseType to blob
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
console.log("Image retrieved");
try {
var arr = new Uint8Array(this.response);
//// Convert the int array to a binary string
//// We have to use apply() as we are converting an *array*
//// and String.fromCharCode() takes one or more single values, not
//// an array.
//var raw = String.fromCharCode.apply(null, arr);
//// This works!!!
//var b64 = btoa(raw);
//var dataURL = "data:image/jpeg;base64," + b64;
console.log(url);
decode(arr, elem);
} catch (err) {
console.log("Error adding image to database");
}
} else {
}
}, false);
// Send XHR
xhr.send();
};
}
@ -475,17 +706,16 @@
self.setImageInto = setImageIntoElement;
}
if ($.browser.safari && indexedDB && window.Blob) {
console.log('creating indexedDbBlobImageStore');
window.ImageStore = new indexedDbBlobImageStore();
}
else if ($.browser.safari && indexedDB) {
console.log('creating indexedDbImageStore');
window.ImageStore = new indexedDbImageStore();
}
else {
console.log('creating simpleImageStore');
window.ImageStore = new simpleImageStore();
}
console.log('creating simpleImageStore');
window.ImageStore = new simpleImageStore();
//if ($.browser.safari && indexedDB && window.Blob) {
// console.log('creating indexedDbBlobImageStore');
// new indexedDbBlobImageStore();
//}
//else if ($.browser.safari && indexedDB) {
// console.log('creating indexedDbImageStore');
// new indexedDbImageStore();
//}
})();