Skip to content

Commit 57fb2ef

Browse files
committed
rearranged call site
1 parent 368fd25 commit 57fb2ef

File tree

6 files changed

+65
-91
lines changed

6 files changed

+65
-91
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
2121
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
2222
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
2323
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenProviderListener
24-
import software.aws.toolkits.jetbrains.core.notifications.NotificationActionList
25-
import software.aws.toolkits.jetbrains.core.notifications.ShowCriticalNotificationBannerListener
24+
import software.aws.toolkits.jetbrains.core.notifications.ProcessNotificationsBase
2625
import software.aws.toolkits.jetbrains.core.webview.BrowserState
2726
import software.aws.toolkits.jetbrains.services.amazonq.QWebviewPanel
2827
import software.aws.toolkits.jetbrains.services.amazonq.RefreshQChatPanelButtonPressedListener
@@ -41,8 +40,15 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
4140
val mainPanel = BorderLayoutPanel()
4241
val qPanel = OuterAmazonQPanel.getInstance(project)
4342
val notificationPanel = NotificationPanel.getInstance(project)
43+
4444
mainPanel.addToTop(notificationPanel)
4545
mainPanel.add(qPanel)
46+
val notifListener = ProcessNotificationsBase.getInstance(project)
47+
notifListener.addListenerForNotification { title, message, followupActions ->
48+
runInEdt {
49+
notificationPanel.updateNotificationPanel(title, message, followupActions)
50+
}
51+
}
4652

4753
if (toolWindow is ToolWindowEx) {
4854
val actionManager = ActionManager.getInstance()
@@ -70,17 +76,6 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
7076
}
7177
)
7278

73-
project.messageBus.connect().subscribe(
74-
ShowCriticalNotificationBannerListener.TOPIC,
75-
object : ShowCriticalNotificationBannerListener {
76-
override fun onReceiveEmergencyNotification(title: String, message: String, notificationActionList: List<NotificationActionList>) {
77-
runInEdt {
78-
notificationPanel.updateNotificationPanel(title, message, notificationActionList)
79-
}
80-
}
81-
}
82-
)
83-
8479
project.messageBus.connect().subscribe(
8580
BearerTokenProviderListener.TOPIC,
8681
object : BearerTokenProviderListener {

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

Lines changed: 0 additions & 41 deletions
This file was deleted.

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,21 @@ import com.intellij.openapi.util.registry.Registry
1010
class DummyNotificationAction : AnAction("Show notif") {
1111
override fun actionPerformed(e: AnActionEvent) {
1212
if (!Registry.`is`("aws.toolkit.developerMode")) return
13-
ShowCriticalNotificationBannerListener.showBanner(
13+
// ShowCriticalNotificationBannerListener.showBanner(
14+
// "hello hello",
15+
// "This is a bug",
16+
// NotificationManager.createActions(emptyList(), "This is a bug", "hello hello")
17+
// )
18+
val a = e.project?.let { ProcessNotificationsBase.getInstance(it) } ?: return
19+
a.notifyListenerForNotification(
1420
"hello hello",
1521
"This is a bug",
1622
NotificationManager.createActions(emptyList(), "This is a bug", "hello hello")
23+
1724
)
1825
}
26+
27+
override fun update(e: AnActionEvent) {
28+
e.presentation.isEnabledAndVisible = Registry.`is`("aws.toolkit.developerMode")
29+
}
1930
}

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

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@
33

44
package software.aws.toolkits.jetbrains.core.notifications
55

6+
import com.intellij.notification.NotificationType
7+
import com.intellij.openapi.actionSystem.AnAction
8+
import com.intellij.openapi.components.Service
9+
import com.intellij.openapi.components.service
610
import com.intellij.openapi.project.Project
11+
import software.aws.toolkits.jetbrains.utils.notifyStickyWithData
712

13+
@Service(Service.Level.PROJECT)
814
class ProcessNotificationsBase {
15+
private val notifListener = mutableListOf<NotifListener>()
916
init {
1017
// TODO: install a listener for the polling class
1118
}
@@ -21,14 +28,41 @@ class ProcessNotificationsBase {
2128

2229
fun processNotification(project: Project, notificationData: NotificationData) {
2330
val shouldShow = RulesEngine.displayNotification(project, notificationData)
24-
if(shouldShow) {
25-
// TODO: notifies listeners
31+
if (shouldShow) {
32+
val notificationContent = notificationData.content.locale
33+
val severity = notificationData.severity
34+
val followupActions = NotificationManager.createActions(notificationData.actions, notificationContent.description, notificationContent.title)
35+
showToast(
36+
notificationContent.title,
37+
notificationContent.description,
38+
NotificationManager.buildNotificationActions(followupActions),
39+
checkSeverity(severity),
40+
notificationData.id
41+
)
42+
if (severity == "Critical") {
43+
notifyListenerForNotification(notificationContent.title, notificationContent.description, followupActions)
44+
}
2645
}
2746
}
2847

29-
fun notifyListenerForNotification() {
48+
private fun showToast(title: String, message: String, action: List<AnAction>, notificationType: NotificationSeverity, notificationId: String) {
49+
val notifyType = when (notificationType) {
50+
NotificationSeverity.CRITICAL -> NotificationType.ERROR
51+
NotificationSeverity.WARNING -> NotificationType.WARNING
52+
NotificationSeverity.INFO -> NotificationType.INFORMATION
53+
}
54+
notifyStickyWithData(notifyType, title, message, null, action, notificationId)
3055
}
3156

32-
fun addListenerForNotification() {
57+
fun notifyListenerForNotification(title: String, description: String, followUpActions: List<NotificationActionList>) =
58+
notifListener.forEach { it(title, description, followUpActions) }
59+
60+
fun addListenerForNotification(newNotifListener: NotifListener) =
61+
notifListener.add(newNotifListener)
62+
63+
companion object {
64+
fun getInstance(project: Project): ProcessNotificationsBase = project.service()
3365
}
3466
}
67+
68+
typealias NotifListener = (title: String, message: String, followupActions: List<NotificationActionList>) -> Unit

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

Lines changed: 0 additions & 21 deletions
This file was deleted.

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/core/explorer/AwsToolkitExplorerFactory.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ import software.aws.toolkits.jetbrains.core.explorer.webview.OuterToolkitPanel
3737
import software.aws.toolkits.jetbrains.core.explorer.webview.ToolkitWebviewPanel
3838
import software.aws.toolkits.jetbrains.core.explorer.webview.shouldPromptToolkitReauth
3939
import software.aws.toolkits.jetbrains.core.help.HelpIds
40-
import software.aws.toolkits.jetbrains.core.notifications.NotificationActionList
41-
import software.aws.toolkits.jetbrains.core.notifications.ShowCriticalNotificationBannerListener
40+
import software.aws.toolkits.jetbrains.core.notifications.ProcessNotificationsBase
4241
import software.aws.toolkits.jetbrains.core.webview.BrowserState
4342
import software.aws.toolkits.jetbrains.utils.actions.OpenBrowserAction
4443
import software.aws.toolkits.jetbrains.utils.isTookitConnected
@@ -55,6 +54,12 @@ class AwsToolkitExplorerFactory : ToolWindowFactory, DumbAware {
5554
val mainPanel = BorderLayoutPanel()
5655
mainPanel.addToTop(notificationPanel)
5756
mainPanel.add(toolkitPanel)
57+
val notifListener = ProcessNotificationsBase.getInstance(project)
58+
notifListener.addListenerForNotification { title, message, followupActions ->
59+
runInEdt {
60+
notificationPanel.updateNotificationPanel(title, message, followupActions)
61+
}
62+
}
5863
toolWindow.helpId = HelpIds.EXPLORER_WINDOW.id
5964

6065
if (toolWindow is ToolWindowEx) {
@@ -150,15 +155,6 @@ class AwsToolkitExplorerFactory : ToolWindowFactory, DumbAware {
150155
}
151156
}
152157
)
153-
154-
project.messageBus.connect().subscribe(
155-
ShowCriticalNotificationBannerListener.TOPIC,
156-
object : ShowCriticalNotificationBannerListener {
157-
override fun onReceiveEmergencyNotification(title: String, message: String, notificationActionList: List<NotificationActionList>) {
158-
notificationPanel.updateNotificationPanel(title, message, notificationActionList)
159-
}
160-
}
161-
)
162158
}
163159

164160
override fun init(toolWindow: ToolWindow) {

0 commit comments

Comments
 (0)