Skip to content

Commit 7484cdb

Browse files
Refactor add::github
1 parent cb6b78d commit 7484cdb

1 file changed

Lines changed: 41 additions & 16 deletions

File tree

src/add/github.rs

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,37 @@
1+
use octocrab::models::{repos::Release, Repository};
2+
13
use crate::{
24
config::structs::{Mod, ModIdentifier, ModIdentifierRef, Profile},
35
upgrade::mod_downloadable,
46
};
57

8+
fn project_exist(profile: &Profile, repo: &Repository, repo_name: &(String, String)) -> bool {
9+
profile.mods.iter().any(|mod_| {
10+
mod_.name.to_lowercase() == repo.name.to_lowercase()
11+
|| ModIdentifierRef::GitHubRepository(&repo_name) == mod_.identifier.as_ref()
12+
})
13+
}
14+
15+
fn contains_jar_asset(releases: &[Release]) -> bool {
16+
releases
17+
.iter()
18+
.flat_map(|r| &r.assets)
19+
.any(|a| a.name.ends_with(".jar"))
20+
}
21+
22+
async fn is_project_compatible(
23+
profile: &Profile,
24+
releases: &[Release],
25+
check_game_version: bool,
26+
) -> super::Result<bool> {
27+
Ok(mod_downloadable::get_latest_compatible_asset(
28+
&releases,
29+
profile.get_version(check_game_version),
30+
profile.get_loader(check_game_version),
31+
)
32+
.is_some())
33+
}
34+
635
/// Check if the repo of `repo_handler` exists, releases mods, and is compatible with `profile`.
736
/// If so, add it to the `profile`.
837
///
@@ -15,35 +44,31 @@ pub async fn github(
1544
check_mod_loader: bool,
1645
) -> super::Result<String> {
1746
let repo = repo_handler.get().await?;
18-
let repo_name = (repo.owner.clone().unwrap().login, repo.name.clone());
47+
let repo_name = (
48+
repo.owner
49+
.clone()
50+
.expect("Owner name not found in git repo")
51+
.login,
52+
repo.name.clone(),
53+
);
1954

2055
// Check if project has already been added
21-
if profile.mods.iter().any(|mod_| {
22-
mod_.name.to_lowercase() == repo.name.to_lowercase()
23-
|| ModIdentifierRef::GitHubRepository(&repo_name) == mod_.identifier.as_ref()
24-
}) {
56+
if project_exist(profile, &repo, &repo_name) {
2557
return Err(super::Error::AlreadyAdded);
2658
}
2759

2860
if perform_checks {
2961
let releases = repo_handler.releases().list().send().await?.items;
3062

3163
// Check if jar files are released
32-
if !releases
33-
.iter()
34-
.flat_map(|r| &r.assets)
35-
.any(|a| a.name.ends_with(".jar"))
36-
{
64+
if !contains_jar_asset(&releases) {
3765
return Err(super::Error::NotAMod);
3866
}
3967

4068
// Check if the repo is compatible
41-
mod_downloadable::get_latest_compatible_asset(
42-
&releases,
43-
profile.get_version(check_game_version),
44-
profile.get_loader(check_game_version),
45-
)
46-
.ok_or(super::Error::Incompatible)?;
69+
if !is_project_compatible(profile, &releases, check_game_version).await? {
70+
return Err(super::Error::Incompatible);
71+
}
4772
}
4873

4974
// Add it to the profile

0 commit comments

Comments
 (0)