Better update list for nix-env

This commit is contained in:
Victor Fuentes 2022-10-27 12:58:24 -04:00
parent f414005ba5
commit 9f957506f8
No known key found for this signature in database
GPG Key ID: 0A88B68D6A9ACAE0

View File

@ -32,9 +32,7 @@ use super::{
searchpage::{SearchItem, SearchPageModel, SearchPageMsg}, searchpage::{SearchItem, SearchPageModel, SearchPageMsg},
updatepage::{UpdateItem, UpdatePageInit, UpdatePageModel, UpdatePageMsg}, updatepage::{UpdateItem, UpdatePageInit, UpdatePageModel, UpdatePageMsg},
welcome::WelcomeModel, welcome::WelcomeModel,
windowloading::{ windowloading::{LoadErrorModel, LoadErrorMsg, WindowAsyncHandler, WindowAsyncHandlerMsg},
LoadErrorModel, LoadErrorMsg, WindowAsyncHandler, WindowAsyncHandlerMsg,
},
}; };
#[derive(PartialEq)] #[derive(PartialEq)]
@ -606,13 +604,13 @@ impl Component for AppModel {
warn!("Error editing config: {}", e); warn!("Error editing config: {}", e);
} }
self.syspkgtype = if self.config.systemconfig.is_none() { self.syspkgtype = if self.config.systemconfig.is_none() {
SystemPkgs::None SystemPkgs::None
} else { } else {
match fs::read_to_string("/run/current-system/nixos-version") { match fs::read_to_string("/run/current-system/nixos-version") {
Ok(s) => { Ok(s) => {
if !Path::new("/nix/var/nix/profiles/per-user/root/channels/nixos").exists() if !Path::new("/nix/var/nix/profiles/per-user/root/channels/nixos")
.exists()
|| self.config.flake.is_some() || self.config.flake.is_some()
{ {
SystemPkgs::Flake SystemPkgs::Flake
@ -626,12 +624,18 @@ impl Component for AppModel {
SystemPkgs::Legacy SystemPkgs::Legacy
} }
} }
Err(_) => SystemPkgs::None Err(_) => SystemPkgs::None,
} }
}; };
self.pkgpage.emit(PkgMsg::UpdatePkgTypes(self.syspkgtype.clone(), self.userpkgtype.clone())); self.pkgpage.emit(PkgMsg::UpdatePkgTypes(
self.syspkgtype.clone(),
self.userpkgtype.clone(),
));
self.pkgpage.emit(PkgMsg::UpdateConfig(self.config.clone())); self.pkgpage.emit(PkgMsg::UpdateConfig(self.config.clone()));
self.updatepage.emit(UpdatePageMsg::UpdatePkgTypes(self.syspkgtype.clone(), self.userpkgtype.clone())); self.updatepage.emit(UpdatePageMsg::UpdatePkgTypes(
self.syspkgtype.clone(),
self.userpkgtype.clone(),
));
self.updatepage self.updatepage
.emit(UpdatePageMsg::UpdateConfig(self.config.clone())); .emit(UpdatePageMsg::UpdateConfig(self.config.clone()));
self.windowloading.emit(WindowAsyncHandlerMsg::CheckCache( self.windowloading.emit(WindowAsyncHandlerMsg::CheckCache(
@ -1172,80 +1176,115 @@ FROM pkgs JOIN meta ON (pkgs.attribute = meta.attribute) WHERE pkgs.attribute =
if let Ok(pool) = &SqlitePool::connect(&format!("sqlite://{}", self.pkgdb)).await { if let Ok(pool) = &SqlitePool::connect(&format!("sqlite://{}", self.pkgdb)).await {
match self.userpkgtype { match self.userpkgtype {
UserPkgs::Env => { UserPkgs::Env => {
updateuseritems.push(UpdateItem { for (installedpname, installedver) in &self.installeduserpkgs {
name: String::from("Nix Env"), let possibleitems: Vec<(String,)> =
pname: String::from("nix-env packages do not contain enough version information to determine if they are up to date."), sqlx::query_as("SELECT attribute FROM pkgs WHERE pname = $1")
pkg: None, .bind(installedpname)
summary: None, //data.summary.clone(), .fetch_all(pool)
icon: None, //data.icon.clone(), .await
pkgtype: InstallType::User, .unwrap();
verfrom: None, match possibleitems.len() {
verto: None, 1 => {
}); let (pkg,) = &possibleitems[0];
for installedpname in self.installeduserpkgs.keys() { let (description,): (String,) = sqlx::query_as(
installeduseritems.push(InstalledItem { "SELECT description FROM meta WHERE attribute = $1",
name: installedpname.clone(), )
pname: installedpname.clone(), .bind(pkg)
pkg: None, .fetch_one(pool)
summary: None, //data.summary.clone(), .await
icon: None, //data.icon.clone(), .unwrap();
pkgtype: InstallType::User, let (newver,): (String,) = sqlx::query_as(
busy: self "SELECT version FROM pkgs WHERE attribute = $1",
.installedpagebusy )
.contains(&(installedpname.clone(), InstallType::User)), .bind(pkg)
}); .fetch_one(pool)
.await
// match count { .unwrap();
// 1 => { let mut name = installedpname.to_string();
// let (pkg,) = &possibleitems[0]; let mut summary = if description.is_empty() {
// let (description,): (String,) = sqlx::query_as("SELECT description FROM meta WHERE attribute LIKE $1").bind(&format!("'%{}%'", pkg)).fetch_one(&pool).await.unwrap(); None
// let mut name = installedpname.to_string(); } else {
// let mut summary = if description.is_empty() { None } else { Some(description.to_string()) }; Some(description.to_string())
// let mut icon = None; };
// if let Some(data) = self.appdata.get(pkg) { let mut icon = None;
// if let Some(n) = &data.name { if let Some(data) = self.appdata.get(pkg) {
// if let Some(n) = n.get("C") { if let Some(n) = &data.name {
// name = n.to_string(); if let Some(n) = n.get("C") {
// } name = n.to_string();
// } }
// if let Some(s) = &data.summary { }
// if let Some(s) = s.get("C") { if let Some(s) = &data.summary {
// summary = Some(s.to_string()); if let Some(s) = s.get("C") {
// } summary = Some(s.to_string());
// } }
// if let Some(i) = &data.icon { }
// if let Some(i) = &i.cached { if let Some(i) = &data.icon {
// icon = Some(i[0].name.clone()); if let Some(i) = &i.cached {
// } icon = Some(i[0].name.clone());
// } }
// } }
// installeduseritems.push(InstalledItem { }
// name, installeduseritems.push(InstalledItem {
// pname: installedpname.to_string(), name: name.clone(),
// pkg: Some(pkg.clone()), pname: installedpname.to_string(),
// summary, pkg: Some(pkg.clone()),
// icon, summary: summary.clone(),
// pkgtype: InstallType::User, icon: icon.clone(),
// busy: self pkgtype: InstallType::User,
// .installedpagebusy busy: self.installedpagebusy.contains(&(
// .contains(&(installedpname.to_string(), InstallType::User)), installedpname.to_string(),
// }) InstallType::User,
// } )),
// 2.. => { });
// installeduseritems.push(InstalledItem { if !installedver.eq(&newver) {
// name: installedpname.clone(), updateuseritems.push(UpdateItem {
// pname: installedpname.clone(), name,
// pkg: None, pname: installedpname.to_string(),
// summary: None, //data.summary.clone(), pkg: Some(pkg.clone()),
// icon: None, //data.icon.clone(), summary,
// pkgtype: InstallType::User, icon,
// busy: self pkgtype: InstallType::User,
// .installedpagebusy verfrom: Some(installedver.to_string()),
// .contains(&(installedpname.clone(), InstallType::User)), verto: Some(newver),
// }) });
// } }
// _ => {} }
// } 2.. => {
installeduseritems.push(InstalledItem {
name: installedpname.clone(),
pname: installedpname.clone(),
pkg: None,
summary: None,
icon: None,
pkgtype: InstallType::User,
busy: self.installedpagebusy.contains(&(
installedpname.clone(),
InstallType::User,
)),
});
let possibleversions: Vec<(String,)> = sqlx::query_as(
"SELECT version FROM pkgs WHERE pname = $1",
)
.bind(installedpname)
.fetch_all(pool)
.await
.unwrap();
if !possibleversions.contains(&(installedver.to_string(),))
{
updateuseritems.push(UpdateItem {
name: installedpname.clone(),
pname: installedpname.clone(),
pkg: None,
summary: None,
icon: None,
pkgtype: InstallType::User,
verfrom: Some(installedver.to_string()),
verto: None,
});
}
}
_ => {}
}
} }
} }
UserPkgs::Profile => { UserPkgs::Profile => {
@ -1646,7 +1685,8 @@ FROM pkgs JOIN meta ON (pkgs.attribute = meta.attribute) WHERE pkgs.attribute =
info!("AppMsg::OpenCategoryPage({})", category); info!("AppMsg::OpenCategoryPage({})", category);
self.page = Page::FrontPage; self.page = Page::FrontPage;
self.mainpage = MainPage::CategoryPage; self.mainpage = MainPage::CategoryPage;
self.categorypage.emit(CategoryPageMsg::Loading(category.clone())); self.categorypage
.emit(CategoryPageMsg::Loading(category.clone()));
sender.input(AppMsg::LoadCategory(category)); sender.input(AppMsg::LoadCategory(category));
} }
AppMsg::LoadCategory(category) => { AppMsg::LoadCategory(category) => {
@ -1811,7 +1851,8 @@ FROM pkgs JOIN meta ON (pkgs.attribute = meta.attribute) WHERE pkgs.attribute =
info!("DONE AppAsyncMsg::UpdateInstalledPkgs"); info!("DONE AppAsyncMsg::UpdateInstalledPkgs");
} }
AppAsyncMsg::LoadCategory(category, catrec, catall) => { AppAsyncMsg::LoadCategory(category, catrec, catall) => {
self.categorypage.emit(CategoryPageMsg::Open(category, catrec, catall)); self.categorypage
.emit(CategoryPageMsg::Open(category, catrec, catall));
} }
} }
} }