mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-06 03:34:40 +00:00
103 lines
3.0 KiB
JavaScript
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);
|