Requested limit to be fulfilled if possible

This commit is contained in:
Kaity A 2023-04-04 02:46:06 +10:00
parent d1023cf326
commit 44b35d27ed
10 changed files with 172 additions and 28 deletions

View File

@ -93,13 +93,27 @@ export default define(meta, paramDef, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => {
if (user) {
activeUsersChart.read(user);
}
});
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
return await Notes.packMany(timeline, user);
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -151,11 +151,25 @@ export default define(meta, paramDef, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => {
activeUsersChart.read(user);
});
return await Notes.packMany(timeline, user);
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -123,13 +123,27 @@ export default define(meta, paramDef, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => {
if (user) {
activeUsersChart.read(user);
}
});
return await Notes.packMany(timeline, user);
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -86,9 +86,24 @@ export default define(meta, paramDef, async (ps, user) => {
query.setParameters(followingQuery.getParameters());
}
const mentions = await query.take(ps.limit).getMany();
read(user.id, mentions);
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
return await Notes.packMany(mentions, user);
if (found.length > ps.limit) {
found.length = ps.limit;
}
read(user.id, found);
return found;
});

View File

@ -126,13 +126,27 @@ export default define(meta, paramDef, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => {
if (user) {
activeUsersChart.read(user);
}
});
return await Notes.packMany(timeline, user);
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -74,7 +74,21 @@ export default define(meta, paramDef, async (ps, user) => {
if (user) generateMutedUserQuery(query, user);
if (user) generateBlockedUserQuery(query, user);
const renotes = await query.take(ps.limit).getMany();
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
return await Notes.packMany(renotes, user);
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -58,7 +58,21 @@ export default define(meta, paramDef, async (ps, user) => {
if (user) generateMutedUserQuery(query, user);
if (user) generateBlockedUserQuery(query, user);
const timeline = await query.take(ps.limit).getMany();
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
return await Notes.packMany(timeline, user);
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -145,8 +145,21 @@ export default define(meta, paramDef, async (ps, me) => {
}
}
// Search notes
const notes = await query.take(ps.limit).getMany();
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, me))
skip += take;
if (notes.length < take) break;
}
return await Notes.packMany(notes, me);
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -143,11 +143,25 @@ export default define(meta, paramDef, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => {
activeUsersChart.read(user);
});
return await Notes.packMany(timeline, user);
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});

View File

@ -138,9 +138,27 @@ export default define(meta, paramDef, async (ps, user) => {
}
//#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => {
if (user) {
activeUsersChart.read(user);
}
});
activeUsersChart.read(user);
// We fetch more than requested because some may be filtered out, and if there's less than
// requested, the pagination stops. But if there's more nobody cares.
const found = [];
const take = Math.floor(ps.limit * 1.5);
let skip = 0;
while (found.length < ps.limit) {
const notes = await query.take(take).skip(skip).getMany();
found.push(...await Notes.packMany(notes, user))
skip += take;
if (notes.length < take) break;
}
return await Notes.packMany(timeline, user);
if (found.length > ps.limit) {
found.length = ps.limit;
}
return found;
});