Skip to content
This repository was archived by the owner on Dec 30, 2022. It is now read-only.

Commit f32da99

Browse files
authored
Merge pull request #112 from DeathsGun/bugs/108
Improve update checking
2 parents 809a7fa + 1c6a3d5 commit f32da99

File tree

6 files changed

+45
-27
lines changed

6 files changed

+45
-27
lines changed

src/main/java/xyz/deathsgun/modmanager/mixin/ModsScreenMixin.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,18 @@ public void onInit(CallbackInfo ci) {
7474
}));
7575
this.hideButton = this.addDrawableChild(new TexturedButton(width - 24 - 22, paneY, 20, 20, 0,
7676
0, MODMANAGER_HIDE_BUTTON, 32, 64, button -> {
77-
if (ModManager.modManager.config.getHidden().contains(selected.getMod().getId())) {
78-
ModManager.modManager.config.getHidden().remove(selected.getMod().getId());
77+
if (ModManager.modManager.getConfig().getHidden().contains(selected.getMod().getId())) {
78+
ModManager.modManager.getConfig().getHidden().remove(selected.getMod().getId());
7979
} else {
80-
ModManager.modManager.config.getHidden().add(selected.getMod().getId());
80+
ModManager.modManager.getConfig().getHidden().add(selected.getMod().getId());
8181
}
82-
Config.Companion.saveConfig(ModManager.modManager.config);
82+
Config.Companion.saveConfig(ModManager.modManager.getConfig());
8383
}, ((button, matrices, mouseX, mouseY) -> {
8484
if (!hideButton.isJustHovered() || !button.isHovered()) {
8585
return;
8686
}
8787
TranslatableText text = new TranslatableText("modmanager.button.hide");
88-
if (ModManager.modManager.config.getHidden().contains(selected.getMod().getId())) {
88+
if (ModManager.modManager.getConfig().getHidden().contains(selected.getMod().getId())) {
8989
text = new TranslatableText("modmanager.button.show");
9090
}
9191
this.renderTooltip(matrices, text, mouseX, mouseY);
@@ -96,7 +96,7 @@ public void onInit(CallbackInfo ci) {
9696
public void onTick(CallbackInfo ci) {
9797
this.hideButton.visible = ModManager.modManager.getUpdate().getUpdates()
9898
.stream().anyMatch(it -> it.getFabricId().equalsIgnoreCase(selected.mod.getId()));
99-
if (ModManager.modManager.config.getHidden().contains(selected.getMod().getId())) {
99+
if (ModManager.modManager.getConfig().getHidden().contains(selected.getMod().getId())) {
100100
this.hideButton.setImage(MODMANAGER_SHOW_BUTTON);
101101
} else {
102102
this.hideButton.setImage(MODMANAGER_HIDE_BUTTON);

src/main/java/xyz/deathsgun/modmanager/mixin/TitleScreenMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected TitleScreenMixin(Text title) {
4141

4242
@Inject(at = @At("TAIL"), method = "render")
4343
public void onRender(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
44-
if (ModManager.shownUpdateNotification) {
44+
if (ModManager.shownUpdateNotification && ModManager.modManager.getUpdate().getFinishedUpdateCheck()) {
4545
return;
4646
}
4747
ModManager.shownUpdateNotification = true;

src/main/kotlin/xyz/deathsgun/modmanager/ModManager.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,19 @@ import xyz.deathsgun.modmanager.update.UpdateManager
3434
class ModManager : ClientModInitializer {
3535

3636
private val states = ArrayList<SavedState>()
37-
lateinit var config: Config
37+
var config: Config = Config.loadConfig()
3838
var changed: Boolean = false
3939
val update: UpdateManager = UpdateManager()
4040
val icons: IconCache = IconCache()
4141
val provider: HashMap<String, IModProvider> = HashMap()
4242
val updateProvider: HashMap<String, IModUpdateProvider> = HashMap()
4343

44+
init {
45+
val modrinth = Modrinth()
46+
provider[modrinth.getName().lowercase()] = modrinth
47+
updateProvider[modrinth.getName().lowercase()] = modrinth
48+
}
49+
4450
companion object {
4551
@JvmField
4652
var shownUpdateNotification: Boolean = false
@@ -62,13 +68,7 @@ class ModManager : ClientModInitializer {
6268

6369
@OptIn(DelicateCoroutinesApi::class)
6470
override fun onInitializeClient() {
65-
modManager = this
66-
config = Config.loadConfig()
67-
val modrinth = Modrinth()
68-
provider[modrinth.getName().lowercase()] = modrinth
69-
updateProvider[modrinth.getName().lowercase()] = modrinth
7071
GlobalScope.launch {
71-
update.checkUpdates()
7272
icons.cleanupCache()
7373
}
7474
}

src/main/kotlin/xyz/deathsgun/modmanager/PreLaunchHook.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package xyz.deathsgun.modmanager
1818

19+
import kotlinx.coroutines.DelicateCoroutinesApi
20+
import kotlinx.coroutines.GlobalScope
21+
import kotlinx.coroutines.launch
1922
import kotlinx.serialization.ExperimentalSerializationApi
2023
import kotlinx.serialization.decodeFromString
2124
import kotlinx.serialization.json.Json
@@ -30,7 +33,12 @@ class PreLaunchHook : PreLaunchEntrypoint {
3033

3134
private val logger = LogManager.getLogger("ModManager")
3235

36+
@OptIn(DelicateCoroutinesApi::class)
3337
override fun onPreLaunch() {
38+
GlobalScope.launch {
39+
ModManager.modManager = ModManager()
40+
ModManager.modManager.update.checkUpdates()
41+
}
3442
val filesToDelete = try {
3543
loadFiles()
3644
} catch (e: Exception) {

src/main/kotlin/xyz/deathsgun/modmanager/update/UpdateManager.kt

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@
1717
package xyz.deathsgun.modmanager.update
1818

1919
import com.terraformersmc.modmenu.util.mod.fabric.CustomValueUtil
20-
import kotlinx.coroutines.coroutineScope
21-
import kotlinx.coroutines.launch
20+
import kotlinx.coroutines.async
21+
import kotlinx.coroutines.awaitAll
22+
import kotlinx.coroutines.runBlocking
2223
import kotlinx.serialization.ExperimentalSerializationApi
2324
import kotlinx.serialization.decodeFromString
2425
import kotlinx.serialization.encodeToString
2526
import kotlinx.serialization.json.Json
2627
import net.fabricmc.loader.api.FabricLoader
2728
import net.fabricmc.loader.api.metadata.ModMetadata
29+
import net.minecraft.client.MinecraftClient
30+
import net.minecraft.client.toast.SystemToast
2831
import net.minecraft.text.TranslatableText
2932
import org.apache.commons.io.FileUtils
3033
import org.apache.logging.log4j.LogManager
@@ -58,31 +61,40 @@ class UpdateManager {
5861
private val blockedIds = arrayOf("java", "minecraft", "fabricloader")
5962
private val deletableMods = ArrayList<String>()
6063
val updates = ArrayList<Update>()
64+
var finishedUpdateCheck = false
6165

6266
init {
6367
Runtime.getRuntime().addShutdownHook(Thread(this::saveDeletableFiles))
6468
}
6569

6670
//region Update Checking
6771

68-
suspend fun checkUpdates() = coroutineScope {
72+
suspend fun checkUpdates() = runBlocking {
73+
logger.info("Checking for mod updates...")
6974
val mods = getCheckableMods()
70-
mods.forEach { metadata ->
71-
launch {
75+
mods.map { metadata ->
76+
async {
7277
if (findJarByModContainer(metadata) == null) {
73-
logger.info("Skipping update for {} because it has no jar in mods", metadata.id)
74-
return@launch
78+
logger.debug("Skipping update for {} because it has no jar in mods", metadata.id)
79+
return@async
7580
}
7681
val configIds = getIdBy(metadata)
7782
if (configIds == null) {
78-
logger.info("Searching for updates for {} using fallback method", metadata.id)
83+
logger.debug("Searching for updates for {} using fallback method", metadata.id)
7984
checkForUpdatesManually(metadata)
80-
return@launch
85+
return@async
8186
}
82-
logger.info("Searching for updates for {} using defined mod id", metadata.id)
87+
logger.debug("Searching for updates for {} using defined mod id", metadata.id)
8388
checkForUpdates(metadata, configIds)
8489
}
85-
}
90+
}.awaitAll()
91+
MinecraftClient.getInstance().toastManager.add(
92+
SystemToast(
93+
SystemToast.Type.TUTORIAL_HINT,
94+
TranslatableText("modmanager.toast.update.title"),
95+
TranslatableText("modmanager.toast.update.description", getWhitelistedUpdates().size)
96+
)
97+
)
8698
}
8799

88100
private fun checkForUpdatesManually(metadata: ModMetadata) {
@@ -126,7 +138,6 @@ class UpdateManager {
126138
logger.warn(
127139
"Error while searching for fallback id for mod {}: {}",
128140
metadata.id,
129-
queryResult.text.key,
130141
queryResult.cause
131142
)
132143
ModManager.modManager.setModState(metadata.id, metadata.id, State.INSTALLED)

src/main/resources/modmanager.mixins.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"mixins": [
77
],
88
"client": [
9-
"TitleScreenMixin",
109
"ModsScreenMixin"
1110
],
1211
"injectors": {

0 commit comments

Comments
 (0)