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

119 lines
3.2 KiB
JavaScript
Raw Normal View History

2015-05-15 11:46:20 -04:00
(function () {
function setImageIntoElement(elem, url) {
2015-06-27 23:29:50 -04:00
if (elem.tagName !== "IMG") {
2015-05-15 11:46:20 -04:00
elem.style.backgroundImage = "url('" + url + "')";
} else {
elem.setAttribute("src", url);
}
}
2015-06-15 00:17:12 -04:00
var fileSystem;
function getFileSystem() {
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
var deferred = DeferredBuilder.Deferred();
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
if (fileSystem) {
deferred.resolveWith(null, [fileSystem]);
} else {
requestFileSystem(PERSISTENT, 0, function (fs) {
fileSystem = fs;
deferred.resolveWith(null, [fileSystem]);
});
}
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
return deferred.promise();
2015-05-15 11:46:20 -04:00
}
2015-06-15 00:17:12 -04:00
function indexedDbBlobImageStore() {
2015-05-15 11:46:20 -04:00
var self = this;
2015-06-01 10:49:23 -04:00
function getCacheKey(url) {
2015-06-15 00:17:12 -04:00
2015-06-01 10:49:23 -04:00
// 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);
}
}
2015-06-15 00:17:12 -04:00
2015-06-01 10:49:23 -04:00
return CryptoJS.MD5(url).toString();
}
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
function normalizeReturnUrl(url) {
if ($.browser.safari) {
2015-06-19 13:22:54 -04:00
2015-06-19 18:01:47 -04:00
// Use the embedded server for iOS8, and also if we don't know the iOS version, just to be safe
2015-07-10 00:44:21 -04:00
//if (($.browser.iOSVersion || 0) < 9) {
2015-07-08 12:10:34 -04:00
return url.replace('file://', '');
2015-07-10 00:44:21 -04:00
//}
2015-06-15 00:17:12 -04:00
}
return url;
}
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
self.getImageUrl = function (originalUrl) {
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
if ($.browser.android && originalUrl.indexOf('tag=') != -1) {
originalUrl += "&format=webp";
}
2015-05-15 11:46:20 -04:00
var deferred = DeferredBuilder.Deferred();
2015-06-15 00:17:12 -04:00
var key = getCacheKey(originalUrl);
2015-05-15 11:46:20 -04:00
2015-09-11 22:18:09 -04:00
//Logger.log('getImageUrl:' + originalUrl);
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
getFileSystem().done(function (fileSystem) {
var path = fileSystem.root.toURL() + "/emby/cache/" + key;
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
resolveLocalFileSystemURL(path, function (fileEntry) {
var localUrl = normalizeReturnUrl(fileEntry.toURL());
2015-09-11 22:18:09 -04:00
//Logger.log('returning cached file: ' + localUrl);
2015-06-15 00:17:12 -04:00
deferred.resolveWith(null, [localUrl]);
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
}, function () {
2015-05-15 11:46:20 -04:00
2015-06-26 23:27:38 -04:00
Logger.log('downloading: ' + originalUrl);
2015-06-15 00:17:12 -04:00
var ft = new FileTransfer();
ft.download(originalUrl, path, function (entry) {
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
var localUrl = normalizeReturnUrl(entry.toURL());
2015-05-15 11:46:20 -04:00
2015-06-26 23:27:38 -04:00
Logger.log(localUrl);
2015-06-15 00:17:12 -04:00
deferred.resolveWith(null, [localUrl]);
2015-05-15 11:46:20 -04:00
});
});
});
return deferred.promise();
};
self.setImageInto = function (elem, url) {
function onFail() {
setImageIntoElement(elem, url);
}
self.getImageUrl(url).done(function (localUrl) {
2015-06-15 00:17:12 -04:00
2015-05-15 11:46:20 -04:00
setImageIntoElement(elem, localUrl);
}).fail(onFail);
};
2015-06-15 00:17:12 -04:00
window.ImageStore = self;
2015-05-15 11:46:20 -04:00
}
2015-06-15 00:17:12 -04:00
new indexedDbBlobImageStore();
2015-05-15 11:46:20 -04:00
2015-06-15 00:17:12 -04:00
})();