summaryrefslogtreecommitdiff
path: root/src/remote
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-07 17:05:14 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-07 17:05:14 +0900
commitc5f23bce7864bc1cffb82b54f62e019c4c04137d (patch)
tree8ec7313f4ec333bcb4ca3e19a5106c602740870c /src/remote
parentRefactor (diff)
downloadmisskey-c5f23bce7864bc1cffb82b54f62e019c4c04137d.tar.gz
misskey-c5f23bce7864bc1cffb82b54f62e019c4c04137d.tar.bz2
misskey-c5f23bce7864bc1cffb82b54f62e019c4c04137d.zip
Implement like
Diffstat (limited to 'src/remote')
-rw-r--r--src/remote/activitypub/act/index.ts11
-rw-r--r--src/remote/activitypub/act/like.ts55
-rw-r--r--src/remote/activitypub/renderer/like.ts9
-rw-r--r--src/remote/activitypub/renderer/note.ts4
-rw-r--r--src/remote/activitypub/type.ts7
5 files changed, 31 insertions, 55 deletions
diff --git a/src/remote/activitypub/act/index.ts b/src/remote/activitypub/act/index.ts
index 5fcdb61748..45d7bd16a9 100644
--- a/src/remote/activitypub/act/index.ts
+++ b/src/remote/activitypub/act/index.ts
@@ -1,9 +1,10 @@
+import { Object } from '../type';
+import { IRemoteUser } from '../../../models/user';
import create from './create';
import performDeleteActivity from './delete';
import follow from './follow';
import undo from './undo';
-import { Object } from '../type';
-import { IRemoteUser } from '../../../models/user';
+import like from './like';
const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
switch (activity.type) {
@@ -23,6 +24,10 @@ const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
// noop
break;
+ case 'Like':
+ await like(actor, activity);
+ break;
+
case 'Undo':
await undo(actor, activity);
break;
@@ -33,7 +38,7 @@ const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
break;
default:
- console.warn(`unknown activity type: ${activity.type}`);
+ console.warn(`unknown activity type: ${(activity as any).type}`);
return null;
}
};
diff --git a/src/remote/activitypub/act/like.ts b/src/remote/activitypub/act/like.ts
index ea53242017..2f5e3f807d 100644
--- a/src/remote/activitypub/act/like.ts
+++ b/src/remote/activitypub/act/like.ts
@@ -1,10 +1,10 @@
-import { MongoError } from 'mongodb';
-import Reaction, { IPostReaction } from '../../../models/post-reaction';
import Post from '../../../models/post';
-import queue from '../../../queue';
+import { IRemoteUser } from '../../../models/user';
+import { ILike } from '../type';
+import create from '../../../services/post/reaction/create';
-export default async (resolver, actor, activity, distribute) => {
- const id = activity.object.id || activity.object;
+export default async (actor: IRemoteUser, activity: ILike) => {
+ const id = typeof activity.object == 'string' ? activity.object : activity.object.id;
// Transform:
// https://misskey.ex/@syuilo/xxxx to
@@ -16,48 +16,5 @@ export default async (resolver, actor, activity, distribute) => {
throw new Error();
}
- if (!distribute) {
- const { _id } = await Reaction.findOne({
- userId: actor._id,
- postId: post._id
- });
-
- return {
- resolver,
- object: { $ref: 'postPeactions', $id: _id }
- };
- }
-
- const promisedReaction = Reaction.insert({
- createdAt: new Date(),
- userId: actor._id,
- postId: post._id,
- reaction: 'pudding'
- }).then(reaction => new Promise<IPostReaction>((resolve, reject) => {
- queue.create('http', {
- type: 'reaction',
- reactionId: reaction._id
- }).save(error => {
- if (error) {
- reject(error);
- } else {
- resolve(reaction);
- }
- });
- }), async error => {
- // duplicate key error
- if (error instanceof MongoError && error.code === 11000) {
- return Reaction.findOne({
- userId: actor._id,
- postId: post._id
- });
- }
-
- throw error;
- });
-
- return promisedReaction.then(({ _id }) => ({
- resolver,
- object: { $ref: 'postPeactions', $id: _id }
- }));
+ await create(actor, post, 'pudding');
};
diff --git a/src/remote/activitypub/renderer/like.ts b/src/remote/activitypub/renderer/like.ts
new file mode 100644
index 0000000000..903b10789e
--- /dev/null
+++ b/src/remote/activitypub/renderer/like.ts
@@ -0,0 +1,9 @@
+import config from '../../../config';
+
+export default (user, post) => {
+ return {
+ type: 'Like',
+ actor: `${config.url}/@${user.username}`,
+ object: post.uri ? post.uri : `${config.url}/posts/${post._id}`
+ };
+};
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index b971a53951..bbab63db36 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -23,7 +23,7 @@ export default async (user: IUser, post: IPost) => {
});
if (inReplyToUser !== null) {
- inReplyTo = inReplyToPost.uri || `${config.url}/@${inReplyToUser.username}/${inReplyToPost._id}`;
+ inReplyTo = inReplyToPost.uri || `${config.url}/posts/${inReplyToPost._id}`;
}
}
} else {
@@ -33,7 +33,7 @@ export default async (user: IUser, post: IPost) => {
const attributedTo = `${config.url}/@${user.username}`;
return {
- id: `${attributedTo}/${post._id}`,
+ id: `${config.url}/posts/${post._id}`,
type: 'Note',
attributedTo,
content: post.textHtml,
diff --git a/src/remote/activitypub/type.ts b/src/remote/activitypub/type.ts
index c07b806be8..450d5906d8 100644
--- a/src/remote/activitypub/type.ts
+++ b/src/remote/activitypub/type.ts
@@ -55,6 +55,10 @@ export interface IAccept extends IActivity {
type: 'Accept';
}
+export interface ILike extends IActivity {
+ type: 'Like';
+}
+
export type Object =
ICollection |
IOrderedCollection |
@@ -62,4 +66,5 @@ export type Object =
IDelete |
IUndo |
IFollow |
- IAccept;
+ IAccept |
+ ILike;