diff --git a/backend/src/version/mod.rs b/backend/src/version/mod.rs index 5948fc0fa..b6738dc27 100644 --- a/backend/src/version/mod.rs +++ b/backend/src/version/mod.rs @@ -18,6 +18,7 @@ mod v0_3_1_2; mod v0_3_2; mod v0_3_2_1; mod v0_3_3; +mod v0_3_3_1; pub type Current = v0_3_3::Version; @@ -34,6 +35,7 @@ enum Version { V0_3_2(Wrapper), V0_3_2_1(Wrapper), V0_3_3(Wrapper), + V0_3_3_1(Wrapper), Other(emver::Version), } @@ -59,6 +61,7 @@ impl Version { Version::V0_3_2(Wrapper(x)) => x.semver(), Version::V0_3_2_1(Wrapper(x)) => x.semver(), Version::V0_3_3(Wrapper(x)) => x.semver(), + Version::V0_3_3_1(Wrapper(x)) => x.semver(), Version::Other(x) => x.clone(), } } @@ -195,6 +198,7 @@ pub async fn init( Version::V0_3_2(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, Version::V0_3_2_1(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, Version::V0_3_3(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, + Version::V0_3_3_1(v) => v.0.migrate_to(&Current::new(), db, receipts).await?, Version::Other(_) => { return Err(Error::new( eyre!("Cannot downgrade"), @@ -237,6 +241,7 @@ mod tests { Just(Version::V0_3_2(Wrapper(v0_3_2::Version::new()))), Just(Version::V0_3_2_1(Wrapper(v0_3_2_1::Version::new()))), Just(Version::V0_3_3(Wrapper(v0_3_3::Version::new()))), + Just(Version::V0_3_3_1(Wrapper(v0_3_3_1::Version::new()))), em_version().prop_map(Version::Other), ] } diff --git a/backend/src/version/v0_3_3_1.rs b/backend/src/version/v0_3_3_1.rs new file mode 100644 index 000000000..88874fca5 --- /dev/null +++ b/backend/src/version/v0_3_3_1.rs @@ -0,0 +1,94 @@ +use async_trait::async_trait; +use emver::VersionRange; +use serde_json::json; + +use super::v0_3_0::V0_3_0_COMPAT; +use super::*; + +const V0_3_3_1: emver::Version = emver::Version::new(0, 3, 3, 1); + +const COMMUNITY_URL: &str = "https://community-registry.start9.com/"; +const MAIN_REGISTRY: &str = "https://registry.start9.com/"; +const COMMUNITY_SERVICES: &[&str] = &[ + "ipfs", + "agora", + "lightning-jet", + "balanceofsatoshis", + "mastodon", + "lndg", + "robosats", + "thunderhub", + "syncthing", + "sphinx-relay", +]; + +#[derive(Clone, Debug)] +pub struct Version; + +#[async_trait] +impl VersionT for Version { + type Previous = v0_3_3::Version; + fn new() -> Self { + Version + } + fn semver(&self) -> emver::Version { + V0_3_3_1 + } + fn compat(&self) -> &'static VersionRange { + &*V0_3_0_COMPAT + } + async fn up(&self, db: &mut Db) -> Result<(), Error> { + let parsed_url = Some(COMMUNITY_URL.parse().unwrap()); + let mut ui = crate::db::DatabaseModel::new().ui().get_mut(db).await?; + ui["marketplace"]["known-hosts"][COMMUNITY_URL] = json!({}); + for package_id in crate::db::DatabaseModel::new() + .package_data() + .keys(db) + .await? + { + if !COMMUNITY_SERVICES.contains(&&*package_id.to_string()) { + continue; + } + crate::db::DatabaseModel::new() + .package_data() + .idx_model(&package_id) + .expect(db) + .await? + .installed() + .expect(db) + .await? + .marketplace_url() + .put(db, &parsed_url) + .await?; + } + Ok(()) + } + async fn down(&self, db: &mut Db) -> Result<(), Error> { + let mut ui = crate::db::DatabaseModel::new().ui().get_mut(db).await?; + let parsed_url = Some(MAIN_REGISTRY.parse().unwrap()); + for package_id in crate::db::DatabaseModel::new() + .package_data() + .keys(db) + .await? + { + if !COMMUNITY_SERVICES.contains(&&*package_id.to_string()) { + continue; + } + crate::db::DatabaseModel::new() + .package_data() + .idx_model(&package_id) + .expect(db) + .await? + .installed() + .expect(db) + .await? + .marketplace_url() + .put(db, &parsed_url) + .await?; + } + + ui["marketplace"]["known-hosts"][COMMUNITY_URL].take(); + ui.save(db).await?; + Ok(()) + } +} diff --git a/frontend/patchdb-ui-seed.json b/frontend/patchdb-ui-seed.json index d816681ec..deb00df22 100644 --- a/frontend/patchdb-ui-seed.json +++ b/frontend/patchdb-ui-seed.json @@ -4,7 +4,8 @@ "marketplace": { "selected-url": "https://registry.start9.com/", "known-hosts": { - "https://registry.start9.com/": {} + "https://registry.start9.com/": {}, + "https://community-registry.start9.com/": {} } }, "dev": {}, diff --git a/frontend/projects/marketplace/src/types.ts b/frontend/projects/marketplace/src/types.ts index 08fad4893..5ab4f2a68 100644 --- a/frontend/projects/marketplace/src/types.ts +++ b/frontend/projects/marketplace/src/types.ts @@ -27,14 +27,17 @@ export interface MarketplacePkg { categories: string[] versions: string[] 'dependency-metadata': { - [id: string]: { - title: string - icon: Url - } + [id: string]: DependencyMetadata } 'published-at': string } +export interface DependencyMetadata { + title: string + icon: Url + hidden: boolean +} + export interface MarketplaceManifest { id: string title: string diff --git a/frontend/projects/ui/src/app/app/preloader/preloader.component.ts b/frontend/projects/ui/src/app/app/preloader/preloader.component.ts index 1941df96c..604900062 100644 --- a/frontend/projects/ui/src/app/app/preloader/preloader.component.ts +++ b/frontend/projects/ui/src/app/app/preloader/preloader.component.ts @@ -18,6 +18,7 @@ const ICONS = [ 'chevron-up', 'chevron-forward', 'close', + 'close-circle-outline', 'cloud-outline', 'cloud-done', 'cloud-done-outline', diff --git a/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html b/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html index 61b687861..abac908d0 100644 --- a/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html +++ b/frontend/projects/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html @@ -3,12 +3,20 @@ - +
+

- {{ pkgId }} version {{ version === '*' ? 'latest' : version }} not - found in this registry + {{ pkgId }} @{{ version === '*' ? 'latest' : version }} not found in + this registry

- +
diff --git a/frontend/projects/ui/src/app/services/api/api.fixures.ts b/frontend/projects/ui/src/app/services/api/api.fixures.ts index 7ae04400a..e9a7532b2 100644 --- a/frontend/projects/ui/src/app/services/api/api.fixures.ts +++ b/frontend/projects/ui/src/app/services/api/api.fixures.ts @@ -10,7 +10,7 @@ import { import { Metric, RR, NotificationLevel, ServerNotifications } from './api.types' import { BTC_ICON, LND_ICON, PROXY_ICON } from './api-icons' -import { MarketplacePkg } from '@start9labs/marketplace' +import { DependencyMetadata, MarketplacePkg } from '@start9labs/marketplace' import { Log } from '@start9labs/shared' export module Mock { @@ -626,6 +626,18 @@ export module Mock { }, } + export const BitcoinDep: DependencyMetadata = { + title: 'Bitcoin Core', + icon: BTC_ICON, + hidden: true, + } + + export const ProxyDep: DependencyMetadata = { + title: 'Bitcoin Proxy', + icon: PROXY_ICON, + hidden: false, + } + export const MarketplacePkgs: { [id: string]: { [version: string]: MarketplacePkg @@ -701,14 +713,8 @@ export module Mock { categories: ['bitcoin', 'lightning', 'cryptocurrency'], versions: ['0.11.0', '0.11.1'], 'dependency-metadata': { - bitcoind: { - title: 'Bitcoin Core', - icon: BTC_ICON, - }, - 'btc-rpc-proxy': { - title: 'Bitcoin Proxy', - icon: PROXY_ICON, - }, + bitcoind: BitcoinDep, + 'btc-rpc-proxy': ProxyDep, }, 'published-at': new Date().toISOString(), }, @@ -724,14 +730,8 @@ export module Mock { categories: ['bitcoin', 'lightning', 'cryptocurrency'], versions: ['0.11.0', '0.11.1'], 'dependency-metadata': { - bitcoind: { - title: 'Bitcoin Core', - icon: BTC_ICON, - }, - 'btc-rpc-proxy': { - title: 'Bitcoin Proxy', - icon: PROXY_ICON, - }, + bitcoind: BitcoinDep, + 'btc-rpc-proxy': ProxyDep, }, 'published-at': new Date().toISOString(), }, @@ -743,14 +743,8 @@ export module Mock { categories: ['bitcoin', 'lightning', 'cryptocurrency'], versions: ['0.11.0', '0.11.1'], 'dependency-metadata': { - bitcoind: { - title: 'Bitcoin Core', - icon: BTC_ICON, - }, - 'btc-rpc-proxy': { - title: 'Bitcoin Proxy', - icon: PROXY_ICON, - }, + bitcoind: BitcoinDep, + 'btc-rpc-proxy': ProxyDep, }, 'published-at': new Date(new Date().valueOf() + 10).toISOString(), }, @@ -764,10 +758,7 @@ export module Mock { categories: ['bitcoin'], versions: ['0.2.2'], 'dependency-metadata': { - bitcoind: { - title: 'Bitcoin Core', - icon: BTC_ICON, - }, + bitcoind: BitcoinDep, }, 'published-at': new Date().toISOString(), }, diff --git a/frontend/projects/ui/src/app/services/patch-db/data-model.ts b/frontend/projects/ui/src/app/services/patch-db/data-model.ts index 7385b29a8..b2349dac3 100644 --- a/frontend/projects/ui/src/app/services/patch-db/data-model.ts +++ b/frontend/projects/ui/src/app/services/patch-db/data-model.ts @@ -26,7 +26,7 @@ export interface UIMarketplaceData { 'selected-url': string 'known-hosts': { 'https://registry.start9.com/': UIStore - // 'https://community-registry.start9.com/': UIStore + 'https://community-registry.start9.com/': UIStore [url: string]: UIStore } }