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

consolidate slideout panels

This commit is contained in:
Luke Pulverenti 2015-05-29 19:51:33 -04:00
parent bb1d91b46a
commit 69a57de928
17 changed files with 388 additions and 198 deletions

View file

@ -0,0 +1,11 @@
(function () {
window.FileSystem = {
fileExists: function (path) {
var exists = NativeFileSystem.fileExists(path);
return false;
}
};
})();

View file

@ -0,0 +1,220 @@

(function () {
function setImageIntoElement(elem, url) {
if (elem.tagName === "DIV") {
elem.style.backgroundImage = "url('" + url + "')";
} else {
elem.setAttribute("src", url);
}
}
// IndexedDB
var indexedDb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
dbVersion = 1.0;
var dbName = "emby7";
var imagesStoreName = "images";
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]);
}
}
// For future use. Currently only in latest Firefox versions
request.onupgradeneeded = function (event) {
createObjectStore(event.target.result);
};
return deferred.promise();
}
function indexedDbBlobImageStore() {
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();
};
self.getImageUrl = function (originalUrl) {
console.log('getImageUrl:' + originalUrl);
var key = CryptoJS.MD5(originalUrl + "1").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 = "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() {
setImageIntoElement(elem, url);
}
self.getImageUrl(url).done(function (localUrl) {
setImageIntoElement(elem, localUrl);
}).fail(onFail);
};
}
new indexedDbBlobImageStore();
})();

View file

@ -537,6 +537,8 @@
function tryJoinWebSession(device, enableRetry) {
// First try to join existing session. If it fails, launch a new one
console.log('calling joinWebApp');
device.getWebAppLauncher().joinWebApp(ApplicationID).success(function (session) {
@ -560,29 +562,7 @@
function launchWebApp(device) {
// First try to join existing session. If it fails, launch a new one
device.getWebAppLauncher().joinWebApp(ApplicationID).success(function (session) {
console.log('joinWebApp success. calling onSessionConnected');
setupWebAppSession(device, session);
}).error(function (err) {
console.log('joinWebApp error: ' + JSON.stringify(err) + '. calling launchWebApp');
device.getWebAppLauncher().launchWebApp(ApplicationID).success(function (session) {
console.log('launchWebApp success. calling onSessionConnected');
setupWebAppSession(device, session);
}).error(function (err1) {
console.log('launchWebApp error:' + JSON.stringify(err1));
});
});
tryJoinWebSession(device, true);
}
function onDeviceReady(device) {

View file

@ -0,0 +1,11 @@
(function () {
window.FileSystem = {
fileExists: function (path) {
return false;
}
};
})();

View file

@ -35,23 +35,19 @@
var self = this;
self.addImageToDatabase = function (blob, key) {
var deferred = DeferredBuilder.Deferred();
self.addImageToDatabase = function (blob, key, deferred) {
console.log("addImageToDatabase");
self.db().transaction(function (tx) {
tx.executeSql("INSERT INTO images (id, data) VALUES (?,?)", [key, blob], function (tx, res) {
tx.executeSql("REPLACE INTO images (id, data) VALUES (?,?)", [key, blob], function (tx, res) {
deferred.resolve();
}, function (e) {
deferred.reject();
});
});
return deferred.promise();
};
self.db = function () {
@ -146,11 +142,7 @@
var dataURL = "data:image/jpeg;base64," + b64;
// Put the received blob into the database
self.addImageToDatabase(dataURL, key).done(function () {
deferred.resolve();
}).fail(function () {
deferred.reject();
});
self.addImageToDatabase(dataURL, key, deferred);
} catch (err) {
console.log("Error adding image to database");
deferred.reject();