Add ability to have claim searches auto-fetch up to 3 pages. (#504)
* Add ability to have claim searches auto-fetch up to 3 pages. * make total_items and total_pages optional * use auto pagination strategy when determining live claim * Bump page size back to 50
This commit is contained in:
parent
3b6d3bf107
commit
2be14c86c3
3 changed files with 73 additions and 26 deletions
4
flow-typed/Lbry.js
vendored
4
flow-typed/Lbry.js
vendored
|
@ -101,8 +101,8 @@ declare type ClaimSearchResponse = {
|
|||
items: Array<Claim>,
|
||||
page: number,
|
||||
page_size: number,
|
||||
total_items: number,
|
||||
total_pages: number,
|
||||
total_items?: number,
|
||||
total_pages?: number,
|
||||
};
|
||||
|
||||
declare type ClaimListResponse = {
|
||||
|
|
|
@ -615,11 +615,16 @@ export function doClaimSearch(
|
|||
order_by?: Array<string>,
|
||||
release_time?: string,
|
||||
has_source?: boolean,
|
||||
has_no_souce?: boolean,
|
||||
has_no_source?: boolean,
|
||||
} = {
|
||||
no_totals: true,
|
||||
page_size: 10,
|
||||
page: 1,
|
||||
},
|
||||
settings: {
|
||||
useAutoPagination?: boolean,
|
||||
} = {
|
||||
useAutoPagination: false,
|
||||
}
|
||||
) {
|
||||
const query = createNormalizedClaimSearchKey(options);
|
||||
|
@ -659,7 +664,39 @@ export function doClaimSearch(
|
|||
return false;
|
||||
};
|
||||
|
||||
return await Lbry.claim_search(options).then(success, failure);
|
||||
const autoPaginate = () => {
|
||||
let allClaims = [];
|
||||
|
||||
const next = async (data: ClaimSearchResponse) => {
|
||||
allClaims = allClaims.concat(data.items);
|
||||
|
||||
const moreData = data.items.length === options.page_size;
|
||||
|
||||
options.page++;
|
||||
|
||||
if (options.page > 3 || !moreData) {
|
||||
// Flow doesn't understand that page_size is an optional property with a guaranteed default value.
|
||||
// $FlowFixMe
|
||||
return success({
|
||||
items: allClaims,
|
||||
page: options.page,
|
||||
page_size: options.page_size,
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
const data = await Lbry.claim_search(options);
|
||||
return next(data);
|
||||
} catch (err) {
|
||||
failure(err);
|
||||
}
|
||||
};
|
||||
|
||||
return next;
|
||||
};
|
||||
|
||||
const successCallback = settings.useAutoPagination ? autoPaginate() : success;
|
||||
return await Lbry.claim_search(options).then(successCallback, failure);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -74,31 +74,41 @@ const filterUpcomingLiveStreamClaims = (upcomingClaims) => {
|
|||
};
|
||||
|
||||
const fetchUpcomingLivestreamClaims = (channelIds: Array<string>) => {
|
||||
return doClaimSearch({
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
has_no_source: true,
|
||||
channel_ids: channelIds,
|
||||
claim_type: ['stream'],
|
||||
order_by: ['^release_time'],
|
||||
release_time: `>${moment().subtract(5, 'minutes').unix()}`,
|
||||
limit_claims_per_channel: 1,
|
||||
no_totals: true,
|
||||
});
|
||||
return doClaimSearch(
|
||||
{
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
has_no_source: true,
|
||||
channel_ids: channelIds,
|
||||
claim_type: ['stream'],
|
||||
order_by: ['^release_time'],
|
||||
release_time: `>${moment().subtract(5, 'minutes').unix()}`,
|
||||
limit_claims_per_channel: 1,
|
||||
no_totals: true,
|
||||
},
|
||||
{
|
||||
useAutoPagination: true,
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
const fetchMostRecentLivestreamClaims = (channelIds: Array<string>, orderBy: Array<string> = ['release_time']) => {
|
||||
return doClaimSearch({
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
has_no_source: true,
|
||||
channel_ids: channelIds,
|
||||
claim_type: ['stream'],
|
||||
order_by: orderBy,
|
||||
release_time: `<${moment().unix()}`,
|
||||
limit_claims_per_channel: 2,
|
||||
no_totals: true,
|
||||
});
|
||||
return doClaimSearch(
|
||||
{
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
has_no_source: true,
|
||||
channel_ids: channelIds,
|
||||
claim_type: ['stream'],
|
||||
order_by: orderBy,
|
||||
release_time: `<${moment().unix()}`,
|
||||
limit_claims_per_channel: 2,
|
||||
no_totals: true,
|
||||
},
|
||||
{
|
||||
useAutoPagination: true,
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
const distanceFromStreamStart = (claimA: any, claimB: any, channelStartedStreaming) => {
|
||||
|
|
Loading…
Reference in a new issue