diff --git a/apps/frontend/src/ui/pages/browser/BrowserPackage.tsx b/apps/frontend/src/ui/pages/browser/BrowserPackage.tsx
index 6e07fbfe..f5787386 100644
--- a/apps/frontend/src/ui/pages/browser/BrowserPackage.tsx
+++ b/apps/frontend/src/ui/pages/browser/BrowserPackage.tsx
@@ -400,7 +400,10 @@ function BrowserPackageVersions() {
if (context === null)
return [];
- const newestToOldest = context.pkg().versions.toReversed();
+ const newestToOldest = context.pkg().versions;
+ if (context.pkg().provider !== 'SkyClient')
+ newestToOldest.reverse();
+
const start = (page - 1) * MAX_ITEMS_PER_PAGE;
const end = start + MAX_ITEMS_PER_PAGE;
@@ -425,7 +428,12 @@ function BrowserPackageVersions() {
const list = getVersionsForPage(page());
- return (await tryResult(() => bridge.commands.getProviderPackageVersions(context.pkg().provider, list))).toReversed();
+ const versions = (await tryResult(() => bridge.commands.getProviderPackageVersions(context.pkg().provider, list)));
+
+ if (context.pkg().provider !== 'SkyClient')
+ versions.reverse();
+
+ return versions;
});
let container!: HTMLDivElement;
@@ -583,7 +591,7 @@ function VersionRow(props: ManagedVersion) {
- {formatAsRelative(new Date(props.published).getTime(), 'en', 'long')}
+ {props.published ? formatAsRelative(new Date(props.published).getTime(), 'en', 'long') : 'Unknown'}
|
diff --git a/packages/core/src/api/package/content/mod.rs b/packages/core/src/api/package/content/mod.rs
index 5276ce61..ede86dbd 100644
--- a/packages/core/src/api/package/content/mod.rs
+++ b/packages/core/src/api/package/content/mod.rs
@@ -183,7 +183,7 @@ impl Providers {
Self::SkyClient => {
let data = skyclient::get_all_versions(project_id, game_versions, loaders, page, page_size).await?;
- (data.0.into_iter().map(Into::into).collect(), data.1)
+ (data.0, data.1)
},
})
}
diff --git a/packages/core/src/api/package/content/skyclient.rs b/packages/core/src/api/package/content/skyclient.rs
index f945a5f7..4c8954d2 100644
--- a/packages/core/src/api/package/content/skyclient.rs
+++ b/packages/core/src/api/package/content/skyclient.rs
@@ -1,5 +1,6 @@
use std::{collections::HashMap, sync::Arc};
+use chrono::{DateTime, Utc};
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use tokio::sync::{OnceCell, RwLock};
@@ -96,8 +97,8 @@ impl Into for SkyClientMod {
categories: vec![],
client: crate::store::PackageSide::Required,
server: crate::store::PackageSide::Unknown,
- created: None,
- updated: None,
+ created: None, // TODO: Get the oldest date from versions
+ updated: None, // TODO: Get the newest date from versions
description: self.description.unwrap_or_default(),
downloads: 0,
followers: 0,
@@ -140,6 +141,7 @@ pub struct SkyClientModVersion {
pub file: String,
pub url: String,
pub hash: String,
+ pub date_published: DateTime,
pub mod_id: Option,
}
@@ -168,7 +170,7 @@ fn get_managed_version(m: &SkyClientMod, v: &SkyClientModVersion) -> ManagedVers
is_available: true,
loaders: v.loaders.iter().map(|l| Loader::from_string(l.to_owned())).collect(),
name: format!("{} v{}", m.display, v.version),
- published: None,
+ published: Some(v.date_published),
version_display: v.version.clone(),
version_type: crate::store::ManagedVersionReleaseType::Release,
}
@@ -177,9 +179,8 @@ fn get_managed_version(m: &SkyClientMod, v: &SkyClientModVersion) -> ManagedVers
pub async fn get(id: &str) -> Result {
let store = SkyClientStore::get().await?;
- let mods = match &store.mods {
- Some(mods) => mods,
- None => return Err(anyhow::anyhow!("mod not found").into())
+ let Some(mods) = &store.mods else {
+ return Err(anyhow::anyhow!("mod not found").into())
};
for m in mods {
@@ -219,42 +220,33 @@ pub async fn get_all_versions(
page: Option,
page_size: Option,
) -> Result<(Vec, Pagination)> {
- let store = SkyClientStore::get().await?;
-
- let mods = match &store.mods {
- Some(mods) => mods,
- None => return Ok((vec![], Pagination::default()))
- };
-
let mut pagination = Pagination::default();
let mut versions = vec![];
- for m in mods {
- if m.id == project_id {
- for v in &m.versions {
- let mut can_add = true;
+ if let Ok(m) = &get(project_id).await {
+ for v in &m.versions {
+ let mut can_add = true;
- if let Some(game_versions) = &game_versions {
- if !game_versions.is_empty() {
- can_add = v.game_versions.iter().any(|gv| game_versions.contains(gv))
+ if let Some(game_versions) = &game_versions {
+ if !game_versions.is_empty() {
+ can_add = v.game_versions.iter().any(|gv| game_versions.contains(gv))
+ }
+ }
+
+ if can_add {
+ if let Some(loaders) = &loaders {
+ if !loaders.is_empty() {
+ can_add = v.loaders.iter().any(|l| loaders.contains(&Loader::from_string(l.to_owned())))
}
}
+ }
- if can_add {
- if let Some(loaders) = &loaders {
- if !loaders.is_empty() {
- can_add = v.loaders.iter().any(|l| loaders.contains(&Loader::from_string(l.to_owned())))
- }
- }
+ if can_add {
+ if page_size.map(|ps| versions.len() < ps as usize).unwrap_or(true) && page.map(|p| p <= pagination.index).unwrap_or(true) {
+ versions.push(get_managed_version(m, v));
}
- if can_add {
- if page_size.map(|ps| versions.len() < ps as usize).unwrap_or(true) && page.map(|p| p <= pagination.index).unwrap_or(true) {
- versions.push(get_managed_version(m, v));
- }
-
- pagination.total_count += 1;
- }
+ pagination.total_count += 1;
}
}
}
|