Arreglado un fallito con el Modo de Conversion de los ajustes. Ahora ejecuta las…

Arreglado un fallito con el Modo de Conversion de los ajustes. Ahora ejecuta las funciones de action_button
parent 744ee85f
......@@ -29,7 +29,7 @@ class ActionButton extends StatelessWidget {
return Directionality(
textDirection: TextDirection.rtl,
child: FilledButton.icon(
onPressed: _getCallback(),
onPressed: getCallback(),
label: Text(
tipoBoton.label,
textScaler: const TextScaler.linear(1.2)),
......@@ -349,7 +349,7 @@ class ActionButton extends StatelessWidget {
}
/// Asigna la función correspondiente según el tipo de botón
void Function()? _getCallback() {
void Function()? getCallback() {
if(disabled) return null;
return switch(tipoBoton) {
ActionButtonTypes.archivo => archivoAction,
......
......@@ -141,13 +141,23 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
disabledElevation: 0,
onPressed: (!widget.allowConversion)? null :
() {
switch(widget.providerAjustes.modoConversion){
case 1:
convertirCopiar(manager);
break;
case 2:
convertirComprimir(manager);
break;
// Rafa: Esto es un poco un 'hack'
final tipoAccion = widget.providerAjustes.modoConversion == 1
? ActionButtonTypes.copiar
: ActionButtonTypes.comprimir;
final callback = ActionButton(
tipoBoton: tipoAccion,
manager: manager,
context: context,
disabled: !(widget.allowConversion) && tipoAccion.isConvertir,
onSuccess: widget.onConvertSuccess,
providerAjustes: widget.providerAjustes,
).getCallback();
if (callback != null) {
callback();
}
},
));
......@@ -232,104 +242,6 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
}).toList();
}
Future<void> convertirCopiar(ListaSeleccionables manager) async {
if(await ActionButton.comprobacionPermisoArchivos(context)){
String? directorioSalida;
if(widget.providerAjustes.carpetaSalida.isNotEmpty){
directorioSalida = widget.providerAjustes.carpetaSalida;
}
else{
directorioSalida = await FilePicker.platform.getDirectoryPath();
}
if(directorioSalida != null){
listenerActualizar(manager);
// Convertimos los archivos como tal
List<Archivo> archivos = manager.seleccionables.whereType<Archivo>().toList();
while(manager.seleccionables.isNotEmpty){
ElementoSeleccionable sel = manager.seleccionables.first;
if(sel is Carpeta){
for (var archivo in sel.elementosSeleccionados) {
Directory d = await Directory("$directorioSalida/${sel.nombre}").create();
Conversor.convertir(archivo, d.path);
}
}
else if (sel is Archivo){
Conversor.convertir(sel, directorioSalida);
}
manager.borraSeleccionable(0);
}
}
}
}
Future<void> convertirComprimir(ListaSeleccionables manager) async {
if(await ActionButton.comprobacionPermisoArchivos(context)){
// Averiguamos donde colocar los archivos de salida
String? directorioSalida = widget.providerAjustes.carpetaSalida.isNotEmpty
? widget.providerAjustes.carpetaSalida
: await FilePicker.platform.getDirectoryPath();
if(directorioSalida != null) {
listenerActualizar(manager);
final now = DateTime.now();
final nombreZip = "ConVertex_"
"${now.day}-${now.month}-${now.year}_"
"${now.hour}-${now.minute}-${now.second}";
final zipFileEncoder = ZipFileEncoder();
zipFileEncoder.create("$directorioSalida/$nombreZip.zip");
final resultsZip = <Future<void>>[];
while(manager.seleccionables.isNotEmpty){
ElementoSeleccionable sel = manager.seleccionables.first;
// Conversion de carpetas
if(sel is Carpeta){
Directory d = await Directory("$directorioSalida/${sel.nombre}").create();
final resultsConversion = <Future<ReturnCode?>>[];
for (var archivo in sel.elementosSeleccionados) {
resultsConversion.add(Conversor.convertir(archivo, d.path));
}
// Esperamos a la conversión y añadimos a zip
for (final result in resultsConversion) {
await result;
}
resultsZip.add(
zipFileEncoder.addDirectory(d)..then((_) => d.delete(recursive: true))
);
}
// Conversion de archivos
else if (sel is Archivo){
// Esperamos a la conversión y añadimos a zip
await Conversor.convertir(sel, directorioSalida);
File tempFile = await File(
"$directorioSalida/${sel.nombre}.${sel.formatoDestino?.name}"
).create();
resultsZip.add(
zipFileEncoder.addFile(tempFile)..then((_) => tempFile.delete())
);
}
// Esperamos a que la compresión se termine y se borren los
// archivos temporales
if (manager.seleccionables.length == 1) {
for (final result in resultsZip) {
await result;
}
zipFileEncoder.closeSync();
}
// Esto hace que la barra de progreso suba
manager.borraSeleccionable(0);
}
}
}
}
Future<void> listenerActualizar(ListaSeleccionables manager) async {
manager.iniciarConversion();
int initialSize = manager.seleccionables.length;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment