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