Fix malformed maintainer list parsing

This commit is contained in:
Victor Fuentes 2022-09-29 18:04:04 -04:00
parent b1a89ece31
commit 630a718bac
No known key found for this signature in database
GPG Key ID: 0A88B68D6A9ACAE0
3 changed files with 25 additions and 21 deletions

View File

@ -22,6 +22,7 @@ pub struct Package {
#[serde(skip_deserializing)]
pub appdata: Option<AppData>,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub struct Meta {
pub broken: Option<bool>,
@ -32,7 +33,7 @@ pub struct Meta {
#[serde(rename = "longDescription")]
pub longdescription: Option<IString>,
pub homepage: Option<StrOrVec>,
pub maintainers: Option<Vec<PkgMaintainer>>,
pub maintainers: Option<ijson::IValue>,
pub position: Option<IString>,
pub license: Option<LicenseEnum>,
pub platforms: Option<Platform>
@ -75,8 +76,8 @@ pub struct License {
#[derive(Serialize, Deserialize, PartialEq, Clone, Debug)]
pub struct PkgMaintainer {
pub email: IString,
pub github: IString,
pub email: Option<IString>,
pub github: Option<IString>,
pub matrix: Option<IString>,
pub name: Option<IString>
}

View File

@ -869,29 +869,30 @@ impl Component for PkgModel {
#[watch]
set_label: {
let mut s = String::new();
for p in model.maintainers.iter() {
if model.maintainers.iter().len() == 1 {
let maintainerlist = model.maintainers.iter().filter(|m| m.name.is_some() || m.github.is_some()).collect::<Vec<_>>();
for p in &maintainerlist {
if maintainerlist.len() == 1 {
if let Some(n) = &p.name {
s.push_str(n);
} else {
s.push_str(&p.github);
} else if let Some(g) = &p.github {
s.push_str(g);
}
} else if model.maintainers.iter().len() == 2 && model.maintainers.get(0) == Some(p) {
} else if maintainerlist.len() == 2 && model.maintainers.get(0) == Some(p) {
if let Some(n) = &p.name {
let _ = write!(s, "{} ", n.to_string());
} else {
let _ = write!(s, "{} ", p.github.to_string());
let _ = write!(s, "{} ", n.as_str());
} else if let Some(g) = &p.github {
s.push_str(g);
}
} else if Some(p) == model.maintainers.iter().last() {
} else if Some(p) == maintainerlist.last() {
if let Some(n) = &p.name {
let _ = write!(s, "and {}", n.to_string());
} else {
let _ = write!(s, "and {}", p.github.to_string());
let _ = write!(s, "and {}", n.as_str());
} else if let Some(g) = &p.github {
let _ = write!(s, "and {}", g.as_str());
}
} else if let Some(n) = &p.name {
let _ = write!(s, "{}, ", n.to_string());
} else {
let _ = write!(s, "{}, ", p.github.to_string());
let _ = write!(s, "{}, ", n.as_str());
} else if let Some(g) = &p.github {
let _ = write!(s, "{}, ", g.as_str());
}
}
if model.maintainers.is_empty() {

View File

@ -5,7 +5,7 @@ use adw::prelude::*;
use edit_distance;
use serde_json::Value;
use spdx::Expression;
use crate::{parse::{packages::{Package, LicenseEnum, Platform}, cache::{uptodatelegacy, uptodateflake}, config::{NscConfig, getconfig, editconfig}}, ui::{installedpage::InstalledItem, pkgpage::PkgPageInit, welcome::WelcomeMsg}, APPINFO, config};
use crate::{parse::{packages::{Package, LicenseEnum, Platform, PkgMaintainer}, cache::{uptodatelegacy, uptodateflake}, config::{NscConfig, getconfig, editconfig}}, ui::{installedpage::InstalledItem, pkgpage::PkgPageInit, welcome::WelcomeMsg}, APPINFO, config};
use log::*;
use super::{
@ -873,8 +873,10 @@ impl Component for AppModel {
platforms.insert(0, input.system.to_string());
if let Some(m) = input.meta.maintainers.clone() {
for m in m {
maintainers.push(m);
if let Ok(m) = ijson::from_value::<Vec<PkgMaintainer>>(&m) {
for m in m {
maintainers.push(m);
}
}
}