Appendix C. QML-gränssnitt

QML-exempel

QML-skript kan startas via fillistans sammanhangsberoende meny och det kan ställas in under fliken Användaråtgärder i inställningsdialogrutan. Skriptet som ställs in där kan användas som exempel för att programmera egna skript. QML använder JavaScript, och här är det obligatoriska "Hello World".

import Kid3 1.0

Kid3Script {
  onRun: {
    console.log("Hej allesamman, katalogen är", app.dirName)
    Qt.quit()
  }
}

Om skriptet sparas som /sökväg/till/Exempel.qml kan användarkommandot definieras som @qml /sökväg/till/Exempel.qml med namnet Test av QML och Utmatning markerat. Därefter kan det startas med alternativet Test av QML i fillistans sammanhangsberoende meny, så visas utmatningen i fönstret.

Tyvärr är start av QML-skript genom att använda qml (t.ex. qml -apptype widget -I /usr/lib/kid3/plugins/imports /sökväg/till/exempel.qml) sönder i senare versioner av Qt. Men kid3-cli erbjuder ett alternativt sätt att köra ett QML-skript från kommandoraden genom att använda dess kommando execute.

kid3-cli -c "execute @qml /sökväg/till/exempel.qml"

För att lista titlarna i tagg 2 för alla filer i aktuell katalog, skulle följande skript kunna användas:

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

Om katalogen innehåller många filer, ett sådant skript kan blockera användargränssnittet under en viss tid. För längre åtgärder, bör det därför ta en paus då och då. Den alternativa implementeringen nedan har flyttat ut arbetet för en enstaka fil till en funktion. Funktionen aktiverar sig själv med en 1 ms tidsgräns i slutet, under förutsättning att flera filer måste behandlas. Det säkerställer att det grafiska användargränssnittet förblir mottagligt medan skriptet kör.

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

Vid användning av app.firstFile() med app.nextFile(), processas alla filer i den aktuella katalogen. Om bara de markerade filerna ska påverkas, använd istället firstFile() och nextFile(), som är bekvämlighetsfunktioner i komponenten Kid3Script. Följande exempel är ett skript som bara kopierar den markerade filens skivnummer- och copyrightram.

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

Fler exempelskript levereras med Kid3 och är redan registrerade som användarkommandon.

  • ReplayGain till SoundCheck (ReplayGain2SoundCheck.qml): Skapa iTunNORM SoundCheck information från ramar med uppspelningsförstärkning.

  • Ändra storlek på omslag (ResizeAlbumArt.qml): Ändra storlek på inbäddade omslagsbilder som är större än 500 x 500 bildpunkter.

  • Extrahera omslag (ExtractAlbumArt.qml): Extrahera alla inbäddade omslagsbilder och undvik dubbletter.

  • Inbädda omslag (EmbedAlbumArt.qml): Inbädda omslag funna i bildfiler till ljudfiler i samma katalog.

  • Inbädda sångtexter (EmbedLyrics.qml): Hämta osynkroniserade sångtexter från webbtjänst.

  • Textkodning ID3v1 (ShowTextEncodingV1.qml): Hjälper till att hitta kodning av ID3v1-taggar genom att visa den aktuella filens taggar med alla tillgängliga teckenkodningar.

  • ID3v1 till ASCII (Tag1ToAscii.qml): Omvandlar utökade latinska tecken i ID3v1-taggar till ASCII.

  • Engelskt titelskiftläge (TitleCase.qml): Formaterar texten i taggarna med engelskt titelskiftläge.

  • Skriv om taggar (RewriteTags.qml): Skriv om alla taggar i de markerade filerna.

  • Exportera CSV (ExportCsv.qml): Exportera rekursivt alla taggar för alla filer till en CSV-fil.

  • Importera CSV (ImportCsv.qml): Importera rekursivt alla taggar för alla filer från en CSV-fil.

  • Exportera JSON (Exportjson.qml): Exportera rekursivt alla taggar för alla filer till en JSON-fil.

  • Importera JSON (Importjson.qml): Importera rekursivt alla taggar för alla filer till en JSON-fil.

  • Exportera spellistekatalog (ExportPlaylist.qml): Kopiera alla filer från en spellista till en katalog och byt namn på dem enligt deras position.

  • QML-terminal (QmlConsole.qml): Enkel terminal för att leka med Kid3s QML programmeringsgränssnitt.