bookmarks.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright 2010-2019 Gildas Lormeau
  3. * contact : gildas.lormeau <at> gmail.com
  4. *
  5. * This file is part of SingleFile.
  6. *
  7. * The code in this file is free software: you can redistribute it and/or
  8. * modify it under the terms of the GNU Affero General Public License
  9. * (GNU AGPL) as published by the Free Software Foundation, either version 3
  10. * of the License, or (at your option) any later version.
  11. *
  12. * The code in this file is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
  15. * General Public License for more details.
  16. *
  17. * As additional permission under GNU AGPL version 3 section 7, you may
  18. * distribute UNMODIFIED VERSIONS OF THIS file without the copy of the GNU
  19. * AGPL normally required by section 4, provided you include this license
  20. * notice and a URL through which recipients can access the Corresponding
  21. * Source.
  22. */
  23. /* global singlefile, browser */
  24. singlefile.extension.core.bg.bookmarks = (() => {
  25. onInit();
  26. return {
  27. onMessage,
  28. saveCreatedBookmarks: enable,
  29. disable
  30. };
  31. async function onInit() {
  32. enable();
  33. }
  34. async function onMessage(message) {
  35. if (message.method.endsWith(".saveCreatedBookmarks")) {
  36. enable();
  37. return {};
  38. }
  39. if (message.method.endsWith(".disable")) {
  40. disable();
  41. return {};
  42. }
  43. }
  44. async function enable() {
  45. try {
  46. browser.bookmarks.onCreated.removeListener(onCreated);
  47. } catch (error) {
  48. // ignored
  49. }
  50. let enabled;
  51. const profiles = await singlefile.extension.core.bg.config.getProfiles();
  52. Object.keys(profiles).forEach(profileName => {
  53. if (profiles[profileName].saveCreatedBookmarks) {
  54. enabled = true;
  55. }
  56. });
  57. if (enabled) {
  58. browser.bookmarks.onCreated.addListener(onCreated);
  59. }
  60. }
  61. async function disable() {
  62. let disabled;
  63. const profiles = await singlefile.extension.core.bg.config.getProfiles();
  64. Object.keys(profiles).forEach(profileName => disabled = disabled || !profiles[profileName].saveCreatedBookmarks);
  65. if (disabled) {
  66. browser.bookmarks.onCreated.removeListener(onCreated);
  67. }
  68. }
  69. async function onCreated(id, bookmarkInfo) {
  70. const tabs = await singlefile.extension.core.bg.tabs.get({ lastFocusedWindow: true, active: true });
  71. const options = await singlefile.extension.core.bg.config.getOptions(bookmarkInfo.url);
  72. if (options.saveCreatedBookmarks) {
  73. if (tabs.length && tabs[0].url == bookmarkInfo.url) {
  74. singlefile.extension.core.bg.business.saveTabs(tabs);
  75. } else {
  76. const tabs = await singlefile.extension.core.bg.tabs.get({});
  77. if (tabs.length) {
  78. const tab = tabs.find(tab => tab.url == bookmarkInfo.url);
  79. if (tab) {
  80. singlefile.extension.core.bg.business.saveTabs([tab]);
  81. }
  82. }
  83. }
  84. }
  85. }
  86. })();