Apêndice C. Interface em QML

Exemplos em QML

Os programas em QML podem ser invocados através do menu de contexto da lista de ficheiros e podem ser configurados na página Acções do Utilizador da janela de configuração. Os programas que são aqui configurados podem ser usados como exemplos para programas personalizados. O QML usa o JavaScript, sendo que aqui está o obrigatório "Olá Mundo":

import Kid3 1.0

Kid3Script {
  onRun: {
    console.log("Olá mundo, a pasta é", app.dirName)
    Qt.quit()
  }
}

Se este programa for gravado em /local/do/Exemplo.qml, o comando do utilizador poderá ser definido como @qml /local/do/Exemplo.qml com o nome Teste de QML e o Resultado assinalado. Poderá então ser iniciado com o item Teste de QML no menu de contexto da lista de ficheiros, ficando o resultado visível na janela.

Infelizmente, o arranque de programas em QML com o qml (p.ex. qml -apptype widget -I /usr/lib/kid3/plugins/imports /localização/do/Exemplo.qml) está com problemas nas versões recentes do Qt. Mas o kid3-cli oferece uma forma alternativa de executar um programa em QML a partir da linha de comandos, usando o seu comando execute.

kid3-cli -c "execute @qml /localização/do/Exemplo.qml"

Para enumerar os títulos nas marcas 2 de todos os ficheiros na pasta actual, poderia ser usado o seguinte programa:

import Kid3 1.0

Kid3Script {
  onRun: {
    app.firstFile()
    do {
      if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) {
        console.log(app.getFrame(tagv2, "title"))
      }
    } while (app.nextFile())
  }
}

Se a pasta tiver vários ficheiros, um destes programas poderá bloquear a interface do utilizador durante algum tempo. Para as operações mais demoradas, deverá então pausar de tempos a tempos. A implementação alternativa em baixo tem o trabalho feito para um único ficheiro transferido para uma função. Essa função invoca-se a si própria com um tempo-limite de 1 ms no fim, desde que existam mais ficheiros para serem processados. Isto irá garantir que a GUI continua a reagir enquanto o programa está em execução.

import Kid3 1.0

Kid3Script {
  onRun: {
    function trabalhar() {
      if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) {
        console.log(app.getFrame(tagv2, "title"))
      }
      if (!app.nextFile()) {
        Qt.quit()
      } else {
        setTimeout(trabalhar, 1)
      }
    }

    app.firstFile()
    trabalhar()
  }
}

Ao usar o app.firstFile() com o app.nextFile(), serão processados todos os ficheiros na pasta actual. Se só é suposto processar os ficheiros seleccionados, use o firstFile() e o nextFile() em alternativa; estas são funções de conveniência do componente Kid3Script. O seguinte exemplo é um programa que copia apenas os pacotes do número do disco e dos direitos de cópia do ficheiro seleccionado.

import Kid3 1.1

Kid3Script {
  onRun: {
    function trabalhar() {
      if (app.selectionInfo.tag(Frame.Tag_2).tagFormat) {
        app.setFrame(tagv2, "*.selected", false)
        app.setFrame(tagv2, "discnumber.selected", true)
        app.setFrame(tagv2, "copyright.selected", true)
        app.copyTags(tagv2)
      }
      if (!nextFile()) {
        Qt.quit()
      } else {
        setTimeout(trabalhar, 1)
      }
    }

    firstFile()
    trabalhar()
  }
}

Mais programas vêm disponíveis com o Kid3 e estão já registados como comandos do utilizador.

  • ReplayGain to SoundCheck (ReplayGain2SoundCheck.qml): Criar a informação de SoundCheck do iTunNORM a partir dos pacotes de ganho de reprodução.

  • Dimensionar as Imagens do Álbum (ResizeAlbumArt.qml): Dimensiona as imagens das capas dos álbuns incorporadas que forem maiores que 500x500 pixels.

  • Extrair as Imagens do Álbum (ExtractAlbumArt.qml): Extrai todas as imagens incorporadas das capas, evitando os duplicados.

  • Incorporar as Imagens do Álbum (EmbedAlbumArt.qml): Incorpora as imagens de capas encontradas nos ficheiros de imagens dentro dos ficheiros de áudio na mesma pasta.

  • Incorporar as Letras Musicais (EmbedLyrics.qml): Obtém as letras musicais não sincronizadas a partir de um serviço na Web.

  • Codificação de Texto do ID3v1 (ShowTextEncodingV1.qml): Ajuda a descobrir a codificação das marcas ID3v1, apresentando as marcas do ficheiro actual em todas as codificações de caracteres disponíveis.

  • ID3v1 para ASCII (Tag1ToAscii.qml): Traduz os caracteres acentuados estendidos na marca ID3v1 para ASCII.

  • Capitalização de Títulos em Inglês (TitleCase.qml): Formato o texto nas marcas como títulos em Inglês.

  • Reescrever as Marcas (RewriteTags.qml): Volta a gravar todas as marcas nos ficheiros seleccionados.

  • Exportar para CSV (ExportCsv.qml): Exporta de forma recursiva todas as marcas de todos os ficheiros para um ficheiro CSV.

  • Importar um CSV (ImportCsv.qml): Importa de forma recursiva todas as marcas de todos os ficheiros a partir de um ficheiro CSV.

  • Exportar para JSON (ExportJson.qml): Exporta de forma recursiva todas as marcas de todos os ficheiros para um ficheiro JSON.

  • Importar um JSON (ImportJson.qml): Exporta de forma recursiva todas as marcas de todos os ficheiros a partir de um ficheiro JSON.

  • Exportar a Pasta da Lista de Reprodução (ExportPlaylist.qml): Copiar todos os ficheiros de uma lista de reprodução para uma pasta e muda o nome delas de acordo com a sua posição.

  • Consola de QML (QmlConsole.qml): Uma consola simples para lidar com a API em QML do Kid3.