# Características Avançadas do Amarok

## Atalhos de teclado

O &amarok; usa os atalhos do teclado, como a maioria das outras aplicações; abaixo, encontra-se uma listagem desses atalhos e das suas ações respectivas. Os atalhos globais podem ser configurados se clicar com o &RMB; na janela do Leitor e se selecionar a opção Configurar os Atalhos Globais.... Os atalhos do &amarok; podem ser configurados se clicar com o &RMB; na janela do Leitor e selecionar a opção Configurar os Atalhos...

Você poderá atribuir teclas multimídia para funcionarem como atalhos do &amarok;, tornando o seu teclado um centro de controle do &amarok;.

Os atalhos globais são:

Combinação de Teclas | Ação
--- | ---
WinX | Reproduzir
WinC | Pausar
WinV | Parar
WinB | Próxima Faixa
WinZ | Faixa Anterior
WinKP_Add | Aumentar o Volume
WinKP_Subtract | Diminuir o Volume
Win&Shift;KP_Add | Avançar
Win&Shift;KP_Subtract | Procurar regressivamente
WinA | Adicionar Mídia
WinP | Comutar a Lista
WinO | Mostrar o OSD
WinM | Silenciar Volume

Os atalhos do &amarok; são:

Combinação de Teclas | Ação
--- | ---
&Ctrl;C | Copiar
&Ctrl;KP_Enter | Ir para a Atual
&Ctrl;D | Colocar na Fila as Faixas Selecionadas
&Ctrl;Q | Sair
&Ctrl;&Shift;Z | Refazer
&Ctrl;S | Salvar a Lista de Reprodução
&Ctrl;A | Selecionar Tudo
&Ctrl;M | Mostrar o Menu
&Ctrl;H | Embaralhar
&Ctrl;Z | Desfazer

Os atalhos do Navegador na Lista de Reprodução são:

Combinação de Teclas | Ação
--- | ---
Espaço | Carregar Listas
F2 | Renomear a Lista
&Backspace; | Remover a Lista

## A Interface DCOP

A interface de DCOP do Amarok oferece-lhe uma forma simples de controlar o Amarok com os seus próprios programas personalizados.

A interface de DCOP do Amarok tem várias funções genéricas que poderão ser encontradas noutras aplicações do KDE. Esta seção está dividida em seis tabelas e pretende descrever as funções do DCOP para a coleção, o navegador de contexto, o leitor, a lista, o navegador da lista para os programas. Um exemplo da função de DCOP pause seria semelhante ao seguinte:

&percnt;dcop amarok player pause

### dcop amarok collection

Chamada DCOP | Ação
--- | ---
int totalAlbums() | Devolve o número total de álbuns na sua coleção.
int totalArtists() | Devolve o número total de artistas na sua coleção.
int totalCompilations() | Devolve o número total de compilações na sua coleção.
int totalGenres() | Devolve o número total de gêneros musicais na sua coleção.
int totalTracks() | Devolve o número total de faixas na sua coleção.
QString query( QString sql) | Executa uma pesquisa de SQL na base de dados.
QStringList similarArtists( int artistas ) | Devolve os artistas semelhantes às faixas atuais, limitando a quantidade a 'artistas'.
void migrateFile( QString urlAntigo, QString urlNovo ) | Move um arquivo na coleção, mantendo as estatísticas intactas.
void scanCollection() | Pesquisa a coleção.
void scanCollectionChanges() | Pesquisa a coleção apenas à procura de alterações.

### dcop amarok contextbrowser

Chamada DCOP | Ação
--- | ---
void showCurrentTrack() | Mostra a faixa atual no navegador de contexto.
void showLyrics() | Mostra a página das letras no navegador de contexto.
void showWiki() | Mostra a página do Wikipedia no navegador de contexto.

### dcop amarok player

Chamada DCOP | Ação
--- | ---
bool dynamicModeStatus() | Devolve o estado do modo dinâmico.
bool equalizerEnabled() | Devolve o estado do equalizador.
bool isPlaying() | Devolve 'true' se algo estiver sendo tocado no momento.
bool randomModeStatus() | Devolve o estado do modo aleatório.
bool repeatPlaylistStatus() | Devolve o estado de repetição da lista.
bool repeatTrackStatus() | Devolve o estado de repetição da faixa.
int getVolume() | Devolve o volume num intervalo de 0-100%.
int sampleRate() | Devolve a taxa de amostragem da faixa atualmente em reprodução.
int score() | Devolve a pontuação da faixa atual.
int status() | Devolve o estado de reprodução: 0 - parado, 1 - pausa, 2 - em reprodução.
int trackCurrentTime() | Devolve a posição de reprodução atual em segundos.
int trackPlayCounter() | Devolve o contador de reprodução da música atual.
int trackTotalTime() | Devolve o tamanho da faixa em segundos.
QString album() | Devolve o álbum da música que está tocando no momento.
QString artist() | Devolve o artista da faixa atual.
QString bitrate() | Devolve a taxa de amostragem em bits da faixa atual (XX kbps).
QString comment() | Devolve o comentário da música que está tocando no momento.
QString coverImage() | Devolve o URL codificado da imagem de capa da faixa atual.
QString currentTime() | Devolve a posição ([h:]mm:ss) da música que está tocando no momento.
QString encodedURL() | Devolve o URL codificado da faixa atual.
QString engine() | Devolve o motor de áudio atual.
QString genre() | Devolve o gênero da música que está tocando no momento.
QString lyrics() | Devolve as letras da faixa atual.
QString lyricsByPath( QString local ) | Devolve as letra de uma faixa pela sua localização.
QString nowPlaying() | O título da faixa atualmente em reprodução.
QString path() | Devolve o local não-codificado da faixa atual.
QString setContextStyle( QString ) | Define o estilo de CSS para o navegador de contexto.
QString title() | Devolve o título da faixa atual.
QString totalTime() | Devolve o tamanho total da música em reprodução (no formato [h:]mm:ss).
QString track() | Devolve o número da faixa.
QString type() | Devolve o tipo de arquivo.
QString year() | Devolve o ano da música que está sendo tocada no momento.
void configEqualizer() | Ativa ou desativa a janela de configuração do equalizador.
void enableDynamicMode(bool ativar) | Ativa ou desativa o Modo Dinâmico.
void enableOSD(bool ativar) | Ativa ou desativa a visualização OSD.
void enableRandomMode(bool ativar) | Ativa ou desativa o Modo Aleatório.
void enableRepeatPlaylist(bool ativar) | Ativa ou desativa a Repetição da Lista.
void enableRepeatTrack(bool ativar) | Ativa ou desativa a Repetição da Faixa.
void mediaDeviceMount() | Muda o comando usado para montar o dispositivo multimídia.
void mediaDeviceUmount() | Muda o comando usado para desmontar o dispositivo multimídia.
void mute() | Alterna o som entre ativo e em silêncio.
void next() | Equivalente a clicar no botão "Próximo".
void pause() | Equivalente a clicar no botão "Pausa".
void play() | Equivalente a clicar no botão "Tocar".
void playPause() | Alterna entre o estado de reprodução/pausa (bom para teclados multimídia)
void prev() | Equivalente a clicar no botão "Anterior".
void queueForTransfer( KURL url ) | Coloca o arquivo na fila para ser transferido para o Dispositivo Multimídia.
void seek(int s) | Coloca a faixa na posição absoluta indicada em segundos.
void seekRelative(int s) | Coloca a faixa na posição relativa à atual em segundos.
void setEqualizer(int, int, int, int, int, int, int, int, int, int, int) | Configura as bandas do equalizador
void setEqualizerEnabled( bool ativo ) | Comuta o equalizador.
void setEqualizerPreset( QString nome ) | Configura as predefinições do equalizador
void setLyricsByPath( QString url, QString letras ) | Atribui as letras de uma faixa pelo seu local.
void setScore( int pontos ) | Configura a pontuação da faixa atual.
void setScoreByPath( QString url, int pontos ) | Configura a pontuação de uma faixa pelo seu local.
void setVolume(int volume) | Configura o volume num intervalo de 0-100%.
void showBrowser( QString navegador ) | Mostra os navegadores na janela da lista de reprodução
void showOSD() | Mostra a visualização OSD na tela.
void stop() | Equivalente a clicar no botão "Parar".
void transferDeviceFiles() | Transfere os arquivos para o dispositivo multimídia.
void volumeDown() | Diminui o volume de forma razoável.
void volumeUp() | Aumenta o volume de forma razoável.

### dcop amarok playlist

Chamada DCOP | Ação
--- | ---
int getActiveIndex() | Devolve o índice da faixa atual ou -1 se não existir.
int getTotalTrackCount() | Devolve o número de faixas na lista de reprodução. 0 se não existirem faixas.
QString saveCurrentPlaylist() | Salva a lista atual em 'current.xml' e devolve o seu local.
void addMedia( KURL ) | Adiciona conteúdos multimídia com base no seu URL.
void addMediaList( KURL::List ) | Adicionas alguns conteúdos multimídia com base nos seus URLs.
void clearPlaylist() | Limpa a lista de reprodução.
void playByIndex(int) | Começa a tocar a faixa correspondente ao índice indicado.
void playMedia( KURL ) | Adiciona conteúdos multimídia com base no seu URL.
void popupMessage( QString) | Mostra uma mensagem temporária.
void removeCurrentTrack() | Remove o item da faixa atual da lista de reprodução.
void repopulate() | Volta a preencher a lista de reprodução com faixas aleatórias.
void saveM3u( QString local, bool locaisRelativos) | Salva a lista de reprodução atual como M3U.
void setStopAfterCurrent( bool ) | Ativa/desativa a funcionalidade "Parar Após a Faixa Atual".
void shortStatusMessage( QString) | Mostra uma mensagem temporária na barra de estado.
void shufflePlaylist() | Embaralha a lista de reprodução.
void togglePlaylist() | Ativa ou desativa a janela da lista de reprodução.

### dcop amarok playlistbrowser

Chamada DCOP | Ação
--- | ---
void addPodcast( QString ) | Adiciona um item de Podcast ao navegador de contexto.
void scanPodcasts() | Procura todas as atualizações de Podcast's.
void addPlaylist( QString ) | Adiciona uma lista de reprodução ao navegador da lista.

### dcop amarok script

Chamada DCOP | Ação
--- | ---
bool runScript( QString nome ) | Inicia o programa com o nome indicado. Devolve 'true' em caso de sucesso.
bool stopScript( QString nome ) | Pára o programa com o nome indicado. Devolve 'true' em caso de sucesso.
QStringList listRunningScripts() | Devolve uma lista com todos os programas atualmente em execução.
void addCustomMenuItem(QString submenu, QString tituloItem ) | Ativa e atribui um título ao item de menu personalizado.
void removeCustomMenuItem(QString submenu, QString tituloItem ) | Remove o item de menu personalizado.
QString readConfig( QString chave ) | Devolve um valor de item do AmarokConfig com base na chave indicada.

## Opções de Linha de Comando

O Amarok suporta a utilização das opções normais da linha de comando para o Qt e o &kde;. O Amarok tem também as suas opções específicas da aplicação.

As opções do Qt e kde:

Opção | Ação
--- | ---
--help | Mostra a ajuda sobre as opções.
--help-qt | Mostra as opções específicas do Qt.
--help-kde | Mostra opções específicas do KDE.
--help-all | Mostra todas as opções.
--author | Mostra informações sobre o autor.
-v, --version | Mostra a versão.
--license | Mostra informações sobre a licença.

As opções do Amarok:

As opções do &amarok; foram concebidas para serem utilizadas enquanto o &amarok; está rodando.

Opção | Ação
--- | ---
-r, --previous | Passa à faixa anterior na lista de reprodução.
-p, --play | Começa a tocar a lista de músicas atual.
-s, --stop | Interrompe a reprodução.
--pause | Pausa a reprodução.
-f, --next | Passa para a próxima faixa na lista de reprodução.
-a, --append | Adicionar arquivos/URLs à lista de reprodução.
-e, --enqueue | Veja 'append', disponível por razões de compatibilidade.
--queue | Coloca arquivos/URLs na lista após a faixa atual.
-m, --toggle-playlist-window | Ativa ou desativa a janela da lista de músicas.
--wizard | Lança o assistente da Primeira Execução.
--engine "nome" | Inicia o &amarok; como o motor "nome".

## Criação de 'Scripts'

A programação permite-lhe estender o &amarok; facilmente sem ter que alterar o código principal. Os programas ou 'scripts' são semelhantes a 'plugins', mas em vez de terem uma API de 'plugins' dedicada, eles usam apenas a interface de DCOP do &amarok; para a comunicação. Isto torna possível criar 'scripts' em qualquer linguagem de programação, como o Ruby, o Python ou o PHP. Você não só poderá criar programas nas linguagens de 'scripting' clássicas, como também em linguagens compiladas, como em C++ ou em C simples. Além disso, o &amarok; poderá notificar os 'scripts' para certos eventos e fazer com que estes reajam de acordo com essa situação. Este sistema de notificação será explicado mais tarde nesta seção.

### Combinações

É possível criar programas simples que não necessitem de interação com o usuário, assim como também é possível criar programas com GUIs confortáveis que se comportem como pequenas aplicações independentes. Para a programação da GUI, poderá ser usada uma das várias interfaces que o KDE oferece, como por exemplo o RubyQt, uma interface para a biblioteca do Qt em ruby. Contudo, deve ficar claro que nem todos os usuários possuem as interfaces disponíveis instaladas. Se optar por usar uma interface, tente usar uma das que sejam mais usada (p.ex., o RubyQt ou o PyQt).

Para mostrar alguma reação, quando algum programa se recusa a rodar devido a uma dependência em falta, verifique por favor o seu programa para saber se o módulo que deseja incluir existe de fato. Se faltar essa dependência, deverá capturar o erro e mostrar uma janela de informação, usando a ferramenta da linha de comando "kdialog", para que o usuário saiba porque o programa não funciona.

Este exemplo mostra como capturar uma dependência em falta no Ruby:

    begin
           require 'Korundum'
    rescue LoadError
           error = 'É necessário o Korundum (interface para o KDE em Ruby) do kdebindings v3.4 neste programa.'
           `kdialog --sorry '#{error}'`
           exit
    end

### Introdução: Os Modelos

O &amarok; oferece modelos de programas em várias linguagens na pasta `scripts/templates/`. Você poderá usar estes programas como base para os seus próprios 'scripts', assim como estendê-los com a funcionalidade que necessita. Irá reparar que a programação é, de fato, bastante intuitiva; por exemplo, se souber programar mais ou menos em Python, a criação do seu programa não irá levar muito tempo.

### Controlar o &amarok; com o DCOP

Os programas poderão controlar o Amarok, invocando algumas das suas funções de DCOP. A forma mais simples de invocar uma função do DCOP é usando o utilitário da linha de comando "dcop", que faz parte de qualquer distribuição do KDE.

Aqui está um exemplo para aumentar o volume-mestre:

    dcop amarok player volumeUp

A maioria das linguagens de programação permitem executar programas externos, com uma função do tipo exec(). Desta forma, o utilitário "dcop" poderá ser invocado facilmente. Aqui está um exemplo simples em Python:

    import os
     os.system("dcop amarok player volumeDown")

### Notificações

O &amarok; envia notificações para todos os programas em execução, escrevendo mensagens para o seu canal de 'stdin'. O programa deverá, deste modo, vigiar constantemente o 'stdin', de modo a reagir de acordo com cada um dos eventos possíveis. Os programas também poderão optar por ignorar qualquer evento que não necessitem.

Serão enviadas as seguintes notificações pelo &amarok;:

    configure
    Diz ao programa para mostrar a sua janela de configuração. O programa deverá
    lidar com o carregamento e salvamento das suas opções de configuração. Quando
    um programa é iniciado, o Amarok muda a sua pasta de trabalho para a pasta
    onde todos os dados deverão estar gravados.

    engineStateChange:empty|idle|paused|playing
    Assinala uma mudança no estado do motor.

    trackChange
    Assinala o início de uma faixa nova. O programa poderá então usar as
    funções de DCOP para obter mais informações sobre a faixa, p.ex., os
    meta-dados e o tamanho.

    volumeChangenovoVolume
    Assinala a mudança do nível de volume-mestre. O volume é um número inteiro
    de 0-100.

    customMenuClicked:submenu tituloItem locais
    Devolve as localizações dos arquivos selecionados na lista de reprodução
    quando o item do menu de contexto da lista de reprodução for clicado. O
    submenu e o tituloItem são também devolvidos por razões de identificação,
    no caso de um programa estar à espera de várias notificações.
    Para inserir um item no menu de contexto, use a chamada de DCOP
    'dcop amarok script addCustomMenuItem( submenu tituloItem )'. Para remover
    um item do menu de contexto, use a chamada de DCOP
    'dcop amarok script removeCustomMenuItem( submenu tituloItem )'.

### Finalização do 'Script'

Antes de o &amarok; sair, ou quando o usuário parar um 'script' com o Gerenciador de 'Scripts', o &amarok; envia o sinal SIGTERM para o programa. Este sinal poderá ser capturado para fazer algum trabalho de limpeza, como a gravação dos dados ou das opções de configuração.

### Empacotando

O Gerenciador de 'Scripts' do &amarok; é capaz de instalar pacotes de programas que o usuário tenha obtido de um servidor da Web. Os pacotes são arquivos comprimidos perfeitamente normais (.tar), opcionalmente comprimidos com o bzip2 (.bz2). Recomenda-se em grande medida que use um nome de arquivo do tipo meu-programa.amarokscript.tar.bz2, para que o usuário consiga identificar facilmente o pacote como um programa do Amarok.

O &amarok; 1.3 só irá aceitar pacotes de 'scripts' com a extensão 'amarokscript', por isso é melhor é usá-la logo desde o início.

O conteúdo do pacote deverá estar organizado da seguinte forma:

    myscript/
       README
       meu-programa.py (executável)
       um-modulo.py
       xpto.data
       ...

### Permissões dos arquivos

O programa principal deverá ter permissões de execução (+x) ativas, enquanto os módulos adicionais que o programa carregar não deverão ser executáveis. Para preservar as permissões do arquivo no pacote, você deverá usar o 'tar' com a opção '-p':

    tar -cf meu-programa.amarokscript.tar -p meu-programa

O &amarok; não será capaz de instalar o programa se as permissões não estiverem definidas corretamente.

### Distribuir

Quando o pacote estiver terminado, você poderá enviá-lo para o www.kde-apps.org e adicionar a referência à Página de 'Scripts' do Wiki do &amarok;. Para o item do 'kde-apps', deverá usar a categoria de 'Scripts' do &amarok;.