parse new repo

This commit is contained in:
Ward from fusion-voyager-3 2024-09-21 18:35:46 +03:00
parent 7b629ca6da
commit 830def1d3d
3 changed files with 42 additions and 6 deletions

5
Cargo.lock generated
View File

@ -1412,6 +1412,7 @@ dependencies = [
"libflatpak", "libflatpak",
"lock_api 0.4.12", "lock_api 0.4.12",
"pretty-bytes", "pretty-bytes",
"regex",
"rust-apt", "rust-apt",
"rust-i18n", "rust-i18n",
"serde", "serde",
@ -1516,9 +1517,9 @@ dependencies = [
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.10.5" version = "1.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",

View File

@ -39,4 +39,5 @@ crossbeam-utils = "0.8.20"
chrono = "0.4.38" chrono = "0.4.38"
lock_api = "0.4.2" lock_api = "0.4.2"
libflatpak = { version = "0.5.0", package = "libflatpak", features = ["v1_11_1"] } libflatpak = { version = "0.5.0", package = "libflatpak", features = ["v1_11_1"] }
regex = "1.10.6"

View File

@ -2,12 +2,12 @@ use crate::apt_package_row::AptPackageRow;
use adw::gio::SimpleAction; use adw::gio::SimpleAction;
use adw::prelude::*; use adw::prelude::*;
use apt_deb822_tools::Deb822Repository; use apt_deb822_tools::Deb822Repository;
use gtk::glib::*; use regex::Regex;
use gtk::glib::{property::PropertyGet, clone, BoxedAnyObject};
use gtk::*; use gtk::*;
use std::cell::Ref; use std::cell::Ref;
use std::ops::Deref; use std::ops::Deref;
use pika_unixsocket_tools::pika_unixsocket_tools::*; use pika_unixsocket_tools::pika_unixsocket_tools::*;
use property::PropertyGet;
use rust_apt::cache::*; use rust_apt::cache::*;
use rust_apt::new_cache; use rust_apt::new_cache;
use rust_apt::records::RecordField; use rust_apt::records::RecordField;
@ -17,6 +17,7 @@ use std::rc::Rc;
use std::thread; use std::thread;
use tokio::runtime::Runtime; use tokio::runtime::Runtime;
pub fn apt_manage_page( pub fn apt_manage_page(
window: adw::ApplicationWindow, window: adw::ApplicationWindow,
retry_signal_action: &SimpleAction, retry_signal_action: &SimpleAction,
@ -478,7 +479,7 @@ pub fn apt_manage_page(
!unofficial_source_add_name_entry_clone0.text().is_empty() && !unofficial_source_add_name_entry_clone0.text().is_empty() &&
!unofficial_source_add_uri_entry_clone0.text().is_empty() && !unofficial_source_add_uri_entry_clone0.text().is_empty() &&
!unofficial_source_add_suites_entry_clone0.text().is_empty() && !unofficial_source_add_suites_entry_clone0.text().is_empty() &&
!unofficial_source_add_components_entry_clone0.text().is_empty() && !unofficial_source_add_components_entry_clone0.text().is_empty()
{ {
if unofficial_source_signed_keyring_checkbutton_clone0.is_active() { if unofficial_source_signed_keyring_checkbutton_clone0.is_active() {
unofficial_source_add_dialog_clone0.set_response_enabled("unofficial_source_add_dialog_add", true); unofficial_source_add_dialog_clone0.set_response_enabled("unofficial_source_add_dialog_add", true);
@ -580,7 +581,40 @@ pub fn apt_manage_page(
.choose(None::<&gio::Cancellable>, move |choice| { .choose(None::<&gio::Cancellable>, move |choice| {
match choice.as_str() { match choice.as_str() {
"unofficial_source_add_dialog_add" => { "unofficial_source_add_dialog_add" => {
println!("add") println!("add");
let non_alphanum_regex = Regex::new(r"[^a-zA-Z0-9]").unwrap();
let sign_method = if unofficial_source_signed_file_checkbutton.is_active() {
1
} else if unofficial_source_signed_url_checkbutton.is_active() {
2
} else {
0
};
let repo_file_name = non_alphanum_regex.replace_all(unofficial_source_add_name_entry.text().as_str(), "_").to_string().to_lowercase();
let new_repo = Deb822Repository {
repolib_name: Some(unofficial_source_add_name_entry.text().to_string()),
filepath: format!("/etc/apt/sources.list.d/{}.source", repo_file_name),
uris: Some(unofficial_source_add_uri_entry.text().to_string()),
types: if unofficial_source_add_is_source_switch.is_active() {
Some("deb deb-src".to_string())
} else {
Some("deb".to_string())
},
suites: Some(unofficial_source_add_suites_entry.text().to_string()),
components: Some(unofficial_source_add_components_entry.text().to_string()),
architectures: if unofficial_source_add_archs_entry.text().is_empty() {
None
} else {
Some(unofficial_source_add_archs_entry.text().to_string())
},
signed_by: match sign_method {
1 => Some(unofficial_source_add_archs_entry.text().to_string()),
2 => Some(format!("/etc/apt/keyrings/{}.gpg.key", repo_file_name)),
_ => None
},
..Default::default()
};
dbg!(new_repo);
} }
"apt_update_dialog_ignore" => { "apt_update_dialog_ignore" => {
unofficial_source_add_dialog.close(); unofficial_source_add_dialog.close();