You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
| import is from '@sindresorhus/is';
 | |
| 
 | |
| import { Collection as BackboneCollection } from '../types/backbone/Collection';
 | |
| import { deferredToPromise } from '../../js/modules/deferred_to_promise';
 | |
| import { IndexableBoolean } from '../types/IndexedDB';
 | |
| import { Message } from '../types/Message';
 | |
| 
 | |
| export const fetchVisualMediaAttachments = async ({
 | |
|   conversationId,
 | |
|   count,
 | |
|   WhisperMessageCollection,
 | |
| }: {
 | |
|   conversationId: string;
 | |
|   count: number;
 | |
|   WhisperMessageCollection: BackboneCollection<Message>;
 | |
| }): Promise<Array<Message>> =>
 | |
|   fetchFromAttachmentsIndex({
 | |
|     name: 'hasVisualMediaAttachments',
 | |
|     conversationId,
 | |
|     WhisperMessageCollection,
 | |
|     count,
 | |
|   });
 | |
| 
 | |
| export const fetchFileAttachments = async ({
 | |
|   conversationId,
 | |
|   count,
 | |
|   WhisperMessageCollection,
 | |
| }: {
 | |
|   conversationId: string;
 | |
|   count: number;
 | |
|   WhisperMessageCollection: BackboneCollection<Message>;
 | |
| }): Promise<Array<Message>> =>
 | |
|   fetchFromAttachmentsIndex({
 | |
|     name: 'hasFileAttachments',
 | |
|     conversationId,
 | |
|     WhisperMessageCollection,
 | |
|     count,
 | |
|   });
 | |
| 
 | |
| const fetchFromAttachmentsIndex = async ({
 | |
|   name,
 | |
|   conversationId,
 | |
|   WhisperMessageCollection,
 | |
|   count,
 | |
| }: {
 | |
|   name: 'hasVisualMediaAttachments' | 'hasFileAttachments';
 | |
|   conversationId: string;
 | |
|   WhisperMessageCollection: BackboneCollection<Message>;
 | |
|   count: number;
 | |
| }): Promise<Array<Message>> => {
 | |
|   if (!is.string(conversationId)) {
 | |
|     throw new TypeError("'conversationId' is required");
 | |
|   }
 | |
| 
 | |
|   if (!is.object(WhisperMessageCollection)) {
 | |
|     throw new TypeError("'WhisperMessageCollection' is required");
 | |
|   }
 | |
| 
 | |
|   const collection = new WhisperMessageCollection();
 | |
|   const lowerReceivedAt = 0;
 | |
|   const upperReceivedAt = Number.MAX_VALUE;
 | |
|   const condition: IndexableBoolean = 1;
 | |
|   await deferredToPromise(
 | |
|     collection.fetch({
 | |
|       index: {
 | |
|         name,
 | |
|         lower: [conversationId, lowerReceivedAt, condition],
 | |
|         upper: [conversationId, upperReceivedAt, condition],
 | |
|         order: 'desc',
 | |
|       },
 | |
|       limit: count,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   return collection.models.map(model => model.toJSON());
 | |
| };
 |