Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/fetchers/upload-fetchers.js
Show First 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | SELECT id AS uploadID, secret AS uploadSecret, | ||||
type AS uploadType, extra AS uploadExtra | type AS uploadType, extra AS uploadExtra | ||||
FROM uploads | FROM uploads | ||||
WHERE id IN (${mediaIDs}) AND uploader = ${viewer.id} AND container IS NULL | WHERE id IN (${mediaIDs}) AND uploader = ${viewer.id} AND container IS NULL | ||||
`; | `; | ||||
const [result] = await dbQuery(query); | const [result] = await dbQuery(query); | ||||
return result.map(mediaFromRow); | return result.map(mediaFromRow); | ||||
} | } | ||||
async function fetchMediaFromMediaMessageContent( | async function fetchUploadsForMessage( | ||||
viewer: Viewer, | viewer: Viewer, | ||||
mediaMessageContents: $ReadOnlyArray<MediaMessageServerDBContent>, | mediaMessageContents: $ReadOnlyArray<MediaMessageServerDBContent>, | ||||
): Promise<$ReadOnlyArray<Media>> { | ): Promise<$ReadOnlyArray<Object>> { | ||||
const uploadIDs = []; | const uploadIDs = []; | ||||
for (const mediaContent of mediaMessageContents) { | for (const mediaContent of mediaMessageContents) { | ||||
uploadIDs.push(mediaContent.uploadID); | uploadIDs.push(mediaContent.uploadID); | ||||
if (mediaContent.type === 'video') { | if (mediaContent.type === 'video') { | ||||
uploadIDs.push(mediaContent.thumbnailUploadID); | uploadIDs.push(mediaContent.thumbnailUploadID); | ||||
} | } | ||||
} | } | ||||
const query = SQL` | const query = SQL` | ||||
SELECT id AS uploadID, secret AS uploadSecret, | SELECT id AS uploadID, secret AS uploadSecret, | ||||
type AS uploadType, extra AS uploadExtra | type AS uploadType, extra AS uploadExtra | ||||
FROM uploads | FROM uploads | ||||
WHERE id IN (${uploadIDs}) AND uploader = ${viewer.id} AND container IS NULL | WHERE id IN (${uploadIDs}) AND uploader = ${viewer.id} AND container IS NULL | ||||
`; | `; | ||||
const [uploads] = await dbQuery(query); | const [uploads] = await dbQuery(query); | ||||
return uploads; | |||||
} | |||||
async function fetchMediaFromMediaMessageContent( | |||||
viewer: Viewer, | |||||
mediaMessageContents: $ReadOnlyArray<MediaMessageServerDBContent>, | |||||
): Promise<$ReadOnlyArray<Media>> { | |||||
const uploads = await fetchUploadsForMessage(viewer, mediaMessageContents); | |||||
const uploadMap = _keyBy('uploadID')(uploads); | const uploadMap = _keyBy('uploadID')(uploads); | ||||
const media: Media[] = []; | const media: Media[] = []; | ||||
for (const mediaMessageContent of mediaMessageContents) { | for (const mediaMessageContent of mediaMessageContents) { | ||||
const primaryUploadID = mediaMessageContent.uploadID; | const primaryUploadID = mediaMessageContent.uploadID; | ||||
const primaryUpload = uploadMap[primaryUploadID]; | const primaryUpload = uploadMap[primaryUploadID]; | ||||
const primaryUploadSecret = primaryUpload.uploadSecret; | const primaryUploadSecret = primaryUpload.uploadSecret; | ||||
▲ Show 20 Lines • Show All 48 Lines • Show Last 20 Lines |