add files
This commit is contained in:
143
assets/wvbrowser_ui/controls_ui/history.js
Normal file
143
assets/wvbrowser_ui/controls_ui/history.js
Normal file
@ -0,0 +1,143 @@
|
||||
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();
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user