diff --git a/src/bots/factory/bots/approved/messages.ts b/src/bots/factory/bots/approved/messages.ts index ebf46dd..56d04e9 100644 --- a/src/bots/factory/bots/approved/messages.ts +++ b/src/bots/factory/bots/approved/messages.ts @@ -9,7 +9,7 @@ export const SETTINGS_MESSAGE = 'Настройки:'; export const SEARCH_MESSAGE = 'Что ищем?'; -export const BOOKS_NOT_FOUND = "Книги для не найдены."; +export const BOOKS_NOT_FOUND = "Книги не найдены."; export const AUTHORS_NOT_FOUND = "Авторы не найдены."; diff --git a/src/bots/factory/bots/approved/services/book_cache.ts b/src/bots/factory/bots/approved/services/book_cache.ts index ae28f0e..aed99c3 100644 --- a/src/bots/factory/bots/approved/services/book_cache.ts +++ b/src/bots/factory/bots/approved/services/book_cache.ts @@ -54,25 +54,29 @@ export async function clearBookCache(bookId: number, fileType: string): Promise< } export interface DownloadedFile { - source: Buffer; + source: NodeJS.ReadableStream; filename: string; caption: string; } export async function downloadFromCache(bookId: number, fileType: string): Promise { - const response = await got(`${env.CACHE_SERVER_URL}/api/v1/download/${bookId}/${fileType}`, { + const readStream = got.stream.get(`${env.CACHE_SERVER_URL}/api/v1/download/${bookId}/${fileType}`, { headers: { 'Authorization': env.CACHE_SERVER_API_KEY, }, }); - const captionData = response.headers['x-caption-b64']; + return new Promise((resolve, reject) => { + readStream.on("response", async response => { + const captionData = response.headers['x-caption-b64']; - if (captionData === undefined || Array.isArray(captionData)) throw Error('No caption?'); - - return { - source: response.rawBody, - filename: (response.headers['content-disposition'] || '').replaceAll('"', "").split('filename=')[1], - caption: decode(captionData), - } + if (captionData === undefined || Array.isArray(captionData)) throw Error('No caption?'); + + return resolve({ + source: readStream, + filename: (response.headers['content-disposition'] || '').replaceAll('"', "").split('filename=')[1], + caption: decode(captionData), + }) + }); + }); } diff --git a/src/bots/factory/bots/approved/services/downloader.ts b/src/bots/factory/bots/approved/services/downloader.ts index fab4436..5bbc4d1 100644 --- a/src/bots/factory/bots/approved/services/downloader.ts +++ b/src/bots/factory/bots/approved/services/downloader.ts @@ -4,35 +4,43 @@ import env from '@/config'; export interface DownloadedFile { - source: Buffer; + source: NodeJS.ReadableStream; filename: string; } export async function download(source_id: number, remote_id: number, file_type: string): Promise { - const response = await got(`${env.DOWNLOADER_URL}/download/${source_id}/${remote_id}/${file_type}`, { + const readStream = got.stream.get(`${env.DOWNLOADER_URL}/download/${source_id}/${remote_id}/${file_type}`, { headers: { 'Authorization': env.DOWNLOADER_API_KEY, }, }); - return { - source: response.rawBody, - filename: (response.headers['content-disposition'] || '').split('filename=')[1] - } + return new Promise((resolve, reject) => { + readStream.on("response", async response => { + resolve({ + source: readStream, + filename: (response.headers['content-disposition'] || '').split('filename=')[1] + }); + }); + }); } -export async function downloadImage(path: string) { - try { - const response = await got(path); +export async function downloadImage(path: string): Promise { + const readStream = got.stream.get(path, {throwHttpErrors: false}); - if (response.statusCode === 200) { - return response.rawBody; - } else { - return null; - } - } catch { - return null; - } + return new Promise((resolve, reject) => { + readStream.on("response", async response => { + if (response.statusCode === 200) { + resolve(readStream); + } else { + resolve(null); + } + }); + + readStream.once("error", error => { + resolve(null); + }) + }); }