QML API

Das API lässt sich leicht über die QML Console erkunden, welche als Beispiel für ein Skript mit Benutzeroberfläche verfügbar ist.

Kid3Script

Kid3Script ist eine normale QML-Komponente im Plugin-Ordner. Man kann ebenso gut andere QML-Komponenten als Basis brauchen. Die Verwendung von Kid3Script sorgt dafür, dass sich eine Skript-Funktion einfach im onRun Signal Handler aufrufen lässt. Darüber hinaus werden noch einige Funktionen geboten:

onRun: Signal Handler, welcher beim Start des Skripts aufgerufen wird
tagv1, tagv2, tagv2v1: Konstanten für tag Parameter
script: Zugriff auf Skript-Funktionen
configs: Zugriff auf Konfigurations-Objekte
getArguments(): Liste mit Skript-Argumenten
isStandalone(): true wenn Skript nicht aus Kid3 heraus gestartet wird
setTimeout(callback, delay): Startet callback nach delay ms
firstFile(): Erste ausgewählte Datei
nextFile(): Nächste ausgewählte Datei

Skript-Funktionen

Da JavaScript und somit auch QML nur einen eingeschränkten Funktionsumfang für Skripte mitbringt, stellt das script Objekt einige Methoden zur Verfügung, welche den Funktionsumfang erweitern, unter anderem:

script.properties(obj): Qt Eigenschaften des Objekts
script.writeFile(filePath, data): Schreibe in Datei, true wenn OK
script.readFile(filePath): Lese Daten von Datei
script.removeFile(filePath): Lösche Datei, true wenn OK
script.fileExists(filePath): true wenn Datei existiert
script.fileIsWritable(filePath): true wenn Datei schreibbar ist
script.getFilePermissions(filePath): Lese Dateiberechtigungen (Mode Bits)
script.setFilePermissions(filePath, modeBits): Setze Dateiberechtigungen
script.classifyFile(filePath): Klasse der Datei (Ordner "/", Symlink "@",
  Exe "*", Datei " ")
script.renameFile(oldName, newName): Datei umbenennen, true wenn OK
script.copyFile(source, dest): Kopiere Datei, true wenn OK
script.makeDir(path): Erstelle Ordner, true wenn OK
script.removeDir(path): Lösche Ordner, true wenn OK
script.tempPath(): Ordner temporärer Dateien
script.musicPath(): Musik-Ordner
script.listDir(path, [nameFilters], [classify]): Liste der Ordnereinträge
script.system(program, [args], [msecs]): Systemkommando synchron ausführen,
  [exit code, standard output, standard error] wenn kein Timeout
script.systemAsync(program, [args], [callback]): Systemkommando asynchron
ausführen, callback wird mit [exit code, standard output, standard error] aufgerufen
script.getEnv(varName): Wert einer Umgebungsvariablen
script.setEnv(varName, value): Setze Wert einer Umgebungsvariablen
script.getQtVersion(): Qt Version, z.B. "5.4.1"
script.getDataMd5(data): MD5 Hash (hex) der Daten
script.getDataSize(data): Anzahl Datenbytes
script.dataToImage(data, [format]): Erzeuge Bild aus Daten
script.dataFromImage(img, [format]): Daten aus einem Bild
script.loadImage(filePath): Lade Bild aus einer Datei
script.saveImage(img, filePath, [format]): Speichere Bild in Datei, true wenn OK
script.imageProperties(img): Eigenschaften eines Bildes, enthält
  "width", "height", "depth" und "colorCount", leer wenn Bild ungültig
script.scaleImage(img, width, [height]): Liefert skaliertes Bild

Applikations-Kontext

Über QML ist ein großer Teil der Kid3 Funktionalität verfügbar. Das API ist ähnlich wie bei D-Bus. Für Details wird auf die dortige Beschreibung verwiesen.

app.openDirectory(path): Ordner öffnen
app.unloadAllTags(): Entlade alle Tags
app.saveDirectory(): Speichern
app.revertFileModifications(): Zuletzt gespeicherte Fassung
app.importTags(tag, path, fmtIdx): Datei importieren
app.importFromTags(tag, source, extraction): Aus Tags importieren
app.importFromTagsToSelection(tag, source, extraction): Aus Tags der ausgewählten Dateien importieren
app.downloadImage(url, allFilesInDir): Bild herunterladen
app.exportTags(tag, path, fmtIdx): Datei exportieren
app.writePlaylist(): Stückliste erstellen
app.getPlaylistItems(path): Stücke einer Wiedergabeliste
app.setPlaylistItems(path, items): Setze Stücke einer Wiedergabeliste
app.selectAllFiles(): Alles auswählen
app.deselectAllFiles(): Gesamte Auswahl aufheben
app.firstFile([select], [onlyTaggedFiles]): Erste Datei
app.nextFile([select], [onlyTaggedFiles]): Nächste Datei
app.previousFile([select], [onlyTaggedFiles]): Vorangehende Datei
app.selectCurrentFile([select]): Aktuelle Datei auswählen
app.selectFile(path, [select]): Spezifische Datei auswählen
app.getSelectedFilePaths([onlyTaggedFiles]): Alle ausgewählten Dateien
app.requestExpandFileList(): Alle ausklappen
app.applyFilenameFormat(): Dateinamenformat anwenden
app.applyTagFormat(): Tag-Format anwenden
app.applyTextEncoding(): Textkodierung anwenden
app.numberTracks(nr, total, tag, [options]): Stücke nummerieren
app.applyFilter(expr): Filter
app.convertToId3v23(): ID3v2.4 nach ID3v2.3 konvertieren
app.convertToId3v24(): ID3v2.3 nach ID3v2.4 konvertieren
app.getFilenameFromTags(tag): Dateiname von Tag
app.getTagsFromFilename(tag): Tag von Dateiname
app.getAllFrames(tag): Objekt mit allen Elementen
app.getFrame(tag, name): Hole Element
app.setFrame(tag, name, value): Setze Element
app.getPictureData(): Daten aus Bild-Element
app.setPictureData(data): Setze Daten in Bild-Element
app.copyToOtherTag(tag): Tag zu anderem Tag
app.copyTags(tag): Kopieren
app.pasteTags(tag): Einfügen
app.removeTags(tag): Entfernen
app.playAudio(): Wiedergabe
app.readConfig(): Konfiguration lesen
app.applyChangedConfiguration(): Konfiguration anwenden
app.dirName: Ordnername
app.selectionInfo.fileName: Dateiname
app.selectionInfo.filePath: Absoluter Dateiname
app.selectionInfo.detailInfo: Format Details
app.selectionInfo.tag(Frame.Tag_1).tagFormat: Tag 1 Format
app.selectionInfo.tag(Frame.Tag_2).tagFormat: Tag 2 Format
app.selectionInfo.formatString(tag, format): Ersetze Format-Codes
app.selectFileName(caption, dir, filter, saveFile): Öffnet Dateidialog, um
eine Datei auszuwählen
app.selectDirName(caption, dir): Öffnet Dateidialog, um Ordner auszuwählen

Für asynchrone Operationen können Callbacks mit Signalen verbunden werden.

function automaticImport(profile) {
  function onAutomaticImportFinished() {
    app.batchImporter.finished.disconnect(onAutomaticImportFinished)
  }
  app.batchImporter.finished.connect(onAutomaticImportFinished)
  app.batchImport(profile, tagv2)
}

function renameDirectory(format) {
  function onRenameActionsScheduled() {
    app.renameActionsScheduled.disconnect(onRenameActionsScheduled)
    app.performRenameActions()
  }
  app.renameActionsScheduled.connect(onRenameActionsScheduled)
  app.renameDirectory(tagv2v1, format, false)
}

Konfigurations-Objekte

Die einzelnen Konfigurationen sind über Methoden von configs verfügbar. Ihre Eigenschafen können in der QML Console aufgelistet werden.

script.properties(configs.networkConfig())

Eigenschaften können gesetzt werden:

configs.networkConfig().useProxy = false

configs.batchImportConfig()
configs.exportConfig()
configs.fileConfig()
configs.filenameFormatConfig()
configs.filterConfig()
configs.findReplaceConfig()
configs.guiConfig()
configs.importConfig()
configs.mainWindowConfig()
configs.networkConfig()
configs.numberTracksConfig()
configs.playlistConfig()
configs.renDirConfig()
configs.tagConfig()
configs.tagFormatConfig()
configs.userActionsConfig()