Ahora los archivos descargados tratan de usar el nombre que viene en los…

Ahora los archivos descargados tratan de usar el nombre que viene en los headers. Los enlaces dan problemas al comprimir por el nombre
parent 5d77bea4
...@@ -12,15 +12,18 @@ class Enlace extends Convertible { ...@@ -12,15 +12,18 @@ class Enlace extends Convertible {
final String _url; final String _url;
late final Future<File> _file; late final Future<File> _file;
bool _descargado = false; bool _descargado = false;
String? _nombreArchivo;
String get url => _url; String get url => _url;
Future<File> get archivo async => await _file; String? get nombreArchivo => _nombreArchivo;
bool get descargado => _descargado; bool get descargado => _descargado;
Enlace({required String super.id, required String direccion}): Enlace({required String super.id, required String direccion}):
_url = direccion, super( _url = direccion, super(
nombre: "Enlace", nombre: direccion.length < 33
? direccion
: "${direccion.substring(0, 33)}...",
formatoOriginal: Formato.fromExtension('jpg')!, formatoOriginal: Formato.fromExtension('jpg')!,
icon: const Icon(Icons.link) icon: const Icon(Icons.link)
) )
...@@ -31,17 +34,35 @@ class Enlace extends Convertible { ...@@ -31,17 +34,35 @@ class Enlace extends Convertible {
Future<File> _descargar(String direccion) async { Future<File> _descargar(String direccion) async {
// Descargamos los datos // Descargamos los datos
final dio = Dio(); final dio = Dio();
final response = dio.get(_url, final response = await dio.get(_url,
options: Options( options: Options(
responseType: ResponseType.bytes responseType: ResponseType.bytes
) )
); );
// Miramos el nombre del archivo en la respuesta o lo generamos aleatoriamente
String? nombre = response.headers.map['Content-Disposition']?.first;
if (nombre == null) {
nombre = const Uuid().v1().toString();
} else {
nombre = nombre.split('=').last;
// filename encoding, quitamos los "..."
if (nombre.startsWith('"')) {
nombre = nombre.substring(1, nombre.length-1);
}
// filename* encoding, habría que parsear en UTF8
// TODO: parsear en el caso de filename*
else {
nombre = nombre.substring(7);
}
}
_nombreArchivo = nombre;
// Escribimos los datos en archivo temporal // Escribimos los datos en archivo temporal
Directory temp = await getTemporaryDirectory(); Directory temp = await getTemporaryDirectory();
final File file = await File("${temp.path}/${const Uuid().v1().toString()}.${formatoOriginal.name}").create(); final File file = await File("${temp.path}/$nombre.${formatoOriginal.name}").create();
final raf = file.openSync(mode: FileMode.write); final raf = file.openSync(mode: FileMode.write);
raf.writeFromSync((await response).data); raf.writeFromSync(response.data);
await raf.close(); await raf.close();
_descargado = true; _descargado = true;
......
...@@ -138,7 +138,7 @@ class ActionButton extends StatelessWidget { ...@@ -138,7 +138,7 @@ class ActionButton extends StatelessWidget {
: await FilePicker.platform.getDirectoryPath(); : await FilePicker.platform.getDirectoryPath();
final resultados = <Future<ReturnCode?>>[]; final resultados = <Future<ReturnCode?>>[];
if(directorioSalida != null){ if(directorioSalida != null){
// _actualizadorProgreso(); _actualizadorProgreso();
while(manager.seleccionables.isNotEmpty){ while(manager.seleccionables.isNotEmpty){
ElementoSeleccionable sel = manager.seleccionables.first; ElementoSeleccionable sel = manager.seleccionables.first;
...@@ -207,6 +207,7 @@ class ActionButton extends StatelessWidget { ...@@ -207,6 +207,7 @@ class ActionButton extends StatelessWidget {
else if (sel is Convertible){ else if (sel is Convertible){
sel.convertir(directorioSalida); sel.convertir(directorioSalida);
File tempFile = await File( File tempFile = await File(
// TODO: Esto da bug con los enlaces por el nombre
"$directorioSalida/${sel.nombre}.${sel.formatoDestino?.name}" "$directorioSalida/${sel.nombre}.${sel.formatoDestino?.name}"
).create(); ).create();
resultsZip.add( resultsZip.add(
......
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