~mhysterio/sintel-media/trunk

84 by mhyst
Correción: algunos módulos no funcionaban sin el shebang. Así que lo hemos vuelto a añadir
1
#!/bin/bash
48 by mhyst
Versión 2.3.2
2
# This file is part of Sintel.
3
#
4
# Sintel is free software: you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation, either version 3 of the License, or
7
# (at your option) any later version.
8
#
9
# Sintel is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with Sintel.  If not, see <https://www.gnu.org/licenses/>.
16
#
17
#
1 by mhyst
Primer commit
18
#Listar series y películas existentes en la base de datos de varias formas
19
33 by mhyst
Documentando funciones (III) 19/07/2019
20
function medios.info() {
21
    echo "medios - Módulo de medios"
22
    echo
23
    echo "Tareas sobre medios en general."
24
    echo "Se usan funciones de otros módulos."
25
    echo
26
}
1 by mhyst
Primer commit
27
28
#Listar todos los medios
29
#En el formato siguiente:
30
#De las películas:
31
#id titulo pelicula
32
#De las series igual que la función siguiente a esta (medios.listSeries)
33
function medios.listAll() {
34
	local datos=$(db.executeQuery "select * from medio")
35
	local e=""
36
	local e2=""
37
	local res=""
38
39
	readarray -t datosa <<< "$datos"
40
	for medio in "${datosa[@]}"; do
41
		film.parse "$medio"
42
		e=""
43
		e="${PELICULA[id]} ${PELICULA[titulo]}"
44
		if [[ ${PELICULA[esserie]} == 1 ]]; then
45
			e="$e serie"
46
			local ds=$(db.executeQuery "select * from episodio where idmedio = ${PELICULA[id]} and esvisto = 0 order by temporada, episodio limit 1")
47
			if [[ $ds != "" ]]; then
48
			 	series.parseEpisodio "$ds"
49
			 	e="$e ${EPISODIO[temporada]}x${EPISODIO[episodio]}"
50
			 	e2=""
51
			 	if [[ ${EPISODIO[fichero]} == "" ]]; then
52
			 		e2="no"
53
			 	else
54
			 		e2="si"
55
			 	fi
56
			 	if [[ ${EPISODIO[torrent]} == "" ]]; then
57
			 		e2="$e2 no"
58
			 	else
59
			 		e2="$e2 si"
60
			 	fi
61
			 	e="$e $e2"			 	
62
			else
63
			 	e="$e -1"
64
			fi
65
		else
66
			e="$e pelicula"
67
		fi
68
		echo "$e"
69
	done
70
}
71
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
72
function medios.listAll.info() {
73
    echo "medios.listAll - Listar todos los medios. Películas y series."
74
    echo
75
    echo -e "\tArgumentos: -"
76
    echo
77
    echo "Si el medio es una serie se muestra el episodio por el que llega el usuario."
78
    echo
79
    echo "Ejemplo:"
80
    echo -e "\tsintel -f medios.listAll"
81
}
82
1 by mhyst
Primer commit
83
#Listar todas las series
84
#El formato de salida es el siguiente:
85
#id titulo episodio descargado descargando
86
#
87
#El episodio será dado en el formato temporadaxepisodio, sin espacios
88
#Descargado y descargando serán "si" o "no" en minúsculas.
89
#
90
#Si la serie no tiene episodios, en lugar del episodio mostrará "-1" y no
91
#dará más detalles.
92
function medios.listSeries() {
93
	local datos=$(db.executeQuery "select * from medio where esserie = 1")
94
	local e=""
95
	local e2=""
96
	local res=""
97
98
	readarray -t datosa <<< "$datos"
99
	for medio in "${datosa[@]}"; do
100
		film.parse "$medio"
101
		e=""
102
		e="${PELICULA[id]} ${PELICULA[titulo]}"
103
		
104
		local ds=$(db.executeQuery "select * from episodio where idmedio = ${PELICULA[id]} and esvisto = 0 order by temporada, episodio limit 1")
105
		if [[ $ds != "" ]]; then
106
		 	series.parseEpisodio "$ds"
107
		 	e="$e ${EPISODIO[temporada]}x${EPISODIO[episodio]}"
108
		 	e2=""
109
		 	if [[ ${EPISODIO[fichero]} == "" ]]; then
110
		 		e2="no"
111
		 	else
112
		 		e2="si"
113
		 	fi
114
		 	if [[ ${EPISODIO[torrent]} == "" ]]; then
115
		 		e2="$e2 no"
116
		 	else
117
		 		e2="$e2 si"
118
		 	fi
119
		 	e="$e $e2"
120
		else
121
			e="$e -1"
122
		fi
123
		echo "$e"
124
	done
125
}
126
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
127
function medios.listSeries.info() {
128
    echo "medios.listSeries - Lista solo las series."
129
    echo
130
    echo -e "\tArgumentos: -"
131
    echo
132
    echo "De cada serie se muestra el episodio por el que se llega el usuario."
133
    echo
134
    echo "Ejemplo:"
135
    echo -e "\tsintel -f medios.listSeries"
136
}
137
1 by mhyst
Primer commit
138
#Listar todas las películas
139
#En el formato id titulo
140
function medios.listPeliculas() {
141
	local datos=$(db.executeQuery "select * from medio")
142
	local e=""
143
	local e2=""
144
	local res=""
145
146
	readarray -t datosa <<< "$datos"
147
	for medio in "${datosa[@]}"; do
148
		film.parse "$medio"
149
		e=""
150
		e="${PELICULA[id]} ${PELICULA[titulo]}"
151
		echo "$e"
152
	done
153
}
154
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
155
function medios.listPeliculas.info() {
156
    echo "medios.listPeliculas - Lista las películas que están en la base de datos."
157
    echo
158
    echo -e "\tArgumentos: -"
159
    echo
160
    echo "Ejemplo:"
161
    echo -e "\tsintel -f medios.listPeliculas"
162
}
163
1 by mhyst
Primer commit
164
function medios.findSeries() {
11 by mhyst
Búsquedas por varias palabras en llamadas a funciones (-f)
165
	local busqueda="$@"
1 by mhyst
Primer commit
166
	local datos=$(db.executeQuery "select * from medio where esserie = 1 and titulo like \"%$busqueda%\"")
167
	local e=""
168
	local e2=""
169
	local res=""
170
171
	readarray -t datosa <<< "$datos"
172
	for medio in "${datosa[@]}"; do
173
		film.parse "$medio"
174
		e=""
175
		e="${PELICULA[id]} ${PELICULA[titulo]}"
176
		
177
		local ds=$(db.executeQuery "select * from episodio where idmedio = ${PELICULA[id]} and esvisto = 0 order by temporada, episodio limit 1")
178
		if [[ $ds != "" ]]; then
179
		 	series.parseEpisodio "$ds"
180
		 	e="$e ${EPISODIO[temporada]}x${EPISODIO[episodio]} ${EPISODIO[id]}"
181
		 	e2=""
182
		 	if [[ ${EPISODIO[fichero]} == "" ]]; then
183
		 		e2="no"
184
		 	else
185
		 		e2="si"
186
		 	fi
187
		 	if [[ ${EPISODIO[torrent]} == "" ]] || [[ ${EPISODIO[torrent]} == "-1" ]]; then
188
		 		e2="$e2 no"
189
		 	else
190
		 		e2="$e2 si"
191
		 	fi
192
		 	e="$e $e2"
193
		else
194
			e="$e -1"
195
		fi
196
		echo "$e"
197
	done
198
}
199
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
200
function medios.findSeries.info() {
30 by mhyst
Documentando funciones 19/07/2019
201
    echo "medios.findSeries - Encontrar series."
202
    echo
203
    echo -e "\tArgumentos: cadena de búsqueda"
204
    echo
205
    echo "Busca series cuyo título coincida con la cadena de búsqueda indicada."
206
    echo
207
    echo "Ejemplo:"
208
    echo -e "\tsintel -f medios.findSeries:poirot"
209
    echo -e "\tsintel -f medios.findSeries:\"agatha christie\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
210
}
211
1 by mhyst
Primer commit
212
function medios.findPeliculas() {
11 by mhyst
Búsquedas por varias palabras en llamadas a funciones (-f)
213
	local busqueda="$@"
1 by mhyst
Primer commit
214
	local datos=$(db.executeQuery "select * from medio where esserie = 0 and titulo like \"%$busqueda%\"")
215
	local e=""
216
	local e2=""
217
	local res=""
218
219
	readarray -t datosa <<< "$datos"
220
	for medio in "${datosa[@]}"; do
221
		film.parse "$medio"
222
		e=""
10 by mhyst
Correcciones menores
223
		e="${PELICULA[id]} ${PELICULA[titulo]} ${PELICULA[fichero]}"
1 by mhyst
Primer commit
224
		echo "$e"
225
	done
226
}
227
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
228
function medios.findPeliculas.info() {
30 by mhyst
Documentando funciones 19/07/2019
229
    echo "medios.findPeliculas - Encontrar películas."
230
    echo
231
    echo -e "\tArgumentos: cadena de búsqueda"
232
    echo
233
    echo "Muestra películas cuyos títulos coincidan con la cadena de búsqueda."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
234
    echo
235
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
236
    echo -e "\tsintel -f medios.findPeliculas:northwest"
237
    echo -e "\tsubtek -f medios.findPeliculas\"star trek\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
238
}
239
1 by mhyst
Primer commit
240
function medios.listEpisodios() {
79 by mhyst
Probando nuevo sistema de control de argumentos
241
    [[ $# != 1 ]] && ( die $(iargs 1 "id") )
1 by mhyst
Primer commit
242
	local idmedio="$1"
243
	local e=""
244
245
	local datos=$(db.executeQuery "select * from episodio where idmedio = $idmedio order by temporada, episodio")
246
	readarray -t datosa <<< "$datos"
247
	for episodio in "${datosa[@]}"; do
248
		series.parseEpisodio "$episodio"
249
3 by mhyst
Aún en una fase temprana, pero funcional
250
		e="${EPISODIO[id]} ${EPISODIO[temporada]} ${EPISODIO[episodio]} ${EPISODIO[fichero]} ${EPISODIO[torrent]} ${EPISODIO[esvisto]} ${EPISODIO[esdescargado]}"
1 by mhyst
Primer commit
251
		echo "$e"
252
	done
253
}
254
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
255
function medios.listEpisodios.info() {
30 by mhyst
Documentando funciones 19/07/2019
256
    echo "medios.listEpisodios - Listar episodios de una serie"
257
    echo
258
    echo -e "\tArgumentos: id de la serie"
259
    echo
260
    echo "Mustra una lista de todos los episodios de la serie cuyo id"
261
    echo "se ha especificado como argumento."
262
    echo
263
    echo "De cada episodio se dan los siguientes datos:"
264
    echo "id, idmedio, temporada, episodio, fichero, torrent, esvisto, esdescargado"
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
265
    echo
266
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
267
    echo -e "\tsintel -f medios.listEpisodios:871"
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
268
}
269
7 by mhyst
Perfeccionando medios.getTitulo
270
function medios.extractTe() {
79 by mhyst
Probando nuevo sistema de control de argumentos
271
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
7 by mhyst
Perfeccionando medios.getTitulo
272
	local medio="$1"
273
	local te=""
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
274
	local rem=""
275
	local aux=""
7 by mhyst
Perfeccionando medios.getTitulo
276
73 by mhyst
Mejora de extractTe: ahora reconoce episodios del tipo Cap.101
277
	medio=$(basename "$medio")
278
279
	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}' )
7 by mhyst
Perfeccionando medios.getTitulo
280
85 by mhyst
Corregidos errores en error, generic, medios y ver
281
	let i=0
7 by mhyst
Perfeccionando medios.getTitulo
282
	for exp in "${EXPS[@]}"; do
283
		te=$(grep -oE $exp <<< "$medio")
284
		if [[ "$te" != "" ]]; then
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
285
			case "$i" in
286
				0 )
287
					break
288
					;;
289
				1 )
290
					aux=${te:1}
291
					rem=$(grep -oE '[eE]' <<< "$aux")
292
					$DEBUG && echo "rem: $rem" > /dev/tty
293
					aux=${aux/$rem/x}
294
					$DEBUG && echo "aux: $aux" > /dev/tty
295
					te="$aux"
296
					break
297
					;;
298
				2 )
299
					rem=$(grep -oE '[oO][fF]' <<< $te)
300
					$DEBUG && echo "rem: $rem" > /dev/tty
301
					aux=${te/$rem/x}
302
					$DEBUG && echo "aux: $aux" > /dev/tty
303
					te="$aux"
304
					break
305
					;;
73 by mhyst
Mejora de extractTe: ahora reconoce episodios del tipo Cap.101
306
				3 )
307
					rem=$(grep -oE '[0-9]{3}' <<< $te)
308
					te="${rem:0:1}x${rem:1:2}"
309
					;;
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
310
				* )
311
					echo "ERROR: Esto no debería suceder 2" > /dev/tty
312
					break
313
			esac
7 by mhyst
Perfeccionando medios.getTitulo
314
		fi
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
315
		(( i++ ))
7 by mhyst
Perfeccionando medios.getTitulo
316
	done
317
318
	echo "$te"
319
}
320
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
321
function medios.extractTe.info() {
30 by mhyst
Documentando funciones 19/07/2019
322
    echo "medios.extractTe - Extrae la temporada y el episodio del nombre del fichero."
323
    echo
324
    echo -e "\tArgumentos: ruta de fichero"
325
    echo
326
    echo "Intenta extraer la temporada y el número de episodio del nombre del"
327
    echo "fichero que contiene el episodio."
328
    echo
329
    echo "Puesto que los medios se descargan desde diferentes fuentes, los formatos"
330
    echo "en que están representados estos valores varían."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
331
    echo
332
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
333
    echo -e "\tsintel -n medios.extractTe:\"Elementary s07e01.mp4\""
334
    echo -e "\tsintel -n medios.extractTe:\"Dark 01x04.mjv\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
335
}
336
82 by mhyst
Corregidos errores en detectar, en ver.play y en ver.cache
337
function medios.extractTe2() {
338
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
339
	local medio="$1"
340
	local te=""
341
342
	medio=$(basename "$medio")
343
344
	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}' )
345
85 by mhyst
Corregidos errores en error, generic, medios y ver
346
	let i=0
82 by mhyst
Corregidos errores en detectar, en ver.play y en ver.cache
347
	for exp in "${EXPS[@]}"; do
348
		te=$(grep -oE $exp <<< "$medio")
349
		if [[ "$te" != "" ]]; then
350
		    break
351
		fi
352
		(( i++ ))
353
	done
354
355
	echo "$te"
356
}
357
7 by mhyst
Perfeccionando medios.getTitulo
358
function medios.fixTitulo() {
79 by mhyst
Probando nuevo sistema de control de argumentos
359
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
7 by mhyst
Perfeccionando medios.getTitulo
360
	local medio="$*"
361
362
	medio="$(tr -d '[\[\]]' <<< $medio)"
363
	medio="$(tr -d '[\(\)]' <<< $medio)"
364
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
365
	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"]' )
7 by mhyst
Perfeccionando medios.getTitulo
366
	local f=""
367
368
	for exp in "${EXPS[@]}"; do
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
369
		$DEBUG && echo "Exp: >$exp<" > /dev/tty
7 by mhyst
Perfeccionando medios.getTitulo
370
		f=$(grep -oE "$exp" <<< "$medio")
371
		while [[ "$f" != "" ]]; do
372
			readarray -t af <<< "$f"
373
			for c in "${af[@]}"; do
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
374
				$DEBUG && echo "F: >$c<" > /dev/tty	
7 by mhyst
Perfeccionando medios.getTitulo
375
				medio="${medio/$c/}"
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
376
				$DEBUG && echo "Medio: $medio" > /dev/tty
7 by mhyst
Perfeccionando medios.getTitulo
377
			done
378
			f=$(grep -oE "$exp" <<< "$medio")
379
		done
380
	done
381
382
	echo "$medio"
383
}
384
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
385
function medios.fixTitulo.info() {
30 by mhyst
Documentando funciones 19/07/2019
386
    echo "medios.fixTitulo - Elimina partes innecesarias de un título."
387
    echo
388
    echo -e "\tArgumentos: título"
389
    echo
390
    echo "Reduce el título a nombre de serie temporada y episodo, eliminando"
391
    echo "todo lo superfluo."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
392
    echo
393
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
394
    echo -e "\tsintel -f medios.fixTitulo:\"Elementary 07of01 [Elitetorrent] [DVDRIP].mp4\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
395
}
396
1 by mhyst
Primer commit
397
function medios.getTituloSerie() {
79 by mhyst
Probando nuevo sistema de control de argumentos
398
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
1 by mhyst
Primer commit
399
	local medio="$1"
400
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
401
	# Extraemos el nombre del archivo sin su ruta
1 by mhyst
Primer commit
402
	local aux="${medio##*/}"
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
403
	# Eliminamos la extensión
404
	aux="${aux%.*}"	
405
406
	# Eliminamos todo a partir de temporadaxepisodio
82 by mhyst
Corregidos errores en detectar, en ver.play y en ver.cache
407
	local te=$(medios.extractTe2 "$aux")
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
408
	local aux2=${aux%%$te*}
409
	if [[ "$aux2" == "" ]]; then
410
		aux2="$aux"
411
	fi
412
413
	# Eliminamos elementos no deseados del título
414
	aux=$(medios.fixTitulo "$aux2")
82 by mhyst
Corregidos errores en detectar, en ver.play y en ver.cache
415
	local stemporada=$(grep -oE 'Temporada [0-9]{1,2}' <<< $aux)
416
	aux2=${aux%%$stemporada*}
417
	if [[ "$aux2" == "" ]]; then
418
	    aux2="$aux"
419
	fi
420
	aux="$aux2"
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
421
422
	# Trocamos posibles guiones bajos y puntos, en espacios
6 by mhyst
Mejora del interfaz de ver.serie y correcciones en medios.detectar
423
	aux=$(tr '_' ' ' <<< "$aux")
424
	aux=$(tr '.' ' ' <<< "$aux")
7 by mhyst
Perfeccionando medios.getTitulo
425
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
426
	# Eliminamos guiones
1 by mhyst
Primer commit
427
	aux=$(tr -d '-' <<< $aux)
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
428
429
	# Se devuelve el resultado
1 by mhyst
Primer commit
430
	echo $(trim "$aux")
431
}
432
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
433
function medios.getTituloSerie.info() {
30 by mhyst
Documentando funciones 19/07/2019
434
    echo "medios.getTituloSerie - Obtiene el nombre de la serie."
435
    echo
436
    echo -e "\tArgumentos: ruta de archivo"
437
    echo
438
    echo "Reduce la ruta completa y nombre de un archivo de medio al"
439
    echo "título de la serie al que pertenece."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
440
    echo
441
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
442
    echo -e "\tsintel -f medios.getTituloSerie:\"/home/mhyst/Extra/Dead zone 1x08 [xVID].avi\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
443
}
444
1 by mhyst
Primer commit
445
function medios.getTituloPelicula() {
79 by mhyst
Probando nuevo sistema de control de argumentos
446
    [[ $# != 1 ]] && ( die $(iargs 1 "fichero") )
1 by mhyst
Primer commit
447
	local medio="$1"
448
449
	local aux="${medio##*/}"
450
	aux="${aux%.*}"
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
451
452
	# Eliminamos elementos no deseados del título
453
	aux=$(medios.fixTitulo "$aux")
1 by mhyst
Primer commit
454
	#aux="${aux%%[0-9]*}"
9 by mhyst
Nuevas mejoras en getTituloSerie y getTituloPelicula
455
	#aux="${aux%%(*}"
456
	#aux="${aux%%[*}"
1 by mhyst
Primer commit
457
	# aux="${aux%%HDTV*}"
458
	aux=$(tr '.' ' ' <<< $aux)
459
	aux=$(tr -d '-' <<< $aux)
460
	#aux=$(tr -d "'" <<< $aux)
461
	echo $(trim "$aux")
462
}
463
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
464
function medios.getTituloPelicula.info() {
30 by mhyst
Documentando funciones 19/07/2019
465
    echo "medios.getTituloPelicula - Obtiene el título de la película del nombre del fichero."
466
    echo
467
    echo -e "\tArgumentos: fichero"
468
    echo
469
    echo "Limpia el nombre del fichero de la ruta y todo lo superfluo, para"
470
    echo "obtener el título de la película."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
471
    echo
472
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
473
    echo -e "\tsintel -f medios.getTituloPelicula:\"Wonder [HDRip][VOSE][wWw.EliteTorrent.BiZ].mp4\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
474
}
475
1 by mhyst
Primer commit
476
function medios.detectar() {
477
	local folder="$1"
478
	local re='[0-9]{1,2}x[0-9]{1,3}'
479
	local te=""
480
	local temporada=""
481
	local episodio=""
482
	local titulo=""
483
	local fichero=""
484
	local torrent=""
485
	local aux=""
486
	local id=""
487
	local epid=""
488
489
	if [ ! -d "$folder" ]; then
490
	 	echo "El directorio >$folder< no existe"
491
	 	exit
492
	fi
493
	cd "$folder"
494
	find * -name '*.avi' -o -name '*.mp4' -o -name '*.mkv' -type f | sort > /tmp/films.txt
495
82 by mhyst
Corregidos errores en detectar, en ver.play y en ver.cache
496
	if [[ "${folder: -1}" != "/" ]]; then
497
	    folder="$folder/"
498
	fi
499
1 by mhyst
Primer commit
500
	readarray -t datosa < /tmp/films.txt
501
	for medio in "${datosa[@]}"; do
502
503
		fichero="$folder$medio"
504
7 by mhyst
Perfeccionando medios.getTitulo
505
		te=$(medios.extractTe "$medio")
506
1 by mhyst
Primer commit
507
		if [[ "$te" != "" ]]; then
508
			titulo=$(medios.getTituloSerie "$medio")
509
			echo "Serie: $titulo"
510
			#Es una serie tenemos que crear la serie si no existe y crear el episodio correspondiente
511
			#Extraemos el episodio y la temporada que es
512
			IFS='x' read -a aux <<< "$te"; IFS=" "
513
			temporada="${aux[0]}"
514
			episodio="${aux[1]}"
515
			if [[ "$temporada" == "" ]] || [[ "$episodio" == "" ]]; then
516
				echo "ERROR: No se pudo obtener te2 en >$medio<"; continue;
517
			else
518
				echo "Temporada: $temporada, Episodio: $episodio"
519
			fi
82 by mhyst
Corregidos errores en detectar, en ver.play y en ver.cache
520
			#id=$(series.getIdByTitulo "$titulo")
521
			id=$(medios.determineSeries "$titulo")
522
			if [[ "$id" == "-1" ]]; then
1 by mhyst
Primer commit
523
				#No existe, la creamos
81 by mhyst
Fix series.add with three arguments on medios.detect
524
				series.add "$titulo"
1 by mhyst
Primer commit
525
				id="$ROWID"
526
			fi
527
528
			$DEBUG && echo "Comprobando si el episodio existe"
529
			epid=$(series.getEpisodioId "$id" "$temporada" "$episodio")
530
			$DEBUG && echo "Comprobado $epid"
531
			if [[ "$epid" == "" ]]; then
532
				$DEBUG && echo "Intentando insertar episodio..."
533
				#Puesto que ya existe, añadimos el episodio
534
				series.addEpisodio "$id" "$temporada" "$episodio" "$fichero" "-1"
535
				$DEBUG && echo "Intentado!"
536
			else
537
				echo "Ep episodio ya está en la base de datos."
538
			fi
539
		else
540
			#Si es una película, simplemente añadimos la película
541
			titulo=$(medios.getTituloPelicula "$medio")
542
			echo "Pelicula: $titulo"
543
			id=$(film.getByTitulo "$titulo")
544
			if [[ "$id" == "" ]]; then
545
				#No existe, la creamos
546
				film.add "$titulo" "$fichero" "-1"
547
				id="$ROWID"
548
			else
549
				echo "La película ya existe en la base de datos"
6 by mhyst
Mejora del interfaz de ver.serie y correcciones en medios.detectar
550
			fi	
1 by mhyst
Primer commit
551
		fi
552
	done
553
}
554
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
555
function medios.detectar.info() {
30 by mhyst
Documentando funciones 19/07/2019
556
    echo "medios.detectar - Añade medios a la base de datos."
557
    echo
558
    echo -e "\tArgumentos: ruta de carpeta"
559
    echo
560
    echo "Escanea una carpeta y todos sus subdirectorios en busca de medios."
561
    echo "Es capaz de diferenciar las series de las películas."
562
    echo "Todo lo que encuentra lo añade a la base de datos."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
563
    echo
564
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
565
    echo -e "\tsintel -f medios.detectar:/home/mhyst/Descargas/"
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
566
}
567
1 by mhyst
Primer commit
568
#Determinar el id de la serie que estamos buscando.
569
#En algunos casos es posible que haya varias series con nombres similares.
570
#Esta función permitirá al usuario seleccionar entre ellas la que quiere.
571
function medios.determineSeries() {
11 by mhyst
Búsquedas por varias palabras en llamadas a funciones (-f)
572
	local busqueda="$@"
1 by mhyst
Primer commit
573
85 by mhyst
Corregidos errores en error, generic, medios y ver
574
	local devueltos=($(series.find "$busqueda"))
575
	
1 by mhyst
Primer commit
576
	if [[ ${#devueltos[@]} == 0 ]]; then
577
		echo "-1"
578
		exit
579
	fi
580
581
	if [[ ${#devueltos[@]} == 1 ]]; then
85 by mhyst
Corregidos errores en error, generic, medios y ver
582
		#echo "Se devuelve solo uno?" > /dev/tty
1 by mhyst
Primer commit
583
		series.parse "${devueltos[0]}"
83 by mhyst
Arreglado un bug en medios y en series
584
1 by mhyst
Primer commit
585
		echo "${SERIE[id]}"
586
	else
6 by mhyst
Mejora del interfaz de ver.serie y correcciones en medios.detectar
587
		echo -e "\e[47m\e[31m Series coincidentes \e[0m\n" > /dev/tty
83 by mhyst
Arreglado un bug en medios y en series
588
		local i=0
1 by mhyst
Primer commit
589
		for reg in "${devueltos[@]}"; do
85 by mhyst
Corregidos errores en error, generic, medios y ver
590
		        #echo "Antes del parse" > /dev/tty
1 by mhyst
Primer commit
591
			series.parse "$reg"
85 by mhyst
Corregidos errores en error, generic, medios y ver
592
			#echo "Después del parse" > /dev/tty
6 by mhyst
Mejora del interfaz de ver.serie y correcciones en medios.detectar
593
			echo " $i:	${SERIE[titulo]}" > /dev/tty
85 by mhyst
Corregidos errores en error, generic, medios y ver
594
			#echo "Antes del i++" > /dev/tty
595
			((i=i+1))
596
			#echo "Después del i++" > /dev/tty
1 by mhyst
Primer commit
597
		done
85 by mhyst
Corregidos errores en error, generic, medios y ver
598
		#echo "Antes del limite" > /dev/tty
1 by mhyst
Primer commit
599
		local LIMITE=$(( ${#devueltos[*]} - 1 ))
85 by mhyst
Corregidos errores en error, generic, medios y ver
600
		#echo "Después del límite: $LIMITE" > /dev/tty
1 by mhyst
Primer commit
601
		local CHOSENID=$(userChoice $LIMITE "Seleccione la serie:")
602
		series.parse "${devueltos[$CHOSENID]}"
603
		echo "${SERIE[id]}"
604
	fi
605
}
606
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
607
function medios.determineSeries.info() {
30 by mhyst
Documentando funciones 19/07/2019
608
    echo "medios.determineSeries - Determinar el id de la serie por una cadena de búsqueda."
609
    echo
610
    echo -e "\tArgumentos: cadena de búsqueda"
611
    echo
612
    echo "Esta función hace uso de medios.find para tratar de determinar cual es el id"
613
    echo "de la serie a partir de una cadena de búsqueda."
614
    echo "En caso de haber varias posibilidades se le ofrece al usuario la elección."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
615
    echo
616
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
617
    echo -e "\tsintel -f medios.determineSeries:dark"
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
618
}
619
1 by mhyst
Primer commit
620
#Determinar si un episodio de una serie está ya descargado
621
function medios.isDownloaded () {
79 by mhyst
Probando nuevo sistema de control de argumentos
622
    [[ $# != 2 ]] && ( die $(iargs 2 "id y te") )
53 by mhyst
Eliminado checkArgs por causar fallos
623
    
1 by mhyst
Primer commit
624
625
	local id="$1"
626
	local te="$2"
627
628
	$DEBUG && echo "ID: $id, TE: $te" > /dev/tty
629
69 by mhyst
Revisando medios.isDownloaded
630
	declare -a aux
68 by mhyst
Revisando medios.isDownloaded
631
	IFS='x' read -a aux <<< "$te"
1 by mhyst
Primer commit
632
	temporada="${aux[0]}"
633
	episodio="${aux[1]}"
68 by mhyst
Revisando medios.isDownloaded
634
	unset IFS
1 by mhyst
Primer commit
635
	if [[ "$temporada" == "" ]] || [[ "$episodio" == "" ]]; then
69 by mhyst
Revisando medios.isDownloaded
636
	    echo "ERROR: No se pudo obtener te2 en >$medio<" > /dev/tty
637
	    echo "false"
638
	    exit
1 by mhyst
Primer commit
639
	fi
640
641
	if [[ "$id" == "" ]] || [[ "$id" == "-1" ]]; then
69 by mhyst
Revisando medios.isDownloaded
642
	    echo "ERROR: No se pudo determinar el id de la serie: $serie" > /dev/tty
643
	    echo "false"
644
	    exit
1 by mhyst
Primer commit
645
	fi
646
647
	local epid=$(series.getEpisodioId "$id" "$temporada" "$episodio")
69 by mhyst
Revisando medios.isDownloaded
648
	
1 by mhyst
Primer commit
649
	if [[ "$epid" == "" ]]; then
69 by mhyst
Revisando medios.isDownloaded
650
	    echo "false"
651
	    exit
1 by mhyst
Primer commit
652
	else
69 by mhyst
Revisando medios.isDownloaded
653
	    local reg=$(series.getEpisodioById "$epid")
654
655
	    if [[ "$reg" == "" ]]; then
656
		echo "ERROR: No se pudo obtener el episodio por el ID obtenido"
657
		echo "false"
658
		exit
659
	    fi
660
	    series.parse "$reg"
661
	    if [[ "${SERIE[fichero]}" == "" ]]; then
662
		echo "false"
663
	    else
664
		echo "true"
665
	    fi
1 by mhyst
Primer commit
666
	fi
667
}
668
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
669
function medios.isDownloaded.info() {
30 by mhyst
Documentando funciones 19/07/2019
670
    echo "medios.isDowloaded - Averigua si de una serie tenemos descargado un episodio concreto."
671
    echo
672
    echo -e "\tArgumentos: id, te"
673
    echo
674
    echo "id es el id de la serie, mientras que te es la temporada y el episodio expresados"
675
    echo "como temporadaxepisodio de forma númérica. Ej.: 01x03."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
676
    echo
677
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
678
    echo -e "\tsintel -n medios.isDownloaded:\"871|10x07\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
679
}
680
1 by mhyst
Primer commit
681
#Determinar si un episodio de una serie está ya descargado
682
function medios.isDownloaded2 () {
79 by mhyst
Probando nuevo sistema de control de argumentos
683
    [[ $# != 2 ]] && ( die $(iargs 2 "título y te") )
53 by mhyst
Eliminado checkArgs por causar fallos
684
    
1 by mhyst
Primer commit
685
686
	local serie="$1"
687
	local te="$2"
688
689
	IFS='x' read -a aux <<< "$te"; IFS=" "
690
	temporada="${aux[0]}"
691
	episodio="${aux[1]}"
692
	if [[ "$temporada" == "" ]] || [[ "$episodio" == "" ]]; then
693
		echo "ERROR: No se pudo obtener te2 en >$medio<" > /dev/tty
694
		echo "-1"
695
		exit
696
	fi
697
698
	local id=$(medios.determineSeries "$serie")
699
700
	if [[ "$id" != "" ]] && [[ "$id" != "-1" ]]; then
701
		echo "ERROR: No se pudo determinar el id de la serie: $serie" > /dev/tty
702
		echo "-1"
703
		exit
704
	fi
705
706
	local epid=$(series.getEpisodioId "$id" "$temporada" "$episodio")
707
708
	if [[ "$epid" == "" ]]; then
709
		echo "false"
710
		exit
711
	else
712
		local reg=$(series.getEpisodioById "$epid")
713
		if [[ "$reg" == "" ]]; then
714
			echo "ERROR: No se pudo obtener el episodio por el ID obtenido"
715
			echo "-1"
716
			exit
717
		fi
718
		series.parse "$reg"
719
		if [[ "${SERIE[fichero]}" == "" ]]; then
720
			echo "false"
721
		else
722
			echo "true"
723
		fi
724
	fi
6 by mhyst
Mejora del interfaz de ver.serie y correcciones en medios.detectar
725
}
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
726
727
function medios.isDownloaded2.info() {
30 by mhyst
Documentando funciones 19/07/2019
728
    echo "medios.isDownloaded2 - Determina si cierto episodio de una serie está descargado."
729
    echo
730
    echo -e "\tArgumentos: titulo, te"
731
    echo
732
    echo "Esta función es idéntica a 'medios.isDownloaded' salvo que esta permite"
733
    echo "indicar el título de la serie en lugar de su id. Usa una llamada a "
734
    echo "medios.determineSeries para obtener el id de la serie."
735
    echo
736
    echo "te es la temporada y el episodio separados por una x."
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
737
    echo
738
    echo "Ejemplos:"
30 by mhyst
Documentando funciones 19/07/2019
739
    echo -e "\tsintel -n medios.isDownloaded2:\"poirot|10x03\""
29 by mhyst
Escribiendo la documentación de las funciones 17/07/2019
740
}