Skip to content

Commit

Permalink
feat(statusbar): add AutoDevStatusService and AutoDevStatus classes
Browse files Browse the repository at this point in the history
This commit adds the `AutoDevStatusService` and `AutoDevStatus` classes to the status bar feature.

The `AutoDevStatusService` class is responsible for managing the status of the auto development feature. It implements the `Disposable` interface and provides methods to get the current status and message.

The `AutoDevStatus` enum class defines the possible statuses of the auto development feature: Ready, InProgress, and Error. It also provides an `icon` property that returns the corresponding icon for each status.

These classes are necessary for displaying the status of the auto development feature in the status bar widget.
  • Loading branch information
phodal committed Jan 13, 2024
1 parent 8808e0d commit 54269bc
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/222/main/resources/META-INF/autodev-core.xml
Expand Up @@ -28,6 +28,7 @@
bundle="messages.AutoDevBundle" key="settings.autodev.coder"/>

<applicationService serviceImplementation="cc.unitmesh.devti.settings.AutoDevSettingsState"/>
<applicationService serviceImplementation="cc.unitmesh.devti.statusbar.AutoDevStatusService"/>

<statusBarWidgetFactory id="AIAssistant" implementation="cc.unitmesh.devti.statusbar.AutoDevStatusBarWidgetFactory"/>

Expand Down
1 change: 1 addition & 0 deletions src/233/main/resources/META-INF/autodev-core.xml
Expand Up @@ -28,6 +28,7 @@
bundle="messages.AutoDevBundle" key="settings.autodev.coder"/>

<applicationService serviceImplementation="cc.unitmesh.devti.settings.AutoDevSettingsState"/>
<applicationService serviceImplementation="cc.unitmesh.devti.statusbar.AutoDevStatusService"/>

<statusBarWidgetFactory id="AIAssistant" implementation="cc.unitmesh.devti.statusbar.AutoDevStatusBarWidgetFactory"/>

Expand Down
7 changes: 7 additions & 0 deletions src/main/kotlin/cc/unitmesh/devti/AutoDevIcons.kt
@@ -1,6 +1,7 @@
package cc.unitmesh.devti

import com.intellij.openapi.util.IconLoader
import com.intellij.ui.AnimatedIcon
import javax.swing.Icon

object AutoDevIcons {
Expand All @@ -13,6 +14,12 @@ object AutoDevIcons {
@JvmField
val DARK: Icon = IconLoader.getIcon("/icons/autodev-dark.svg", AutoDevIcons::class.java)

@JvmField
val ERROR: Icon = IconLoader.getIcon("/icons/autodev-error.svg", AutoDevIcons::class.java)

@JvmField
val IntProgress = AnimatedIcon.Default()

@JvmField
val Send: Icon = IconLoader.getIcon("/icons/send.svg", AutoDevIcons::class.java)

Expand Down
19 changes: 19 additions & 0 deletions src/main/kotlin/cc/unitmesh/devti/statusbar/AutoDevStatus.kt
@@ -0,0 +1,19 @@
package cc.unitmesh.devti.statusbar

import cc.unitmesh.devti.AutoDevIcons
import javax.swing.Icon

enum class AutoDevStatus {
Ready,
InProgress,
Error;

val icon: Icon
get() {
return when (this) {
Ready -> AutoDevIcons.DARK
InProgress -> AutoDevIcons.IntProgress
Error -> AutoDevIcons.ERROR
}
}
}
Expand Up @@ -20,6 +20,8 @@ class AutoDevStatusBarWidget(project: Project) : EditorBasedStatusBarPopup(proje
}

override fun createPopup(context: DataContext): ListPopup? {
// TODO: show different status in menu
// val currentStatus = AutoDevStatusService.currentStatus.first
val statusGroup = DefaultActionGroup()

val configuredGroup = ActionManager.getInstance().getAction("autodev.statusBarPopup") as? ActionGroup
Expand Down
Expand Up @@ -2,9 +2,20 @@ package cc.unitmesh.devti.statusbar

import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.util.Pair
import com.intellij.util.messages.Topic
import io.opentelemetry.api.internal.GuardedBy

class AutoDevStatusService : Disposable {
private val lock = Any()

@GuardedBy("lock")
private var status = AutoDevStatus.Ready

@GuardedBy("lock")
private var message: String? = null


class AutoDevStatusService: Disposable {
init {
ApplicationManager.getApplication().messageBus
.connect(this)
Expand All @@ -15,7 +26,15 @@ class AutoDevStatusService: Disposable {

}

private fun getStatus(): Pair<AutoDevStatus, String?> {
synchronized(lock) { return Pair.create(status, message) }
}

companion object {
val TOPIC = Topic.create("autodev.status", AutoDevStatusService::class.java)

val currentStatus: Pair<AutoDevStatus, String?>
get() = ApplicationManager.getApplication().getService(AutoDevStatusService::class.java).getStatus()

}
}
14 changes: 14 additions & 0 deletions src/main/resources/icons/autodev-error.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 54269bc

Please sign in to comment.