extract scripts
This commit is contained in:
parent
d84e09e501
commit
6c97b11f21
41 changed files with 8363 additions and 204 deletions
|
@ -1,5 +1,4 @@
|
|||
|
||||
(function () {
|
||||
(function () {
|
||||
|
||||
function setImageIntoElement(elem, url) {
|
||||
|
||||
|
@ -12,62 +11,20 @@
|
|||
}
|
||||
}
|
||||
|
||||
// IndexedDB
|
||||
var indexedDb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
|
||||
dbVersion = 1.0;
|
||||
var fileSystem;
|
||||
function getFileSystem() {
|
||||
|
||||
var dbName = "emby7";
|
||||
var imagesStoreName = "images";
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
function createObjectStore(dataBase) {
|
||||
// Create an objectStore
|
||||
console.log("Creating objectStore");
|
||||
dataBase.createObjectStore(imagesStoreName);
|
||||
}
|
||||
|
||||
function openDb() {
|
||||
|
||||
var deferred = $.Deferred();
|
||||
|
||||
// Create/open database
|
||||
var request = indexedDb.open(dbName, dbVersion);
|
||||
|
||||
request.onerror = function (event) {
|
||||
|
||||
console.log("Error creating/accessing IndexedDB database");
|
||||
deferred.reject();
|
||||
};
|
||||
|
||||
request.onsuccess = function (event) {
|
||||
console.log("Success creating/accessing IndexedDB database");
|
||||
|
||||
var db = request.result || event.target.result;
|
||||
|
||||
db.onerror = function (event) {
|
||||
console.log("Error creating/accessing IndexedDB database");
|
||||
};
|
||||
|
||||
// Interim solution for Google Chrome to create an objectStore. Will be deprecated
|
||||
if (db.setVersion) {
|
||||
if (db.version != dbVersion) {
|
||||
var setVersion = db.setVersion(dbVersion);
|
||||
setVersion.onsuccess = function () {
|
||||
createObjectStore(db);
|
||||
deferred.resolveWith(null, [db]);
|
||||
};
|
||||
} else {
|
||||
deferred.resolveWith(null, [db]);
|
||||
}
|
||||
} else {
|
||||
deferred.resolveWith(null, [db]);
|
||||
}
|
||||
if (fileSystem) {
|
||||
deferred.resolveWith(null, [fileSystem]);
|
||||
} else {
|
||||
requestFileSystem(PERSISTENT, 0, function (fs) {
|
||||
fileSystem = fs;
|
||||
deferred.resolveWith(null, [fileSystem]);
|
||||
});
|
||||
}
|
||||
|
||||
// For future use. Currently only in latest Firefox versions
|
||||
request.onupgradeneeded = function (event) {
|
||||
createObjectStore(event.target.result);
|
||||
};
|
||||
|
||||
return deferred.promise();
|
||||
}
|
||||
|
||||
|
@ -75,70 +32,6 @@
|
|||
|
||||
var self = this;
|
||||
|
||||
openDb().done(function (db) {
|
||||
|
||||
self._db = db;
|
||||
window.ImageStore = self;
|
||||
});
|
||||
|
||||
self.addImageToDatabase = function (blob, key, deferred) {
|
||||
|
||||
console.log("addImageToDatabase");
|
||||
|
||||
// Open a transaction to the database
|
||||
var transaction = self.db().transaction([imagesStoreName], "readwrite");
|
||||
|
||||
// Put the blob into the dabase
|
||||
var putRequest = transaction.objectStore(imagesStoreName).put(blob, key);
|
||||
|
||||
putRequest.onsuccess = function (event) {
|
||||
deferred.resolve();
|
||||
};
|
||||
|
||||
putRequest.onerror = function () {
|
||||
deferred.reject();
|
||||
};
|
||||
};
|
||||
|
||||
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) {
|
||||
|
||||
// Get window.URL object
|
||||
var URL = window.URL || window.webkitURL;
|
||||
|
||||
// Create and revoke ObjectURL
|
||||
var imgUrl = URL.createObjectURL(imgFile);
|
||||
|
||||
deferred.resolveWith(null, [imgUrl]);
|
||||
} else {
|
||||
deferred.reject();
|
||||
}
|
||||
};
|
||||
|
||||
getRequest.onerror = function () {
|
||||
deferred.reject();
|
||||
};
|
||||
|
||||
return deferred.promise();
|
||||
};
|
||||
|
||||
function getCacheKey(url) {
|
||||
|
||||
// Try to strip off the domain to share the cache between local and remote connections
|
||||
|
@ -160,66 +53,41 @@
|
|||
|
||||
self.getImageUrl = function (originalUrl) {
|
||||
|
||||
console.log('getImageUrl:' + originalUrl);
|
||||
|
||||
var key = getCacheKey(originalUrl);
|
||||
if ($.browser.android && originalUrl.indexOf('tag=') != -1) {
|
||||
originalUrl += "&format=webp";
|
||||
}
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
var key = getCacheKey(originalUrl);
|
||||
|
||||
self.get(key).done(function (url) {
|
||||
console.log('getImageUrl:' + originalUrl);
|
||||
|
||||
deferred.resolveWith(null, [url]);
|
||||
getFileSystem().done(function (fileSystem) {
|
||||
var path = fileSystem.root.toURL() + "/emby/cache/" + key;
|
||||
|
||||
}).fail(function () {
|
||||
resolveLocalFileSystemURL(path, function (fileEntry) {
|
||||
var localUrl = fileEntry.toURL();
|
||||
console.log('returning cached file: ' + localUrl);
|
||||
console.log(localUrl);
|
||||
deferred.resolveWith(null, [localUrl]);
|
||||
|
||||
self.downloadImage(originalUrl, key).done(function () {
|
||||
self.get(key).done(function (url) {
|
||||
}, function () {
|
||||
|
||||
deferred.resolveWith(null, [url]);
|
||||
console.log('downloading: ' + originalUrl);
|
||||
var ft = new FileTransfer();
|
||||
ft.download(originalUrl, path, function (entry) {
|
||||
|
||||
}).fail(function () {
|
||||
var localUrl = entry.toURL();
|
||||
|
||||
deferred.reject();
|
||||
console.log(localUrl);
|
||||
deferred.resolveWith(null, [localUrl]);
|
||||
});
|
||||
}).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 = "blob";
|
||||
|
||||
xhr.addEventListener("load", function () {
|
||||
|
||||
if (xhr.status === 200) {
|
||||
console.log("Image retrieved");
|
||||
|
||||
// Put the received blob into IndexedDB
|
||||
self.addImageToDatabase(this.response, key, deferred);
|
||||
} else {
|
||||
deferred.reject();
|
||||
}
|
||||
}, false);
|
||||
|
||||
// Send XHR
|
||||
xhr.send();
|
||||
return deferred.promise();
|
||||
};
|
||||
|
||||
self.setImageInto = function (elem, url) {
|
||||
|
||||
function onFail() {
|
||||
|
@ -232,6 +100,8 @@
|
|||
|
||||
}).fail(onFail);
|
||||
};
|
||||
|
||||
window.ImageStore = self;
|
||||
}
|
||||
|
||||
new indexedDbBlobImageStore();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue