Últimos toques a la aplicación

parent 0a923a47
...@@ -26,16 +26,18 @@ class Carpeta extends ElementoSeleccionable { ...@@ -26,16 +26,18 @@ class Carpeta extends ElementoSeleccionable {
// Guardamos los archivos // Guardamos los archivos
for(var file in fsEntities.whereType<File>()) { for(var file in fsEntities.whereType<File>()) {
Archivo archivo = Archivo(id: Uuid().v1(), file: file); if(Formato.fromExtension(file.path.split('.').last) != null){
_elementos.add(archivo); Archivo archivo = Archivo(id: Uuid().v1(), file: file);
final f = InfoFormato( _elementos.add(archivo);
formato: archivo.formatoOriginal, final f = InfoFormato(
carpeta: this, formato: archivo.formatoOriginal,
seleccionado: true, carpeta: this,
subCarpeta: false seleccionado: true,
); subCarpeta: false
if(!_formatos.contains(f)){ );
_formatos.add(f); if(!_formatos.contains(f)){
_formatos.add(f);
}
} }
} }
...@@ -45,15 +47,17 @@ class Carpeta extends ElementoSeleccionable { ...@@ -45,15 +47,17 @@ class Carpeta extends ElementoSeleccionable {
final files = directory.listSync(recursive: true, followLinks: false) final files = directory.listSync(recursive: true, followLinks: false)
.whereType<File>(); .whereType<File>();
for (var file in files) { for (var file in files) {
Archivo archivo = Archivo(id: Uuid().v1(), file: file); if(Formato.fromExtension(file.path.split('.').last) != null){
_elementosSubcarpetas.add(archivo); Archivo archivo = Archivo(id: Uuid().v1(), file: file);
final i = InfoFormato( _elementosSubcarpetas.add(archivo);
formato: archivo.formatoOriginal, final i = InfoFormato(
carpeta: this, formato: archivo.formatoOriginal,
seleccionado: incluirSubcarpetas, carpeta: this,
subCarpeta: true); seleccionado: incluirSubcarpetas,
if(!_formatos.contains(i)){ subCarpeta: true);
_formatos.add(i); if(!_formatos.contains(i)){
_formatos.add(i);
}
} }
} }
} }
......
...@@ -30,14 +30,14 @@ class PaginaPrincipal extends StatelessWidget { ...@@ -30,14 +30,14 @@ class PaginaPrincipal extends StatelessWidget {
), ),
backgroundColor: Theme.of(context).primaryColor, backgroundColor: Theme.of(context).primaryColor,
actions: [ actions: [
Consumer<ProviderAjustes>( Consumer2<ListaSeleccionables, ProviderAjustes>(
builder: (context, ajustes, child) { builder: (context, lista, ajustes, child) {
return IconButton( return IconButton(
icon: Icon( icon: Icon(
Icons.settings_outlined, Icons.settings_outlined,
color: Colors.white, color: Colors.white,
), ),
onPressed: () { onPressed: (lista.convirtiendo)? () {} : () {
Navigator.push(context, Navigator.push(context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) { builder: (context) {
......
...@@ -126,6 +126,8 @@ class ActionButton extends StatelessWidget { ...@@ -126,6 +126,8 @@ class ActionButton extends StatelessWidget {
: await FilePicker.platform.getDirectoryPath(); : await FilePicker.platform.getDirectoryPath();
if(directorioSalida != null) { if(directorioSalida != null) {
_actualizadorProgreso();
final now = DateTime.now(); final now = DateTime.now();
final nombreZip = "Convertex_" final nombreZip = "Convertex_"
"${now.day}-${now.month}-${now.year}_" "${now.day}-${now.month}-${now.year}_"
...@@ -133,8 +135,6 @@ class ActionButton extends StatelessWidget { ...@@ -133,8 +135,6 @@ class ActionButton extends StatelessWidget {
final zipFileEncoder = ZipFileEncoder(); final zipFileEncoder = ZipFileEncoder();
zipFileEncoder.create("$directorioSalida/$nombreZip.zip"); zipFileEncoder.create("$directorioSalida/$nombreZip.zip");
_actualizadorProgreso();
final resultsZip = <Future<void>>[]; final resultsZip = <Future<void>>[];
while(manager.seleccionables.isNotEmpty){ while(manager.seleccionables.isNotEmpty){
ElementoSeleccionable sel = manager.seleccionables.first; ElementoSeleccionable sel = manager.seleccionables.first;
......
...@@ -144,7 +144,8 @@ class _CarpetaWidgetState extends State<CarpetaWidget> ...@@ -144,7 +144,8 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
flex: 3, flex: 3,
child: IconButton( child: IconButton(
icon: const Icon(Icons.edit), icon: const Icon(Icons.edit),
onPressed: () { onPressed: (widget.lista.convirtiendo)? () {} :
() {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) { MaterialPageRoute(builder: (context) {
...@@ -180,6 +181,9 @@ class _CarpetaWidgetState extends State<CarpetaWidget> ...@@ -180,6 +181,9 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
clipper: _MyRectClipper(_controller), clipper: _MyRectClipper(_controller),
child: Dismissible( child: Dismissible(
key: Key(elemento.id), key: Key(elemento.id),
direction: widget.lista.convirtiendo?
DismissDirection.none :
DismissDirection.horizontal,
background: Container( background: Container(
color: Colors.red, color: Colors.red,
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
...@@ -265,7 +269,8 @@ class _CarpetaWidgetState extends State<CarpetaWidget> ...@@ -265,7 +269,8 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
flex: 2, flex: 2,
child: IconButton( child: IconButton(
icon: const Icon(Icons.edit), icon: const Icon(Icons.edit),
onPressed: () { onPressed: (widget.lista.convirtiendo)? () {} :
() {
Navigator.push(context, Navigator.push(context,
MaterialPageRoute(builder: (context) { MaterialPageRoute(builder: (context) {
return PaginaConfiguracion( return PaginaConfiguracion(
...@@ -274,15 +279,6 @@ class _CarpetaWidgetState extends State<CarpetaWidget> ...@@ -274,15 +279,6 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
elemento: elemento, elemento: elemento,
carpeta: carpeta carpeta: carpeta
); );
/*
return PaginaConversion.carpeta(
formatoOriginal: elemento.formatoOriginal,
indiceArchivo: index-1,
carpeta: carpeta,
infoFormato: elemento,
lista: widget.lista
);
*/
} }
)); ));
}, },
......
import 'dart:io'; import 'dart:io';
import 'package:archive/archive_io.dart';
import 'package:ffmpeg_kit_flutter_new/return_code.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
...@@ -143,7 +145,7 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> { ...@@ -143,7 +145,7 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
convertirCopiar(manager); convertirCopiar(manager);
break; break;
case 2: case 2:
convertirComprimir(); convertirComprimir(manager);
break; break;
} }
}, },
...@@ -242,9 +244,67 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> { ...@@ -242,9 +244,67 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
} }
} }
Future<void> convertirComprimir() async { Future<void> convertirComprimir(ListaSeleccionables manager) async {
if(await ActionButton.comprobacionPermisoArchivos(context)){ if(await ActionButton.comprobacionPermisoArchivos(context)){
print('Hola'); // 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);
}
}
} }
} }
......
...@@ -60,7 +60,8 @@ class ConvertibleWidget extends StatelessWidget { ...@@ -60,7 +60,8 @@ class ConvertibleWidget extends StatelessWidget {
flex: 2, flex: 2,
child: IconButton( child: IconButton(
icon: const Icon(Icons.edit), icon: const Icon(Icons.edit),
onPressed: () { onPressed: (lista.convirtiendo)? () {} :
() {
Navigator.push(context, Navigator.push(context,
MaterialPageRoute(builder: (context) { MaterialPageRoute(builder: (context) {
return PaginaConfiguracion( return PaginaConfiguracion(
......
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