(function () {
const metaElementsSelector = ".entry-footer .entry-meta";
const dataAttr = "data-poemid";
const dbNameFav = "PtryLndDB_favorites"
const storeNameFav = "favorites";
const dbNameAudio = "PtryLndDB_audioRecords";
const storeNameAudio = "audioStore";
const indexNameAudio = "poemId";
function checkRecordExists(storeName, dbName, key, indexName) {
return new Promise((resolve, reject) => {
const openRequest = indexedDB.open(dbName);
openRequest.onupgradeneeded = function (event) {
db = event.target.result;
if (storeName === storeNameFav) {
if (!db.objectStoreNames.contains("favorites")) {
var objectStore = db.createObjectStore("favorites", { keyPath: "poemId" });
}
}
if (storeName === storeNameAudio) {
if (!db.objectStoreNames.contains('audioStore')) {
var objectStore = db.createObjectStore('audioStore', { keyPath: 'id', autoIncrement: true });
// Создаём индекс для поля 'poemId'
objectStore.createIndex('poemId', 'poemId', { unique: false });
}
}
};
openRequest.onsuccess = function (event) {
const db = event.target.result;
const transaction = db.transaction([storeName], "readonly");
const store = transaction.objectStore(storeName);
let request;
if (indexName) {
const index = store.index(indexName);
request = index.get(key);
}
else {
request = store.get(key)
}
request.onsuccess = function () {
if (request.result === undefined)
resolve(false); // не найдена
else
resolve(true); // запись найдена
};
request.onerror = function () {
resolve(new Error( "Ошибка при поиске записи: ", event.target.error));
};
};
openRequest.onerror = function (event) {
reject(new Error("Ошибка при открытии базы данных: ", event.target.error));
};
})
}
async function processMetaEntries() {
const metaElements = document.querySelectorAll(metaElementsSelector);
for (const element of metaElements) {
const poemId = element.getAttribute(dataAttr);
const ulElement = element.querySelector('ul');
if (poemId != null && ulElement != null) {
// .. esrt Favorite
try {
const existsFav = await checkRecordExists(storeNameFav, dbNameFav, poemId, null);
if (existsFav) {
// создаем элемент
const liElement = document.createElement('li');
liElement.innerHTML = 'Избранное';
// add to parent element
ulElement.appendChild(liElement);
}
}
catch (error) {
console.error("Ошибка в " + storeNameFav, error);
}
// dann Audio ..
try {
const existsAudio = await checkRecordExists(storeNameAudio, dbNameAudio, poemId, indexNameAudio);
if (existsAudio) {
// создаем элемент
const liElement = document.createElement('li');
liElement.innerHTML = 'Аудиозапись';
// add to parent element
ulElement.appendChild(liElement);
}
}
catch (error) {
console.error("Ошибка в " + storeNameAudio, error);
}
}
}
}
processMetaEntries();
})()