Skip to content

Commit eb596bd

Browse files
committed
use params to select different file descriptor
1 parent 4621012 commit eb596bd

File tree

3 files changed

+66
-17
lines changed

3 files changed

+66
-17
lines changed

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

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonq.toolwindow
55

6+
import com.google.gson.Gson
67
import com.intellij.idea.AppMode
78
import com.intellij.openapi.Disposable
89
import com.intellij.openapi.components.service
@@ -44,13 +45,11 @@ import software.aws.toolkits.jetbrains.services.amazonqDoc.auth.isDocAvailable
4445
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.auth.isFeatureDevAvailable
4546
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.isCodeTransformAvailable
4647
import software.aws.toolkits.resources.message
47-
import java.util.concurrent.CompletableFuture
48-
import javax.swing.JButton
48+
import java.awt.datatransfer.DataFlavor
4949
import java.awt.dnd.DropTarget
5050
import java.awt.dnd.DropTargetDropEvent
51-
import java.awt.datatransfer.DataFlavor
52-
import com.google.gson.Gson
53-
import java.util.Base64
51+
import java.util.concurrent.CompletableFuture
52+
import javax.swing.JButton
5453

5554
class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Disposable {
5655
private val browser = CompletableFuture<Browser>()
@@ -133,7 +132,6 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
133132
// Add DropTarget to the browser component
134133
val dropTarget = object : DropTarget() {
135134
override fun drop(dtde: DropTargetDropEvent) {
136-
137135
try {
138136
dtde.acceptDrop(dtde.dropAction)
139137
val transferable = dtde.transferable
@@ -192,8 +190,6 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
192190
validImages.subList(20, validImages.size).clear()
193191
}
194192

195-
196-
197193
val json = Gson().toJson(validImages).replace("\\", "\\\\").replace("'", "\\'")
198194
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
199195
"window.handleNativeDrop('$json')",
@@ -207,7 +203,6 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
207203
browserInstance.jcefBrowser.cefBrowser.url,
208204
0
209205
)
210-
211206
}
212207
dtde.dropComplete(true)
213208
} catch (e: Exception) {
@@ -216,7 +211,7 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
216211
}
217212
}
218213
}
219-
214+
220215
// Set DropTarget on the browser component and its children
221216
browserInstance.component()?.let { component ->
222217
component.dropTarget = dropTarget

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLanguageClientImpl.kt

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,68 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
255255
override fun showOpenFileDialog(params: ShowOpenFileDialogParams): CompletableFuture<LSPAny> {
256256
return CompletableFuture.supplyAsync(
257257
{
258-
val descriptor = if (params.canSelectMany) {
259-
FileChooserDescriptorFactory.createMultipleFilesNoJarsDescriptor().apply {
260-
title = "Select Files"
261-
description = "Choose files to open"
258+
// Handle the case where both canSelectFiles and canSelectFolders are false (should never be sent from flare)
259+
if (!params.canSelectFiles && !params.canSelectFolders) {
260+
return@supplyAsync mapOf("uris" to emptyList<String>()) as LSPAny
261+
}
262+
263+
val descriptor = when {
264+
params.canSelectFolders && params.canSelectFiles -> {
265+
if (params.canSelectMany) {
266+
FileChooserDescriptorFactory.createSingleFileOrFolderDescriptor()
267+
} else {
268+
FileChooserDescriptorFactory.createAllButJarContentsDescriptor()
269+
}
270+
}
271+
params.canSelectFolders -> {
272+
if (params.canSelectMany) {
273+
FileChooserDescriptorFactory.createMultipleFoldersDescriptor()
274+
} else {
275+
FileChooserDescriptorFactory.createSingleFolderDescriptor()
276+
}
277+
}
278+
else -> {
279+
if (params.canSelectMany) {
280+
FileChooserDescriptorFactory.createMultipleFilesNoJarsDescriptor()
281+
} else {
282+
FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()
283+
}
284+
}
285+
}.apply {
286+
withTitle(
287+
params.title ?: when {
288+
params.canSelectFolders && params.canSelectFiles -> "Select Files or Folders"
289+
params.canSelectFolders -> "Select Folders"
290+
else -> "Select Files"
291+
}
292+
)
293+
withDescription(
294+
when {
295+
params.canSelectFolders && params.canSelectFiles -> "Choose files or folders to open"
296+
params.canSelectFolders -> "Choose folders to open"
297+
else -> "Choose files to open"
298+
}
299+
)
300+
301+
// Apply file filters if provided
302+
if (params.filters.isNotEmpty() && !params.canSelectFolders) {
303+
// Create a combined list of all allowed extensions
304+
val allowedExtensions = params.filters.values.flatten()
305+
.map { pattern ->
306+
// Convert patterns like "*.jpg" to "jpg"
307+
pattern.removePrefix("*.").lowercase()
308+
}
309+
.toSet()
310+
311+
withFileFilter { virtualFile ->
312+
if (virtualFile.isDirectory) {
313+
true // Always allow directories for navigation
314+
} else {
315+
val extension = virtualFile.extension?.lowercase()
316+
extension != null && allowedExtensions.contains(extension)
317+
}
318+
}
262319
}
263-
} else {
264-
FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()
265320
}
266321

267322
val chosenFiles = FileChooser.chooseFiles(descriptor, project, null)

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/showOpenFileDialogParams.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,5 @@ data class ShowOpenFileDialogParams(
88
val canSelectFolders: Boolean = false,
99
val canSelectMany: Boolean = false,
1010
val filters: Map<String, List<String>> = emptyMap(),
11-
val defaultUri: String? = null,
1211
val title: String? = null,
1312
)

0 commit comments

Comments
 (0)