52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
// 'arguments' is defined by the marionette harness.
|
|
/* global arguments */
|
|
|
|
const { PlacesUtils } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/PlacesUtils.sys.mjs"
|
|
);
|
|
|
|
let resolve = arguments[3];
|
|
|
|
try {
|
|
// Get the number of current bookmarks
|
|
PlacesUtils.promiseBookmarksTree(PlacesUtils.bookmarks.unfiledGuid, {
|
|
includeItemIds: true,
|
|
}).then(root => {
|
|
let count = root.itemsCount;
|
|
let maxBookmarks = arguments[2];
|
|
// making sure we don't exceed the maximum number of bookmarks
|
|
if (count >= maxBookmarks) {
|
|
let toRemove = count - maxBookmarks + 1;
|
|
console.log("We've reached the maximum number of bookmarks");
|
|
console.log("Removing " + toRemove);
|
|
let children = root.children;
|
|
for (let i = 0, p = Promise.resolve(); i < toRemove; i++) {
|
|
p = p.then(
|
|
_ =>
|
|
new Promise(resolve =>
|
|
PlacesUtils.bookmarks.remove(children[i].guid).then(res => {
|
|
console.log("removed one bookmark");
|
|
resolve(res);
|
|
})
|
|
)
|
|
);
|
|
}
|
|
}
|
|
// now adding the bookmark
|
|
PlacesUtils.bookmarks
|
|
.insert({
|
|
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
|
|
url: arguments[0],
|
|
title: arguments[1],
|
|
})
|
|
.then(res => {
|
|
resolve(res);
|
|
});
|
|
});
|
|
} catch (error) {
|
|
let res = { logs: {}, result: 1, result_message: error.toString() };
|
|
resolve(res);
|
|
}
|