WebView2Browser/wvbrowser_ui/controls_ui/history.js

144 строки
4.2 KiB
JavaScript

const INVALID_HISTORY_ID = -1;
function addHistoryItem(item, callback) {
queryDB((db) => {
let transaction = db.transaction(['history'], 'readwrite');
let historyStore = transaction.objectStore('history');
// Check if an item for this URI exists on this day
let currentDate = new Date();
let year = currentDate.getFullYear();
let month = currentDate.getMonth();
let date = currentDate.getDate();
let todayDate = new Date(year, month, date);
let existingItemsIndex = historyStore.index('stampedURI');
let lowerBound = [item.uri, todayDate];
let upperBound = [item.uri, currentDate];
let range = IDBKeyRange.bound(lowerBound, upperBound);
let request = existingItemsIndex.openCursor(range);
request.onsuccess = function(event) {
let cursor = event.target.result;
if (cursor) {
// There's an entry for this URI, update the item
cursor.value.timestamp = item.timestamp;
let updateRequest = cursor.update(cursor.value);
updateRequest.onsuccess = function(event) {
if (callback) {
callback(event.target.result.primaryKey);
}
};
} else {
// No entry for this URI, add item
let addItemRequest = historyStore.add(item);
addItemRequest.onsuccess = function(event) {
if (callback) {
callback(event.target.result);
}
};
}
};
});
}
function updateHistoryItem(id, item, callback) {
if (!id) {
return;
}
queryDB((db) => {
let transaction = db.transaction(['history'], 'readwrite');
let historyStore = transaction.objectStore('history');
let storedItemRequest = historyStore.get(id);
storedItemRequest.onsuccess = function(event) {
let storedItem = event.target.result;
item.timestamp = storedItem.timestamp;
let updateRequest = historyStore.put(item, id);
updateRequest.onsuccess = function(event) {
if (callback) {
callback();
}
};
};
});
}
function getHistoryItems(from, n, callback) {
if (n <= 0 || from < 0) {
if (callback) {
callback([]);
}
}
queryDB((db) => {
let transaction = db.transaction(['history']);
let historyStore = transaction.objectStore('history');
let timestampIndex = historyStore.index('timestamp');
let cursorRequest = timestampIndex.openCursor(null, 'prev');
let current = 0;
let items = [];
cursorRequest.onsuccess = function(event) {
let cursor = event.target.result;
if (!cursor || current >= from + n) {
if (callback) {
callback(items);
}
return;
}
if (current >= from) {
items.push({
id: cursor.primaryKey,
item: cursor.value
});
}
++current;
cursor.continue();
};
});
}
function removeHistoryItem(id, callback) {
queryDB((db) => {
let transaction = db.transaction(['history'], 'readwrite');
let historyStore = transaction.objectStore('history');
let removeItemRequest = historyStore.delete(id);
removeItemRequest.onerror = function(event) {
console.log(`Could not remove history item with ID: ${id}`);
console.log(event.target.error.message);
};
removeItemRequest.onsuccess = function(event) {
if (callback) {
callback();
}
};
});
}
function clearHistory(callback) {
queryDB((db) => {
let transaction = db.transaction(['history'], 'readwrite');
let historyStore = transaction.objectStore('history');
let clearRequest = historyStore.clear();
clearRequest.onsuccess = function(event) {
if (callback) {
callback();
}
};
});
}