diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2018-09-08 05:24:55 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2018-09-08 05:24:55 +0900 |
| commit | ef624977770c4d4b501a0e167804e69752c9ca44 (patch) | |
| tree | 7827720490a0291fc5b4a78ff9d10dbc874eb523 /src/server/activitypub | |
| parent | Add animation (diff) | |
| download | misskey-ef624977770c4d4b501a0e167804e69752c9ca44.tar.gz misskey-ef624977770c4d4b501a0e167804e69752c9ca44.tar.bz2 misskey-ef624977770c4d4b501a0e167804e69752c9ca44.zip | |
ActivityPub Outboxの修正とactivity idのURLを実装 (#2662)
* Fix Outbox structure
* Implement activity endpoint
* Use in instead of or
* Use in, addition
Diffstat (limited to 'src/server/activitypub')
| -rw-r--r-- | src/server/activitypub/outbox.ts | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts index a5e762eea8..9a4c881774 100644 --- a/src/server/activitypub/outbox.ts +++ b/src/server/activitypub/outbox.ts @@ -8,8 +8,10 @@ import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-c import renderOrderedCollectionPage from '../../remote/activitypub/renderer/ordered-collection-page'; import { setResponseType } from '../activitypub'; -import Note from '../../models/note'; +import Note, { INote } from '../../models/note'; import renderNote from '../../remote/activitypub/renderer/note'; +import renderCreate from '../../remote/activitypub/renderer/create'; +import renderAnnounce from '../../remote/activitypub/renderer/announce'; import { countIf } from '../../prelude/array'; export default async (ctx: Router.IRouterContext) => { @@ -53,15 +55,7 @@ export default async (ctx: Router.IRouterContext) => { const query = { userId: user._id, - $and: [{ - $or: [ { visibility: 'public' }, { visibility: 'home' } ] - }, { // exclude renote, but include quote - $or: [{ - text: { $ne: null } - }, { - fileIds: { $ne: [] } - }] - }] + visibility: { $in: ['public', 'home'] } } as any; if (sinceId) { @@ -85,10 +79,10 @@ export default async (ctx: Router.IRouterContext) => { if (sinceId) notes.reverse(); - const renderedNotes = await Promise.all(notes.map(note => renderNote(note, false))); + const activities = await Promise.all(notes.map(note => packActivity(note))); const rendered = renderOrderedCollectionPage( `${partOf}?page=true${sinceId ? `&since_id=${sinceId}` : ''}${untilId ? `&until_id=${untilId}` : ''}`, - user.notesCount, renderedNotes, partOf, + user.notesCount, activities, partOf, notes.length > 0 ? `${partOf}?page=true&since_id=${notes[0]._id}` : null, notes.length > 0 ? `${partOf}?page=true&until_id=${notes[notes.length - 1]._id}` : null ); @@ -105,3 +99,16 @@ export default async (ctx: Router.IRouterContext) => { setResponseType(ctx); } }; + +/** + * Pack Create<Note> or Announce Activity + * @param note Note + */ +export async function packActivity(note: INote): Promise<object> { + if (note.renoteId && note.text == null) { + const renote = await Note.findOne(note.renoteId); + return renderAnnounce(renote.uri ? renote.uri : `${config.url}/notes/${renote._id}`, note); + } + + return renderCreate(await renderNote(note, false), note); +} |