@@ -27,7 +27,6 @@ import net.fabricmc.loader.api.SemanticVersion
2727import net.fabricmc.loader.api.metadata.ModMetadata
2828import net.fabricmc.loader.util.version.VersionDeserializer
2929import net.minecraft.text.TranslatableText
30- import net.minecraft.util.Util
3130import org.apache.commons.io.FileUtils
3231import org.apache.logging.log4j.LogManager
3332import xyz.deathsgun.modmanager.ModManager
@@ -52,9 +51,8 @@ import java.nio.file.Files
5251import java.nio.file.Path
5352import java.security.MessageDigest
5453import java.time.Duration
55- import java.util.concurrent.TimeUnit
5654import java.util.zip.ZipFile
57- import kotlin.io.path.name
55+ import kotlin.io.path.absolutePathString
5856
5957
6058class UpdateManager {
@@ -87,6 +85,7 @@ class UpdateManager {
8785 }
8886
8987 private fun checkForUpdatesManually (metadata : ModMetadata ) {
88+ ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
9089 val defaultProvider = ModManager .modManager.config.defaultProvider
9190 val provider = ModManager .modManager.provider[defaultProvider]
9291 if (provider == null ) {
@@ -159,6 +158,7 @@ class UpdateManager {
159158 }
160159
161160 private fun checkForUpdates (metadata : ModMetadata , ids : Map <String , String >) {
161+ ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
162162 var provider: IModUpdateProvider ? = null
163163 var id: String? = null
164164 for ((provId, modId) in ids) {
@@ -293,7 +293,7 @@ class UpdateManager {
293293 ? : return ModUpdateResult .Error (TranslatableText (" modmanager.error.jar.notFound" ))
294294 logger.info(" Updating {}" , update.mod.name)
295295 try {
296- oldJar.forceDelete ()
296+ oldJar.delete ()
297297 } catch (e: Exception ) {
298298 return ModUpdateResult .Error (TranslatableText (" modmanager.error.jar.failedDelete" , e))
299299 }
@@ -337,7 +337,9 @@ class UpdateManager {
337337 val meta = json.decodeFromString<FabricMetadata >(data)
338338 jarFile.close()
339339 if (meta.id == mod.id || meta.id == mod.slug || meta.id == mod.slug.replace(" -" , " " ) ||
340- meta.custom.modmanager[ModManager .modManager.config.defaultProvider] == mod.id
340+ meta.custom.modmanager[ModManager .modManager.config.defaultProvider] == mod.id ||
341+ meta.id.replace(" _" , " -" ) == mod.id ||
342+ meta.name.equals(mod.name, true )
341343 ) {
342344 return jar.toPath()
343345 }
@@ -360,22 +362,21 @@ class UpdateManager {
360362 return ids
361363 }
362364
363- private fun getCheckableMods (): List <ModMetadata > {
365+ fun getCheckableMods (): List <ModMetadata > {
364366 return FabricLoader .getInstance().allMods.map { it.metadata }.filter {
365367 ! it.id.startsWith(" fabric" ) &&
366368 ! CustomValueUtil .getBoolean(" fabric-loom:generated" , it).orElse(false ) &&
367369 ! blockedIds.contains(it.id)
368370 }
369371 }
370372
371- private fun Path.forceDelete () {
372- if ( Util .getOperatingSystem() == Util . OperatingSystem . WINDOWS ) {
373- // Under windows this file gets locked can't be deleted by Java
374- ProcessBuilder ( " cmd " , " /c " , " del /f ${ this .name} " ).directory( this .parent.toFile()).start()
375- .waitFor( 200 , TimeUnit . MILLISECONDS )
376- return
373+ private fun Path.delete () {
374+ try {
375+ Files .delete( this )
376+ } catch (e : Exception ) {
377+ logger.info( " Error while deleting {} trying on exit again " , this .absolutePathString() )
378+ this .toFile().deleteOnExit()
377379 }
378- Files .deleteIfExists(this )
379380 }
380381
381382 private fun Path.sha512 (): String {
@@ -393,7 +394,7 @@ class UpdateManager {
393394 val jar = findJarByMod(mod)
394395 ? : return ModRemoveResult .Error (TranslatableText (" modmanager.error.jar.notFound" ))
395396 return try {
396- jar.forceDelete ()
397+ jar.delete ()
397398 ModManager .modManager.setModState(mod.slug, mod.id, ModState .DOWNLOADABLE )
398399 ModRemoveResult .Success
399400 } catch (e: Exception ) {
0 commit comments