From 345591dee96df800990aa543e04c8fae20c92bd7 Mon Sep 17 00:00:00 2001 From: RePacked <42193376+RePacked@users.noreply.github.com> Date: Mon, 28 Apr 2025 21:36:21 +0200 Subject: [PATCH] feat(fetchStarredSites): extract starred URLs from safeListURLs markdown MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The provided starredListURL is very outdated. I changed it so now it fetches the starred URLs from the always up-to-date safeListURLs. - Stop fetching starredListURL HTML export. - In fetchStarredSites(), loop through each URL in safeListURLs. - Scan for lines containing the “⭐” marker and pull the first URL on each. - Normalize, dedupe, and store these as starredSites in storage. --- src/js/background.js | 49 +++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/src/js/background.js b/src/js/background.js index f923f4f..98365b6 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -32,8 +32,6 @@ const safeListURLs = [ "https://raw.githubusercontent.com/fmhy/edit/refs/heads/main/docs/video-tools.md", "https://raw.githubusercontent.com/fmhy/edit/refs/heads/main/docs/videopiracyguide.md", ]; -const starredListURL = - "https://raw.githubusercontent.com/fmhy/bookmarks/refs/heads/main/fmhy_in_bookmarks_starred_only.html"; const fmhyFilterListURL = "https://raw.githubusercontent.com/fmhy/FMHY-SafeGuard/refs/heads/main/fmhy-filterlist.txt"; @@ -273,22 +271,45 @@ async function fetchSafeSites() { } async function fetchStarredSites() { - console.log("Fetching starred sites..."); + console.log("Fetching starred sites from Markdown guides..."); + try { - const response = await fetch(starredListURL); - if (response.ok) { - const html = await response.text(); - const urls = extractUrlsFromBookmarks(html); - starredSites = [...new Set([...urls.map(normalizeUrl), ...starredSites])]; + // Fetch all the Markdown files in safeListURLs + const fetchPromises = safeListURLs.map((url) => fetch(url)); + const responses = await Promise.all(fetchPromises); - // Store starred sites in storage for persistence - await browserAPI.storage.local.set({ - starredSites: starredSites, - starredSiteCount: starredSites.length, + // From each markdown, pull out only those lines containing a star (⭐) + let starredUrls = []; + for (const response of responses) { + if (!response.ok) { + console.warn(`Failed to fetch ${response.url}`); + continue; + } + const markdown = await response.text(); + markdown.split("\n").forEach((line) => { + if (line.includes("⭐")) { + // reuse your existing URL regex logic: + const match = line.match(/https?:\/\/[^\s)]+/); + if (match) starredUrls.push(match[0].trim()); + } }); - - console.log(`Stored ${starredSites.length} starred sites`); } + + // Normalize, dedupe and store + starredSites = Array.from( + new Set( + starredUrls + .map((url) => normalizeUrl(url)) + .filter((url) => url !== null) + ) + ); + + await browserAPI.storage.local.set({ + starredSites, + starredSiteCount: starredSites.length, + }); + + console.log(`Stored ${starredSites.length} starred sites`); } catch (error) { console.error("Error fetching starred sites:", error); }