fix(packages): Attempt to fix 'cluster not found in packages map' error

This commit is contained in:
LynithDev 2024-10-20 15:38:21 +02:00
parent 7d9b11ffae
commit f315eb95f4
3 changed files with 36 additions and 40 deletions

View file

@ -38,10 +38,11 @@ jobs:
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CURSEFORGE_API_KEY: ${{ secrets.CURSEFORGE_API_KEY }}
with:
tagName: onelauncher-__VERSION__
releaseName: OneLauncher __VERSION__
releaseDraft: true
prerelease: false
releaseDraft: false
prerelease: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-alpha') || false }}
tauriScript: pnpm desktop
args: ${{ matrix.args }}

View file

@ -123,6 +123,9 @@ pub async fn create_cluster(
}
State::sync().await?;
let state = State::get().await?;
let mut packages = state.packages.write().await;
packages.add_cluster(&state.directories, cluster.cluster_path()).await;
Ok(cluster.cluster_path())
}

View file

@ -200,27 +200,31 @@ pub struct Packages {
impl Packages {
pub async fn initialize(dirs: &Directories, clusters: &Clusters) -> Self {
let mut managers = HashMap::new();
let mut this = Self { managers: HashMap::new() };
// TODO: This should probably not clone and store the cluster path in like 2 areas
for cluster_path in clusters.0.keys() {
let mgr = PackageManager::initialize(dirs, cluster_path.clone()).await;
match mgr {
Ok(mgr) => {
managers.insert(cluster_path.clone(), mgr);
}
Err(e) => {
tracing::error!(
"failed to initialize package manager for cluster {}: {}. skipping",
cluster_path,
e
);
}
};
this.add_cluster(dirs, cluster_path.clone()).await;
}
Self { managers }
this
}
pub async fn add_cluster(&mut self, dirs: &Directories, cluster_path: ClusterPath) {
let mgr = PackageManager::initialize(dirs, cluster_path.clone()).await;
match mgr {
Ok(mgr) => {
self.managers.insert(cluster_path, mgr);
}
Err(e) => {
tracing::error!(
"failed to initialize package manager for cluster {}: {}. skipping",
cluster_path,
e
);
}
};
}
#[must_use]
@ -384,29 +388,17 @@ impl PackageManager {
#[tracing::instrument(skip(self, dirs))]
pub async fn sync_packages(&mut self, dirs: &Directories) {
tracing::info!("syncing packages for cluster {}", self.cluster_path);
if let Err(err) = &self.sync_packages_by_type(dirs, PackageType::Mod).await {
tracing::error!("failed to sync mods: {}", err);
}
let package_types = vec![
PackageType::Mod,
PackageType::DataPack,
PackageType::ResourcePack,
PackageType::ShaderPack,
];
if let Err(err) = &self
.sync_packages_by_type(dirs, PackageType::DataPack)
.await
{
tracing::error!("failed to sync datapacks: {}", err);
}
if let Err(err) = &self
.sync_packages_by_type(dirs, PackageType::ResourcePack)
.await
{
tracing::error!("failed to sync resourcepacks: {}", err);
}
if let Err(err) = &self
.sync_packages_by_type(dirs, PackageType::ShaderPack)
.await
{
tracing::error!("failed to sync shaderpacks: {}", err);
for package_type in package_types {
if let Err(err) = &self.sync_packages_by_type(dirs, package_type).await {
tracing::error!("failed to sync package {}: {}", package_type.get_name(), err);
}
}
}