*Voxtube-light - voxtube alternativo;
*Por Fabiano Ferreira;
*Versão 0 em 02/02/2019;
*Versão 1 em 04/02/2019;
*Versão 2 em 07/04/2019
*Versão 3 em 11/04/2019
*constantes

busca $dircorrente dir
chama @pegadirambiente
dir troca $dirambiente
chama @carregaconf

chama @atu_ytdl_inic
chama @vlc_existe
chama @ffmpeg_existe
seja $versao "20.2"
seja $lista "lista\lista.txt"
chama @atualizalista
seja $f1 "#0#59"
seja $f2 "#0#60"
seja $f4 "#0#62"
seja $f6 "#0#64"
seja $f9 "#0#67"
seja $enter = "#13"
seja $control_enter "#10"
seja $control_c "#3"
seja $control_l "#12"
seja $tab "#9"
seja $backspace "#8"
seja $esc "#27"

seja $jtitulo "Voxtube-light - início"
titulo $jtitulo
escreve mudo "Voxtube-light V"$versao
mensagem "som\vtinic.wav"
fala $versao

escreve ""
@entrada_pesquisa
seja $numykey 1
seja $numero_tentativas 0
chama @deltemp
seja $arqtela "temp\pag"
seja $numpag 1
concatena $arqtela $numpag
chama @historicodepesquisa
se $historico_vazio = 1 chama @novapesquisa
se $pesquisa = ""
escreve mudo "Até logo."
mensagem "som\22.wav"
termina mudo
fim se
mensagem "som\04.wav"

escreve ""
escreve mudo "Aguarde"
se $pesquisa *=* "watch?v="
  chama @tratalinkdireto
senão
chama @pesquisa
chama @trata
fim se
se $quantoslidos = 0
escreve "Nenhum resultado foi encontrado."
le
 desvia @entrada_pesquisa
fim se

se $quantoslidos > 0
Escreve mudo "Registros lidos: "$quantoslidos
mensagem "som\vtnumlid.wav"
fala $quantoslidos
fim se
chama @processa

@defineponto
se $letra = $esc desvia @entrada_pesquisa
se $letra = $tab
 chama @proximapagina
se $proxtela = "" chama @pesquisa
se $proxtela = "" chama @trata
chama @processa
fim se
se $letra = $backspace chama @processa
desvia @defineponto

*
@pesquisa
seja $baseurl "https://www.winvox.com.br/vtlyt/search.php?q="
seja $arqtemp "temp\pag.html"
concatena $baseurl $pesquisa
concatena $baseurl "&limite="
seja $quantostrazer ($numpag*$limitebusca)
concatena $baseurl $quantostrazer

substitui $baseurl " " "+"
remove $arqtemp &
*trazdarede $baseurl $arqtemp 0 "" "webvox" x

seja $trazdarede "bin\wget -b -o temp\0.log -O "
concatena $trazdarede $arqtemp
concatena $trazdarede " --no-check-certificate """
concatena $trazdarede $baseurl
concatena $trazdarede """"
executa $trazdarede &&
existeprog "wget.exe" $chk
enquanto $chk = 1
espera ms 500
existeprog "wget.exe" $chk
fim enquanto
retorna

*
@trata
seja $quantoslidos 0
seja $linha ""
seja $dadosjson ""
seja $prefixo_url_videos "https://www.youtube.com"
abre #1 $arqtemp
se $numpag > 1
seja w ($quantostrazer-$limitebusca)
repete r w
le #1 $linha
fim repete
fim se
le #1 $linha
checa $acabouarquivo
enquanto $acabouarquivo = 0
concatena $dadosjson $linha
concatena $dadosjson ">"
le #1 $linha
checa $acabouarquivo
fim enquanto
fecha #1
seja t tamanho $dadosjson
subtrai t 1
copia $dadosjson $dadosjson 1 t

remove $arqtela &
abre #1 $arqtela &
seja p pos "\" $dadosjson
enquanto p > 0
soma $quantoslidos 1
subtrai p 1
copia $titvideo $dadosjson 1 p

*seja $cptitvideo $titvideo
utf8paraansi $titvideo
*se $titvideo = "" seja $titvideo $cptitvideo

seja p pos "\" $dadosjson
soma p 1
seja t tamanho $dadosjson
copia $dadosjson $dadosjson p t
seja p pos "\" $dadosjson
subtrai p 1
copia $idvideo $dadosjson 1 p

seja $urlvideo "https://www.youtube.com/watch?v="
concatena $urlvideo $idvideo

seja p pos "\" $dadosjson
soma p 1
seja t tamanho $dadosjson
copia $dadosjson $dadosjson p t
seja p pos "\" $dadosjson
subtrai p 1
copia $tempovideo $dadosjson 1 p

seja p pos "\" $dadosjson
soma p 1
seja t tamanho $dadosjson
copia $dadosjson $dadosjson p t
seja p pos ">" $dadosjson
se p > 0 subtrai p 1
se p = 0 seja p tamanho $dadosjson
copia $autorvideo $dadosjson 1 p
*seja $cpautorvideo $autorvideo
utf8paraansi $autorvideo
*se $autorvideo = "" seja $autorvideo $cpautorvideo
se $autorvideo = "" copia $autorvideo $dadosjson 1 p

soma p 2
seja t tamanho $dadosjson
copia $dadosjson $dadosjson p t

escreve #1 $titvideo " - "$tempovideo" por "$autorvideo
se $titvideo *=* " - "
escreve #1 $titvideo
senão
se $titvideo *=* ": "
escreve #1 $titvideo
senão
escreve #1 $autorvideo" - "$titvideo
fim se
escreve #1 $urlvideo

seja p pos "\" $dadosjson
fim enquanto

fecha #1
retorna

*
@processa
seja $refazmenu 0
se $guardaposicaomenu <> 0 seja $numero $guardaposicaomenu
seja $guardaposicaomenu 0
seja $temproximapagina 1
seja $quantoslidos 0

titulo $jtitulo
abre #1 $arqtela
menu cria 1 1 80 50
le #1 m
checa c
enquanto c = 0
menu adiciona m
soma $quantoslidos 1
le #1 m
le #1 m
le #1 m
checa c
fim enquanto
fecha #1

mensagem "som\blimblimblom.wav"


seja $primeiraopcao "Enter: Assistir ao vídeo selecionado."
seja $segundaopcao "Control+Enter: Abre no navegador padrão."
seja $terceiraopcao "Tab: Passa para a próxima página."
seja $quartaopcao "Backspace: Volta uma página."
seja $quintaopcao "Control+C: Copiar título e link do vídeo selecionado para a área de transferência."
seja $sextaopcao "Control+L: Copia apenas o link do vídeo selecionado para a área de transferência."
seja $setimaopcao "S: Salva o vídeo selecionado no formato mp4."
seja $oitavaopcao "M: Salva o vídeo selecionado como áudio mp3."
seja $nonaopcao "I: Informações do vídeo selecionado."
seja $decimaopcao "F4: Configurações."
seja $decimaprimeiraopcao "Y: Atualiza youtube-dl para a última versão disponível."
seja $decimasegundaopcao "C: Ler os comentários do vídeo selecionado."
seja $decimaterceiraopcao "K: Inclui vídeo selecionado na lista de download."
seja $decimaquartaopcao "r: Retira o último ítem incluído na lista de download."
seja $decimaquintaopcao "D: Baixa os ítens da lista de download como vídeo."
seja $decimasextaopcao "Vírgula: Baixa os vídeos da lista de download convertendo para áudio."
seja $decimasetimaopcao "Z: Zera a lista de download."
seja $decimaoitavaopcao "E: Edita a lista de download."
seja $decimanonaopcao "F: Informa quantos ítens na lista de download."
seja $vigesimaopcao "ESC: Volta à tela de busca."

@fixomenu
seja $jtitulo $pesquisa
concatena $jtitulo " - Voxtube-light"
titulo $jtitulo
menu executa $numero $letra $texto
se $letra = $f1 chama @opcoes
se $letra = $f9
seja $refazmenu 1
seja $guardaposicaomenu $numero
 chama @menuajuda
se $numeroopc = 0 desvia @processa
se $numeroopc = 1 seja $letra $enter
se $numeroopc = 2 seja $letra $control_enter
se $numeroopc = 3 seja $letra $tab
se $numeroopc = 4 seja $letra $backspace
se $numeroopc = 5 seja $letra $control_c
se $numeroopc = 6 seja $letra $control_l
se $numeroopc = 7 seja $letra "s"
se $numeroopc = 8 seja $ letra "m"
se $numeroopc = 9 seja $letra "i"
se $numeroopc = 10 seja $letra $f4
se $numeroopc = 11 seja $letra "y"
se $numeroopc = 12 seja $letra "c"
se $numeroopc = 13 seja $letra "k"
se $numeroopc = 14 seja $letra "r"
se $numeroopc = 15 seja $letra "d"
se $numeroopc = 16 seja $letra ","
se $numeroopc = 17 seja $letra "z"
se $numeroopc = 18 seja $letra "e"
se $numeroopc = 19 seja $letra "f"
se $numeroopc = 20 seja $letra $esc
fim se
se $letra = $f6
se $playerinternoativo = 1 chama @comandosplayerinterno
fim se
se $letra = "0" chama @assistir
se $letra = "1" chama @assistir
se $letra = "2" chama @assistir
se $letra = "3" chama @assistir
se $letra = "4" chama @assistir
se $letra = "5" chama @assistir
se $letra = "6" chama @assistir
se $letra = "7" chama @assistir
se $letra = "8" chama @assistir
se $letra = "9" chama @assistir
se $letra = $enter chama @assistir
se $letra = $control_enter chama @assistirnonavegador
se $letra = $tab
seja $numero 1
 retorna
fim se
se $letra = $backspace
se $numpag = 1 desvia @fixomenu
  chama @paginaanterior
seja $numero 1
retorna
fim se
se $letra = $control_l chama @copiaurl
se $letra = $control_c chama @copiaurletitulo
se $letra = "i"
seja $refazmenu 1
seja $guardaposicaomenu $numero
 chama @detalhes
fim se
se $letra = "y" chama @atu_ytdl
se $letra = "c" chama @lercomentarios
se $letra = "s" chama @salvavideo
se $letra = "m" chama @salvavideomp3
se $letra = $f4
seja $refazmenu 1
seja $guardaposicaomenu $numero
 chama @painelconfig
fim se

se $letra = "k" chama @incluinalistadedownload
se $letra = "r" chama @retiraultimodalista
se $letra = "d" chama @execlista
se $letra = "," chama @execlista
se $letra = "z" chama @zeralista
se $letra = "a" chama @atualizalista
se $letra = "e" chama @editalista
se $letra = "f" fala $quantosnalista
se $letra = $esc
seja $numero 1
 retorna
fim se
se $refazmenu = 0 desvia @fixomenu
se $refazmenu = 1 desvia @processa

@opcoes
escreve "Opções:"
escreve $primeiraopcao
escreve $segundaopcao
escreve $terceiraopcao
escreve $quartaopcao
escreve $quintaopcao
escreve $sextaopcao
escreve $setimaopcao
escreve $oitavaopcao
escreve $nonaopcao
escreve $decimaopcao
escreve $decimaprimeiraopcao
escreve $decimasegundaopcao
escreve $decimaterceiraopcao
escreve $decimaquartaopcao
escreve $decimaquintaopcao
escreve $decimasextaopcao
escreve $decimasetimaopcao
escreve $decimaoitavaopcao
escreve $decimanonaopcao
escreve $vigesimaopcao

escreve "F9: mostra lista de opções."
retorna

@menuajuda
menu cria 1 1 80 20
menu adiciona $primeiraopcao
menu adiciona $segundaopcao
menu adiciona $terceiraopcao
menu adiciona $quartaopcao
menu adiciona $quintaopcao
menu adiciona $sextaopcao
menu adiciona $setimaopcao
menu adiciona $oitavaopcao
menu adiciona $nonaopcao
menu adiciona $decimaopcao
menu adiciona $decimaprimeiraopcao
menu adiciona $decimasegundaopcao
menu adiciona $decimaterceiraopcao
menu adiciona $decimaquartaopcao
menu adiciona $decimaquintaopcao
menu adiciona $decimasextaopcao
menu adiciona $decimasetimaopcao
menu adiciona $decimaoitavaopcao
menu adiciona $decimanonaopcao
menu adiciona $vigesimaopcao
seja $numeroopc 1
escreve "Escolha a opção com as setas e tecle Enter"
@execmenuinterativo
menu executa $numeroopc $letraopc $textoopc
se $letraopc = $enter retorna
se $letraopc = $esc
seja $numeroopc 0
retorna
fim se
desvia @execmenuinterativo
*

@proximapagina
soma $numpag 1
Escreve mudo "Página "$numpag
mensagem "som\vtpag.wav"
fala $numpag

seja $arqtela "temp\pag"
concatena $arqtela $numpag

busca $proxtela $arqtela
se $proxtela = ""
subtrai $numpag 1
seja $arqtela "temp\pag"
concatena $arqtela $numpag
soma $numpag 1
seja $arqtela "temp\pag"
concatena $arqtela $numpag
fim se
retorna

@paginaanterior
subtrai $numpag 1
Escreve mudo "Página "$numpag
mensagem "som\vtpag.wav"
fala $numpag

seja $arqtela "temp\pag"
concatena $arqtela $numpag
retorna

@detalhes
busca b "bin\youtube-dl.exe"
se b = "" chama @baixa_ytdl

escreve mudo "Aguarde"
mensagem "som\04.wav"
chama @obtemdadosvideo
Escreve mudo "abrindo no edivox para leitura"
mensagem "som\abrindo_no_edivox_para_leitura.wav"
seja $comando "c:\winvox\edivox.exe /l temp\desc"
executa $comando
retorna

@copiaurl
chama @pega_url_video_selec
transfere de l
bipa 1
retorna

@copiaurletitulo
seja $novalinha crlf
chama @pega_url_video_selec
seja $ut ""
concatena $ut $texto
concatena $ut $novalinha
concatena $ut l
transfere de $ut
bipa 1
retorna

@assistir
seja $player ""
escreve ""
escreve mudo "Aguarde"
mensagem "som\04.wav"

se $letra = 0 seja $player $t0
se $letra = 1 seja $player $t1
se $letra = 2 seja $player $t2
se $letra = 3 seja $player $t3
se $letra = 4 seja $player $t4
se $letra = 5 seja $player $t5
se $letra = 6 seja $player $t6
se $letra = 7 seja $player $t7
se $letra = 8 seja $player $t8
se $letra = 9 seja $player $t9
se $letra = "#13" seja $player $t10

se $player = ""
escreve "Não há tocador associado a esta tecla."
retorna
fim se

se $player *=* " -formato="
seja p pos " -formato=" $player
soma p 10
seja t tamanho $player
copia $formato $player p t
subtrai p 11
copia $player $player 1 p
fim se

chama @pega_url_video_selec
se $player *=* " --noytdl"
seja $url l
substitui $player " --noytdl" ""
senão
chama @pega_link_real
fim se
se $player = "*" chama @encurta_link_real
se $url *=* ".m3u8" chama @encurta_link_real

se $player *=* "%dirambiente%" substitui $player "%dirambiente%" $dirambiente
se $player *=* "%titulovideo%"
seja z """"
concatena z $texto
seja t tamanho z
se t > 80 copia z z 1 80
se t > 80 concatena z "..."

concatena z """"
substitui $player "%titulovideo%" z
fim se
chama @execplayer
retorna

@assistirnonavegador
chama @pega_url_video_selec
Escreve ""
Escreve "Aguarde"
executa l
retorna

@pega_url_video_selec
abre #1 $arqtela
multiplica $numero 3
repete r $numero
le #1 l
fim repete
fecha #1
divide $numero 3
retorna

*
@pega_link_real
busca b "bin\youtube-dl.exe"
se b = "" chama @baixa_ytdl

seja z "youtube-dl.exe"
seja $executayoutubedl "bin\youtube-dl --no-warning -f 18 "
concatena $executayoutubedl " -e -g """
concatena $executayoutubedl l
concatena $executayoutubedl """"
executa $executayoutubedl &&&
existeprog z p
enquanto p = 1
espera ms 500
existeprog z p
fim enquanto

seja $linhaembranco crlf
le console $saidaconsole
copia $cr $linhaembranco 1 1
copia $lf $linhaembranco 2 2

seja p pos $lf $saidaconsole
subtrai p 1
copia $titulostream $saidaconsole 1 p
soma p 2
seja t tamanho $saidaconsole
copia $url $saidaconsole p t

substitui $url $linhaembranco ""
seja t tamanho $url
subtrai t 1
copia $url $url 1 t
retorna

@encurta_link_real
internet inicia
conecta ssl #1 "is.gd" 443
http $url
seja $recurso "GET /create.php?format=simple&url="
concatena $recurso $url
concatena $recurso " HTTP/1.1"
escreve #1 $recurso
escreve #1 "Host: is.gd"
escreve #1 "User-Agent: webvox"
escreve #1 "Connection: close"
escreve #1 ""

le #1 $url
enquanto não $url = ""
le #1 $url
fim enquanto
le #1 $url
le #1 $url
internet termina

retorna

*
@execplayer
seja $escondeconsole 0
se $player *=* " -m"
seja $escondeconsole 1
substitui $player " -m" ""
fim se

substitui $player " -m" ""
fim se

concatena $player " """
concatena $player $url
concatena $player """"
seja $formato ""
se $escondeconsole = 1
executa $player &&
senão
se $player =* "* "
chama @player_interno
senão
executa $player
fim se
retorna

*
@salvavideomp3
se $dirdownloads = "."
 seja $pref_nomearqmp3 $dircorrente
senão
se $dirdownloads = "?"
 seja $pref_nomearqmp3 $dircorrente
senão
seja $pref_nomearqmp3 $dirdownloads
fim se

se $letra = "d"
*não faz nada
senão
se $letra = ","
*não faz nada
senão
chama @obtem_nomearq
fim se

seja $nomearquivomp3 $nomearquivo
se $pref_nomearqmp3 <> ""
se não $pref_nomearqmp3 *= "\" concatena $pref_nomearqmp3 "\"
concatena $pref_nomearqmp3 $nomearquivomp3
fim se

se $pref_nomearqmp3 <> "" seja $nomearquivomp3 $pref_nomearqmp3

concatena $nomearquivomp3 ".mp3"
escreve "Salvando no formato mp3"

se $dirdownloads = "?"
Escreve "Edite o nome do arquivo. Enter confirma, esc cancela."

fala $nomearquivomp3
le edita $nomearquivomp3
fim se
se $nomearquivomp3 = "" retorna
Escreve mudo "Aguarde"
mensagem "som\04.wav"
fim se

seja t tamanho $nomearquivo
seja x t
subtrai t 3
copia z $nomearquivo t x
seja z maiusc z
se z <> ".MP4" concatena $nomearquivo ".mp4"

seja $convmp3 "bin\ffmpeg.exe -i """
concatena $convmp3 $nomearquivo
concatena $convmp3 """ -ab "
concatena $convmp3 $mp3_bitrate
concatena $convmp3 " -ac "
concatena $convmp3 $mp3_channels
concatena $convmp3 " -ar "
concatena $convmp3 $mp3_resample
concatena $convmp3 " -y"
concatena $convmp3 " """
concatena $convmp3 $nomearquivomp3
concatena $convmp3 """"
busca b $nomearquivomp3
se b <> ""
@esteaudiojaexiste
escreve "Este arquivo já existe: "$nomearquivomp3
escreve " Baixar mesmo assim?"
le mudo $baixarmesmoassim &
se $baixarmesmoassim = "n" retorna
se $baixarmesmoassim = "s" escreve mudo "Aguarde"
se $baixarmesmoassim = "s" mensagem "som\04.wav"
se $baixarmesmoassim = "s" desvia @continuaesalvaaudio
desvia @esteaudiojaexiste
fim se

@continuaesalvaaudio
chama @baixar_video
executa $convmp3 &&&
le console $buff
@esperaconvercaoacabar

observa teclado t
enquanto t = 0
espera ms 500
le console $buff
se $buff <> ""seja $cpbuff $buff
existeprog "ffmpeg.exe" x
se x = 0
busca b $nomearquivomp3
se b <> "" escreve "Conteúdo salvo"
se b = "" escreve "Atenção: houve algum problema no momento da conversão e o arquivo mp3 não foi gerado."
remove $nomearquivo
retorna
fim se

observa teclado t
fim enquanto
le mudo t &
se x = 1
bipa 1
se t = "#13" chama @statusconvercaomp3
fim se
desvia @esperaconvercaoacabar

@salvavideo
se $dirdownloads = "."
 seja $pref_nomearq $dircorrente
senão
se $dirdownloads = "?"
 seja $pref_nomearq $dircorrente
senão
seja $pref_nomearq $dirdownloads
fim se
se $letra = "d"
*não faz nada
senão
se $letra = ","
*não faz nada
senão
chama @obtem_nomearq
fim se
se $pref_nomearq <> ""
se não$pref_nomearq *= "\" concatena $pref_nomearq "\"
concatena $pref_nomearq $nomearquivo
fim se

se $pref_nomearq <> "" seja $nomearquivo $pref_nomearq
concatena $nomearquivo ".mp4"
escreve "Salvando vídeo "
se $dirdownloads = "?"
Escreve "Edite o nome do arquivo. Enter confirma, esc cancela."
fala $nomearquivo
le edita $nomearquivo
se $nomearquivo = "" retorna
escreve mudo "Aguarde."
mensagem "som\04.wav"
fim se

busca b $nomearquivo
se b <> ""
@estevideojaexiste
escreve "Este arquivo já existe: "$nomearquivo
escreve "Baixar mesmo assim?"
le mudo $baixarmesmoassim &
se $baixarmesmoassim = "n" dir troca $dirambiente
se $baixarmesmoassim = "n" retorna
se $baixarmesmoassim = "s" escreve mudo "Aguarde"
se $baixarmesmoassim = "s" mensagem "som\04.wav"

se $baixarmesmoassim = "s" escreve mudo "Aguarde"

se $baixarmesmoassim = "s" desvia @continuaesalvavideo
desvia @estevideojaexiste
fim se

@continuaesalvavideo
chama @baixar_video
dir troca $dirambiente
escreve "Conteúdo salvo"
retorna

@subscaracinvalidos
se $nomearquivo *= "."
seja t tamanho $nomearquivo
subtrai t 1
copia $nomearquivo $nomearquivo 1 t
fim se

substitui $nomearquivo ":" " -"
substitui $nomearquivo "?" " "
substitui $nomearquivo "/" " -"
substitui $nomearquivo "<" " "
substitui $nomearquivo ">" " "
substitui $nomearquivo "|" " "
substitui $nomearquivo """" " -"
substitui $nomearquivo "*" ""

se $nomearquivomp3 *= "."
seja t tamanho $nomearquivomp3
subtrai t 1
copia $nomearquivomp3 $nomearquivomp3 1 t
fim se

substitui $nomearquivomp3 ":" " -"
substitui $nomearquivomp3 "?" " "
substitui $nomearquivomp3 "/" " -"
substitui $nomearquivomp3 "<" " "
substitui $nomearquivomp3 ">" " "
substitui $nomearquivomp3 "|" " "
substitui $nomearquivomp3 """" " -"
substitui $nomearquivomp3 "*" ""
retorna

*
@coplinkstreaming
transfere de $url
bipa 1
retorna

@statusconvercaomp3
copia z $cpbuff 1 5
se z <> "size=" retorna

seja $escritosemdisco palavra 2 $cpbuff
seja $bitrate palavra 5 $cpbuff

Escreve "Tamanho parcial: "$escritosemdisco
Escreve "Taxa de bits: "$bitrate
retorna
*

@deltemp
dir troca "temp"
busca b "*.*"
enquanto b <> ""
remove b
busca b proximo
fim enquanto
dir troca ".."
retorna

@fim
escreve "Até logo"
termina

@obtemdadosvideo
seja m ""
seja $dtemp "temp\det"
remove $dtemp &

chama @pega_url_video_selec
remove $dtemp &
trazdarede l $dtemp 0 "" "webvox" x

abre #1 $dtemp
le #1 w
checa $acabouarquivo
enquanto $acabouarquivo = 0
concatena m w
le #1 w
checa $acabouarquivo
fim enquanto
fecha #1

seja p pos "itemprop=""name""" m
soma p 25
seja t tamanho m
copia m m p t
seja p pos """" m
subtrai p 1
copia $titulovideo m 1 p
*chama @subscaracinvalidos
*seja $cptitulovideo $titulovideo
utf8paraansi $titulovideo
*se $titulovideo = "" seja $titulovideo $cptitulovideo
seja p pos "itemprop=""duration""" m
soma p 31
seja t tamanho m
copia m m p t
seja p pos """" m
subtrai p 1
copia $duracaovideo m 1 p

seja p pos "itemprop=""author""" m
seja t tamanho m
copia m m p t
seja p pos "itemprop=""name""" m
soma p 25
seja t tamanho m
copia m m p t
seja p pos """" m
subtrai p 1
copia $autorvideo m 1 p

repete r 2
seja p pos "itemprop=""userInteractionCount""" m
soma p 41
seja t tamanho m
copia m m p t
seja p pos """" m
subtrai p 1
copia $visualizacoesvideo m 1 p
fim repete

seja p pos "itemprop=""datePublished""" m
soma p 34
seja t tamanho m
copia m m p t
seja p pos """" m
subtrai p 1
copia $datapubvideo m 1 p

seja $cpm m
seja p pos "com mais " m
soma p 9
seja t tamanho m
copia m m p t
seja p pos """" m
subtrai p 1
copia $likevideo m 1 p
copia $likevideo $likevideo 1 p
seja p pos " " $likevideo
subtrai p 1
copia $likevideo $likevideo 1 p
substitui $likevideo "." ""
seja m $cpm

remove "temp\desc"&
abre #1 "temp\desc"&
escreve #1 "Título: "$titulovideo
escreve #1 "Autor: "$autorvideo
escreve #1 "Duração: "$duracaovideo
escreve #1 "Visualizações: "$visualizacoesvideo
escreve #1 "Likes: "$likevideo
chama @convertedata
escreve #1 "Data de publicação: "$datapubvideo
escreve #1 "Descrição:"
chama @obtemdescricaovideo
fecha #1
retorna
@obtemdescricaovideo
seja p pos "shortDescription" m
soma p 19
seja t tamanho m
copia m m p t
substitui m "\r" ""
substitui m "\""" "~^"
substitui m "\u0026" "&"
seja p pos """" m
subtrai p 1
copia m m 1 p
chama @subscaracinvalidos

seja p pos "\n" m
se p = 0
*seja $cpm m
utf8paraansi m
*se m = "" seja m $cpm
seja m trim m
substitui m "~^" """"
escreve #1 m
retorna
fim se

enquanto p > 0
subtrai p 1
copia d m 1 p
*seja $cpd d
utf8paraansi d
*se d = "" seja d $cpd
seja d trim d
substitui d "~^" """"
escreve #1 d

soma p 3
seja t tamanho m
copia m m p t
seja p pos "\n" m
fim enquanto
*seja $cpm m
utf8paraansi m
*se m = "" seja m $cpm
seja m trim m
escreve #1 m
retorna

@convertedata
copia $ano $datapubvideo 1 4
copia $mes $datapubvideo 6 7
copia $dia $datapubvideo 9 10

seja $montadata $dia
concatena $montadata "/"
concatena $montadata $mes
concatena $montadata "/"
concatena $montadata $ano

seja $datapubvideo $montadata
retorna


@carregaconf
seja $arqconf "voxtube-light.cfg"
busca b $arqconf
se b = "" chama @criaarqconf

abre #1 $arqconf
le #1 l
checa c
enquanto c = 0

se l *=* "dirdownloads="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $dirdownloads l
se $dirdownloads =* "%dirambiente%" substitui $dirdownloads "%dirambiente%" $dirambiente
senão

se l *=* "quantosporbusca="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $limitebusca l
senão

se l *=* "disableupdateytdlinic="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $disableupdateytdlinic l
senão

se l *=* "mp3_channels="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $mp3_channels l
senão

se l *=* "mp3_bitrate="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $mp3_bitrate l
senão

se l *=* "mp3_resample"
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $mp3_resample l
senão

se l *=* "usasapi="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $usasapi l
senão

se l *=* "velgeral="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $velgeral l
senão

se l *=* "tiposapi="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $tiposapi l
senão

se l *=* "vozsapi="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $vozsapi l
senão

se l *=* "velsapi="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $velsapi l
senão

se l *=* "tomsapi="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $tomsapi l
senão

se l *=* "toc="
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja p pos "," l
subtrai p 1
copia x l 1 p

soma p 2
seja t tamanho l
se x = 0 copia $t0 l p t
se x = 1 copia $t1 l p t
se x = 2 copia $t2 l p t
se x = 3 copia $t3 l p t
se x = 4 copia $t4 l p t
se x = 5 copia $t5 l p t
se x = 6 copia $t6 l p t
se x = 7 copia $t7 l p t
se x = 8 copia $t8 l p t
se x = 9 copia $t9 l p t
se x = "#13" copia $t10 l p t

fim se
le #1 l
checa c
fim enquanto
fecha #1

chama @configfala
retorna

@criaarqconf
abre #1 $arqconf &
escreve #1 "#Voxtube-light - arquivo de configuração"
escreve #1 "#define o diretório padrão de download."
escreve #1 "#Coloque um ponto de interrogação para que o programa permita definir onde salvar o vídeo ou áudio."
escreve #1 "dirdownloads=%dirambiente%\downloads"
escreve #1 "#Define o limite de resultados por pesquisa"
escreve #1 "quantosporbusca=20"
escreve #1 "#Liga ou desliga a procura automática por atualização do youtube-dl ao iniciar o voxtube-light"
escreve #1 "#0 ligado; 1 desligado."
escreve #1 "disableupdateytdlinic=1"
escreve #1 "#Parâmetros para salvar o mp3"
escreve #1 "mp3_channels=2"
escreve #1 "mp3_bitrate=128000"
escreve #1 "mp3_resample=44100"
escreve #1 "#Configuração de fala"
escreve #1 "#Define uso da fala sapi. 0=não, 1=sim, 2=o mesmo definido no dosvox"
escreve #1 "usasapi=2"
escreve #1 "#define velocidade da fala geral. -1=a mesma definida no dosvox"
escreve #1 "velgeral=-1"
escreve #1 "#define o tipo da fala sapi. -1=a mesma definida no dosvox"
escreve #1 "tiposapi=-1"
escreve #1 "#define voz sapi. -1=a mesma definida no dosvox"
escreve #1 "vozsapi=-1"
escreve #1 "#define velocidade da voz sapi. -1=a mesma definida no dosvox"
escreve #1 "velsapi=-1"
escreve #1 "#define tom da voz sapi. -1=a mesma definida no dosvox"
escreve #1 "tomsapi=-1"
escreve #1 "#configuração dos tocadores"
escreve #1 "#teclas aceitas: números de 0 a 9 e o enter."
escreve #1 "#Para associar uma tecla a um tocador, use o seguinte formato:"
escreve #1 "#toc=key,caminho_tocador"
escreve #1 "#onde key é a tecla desejada e caminho_tocador é o caminho do executável do player que será aberto."
escreve #1 "#para o enter, use key como #13"
escreve #1 "#para esconder a janela do prompt, se necessário, use o parâmetro -m"
escreve #1 "toc=0,"
escreve #1 "toc=1,"
escreve #1 "toc=2,"
escreve #1 "toc=3,"
escreve #1 "toc=4,"
escreve #1 "toc=5,"
escreve #1 "toc=6,"
escreve #1 "toc=7,"
escreve #1 "toc=8,"
escreve #1 "toc=9,"
escreve #1 "toc=#13,%dirambiente%\vlc\vlc.exe"

fecha #1
retorna

@historicodepesquisa
seja $historico_vazio 0
seja $mempesquisas "vtpsq"
busca b $mempesquisas
se b = ""
seja $historico_vazio 1
 retorna
fim se

menu cria 1 1 80 80

menu adiciona "Nova pesquisa"
menu adiciona "Apagar histórico de pesquisa"

abre #1 $mempesquisas
le #1 l
checa c
enquanto c = 0
menu adiciona l
le #1 l
checa c
fim enquanto
fecha #1

escreve mudo "Qual sua busca?"
mensagem "som\VTQBUSCA.wav"
seja $numpesq 1
@fixomenupesquisa
menu executa $numpesq $letpesq $pesquisa

se $letpesq = "#13"
se $numpesq = 1 chama @novapesquisa
se $numpesq = 1 retorna
se $numpesq = 2 chama @delhistpesquisa
se $numpesq = 2 retorna
se $numpesq > 2 retorna
fim se
se $letpesq = "n"
 chama @novapesquisa
retorna
fim se
se $letpesq = "a"
 chama @delhistpesquisa
retorna
fim se

se $letpesq = $f4
 chama @painelconfig
desvia @historicodepesquisa
fim se

se $letpesq = "y"
chama @atu_ytdl
desvia @historicodepesquisa
fim se

se $letpesq = "#27"
seja $pesquisa ""
 retorna
fim se
se $letpesq = $f2
se $numpesq < 2 retorna

Escreve "Editando campo de pesquisa"
bipa
fala $pesquisa
le edita $pesquisa
se $pesquisa = "" desvia @fixomenupesquisa
seja $apsq "appendpesq"
chama @gravaultimapesquisa
retorna
fim se

desvia @fixomenupesquisa

@novapesquisa
seja $quantoslidos 0
seja $apsq "appendpesq"
remove $apsq &
escreve mudo "Digite o que procura"
mensagem "som\vtdigp.wav"
le $pesquisa
se $pesquisa = "."
 chama @painelconfig
desvia @novapesquisa
fim se
se $pesquisa = ".atu_ytdl"
chama @atu_ytdl
desvia @novapesquisa
fim se

se $pesquisa = ".exec_lista_audio"
seja $letra ","
 chama @execlista
desvia @novapesquisa
fim se

se $pesquisa = ".exec_lista_video"
seja $letra "d"
 chama @execlista
desvia @novapesquisa
fim se

se $pesquisa = ".edit_lista"
 chama @editalista
desvia @novapesquisa
fim se

se $pesquisa = ".zera_lista"
 chama @zeralista
desvia @novapesquisa
fim se

se $pesquisa = ".rem_ult_lista"
 chama @retiraultimodalista
desvia @novapesquisa
fim se

se $pesquisa = ".quant_lista"
fala $quantosnalista
desvia @novapesquisa
fim se


se $pesquisa <> "" chama @gravaultimapesquisa
retorna

@delhistpesquisa
remove $mempesquisas
seja $historico_vazio 1
retorna

@gravaultimapesquisa
abre #1 $apsq &
escreve #1 $pesquisa
se $historico_vazio = 0
abre #2 $mempesquisas
le #2 l
checa c
enquanto c = 0
escreve #1 l
le #2 l
checa c
fim enquanto
fecha #2
fim se
fecha #1
se $historico_vazio = 0 remove $mempesquisas
renomeia $apsq $mempesquisas
retorna

@painelconfig
escreve "Painel de configuração."
escreve ""
escreve "Use setas para cima e para baixo para selecionar um ítem."
escreve "Tecle enter para editar um ítem da configuração."

abre #1 $arqconf

le #1 l
enquanto não l *=* "dirdownloads="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t

se l =* "%dirambiente%" substitui l "%dirambiente%" $dirambiente
menu cria 1 1 30 17

seja $itemconfig "Diretório padrão de download: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "quantosporbusca="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "limite de resultados por pesquisa:"
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "disableupdateytdlinic="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Desabilitar atualização do youtube-dl ao iniciar o voxtube-light"
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "mp3_channels="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Número de canais para os áudios mp3: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "mp3_bitrate="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Tacha de bits para os áudios mp3: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "mp3_resample="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "resample para os áudios mp3: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "usasapi="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Usa fala sapi? 0=não; 1=sim; 2=a mesma configuração ativa no dosvox: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "velgeral="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Velocidade geral da fala (afeta o eco de teclas, as mensagens com voz humana  e o sintetizador nativo do dosvox). -1=a mesma configurada no dosvox: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "tiposapi="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Tipo sapi: 3, 4, 5 ou 54? -1 define o mesmo configurado no dosvox: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "vozsapi="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Voz sapi. -1 usa a mesma configurada no dosvox: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "velsapi="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Velocidade sapi. -1 usa a mesma configurada no dosvox: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "tomsapi="
le #1 l
fim enquanto

seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja $itemconfig "Tom sapi. -1 usa o mesmo configurado no dosvox: "
concatena $itemconfig l
menu adiciona $itemconfig

enquanto não l *=* "toc="
le #1 l
fim enquanto
seja l ""
repete r 11
enquanto não l *=* "toc="
le #1 l
fim enquanto
seja p pos "=" l
soma p 1
seja t tamanho l
copia l l p t
seja p pos "," l
subtrai p 1
copia x l 1 p
se x = "#13" seja x "enter"

seja p pos "," l
soma p 1
seja t tamanho l
copia l l p t

seja $itemconfig "Tocador para a tecla "
concatena $itemconfig x
concatena $itemconfig ": "
concatena $itemconfig l
menu adiciona $itemconfig
fim repete
fecha #1

@fixomenuconfig
menu executa $numconfig $letconfig $textconfig

se $letconfig = "#13"
 chama @alteraconfig
desvia @painelconfig
fim se
se $letconfig = "#27" retorna
desvia @fixomenuconfig

@alteraconfig
seja q 0
seja $valtempconf "valtempconf"
escreve "Edite o valor
se $numconfig = 1 seja $novovalorconfig $dirdownloads
se $numconfig = 2 seja $novovalorconfig $limitebusca
se $numconfig = 3 seja $novovalorconfig $disableupdateytdlinic
se $numconfig = 4 seja $novovalorconfig $mp3_channels
se $numconfig = 5 seja $novovalorconfig $mp3_bitrate
se $numconfig = 6 seja $novovalorconfig $mp3_resample
se $numconfig = 7 seja $novovalorconfig $usasapi
se $numconfig = 8 seja $novovalorconfig $velgeral
se $numconfig = 9 seja $novovalorconfig $tiposapi
se $numconfig = 10 seja $novovalorconfig $vozsapi
se $numconfig = 11 seja $novovalorconfig $velsapi
se $numconfig = 12 seja $novovalorconfig $tomsapi
se $numconfig = 13 seja $novovalorconfig $t0
se $numconfig = 14 seja $novovalorconfig $t1
se $numconfig = 15 seja $novovalorconfig $t2
se $numconfig = 16 seja $novovalorconfig $t3
se $numconfig = 17 seja $novovalorconfig $t4
se $numconfig = 18 seja $novovalorconfig $t5
se $numconfig = 19 seja $novovalorconfig $t6
se $numconfig = 20 seja $novovalorconfig $t7
se $numconfig = 21 seja $novovalorconfig $t8
se $numconfig = 22 seja $novovalorconfig $t9
se $numconfig = 23 seja $novovalorconfig $t10

le edita $novovalorconfig

remove $valtempconf &

abre #1 $valtempconf &
abre #2 $arqconf

le #2 l
enquanto q < $numconfig
copia z l 1 1
se z <> "#" soma q 1
se q < $numconfig escreve #1 l
se q < $numconfig  le #2 l
fim enquanto

seja p pos "," l
se p = 0 seja p pos "=" l
subtrai p 1
copia $item l 1 p
soma p 1
copia l l p p
concatena l $novovalorconfig
concatena $item l
escreve #1 $item
le #2 l
checa c
enquanto c = 0
escreve #1 l
le #2 l
checa c
fim enquanto
fecha #2
fecha #1
remove $arqconf
renomeia $valtempconf $arqconf
chama @carregaconf
escreve "Valor alterado."
retorna

@tratalinkdireto
busca b "bin\youtube-dl.exe"
se b = "" chama @baixa_ytdl

seja $arqtela "temp\pag"
seja $numpag 1
concatena $arqtela $numpag
seja z "youtube-dl.exe"
seja $executayoutubedl "bin\youtube-dl.exe -e """
concatena $executayoutubedl $pesquisa
concatena $executayoutubedl """"
executa $executayoutubedl &&&
existeprog z p
enquanto p = 1
espera ms 500
existeprog z p
fim enquanto
seja $linhaembranco crlf
le console $saidaconsole
copia $cr $linhaembranco 1 1
copia $lf $linhaembranco 2 2

seja p pos $lf $saidaconsole
subtrai p 1
copia $titulostream $saidaconsole 1 p

abre #1 $arqtela &
escreve #1 $titulostream
escreve #1 $titulostream
escreve #1 $pesquisa
fecha #1
soma $quantoslidos 1
retorna

@atu_ytdl
busca y "bin\youtube-dl.exe"
se y = ""
Escreve "Baixando o youtube-dl. Aguarde."
chama @baixa_ytdl
retorna
fim se
escreve "Verificando a versão do youtube-dl. Aguarde."
chama @obtem_tag_ultimaversao_ytdl
chama @obtem_versao_ytdl_local
se $versao_local = $ultimaversao
escreve "Sua versão do youtube-dl já está atualizada."
escreve "Youtube-dl versão "$ultimaversao
retorna
fim se

escreve "Está disponível uma versão mais atualizada do youtube-dl."
Escreve ""
escreve "Versão presente na sua máquina: "$versao_local
escreve "Última versão disponível no repositório do youtube-dl: "$ultimaversao
escreve ""
escreve "Deseja atualizar o youtube-dl agora?"
le mudo $resposta &
se $resposta = "s"  chama @baixa_ytdl
retorna

@atu_ytdl_inic
se $disableupdateytdlinic <> 0 retorna
escreve "Voxtube-light - aguarde..."

busca y "bin\youtube-dl.exe"
se y = ""
chama @baixa_ytdl
retorna
fim se

chama @obtem_tag_ultimaversao_ytdl
chama @obtem_versao_ytdl_local
se $versao_local = $ultimaversao retorna

escreve "Está disponível uma versão mais atualizada do youtube-dl."
Escreve ""
escreve "Versão presente na sua máquina: "$versao_local
escreve "Última versão disponível no repositório do youtube-dl: "$ultimaversao
escreve ""
escreve "Deseja atualizar o youtube-dl agora?"
@OqueFazerAtuYtdl
escreve "Digite s para sim, n para não ou 0 para não atualizar e não perguntar novamente."
le mudo $resposta &
se $resposta = "s"
 chama @baixa_ytdl
senão
se $resposta = "n"
retorna
senão
se $resposta = "0"
abre #1 $arqconf
abre #2 "cp_arqconf"&

le #1 l
enquanto não l ="disableupdateytdlinic=0"
escreve #2 l
le #1 l
fim enquanto
seja l "disableupdateytdlinic=1"
escreve #2 l
le #1 l
checa c
enquanto c = 0
escreve #2 l
le #1 l
checa c
fim enquanto
fecha #2
fecha #1
remove $arqconf
renomeia "cp_arqconf" $arqconf
senão
desvia @OqueFazerAtuYtdl
fim se
retorna

@baixa_ytdl
escreve "Baixando youtube-dl."
chama @obtem_tag_ultimaversao_ytdl
seja $url_ytdl "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_x86.exe"
seja $arqtemp_ytdl "ytdltmp"
*trazdarede $url_ytdl $arqtemp_ytdl 0 "webvox" "" $chk
seja $trazdarede "bin\wget -b -o temp\0.log -O """
concatena $trazdarede $arqtemp_ytdl
concatena $trazdarede """ --no-check-certificate """
concatena $trazdarede $url_ytdl
concatena $trazdarede """"
executa $trazdarede &&
existeprog "wget.exe" $chk
enquanto $chk = 1
bipa 1
espera 1
existeprog "wget.exe" $chk
fim enquanto

busca b $arqtemp_ytdl
se b = ""
Escreve "Não foi possível atualizar o youtube-dl."
escreve "Verifique sua conexão com a internet e tente outra vez."
senão
remove "bin\youtube-dl.exe" &
renomeia $arqtemp_ytdl "bin\youtube-dl.exe"
escreve "Youtube-dl atualizado."
fim se
retorna

@player_interno
seja $tocando 0

handle $handle
seja $cima "#0#72"
seja $baixo "#0#80"
seja $esquerda "#0#75"
seja $direita "#0#77"
seja $enter "#13"
seja $home "#0#71"
seja $end "#0#79"
seja $espaco " "
seja $ponto "."
seja $esc "#27"
seja $f1 "#0#59"
seja $f7 "#0#65"

chama @miniplay.cmd
se $tocando = 0 retorna
@comandosplayerinterno
le mudo $opcao &
se $opcao = $f1 chama @ajudaplayerinterno
se $opcao = $cima chama @aumentavolume
se $opcao = $baixo chama @abaixavolume
se $opcao = $esquerda chama @voltar
se $opcao = $direita chama @avancar
se $opcao = $home chama @inicmusica
se $opcao = $end chama @fimmusica
se $opcao = $espaco chama @playpause
se $opcao = $ponto chama @parar
se $opcao = "d" chama @salvavideo
se $opcao = "m" chama @salvavideomp3
se $opcao = "s" chama @coplinkstreaming
se $opcao = $f7 retorna
se $opcao = $esc
 chama @fecha_player_interno
retorna
fim se
desvia @comandosplayerinterno

*
@miniplay.cmd
seja $volumecentral 1000
seja $volumedireito 1000
seja $volumeesquerdo 1000

@inicia
seja $ouvindo a

seja $cmdmci "open ""mpegvideo!"
concatena $cmdmci $url
concatena $cmdmci """ alias musica"

chama @fecha_player_interno
mci r $cmdmci
se r <> 1
escreve "Não consegui carregar o conteúdo solicitado: " $url
retorna
fim se

*evita reproduzir vídeos em janela separada;
seja $mcijanela "window musica handle "
concatena $mcijanela $handle
mci w $mcijanela

mci $tocando "play musica"
seja $tocando 1
seja $playerinternoativo 1
mci $tempomusica "status musica length"
retorna

@voltar
chama @vesetocando
se r = "" retorna
seja r maiusc r
mci $posmusica "status musica position"
se $posmusica > 5000
subtrai $posmusica 5000
senão
seja $posmusica 1
fim se
seja $voltamusica "seek musica to "
concatena $voltamusica $posmusica
mci r $voltamusica
mci $tocando "play musica"
seja $tocando 1
retorna

@avancar
chama @vesetocando
se r = "" retorna
mci $posmusica "status musica position"
soma $posmusica 5000
seja $avancamusica "seek musica to "
concatena $avancamusica $posmusica
mci r $avancamusica
mci $tocando "play musica"
seja $tocando 1
retorna

@parar
chama @vesetocando
se r = "" retorna
seja $tocando 0
mci $parado "stop musica"
seja $parado 1
retorna

@playpause
chama @vesetocando
se r = "" retorna
se $tocando = 1
 mci $posmusica "status musica position"
mci $pausado "pause musica"
seja $parado 0
seja $tocando 0
senão
seja $retoma "play musica"
se $parado = 1 seja $posmusica 1
se $posmusica > 0 concatena $retoma " from "
se $posmusica > 0 concatena $retoma $posmusica
mci r $retoma
seja $tocando 1
fim se
retorna

@aumentavolume
chama @vesetocando
se r = "" retorna
se $volumecentral < 1000
soma $volumecentral 20
soma $volumeesquerdo 20
soma $volumedireito 20
seja r "setaudio musica left volume to "
concatena r $volumeesquerdo
mci v r
seja r "setaudio musica right volume to "
concatena r $volumedireito
mci v r
fim se
retorna

@abaixavolume
chama @vesetocando
se r = "" retorna
se $volumecentral > 0
subtrai $volumecentral 20
subtrai $volumeesquerdo 20
subtrai $volumedireito 20
seja r "setaudio musica left volume to "
concatena r $volumeesquerdo
mci v r
seja r "setaudio musica right volume to "
concatena r $volumedireito
mci v r
fim se
retorna

@inicmusica
chama @vesetocando
se r = "" retorna
mci r "stop musica"
mci r "play musica from 1"
retorna

@fimmusica
chama @vesetocando
se r = "" retorna
seja $vaparafim $tempomusica
subtrai $vaparafim 4000
mci r "stop musica"
seja f "play musica from "
concatena f $vaparafim
mci r f
retorna

@ajudaplayerinterno
Escreve "Opções do player:"
Escreve "Espaço: play/pause."
Escreve "Ponto: Stop."
Escreve "Seta esquerda: recuar 5 segundos."
Escreve "Seta direita: avançar 5 segundos."
escreve "Home: vai para o início"
escreve "end: vai para o fim"
escreve "d: faz download do que você está assistindo"
escreve "m: salva o que você está assistindo em formato mp3"
escreve "s: copiar endereço do streaming para a área de transferência"
Escreve "F1: mostrar esta ajuda."
Escreve "Esc: terminar a execução."
retorna
@fecha_player_interno
mci r "close musica"
seja $playerinternoativo 0
retorna

*
@mp3rapido
chama @downloadrapido
*seja $nomearquivo $texto
*concatena $nomearquivo ".mp3"
*chama @subscaracinvalidos
seja $convmp3 "bin\ffmpeg -i """
concatena $convmp3 $nomearquivo
concatena $convmp3 """ -ab 192000 -ac 2 -ar 44100 -y """
*concatena $convmp3 "downloads\"
substitui $nomearquivo ".mp4" ".mp3"
concatena $convmp3 $nomearquivo
concatena $convmp3 """"
executa $convmp3 &&&
le console $buff
toca "som\hotkey.wav"&
@esperaconvercaoacabar

observa teclado t
enquanto t = 0
espera ms 200
le console $buff
se $buff <> ""seja $cpbuff $buff
existeprog "ffmpeg.exe" x
se x = 0
toca "som\removeuser.wav"&
substitui $nomearquivo ".mp3" ".mp4"
remove $nomearquivo &
retorna
fim se

observa teclado t
fim enquanto
le mudo t &
se x = 1
bipa 1
se t = "#13" chama @statusconvercaomp3
fim se
desvia @esperaconvercaoacabar

@downloadrapido
*dir troca "downloads"
seja $pref_nomearq "downloads\"
*seja $nomearquivo $texto

abre #1 $arqtela
seja $numero (($numero*3)-1)
repete r $numero
le #1 $nomearquivo
fim repete
fecha #1
seja $numero (($numero+1)/3)

concatena $pref_nomearq $nomearquivo
seja $nomearquivo $pref_nomearq
concatena $nomearquivo ".mp4"
chama @subscaracinvalidos
se $nomearquivo <> ""
toca "som\DoDoop9.wav"&
 trazdarede $url $nomearquivo 0 "" "scripvox" x

toca "som\msn_switching.wav"&
fim se
*dir troca ".."
retorna


*
@coplinkstreaming
transfere de $url
bipa 1
retorna

*
@vesetocando
mci r "status musica mode"
retorna

@sorteiachave
seja $qchaves 0
randomiza
seja $arqchaves "vtk"
abre #1 $arqchaves
le #1 $ykey
checa c
enquanto c = 0
soma $qchaves 1
le #1 $ykey
checa c
fim enquanto
fecha #1

abre #1 $arqchaves
seja $sortkey rand $qchaves
soma $sortkey 1
repete r  $sortkey
le #1 $ykey
fim repete
fecha #1
retorna

@baixar_video
seja $novalinha crlf
se $letra = "d"
*passa direto, já tem o link;
senão
se $letra = ","
*passa direto, já tem o link;
senão
chama @pega_url_video_selec
fim se

seja $url l
seja $baixavideo "bin\youtube-dl -f 18 -o """

seja t tamanho $nomearquivo
seja x t
subtrai t 3
copia z $nomearquivo t x
seja z maiusc z

se z <> ".MP4" concatena $nomearquivo ".mp4"
concatena $baixavideo $nomearquivo
seja $url l
concatena $baixavideo """ """
concatena $baixavideo $url
concatena $baixavideo """"
remove $nomearquivo &
executa $baixavideo &&&
espera 1
@esperadownloadacabar
observa teclado t
enquanto t = 0
espera ms 600
le console $buff
existeprog "youtube-dl.exe" x
se x = 0
seja $url ""
busca b $nomearquivo
se b = "" escreve "Erro. O vídeo não foi baixado. "$nomearquivo
retorna
fim se
observa teclado t
fim enquanto
le mudo t &
bipa 1
se t = "#13"
se $buff = "" le console $buff
seja p pos "[download]" $buff

se p = 0 bipa
se p = 0 escreve "Aperte enter novamente."
se p = 0 desvia @esperadownloadacabar

enquanto p > 0
soma p 10
seja t tamanho $buff
copia $buff $buff p t
seja p pos "[download]" $buff
fim enquanto

substitui $buff "of " "de "
substitui $buff "at " "velocidade "
substitui $buff "ETA " "tempo estimado"
substitui $buff $novalinha ""

seja p pos "[" $buff
se p > 0 subtrai p 1
se p > 0 copia $buff $buff 1 p
escreve $buff
escreve $texto
fim se
*espera 1
desvia @esperadownloadacabar

@pegadirambiente
seja $dirambiente ""
busca b dir "c:\winvox\voxtube-light"
se b <> ""
seja $dirambiente "c:\winvox\voxtube-light"
senão
seja $args params
seja q palavra 1 $args

se q = 0 desvia @errodirambiente
soma q 1

seja i 2
seja p palavra i $args
enquanto i <= q
substitui p "%20" " "
concatena $dirambiente p
concatena $dirambiente " "
soma i 1
seja p palavra i $args
fim enquanto
seja $dirambiente trim $dirambiente
fim se
retorna

@errodirambiente
escreve "erro."
Escreve "É necessário definir um diretório de trabalho."
escreve "O diretório padrão c:\winvox\voxtube-light não foi encontrado."
escreve ""
escreve "Verifique a instalação do programa."
escreve "Tecle enter para fechar."
le
termina mudo

@lercomentarios
Escreve "Criando arquivo de comentários."
escreve "Esse processo pode demorar, aguarde."

seja $comando "..\bin\youtube-dl --skip-download --get-comments --restrict-filename "
chama @pega_url_video_selec
concatena $comando l

dir troca "temp"
busca b "*.json"
enquanto b <> ""
remove b
busca b proximo
fim enquanto

escreve "Baixando comentários"
executa $comando &&&

espera 10
existeprog "youtube-dl.exe" x
enquanto x = 1
le console $buff
observa teclado t
se t <> 0 chama @leteclado_lercomentarios
espera ms 500
existeprog "youtube-dl.exe" x
fim enquanto

busca b "*.json"
se b = ""
Escreve "Não consegui pegar os comentários."
retorna
fim se
Escreve "Preparando para leitura"
abre #1 b
le #1 j
fecha #1

remove "comentarios.txt" &
abre #1 "comentarios.txt"&
substitui j "\""" "~^"
substitui j "\u0026" "&"
substitui j "\r" ""
seja p pos """text""" j
enquanto p > 0
soma p 9
seja t tamanho j
copia j j p t
seja p pos """" j
subtrai p 1
copia $textocomentario j 1 p

seja p pos """author""" j
soma p 11
seja t tamanho j
copia j j p t
seja p pos """" j
subtrai p 1
copia $autorcomentario j 1 p
*seja $cpautorcomentario $autorcomentario
utf8paraansi $autorcomentario
*se $autorcomentario = "" seja $autorcomentario $cpautorcomentario

seja p pos """_time_text""" j
soma p 15
seja t tamanho j
copia j j p t
seja p pos """" j
subtrai p 1
copia $datacomentario j 1 p

chama @escrevecomentario
seja p pos """text""" j
fim enquanto
fecha #1

escreve mudo "Abrindo no edivox para leitura"
mensagem "som\abrindo_no_edivox_para_leitura.wav"
seja $edivox "c:\winvox\edivox /l comentarios.txt"
executa $edivox
dir troca ".."
retorna

@escrevecomentario
escreve #1 $autorcomentario", "$datacomentario":"

substitui $textocomentario "~^" """"
seja p pos "\n" $textocomentario
se p = 0
utf8paraansi $textocomentario
seja $textocomentario trim $textocomentario
escreve #1 $textocomentario
escreve #1 ""
retorna
fim se

enquanto p > 0
subtrai p 1
copia d $textocomentario 1 p
utf8paraansi d
seja d trim d
escreve #1 d
soma p 3
seja t tamanho $textocomentario
copia $textocomentario $textocomentario p t
seja p pos "\n" $textocomentario
fim enquanto

utf8paraansi $textocomentario
seja $textocomentario trim $textocomentario
substitui $textocomentario "~^" """"
escreve #1 $textocomentario
escreve #1 ""
retorna

@leteclado_lercomentarios
le mudo k &
*se k = "#13"
escreve "Baixando a página de comentários, aguarde."
*fim se
bipa 1
retorna

@obtem_tag_ultimaversao_ytdl
seja $site_ytdl "HTTPS://github.com/yt-dlp/yt-dlp/releases/latest"
seja $arqpag_ytdl "temp\ytdl.html"

remove $arqpag_ytdl &
trazdarede $site_ytdl $arqpag_ytdl 0 "webvox" "" $chk
abre #1 $arqpag_ytdl
le #1 $tag_download_ytdl
enquanto não $tag_download_ytdl *=* "<title>Release yt-dlp "
le #1 $tag_download_ytdl
fim enquanto
fecha #1
seja p pos "<title>Release yt-dlp " $tag_download_ytdl
soma p 22
seja t tamanho $tag_download_ytdl
copia $tag_download_ytdl $tag_download_ytdl p t

seja p pos " " $tag_download_ytdl
subtrai p 1
copia $tag_download_ytdl $tag_download_ytdl 1 p
seja $ultimaversao $tag_download_ytdl
retorna

@obtem_versao_ytdl_local
executa "bin\youtube-dl.exe --version"&&&
existeprog "youtube-dl.exe" x
enquanto x = 1
espera ms 500
existeprog "youtube-dl.exe" x
fim enquanto

le console $versao_local
seja $nl crlf

substitui $versao_local $nl ""
*seja y $versao_local
*seja t tamanho y
*subtrai t 1
*copia z y tt
*enquanto z <> "."
*subtrai t 1
*copia z y tt
*fim enquanto
*subtrai t 1
*copia y y 1 t

*seja z $ultimaversao
*substitui y "." ""
*substitui z "." ""
retorna

@configfala
sintconfig $usasapi $velgeral $tiposapi $vozsapi $velsapi $tomsapi
retorna

@incluinalistadedownload
chama @obtem_nomearq
chama @pega_url_video_selec
abre #1 $lista &
escreve #1 $nomearquivo
escreve #1 l
fecha #1
bipa 1
soma $quantosnalista 1
fala $quantosnalista
retorna

@retiraultimodalista
se $quantosnalista = 0
escreve "A lista está vazia."
escreve "Nada a ser removido."
retorna
fim se

seja $alista $lista
concatena $alista ".aux"
remove $alista &

abre #2 $alista &
abre #1 $lista

repete  $contadorlista (($quantosnalista*2)-2)
le #1 $itemdalista
escreve #2 $itemdalista
fim repete
fecha #2
fecha #1
remove $lista
renomeia $alista $lista
subtrai $quantosnalista 1
bipa 1
fala $quantosnalista
se $quantosnalista = 0 remove $lista
retorna

@zeralista
remove $lista &
repete r 5
bipa 1
fim repete
Escreve "Lista de download zerada"
seja $quantosnalista 0
retorna

@editalista
se $quantosnalista = 0
escreve "A lista está vazia."
escreve "Nada a ser editado."
retorna
fim se

seja $edlista "c:\winvox\edivox.exe "
concatena $edlista $lista
executa $edlista
chama @atualizalista
retorna

@execlista
se $quantosnalista = 0
escreve "A lista está vazia."
Escreve "Nada a ser baixado"
retorna
fim se

abre #1 $lista
repete $contadorlista $quantosnalista
le #1 $nomearquivo
escreve "Preparando para baixar "$nomearquivo
le #1 l
se $letra = "d"
chama @salvavideo
senão
chama @salvavideomp3
fim se
fim repete
fecha #1
escreve "Fim da execussão da lista."
escreve $quantosnalista" ítens processados."
retorna

@atualizalista
seja $quantosnalista 0
busca b $lista
se b = "" retorna

abre #1 $lista
le #1 $itemdalista
checa $acaboulista
enquanto $acaboulista = 0
soma $quantosnalista 1
le #1 $itemdalista
checa $acaboulista
fim enquanto
fecha #1
divide $quantosnalista 2
se $quantosnalista = 0
 remove $lista
senão
repete $tra 5
bipa 1
fim repete
fim se
retorna

@obtem_nomearq
abre #1 $arqtela
seja $numero (($numero*3)-1)
repete r $numero
le #1 $nomearquivo
fim repete
fecha #1

seja $numero (($numero+1)/3)
chama @subscaracinvalidos

seja t tamanho $nomearquivo
copia z $nomearquivo t t
enquanto z = "."
subtrai t 1
copia $nomearquivo $nomearquivo 1 t
seja t tamanho $nomearquivo
copia z $nomearquivo t t
fim enquanto

retorna

*Verifica se o VLC existe.
*Se não existir, baixa o último disponível.
@vlc_existe
busca b dir "vlc"
se b <> "" retorna

Escreve "Procurando pela última versão do VLC, aguarde"
seja $baseurlvlc "http://get.videolan.org/vlc/last/win32/"
seja a "temp\vlctemp"
trazdarede $baseurlvlc a 0 "" "voxtube-light" x

abre #1 a
le #1 l
checa c
enquanto c = 0
se l *=* ".zip" desvia @encontrouvlczip
le #1 l
checa c
fim enquanto
@encontrouvlczip
fecha #1

seja p pos "<a href=""" l
soma p 9
seja t tamanho l
copia l l p t
seja p pos """" l
subtrai p 1
copia l l 1 p

seja $urlvlc $baseurlvlc
concatena $urlvlc l
seja $arquivovlc l

Escreve "Iniciando download do pacote: "$arquivovlc
trazdarede $urlvlc $arquivovlc 0 "" "voxtube-light" x

escreve "Extraindo pacote"

seja $extraipacote "bin\7za x "
concatena $extraipacote $arquivovlc
executa $extraipacote &&
existeprog "7za.exe" x
enquanto x = 1
espera ms 500
existeprog "7za.exe" x
fim enquanto
substitui $arquivovlc "-win32.zip" ""
renomeia $arquivovlc "vlc"
concatena $arquivovlc "-win32.zip"
remove $arquivovlc &

escreve "Vlc foi atualizado."
retorna

@ffmpeg_existe
busca b  "bin\ffmpeg.exe"
se b <> "" retorna
Escreve "Baixando ffmpeg, aguarde"
seja u "https://www.winvox.com.br/ffmpeg.7z"
seja a "bin\ffmpeg.7z"
trazdarede u a 0 "" "voxtube-light" x

escreve "Extraindo pacote"
dir troca "bin"
seja $extraipacote "7za x ffmpeg.7z"
executa $extraipacote &&
existeprog "7za.exe" x
enquanto x = 1
espera ms 500
existeprog "7za.exe" x
fim enquanto
busca b "ffmpeg.exe"
se b = ""
Escreve "Erro: não foi possível obter o arquivo ffmpeg.exe"
Escreve ""
Escreve "Baixe-o manualmente de"
escreve "https://www.winvox.com.br/ffmpeg.7z"
Escreve "Descompacte o pacote em c:\voxtube-light\bin, depois abra novamente o voxtube-light"
Escreve ""
Escreve "Aperte enter para encerrar o programa"
le
termina mudo
fim se
Escreve "FFMPEG baixado"
remove "ffmpeg.7z"
dir troca ".."
retorna
