Приложение C. Интерфейс QML

Примеры QML

Чтобы вызвать окно сценариев QML, воспользуйтесь контекстным меню списка файлов; чтобы указать список сценариев, воспользуйтесь вкладкой Команды пользователя диалога настройки. Установленные там сценарии возможно использовать в качестве примеров для создания собственных сценариев. QML использует синтаксис JavaScript. Вот пример простого сценария:

import Kid3 1.0

Kid3Script {
  onRun: {
    console.log("Hello world, folder is", app.dirName)
    Qt.quit()
  }
}

Если этот сценарий хранится по адресу /путь/к/Example.qml, команду пользователя возможно определить как @qml /путь/к/Example.qml и назвать Проверка QML. Также следует установить флажок в столбце Вывод. Чтобы выполнить сценарий, выберите в контекстном меню списка файлов пункт Проверка QML. Вывод будет показан в окне программы.

Помимо этого, сценарий также возможно запустить независимо от Kid3 с помощью инструментов QML.

qml -apptype widget -I /usr/lib/kid3/plugins/imports /путь/к/Example.qml

или

qmlscene -I /usr/lib/kid3/plugins/imports /путь/к/Example.qml

В операционных системах Windows® и macOS® путь для импорта должен быть изменён таким образом, чтобы он относился к папке imports, расположенной в каталоге с установленной программой. Сценарии, запущенные вне Kid3, будут использовать текущий каталог, поэтому путь следует изменить заранее.

Чтобы получить список заголовков тегов 2 из всех файлов в текущем каталоге, воспользуйтесь следующим сценарием:

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

Если каталог содержит большое количество файлов, такой сценарий может на некоторое время заблокировать возможность использования интерфейса, поэтому для выполнения длительных действий следует периодически прерывать работу сценария. В альтернативном варианте, который приводится далее, обработка отдельного файла вынесена в функцию. В конце эта функция вызывает себя со временем ожидания в 1 миллисекунду, если имеются другие файлы, которые следует обработать. Такая реализация позволяет продолжать работать с графическим интерфейсом во время работы сценария.

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

При использовании команды app.firstFile() вместе с командой app.nextFile() будут обработаны все файлы в текущем каталоге. Если требуется обработка только выделенных файлов, воспользуйтесь командами firstFile() и nextFile(), вспомогательными функциями компонента Kid3Script. В следующем примере представлен сценарий, который копирует только фреймы номера диска и авторских прав выделенного файла.

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

Другие примеры сценариев поставляются вместе с Kid3 в качестве команд пользователя.

  • ReplayGain to SoundCheck (ReplayGain2SoundCheck.qml): создаёт данные для iTunNORM SoundCheck на основе фреймов данных о выравнивании громкости.

  • Resize Album Art (ResizeAlbumArt.qml): изменяет размеры встроенных изображений обложек альбомов, если эти размеры превышают 500x500 пикселов.

  • Extract Album Art (ExtractAlbumArt.qml): извлекает все встроенные изображения обложек без создания дубликатов.

  • Embed Album Art (EmbedAlbumArt.qml): встраивает изображение обложки альбома из файлов изображений в аудиофайлы в том же каталоге.

  • Embed Lyrics (EmbedLyrics.qml): получает несинхронизированный текст песни из веб-сервиса.

  • Text Encoding ID3v1 (ShowTextEncodingV1.qml): помогает определить кодировку тегов ID3v1, отображая содержание тегов в текущем файле во всех доступных кодировках.

  • ID3v1 to ASCII (Tag1ToAscii.qml): преобразовывает все дополнительные символы латиницы в тегах ID3v1 в символы ASCII.

  • English Title Case (TitleCase.qml): форматирует текст в тегах по правилам использования регистра символов английского языка.

  • Rewrite Tags (RewriteTags.qml): перезаписывает все теги в выделенных файлах.

  • Export CSV (ExportCsv.qml): рекурсивно экспортирует все теги во всех файлах в файл CSV.

  • Export Playlist Folder (ExportPlaylist.qml): копирует все файлы из списка воспроизведения в каталог и переименовывает их в соответствии с их положением в списке.

  • QML Console (QmlConsole.qml): вызывает простую консоль для работы с программным интерфейсом QML Kid3.