pull/962/head
Konstantin Ullrich 5 years ago
parent 8c32bb93f7
commit c11a96ad01

@ -104,19 +104,29 @@ async function doSearch(
const [discussions, messages] = await Promise.all([ const [discussions, messages] = await Promise.all([
queryConversationsAndContacts(processedQuery, options), queryConversationsAndContacts(processedQuery, options),
queryMessages(processedQuery) queryMessages(processedQuery),
]); ]);
const { conversations, contacts } = discussions; const { conversations, contacts } = discussions;
let filteredMessages = messages.filter(message => message !== undefined); let filteredMessages = messages.filter(message => message !== undefined);
if (isAdvancedQuery) { if (isAdvancedQuery) {
let senderFilter: string[] = []; let senderFilter: string[] = [];
if (advancedSearchOptions['from'] !== null && advancedSearchOptions['from'].length > 0) { if (
const senderFilterQuery = await queryConversationsAndContacts(advancedSearchOptions['from'], options); advancedSearchOptions['from'] !== null &&
advancedSearchOptions['from'].length > 0
) {
const senderFilterQuery = await queryConversationsAndContacts(
advancedSearchOptions['from'],
options
);
senderFilter = senderFilterQuery.contacts; senderFilter = senderFilterQuery.contacts;
console.log(senderFilter); console.log(senderFilter);
} }
filteredMessages = filterMessages(filteredMessages, advancedSearchOptions, senderFilter); filteredMessages = filterMessages(
filteredMessages,
advancedSearchOptions,
senderFilter
);
console.log(filteredMessages); console.log(filteredMessages);
console.log(advancedSearchOptions); console.log(advancedSearchOptions);
} }
@ -162,14 +172,18 @@ function startNewConversation(
// Helper functions for search // Helper functions for search
function filterMessages(messages: any[], filters: AdvancedSearchOptions, contacts: string[]) { function filterMessages(
messages: any[],
filters: AdvancedSearchOptions,
contacts: string[]
) {
let filteredMessages = messages; let filteredMessages = messages;
if (filters['from'] !== null && filters['from'].length > 0) { if (filters['from'] !== null && filters['from'].length > 0) {
if (filters['from'] === '@me') { if (filters['from'] === '@me') {
filteredMessages = filteredMessages.filter(message => message.sent); filteredMessages = filteredMessages.filter(message => message.sent);
} else { } else {
filteredMessages = []; filteredMessages = [];
for(let contact of contacts) { for (let contact of contacts) {
for (const message of messages) { for (const message of messages) {
if (message.source === contact) { if (message.source === contact) {
filteredMessages.push(message); filteredMessages.push(message);
@ -179,14 +193,18 @@ function filterMessages(messages: any[], filters: AdvancedSearchOptions, contact
} }
} }
if (filters['before'] > 0) { if (filters['before'] > 0) {
filteredMessages = filteredMessages.filter(message => message.received_at < filters['before']); filteredMessages = filteredMessages.filter(
message => message.received_at < filters['before']
);
} }
if (filters['after'] > 0) { if (filters['after'] > 0) {
filteredMessages = filteredMessages.filter(message => message.received_at > filters['after']); filteredMessages = filteredMessages.filter(
message => message.received_at > filters['after']
);
} }
return filteredMessages; return filteredMessages;
}; }
function getUnixTimestampParameter(timestamp: string): number { function getUnixTimestampParameter(timestamp: string): number {
if (!isNaN(parseInt(timestamp))) { if (!isNaN(parseInt(timestamp))) {
@ -197,22 +215,24 @@ function getUnixTimestampParameter(timestamp: string): number {
} }
} }
function getAdvancedSearchOptionsFromQuery(query: string): AdvancedSearchOptions { function getAdvancedSearchOptionsFromQuery(
query: string
): AdvancedSearchOptions {
const filterSeperator = ':'; const filterSeperator = ':';
const filters: any = { const filters: any = {
query: null, query: null,
from: null, from: null,
before: null, before: null,
after: null after: null,
}; };
let newQuery = query; let newQuery = query;
const splitQuery = query.toLowerCase().split(' '); const splitQuery = query.toLowerCase().split(' ');
const filtersList = Object.keys(filters); const filtersList = Object.keys(filters);
for(let queryPart of splitQuery) { for (let queryPart of splitQuery) {
for(let filter of filtersList) { for (let filter of filtersList) {
const filterMatcher = filter + filterSeperator; const filterMatcher = filter + filterSeperator;
if(queryPart.startsWith(filterMatcher)) { if (queryPart.startsWith(filterMatcher)) {
filters[filter] = queryPart.replace(filterMatcher, ''); filters[filter] = queryPart.replace(filterMatcher, '');
newQuery = newQuery.replace(queryPart, '').trim(); newQuery = newQuery.replace(queryPart, '').trim();
} }
@ -223,7 +243,7 @@ function getAdvancedSearchOptionsFromQuery(query: string): AdvancedSearchOptions
filters['after'] = getUnixTimestampParameter(filters['after']); filters['after'] = getUnixTimestampParameter(filters['after']);
filters['query'] = newQuery; filters['query'] = newQuery;
return filters; return filters;
}; }
const getMessageProps = (messages: Array<MessageType>) => { const getMessageProps = (messages: Array<MessageType>) => {
if (!messages || !messages.length) { if (!messages || !messages.length) {

@ -6,8 +6,8 @@ export type SearchOptions = {
}; };
export type AdvancedSearchOptions = { export type AdvancedSearchOptions = {
query: string; query: string;
from: string; from: string;
before: number; before: number;
after: number; after: number;
}; };

Loading…
Cancel
Save