Додаток 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 у контекстному меню списку файлів. Виведені скриптом дані буде показано у вікні програми.

На жаль, запуск скриптів QML за допомогою qml (наприклад, qml -apptype widget -I /usr/lib/kid3/plugins/imports /шлях/до/Example.qml) став неможливим у свіжих версіях Qt. Втім, kid3-cli пропонує інший спосіб запуску скриптів QML з командного рядка за допомогою власної команди execute.

kid3-cli -c "execute @qml /шлях/до/Example.qml"

Щоб отримати список заголовків у мітках 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): форматує текст у мітках за правилами використання регістру символів англійської мови.

  • Перезаписати мітки (RewriteTags.qml): Перезаписати мітки в усіх позначених файлах.

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

  • Import CSV (ImportCsv.qml): імпортувати рекурсивно усі мітки усіх файлів з файла CSV.

  • Export JSON (ExportJson.qml): експортувати рекурсивно усіх мітки усіх файлів до файла JSON.

  • Import JSON (ImportJson.qml): імпортувати рекурсивно усі мітки усіх файлів з файла JSON.

  • Export Playlist Folder (ExportPlaylist.qml): копіює усі файли зі списку відтворення до теки і перейменовує їх відповідно до їхньої позиції у списку.

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