@@ -27,7 +27,6 @@ import net.fabricmc.loader.api.SemanticVersion
27
27
import net.fabricmc.loader.api.metadata.ModMetadata
28
28
import net.fabricmc.loader.util.version.VersionDeserializer
29
29
import net.minecraft.text.TranslatableText
30
- import net.minecraft.util.Util
31
30
import org.apache.commons.io.FileUtils
32
31
import org.apache.logging.log4j.LogManager
33
32
import xyz.deathsgun.modmanager.ModManager
@@ -52,9 +51,8 @@ import java.nio.file.Files
52
51
import java.nio.file.Path
53
52
import java.security.MessageDigest
54
53
import java.time.Duration
55
- import java.util.concurrent.TimeUnit
56
54
import java.util.zip.ZipFile
57
- import kotlin.io.path.name
55
+ import kotlin.io.path.absolutePathString
58
56
59
57
60
58
class UpdateManager {
@@ -87,6 +85,7 @@ class UpdateManager {
87
85
}
88
86
89
87
private fun checkForUpdatesManually (metadata : ModMetadata ) {
88
+ ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
90
89
val defaultProvider = ModManager .modManager.config.defaultProvider
91
90
val provider = ModManager .modManager.provider[defaultProvider]
92
91
if (provider == null ) {
@@ -159,6 +158,7 @@ class UpdateManager {
159
158
}
160
159
161
160
private fun checkForUpdates (metadata : ModMetadata , ids : Map <String , String >) {
161
+ ModManager .modManager.setModState(metadata.id, metadata.id, ModState .INSTALLED )
162
162
var provider: IModUpdateProvider ? = null
163
163
var id: String? = null
164
164
for ((provId, modId) in ids) {
@@ -293,7 +293,7 @@ class UpdateManager {
293
293
? : return ModUpdateResult .Error (TranslatableText (" modmanager.error.jar.notFound" ))
294
294
logger.info(" Updating {}" , update.mod.name)
295
295
try {
296
- oldJar.forceDelete ()
296
+ oldJar.delete ()
297
297
} catch (e: Exception ) {
298
298
return ModUpdateResult .Error (TranslatableText (" modmanager.error.jar.failedDelete" , e))
299
299
}
@@ -337,7 +337,9 @@ class UpdateManager {
337
337
val meta = json.decodeFromString<FabricMetadata >(data)
338
338
jarFile.close()
339
339
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 )
341
343
) {
342
344
return jar.toPath()
343
345
}
@@ -360,22 +362,21 @@ class UpdateManager {
360
362
return ids
361
363
}
362
364
363
- private fun getCheckableMods (): List <ModMetadata > {
365
+ fun getCheckableMods (): List <ModMetadata > {
364
366
return FabricLoader .getInstance().allMods.map { it.metadata }.filter {
365
367
! it.id.startsWith(" fabric" ) &&
366
368
! CustomValueUtil .getBoolean(" fabric-loom:generated" , it).orElse(false ) &&
367
369
! blockedIds.contains(it.id)
368
370
}
369
371
}
370
372
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()
377
379
}
378
- Files .deleteIfExists(this )
379
380
}
380
381
381
382
private fun Path.sha512 (): String {
@@ -393,7 +394,7 @@ class UpdateManager {
393
394
val jar = findJarByMod(mod)
394
395
? : return ModRemoveResult .Error (TranslatableText (" modmanager.error.jar.notFound" ))
395
396
return try {
396
- jar.forceDelete ()
397
+ jar.delete ()
397
398
ModManager .modManager.setModState(mod.slug, mod.id, ModState .DOWNLOADABLE )
398
399
ModRemoveResult .Success
399
400
} catch (e: Exception ) {
0 commit comments