Skip to content

Commit 34d8d57

Browse files
committed
Cleanup and fix curseforge importing
1 parent b376ab4 commit 34d8d57

File tree

5 files changed

+32
-48
lines changed

5 files changed

+32
-48
lines changed

crates/backend/src/install_content.rs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -973,20 +973,7 @@ fn determine_loader_from_content(content: &[InstallFromContentLibrary]) -> Optio
973973
}
974974
},
975975
ContentType::CurseforgeModpack { minecraft, .. } => {
976-
return minecraft.mod_loaders.iter()
977-
.find(|loader| loader.primary)
978-
.or_else(|| minecraft.mod_loaders.first())
979-
.and_then(|loader| {
980-
if loader.id.starts_with("forge-") {
981-
Some(Loader::Forge)
982-
} else if loader.id.starts_with("neoforge-") {
983-
Some(Loader::NeoForge)
984-
} else if loader.id.starts_with("fabric-") {
985-
Some(Loader::Fabric)
986-
} else {
987-
None
988-
}
989-
});
976+
return minecraft.get_loader();
990977
},
991978
ContentType::ResourcePack => {},
992979
}

crates/backend/src/launcher_import/curseforge.rs

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,26 @@
11
use std::{path::{Path, PathBuf}, sync::Arc};
22

33
use bridge::{import::ImportFromOtherLauncherJob, modal_action::{ModalAction, ProgressTracker}};
4-
use schema::{instance::{InstanceConfiguration, InstanceMemoryConfiguration}, loader::Loader};
4+
use schema::{curseforge::CurseforgeModpackManifestJson, instance::{InstanceConfiguration, InstanceMemoryConfiguration}, loader::Loader};
55
use serde::Deserialize;
66

77
use crate::{BackendState, write_safe};
88

99
#[derive(Debug, Deserialize)]
1010
#[serde(rename_all = "camelCase")]
1111
struct CurseforgeInstance {
12-
manifest: CurseforgeManifest,
12+
manifest: CurseforgeModpackManifestJson,
1313
is_memory_override: bool,
1414
allocated_memory: u32,
1515
// memory_allocated_type: u8,
1616
}
1717

18-
#[derive(Debug, Deserialize)]
19-
#[serde(rename_all = "camelCase")]
20-
struct CurseforgeManifest {
21-
minecraft: CurseforgeManifestMinecraft,
22-
}
23-
24-
#[derive(Debug, Deserialize)]
25-
#[serde(rename_all = "camelCase")]
26-
struct CurseforgeManifestMinecraft {
27-
version: String,
28-
mod_loaders: Vec<CurseforgeModLoader>,
29-
}
30-
31-
#[derive(Debug, Deserialize)]
32-
#[serde(rename_all = "camelCase")]
33-
struct CurseforgeModLoader {
34-
id: String,
35-
primary: bool,
36-
}
37-
38-
3918
fn try_load_from_curseforge(config_path: &Path) -> Option<InstanceConfiguration> {
4019
let instance_cfg_bytes = std::fs::read(config_path).ok()?;
4120
let instance_cfg = serde_json::from_slice::<CurseforgeInstance>(&instance_cfg_bytes).ok()?;
4221

43-
let loader_details = instance_cfg.manifest.minecraft.mod_loaders.iter().filter(|loader| loader.primary).nth(0)?;
44-
let loader = Loader::from_name(&loader_details.id.split("-").next()?);
45-
let mut configuration = InstanceConfiguration::new(instance_cfg.manifest.minecraft.version.into(), loader);
22+
let loader = instance_cfg.manifest.minecraft.get_loader().unwrap_or(Loader::Vanilla);
23+
let mut configuration = InstanceConfiguration::new(instance_cfg.manifest.minecraft.version?.into(), loader);
4624
if instance_cfg.is_memory_override {
4725
configuration.memory = Some(InstanceMemoryConfiguration {
4826
enabled: true,
@@ -126,13 +104,11 @@ pub fn import_instances_from_curseforge(backend: &BackendState, import_job: &Imp
126104
_ = std::fs::create_dir_all(&to_import.pandora_path);
127105
let target_dot_minecraft = to_import.pandora_path.join(".minecraft");
128106

129-
let copy_options = fs_extra::dir::CopyOptions::default().copy_inside(true);
130-
_ = fs_extra::dir::copy_with_progress(to_import.folder, &target_dot_minecraft, &copy_options, |state| {
131-
tracker.set_total(state.total_bytes as usize);
132-
tracker.set_count(state.copied_bytes as usize);
107+
_ = std::fs::create_dir_all(&target_dot_minecraft);
108+
_ = crate::copy_content_recursive(&to_import.folder, &target_dot_minecraft, false, &|copied, total| {
109+
tracker.set_total(total as usize);
110+
tracker.set_count(copied as usize);
133111
tracker.notify();
134-
135-
fs_extra::dir::TransitProcessResult::ContinueOrAbort
136112
});
137113

138114
// remove old configuration, rename icon path.

crates/bridge/src/message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use std::{
2-
collections::BTreeMap, ffi::OsString, hash::Hash, path::{Path, PathBuf}, sync::{Arc, atomic::AtomicU8}
2+
collections::BTreeMap, ffi::OsString, path::{Path, PathBuf}, sync::{Arc, atomic::AtomicU8}
33
};
44

55
use schema::{

crates/frontend/src/pages/instance/quickplay_subpage.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ impl ListDelegate for ServersListDelegate {
303303
fn render_item(
304304
&mut self,
305305
ix: IndexPath,
306-
window: &mut Window,
306+
_window: &mut Window,
307307
cx: &mut Context<ListState<Self>>,
308308
) -> Option<Self::Item> {
309309
let interface_config = InterfaceConfig::get(cx);

crates/schema/src/curseforge.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ use std::sync::Arc;
33
use serde::{Deserialize, Serialize};
44
use ustr::Ustr;
55

6+
use crate::loader::Loader;
7+
68
pub const CURSEFORGE_SEARCH_URL: &str = "https://api.curseforge.com/v1/mods/search";
79
pub const MINECRAFT_GAME_ID: u32 = 432;
810

@@ -263,6 +265,25 @@ pub struct CurseforgeModpackMinecraft {
263265
pub recommended_ram: Option<u32>,
264266
}
265267

268+
impl CurseforgeModpackMinecraft {
269+
pub fn get_loader(&self) -> Option<Loader> {
270+
self.mod_loaders.iter()
271+
.find(|loader| loader.primary)
272+
.or_else(|| self.mod_loaders.first())
273+
.and_then(|loader| {
274+
if loader.id.starts_with("forge-") {
275+
Some(Loader::Forge)
276+
} else if loader.id.starts_with("neoforge-") {
277+
Some(Loader::NeoForge)
278+
} else if loader.id.starts_with("fabric-") {
279+
Some(Loader::Fabric)
280+
} else {
281+
None
282+
}
283+
})
284+
}
285+
}
286+
266287
#[derive(Deserialize, Debug)]
267288
pub struct CurseforgeModpackModLoader {
268289
pub id: Arc<str>,

0 commit comments

Comments
 (0)