Corrections de liens morts
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
title: "Capture d'écran de https://www.a.team//mission/the-great-betrayal"
|
||||
title: "Capture d'écran de https://www.a.team/mission/the-great-betrayal"
|
||||
description: "Capture effectuée le 7 février 2023 à 01:00"
|
||||
attribution: "Richard Dern"
|
||||
file: "images/screenshot.png"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
links:
|
||||
- name: Page d'origine
|
||||
url: https://www.a.team//mission/the-great-betrayal
|
||||
url: https://www.a.team/mission/the-great-betrayal
|
||||
lang: en
|
||||
title: "The Great Betrayal: After Callous Layoffs, Workers Are Done With the
|
||||
Full-Time Work Model"
|
||||
|
||||
@@ -50,7 +50,7 @@ Alors, quitte à claquer autant d'argent, autant le faire pour une station pré-
|
||||
|
||||
## La station
|
||||
|
||||
J'ai choisi la [Bresser MeteoChamp HD Wifi 7-en-1](https://www.bresser.de/fr/Temps/BRESSER-Station-meteo-7-en-1-Wifi-HD-professionnelle-avec-differents-modes-d-affichage.html).
|
||||
J'ai choisi la [Bresser MeteoChamp HD Wifi 7-en-1](https://www.bresser.fr/p/bresser-station-meteo-connectee-7-en-1-wifi-hd-professionnelle-avec-differents-modes-d-affichage-7003510).
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -326,6 +326,34 @@ function mergeOccurrences(entries, occurrences) {
|
||||
return merged;
|
||||
}
|
||||
|
||||
// Liste les URLs réellement présentes dans le contenu pour supprimer les entrées obsolètes.
|
||||
function buildActiveUrlSet(occurrences) {
|
||||
const active = new Set();
|
||||
for (const url of occurrences.keys()) {
|
||||
active.add(url);
|
||||
}
|
||||
return active;
|
||||
}
|
||||
|
||||
// Conserve uniquement les liens du rapport encore utilisés dans le contenu.
|
||||
function filterReportLinks(links, activeUrls) {
|
||||
if (!Array.isArray(links) || activeUrls.size === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const filtered = [];
|
||||
for (const link of links) {
|
||||
if (!link?.url || !activeUrls.has(link.url)) {
|
||||
continue;
|
||||
}
|
||||
filtered.push({
|
||||
...link,
|
||||
locations: Array.isArray(link.locations) ? dedupeAndSortLocations(link.locations) : [],
|
||||
});
|
||||
}
|
||||
return filtered;
|
||||
}
|
||||
|
||||
function recordOccurrence(map, filePath, line, url) {
|
||||
if (!map.has(url)) {
|
||||
map.set(url, []);
|
||||
@@ -720,6 +748,7 @@ async function main() {
|
||||
return;
|
||||
}
|
||||
|
||||
const activeUrls = buildActiveUrlSet(occurrences);
|
||||
const state = loadState();
|
||||
const mergedEntries = mergeOccurrences(state.entries, occurrences);
|
||||
const entriesArray = Object.values(mergedEntries);
|
||||
@@ -727,7 +756,7 @@ async function main() {
|
||||
|
||||
const snapshotMeta = {
|
||||
generatedAt: state.generatedAt || null,
|
||||
links: Array.isArray(state.links) ? state.links : [],
|
||||
links: filterReportLinks(state.links, activeUrls),
|
||||
};
|
||||
|
||||
await checkEntries(pending, mergedEntries, snapshotMeta);
|
||||
@@ -735,7 +764,7 @@ async function main() {
|
||||
const deadLinks = buildDeadLinks(mergedEntries);
|
||||
const nextState = {
|
||||
generatedAt: new Date().toISOString(),
|
||||
links: deadLinks,
|
||||
links: filterReportLinks(deadLinks, activeUrls),
|
||||
entries: mergedEntries,
|
||||
};
|
||||
saveState(nextState);
|
||||
|
||||
Reference in New Issue
Block a user