Skip to content
This repository has been archived by the owner on Dec 26, 2022. It is now read-only.

feat: Gérer un état 'stopped' local en plus de l'état synchronisé #60

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 24 additions & 9 deletions background_scripts/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
WORKING: "w",
};

async function updateIconStatus() {
async function updateIconStatus(stopped) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

la première partie du fix de l'icône

return await browser.browserAction.setIcon({
path: {
16: `../icons/vaccine-${stopped ? "black" : "color"}.svg`,
Expand Down Expand Up @@ -57,7 +57,7 @@
}

async function executeNextJob() {
const { stopped } = await browser.storage.sync.get({
const { stopped } = await browser.storage.local.get({
stopped: false,
});

Expand Down Expand Up @@ -93,9 +93,7 @@
}

browser.storage.onChanged.addListener(async (change, areaName) => {
if (areaName !== "sync") return;

if (change.locations && change.locations.newValue) {
if (areaName === "sync" && change.locations && change.locations.newValue) {
Object.keys(locations).forEach((url) => {
if (!change.locations.newValue[url]) {
delete locations[url];
Expand All @@ -111,7 +109,14 @@
});
}

if (change.stopped) return await updateIconStatus(stopped);
if (change.stopped) {
await updateIconStatus(change.stopped.newValue);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

la seconde partie du fix de l'icône

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arf, j'ai déjà fixé tout ca dans #48

if (areaName === "sync") {
// Ça peut arriver de cette instance ou d'une autre instance de Firefox
// -> mettons aussi à jour la valeur locale pour arrêter les checks locaux.
await browser.storage.local.set({ stopped: true });
}
}
});

browser.runtime.onMessage.addListener(async (data) => {
Expand Down Expand Up @@ -144,6 +149,7 @@
break;

case "booked":
// Note: on met à jour la valeur locale dans onChanged au-dessus.
await browser.storage.sync.set({ stopped: true });

await browser.tabs.create({
Expand All @@ -170,9 +176,18 @@
}
});

const { locations, stopped } = await browser.storage.sync.get({
locations: {},
stopped: false,
// Le booléan "stopped" est à la fois stocké localement et synchronisé. En
// effet, lorsqu'on arrive à booker un rdv dans un Firefox on veut arrêter les
// checks dans toutes les instances. Mais un simple clic sur le bouton ne doit
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On est sûr de ça ? À mon avis il vaut mieux arrêter partout. Cas d'usage :

  • je trouve un RDV sur Maia ou Keldoc
  • je veux que ça s'arrête sur tous mes ordis

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah ben je pensais que tu étais d'accord d'après #56 (comment), c'est le but de ce PR à la base :-)

En fait je comprends pas bien l'intérêt de faire tourner l'extension sur plusieurs ordinateurs à la fois. Le problème est qu'elle est installée automatiquement lorsqu'on se connecte avec son FxAccounts sur une autre installation...

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah ben je pensais que tu étais d'accord d'après #56 (comment), c'est le but de ce PR à la base :-)

Je pensais que tu voulais tout mettre en local storage (ce qui me va toujours). Je n'aime pas trop le mélange des deux, ça rend ça moins clair. Si rien n'est synchro, ça me semble plus logique que tu doives l'arrêter partout.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mais du coup, ce cas d'usage:

  • je trouve un RDV sur Maia ou Keldoc
  • je veux que ça s'arrête sur tous mes ordis
    ne sera plus supporté?

Et tu veux mettre les locations aussi en local, ou bien pour ça c'est OK que ce soit à la fois synchronisé en local ? Je vois que c'est déjà en partie en local pour pouvoir les afficher, mais c'est pas tout à fait clair pour moi vu que j'ai pas du tout suivi cette partie...

Désolé, j'essaie de bien comprendre ce qu'on veut faire :-)

// déclencher d'arrêt que localement.
const { locations, stopped: stoppedFromSync } =
await browser.storage.sync.get({
locations: {},
stopped: false,
});

const { stopped } = await browser.storage.local.get({
stopped: stoppedFromSync,
});

await updateIconStatus(stopped);
Expand Down
16 changes: 8 additions & 8 deletions browser_action/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,13 @@
document.getElementById(stopped ? "stop" : "start").style = "display: none";
}

let { locations, stopped, autoBook } = await browser.storage.sync.get({
let { locations, autoBook } = await browser.storage.sync.get({
locations: {},
autoBook: false,
stopped: false,
});

let { stopped } = await browser.storage.local.get({ stopped: false });

let { localLocations } = await browser.storage.local.get({ locations: {} });

browser.storage.onChanged.addListener(async (change, areaName) => {
Expand All @@ -79,6 +80,8 @@
localLocations = change.locations.newValue;
displayLocations(locations, localLocations);
}

if (change.stopped) displayStopStart(change.stopped.newValue || false);
}

if (areaName === "sync") {
Expand All @@ -87,8 +90,6 @@
displayLocations(locations, localLocations);
}

if (change.stopped) displayStopStart(change.stopped.newValue || false);

if (change.autoBook)
document.getElementById(
change.autoBook.newValue || false
Expand All @@ -99,13 +100,11 @@
});

document.getElementById("stop").onclick = async () => {
await browser.storage.sync.set({ stopped: true });
displayStopStart(true);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La simplification minime dont je parlais: en effet, displayStopStart est appelé dans onChanged, donc je l'ai enlevé d'ici (et de dessous).

await browser.storage.local.set({ stopped: true });
};

document.getElementById("start").onclick = async () => {
await browser.storage.sync.set({ stopped: false });
displayStopStart(false);
await browser.storage.local.set({ stopped: false });
};

document.getElementById("reset").onclick = async () => {
Expand All @@ -117,6 +116,7 @@
return;

await browser.storage.sync.clear();
await browser.storage.local.clear();
};

document.getElementById("disableAutoBook").onclick = async () =>
Expand Down