@@ -141,37 +141,13 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
141
141
// and let the native handling the drop event, and update the UI through JS bridge.
142
142
val dropTarget = object : DropTarget () {
143
143
override fun dragEnter (dtde : DropTargetDragEvent ) {
144
- try {
145
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
146
- " window.setDragAndDropVisible('true')" ,
147
- browserInstance.jcefBrowser.cefBrowser.url,
148
- 0
149
- )
150
- } catch (e: Exception ) {
151
- LOG .error { " Failed to handle dragEnter: ${e.message} " }
152
- }
144
+ setDragAndDropOverlayVisible(browserInstance, true )
153
145
}
154
146
override fun dragOver (dtde : DropTargetDragEvent ) {
155
- try {
156
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
157
- " window.setDragAndDropVisible('true')" ,
158
- browserInstance.jcefBrowser.cefBrowser.url,
159
- 0
160
- )
161
- } catch (e: Exception ) {
162
- LOG .error { " Failed to handle dragOver: ${e.message} " }
163
- }
147
+ setDragAndDropOverlayVisible(browserInstance, true )
164
148
}
165
149
override fun dragExit (dte : DropTargetEvent ) {
166
- try {
167
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
168
- " window.setDragAndDropVisible('false')" ,
169
- browserInstance.jcefBrowser.cefBrowser.url,
170
- 0
171
- )
172
- } catch (e: Exception ) {
173
- LOG .error { " Failed to handle dragExit: ${e.message} " }
174
- }
150
+ setDragAndDropOverlayVisible(browserInstance, false )
175
151
}
176
152
override fun drop (dtde : DropTargetDropEvent ) {
177
153
try {
@@ -201,32 +177,16 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
201
177
validImages.subList(20 , validImages.size).clear()
202
178
}
203
179
204
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
205
- " window.resetTopBarClicked()" ,
206
- browserInstance.jcefBrowser.cefBrowser.url,
207
- 0
208
- )
180
+ executeJavaScript(browserInstance, " window.resetTopBarClicked()" )
209
181
210
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
211
- " window.setDragAndDropVisible('false')" ,
212
- browserInstance.jcefBrowser.cefBrowser.url,
213
- 0
214
- )
182
+ setDragAndDropOverlayVisible(browserInstance, false )
215
183
216
184
val json = OBJECT_MAPPER .writeValueAsString(validImages)
217
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
218
- " window.handleNativeDrop('$json ')" ,
219
- browserInstance.jcefBrowser.cefBrowser.url,
220
- 0
221
- )
185
+ executeJavaScript(browserInstance, " window.handleNativeDrop('$json ')" )
222
186
223
187
if (errorMessages.isNotEmpty()) {
224
188
val errorJson = OBJECT_MAPPER .writeValueAsString(errorMessages)
225
- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
226
- " window.handleNativeNotify('$errorJson ')" ,
227
- browserInstance.jcefBrowser.cefBrowser.url,
228
- 0
229
- )
189
+ executeJavaScript(browserInstance, " window.handleNativeNotify('$errorJson ')" )
230
190
}
231
191
232
192
dtde.dropComplete(true )
@@ -333,6 +293,22 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
333
293
}
334
294
}
335
295
296
+ private fun executeJavaScript (browserInstance : Browser , jsCommand : String ) {
297
+ try {
298
+ browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
299
+ jsCommand,
300
+ browserInstance.jcefBrowser.cefBrowser.url,
301
+ 0
302
+ )
303
+ } catch (e: Exception ) {
304
+ LOG .error { " Failed to execute JavaScript: $jsCommand - ${e.message} " }
305
+ }
306
+ }
307
+
308
+ private fun setDragAndDropOverlayVisible (browserInstance : Browser , visible : Boolean ) {
309
+ executeJavaScript(browserInstance, " window.setDragAndDropVisible('$visible ')" )
310
+ }
311
+
336
312
private fun validateImageFile (file : File , allowedTypes : Set <String >, maxFileSize : Double , maxDimension : Int ): String? {
337
313
val fileName = file.name
338
314
val ext = fileName.substringAfterLast(' .' , " " ).lowercase()
0 commit comments