Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Rafa Castillo Passols
/
Prototipo-Multimedia
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
e0a9bc20
authored
May 22, 2025
by
Diego Pérez Peña
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'develop' of
https://gitlab.ujaen.es/rcp00054/Prototipo-Multimedia
into develop
parents
355c6fe7
a9436033
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
99 additions
and
27 deletions
lib/modelo/archivo.dart
lib/modelo/carpeta.dart
lib/modelo/conversor.dart
lib/paginas/pagina_configuracion_carpeta.dart
lib/widgets/action_button.dart
lib/widgets/carpeta_widget.dart
lib/modelo/archivo.dart
View file @
e0a9bc20
...
@@ -11,7 +11,7 @@ class Archivo extends Convertible {
...
@@ -11,7 +11,7 @@ class Archivo extends Convertible {
Archivo
({
required
super
.
id
,
required
this
.
file
}):
Archivo
({
required
super
.
id
,
required
this
.
file
}):
super
(
super
(
nombre:
file
.
path
.
split
(
'/'
).
last
,
nombre:
file
.
path
.
split
(
'/'
).
last
.
split
(
'.'
).
first
,
formatoOriginal:
Formato
.
fromExtension
(
file
.
path
.
split
(
'.'
).
last
)!,
formatoOriginal:
Formato
.
fromExtension
(
file
.
path
.
split
(
'.'
).
last
)!,
icon:
Formato
.
fromExtension
(
file
.
path
.
split
(
'.'
).
last
)!.
tipoMultimedia
.
icono
icon:
Formato
.
fromExtension
(
file
.
path
.
split
(
'.'
).
last
)!.
tipoMultimedia
.
icono
)
)
...
...
lib/modelo/carpeta.dart
View file @
e0a9bc20
import
'dart:io'
;
import
'dart:io'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:prueba_multimedia/modelo/archivo.dart'
;
import
'package:uuid/uuid.dart'
;
import
'package:uuid/uuid.dart'
;
import
'convertible.dart'
;
import
'convertible.dart'
;
import
'elemento_seleccionable.dart'
;
import
'elemento_seleccionable.dart'
;
...
@@ -10,37 +11,102 @@ class Carpeta extends ElementoSeleccionable {
...
@@ -10,37 +11,102 @@ class Carpeta extends ElementoSeleccionable {
final
Directory
_directory
;
final
Directory
_directory
;
bool
_incluirSubcarpetas
=
false
;
bool
_incluirSubcarpetas
=
false
;
final
List
<
InfoFormato
>
_formatos
=
<
InfoFormato
>[];
final
List
<
InfoFormato
>
_formatos
=
<
InfoFormato
>[];
final
_elementos
=
<
FileSystemEntity
>[];
final
_elementos
=
<
Archivo
>[];
final
_elementosSubcarpetas
=
<
Archivo
>[];
Directory
get
directory
=>
_directory
;
Directory
get
directory
=>
_directory
;
List
<
InfoFormato
>
get
formatos
=>
List
.
unmodifiable
(
_formatos
);
List
<
InfoFormato
>
get
formatos
=>
List
.
unmodifiable
(
_formatos
);
List
<
FileSystemEntity
>
get
elementos
=>
List
.
unmodifiable
(
_elementos
);
bool
get
incluyeSubcarpetas
=>
_incluirSubcarpetas
;
bool
get
incluyeSubcarpetas
=>
_incluirSubcarpetas
;
/// Un getter que da todos los archivos según los filtros elegidos
List
<
Archivo
>
get
elementosSeleccionados
{
final
seleccionado
=
<
Archivo
>[];
// Primero averiguamos los formatos seleccionados
final
formatosSeleccionados
=
<
Formato
,
Formato
>{};
final
formatosSeleccionadosSubcarpetas
=
<
Formato
,
Formato
>{};
for
(
var
infoFormato
in
_formatos
)
{
bool
seleccionado
=
infoFormato
.
seleccionado
;
bool
destinoNoNulo
=
infoFormato
.
formatoDestino
!=
null
;
bool
noEsSubcarpeta
=
!
infoFormato
.
subCarpeta
;
if
(
seleccionado
&&
destinoNoNulo
)
{
if
(
noEsSubcarpeta
)
{
formatosSeleccionados
.
putIfAbsent
(
infoFormato
.
formatoOriginal
,
()
=>
infoFormato
.
formatoDestino
!
);
}
else
if
(
_incluirSubcarpetas
)
{
formatosSeleccionadosSubcarpetas
.
putIfAbsent
(
infoFormato
.
formatoOriginal
,
()
=>
infoFormato
.
formatoDestino
!
);
}
}
}
// Devolvemos archivos que tengan formato seleccionado
for
(
var
archivo
in
_elementos
.
whereType
<
Archivo
>())
{
if
(
formatosSeleccionados
.
keys
.
contains
(
archivo
.
formatoOriginal
))
{
archivo
.
formatoDestino
=
formatosSeleccionados
[
archivo
.
formatoOriginal
];
seleccionado
.
add
(
archivo
);
}
}
for
(
var
archivo
in
_elementosSubcarpetas
.
whereType
<
Archivo
>())
{
if
(
formatosSeleccionadosSubcarpetas
.
keys
.
contains
(
archivo
.
formatoOriginal
))
{
archivo
.
formatoDestino
=
formatosSeleccionadosSubcarpetas
[
archivo
.
formatoOriginal
];
seleccionado
.
add
(
archivo
);
}
}
return
seleccionado
;
}
List
<
InfoFormato
>
get
formatosSeleccionados
{
final
seleccionados
=
<
InfoFormato
>[];
for
(
var
infoFormato
in
_formatos
)
{
bool
seleccionado
=
infoFormato
.
seleccionado
;
bool
noEsSubcarpeta
=
!
infoFormato
.
subCarpeta
;
if
(
seleccionado
&&
(
noEsSubcarpeta
||
_incluirSubcarpetas
))
{
seleccionados
.
add
(
infoFormato
);
}
}
return
seleccionados
;
}
Carpeta
({
required
super
.
id
,
required
Directory
directory
}):
Carpeta
({
required
super
.
id
,
required
Directory
directory
}):
_directory
=
directory
,
_directory
=
directory
,
super
(
nombre:
directory
.
path
.
split
(
'/'
).
last
,
icon:
const
Icon
(
Icons
.
folder_outlined
))
super
(
nombre:
directory
.
path
.
split
(
'/'
).
last
,
icon:
const
Icon
(
Icons
.
folder_outlined
))
{
{
final
archivos
=
directory
.
listSync
(
recursive:
false
,
followLinks:
false
);
final
fsEntities
=
directory
.
listSync
(
recursive:
false
,
followLinks:
false
);
for
(
var
a
in
archivos
)
{
Formato
?
f
=
Formato
.
fromExtension
(
a
.
path
.
split
(
"."
).
last
);
// Guardamos los archivos
if
(
f
!=
null
){
for
(
var
file
in
fsEntities
.
whereType
<
File
>())
{
final
i
=
InfoFormato
(
Archivo
archivo
=
Archivo
(
id:
Uuid
().
v1
(),
file:
file
);
formato:
f
,
_elementos
.
add
(
archivo
);
carpeta:
this
,
final
f
=
InfoFormato
(
subCarpeta:
false
);
formato:
archivo
.
formatoOriginal
,
if
(!
_formatos
.
contains
(
i
)){
carpeta:
this
,
_formatos
.
add
(
i
);
subCarpeta:
false
}
);
if
(!
_formatos
.
contains
(
f
)){
_formatos
.
add
(
f
);
}
}
}
}
final
subcarpeta
=
directory
.
listSync
(
recursive:
true
,
followLinks:
false
);
// Guardamos los archivos de las subcarpetas
for
(
var
a
in
subcarpeta
)
{
// Ahora mismo solo consultamos un nivel de subcarpetas y no mas
Formato
?
f
=
Formato
.
fromExtension
(
a
.
path
.
split
(
"."
).
last
);
for
(
var
directory
in
fsEntities
.
whereType
<
Directory
>())
{
if
(
f
!=
null
){
final
files
=
directory
.
listSync
(
recursive:
false
,
followLinks:
false
)
.
whereType
<
File
>();
for
(
var
file
in
files
)
{
Archivo
archivo
=
Archivo
(
id:
Uuid
().
v1
(),
file:
file
);
_elementosSubcarpetas
.
add
(
archivo
);
final
i
=
InfoFormato
(
final
i
=
InfoFormato
(
formato:
f
,
formato:
archivo
.
formatoOriginal
,
carpeta:
this
,
carpeta:
this
,
subCarpeta:
true
);
subCarpeta:
true
);
if
(!
_formatos
.
contains
(
i
)){
if
(!
_formatos
.
contains
(
i
)){
...
@@ -51,12 +117,6 @@ class Carpeta extends ElementoSeleccionable {
...
@@ -51,12 +117,6 @@ class Carpeta extends ElementoSeleccionable {
}
}
/*
Carpeta.fromList({required super.id, required Directory directory, required List<InfoFormato> formatos}):
_directory = directory, _formatos = formatos,
super(nombre: directory.path.split('/').last, icon: const Icon(Icons.folder_outlined));
*/
InfoFormato
?
getInfoFormato
({
required
Formato
formato
}){
InfoFormato
?
getInfoFormato
({
required
Formato
formato
}){
for
(
InfoFormato
i
in
_formatos
){
for
(
InfoFormato
i
in
_formatos
){
if
(
i
.
formatoOriginal
==
formato
){
if
(
i
.
formatoOriginal
==
formato
){
...
...
lib/modelo/conversor.dart
View file @
e0a9bc20
...
@@ -12,7 +12,7 @@ abstract class Conversor {
...
@@ -12,7 +12,7 @@ abstract class Conversor {
/// Se llama una vez el usuario pulsa convertir
/// Se llama una vez el usuario pulsa convertir
static
Future
<
ReturnCode
?>
convertir
(
Archivo
archivo
,
String
pathSalida
)
async
{
static
Future
<
ReturnCode
?>
convertir
(
Archivo
archivo
,
String
pathSalida
)
async
{
String
path
=
archivo
.
file
.
path
;
String
path
=
archivo
.
file
.
path
;
String
nuevoPath
=
"
$pathSalida${archivo.nombre}
.
${archivo.formatoDestino!.name}
"
;
String
nuevoPath
=
"
$pathSalida
/
${archivo.nombre}
.
${archivo.formatoDestino!.name}
"
;
String
comando
=
"-i
$path
$nuevoPath
"
;
String
comando
=
"-i
$path
$nuevoPath
"
;
FFmpegSession
session
=
await
FFmpegKit
.
execute
(
comando
);
FFmpegSession
session
=
await
FFmpegKit
.
execute
(
comando
);
...
...
lib/paginas/pagina_configuracion_carpeta.dart
View file @
e0a9bc20
...
@@ -23,6 +23,8 @@ class PaginaConfiguracionCarpeta extends StatefulWidget {
...
@@ -23,6 +23,8 @@ class PaginaConfiguracionCarpeta extends StatefulWidget {
State
<
PaginaConfiguracionCarpeta
>
createState
()
=>
_PaginaConfiguracionCarpetaState
();
State
<
PaginaConfiguracionCarpeta
>
createState
()
=>
_PaginaConfiguracionCarpetaState
();
}
}
// TODO: Se muestran formatos repetidos porque se consideran distintos
// al ser un de subcarpeta y otro no
class
_PaginaConfiguracionCarpetaState
extends
State
<
PaginaConfiguracionCarpeta
>
{
class
_PaginaConfiguracionCarpetaState
extends
State
<
PaginaConfiguracionCarpeta
>
{
final
Map
<
TipoMultimedia
,
List
<
Formato
>>
_formatos
=
{};
final
Map
<
TipoMultimedia
,
List
<
Formato
>>
_formatos
=
{};
final
Map
<
TipoMultimedia
,
bool
?>
_allOfType
=
{};
final
Map
<
TipoMultimedia
,
bool
?>
_allOfType
=
{};
...
...
lib/widgets/action_button.dart
View file @
e0a9bc20
...
@@ -135,6 +135,15 @@ class ActionButton extends StatelessWidget {
...
@@ -135,6 +135,15 @@ class ActionButton extends StatelessWidget {
Conversor
.
convertir
(
archivo
,
directorioSalida
);
Conversor
.
convertir
(
archivo
,
directorioSalida
);
}
}
// Convertimos las carpetas
List
<
Carpeta
>
carpetas
=
manager
.
seleccionables
.
whereType
<
Carpeta
>().
toList
();
for
(
var
carpeta
in
carpetas
)
{
for
(
var
archivo
in
carpeta
.
elementosSeleccionados
)
{
Directory
d
=
await
Directory
(
"
$directorioSalida
/
${carpeta.nombre}
"
).
create
();
Conversor
.
convertir
(
archivo
,
d
.
path
);
}
}
manager
.
finalizarConversion
();
manager
.
finalizarConversion
();
}
}
}
}
...
...
lib/widgets/carpeta_widget.dart
View file @
e0a9bc20
...
@@ -50,8 +50,9 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
...
@@ -50,8 +50,9 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
seleccionados
=
[];
seleccionados
=
[];
bool
incluimosSubcarpetas
=
widget
.
carpeta
.
incluyeSubcarpetas
;
for
(
var
i
in
widget
.
carpeta
.
formatos
)
{
for
(
var
i
in
widget
.
carpeta
.
formatos
)
{
if
(
i
.
seleccionado
&&
i
.
carpeta
.
incluyeSubcarpetas
){
if
(
i
.
seleccionado
&&
(!
i
.
subCarpeta
||
(
i
.
subCarpeta
&&
incluimosSubcarpetas
))
){
seleccionados
.
add
(
i
);
seleccionados
.
add
(
i
);
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment