clipper: fix duplicate notes created on save (#2722)

* clipper: fix duplicate notes created on save

* clipper(web): move singleton checks inside the fn

---------

Co-authored-by: Abdullah Atta <abdullahatta@streetwriters.co>
This commit is contained in:
Ammar Ahmed
2023-06-16 15:15:14 +05:00
committed by GitHub
parent 09cd19d3b7
commit 07bb35395c
2 changed files with 74 additions and 51 deletions

View File

@@ -27,6 +27,11 @@ import {
import { ClipArea, ClipMode } from "../common/bridge";
import type { Config } from "@notesnook/clipper/dist/types";
declare global {
// eslint-disable-next-line no-var
var messagingPortAttached: boolean;
}
type ClipMessage = {
type: "clip";
mode?: ClipMode;
@@ -37,30 +42,34 @@ type ClipMessage = {
type ViewportMessage = {
type: "viewport";
};
function attachMessagePort() {
if (globalThis.messagingPortAttached) return;
globalThis.messagingPortAttached = true;
browser.runtime.onMessage.addListener(async (request) => {
const message = request as ClipMessage | ViewportMessage;
browser.runtime.onMessage.addListener(async (request) => {
const message = request as ClipMessage | ViewportMessage;
switch (message.type) {
case "clip": {
const sizeable =
message.area === "full-page" &&
(message.mode === "complete" || message.mode === "screenshot");
return {
height: sizeable ? document.body.clientHeight : 0,
width: sizeable ? document.body.clientWidth : 0,
data: await clip(request)
};
switch (message.type) {
case "clip": {
const sizeable =
message.area === "full-page" &&
(message.mode === "complete" || message.mode === "screenshot");
return {
height: sizeable ? document.body.clientHeight : 0,
width: sizeable ? document.body.clientWidth : 0,
data: await clip(request)
};
}
case "viewport":
return {
x: 0,
y: 0,
height: document.body.clientHeight,
width: document.body.clientWidth
};
}
case "viewport":
return {
x: 0,
y: 0,
height: document.body.clientHeight,
width: document.body.clientWidth
};
}
});
});
}
function clip(message: ClipMessage) {
try {
@@ -87,3 +96,5 @@ function clip(message: ClipMessage) {
if (message.area !== "selection") cleanup();
}
}
attachMessagePort();

View File

@@ -26,37 +26,47 @@ import {
WEB_EXTENSION_CHANNEL_EVENTS
} from "../common/bridge";
browser.runtime.onConnect.addListener((port) => {
window.addEventListener("message", (ev) => {
const { type } = ev.data;
switch (type) {
case WEB_EXTENSION_CHANNEL_EVENTS.ON_CREATED:
if (ev.ports.length) {
const mainPort = ev.ports.at(0);
if (mainPort) {
expose(new BackgroundGateway(), mainPort);
const server: Remote<Server> = wrap<Server>(mainPort);
expose(
{
login: () => server.login(),
getNotes: () => server.getNotes(),
getNotebooks: () => server.getNotebooks(),
getTags: () => server.getTags(),
saveClip: (clip: Clip) => server.saveClip(clip)
},
createEndpoint(port)
);
port.postMessage({ success: true });
} else {
port.postMessage({ success: false });
}
}
break;
}
});
declare global {
// eslint-disable-next-line no-var
var clipperBridgeConnected: boolean;
}
window.postMessage({ type: WEB_EXTENSION_CHANNEL_EVENTS.ON_READY }, "*");
});
function attachOnConnectListener() {
if (globalThis.clipperBridgeConnected) return;
globalThis.clipperBridgeConnected = true;
browser.runtime.onConnect.addListener((port) => {
window.addEventListener("message", (ev) => {
const { type } = ev.data;
switch (type) {
case WEB_EXTENSION_CHANNEL_EVENTS.ON_CREATED:
if (ev.ports.length) {
const mainPort = ev.ports.at(0);
if (mainPort) {
expose(new BackgroundGateway(), mainPort);
const server: Remote<Server> = wrap<Server>(mainPort);
expose(
{
login: () => server.login(),
getNotes: () => server.getNotes(),
getNotebooks: () => server.getNotebooks(),
getTags: () => server.getTags(),
saveClip: (clip: Clip) => server.saveClip(clip)
},
createEndpoint(port)
);
port.postMessage({ success: true });
} else {
port.postMessage({ success: false });
}
}
break;
}
});
window.postMessage({ type: WEB_EXTENSION_CHANNEL_EVENTS.ON_READY }, "*");
});
}
class BackgroundGateway implements Gateway {
connect() {
@@ -66,3 +76,5 @@ class BackgroundGateway implements Gateway {
};
}
}
attachOnConnectListener();