Reimplement notice file generation for third-party licenses through Rust, now with CEF credits (#3808)

This commit is contained in:
Timon
2026-02-26 11:12:28 +00:00
committed by GitHub
parent 4090f6c980
commit da7437c023
40 changed files with 1729 additions and 777 deletions

View File

@@ -44,8 +44,9 @@ vello = { workspace = true }
derivative = { workspace = true }
rfd = { workspace = true }
open = { workspace = true }
rand = { workspace = true, features = ["thread_rng"] }
lzma-rust2 = { workspace = true }
serde = { workspace = true }
rand = { workspace = true, features = ["thread_rng"] }
clap = { workspace = true, features = ["derive"] }
fd-lock = "4.0.4"
ctrlc = "3.5.1"

View File

@@ -1,6 +1,7 @@
use rand::Rng;
use rfd::AsyncFileDialog;
use std::fs;
use std::io::Read;
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::mpsc::{Receiver, Sender, SyncSender};
@@ -416,6 +417,18 @@ impl App {
DesktopFrontendMessage::Restart => {
self.exit(Some(ExitReason::Restart));
}
DesktopFrontendMessage::LoadThirdPartyLicenses => {
let compressed = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/third-party-licenses.txt.xz"));
let mut reader = lzma_rust2::XzReader::new(compressed.as_slice(), false);
let mut text = String::new();
if let Err(e) = reader.read_to_string(&mut text) {
tracing::error!("Failed to decompress third-party licenses: {e}");
return;
}
let message = DesktopWrapperMessage::LoadThirdPartyLicenses { text };
responses.push(message);
}
}
}

View File

@@ -97,5 +97,9 @@ pub(super) fn handle_desktop_wrapper_message(dispatcher: &mut DesktopWrapperMess
let message = AppWindowMessage::PointerLockMove { x, y };
dispatcher.queue_editor_message(message);
}
DesktopWrapperMessage::LoadThirdPartyLicenses { text } => {
let message = DialogMessage::RequestLicensesThirdPartyDialogWithLicenseText { license_text: text };
dispatcher.queue_editor_message(message);
}
}
}

View File

@@ -154,6 +154,9 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
FrontendMessage::WindowRestart => {
dispatcher.respond(DesktopFrontendMessage::Restart);
}
FrontendMessage::TriggerDisplayThirdPartyLicensesDialog => {
dispatcher.respond(DesktopFrontendMessage::LoadThirdPartyLicenses);
}
m => return Some(m),
}
None

View File

@@ -75,6 +75,7 @@ pub enum DesktopFrontendMessage {
WindowHideOthers,
WindowShowAll,
Restart,
LoadThirdPartyLicenses,
}
pub enum DesktopWrapperMessage {
@@ -126,6 +127,9 @@ pub enum DesktopWrapperMessage {
x: f64,
y: f64,
},
LoadThirdPartyLicenses {
text: String,
},
}
#[derive(Clone, serde::Serialize, serde::Deserialize, Debug)]