From b7251881900eaf7741871fd6a0d5a2a266396420 Mon Sep 17 00:00:00 2001 From: Stephan Janssen Date: Thu, 6 Feb 2025 10:53:16 +0100 Subject: [PATCH] Feat #489 Right click to exclude directories --- build.gradle.kts | 2 +- .../genie/action/AddDirectoryAction.java | 1 + .../genie/action/ExcludeDirectoryAction.java | 74 +++++++++++++++++++ .../projectscanner/ProjectScannerService.java | 4 +- src/main/resources/META-INF/plugin.xml | 17 ++++- src/main/resources/application.properties | 2 +- 6 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/devoxx/genie/action/ExcludeDirectoryAction.java diff --git a/build.gradle.kts b/build.gradle.kts index 72361a56..34f1e153 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "com.devoxx.genie" -version = "0.4.14" +version = "0.4.15" repositories { mavenCentral() diff --git a/src/main/java/com/devoxx/genie/action/AddDirectoryAction.java b/src/main/java/com/devoxx/genie/action/AddDirectoryAction.java index 73916e1d..d5639c38 100644 --- a/src/main/java/com/devoxx/genie/action/AddDirectoryAction.java +++ b/src/main/java/com/devoxx/genie/action/AddDirectoryAction.java @@ -29,6 +29,7 @@ public class AddDirectoryAction extends DumbAwareAction { private static final String ADD_TO_CONTEXT = "AddDirectoryToContextWindow"; private static final String COPY_TO_CLIPBOARD = "CopyDirectoryToClipboard"; + @Override public void actionPerformed(@NotNull AnActionEvent e) { Project project = e.getProject(); diff --git a/src/main/java/com/devoxx/genie/action/ExcludeDirectoryAction.java b/src/main/java/com/devoxx/genie/action/ExcludeDirectoryAction.java new file mode 100644 index 00000000..4eb8db71 --- /dev/null +++ b/src/main/java/com/devoxx/genie/action/ExcludeDirectoryAction.java @@ -0,0 +1,74 @@ +package com.devoxx.genie.action; + +import com.devoxx.genie.ui.settings.DevoxxGenieStateService; +import com.devoxx.genie.ui.util.NotificationUtil; +import com.intellij.openapi.actionSystem.ActionUpdateThread; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class ExcludeDirectoryAction extends AnAction { + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + // Get the current project + Project project = e.getProject(); + if (project == null) { + Messages.showErrorDialog("No project found.", "Error"); + return; + } + + VirtualFile selectedDir = e.getData(CommonDataKeys.VIRTUAL_FILE); + if (selectedDir == null || !selectedDir.isDirectory()) { + NotificationUtil.sendNotification(project, "Please select a directory to exclude"); + return; + } + + // Get the absolute path of the directory + String directoryPath = selectedDir.getPath(); + + // Access the state service + DevoxxGenieStateService stateService = DevoxxGenieStateService.getInstance(); + + // Get current excluded directories + List excludedDirectories = stateService.getExcludedDirectories(); + + // Check if already excluded + if (excludedDirectories.contains(directoryPath)) { + Messages.showInfoMessage(project, "Directory is already excluded.", "Information"); + return; + } + + // Add to excluded directories + excludedDirectories.add(directoryPath); + stateService.setExcludedDirectories(excludedDirectories); + + // Optionally, refresh the settings UI if it's open + // This can be achieved by notifying listeners or using a messaging system + + // Provide feedback to the user + Messages.showInfoMessage(project, "Directory excluded successfully.", "Success"); + } + + @Override + public void update(@NotNull AnActionEvent e) { + VirtualFile file = e.getData(CommonDataKeys.VIRTUAL_FILE); + e.getPresentation().setEnabledAndVisible(file != null && file.isDirectory()); + } + + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + + @Override + public boolean isDumbAware() { + return true; + } +} diff --git a/src/main/java/com/devoxx/genie/service/projectscanner/ProjectScannerService.java b/src/main/java/com/devoxx/genie/service/projectscanner/ProjectScannerService.java index 5ac36b27..f766085e 100644 --- a/src/main/java/com/devoxx/genie/service/projectscanner/ProjectScannerService.java +++ b/src/main/java/com/devoxx/genie/service/projectscanner/ProjectScannerService.java @@ -290,7 +290,9 @@ private String truncateToTokens(@NotNull String text, private boolean shouldExcludeDirectory(@NotNull VirtualFile file) { DevoxxGenieSettingsService settings = DevoxxGenieStateService.getInstance(); return file.isDirectory() && - (settings.getExcludedDirectories().contains(file.getName()) || shouldExcludeFile(file)); + (settings.getExcludedDirectories().contains(file.getName()) || + settings.getExcludedDirectories().contains(file.getPath()) || + shouldExcludeFile(file)); } private boolean shouldExcludeFile(@NotNull VirtualFile file) { diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 51e74c70..51ed9cbd 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -35,6 +35,13 @@ ]]> V0.4.15 +
    +
  • Feat #488 : Increase timeout maximum value enhancement
  • +
  • Feat #420 : Migrate to Langchain4J 1.0.0-alpha1 enhancement
  • +
  • Feat #442 : OpenAi O1 doesn't support temperature, waiting for LangChain4J upgrade enhancement
  • +
  • Feat #489 : Right click to exclude directories
  • +

V0.4.14

  • Fix #462 : Remove deprecated Anthropics models
  • @@ -588,7 +595,15 @@ text="Add Directory to Prompt Context" icon="/icons/pluginIcon.svg" description="Add the selected directory to the context window"> - + + + + +