Программный интерфейс QML

С программным интерфейсом возможно ознакомиться во время использования консоли QML, которая доступна в качестве примера сценария с пользовательским интерфейсом.

Kid3Script

Kid3Script — это обычный компонент QML, расположенный в каталоге модуля. Возможно использовать и любой другой компонент QML. Использование Kid3Script упрощает запуск функции сценария с помощью обработчика сигналов onRun. Кроме того, он предлагает несколько функций:

onRun: обработчик сигналов, который вызывается при запуске сценария
tagv1, tagv2, tagv2v1: постоянные для параметров тегов
script: доступ к функциям сценариев
configs: доступ к объектам конфигурации
getArguments(): список аргументов сценария
isStandalone(): true, если сценарий был запущен не в Kid3
setTimeout(callback, delay): запуск обратного вызова после задержки, указанной в миллисекундах
firstFile(): к первому выделенному файлу
nextFile(): к следующему выделенному файлу

Поддержка сценариев

В JavaScript и QML предусмотрен довольно ограниченный набор функций. Объект script имеет несколько дополнительных методов, в частности:

script.properties(obj): строка со свойствами Qt
script.writeFile(filePath, data): записать данные в файл, true, если успешно
script.readFile(filePath): прочитать данные из файла
script.removeFile(filePath): удалить файл, true, если успешно
script.fileExists(filePath): true, если файл существует
script.fileIsWritable(filePath): true, если файл доступен для записи
script.getFilePermissions(filePath): получить биты режима доступа к файлу
script.setFilePermissions(filePath, modeBits): указать биты режима доступа к файлу
script.classifyFile(filePath): получить класс файла (каталог — «/», символическая ссылка — «@», exe — «*»,
  файл « »)
script.renameFile(oldName, newName): переименовать файл, true, если успешно
script.copyFile(source, dest): скопировать файл, true, если успешно
script.makeDir(path): создать каталог, true, если успешно
script.removeDir(path): удалить каталог, true, если успешно
script.tempPath(): путь к временному каталогу
script.musicPath(): путь к каталогу с файлами музыки
script.listDir(path, [nameFilters], [classify]): список записей в каталоге
script.system(program, [аргументы], [миллисекунды]): синхронно запустить системную команду,
  [код выхода, стандартный вывод, стандартная ошибка], если не превышено время ожидания
script.systemAsync(program, [аргументы], [обратный вызов]): асинхронно запустить системную
команду, обратный вызов будет выполнен данными [код выхода, стандартный вывод, стандартная
ошибка]
script.getEnv(varName): получить значение переменной среды
script.setEnv(varName, value): указать значение переменной среды
script.getQtVersion(): строка версии Qt, например, «5.4.1»
script.getDataMd5(data): получить шестнадцатеричную строку хеша данных MD5
script.getDataSize(data): получить размер байтового массива
script.dataToImage(data, [формат]): создать изображение из байтов данных
script.dataFromImage(img, [формат]): получить байты данных из изображения
script.loadImage(filePath): загрузить изображение из файла
script.saveImage(img, filePath, [формат]): сохранить изображение в файл, true, если успешно
script.imageProperties(img): получить свойства изображения, карту, содержащую значения
  «width», «height», «depth» и «colorCount», возвращает пустое значение ,если изображение недействительно
script.scaleImage(img, width, [высота]): масштабировать изображение, возвращает масштабированное изображение

Контекст приложений

При использовании QML доступна большая часть функциональных возможностей Kid3. Программный интерфейс похож на тот, что используется для D-Bus. Для получения более подробной информации обратитесь к соответствующим заметкам.

app.openDirectory(path): открыть каталог
app.unloadAllTags(): выгрузить все теги
app.saveDirectory(): сохранить каталог
app.revertFileModifications(): отменить
app.importTags(tag, path, fmtIdx): импортировать файл
app.importFromTags(tag, source, extraction): импортировать из тегов
app.importFromTagsToSelection(tag, source, extraction): импортировать из тегов выделенных файлов
app.downloadImage(url, allFilesInDir): загрузить изображение
app.exportTags(tag, path, fmtIdx): экспортировать файл
app.writePlaylist(): записать список воспроизведения
app.getPlaylistItems(path): получить элементы списка воспроизведения
app.setPlaylistItems(path, items): установить элементы списка воспроизведения
app.selectAllFiles(): выделить все
app.deselectAllFiles(): снять выделение
app.firstFile([select], [onlyTaggedFiles]): до первого файла
app.nextFile([select], [onlyTaggedFiles]): до следующего файла
app.previousFile([select], [onlyTaggedFiles]): до предыдущего файла
app.selectCurrentFile([select]): выделить текущий файл
app.selectFile(path, [select]): выделить указанный файл
app.getSelectedFilePaths([onlyTaggedFiles]): получить пути к выделенным файлам
app.requestExpandFileList(): развернуть все
app.applyFilenameFormat(): применить формат имени файла
app.applyTagFormat(): применить формат тега
app.applyTextEncoding(): применить кодировку текста
app.numberTracks(nr, total, tag, [options]): пронумеровать дорожки
app.applyFilter(expr): отфильтровать
app.convertToId3v23(): преобразовать ID3v2.4.0 в ID3v2.3.0
app.convertToId3v24(): преобразовать ID3v2.3.0 в ID3v2.4.0
app.getFilenameFromTags(tag): получить имя файла из тегов
app.getTagsFromFilename(tag): получить теги из имени файла
app.getAllFrames(tag): получить объект со всеми фреймами
app.getFrame(tag, name): получить фрейм
app.setFrame(tag, name, value): установить фрейм
app.getPictureData(): получить данные из фрейма изображения
app.setPictureData(data): указать данные во фрейме изображения
app.copyToOtherTag(tag): скопировать данные тегов в другие теги
app.copyTags(tag): копировать
app.pasteTags(tag): вставить
app.removeTags(tag): удалить
app.playAudio(): воспроизвести
app.readConfig(): прочитать конфигурацию
app.applyChangedConfiguration(): применить конфигурацию
app.dirName: имя каталога
app.selectionInfo.fileName: имя файла
app.selectionInfo.filePath: абсолютный путь к файлу
app.selectionInfo.detailInfo: описание формата
app.selectionInfo.tag(Frame.Tag_1).tagFormat: формат тега 1
app.selectionInfo.tag(Frame.Tag_2).tagFormat: формат тега 2
app.selectionInfo.formatString(tag, format): заменить коды в строке формата
app.selectFileName(caption, dir, filter, saveFile): открыть диалоговое окно для
выбора файла
app.selectDirName(caption, dir): открыть диалоговое окно для выбора каталога

Для асинхронных действий обратные вызовы возможно связывать с сигналами.

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

Объекты конфигурации

Доступ к различным разделам конфигурации обеспечивается с помощью методов configs. Список их свойств возможно просмотреть с помощью консоли QML.

script.properties(configs.networkConfig())

Могут быть установлены такие свойства:

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