mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update recording layouts
This commit is contained in:
parent
47c67da9a5
commit
633e2f0222
54 changed files with 375 additions and 83 deletions
178
dashboard-ui/bower_components/emby-webcomponents/images/indexeddbimagefetcher.js
vendored
Normal file
178
dashboard-ui/bower_components/emby-webcomponents/images/indexeddbimagefetcher.js
vendored
Normal file
|
@ -0,0 +1,178 @@
|
|||
define(['cryptojs-md5'], function () {
|
||||
|
||||
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB;
|
||||
var dbVersion = 1;
|
||||
var imagesTableName = "images";
|
||||
var db;
|
||||
|
||||
function createObjectStore(dataBase) {
|
||||
|
||||
dataBase.createObjectStore(imagesTableName, { keyPath: "id" });
|
||||
db = dataBase;
|
||||
}
|
||||
|
||||
// Create/open database
|
||||
var request = indexedDB.open("imagesDb2", dbVersion);
|
||||
|
||||
request.onupgradeneeded = function () {
|
||||
createObjectStore(request.result);
|
||||
};
|
||||
|
||||
request.onsuccess = function (event) {
|
||||
|
||||
console.log("Success creating/accessing IndexedDB database");
|
||||
|
||||
var localDb = request.result;
|
||||
|
||||
localDb.onerror = function (event) {
|
||||
console.log("Error creating/accessing IndexedDB database");
|
||||
};
|
||||
|
||||
// Interim solution for Google Chrome to create an objectStore. Will be deprecated
|
||||
if (localDb.setVersion) {
|
||||
if (localDb.version != dbVersion) {
|
||||
var setVersion = localDb.setVersion(dbVersion);
|
||||
setVersion.onsuccess = function () {
|
||||
createObjectStore(localDb);
|
||||
};
|
||||
}
|
||||
else {
|
||||
db = localDb;
|
||||
}
|
||||
}
|
||||
else {
|
||||
db = localDb;
|
||||
}
|
||||
}
|
||||
|
||||
function revoke(url) {
|
||||
|
||||
//URL.revokeObjectURL(url);
|
||||
|
||||
}
|
||||
|
||||
function loadImage(elem, url) {
|
||||
|
||||
if (elem.tagName !== "IMG") {
|
||||
|
||||
elem.style.backgroundImage = "url('" + url + "')";
|
||||
revoke(url);
|
||||
return Promise.resolve(elem);
|
||||
|
||||
} else {
|
||||
elem.setAttribute("src", url);
|
||||
revoke(url);
|
||||
return Promise.resolve(elem);
|
||||
}
|
||||
}
|
||||
|
||||
function getCacheKey(url) {
|
||||
|
||||
// Try to strip off the domain to share the cache between local and remote connections
|
||||
var index = url.indexOf('://');
|
||||
|
||||
if (index != -1) {
|
||||
url = url.substring(index + 3);
|
||||
|
||||
index = url.indexOf('/');
|
||||
|
||||
if (index != -1) {
|
||||
url = url.substring(index + 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return CryptoJS.MD5(url).toString();
|
||||
}
|
||||
|
||||
function getFromDb(key) {
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
var transaction = db.transaction(imagesTableName, "read");
|
||||
|
||||
// Retrieve the file that was just stored
|
||||
var request = transaction.objectStore(imagesTableName).get(key);
|
||||
|
||||
request.onsuccess = function (event) {
|
||||
var imgFile = event.target.result;
|
||||
|
||||
// Get window.URL object
|
||||
var URL = window.URL || window.webkitURL;
|
||||
|
||||
// Create and revoke ObjectURL
|
||||
var imgURL = URL.createObjectURL(imgFile);
|
||||
|
||||
resolve(imgURL);
|
||||
};
|
||||
|
||||
request.onerror = reject;
|
||||
});
|
||||
}
|
||||
|
||||
function saveImageToDb(blob, key, resolve) {
|
||||
|
||||
// Open a transaction to the database
|
||||
var transaction = db.transaction(imagesTableName, "readwrite");
|
||||
|
||||
// Put the blob into the dabase
|
||||
var put = transaction.objectStore(imagesTableName).put({ id: key, data: blob });
|
||||
|
||||
// Get window.URL object
|
||||
var URL = window.URL || window.webkitURL;
|
||||
|
||||
var imgURL = URL.createObjectURL(blob);
|
||||
|
||||
resolve(imgURL);
|
||||
}
|
||||
|
||||
function getImageUrl(originalUrl) {
|
||||
|
||||
var key = getCacheKey(originalUrl);
|
||||
|
||||
return getFromDb(key).catch(function () {
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
xhr.open("GET", originalUrl, true);
|
||||
// Set the responseType to blob
|
||||
xhr.responseType = "blob";
|
||||
|
||||
xhr.addEventListener("load", function () {
|
||||
if (xhr.status === 200) {
|
||||
|
||||
// Put the received blob into IndexedDB
|
||||
saveImageToDb(xhr.response, key, resolve);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
}, false);
|
||||
|
||||
xhr.onerror = reject;
|
||||
|
||||
// Send XHR
|
||||
xhr.send();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
loadImage: function (elem, url) {
|
||||
|
||||
if (!db) {
|
||||
return loadImage(elem, url);
|
||||
}
|
||||
|
||||
return getImageUrl(url).then(function (localUrl) {
|
||||
|
||||
return loadImage(elem, localUrl);
|
||||
|
||||
}, function () {
|
||||
return loadImage(elem, url);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue