# Интерфейсы
# 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 строка массив строк названий файлов, папок, их комбинаций для объединения