Requested limit to be fulfilled if possible

This commit is contained in:
Kaity A 2023-04-04 02:46:06 +10:00
parent e4b1e3225e
commit 9a6462d001
No known key found for this signature in database
GPG Key ID: 5A797B97C2A490AD
10 changed files with 172 additions and 28 deletions

View File

@ -93,13 +93,27 @@ export default define(meta, paramDef, async (ps, user) => {
} }
//#endregion //#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => { process.nextTick(() => {
if (user) { 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;
}); });

View File

@ -151,11 +151,25 @@ export default define(meta, paramDef, async (ps, user) => {
} }
//#endregion //#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => { process.nextTick(() => {
activeUsersChart.read(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

@ -123,13 +123,27 @@ export default define(meta, paramDef, async (ps, user) => {
} }
//#endregion //#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => { process.nextTick(() => {
if (user) { if (user) {
activeUsersChart.read(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()); 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 //#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => { process.nextTick(() => {
if (user) { if (user) {
activeUsersChart.read(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) generateMutedUserQuery(query, user);
if (user) generateBlockedUserQuery(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) generateMutedUserQuery(query, user);
if (user) generateBlockedUserQuery(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 // We fetch more than requested because some may be filtered out, and if there's less than
const notes = await query.take(ps.limit).getMany(); // 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 //#endregion
const timeline = await query.take(ps.limit).getMany();
process.nextTick(() => { process.nextTick(() => {
activeUsersChart.read(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

@ -138,9 +138,27 @@ export default define(meta, paramDef, async (ps, user) => {
} }
//#endregion //#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;
}); });