# Интерфейсы

# CubicPlayer.request

Плеер должен реализвать метод request для выполнения асинхронных действий. Метод должен вернуть строку "processing" или "not implemented".

interface CubicPlayer {
  request(requestId: string, jsonData: string): 'processing' | 'not implemented';
}

Пример параметров:

идентификатор запроса:
requestId: "5a3f8d0e2c7b4a91"

данные запроса:
jsonData: "{ "type": "donwload-urls", "payload": { "urls": ["url1", "url2"] } }"

jsonData - это строка в формате JSON. Объект содержит поле type - название операции и payload - параметры операции.

Веб проект реализует метод для получения ответа на запрос:

interface WebContent {
  response(requestId: string, error: string | null, jsonResult: string | null): void;
}

Пример параметров:

идентификатор запроса:
requestId: "5a3f8d0e2c7b4a91"

строка с ошибкой:
error: "Internet disconnected"
error: null

данные ответа:
jsonResult: "{ "type": "donwload-urls"; "payload": { "notDownloadedUrls": ["url1"] } }"

jsonResult - это строка в формате JSON. Объект содержит поле type - название операции и payload - результат операции.

Пример взаимодействия плеера и веб проекта:

Веб проект вызывает метод CubicPlayer.request("5a3f8d0e2c7b4a91", "{ "type": "donwload-urls", "payload": { "urls": ["url1", "url2"] } }"). На плеере метод должен сразу вернуть "processing", если операция начала выполняться или "not implemented", если данный функционал не реализован.

После завершения выполнения метода плеер вызывает: WebContent.response("5a3f8d0e2c7b4a91", null, "{ "type": "donwload-urls"; "payload": { "notDownloadedUrls": ["url1"] } }"), type - название операции, payload - результат операции.

Если возникла ошибка, то плеер должен вызывать: WebContent.response("5a3f8d0e2c7b4a91", "Internet disconnected", null). Вторым аргументов передается строка с ошибкой, третий параметр ответа - null.

# Загрузка файлов

Тип: donwload-urls

Запрос: CubicPlayer.request("5a3f8d0e2c7b4a91", "{ "type": "donwload-urls", "payload": { "urls": [ "http://cv7.me/photos/1.png", "http://cv7.me/photos/2.png" ] } }"), где urls - масcив с ссылками для загрузки.

Ответ: WebContent.response("5a3f8d0e2c7b4a91", null, "{ "type": "donwload-urls"; "payload": { "notDownloadedUrls": [ "http://cv7.me/photos/1.png" ] } }"), где notDownloadedUrls - масcив с ссылками, которые не были загружены.

Для уведомления о прогрессе загрузки на стороне плеера необходимо вызывать: window.WebContent.emit("{ "type": "download-info", "payload": { "processedCount": 3, "allCount": 10 } }"), где processedCount количество уже загруженных ссылок и ссылок, которые не удалось загрузить, но они уже обработаны алгоритмом загрузки файлов; allCount - общее количество загружаемых файлов.

# CubicPlayer

Плеер CubicVision должен определять объект window.CubicPlayer на встраиваемой веб странице. Интерфейс должен включать следующие методы:

# Вызов функции на стороне плеера

invoke(jsonData: string): string | Promise<string>
  • jsonData это { type: string, payload: any }
  • Установить родительское окно плеера по его заголовку:
    Для { "type": "setParentWindow", "payload": "Заголовок родительского окна" }.
    Результат "{ "result": true }" или "{ "result": false }"
  • Получить путь к скачанным файлам веб контента (id папки - виджет, в который он встроен):
    Для { "type": "getDownloadFolderPath", "payload": null }.
    Результат "{ "result": "C:\Users\sid-m\AppData\Roaming\CubicVision\widgets-data\123"}"
  • Скачать файлы веб контента (id папки - виджет, в который он встроен):
    Для {"type": "downloadUrls", "payload": [ "http://cv7.me/photos/1.png", "http://cv7.me/photos/2.png" ] }.
    Результат "{ "result": { "notDownloadedUrls": [] }"
  • Получить список скачанных файлов (id папки - виджет, в который он встроен):
    Для {"type": "getDownloadedFileNames", "payload": null }.
    Результат "{ "result": [ "1.png", "2.png" ]"

# Запуск события на стороне плеера

emit(jsonData: string): void
  • jsonData это { type: string, payload: any }
  • Закрыть клавиатуру:
    Для { "type": "closeKeyboard", "payload": null }.\

# Событие готовности веб контента

Веб контент вызывает этот метод, когда все обработчики window.WebContent зарегистрированы и готовы к работе

onWebContentReady(): void

После этого можно вызывать методы у window.WebContent

# Работа с хранилищем данных

getStoreValue
Метод для получения ранее сохранённых данных из стора плеера

getStoreValue(key: string): string | Promise<string>
  • key - Уникальный ключ ассоцируемый с данными
  • Возвращает JSON строку с данными или Promise c тем же результатом
  • Если данные в хранилище не найдены, необходимо возвращать: 'null'
  • В сторе могут храниться только строки в формате JSON

saveStoreValue
Метод для сохранения данных в сторе плеера

saveStoreValue(key: string, value: string, useAfterRepublishing: boolean): void | Promise<void>
  • key - Уникальный ключ ассоцируемый с данными
  • value - Строка в формате JSON (данные)
  • useAfterRepublishing - Должны ли данные очищаться после того как переопубликуют шаблон в CMS. true - не должны очищаться, false - должны очищаться. Если третий параметр отсутствует, считать, что передан false
  • Возвращает void или Promise c тем типом
  • Сразу после того, как будет вызвана функция, данные в сторе должны измениться
  • В сторе могут храниться только строки в формате JSON

getVar
Получить значение переменной

getVar(varName: string): string | Promise<string>
  • varName - Название переменной (например: var1)
  • Возвращает строку с значением переменной или Promise c тем же результатом
  • Если нет переменной с таким именем, то необходимо возвращать: ''

# Переход между сценами

goToScene
Метод для переключения сцены

goToScene(sceneId: number): void
  • sceneId - Id сцены, на которую нужно перейти

goToPreviousScene
Метод для перехода на предыдущую сцену

goToPreviousScene(): void
  • Плеер должен хранить id предыдущей сцены и осуществлять переход на эту сцену. Если предыдущей сцены не было, то ничего не делать.
  • Если были на первой сцене с id 0, то метод ничего не делает. Если затем перешли на сцену с id 1, и вызвали метод, то вернуться на сцену с id 0. Если вызывать метод ещё раз, ничего не делать, не нужно опять возвразаться на сцену с id 1.

# Логирование

writeLogToFile
Метод для записи лога в файл

writeLogToFile(logType: string, logText: string): void
  • logType - 'debug' | 'info' | 'error' | 'warning' (возможные значения)
  • logText - текст лога для записи
  • Лог записывается новой строчкой в файл логов за текущий день

# Приложение

changeAppVisibility
Изменение видимость приложения

changeAppVisibility(visible: boolean): void
  • visible - должно ли отображаться приложение поверх другого контента, если значение false, то приложение должно быть скрыто или свёрнуто и находиться на заднем плане

getAppVisibility
Получение видимости приложения

getAppVisibility(): boolean | Promise<boolean>

getAppDataPath
Получить путь к папке данных плеера. Это корневая папка в которой хранится расписание, скачанные файлы и тд. Возвращаемый путь должен быть в формате Unix path (using a '/' as separator).

getAppDataPath(): string | Promise<string>

getCurrentWebContentPath
Получение пути к index.html текущего веб контента

getCurrentWebContentPath(): string | Promise<string>

executeInCommandLine
Выполнение комад в Command Line системы

executeInCommandLine(command: string): string | Promise<string>
  • command - команда для выполнения в командной строке системы

# Файловая система

findFileLine
Найти строчку в файле, удовлетворяющей поисковому запросу

findFileLine(filePath: string, search: string, type: 'contains' | 'startsWith' | 'endsWith', fromEnd: boolean): string | Promise<string>
  • filePath - путь к файлу
  • search - поисковая строка, если пустая, то вернуть первую строку
  • type - *'contains' - искать строку, которая содержит search; 'startsWith' - начинается с search, 'endsWith' - заканчивается на search*
  • fromEnd - искать с конца файла

readDirectory
Получить список названий файлов и папок для заданной директории.
Возвращаемый результат - json строка, массив с названиями файлов и папок.

Пример: '["medias", "schedule.json"]'
readDirectory(dirPath: string): string | Promise<string>
  • dirPath - путь к директории, для которой нужно получить список названий файлов и папок

joinPathes
Объединение путей файлов

Результат может отличаться в зависимости от ОС, где разные раздилители (например /)
Пример jsonStrArr: '["vision", "data/cms", "schedule.json"]'
Пример результата "vision/data/cms/schedule.json"
joinPathes(jsonStrArr: string): string | Promise<string>
  • jsonStrArr - json строка массив строк названий файлов, папок, их комбинаций для объединения