Skip to content

Commit 8a1dee4

Browse files
committed
Update action displayed in notifications
1 parent bfc1077 commit 8a1dee4

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/notifications/CustomizeNotificationsUi.kt

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,32 @@ package software.aws.toolkits.jetbrains.core.notifications
55

66
import com.intellij.icons.AllIcons
77
import com.intellij.ide.BrowserUtil
8+
import com.intellij.ide.plugins.IdeaPluginDescriptor
9+
import com.intellij.ide.plugins.PluginManagerCore
10+
import com.intellij.notification.NotificationAction
811
import com.intellij.openapi.actionSystem.AnAction
912
import com.intellij.openapi.actionSystem.AnActionEvent
13+
import com.intellij.openapi.application.ApplicationManager
14+
import com.intellij.openapi.options.ShowSettingsUtil
15+
import com.intellij.openapi.progress.ProgressIndicator
1016
import com.intellij.openapi.project.Project
1117
import com.intellij.openapi.ui.Messages
1218
import com.intellij.ui.EditorNotificationPanel
19+
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread
20+
import software.aws.toolkits.core.utils.debug
21+
import software.aws.toolkits.core.utils.error
22+
import software.aws.toolkits.core.utils.getLogger
23+
import software.aws.toolkits.jetbrains.AwsPlugin
1324
import software.aws.toolkits.jetbrains.AwsToolkit
25+
import software.aws.toolkits.jetbrains.core.plugin.PluginUpdateManager.Companion.ID_ACTION_AUTO_UPDATE_SETTINGS
26+
import software.aws.toolkits.jetbrains.core.plugin.PluginUpdateManager.Companion.LOG
27+
import software.aws.toolkits.jetbrains.core.plugin.PluginUpdateManager.Companion.SOURCE_AUTO_UPDATE_FINISH_NOTIFY
28+
import software.aws.toolkits.jetbrains.core.plugin.PluginUpdateManager.Companion.updatePlugin
29+
import software.aws.toolkits.jetbrains.settings.AwsSettingsSharedConfigurable
30+
import software.aws.toolkits.jetbrains.utils.notifyInfo
1431
import software.aws.toolkits.resources.AwsCoreBundle
32+
import software.aws.toolkits.telemetry.Component
33+
import software.aws.toolkits.telemetry.ToolkitTelemetry
1534

1635
fun checkSeverity(notificationSeverity: String): NotificationSeverity = when (notificationSeverity) {
1736
"Critical" -> NotificationSeverity.CRITICAL
@@ -37,7 +56,7 @@ object NotificationManager {
3756
if (action.type == "UpdateExtension") {
3857
add(
3958
NotificationActionList(AwsCoreBundle.message("notification.update")) {
40-
// TODO: Add update logic
59+
4160
}
4261
)
4362
}
@@ -96,6 +115,42 @@ object NotificationManager {
96115

97116
return panel
98117
}
118+
119+
@RequiresBackgroundThread
120+
fun updatePlugins(progressIndicator: ProgressIndicator, plugin: AwsPlugin) {
121+
val pluginInfo = AwsToolkit.PLUGINS_INFO[plugin] ?: return
122+
val pluginDescriptor = pluginInfo.descriptor as? IdeaPluginDescriptor ?: return
123+
val pluginName = pluginInfo.name
124+
try {
125+
if (!PluginManagerCore.isPluginInstalled(pluginDescriptor.pluginId)) {
126+
// LOG.debug { "$pluginName is not detected as installed, not performing auto-update" }
127+
return
128+
}
129+
130+
if (!updatePlugin(pluginDescriptor, progressIndicator)) return
131+
132+
} catch (e: Exception) {
133+
getLogger<NotificationManager>().debug(e) { "Unable to update $pluginName" }
134+
135+
return
136+
} catch (e: Error) {
137+
getLogger<NotificationManager>().error { "Unable to update $pluginName" }
138+
return
139+
}
140+
141+
if (plugin == AwsPlugin.CORE) return
142+
notifyInfo(
143+
title = AwsCoreBundle.message("aws.notification.auto_update.title", pluginName),
144+
content = AwsCoreBundle.message("aws.settings.auto_update.notification.message"),
145+
project = null,
146+
notificationActions = listOf(
147+
NotificationAction.createSimpleExpiring(AwsCoreBundle.message("aws.settings.auto_update.notification.yes")) {
148+
ApplicationManager.getApplication().restart()
149+
},
150+
NotificationAction.createSimpleExpiring(AwsCoreBundle.message("aws.settings.auto_update.notification.no")) {}
151+
)
152+
)
153+
}
99154
}
100155

101156
data class NotificationActionList(

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/core/plugin/PluginUpdateManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ class PluginUpdateManager : Disposable {
200200
// TODO: Optimize this to only search the result for AWS plugins
201201
fun getUpdateInfo(): Collection<PluginDownloader> = UpdateChecker.getPluginUpdates() ?: emptyList()
202202

203-
internal fun updatePlugin(pluginDescriptor: IdeaPluginDescriptor, progressIndicator: ProgressIndicator): Boolean {
203+
fun updatePlugin(pluginDescriptor: IdeaPluginDescriptor, progressIndicator: ProgressIndicator): Boolean {
204204
val pluginName = pluginDescriptor.name
205205

206206
// wasUpdatedWithRestart means that, it was an update and it needs to restart to apply

0 commit comments

Comments
 (0)