Files
BetterSEQTA-Plus/public/backgrounds/background.js
T
2023-10-20 07:09:38 +11:00

103 lines
3.0 KiB
JavaScript

// Open the database
const openDB = () => {
return new Promise((resolve, reject) => {
const request = indexedDB.open("MyDatabase", 1);
request.onerror = () => reject(request.error);
request.onsuccess = () => resolve(request.result);
request.onupgradeneeded = (event) => {
const db = event.target.result;
db.createObjectStore("backgrounds", { keyPath: "id" });
};
});
};
// Modified Read Data from IndexedDB
const readData = async () => {
const selectedBackground = localStorage.getItem("selectedBackground");
if (!selectedBackground) {
console.log("No selected background in local storage.");
return null;
}
const db = await openDB();
const tx = db.transaction("backgrounds", "readonly");
const store = tx.objectStore("backgrounds");
const request = store.get(selectedBackground);
return await new Promise((resolve, reject) => {
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
};
const updateBackground = async () => {
try {
const data = await readData();
if (!data) {
console.log("No data found in IndexedDB.");
const container = document.getElementById("media-container");
const currentMedia = container.querySelector(".current-media");
if (currentMedia) {
currentMedia.remove();
}
return;
}
const url = URL.createObjectURL(data.blob);
const container = document.getElementById("media-container");
// Create new element and set properties
let newElement;
if (data.type === "image") {
newElement = document.createElement("img");
newElement.src = url;
newElement.alt = "Uploaded content";
} else if (data.type === "video") {
newElement = document.createElement("video");
newElement.src = url;
newElement.autoplay = true;
newElement.loop = true;
newElement.muted = true;
}
// Mark the old element for removal
const oldElement = container.querySelector(".current-media");
if (oldElement) {
oldElement.classList.remove("current-media");
oldElement.classList.add("old-media");
}
// Add the new element and mark it as current
newElement.classList.add("current-media");
container.appendChild(newElement);
// Delay removal of old element
setTimeout(() => {
const oldMedia = container.querySelector(".old-media");
if (oldMedia) {
oldMedia.remove();
}
}, 100); // 0.1 second delay
} catch (error) {
console.error("An error occurred:", error);
}
};
// Main function to run on page load
const main = async () => {
await updateBackground(); // Initial background update
// Listen for changes to local storage
window.addEventListener("storage", async (event) => {
if (event.key === "selectedBackground") {
await updateBackground(); // Update background if 'selectedBackground' changes
}
});
};
// Run the main function when the document is ready
document.addEventListener("DOMContentLoaded", main);