~mhysterio/sintel-media/trunk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
#!/bin/bash
# This file is part of Sintel.
#
# Sintel is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Sintel is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Sintel.  If not, see <https://www.gnu.org/licenses/>.
#
#
#Listar series y películas existentes en la base de datos de varias formas

function medios.info() {
    echo "medios - Módulo de medios"
    echo
    echo "Tareas sobre medios en general."
    echo "Se usan funciones de otros módulos."
    echo
}

#Listar todos los medios
#En el formato siguiente:
#De las películas:
#id titulo pelicula
#De las series igual que la función siguiente a esta (medios.listSeries)
function medios.listAll() {
	local datos=$(db.executeQuery "select * from medio")
	local e=""
	local e2=""
	local res=""

	readarray -t datosa <<< "$datos"
	for medio in "${datosa[@]}"; do
		film.parse "$medio"
		e=""
		e="${PELICULA[id]} ${PELICULA[titulo]}"
		if [[ ${PELICULA[esserie]} == 1 ]]; then
			e="$e serie"
			local ds=$(db.executeQuery "select * from episodio where idmedio = ${PELICULA[id]} and esvisto = 0 order by temporada, episodio limit 1")
			if [[ $ds != "" ]]; then
			 	series.parseEpisodio "$ds"
			 	e="$e ${EPISODIO[temporada]}x${EPISODIO[episodio]}"
			 	e2=""
			 	if [[ ${EPISODIO[fichero]} == "" ]]; then
			 		e2="no"
			 	else
			 		e2="si"
			 	fi
			 	if [[ ${EPISODIO[torrent]} == "" ]]; then
			 		e2="$e2 no"
			 	else
			 		e2="$e2 si"
			 	fi
			 	e="$e $e2"			 	
			else
			 	e="$e -1"
			fi
		else
			e="$e pelicula"
		fi
		echo "$e"
	done
}

function medios.listAll.info() {
    echo "medios.listAll - Listar todos los medios. Películas y series."
    echo
    echo -e "\tArgumentos: -"
    echo
    echo "Si el medio es una serie se muestra el episodio por el que llega el usuario."
    echo
    echo "Ejemplo:"
    echo -e "\tsintel -f medios.listAll"
}

#Listar todas las series
#El formato de salida es el siguiente:
#id titulo episodio descargado descargando
#
#El episodio será dado en el formato temporadaxepisodio, sin espacios
#Descargado y descargando serán "si" o "no" en minúsculas.
#
#Si la serie no tiene episodios, en lugar del episodio mostrará "-1" y no
#dará más detalles.
function medios.listSeries() {
	local datos=$(db.executeQuery "select * from medio where esserie = 1")
	local e=""
	local e2=""
	local res=""

	readarray -t datosa <<< "$datos"
	for medio in "${datosa[@]}"; do
		film.parse "$medio"
		e=""
		e="${PELICULA[id]} ${PELICULA[titulo]}"
		
		local ds=$(db.executeQuery "select * from episodio where idmedio = ${PELICULA[id]} and esvisto = 0 order by temporada, episodio limit 1")
		if [[ $ds != "" ]]; then
		 	series.parseEpisodio "$ds"
		 	e="$e ${EPISODIO[temporada]}x${EPISODIO[episodio]}"
		 	e2=""
		 	if [[ ${EPISODIO[fichero]} == "" ]]; then
		 		e2="no"
		 	else
		 		e2="si"
		 	fi
		 	if [[ ${EPISODIO[torrent]} == "" ]]; then
		 		e2="$e2 no"
		 	else
		 		e2="$e2 si"
		 	fi
		 	e="$e $e2"
		else
			e="$e -1"
		fi
		echo "$e"
	done
}

function medios.listSeries.info() {
    echo "medios.listSeries - Lista solo las series."
    echo
    echo -e "\tArgumentos: -"
    echo
    echo "De cada serie se muestra el episodio por el que se llega el usuario."
    echo
    echo "Ejemplo:"
    echo -e "\tsintel -f medios.listSeries"
}

#Listar todas las películas
#En el formato id titulo
function medios.listPeliculas() {
	local datos=$(db.executeQuery "select * from medio")
	local e=""
	local e2=""
	local res=""

	readarray -t datosa <<< "$datos"
	for medio in "${datosa[@]}"; do
		film.parse "$medio"
		e=""
		e="${PELICULA[id]} ${PELICULA[titulo]}"
		echo "$e"
	done
}

function medios.listPeliculas.info() {
    echo "medios.listPeliculas - Lista las películas que están en la base de datos."
    echo
    echo -e "\tArgumentos: -"
    echo
    echo "Ejemplo:"
    echo -e "\tsintel -f medios.listPeliculas"
}

function medios.findSeries() {
	local busqueda="$@"
	local datos=$(db.executeQuery "select * from medio where esserie = 1 and titulo like \"%$busqueda%\"")
	local e=""
	local e2=""
	local res=""

	readarray -t datosa <<< "$datos"
	for medio in "${datosa[@]}"; do
		film.parse "$medio"
		e=""
		e="${PELICULA[id]} ${PELICULA[titulo]}"
		
		local ds=$(db.executeQuery "select * from episodio where idmedio = ${PELICULA[id]} and esvisto = 0 order by temporada, episodio limit 1")
		if [[ $ds != "" ]]; then
		 	series.parseEpisodio "$ds"
		 	e="$e ${EPISODIO[temporada]}x${EPISODIO[episodio]} ${EPISODIO[id]}"
		 	e2=""
		 	if [[ ${EPISODIO[fichero]} == "" ]]; then
		 		e2="no"
		 	else
		 		e2="si"
		 	fi
		 	if [[ ${EPISODIO[torrent]} == "" ]] || [[ ${EPISODIO[torrent]} == "-1" ]]; then
		 		e2="$e2 no"
		 	else
		 		e2="$e2 si"
		 	fi
		 	e="$e $e2"
		else
			e="$e -1"
		fi
		echo "$e"
	done
}

function medios.findSeries.info() {
    echo "medios.findSeries - Encontrar series."
    echo
    echo -e "\tArgumentos: cadena de búsqueda"
    echo
    echo "Busca series cuyo título coincida con la cadena de búsqueda indicada."
    echo
    echo "Ejemplo:"
    echo -e "\tsintel -f medios.findSeries:poirot"
    echo -e "\tsintel -f medios.findSeries:\"agatha christie\""
}

function medios.findPeliculas() {
	local busqueda="$@"
	local datos=$(db.executeQuery "select * from medio where esserie = 0 and titulo like \"%$busqueda%\"")
	local e=""
	local e2=""
	local res=""

	readarray -t datosa <<< "$datos"
	for medio in "${datosa[@]}"; do
		film.parse "$medio"
		e=""
		e="${PELICULA[id]} ${PELICULA[titulo]} ${PELICULA[fichero]}"
		echo "$e"
	done
}

function medios.findPeliculas.info() {
    echo "medios.findPeliculas - Encontrar películas."
    echo
    echo -e "\tArgumentos: cadena de búsqueda"
    echo
    echo "Muestra películas cuyos títulos coincidan con la cadena de búsqueda."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.findPeliculas:northwest"
    echo -e "\tsubtek -f medios.findPeliculas\"star trek\""
}

function medios.listEpisodios() {
    [[ $# != 1 ]] && ( die $(iargs 1 "id") )
	local idmedio="$1"
	local e=""

	local datos=$(db.executeQuery "select * from episodio where idmedio = $idmedio order by temporada, episodio")
	readarray -t datosa <<< "$datos"
	for episodio in "${datosa[@]}"; do
		series.parseEpisodio "$episodio"

		e="${EPISODIO[id]} ${EPISODIO[temporada]} ${EPISODIO[episodio]} ${EPISODIO[fichero]} ${EPISODIO[torrent]} ${EPISODIO[esvisto]} ${EPISODIO[esdescargado]}"
		echo "$e"
	done
}

function medios.listEpisodios.info() {
    echo "medios.listEpisodios - Listar episodios de una serie"
    echo
    echo -e "\tArgumentos: id de la serie"
    echo
    echo "Mustra una lista de todos los episodios de la serie cuyo id"
    echo "se ha especificado como argumento."
    echo
    echo "De cada episodio se dan los siguientes datos:"
    echo "id, idmedio, temporada, episodio, fichero, torrent, esvisto, esdescargado"
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.listEpisodios:871"
}

function medios.extractTe() {
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
	local medio="$1"
	local te=""
	local rem=""
	local aux=""

	medio=$(basename "$medio")

	local EXPS=( '[0-9]{1,3}[xX][0-9]{1,4}' '[sS][0-9]{1,3}[eE][0-9]{1,4}' '[0-9]{1,3}[oO][fF][0-9]{1,4}' 'Cap.[0-9]{3}' )

	let i=0
	for exp in "${EXPS[@]}"; do
		te=$(grep -oE $exp <<< "$medio")
		if [[ "$te" != "" ]]; then
			case "$i" in
				0 )
					break
					;;
				1 )
					aux=${te:1}
					rem=$(grep -oE '[eE]' <<< "$aux")
					$DEBUG && echo "rem: $rem" > /dev/tty
					aux=${aux/$rem/x}
					$DEBUG && echo "aux: $aux" > /dev/tty
					te="$aux"
					break
					;;
				2 )
					rem=$(grep -oE '[oO][fF]' <<< $te)
					$DEBUG && echo "rem: $rem" > /dev/tty
					aux=${te/$rem/x}
					$DEBUG && echo "aux: $aux" > /dev/tty
					te="$aux"
					break
					;;
				3 )
					rem=$(grep -oE '[0-9]{3}' <<< $te)
					te="${rem:0:1}x${rem:1:2}"
					;;
				* )
					echo "ERROR: Esto no debería suceder 2" > /dev/tty
					break
			esac
		fi
		(( i++ ))
	done

	echo "$te"
}

function medios.extractTe.info() {
    echo "medios.extractTe - Extrae la temporada y el episodio del nombre del fichero."
    echo
    echo -e "\tArgumentos: ruta de fichero"
    echo
    echo "Intenta extraer la temporada y el número de episodio del nombre del"
    echo "fichero que contiene el episodio."
    echo
    echo "Puesto que los medios se descargan desde diferentes fuentes, los formatos"
    echo "en que están representados estos valores varían."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -n medios.extractTe:\"Elementary s07e01.mp4\""
    echo -e "\tsintel -n medios.extractTe:\"Dark 01x04.mjv\""
}

function medios.extractTe2() {
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
	local medio="$1"
	local te=""

	medio=$(basename "$medio")

	local EXPS=( '[0-9]{1,3}[xX][0-9]{1,4}' '[sS][0-9]{1,3}[eE][0-9]{1,4}' '[0-9]{1,3}[oO][fF][0-9]{1,4}' 'Cap.[0-9]{3}' )

	let i=0
	for exp in "${EXPS[@]}"; do
		te=$(grep -oE $exp <<< "$medio")
		if [[ "$te" != "" ]]; then
		    break
		fi
		(( i++ ))
	done

	echo "$te"
}

function medios.fixTitulo() {
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
	local medio="$*"

	medio="$(tr -d '[\[\]]' <<< $medio)"
	medio="$(tr -d '[\(\)]' <<< $medio)"

	local EXPS=( '[0-9]{1,3}[xX][0-9]{1,4}' '[sS][0-9]{1,3}[eE][0-9]{1,4}' '[0-9]{1,3}[oO][fF][0-9]{1,4}' '[hH][dD][tT][vV]' '[xX][vV][iI][dD]' '[dD][iI][vV][xX]' '[dD][vV][dD]' '[bB][dD][rR][iI][pP]' '[hH][dD][rR][iI][pP]' '[tT][sS]' '[sS][cC][rR][eE][eE][nN][eE][rR]' 'www.*.["com""net""es"]' )
	local f=""

	for exp in "${EXPS[@]}"; do
		$DEBUG && echo "Exp: >$exp<" > /dev/tty
		f=$(grep -oE "$exp" <<< "$medio")
		while [[ "$f" != "" ]]; do
			readarray -t af <<< "$f"
			for c in "${af[@]}"; do
				$DEBUG && echo "F: >$c<" > /dev/tty	
				medio="${medio/$c/}"
				$DEBUG && echo "Medio: $medio" > /dev/tty
			done
			f=$(grep -oE "$exp" <<< "$medio")
		done
	done

	echo "$medio"
}

function medios.fixTitulo.info() {
    echo "medios.fixTitulo - Elimina partes innecesarias de un título."
    echo
    echo -e "\tArgumentos: título"
    echo
    echo "Reduce el título a nombre de serie temporada y episodo, eliminando"
    echo "todo lo superfluo."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.fixTitulo:\"Elementary 07of01 [Elitetorrent] [DVDRIP].mp4\""
}

function medios.getTituloSerie() {
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
	local medio="$1"

	# Extraemos el nombre del archivo sin su ruta
	local aux="${medio##*/}"
	# Eliminamos la extensión
	aux="${aux%.*}"	

	# Eliminamos todo a partir de temporadaxepisodio
	local te=$(medios.extractTe2 "$aux")
	local aux2=${aux%%$te*}
	if [[ "$aux2" == "" ]]; then
		aux2="$aux"
	fi

	# Eliminamos elementos no deseados del título
	aux=$(medios.fixTitulo "$aux2")
	local stemporada=$(grep -oE 'Temporada [0-9]{1,2}' <<< $aux)
	aux2=${aux%%$stemporada*}
	if [[ "$aux2" == "" ]]; then
	    aux2="$aux"
	fi
	aux="$aux2"

	# Trocamos posibles guiones bajos y puntos, en espacios
	aux=$(tr '_' ' ' <<< "$aux")
	aux=$(tr '.' ' ' <<< "$aux")

	# Eliminamos guiones
	aux=$(tr -d '-' <<< $aux)

	# Se devuelve el resultado
	echo $(trim "$aux")
}

function medios.getTituloSerie.info() {
    echo "medios.getTituloSerie - Obtiene el nombre de la serie."
    echo
    echo -e "\tArgumentos: ruta de archivo"
    echo
    echo "Reduce la ruta completa y nombre de un archivo de medio al"
    echo "título de la serie al que pertenece."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.getTituloSerie:\"/home/mhyst/Extra/Dead zone 1x08 [xVID].avi\""
}

function medios.getTituloPelicula() {
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
	local medio="$1"

	local aux="${medio##*/}"
	aux="${aux%.*}"

	# Eliminamos elementos no deseados del título
	aux=$(medios.fixTitulo "$aux")
	#aux="${aux%%[0-9]*}"
	#aux="${aux%%(*}"
	#aux="${aux%%[*}"
	# aux="${aux%%HDTV*}"
	aux=$(tr '.' ' ' <<< $aux)
	aux=$(tr -d '-' <<< $aux)
	#aux=$(tr -d "'" <<< $aux)
	echo $(trim "$aux")
}

function medios.getTituloPelicula.info() {
    echo "medios.getTituloPelicula - Obtiene el título de la película del nombre del fichero."
    echo
    echo -e "\tArgumentos: fichero"
    echo
    echo "Limpia el nombre del fichero de la ruta y todo lo superfluo, para"
    echo "obtener el título de la película."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.getTituloPelicula:\"Wonder [HDRip][VOSE][wWw.EliteTorrent.BiZ].mp4\""
}

function medios.detectar() {
	local folder="$1"
	local re='[0-9]{1,2}x[0-9]{1,3}'
	local te=""
	local temporada=""
	local episodio=""
	local titulo=""
	local fichero=""
	local torrent=""
	local aux=""
	local id=""
	local epid=""

	if [ ! -d "$folder" ]; then
	 	echo "El directorio >$folder< no existe"
	 	exit
	fi
	cd "$folder"
	find * -name '*.avi' -o -name '*.mp4' -o -name '*.mkv' -type f | sort > /tmp/films.txt

	if [[ "${folder: -1}" != "/" ]]; then
	    folder="$folder/"
	fi

	readarray -t datosa < /tmp/films.txt
	for medio in "${datosa[@]}"; do

		fichero="$folder$medio"

		te=$(medios.extractTe "$medio")

		if [[ "$te" != "" ]]; then
			titulo=$(medios.getTituloSerie "$medio")
			echo "Serie: $titulo"
			#Es una serie tenemos que crear la serie si no existe y crear el episodio correspondiente
			#Extraemos el episodio y la temporada que es
			IFS='x' read -a aux <<< "$te"; IFS=" "
			temporada="${aux[0]}"
			episodio="${aux[1]}"
			if [[ "$temporada" == "" ]] || [[ "$episodio" == "" ]]; then
				echo "ERROR: No se pudo obtener te2 en >$medio<"; continue;
			else
				echo "Temporada: $temporada, Episodio: $episodio"
			fi
			#id=$(series.getIdByTitulo "$titulo")
			id=$(medios.determineSeries "$titulo")
			if [[ "$id" == "-1" ]]; then
				#No existe, la creamos
				series.add "$titulo"
				id="$ROWID"
			fi

			$DEBUG && echo "Comprobando si el episodio existe"
			epid=$(series.getEpisodioId "$id" "$temporada" "$episodio")
			$DEBUG && echo "Comprobado $epid"
			if [[ "$epid" == "" ]]; then
				$DEBUG && echo "Intentando insertar episodio..."
				#Puesto que ya existe, añadimos el episodio
				series.addEpisodio "$id" "$temporada" "$episodio" "$fichero" "-1"
				$DEBUG && echo "Intentado!"
			else
				echo "Ep episodio ya está en la base de datos."
			fi
		else
			#Si es una película, simplemente añadimos la película
			titulo=$(medios.getTituloPelicula "$medio")
			echo "Pelicula: $titulo"
			id=$(film.getByTitulo "$titulo")
			if [[ "$id" == "" ]]; then
				#No existe, la creamos
				film.add "$titulo" "$fichero" "-1"
				id="$ROWID"
			else
				echo "La película ya existe en la base de datos"
			fi	
		fi
	done
}

function medios.detectar.info() {
    echo "medios.detectar - Añade medios a la base de datos."
    echo
    echo -e "\tArgumentos: ruta de carpeta"
    echo
    echo "Escanea una carpeta y todos sus subdirectorios en busca de medios."
    echo "Es capaz de diferenciar las series de las películas."
    echo "Todo lo que encuentra lo añade a la base de datos."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.detectar:/home/mhyst/Descargas/"
}

#Determinar el id de la serie que estamos buscando.
#En algunos casos es posible que haya varias series con nombres similares.
#Esta función permitirá al usuario seleccionar entre ellas la que quiere.
function medios.determineSeries() {
	local busqueda="$@"

	local devueltos=($(series.find "$busqueda"))
	
	if [[ ${#devueltos[@]} == 0 ]]; then
		echo "-1"
		exit
	fi

	if [[ ${#devueltos[@]} == 1 ]]; then
		#echo "Se devuelve solo uno?" > /dev/tty
		series.parse "${devueltos[0]}"

		echo "${SERIE[id]}"
	else
		echo -e "\e[47m\e[31m Series coincidentes \e[0m\n" > /dev/tty
		local i=0
		for reg in "${devueltos[@]}"; do
		        #echo "Antes del parse" > /dev/tty
			series.parse "$reg"
			#echo "Después del parse" > /dev/tty
			echo " $i:	${SERIE[titulo]}" > /dev/tty
			#echo "Antes del i++" > /dev/tty
			((i=i+1))
			#echo "Después del i++" > /dev/tty
		done
		#echo "Antes del limite" > /dev/tty
		local LIMITE=$(( ${#devueltos[*]} - 1 ))
		#echo "Después del límite: $LIMITE" > /dev/tty
		local CHOSENID=$(userChoice $LIMITE "Seleccione la serie:")
		series.parse "${devueltos[$CHOSENID]}"
		echo "${SERIE[id]}"
	fi
}

function medios.determineSeries.info() {
    echo "medios.determineSeries - Determinar el id de la serie por una cadena de búsqueda."
    echo
    echo -e "\tArgumentos: cadena de búsqueda"
    echo
    echo "Esta función hace uso de medios.find para tratar de determinar cual es el id"
    echo "de la serie a partir de una cadena de búsqueda."
    echo "En caso de haber varias posibilidades se le ofrece al usuario la elección."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -f medios.determineSeries:dark"
}

#Determinar si un episodio de una serie está ya descargado
function medios.isDownloaded () {
    [[ $# != 2 ]] && ( die $(iargs 2 "id y te") )
    

	local id="$1"
	local te="$2"

	$DEBUG && echo "ID: $id, TE: $te" > /dev/tty

	declare -a aux
	IFS='x' read -a aux <<< "$te"
	temporada="${aux[0]}"
	episodio="${aux[1]}"
	unset IFS
	if [[ "$temporada" == "" ]] || [[ "$episodio" == "" ]]; then
	    echo "ERROR: No se pudo obtener te2 en >$medio<" > /dev/tty
	    echo "false"
	    exit
	fi

	if [[ "$id" == "" ]] || [[ "$id" == "-1" ]]; then
	    echo "ERROR: No se pudo determinar el id de la serie: $serie" > /dev/tty
	    echo "false"
	    exit
	fi

	local epid=$(series.getEpisodioId "$id" "$temporada" "$episodio")
	
	if [[ "$epid" == "" ]]; then
	    echo "false"
	    exit
	else
	    local reg=$(series.getEpisodioById "$epid")

	    if [[ "$reg" == "" ]]; then
		echo "ERROR: No se pudo obtener el episodio por el ID obtenido"
		echo "false"
		exit
	    fi
	    series.parse "$reg"
	    if [[ "${SERIE[fichero]}" == "" ]]; then
		echo "false"
	    else
		echo "true"
	    fi
	fi
}

function medios.isDownloaded.info() {
    echo "medios.isDowloaded - Averigua si de una serie tenemos descargado un episodio concreto."
    echo
    echo -e "\tArgumentos: id, te"
    echo
    echo "id es el id de la serie, mientras que te es la temporada y el episodio expresados"
    echo "como temporadaxepisodio de forma númérica. Ej.: 01x03."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -n medios.isDownloaded:\"871|10x07\""
}

#Determinar si un episodio de una serie está ya descargado
function medios.isDownloaded2 () {
    [[ $# != 2 ]] && ( die $(iargs 2 "título y te") )
    

	local serie="$1"
	local te="$2"

	IFS='x' read -a aux <<< "$te"; IFS=" "
	temporada="${aux[0]}"
	episodio="${aux[1]}"
	if [[ "$temporada" == "" ]] || [[ "$episodio" == "" ]]; then
		echo "ERROR: No se pudo obtener te2 en >$medio<" > /dev/tty
		echo "-1"
		exit
	fi

	local id=$(medios.determineSeries "$serie")

	if [[ "$id" != "" ]] && [[ "$id" != "-1" ]]; then
		echo "ERROR: No se pudo determinar el id de la serie: $serie" > /dev/tty
		echo "-1"
		exit
	fi

	local epid=$(series.getEpisodioId "$id" "$temporada" "$episodio")

	if [[ "$epid" == "" ]]; then
		echo "false"
		exit
	else
		local reg=$(series.getEpisodioById "$epid")
		if [[ "$reg" == "" ]]; then
			echo "ERROR: No se pudo obtener el episodio por el ID obtenido"
			echo "-1"
			exit
		fi
		series.parse "$reg"
		if [[ "${SERIE[fichero]}" == "" ]]; then
			echo "false"
		else
			echo "true"
		fi
	fi
}

function medios.isDownloaded2.info() {
    echo "medios.isDownloaded2 - Determina si cierto episodio de una serie está descargado."
    echo
    echo -e "\tArgumentos: titulo, te"
    echo
    echo "Esta función es idéntica a 'medios.isDownloaded' salvo que esta permite"
    echo "indicar el título de la serie en lugar de su id. Usa una llamada a "
    echo "medios.determineSeries para obtener el id de la serie."
    echo
    echo "te es la temporada y el episodio separados por una x."
    echo
    echo "Ejemplos:"
    echo -e "\tsintel -n medios.isDownloaded2:\"poirot|10x03\""
}