@@ -5,13 +5,32 @@ package software.aws.toolkits.jetbrains.core.notifications
55
66import com.intellij.icons.AllIcons
77import com.intellij.ide.BrowserUtil
8+ import com.intellij.ide.plugins.IdeaPluginDescriptor
9+ import com.intellij.ide.plugins.PluginManagerCore
10+ import com.intellij.notification.NotificationAction
811import com.intellij.openapi.actionSystem.AnAction
912import 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
1016import com.intellij.openapi.project.Project
1117import com.intellij.openapi.ui.Messages
1218import 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
1324import 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
1431import software.aws.toolkits.resources.AwsCoreBundle
32+ import software.aws.toolkits.telemetry.Component
33+ import software.aws.toolkits.telemetry.ToolkitTelemetry
1534
1635fun 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
101156data class NotificationActionList (
0 commit comments