Fix Modrinth plugin download to work with unknown server types
This commit is contained in:
parent
2b8821bc77
commit
29f06b197e
@ -221,19 +221,44 @@ impl ModrinthCrawler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn download_plugin_with_server_type(&self, plugin_id: &str, version_number_str: &str, destination: &Path, server_type: Option<&ServerType>) -> Result<String, String> {
|
pub async fn download_plugin_with_server_type(&self, plugin_id: &str, version_number_str: &str, destination: &Path, server_type: Option<&ServerType>) -> Result<String, String> {
|
||||||
|
// First try to get compatible versions for the server type
|
||||||
let versions = match self.get_compatible_versions(plugin_id, server_type).await {
|
let versions = match self.get_compatible_versions(plugin_id, server_type).await {
|
||||||
Ok(v) => v,
|
Ok(v) => v,
|
||||||
Err(e) => return Err(format!("Failed to get Modrinth versions for download: {}", e)),
|
Err(e) => return Err(format!("Failed to get Modrinth versions for download: {}", e)),
|
||||||
};
|
};
|
||||||
|
|
||||||
let target_version = versions.iter().find(|v| v.version_number == version_number_str);
|
// Try to find a version that matches the requested version number among compatible versions
|
||||||
|
let mut version_to_download = versions.into_iter().find(|v| v.version_number == version_number_str);
|
||||||
|
|
||||||
let version_to_download = match target_version {
|
// If no compatible version found, but we have a server type filter (meaning we actually filtered)
|
||||||
|
if version_to_download.is_none() && server_type.is_some() {
|
||||||
|
println!("No compatible version '{}' found for server type {:?}, attempting to find version without server compatibility check",
|
||||||
|
version_number_str, server_type);
|
||||||
|
|
||||||
|
// Try to get all versions without server type filtering
|
||||||
|
match self.get_project_versions_internal(plugin_id).await {
|
||||||
|
Ok(all_versions) => {
|
||||||
|
// Look for the specific version number in all versions
|
||||||
|
version_to_download = all_versions.into_iter().find(|v| v.version_number == version_number_str);
|
||||||
|
|
||||||
|
if version_to_download.is_some() {
|
||||||
|
println!("Found version '{}' without server compatibility check, proceeding with download", version_number_str);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
println!("Error getting all versions: {}", e);
|
||||||
|
// Continue with empty versions list, which will return an error below
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we still don't have a target version, return an error
|
||||||
|
let version = match version_to_download {
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
None => return Err(format!("Version '{}' not found or not compatible for plugin {}", version_number_str, plugin_id)),
|
None => return Err(format!("Version '{}' not found or not compatible for plugin {}", version_number_str, plugin_id)),
|
||||||
};
|
};
|
||||||
|
|
||||||
let primary_file = match version_to_download.files.iter().find(|f| f.primary) {
|
let primary_file = match version.files.iter().find(|f| f.primary) {
|
||||||
Some(f) => f,
|
Some(f) => f,
|
||||||
None => return Err(format!("No primary file found for version '{}' of plugin {}", version_number_str, plugin_id)),
|
None => return Err(format!("No primary file found for version '{}' of plugin {}", version_number_str, plugin_id)),
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user