umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
76 lines (75 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getImageInDB = getImageInDB;
exports.cardProcessing = cardProcessing;
const index_1 = require("../../../index");
const API_1 = require("../API");
const utils_1 = require("../Base/utils");
const constants_1 = require("./constants");
/**
* Получение токена, необходимого для отображения картинок в карточке Max
* @param controller Контроллер приложения
* @param path Путь до картинки
*/
async function getImageInDB(controller, path) {
return (0, utils_1.getImageToken)(path, constants_1.T_MAX_APP, controller, async (model) => {
const api = new API_1.MaxRequest(controller.appContext);
const upload = await api.upload(path, 'image');
if (upload?.token || upload?.url) {
model.imageToken = upload.token || upload.url;
if (await model.save(true)) {
return model.imageToken;
}
}
return null;
});
}
/**
* Получает карточку для отображения в Max.
* @param cardInfo Информация о карточке
* @param controller Контроллер приложения
* @returns {Promise<IMaxCard[]>} Одна карточка, массив карточек или пустой массив, если нечего отобразить
*/
async function cardProcessing(cardInfo, controller) {
if (cardInfo.images.length === 1 || cardInfo.showOne) {
if (!cardInfo.images[0].imageToken) {
if (cardInfo.images[0].imageDir) {
// eslint-disable-next-line require-atomic-updates
cardInfo.images[0].imageToken = await getImageInDB(controller, cardInfo.images[0].imageDir);
}
}
if (cardInfo.images[0].imageToken) {
return [
{
type: 'image',
payload: {
[index_1.Text.isUrl(cardInfo.images[0].imageToken) ? 'url' : 'token']: cardInfo.images[0].imageToken,
},
},
];
}
}
else {
const elements = [];
for (let i = 0; i < cardInfo.images.length; i++) {
const image = cardInfo.images[i];
if (!image.imageToken && image.imageDir) {
image.imageToken = await getImageInDB(controller, image.imageDir);
}
if (image.imageToken) {
elements.push(image.imageToken);
}
}
if (elements.length) {
return [
{
type: 'image',
payload: {
photos: elements,
},
},
];
}
}
return null;
}