Quiero crear dos cuadros de diálogo de electrones separados, uno para la selección de archivos APK y otro para la selección de directorios para poder seleccionar una carpeta APK descompilada.
El uso de un cuadro de diálogo para la selección de archivos y la selección de directorios al mismo tiempo no se puede hacer tanto en Linux como en Windows, a diferencia de cómo se puede hacer en MacOS.
Entonces, después de un tiempo hablando con los desarrolladores en github.com/electron/electron , me dijeron que es posible usar 2 diálogos separados en el mismo archivo JavaScript que uso como controlador principal para mi aplicación de escritorio Linux, como una solución a esto para Linux y Windows.
Los desarrolladores me señalaron esta página aquí en electronjs.org , pero desafortunadamente tengo problemas para entender algo, así que terminé aquí en stackoverflow.
El código que he logrado producir hasta ahora está a continuación, cualquier ayuda sobre esto sería apreciada.
// First dialog for File Selection | This works fine $appCtrl.BrowseApk = () => { dialog.showOpenDialog({'File browser'}, { properties: ['openFile'] }).then(result => { if(result.canceled) { $appCtrl.Log("No file selected"); } else { $appCtrl.Log("File selected" + result.filePaths[0]); readFile(result.filePaths[0]); } }).catch(() => { $appCtrl.Log("No file selected"); }) function readFile(filepath) { $appCtrl.filePath = filepath; $appCtrl.$apply(); }) // Second Dialog for Folder Selection | This breaks my electron UI $appCtrl.BrowseFolder = () => { dialog.showOpenDialog({'Folder browser'}, { properties: ['openDirectory'] }).then(result => { if(result.canceled) { $appCtrl.Log("No directory selected"); } else { $appCtrl.Log("Directory selected" + result.filePaths); readFile(result.filePaths); } }).catch(() => { $appCtrl.Log("No directory selected"); }) function readFile(filepath) { $appCtrl.filePath = filepath; $appCtrl.$apply(); })¡Problema resuelto! todo lo que tenía que hacer era lo siguiente a continuación.
//function to open the dialog and an choose apk file $appCtrl.BrowseApk = () => { dialog.showOpenDialog({ properties: ['openFile'], title: 'Choose APK to bind', buttonLabel: 'Select APK', filters: [ { name: 'Android APK', extensions: ['apk'] } // only select apk files ] }).then(result => { if(result.canceled) { $appCtrl.Log("No file selected"); //if user cancels the dialog } else { $appCtrl.Log("File choosen " + result.filePaths[0]); //if user selects an APK file readFile(result.filePaths[0]); } }).catch(() => { $appCtrl.Log("No file selected"); }) function readFile(filepath) { $appCtrl.filePath = filepath; $appCtrl.$apply(); } } // function to select decompiled APK folder $appCtrl.BrowseFolder = () => { dialog.showOpenDialog({ properties: ['openDirectory'], title: 'Choose decompiled APK folder', buttonLabel: 'Select Folder', filters: [ { name: 'Folders', extensions: ['*'] } ] }).then(result => { if(result.canceled) { $appCtrl.Log("No folder selected"); } else { $appCtrl.Log("Folder choosen " + result.filePaths[0]); //if user selects a Decompiled APK file readFile(result.filePaths[0]); } }).catch(() => { $appCtrl.Log("No folder selected"); }) function readFile(filepath) { $appCtrl.filePath = filepath; $appCtrl.$apply(); } }