Apèndix C. Interfície QML

Exemples en QML

Els scripts QML es poden invocar a través del menú contextual de la llista de fitxers i es poden configurar a la pestanya Accions de l'usuari del diàleg de configuració. Els scripts que s'estableixen allà es poden emprar com a exemples per a programar scripts personalitzats. El QML fa servir JavaScript, aquí teniu l'obligatori «Hola món»:

import Kid3 1.0

Kid3Script {
  onRun: {
    console.log("Hola món, la carpeta és", app.dirName)
    Qt.quit()
  }
}

Si aquest script es desa com /camí/a/Exemple.qml, l'ordre d'usuari es pot definir com a @qml /camí/a/Exemple.qml amb el nom Prova de QML i Sortida marcades. Després es podrà iniciar emprant l'element Prova de QML al menú contextual de la llista de fitxers, i la sortida serà visible a la finestra.

Malauradament, iniciar els scripts en QML emprant qml (p. ex., qml -apptype widget -I /usr/lib/kid3/plugins/imports /camí/a/Exemple.qml) està trencat en les versions recents de les Qt. Però el kid3-cli ofereix una forma alternativa d'executar un script en QML des de la línia d'ordres utilitzant la seva ordre execute.

kid3-cli -c "execute @qml /camí/a/Exemple.qml"

Per a llistar els títols a les etiquetes 2 de tots els fitxers en la carpeta actual, es podria emprar el següent script:

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())
  }
}

Si la carpeta conté molts fitxers, aquest script podria bloquejar la interfície d'usuari durant algun temps. Per a operacions més llargues, aquest hauria de disposar d'un descans de tant en tant. La següent implementació alternativa té la feina per a un sol fitxer mogut a una funció. Aquesta funció s'invoca amb un temps d'espera d'1 ms al final, atès que s'han de processar més fitxers. Això assegurarà que la IGU segueixi responent mentre s'executa l'script.

import Kid3 1.0

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

    app.firstFile()
    doWork()
  }
}

En emprar app.firstFile() amb app.nextFile(), es processaran tots els fitxers de la carpeta actual. Si només es veuen afectats els fitxers seleccionats, utilitzeu firstFile() i NextFile() en el seu lloc, aquestes són funcions convenients del component Kid3Script. El següent exemple és un script que només copia els marcs de número del disc i drets d'autor del fitxer seleccionat.

import Kid3 1.1

Kid3Script {
  onRun: {
    function doWork() {
      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(doWork, 1)
      }
    }

    firstFile()
    doWork()
  }
}

Amb el Kid3 venen més scripts d'exemple i ja estan registrats com a ordres d'usuari.

  • ReplayGain to SoundCheck (ReplayGain2SoundCheck.qml): crea la informació de comprovació del so d'iTunNORM a partir dels marcs de guany de la reproducció.

  • Redimensiona la caràtula (ResizeAlbumArt.qml): canvia la mida de les imatges incrustades de caràtula que tinguin més de 500x500 píxels.

  • Extreu la caràtula (ExtractAlbumArt.qml): extreu totes les imatges incrustades de caràtula evitant duplicats.

  • Caràtula incrustada (EmbedAlbumArt.qml): incrusta la caràtula que es troba en els fitxers d'imatge als fitxers d'àudio, tot a la mateixa carpeta.

  • Lletra incrustada (EmbedLyrics.qml): obté la lletra no sincronitzada des del servei web.

  • Codifica el text ID3 versió 1 (ShowTextEncodingV1.qml): ajuda a trobar la codificació de les etiquetes ID3 versió 1 mostrant les etiquetes del fitxer actual en totes les codificacions de caràcters disponibles.

  • ID3 versió 1 a ASCII (Tag1ToAscii.qml): translitera a ASCII els caràcters llatins estesos a l'etiqueta ID3 versió 1.

  • Posa en majúscules el títol en anglès (ExportCsv.qml): dona format en majúscules al text de les etiquetes en anglès.

  • Reescriu les etiquetes (RewriteTags.qml): reescriu totes les etiquetes en els fitxers seleccionats.

  • Exporta CSV (ExportCsv.qml): exporta recursivament totes les etiquetes de tots els fitxers a un fitxer CSV.

  • Importa CSV (ImportCsv.qml): importa recursivament totes les etiquetes de tots els fitxers des d'un fitxer CSV.

  • Exporta JSON (ExportJson.qml): exporta recursivament totes les etiquetes de tots els fitxers a un fitxer JSON.

  • Importa JSON (ImportJson.qml): importa recursivament totes les etiquetes de tots els fitxers des d'un fitxer JSON.

  • Exporta a una carpeta de llista de reproducció (ExportPlaylist.qml): copia tots els fitxers d'una llista de reproducció en una carpeta i en canvia el nom segons la seva posició.

  • Consola QML (QmlConsole.qml): consola senzilla per a jugar amb l'API de QML del Kid3.