diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt index 1902b79340..ff5f04e7eb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionLoader.kt @@ -24,6 +24,7 @@ import mihon.domain.extension.model.ContentWarning import mihon.domain.extension.model.ExtensionStore import tachiyomi.core.common.util.system.logcat import java.io.File +import java.io.IOException /** * Class that handles the loading of the extensions. Supports two kinds of extensions: @@ -80,12 +81,12 @@ internal object ExtensionLoader { } val target = File(getPrivateExtensionDir(context), "${extension.packageName}.$PRIVATE_EXTENSION_EXTENSION") + val staged = File(target.parentFile, "${target.name}.part") try { - target.delete() - file.copyAndSetReadOnlyTo(target, overwrite = true) - } catch (e: Exception) { - target.delete() - throw e + file.copyAndSetReadOnlyTo(staged, overwrite = true) + if (!staged.renameTo(target)) throw IOException("Unable to replace ${target.name}") + } finally { + staged.delete() } if (currentExtension != null) { ExtensionInstallReceiver.notifyReplaced(context, extension.packageName)