autobookmarker/background.js

85 lines
2.5 KiB
JavaScript

'use strict';
let bookmarkingTabs = false;
function createFolder(callback) {
chrome.bookmarks.create({'title': 'Autobookmarked Tabs'}, function(folder) {
if (chrome.runtime.lastError) {
setActionStatus('Error bookmarking tabs', 'error', function() {});
return;
}
chrome.storage.local.set({'bookmarksFolder': folder.id});
callback(folder.id);
});
}
function getOrCreateFolder(callback) {
chrome.storage.local.get('bookmarksFolder', function (result) {
if ('bookmarksFolder' in result) {
let id = result.bookmarksFolder;
chrome.bookmarks.get(id, function(result) {
if (chrome.runtime.lastError) {
// Bookmark id not valid, create new one
createFolder(callback);
} else {
callback(id);
}
});
} else {
createFolder(callback);
}
});
}
function setActionStatus(title, imageset, callback) {
chrome.browserAction.setTitle({title: title}, function() {
chrome.browserAction.setIcon({path: {
'32': 'icons/' + imageset + '-32.png',
'48': 'icons/' + imageset + '-48.png',
'96': 'icons/' + imageset + '-96.png'
}}, callback);
});
}
function bookmarkTabs() {
if (bookmarkingTabs) {
return;
}
bookmarkingTabs = true;
let now = new Date();
let dateString = [now.getFullYear().toString(), (now.getMonth() + 1).toString().padStart(2, '0'), now.getDate().toString().padStart(2, '0')].join('-');
let timeString = [now.getHours().toString().padStart(2, '0'), now.getMinutes().toString().padStart(2, '0')].join(':');
setActionStatus('Bookmarking tabs…', 'processing', function() {
getOrCreateFolder(function(rootId) {
chrome.bookmarks.create({'title': dateString + ' ' + timeString, parentId: rootId}, function(folder) {
if (chrome.runtime.lastError) {
setActionStatus('Error bookmarking tabs', 'error', function() {});
return;
}
chrome.tabs.query({}, function(tabs) {
let remaining = tabs.length;
for (let tab of tabs) {
chrome.bookmarks.create({'title': tab.title, url: tab.url, parentId: folder.id}, function() {
if (chrome.runtime.lastError) {
setActionStatus('Error bookmarking tabs', 'error', function() {});
return;
}
remaining--;
if (remaining === 0) {
bookmarkingTabs = false;
setActionStatus('Bookmark open tabs', 'icon', function() {});
}
});
}
});
});
});
});
}
chrome.browserAction.onClicked.addListener(bookmarkTabs);
chrome.runtime.onInstalled.addListener(function () { getOrCreateFolder(function () {}); });