From 144daffe447085c9cf39de74c410d542718f5ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Guzm=C3=A1n?= Date: Sun, 10 May 2026 19:05:22 -0600 Subject: [PATCH] firefox: add changes for v150 --- ...emove_moreFromMozilla_Focus_and_Klar.patch | 2 +- ...sites_and_keep_weather_widget_static.patch | 10 +- .../016-set_custom_cargo_1.91.patch | 28 +++ .../017-modify_sidebar_pins_promo_icons.patch | 38 ++++ .../018-adjust_wallpapers_abrowser.patch | 28 +++ helpers/DATA/firefox/ui_branding/build.json | 72 +++++++ .../debranding/assets/puzzle-fox.svg | 81 +++++++ .../debranding/assets/trisquel_qr.png | Bin 0 -> 6717 bytes .../debranding/content/history-empty.svg | 41 ++++ .../debranding/content/synced-tabs-empty.svg | 200 ++++++++++++++++++ .../debranding/content/synced-tabs-error.svg | 178 ++++++++++++++++ .../DATA/firefox/ui_branding/sidebar/fsf.svg | 6 + .../ui_branding/sidebar/liberachat.svg | 3 + .../firefox/ui_branding/sidebar/trisquel.svg | 3 + .../firefox/ui_branding/sidebar/wikipedia.svg | 3 + .../firefox/ui_branding/wallpaper-replace.py | 163 ++++++++++++++ helpers/make-firefox | 24 ++- 17 files changed, 870 insertions(+), 10 deletions(-) create mode 100644 helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch create mode 100644 helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch create mode 100644 helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch create mode 100644 helpers/DATA/firefox/ui_branding/build.json create mode 100644 helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg create mode 100644 helpers/DATA/firefox/ui_branding/debranding/assets/trisquel_qr.png create mode 100644 helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg create mode 100644 helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg create mode 100644 helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg create mode 100644 helpers/DATA/firefox/ui_branding/sidebar/fsf.svg create mode 100644 helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg create mode 100644 helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg create mode 100644 helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg create mode 100644 helpers/DATA/firefox/ui_branding/wallpaper-replace.py diff --git a/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch b/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch index c2ade630..20fddec8 100644 --- a/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch +++ b/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch @@ -460,7 +460,7 @@ index b5ff592..22cdf39 100644 id: "PB_NEWTAB_VPN_PROMO", template: "pb_newtab", diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn -index bd094a48..ac07e826 100644 +index b2d65603..b44a1525 100644 --- a/browser/components/preferences/jar.mn +++ b/browser/components/preferences/jar.mn @@ -19,8 +19,6 @@ browser.jar: diff --git a/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch b/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch index 88677ac9..d015201f 100644 --- a/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch +++ b/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch @@ -24,8 +24,8 @@ index 217ed280..d91cde94 100644 // Do not enable the preonboarding experience on Linux #ifdef XP_LINUX -@@ -1879,28 +1879,28 @@ pref("browser.newtabpage.activity-stream.search.useHandoffComponent", true); - pref("browser.newtabpage.activity-stream.externalComponents.enabled", true); +@@ -1886,24 +1886,24 @@ pref("browser.newtabpage.activity-stream.mobileDownloadModal.variant-b", false); + pref("browser.newtabpage.activity-stream.mobileDownloadModal.variant-c", false); // Mozilla Ad Routing Service (MARS) unified ads service -pref("browser.newtabpage.activity-stream.unifiedAds.tiles.enabled", true); @@ -35,18 +35,14 @@ index 217ed280..d91cde94 100644 +pref("browser.newtabpage.activity-stream.unifiedAds.spocs.enabled", false); +pref("browser.newtabpage.activity-stream.unifiedAds.endpoint", ""); pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false); - #ifdef NIGHTLY_BUILD -pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", true); +pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", false); - #else - pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", false); - #endif // Weather widget for newtab -pref("browser.newtabpage.activity-stream.showWeather", true); +pref("browser.newtabpage.activity-stream.showWeather", false); pref("browser.newtabpage.activity-stream.weather.query", ""); - pref("browser.newtabpage.activity-stream.weather.display", "simple"); + pref("browser.newtabpage.activity-stream.weather.display", "detailed"); pref("browser.newtabpage.activity-stream.images.smart", true); diff --git a/helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch b/helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch new file mode 100644 index 00000000..5be58ff7 --- /dev/null +++ b/helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch @@ -0,0 +1,28 @@ +diff --git a/debian/control.in b/debian/control.in +index 758352f8..26383a38 100644 +--- a/debian/control.in ++++ b/debian/control.in +@@ -43,8 +43,8 @@ Build-Depends: cdbs, + libclang-22-dev | libclang-21-dev | libclang-20-dev | libclang-19-dev | libclang-18-dev, + llvm-22-dev | llvm-21-dev | llvm-20-dev | llvm-19-dev | llvm-18-dev, + lld-22 | lld-21 | lld-20 | lld-19 | lld-18, +- cargo-1.90, +- rustc-1.90, ++ cargo-1.91 | cargo-1.90, ++ rustc-1.91 | rustc-1.90, + nodejs (>= 12.22.12) + Standards-Version: 3.9.1 + +diff --git a/debian/build/rules.mk b/debian/build/rules.mk +index 896150e7..413e34fc 100644 +--- a/debian/build/rules.mk ++++ b/debian/build/rules.mk +@@ -109,7 +109,7 @@ LLVM_VERSIONS = 22 21 20 19 18 + DEB_LLVM_VERSION = $(firstword $(foreach llvm_version, $(LLVM_VERSIONS), \ + $(if $(shell which clang-$(llvm_version)), $(llvm_version)))) + +-RUSTC_VERSIONS = 1.90 ++RUSTC_VERSIONS = 1.91 1.90 + DEB_RUSTC_VERSION = $(firstword $(foreach rustc_version, $(RUSTC_VERSIONS), \ + $(if $(shell which rustc-$(rustc_version)), $(rustc_version)))) + diff --git a/helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch b/helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch new file mode 100644 index 00000000..8dfee481 --- /dev/null +++ b/helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch @@ -0,0 +1,38 @@ +diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn +index 3a12a7a3..ac1245a9 100644 +--- a/browser/themes/shared/jar.inc.mn ++++ b/browser/themes/shared/jar.inc.mn +@@ -266,10 +266,10 @@ + skin/classic/browser/search-indicator-badge-add.svg (../shared/search/search-indicator-badge-add.svg) + skin/classic/browser/searchbar.css (../shared/search/searchbar.css) + +- skin/classic/browser/sidebar/firefox.svg (../shared/sidebar/firefox.svg) +- skin/classic/browser/sidebar/foxy.svg (../shared/sidebar/foxy.svg) +- skin/classic/browser/sidebar/gmail.svg (../shared/sidebar/gmail.svg) +- skin/classic/browser/sidebar/slack.svg (../shared/sidebar/slack.svg) ++ skin/classic/browser/sidebar/trisquel.svg (../shared/sidebar/trisquel.svg) ++ skin/classic/browser/sidebar/fsf.svg (../shared/sidebar/fsf.svg) ++ skin/classic/browser/sidebar/wikipedia.svg (../shared/sidebar/wikipedia.svg) ++ skin/classic/browser/sidebar/liberachat.svg (../shared/sidebar/liberachat.svg) + + skin/classic/browser/tabbrowser/content-area.css (../shared/tabbrowser/content-area.css) + skin/classic/browser/tabbrowser/crashed.svg (../shared/tabbrowser/crashed.svg) +diff --git a/browser/components/sidebar/sidebar-pins-promo.mjs b/browser/components/sidebar/sidebar-pins-promo.mjs +index beac7ea4..538ae9aa 100644 +--- a/browser/components/sidebar/sidebar-pins-promo.mjs ++++ b/browser/components/sidebar/sidebar-pins-promo.mjs +@@ -56,10 +56,10 @@ export default class SidebarPinsPromo extends MozLitElement { + this.launcherObserver = new MutationObserver(() => this.requestUpdate()); + } + #icons = [ +- { name: "firefox", src: "chrome://browser/skin/sidebar/firefox.svg" }, +- { name: "slack", src: "chrome://browser/skin/sidebar/slack.svg" }, +- { name: "foxy", src: "chrome://browser/skin/sidebar/foxy.svg" }, +- { name: "gmail", src: "chrome://browser/skin/sidebar/gmail.svg" }, ++ { name: "trisquel", src: "chrome://browser/skin/sidebar/trisquel.svg" }, ++ { name: "liberachat", src: "chrome://browser/skin/sidebar/liberachat.svg" }, ++ { name: "fsf", src: "chrome://browser/skin/sidebar/fsf.svg" }, ++ { name: "wikipedia", src: "chrome://browser/skin/sidebar/wikipedia.svg" }, + ]; + + connectedCallback() { diff --git a/helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch b/helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch new file mode 100644 index 00000000..d582d489 --- /dev/null +++ b/helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch @@ -0,0 +1,28 @@ +diff --git a/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs b/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs +index 72df22b3..24f2f807 100644 +--- a/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs ++++ b/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs +@@ -156,7 +156,9 @@ export class WallpaperFeed { + ...record, + ...(record.attachment + ? { +- wallpaperUrl: `${baseAttachmentURL}${record.attachment.location}`, ++ wallpaperUrl: record.attachment.location.includes("trisquel") ++ ? `https://trisquel.cmxsl.org/newtab/${record.attachment.filename.replace(".avif", ".webp")}` ++ : `${baseAttachmentURL}${record.attachment.location}`, + } + : {}), + background_position: record.background_position || "center", +diff --git a/services/settings/remote-settings.sys.mjs b/services/settings/remote-settings.sys.mjs +index 2330fb01..2c4062d1 100644 +--- a/services/settings/remote-settings.sys.mjs ++++ b/services/settings/remote-settings.sys.mjs +@@ -301,7 +301,7 @@ function remoteSettingsFunction() { + bucketName: bucket, + signerName, + }); +- if (client.verifySignature) { ++ if (client.verifySignature && collection!== "newtab-wallpapers-v2") { + lazy.console.debug( + `${identifier}: Verify signature of bundled changeset` + ); diff --git a/helpers/DATA/firefox/ui_branding/build.json b/helpers/DATA/firefox/ui_branding/build.json new file mode 100644 index 00000000..d51c79df --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/build.json @@ -0,0 +1,72 @@ +{ + "1d43f5a1-64bd-4ad4-b825-88a89878662f": { + "title": "trisquel-abe-01", + "theme": "dark", + "attachment": { + "hash": "962073af456fd63c6fc9b11dadbef724a56b223e04a7136f87e9b670f2b9283d", + "size": 62524, + "filename": "trisquel-abe-01.avif", + "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-01.avif", + "mimetype": "image/avif" + }, + "background_position": "bottom right" + }, + "2bf99683-cde8-438b-9f8e-a1222dc7f59c": { + "title": "trisquel-abe-02", + "theme": "light", + "attachment": { + "hash": "e3363cf5554c98e1243434ee047de9c31ddc3060355a55ce7b3cecd977f379ab", + "size": 72574, + "filename": "trisquel-abe-02.avif", + "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-02.avif", + "mimetype": "image/avif" + }, + "background_position": "bottom right" + }, + "2e468f89-ac6a-474f-a789-5de0be601887": { + "title": "trisquel-abe-03", + "theme": "dark", + "attachment": { + "hash": "3d6687928a6eeee6bd9f52ef2fae115ddfdcf974a832cce2286b37c642c0ede7", + "size": 48020, + "filename": "trisquel-abe-03.avif", + "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-03.avif", + "mimetype": "image/avif" + }, + "background_position": "bottom right" + }, + "429c288c-8d92-4baa-aefb-a04719882454": { + "title": "trisquel-abe-04", + "theme": "light", + "attachment": { + "hash": "f6b225b3f091dd556040028e758d143cbcb4d52d4e43ede3a2a367f44505993f", + "size": 25226, + "filename": "trisquel-abe-04.avif", + "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-04.avif", + "mimetype": "image/avif" + }, + "background_position": "bottom right" + }, + "451090be-cdf1-49fc-b1f3-bd2f3b4ac34d": { + "title": "trisquel-aramo", + "theme": "dark", + "attachment": { + "hash": "8c9ae9eb2063b763c737cd795af0f7b8883b43b2519d455b4097462ba6f4ad70", + "size": 196288, + "filename": "trisquel-aramo.avif", + "location": "main-workspace/newtab-wallpapers-v2/trisquel-aramo.avif", + "mimetype": "image/avif" + } + }, + "62aa72d9-b9f3-4f29-88f5-5120ee004e7c": { + "title": "trisquel-ecne", + "theme": "dark", + "attachment": { + "hash": "6a233237277c7cdc3a1078f250f1ae21576ceedec9d0abbe33be9f93add25355", + "size": 110186, + "filename": "trisquel-ecne.avif", + "location": "main-workspace/newtab-wallpapers-v2/trisquel-ecne.avif", + "mimetype": "image/avif" + } + } +} \ No newline at end of file diff --git a/helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg b/helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg new file mode 100644 index 00000000..b4ba9bcf --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/helpers/DATA/firefox/ui_branding/debranding/assets/trisquel_qr.png b/helpers/DATA/firefox/ui_branding/debranding/assets/trisquel_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e08c719934cdd435d6e590e4381953b9c5a79e GIT binary patch literal 6717 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 W?#JTMt>9ljeCEbhMiu`!-Tf~bDg~hc literal 0 HcmV?d00001 diff --git a/helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg b/helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg new file mode 100644 index 00000000..1c18635f --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + diff --git a/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg new file mode 100644 index 00000000..9ba72654 --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg new file mode 100644 index 00000000..501befcf --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helpers/DATA/firefox/ui_branding/sidebar/fsf.svg b/helpers/DATA/firefox/ui_branding/sidebar/fsf.svg new file mode 100644 index 00000000..3f3bc136 --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/sidebar/fsf.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg b/helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg new file mode 100644 index 00000000..c76567fd --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg @@ -0,0 +1,3 @@ + + + diff --git a/helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg b/helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg new file mode 100644 index 00000000..43b8b1cc --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg @@ -0,0 +1,3 @@ + + + diff --git a/helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg b/helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg new file mode 100644 index 00000000..cdfca18f --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg @@ -0,0 +1,3 @@ + + + diff --git a/helpers/DATA/firefox/ui_branding/wallpaper-replace.py b/helpers/DATA/firefox/ui_branding/wallpaper-replace.py new file mode 100644 index 00000000..95942438 --- /dev/null +++ b/helpers/DATA/firefox/ui_branding/wallpaper-replace.py @@ -0,0 +1,163 @@ +# Copyright (C) 2026 Luis Guzman +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +import json +import hashlib +import os +import time +import argparse +import sys + +def calculate_sha256_hash(file_path): + """ + Calculates the SHA-256 hash of a physical file. + """ + sha256_hash = hashlib.sha256() + with open(file_path, "rb") as f: + for byte_block in iter(lambda: f.read(4096), b""): + sha256_hash.update(byte_block) + return sha256_hash.hexdigest() + +def build_step(config_path, output_path): + """ + Step 1: Reads config.json, processes the data, and creates build.json. + """ + print(f"--- Step 1: Building standalone artifact ---") + + if not os.path.exists(config_path): + print(f"ERROR: Configuration file '{config_path}' not found.") + sys.exit(1) + + with open(config_path, 'r', encoding='utf-8') as f: + config = json.load(f) + + build_data = {} + + for item in config.get('replacements',): + item_id = item.get('id_to_replace') + image_path = item.get('local_image_path') + theme = item.get('theme', '').strip() + + if not image_path or not os.path.exists(image_path): + print(f"WARNING: Local image not found at '{image_path}' for ID {item_id}. Skipping.") + continue + + file_size_bytes = os.path.getsize(image_path) + sha256_hash = calculate_sha256_hash(image_path) + + # Get the real file name (e.g., 'trisquel-aramo.webp') + real_file_name = os.path.basename(image_path) + + # Create the "disguised" file name to bypass Mozilla's strict schema validation + disguised_file_name = real_file_name.replace('.webp', '.avif') + + # Create a 100% schema-compliant entry masking the webp as an avif + build_data[item_id] = { + "title": real_file_name.replace('.webp', ''), + "theme": theme, + "attachment": { + "hash": sha256_hash, + "size": file_size_bytes, + "filename": disguised_file_name, + "location": f"main-workspace/newtab-wallpapers-v2/{disguised_file_name}", + "mimetype": "image/avif" # Masking the mime type for the validator + } + } + + # Check if the wallpaper is an "abe" one, to position logo accordingly + if "abe" in real_file_name.lower(): + build_data[item_id]["background_position"] = "bottom right" + + # Make sure dark theme is used on trisquel-ecne & trisquel-aramo images + if "trisquel-ecne" in real_file_name.lower() or "trisquel-aramo" in real_file_name.lower(): + build_data[item_id]["theme"] = "dark" + + print(f"Processed: {real_file_name} -> Masked as: {disguised_file_name} -> ID: {item_id}") + + with open(output_path, 'w', encoding='utf-8') as f: + json.dump(build_data, f, indent=2, ensure_ascii=False) + + print(f"\nSUCCESS: Generated standalone artifact at '{output_path}'.") + +def replace_step(source_path, target_path): + """ + Step 2: Injects the build.json data into the target Firefox JSON database. + """ + print(f"\n--- Step 2: Injecting into target JSON ---") + + if not os.path.exists(source_path): + print(f"ERROR: Build source file '{source_path}' not found.") + sys.exit(1) + + if not os.path.exists(target_path): + print(f"ERROR: Target JSON file '{target_path}' not found.") + sys.exit(1) + + with open(source_path, 'r', encoding='utf-8') as f: + build_data = json.load(f) + + with open(target_path, 'r', encoding='utf-8') as f: + target_db = json.load(f) + + current_timestamp = int(time.time() * 1000) + modified_count = 0 + + for item in target_db.get('data',): + item_id = item.get('id') + + if item_id in build_data: + new_data = build_data[item_id] + + # Wipe old custom keys if they exist from previous tests + item.pop('wallpaperUrl', None) + + # Apply schema-compliant data + item['attachment'] = new_data['attachment'] + item['title'] = new_data['title'] + item['schema'] = current_timestamp + item['last_modified'] = current_timestamp + + if new_data.get('theme'): + item['theme'] = new_data['theme'] + + # Apply background_position if it exists in build_data + if new_data.get('background_position'): + item['background_position'] = new_data['background_position'] + + print(f"Updated ID: {item_id} with file '{new_data['attachment']['filename']}'") + modified_count += 1 + + if modified_count > 0: + target_db['timestamp'] = current_timestamp + with open(target_path, 'w', encoding='utf-8') as f: + json.dump(target_db, f, indent=2, ensure_ascii=False) + print(f"\nSUCCESS: Modified {modified_count} entries in '{target_path}'.") + else: + print("\nWARNING: No matching IDs found in the target JSON to replace.") + +def main(): + parser = argparse.ArgumentParser(description="Firefox Newtab Wallpaper Injection Tool") + parser.add_argument('--config', type=str, nargs='?', const='./config.json', help="Step 1: Path to config.json.") + parser.add_argument('--replace', type=str, help="Step 2: Path to target Firefox JSON file to be modified.") + parser.add_argument('--source', type=str, default='./build.json', help="Step 2: Path to the standalone build.json.") + + args = parser.parse_args() + + if not args.config and not args.replace: + parser.print_help() + sys.exit(1) + + if args.config: build_step(args.config, './build.json') + if args.replace: replace_step(args.source, args.replace) + +if __name__ == "__main__": + main() diff --git a/helpers/make-firefox b/helpers/make-firefox index b1a8b456..6440b799 100644 --- a/helpers/make-firefox +++ b/helpers/make-firefox @@ -19,7 +19,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=131 +VERSION=132 EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main' REPOKEY=AEBDF4819BE21867 @@ -275,6 +275,26 @@ do /bin/sed -i 's|= Firefox |= |' $i done +# Replace sidebar icons +rm -rf browser/themes/shared/sidebar +cp -R $DATA/ui_branding/sidebar browser/themes/shared/ + +python3 $DATA/ui_branding/wallpaper-replace.py --source $DATA/ui_branding/build.json \ + --replace services/settings/dumps/main/newtab-wallpapers-v2.json + +# Graphic Debranding +cp $DATA/ui_branding/debranding/assets/puzzle-fox.svg browser/extensions/newtab/data/content/assets/puzzle-fox.svg +## replace multiple firefox qr codes. +for qr in download-qr-code-var-a.png download-qr-code-var-b.png download-qr-code-var-c.png +do + cp $DATA/ui_branding/debranding/assets/trisquel_qr.png browser/extensions/newtab/data/content/assets/$qr +done +## Remove mascot +for graph in history-empty.svg synced-tabs-empty.svg synced-tabs-error.svg +do + cp $DATA/ui_branding/debranding/content/$graph browser/components/firefoxview/content/$graph +done + # Disable preprocessor sed 's/_PP//' -i browser/branding/branding-common.mozbuild #Prevent duplicated values. @@ -328,7 +348,7 @@ sed 's/Firefox/Abrowser/' -i debian/control.in \ # Useful when trying to catch patch issues faster. [ "$MAIN_REBRANDING_ENABLED" = 1 ] && main_rebranding -sed s/ubuntu/trisquel/g debian/distribution.ini -i +sed "s/ubuntu/trisquel/g" -i debian/distribution.ini sed "s/ubuntu_version/trisquel_version/; s/Ubuntu 10.10/Trisquel $REVISION/; s/1010/40/" -i debian/firefox.postinst.in # Delete stuff we don't use and that may contain trademaked logos