View difference between Paste ID: XMYX6bAR and 1CkceYsb
SHOW: | | - or go back to the newest paste.
1
#!/bin/bash
2
3
# SCRIPT FEITO PARA SER USADO NAS AÇÕES PERSONALISADAS DO THUNAR.
4
# SEGUNDA VERSÃO DEPOIS DE DISCUÇÃO EM LISTA DE SHELL SCRIPT
5
# DEPENDE DO BASH, ZENITY E MP3GAIN
6
7-
if [ -n "$1" ]; then
7+
# Verifica se sexiste ao menos um arquivo de entrada.
8
if [ ! -n "$1" ]; then
9
	# Emite mensagem de erro, caso nada seja encontrado como parâmetro de entrada.
10-
# VERIFICA SE O ARQUIVO DE PONTO DE MONTAGEM EXISTE.
10+
	zenity --info --title="Erro!" --text="Falta o arquivo de entrada.\n\nNenhum processo realizado."
11-
	if [ -f "$arquivo" ]; then
11+
12-
		pontoDeMontagem=$(cat "$arquivo")
12+
13
	# Se o arquivo $arquivo existir, carrega seu conteúdo em $dispositivo.
14-
# -----------------------------------------------
14+
	[ -f "$arquivo" ]; read dispositivo < $arquivo
15
	# Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio.
16-
# VERIFICA SE O MP4 ESTÁ MONTADO.
16+
	if [ -n "$dispositivo" ]; then
17-
	if [ -n "$pontoDeMontagem" ]; then
17+
		# Verifica se o dispositivo está montado. Lembrando que sua pasta não é fixa no /media.
18-
		if [ -d "$pontoDeMontagem" ]; then
18+
		if [ -d "$dispositivo" ]; then
19
			nok=""
20
		else
21
			nok="nok"
22
			[ -f "$arquivo" ]; rm "$arquivo"
23
		fi
24
	else
25
		nok="nok"
26
		[ -f "$arquivo" ]; rm "$arquivo"
27
	fi
28-
# -----------------------------------------------
28+
	# Se $dispositivo não foi caregada corretamente, ou a pasta de montagem do aparelho não foi encontrada, tenta encontrá-lo.
29
	if [ "$nok" == "nok" ]; then
30-
# SE NÃO HOUVER O PONTO DE MONTAGEM SALVA NO $ARQUIVO.
30+
		dispositivoSerial="觛迦烶觓∑ፉ倢獓穓㨓┖슷⑲"
31
		# O subshel dessa linha retorna o número do dispositivo.
32-
		# Os nomes do seu dispositivo pode ser verificado através do "dmesg | grep -i scsi"
32+
		read dispositivo <<< $(find "/proc/scsi/usb-storage/" -type f -exec grep -l "$dispositivoSerial" {} \+ | awk -F '/' '{print "sd "$5}' | tail -n1)
33-
		nome1MP4="ACTIONS  HS USB FlashDisk 2.00 PQ: 0 ANSI: 0 CCS"
33+
		# Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio.
34-
		nome2MP4="Attached SCSI removable disk"
34+
		if [ -n "$dispositivo" ]; then
35-
		# ---------------------------------------------------------------------------------
35+
			# O subshel dessa linha retorna o "device" do dispositivo.
36
			read dispositivo <<< $(dmesg | grep -e "$dispositivo.*\[.*Attached" | sed -e 's/^.*\[//g ; s/\].*$//g' | tail -n1)
37-
		dispositivo="/home/$USER/.dispositivo"
37+
			# Nessa linha o subshel retorna o ponto de montagem do dispositivo.
38-
		# A linha abaixo pode ser comentada se você não quiser tempo para verificar se o MP4 está montado.
38+
			read dispositivo <<< $(mount | grep -i "$dispositivo" | awk '{print $3}')
39-
#		zenity --info --title="Aviso!" --text=" Por favor,\nantes de continuar,\nconfira se o MP4 está devidamente montado.\n Grato."
39+
			# Verifica que a variável $dispositovo possui qualquer coisa diferente de vazio.
40-
		# ---------------------------------------------------------------------------------
40+
			if [ -n "$dispositivo" ]; then
41-
		numeroDoDispositivo=$(dmesg | grep -i "$nome1MP4" | sed -e "s/^.\{20\}\([0-9:]\{8\}\).*/\1/" | tail -n1)
41+
				echo $dispositivo>"$arquivo"
42-
		if [ -n "$numeroDoDispositivo" ]; then
42+
43-
			dmesg | grep -i "$numeroDoDispositivo" | grep -i "$nome2MP4" | sed -e "s/^.\{28\}\([a-z]\{3\}\).*/\1/" | tail -n1 >"$dispositivo"
43+
				# Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida.
44-
			pontoDeMontagem=$(mount | grep -i "`cat /home/$USER/.dispositivo`" | sed -e "s/^.\{12\}\([0-9a-zA-Z/ -]*\) type.*/\1/")
44+
45-
			if [ -n "$pontoDeMontagem" ]; then
45+
46-
				echo $pontoDeMontagem>"$arquivo"
46+
47
			# Se a variável $dispositivo estiver vazia, uma mensagem de erro é emitida.
48
			zenity --info --title="Erro!" --text="Infelizmente o dispositivo não foi encontrado."
49
		fi
50-
			rm "$dispositivo"
50+
51
	# Torna a verificar se a variável $dispositivo contém o caminho de um diretório válido.
52
	if [ -d "$dispositivo" ]; then
53
		pastaDeMusicas="$dispositivo/musicas"
54
		# Cria pasta de músicas na raíz do dispositivo, se ela não existir.
55-
# -----------------------------------------------
55+
		mkdir -p "$pastaDeMusicas"
56
		read quantidadeMP3 <<< $(ls "$pastaDeMusicas/*.mp3" | wc -l)
57-
	if [ -d "$pontoDeMontagem" ]; then
57+
		# Na linha abaixo, o subshell retorna o tamanho livre, em MB, do dispositivo - 100KB. Solucão encontrada para reservar 100KB para os arquivos de configuração do aparelho.
58
			read tamDispositivo <<< $(df |w grep "$dispositivo" | sed -e "s/\([a-z0-9/]* *\)\{4\}[0-9a-zA-Z/% -]*/\1\/1024-0.1/" | bc -l | sed -e "s/\([0-9]*\.[0-9]\{3\}\)[0-9]*/\1/; s/\.//g");
59-
		listaParaTransferir="/home/$USER/.listaParaTransferir"
59+
60
			# O subshell retorna somente o nome da música.mp3.
61-
# CRIA A LISTA DE ARQUIVOS A TRANSFERIR.
61+
			read musicaAtual <<< $(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/")
62-
#		echo "$*" | sed -e "s/\.mp3 /\.mp3\n/g">>"$listaParaTransferir"
62+
			# Aqui o subshell retorna o tamanho em MB da música.mp3.
63-
		echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3">>"$listaParaTransferir"
63+
			read tamMP3 <<< $(stat -c "%s" "$mp3" | sed -e "s/[0-9]*/&\/1024\/1024/g" | bc -l | sed -e "s/\([0-9]*\.[0-9]\{3\}\)[0-9]*/\1/; s/\.//g");
64-
# -----------------------------------------------
64+
			# Calcula o tamanho restante do dispositivo.
65
			let tamRestante=$tamDispositivo-$tamMP3
66-
# CRIA O DIRETÓRIO DE MÚSICAS NO MP4, SE ELE NÃO EXISTIR.
66+
			# O tamanho da música.mp3 é menor que o espaço restante no dispositivo?
67-
		mkdir -p "$pontoDeMontagem/musicas"
67+
			if [ $tamMP3 -lt $tamRestante ]; then
68-
# -----------------------------------------------
68+
				# A música.mp3 já existe no dispositivo?
69
				if [ ! -f "$pastaDeMusicas/$musicaAtual" ]; then
70-
# COPIA AS MÚSICAS PARA O MP4 E REALIZA A NORMALIZAÇÃO DE VOLUME COM O MP3GAIN
70+
					# O a pasta de músicas contém menos que 999 músicas?
71
					if [ $quantidadeMP3 -lt 999 ]; then
72-
			musicaAtual=$(echo "$mp3" | sed -e "s/^\/[[:alpha:][:digit:][:punct:] ]*\/\([[:alpha:][:digit:][:punct:] ]*\.mp3\)/\1/")
72+
						# Copia a música.
73-
			if [ ! -f "$pontoDeMontagem/musicas/$musicaAtual" ]; then
73+
						cp "$mp3" "$pastaDeMusicas"
74-
				[ ! -f "$mp3" ]; cp "$mp3" "$pontoDeMontagem/musicas"
74+
						# Adiciona +1 na quantidade de músicas
75-
				mp3gain -r -k "$pontoDeMontagem/musicas/$musicaAtual"
75+
						let $quantidadeMP3=$quantidadeMP3+1
76
						# Sleep 3: Tentativa de corrigir erro em que depois de copiada a música.mp3 o mp3gain não encontra. Acho que é algum atraso de cópia. Ainda estou testando.
77-
		done < "$listaParaTransferir"
77+
						sleep 3
78-
# -----------------------------------------------
78+
						# Normaliza a música.mp3 para volume de 89db sem que haja "pontos surdos".
79
						mp3gain -r -k "$pastaDeMusicas/$musicaAtual"
80-
# REMOVE A LISTA DE TRANSFERÊNCIA.
80+
					else
81-
		rm "$listaParaTransferir"
81+
						# Se houver mais de 999 músicas.
82-
# -----------------------------------------------
82+
						msgErro=" Infelizmente houve o seguinte erro:\nO número máximo de arquivos foi atingido. Há 999 músicas.\n\nOperação cancelada."
83
						break
84-
# AVISA QUE O PROCESSO FOI CONCLUÍDO COM SUCESSO.
84+
					fi
85-
 		zenity --info --title="Transferência finalizada!" --text=" Os arquivos selecionados foram\ntrasnferidos e normalizados com sucesso!"
85+
				fi
86-
# -----------------------------------------------
86+
87
				# Se a música.mp3 for maior que a capacidade do dispositivo, seta $capacidade e quebra o laço while.
88
				msgErro=" Infelizmente houve o seguinte erro:\nSeu dispositivo não possui espaço\nsuficiente para executar a cópia \ndo arquivo $musicaAtual e os demais.\n\nOperação cancelada."
89-
# SE NÃO HOUVER ARQUIVO DE ENTRADA, AVISA.
89+
				break
90-
	zenity --info --title="Erro!" --text="Falta o arquivo de entrada."
90+
91-
# -----------------------------------------------
91+
		# O subshel da linha abaixo, retorna uma lista dos arquivos de entrada; um por caminho linha.
92
		done <<< $(echo "$*" | sed -e "s/ \//\n\//g" | grep ".mp3")
93
		# Se a variável $capacidade possuir o conteúdo "capacidade", emite mensagem de erro. Caso contrário, emite mensagem que o processo foi concluído.
94
		if [ -n "$msgErro" ]; then
95
			zenity --info --title="Erro!" --text="$msnErro"
96
		else
97
			zenity --info --title="Transferência finalizada!" --text=" Os arquivos selecionados foram\ntrasnferidos e normalizados com sucesso!"
98
		fi
99
	fi
100
fi