Reformat: KotlinPluginUpdater.kt
This commit is contained in:
@@ -39,17 +39,30 @@ sealed class PluginUpdateStatus {
|
||||
|
||||
object LatestVersionInstalled : PluginUpdateStatus()
|
||||
|
||||
class Update(val pluginDescriptor: IdeaPluginDescriptor,
|
||||
val hostToInstallFrom: String?) : PluginUpdateStatus()
|
||||
class Update(
|
||||
val pluginDescriptor: IdeaPluginDescriptor,
|
||||
val hostToInstallFrom: String?
|
||||
) : PluginUpdateStatus()
|
||||
|
||||
class CheckFailed(val message: String, val detail: String? = null) : PluginUpdateStatus()
|
||||
|
||||
fun mergeWith(other: PluginUpdateStatus): PluginUpdateStatus {
|
||||
if (other is Update && (this is LatestVersionInstalled ||
|
||||
(this is Update && VersionComparatorUtil.compare(other.pluginDescriptor.version,
|
||||
pluginDescriptor.version) > 0))) {
|
||||
return other
|
||||
if (other is Update) {
|
||||
when (this) {
|
||||
is LatestVersionInstalled -> {
|
||||
return other
|
||||
}
|
||||
is Update -> {
|
||||
if (VersionComparatorUtil.compare(other.pluginDescriptor.version, pluginDescriptor.version) > 0) {
|
||||
return other
|
||||
}
|
||||
}
|
||||
is PluginUpdateStatus.CheckFailed -> {
|
||||
// proceed to return this
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
@@ -63,15 +76,14 @@ sealed class PluginUpdateStatus {
|
||||
}
|
||||
|
||||
class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Disposable {
|
||||
private val INITIAL_UPDATE_DELAY = 2000L
|
||||
private val CACHED_REQUEST_DELAY = TimeUnit.DAYS.toMillis(1)
|
||||
|
||||
private var updateDelay = INITIAL_UPDATE_DELAY
|
||||
private val alarm = Alarm(Alarm.ThreadToUse.POOLED_THREAD, this)
|
||||
private val notificationGroup = NotificationGroup("Kotlin plugin updates", NotificationDisplayType.STICKY_BALLOON, true)
|
||||
private val notificationGroup = NotificationGroup("Kotlin plugin updates", NotificationDisplayType.STICKY_BALLOON, true)
|
||||
|
||||
@Volatile private var checkQueued = false
|
||||
@Volatile private var lastUpdateStatus: PluginUpdateStatus? = null
|
||||
@Volatile
|
||||
private var checkQueued = false
|
||||
@Volatile
|
||||
private var lastUpdateStatus: PluginUpdateStatus? = null
|
||||
|
||||
fun kotlinFileEdited(file: VirtualFile) {
|
||||
if (!file.isInLocalFileSystem) return
|
||||
@@ -122,8 +134,7 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
var updateStatus: PluginUpdateStatus
|
||||
if (KotlinPluginUtil.isSnapshotVersion()) {
|
||||
updateStatus = PluginUpdateStatus.LatestVersionInstalled
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
try {
|
||||
updateStatus = checkUpdatesInMainRepository()
|
||||
|
||||
@@ -131,8 +142,7 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
val customUpdateStatus = checkUpdatesInCustomRepository(host)
|
||||
updateStatus = updateStatus.mergeWith(customUpdateStatus)
|
||||
}
|
||||
}
|
||||
catch(e: Exception) {
|
||||
} catch (e: Exception) {
|
||||
updateStatus = PluginUpdateStatus.fromException("Kotlin plugin update check failed", e)
|
||||
}
|
||||
}
|
||||
@@ -144,8 +154,8 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
recordSuccessfulUpdateCheck()
|
||||
}
|
||||
ApplicationManager.getApplication().invokeLater({
|
||||
callback(updateStatus)
|
||||
}, ModalityState.any())
|
||||
callback(updateStatus)
|
||||
}, ModalityState.any())
|
||||
}
|
||||
|
||||
private fun initPluginDescriptor(newVersion: String): IdeaPluginDescriptor {
|
||||
@@ -163,7 +173,8 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
val os = URLEncoder.encode(SystemInfo.OS_NAME + " " + SystemInfo.OS_VERSION, CharsetToolkit.UTF8)
|
||||
val uid = PermanentInstallationID.get()
|
||||
val pluginId = KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString
|
||||
val url = "https://plugins.jetbrains.com/plugins/list?pluginId=$pluginId&build=$buildNumber&pluginVersion=$currentVersion&os=$os&uuid=$uid"
|
||||
val url =
|
||||
"https://plugins.jetbrains.com/plugins/list?pluginId=$pluginId&build=$buildNumber&pluginVersion=$currentVersion&os=$os&uuid=$uid"
|
||||
val responseDoc = HttpRequests.request(url).connect {
|
||||
JDOMUtil.load(it.inputStream)
|
||||
}
|
||||
@@ -176,21 +187,24 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
}
|
||||
val newVersion = responseDoc.getChild("category")?.getChild("idea-plugin")?.getChild("version")?.text
|
||||
if (newVersion == null) {
|
||||
return PluginUpdateStatus.CheckFailed("Couldn't find plugin version in repository response", JDOMUtil.writeElement(responseDoc, "\n"))
|
||||
return PluginUpdateStatus.CheckFailed(
|
||||
"Couldn't find plugin version in repository response",
|
||||
JDOMUtil.writeElement(responseDoc, "\n")
|
||||
)
|
||||
}
|
||||
val pluginDescriptor = initPluginDescriptor(newVersion)
|
||||
return updateIfNotLatest(pluginDescriptor, null)
|
||||
return updateIfNotLatest(pluginDescriptor, null)
|
||||
}
|
||||
|
||||
private fun checkUpdatesInCustomRepository(host: String): PluginUpdateStatus {
|
||||
val plugins = try {
|
||||
RepositoryHelper.loadPlugins(host, null)
|
||||
}
|
||||
catch(e: Exception) {
|
||||
} catch (e: Exception) {
|
||||
return PluginUpdateStatus.fromException("Checking custom plugin repository $host failed", e)
|
||||
}
|
||||
|
||||
val kotlinPlugin = plugins.find { it.pluginId == KotlinPluginUtil.KOTLIN_PLUGIN_ID } ?: return PluginUpdateStatus.LatestVersionInstalled
|
||||
val kotlinPlugin =
|
||||
plugins.find { it.pluginId == KotlinPluginUtil.KOTLIN_PLUGIN_ID } ?: return PluginUpdateStatus.LatestVersionInstalled
|
||||
return updateIfNotLatest(kotlinPlugin, host)
|
||||
}
|
||||
|
||||
@@ -209,9 +223,10 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
|
||||
private fun notifyPluginUpdateAvailable(update: PluginUpdateStatus.Update) {
|
||||
val notification = notificationGroup.createNotification(
|
||||
"Kotlin",
|
||||
"A new version ${update.pluginDescriptor.version} of the Kotlin plugin is available. <b><a href=\"#\">Install</a></b>",
|
||||
NotificationType.INFORMATION) { notification, event ->
|
||||
"Kotlin",
|
||||
"A new version ${update.pluginDescriptor.version} of the Kotlin plugin is available. <b><a href=\"#\">Install</a></b>",
|
||||
NotificationType.INFORMATION
|
||||
) { notification, _ ->
|
||||
notification.expire()
|
||||
installPluginUpdate(update) {
|
||||
notifyPluginUpdateAvailable(update)
|
||||
@@ -289,7 +304,10 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val PROPERTY_NAME = "kotlin.lastUpdateCheck"
|
||||
private const val INITIAL_UPDATE_DELAY = 2000L
|
||||
private val CACHED_REQUEST_DELAY = TimeUnit.DAYS.toMillis(1)
|
||||
|
||||
private const val PROPERTY_NAME = "kotlin.lastUpdateCheck"
|
||||
private val LOG = Logger.getInstance(KotlinPluginUpdater::class.java)
|
||||
|
||||
fun getInstance(): KotlinPluginUpdater = ServiceManager.getService(KotlinPluginUpdater::class.java)
|
||||
|
||||
Reference in New Issue
Block a user