Fix catalog refresh: handle null fields in AppImageHub feed JSON
This commit is contained in:
@@ -152,17 +152,17 @@ fn fetch_appimage_hub() -> Result<Vec<CatalogApp>, CatalogError> {
|
||||
let apps: Vec<CatalogApp> = feed.items.into_iter().filter_map(|item| {
|
||||
// AppImageHub items need at least a name and a link
|
||||
let name = item.name?;
|
||||
let download_url = item.links.into_iter()
|
||||
let download_url = item.links.unwrap_or_default().into_iter()
|
||||
.find(|l| l.r#type == "Download")
|
||||
.map(|l| l.url)?;
|
||||
|
||||
Some(CatalogApp {
|
||||
name,
|
||||
description: item.description,
|
||||
categories: item.categories.unwrap_or_default(),
|
||||
categories: item.categories.unwrap_or_default().into_iter().flatten().collect(),
|
||||
latest_version: None,
|
||||
download_url,
|
||||
icon_url: item.icons.and_then(|icons| icons.into_iter().next()),
|
||||
icon_url: item.icons.and_then(|icons| icons.into_iter().flatten().next()),
|
||||
homepage: item.authors.and_then(|a| {
|
||||
let first = a.into_iter().next()?;
|
||||
if let Some(ref author_name) = first.name {
|
||||
@@ -237,10 +237,10 @@ struct AppImageHubFeed {
|
||||
struct AppImageHubItem {
|
||||
name: Option<String>,
|
||||
description: Option<String>,
|
||||
categories: Option<Vec<String>>,
|
||||
categories: Option<Vec<Option<String>>>,
|
||||
authors: Option<Vec<AppImageHubAuthor>>,
|
||||
links: Vec<AppImageHubLink>,
|
||||
icons: Option<Vec<String>>,
|
||||
links: Option<Vec<AppImageHubLink>>,
|
||||
icons: Option<Vec<Option<String>>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Deserialize)]
|
||||
|
||||
@@ -175,15 +175,14 @@ pub fn build_catalog_page(db: &Rc<Database>) -> adw::NavigationPage {
|
||||
let db_bg = Database::open().ok();
|
||||
let result = gio::spawn_blocking(move || {
|
||||
if let Some(ref db) = db_bg {
|
||||
catalog::sync_catalog(db, &catalog::CatalogSource {
|
||||
id: Some(1),
|
||||
name: "AppImageHub".to_string(),
|
||||
url: "https://appimage.github.io/feed.json".to_string(),
|
||||
source_type: catalog::CatalogType::AppImageHub,
|
||||
enabled: true,
|
||||
last_synced: None,
|
||||
app_count: 0,
|
||||
}).map_err(|e| e.to_string())
|
||||
catalog::ensure_default_sources(db);
|
||||
let sources = catalog::get_sources(db);
|
||||
if let Some(source) = sources.first() {
|
||||
catalog::sync_catalog(db, source)
|
||||
.map_err(|e| e.to_string())
|
||||
} else {
|
||||
Err("No catalog sources configured".to_string())
|
||||
}
|
||||
} else {
|
||||
Err("Failed to open database".to_string())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user