summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/backend/src/server/api/mastodon/converters.ts23
-rw-r--r--packages/backend/src/server/api/mastodon/endpoints/account.ts10
-rw-r--r--packages/megalodon/src/entities/relationship.ts1
-rw-r--r--packages/megalodon/src/mastodon/entities/relationship.ts1
-rw-r--r--packages/megalodon/src/misskey.ts4
-rw-r--r--packages/megalodon/src/misskey/api_client.ts11
-rw-r--r--packages/megalodon/src/misskey/entities/relation.ts3
7 files changed, 39 insertions, 14 deletions
diff --git a/packages/backend/src/server/api/mastodon/converters.ts b/packages/backend/src/server/api/mastodon/converters.ts
index 3cb6ca61ce..4aea91b4f2 100644
--- a/packages/backend/src/server/api/mastodon/converters.ts
+++ b/packages/backend/src/server/api/mastodon/converters.ts
@@ -339,6 +339,7 @@ export function convertPoll(poll: Entity.Poll) {
return simpleConvert(poll);
}
+// noinspection JSUnusedGlobalSymbols
export function convertReaction(reaction: Entity.Reaction) {
if (reaction.accounts) {
reaction.accounts = reaction.accounts.map(convertAccount);
@@ -346,8 +347,25 @@ export function convertReaction(reaction: Entity.Reaction) {
return reaction;
}
-export function convertRelationship(relationship: Entity.Relationship) {
- return simpleConvert(relationship);
+// Megalodon sometimes returns broken / stubbed relationship data
+export function convertRelationship(relationship: Partial<Entity.Relationship> & { id: string }): MastodonEntity.Relationship {
+ return {
+ id: relationship.id,
+ following: relationship.following ?? false,
+ showing_reblogs: relationship.showing_reblogs ?? true,
+ notifying: relationship.notifying ?? true,
+ languages: [],
+ followed_by: relationship.followed_by ?? false,
+ blocking: relationship.blocking ?? false,
+ blocked_by: relationship.blocked_by ?? false,
+ muting: relationship.muting ?? false,
+ muting_notifications: relationship.muting_notifications ?? false,
+ requested: relationship.requested ?? false,
+ requested_by: relationship.requested_by ?? false,
+ domain_blocking: relationship.domain_blocking ?? false,
+ endorsed: relationship.endorsed ?? false,
+ note: relationship.note ?? '',
+ };
}
export function convertStatus(status: Entity.Status) {
@@ -361,6 +379,7 @@ export function convertStatus(status: Entity.Status) {
return status;
}
+// noinspection JSUnusedGlobalSymbols
export function convertStatusSource(status: Entity.StatusSource) {
return simpleConvert(status);
}
diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts
index d24a62fb06..1481a48924 100644
--- a/packages/backend/src/server/api/mastodon/endpoints/account.ts
+++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts
@@ -74,7 +74,7 @@ export class ApiAccountMastodon {
public async addFollow() {
if (!this.request.params.id) throw new Error('Missing required parameter "id"');
- const data = await this.client.followAccount( this.request.params.id );
+ const data = await this.client.followAccount(this.request.params.id);
const acct = convertRelationship(data.data);
acct.following = true;
return acct;
@@ -82,7 +82,7 @@ export class ApiAccountMastodon {
public async rmFollow() {
if (!this.request.params.id) throw new Error('Missing required parameter "id"');
- const data = await this.client.unfollowAccount( this.request.params.id );
+ const data = await this.client.unfollowAccount(this.request.params.id);
const acct = convertRelationship(data.data);
acct.following = false;
return acct;
@@ -90,13 +90,13 @@ export class ApiAccountMastodon {
public async addBlock() {
if (!this.request.params.id) throw new Error('Missing required parameter "id"');
- const data = await this.client.blockAccount( this.request.params.id );
+ const data = await this.client.blockAccount(this.request.params.id);
return convertRelationship(data.data);
}
public async rmBlock() {
if (!this.request.params.id) throw new Error('Missing required parameter "id"');
- const data = await this.client.unblockAccount( this.request.params.id );
+ const data = await this.client.unblockAccount(this.request.params.id);
return convertRelationship(data.data);
}
@@ -111,7 +111,7 @@ export class ApiAccountMastodon {
public async rmMute() {
if (!this.request.params.id) throw new Error('Missing required parameter "id"');
- const data = await this.client.unmuteAccount( this.request.params.id );
+ const data = await this.client.unmuteAccount(this.request.params.id);
return convertRelationship(data.data);
}
diff --git a/packages/megalodon/src/entities/relationship.ts b/packages/megalodon/src/entities/relationship.ts
index 283a1158c6..eb8daf9c7b 100644
--- a/packages/megalodon/src/entities/relationship.ts
+++ b/packages/megalodon/src/entities/relationship.ts
@@ -8,6 +8,7 @@ namespace Entity {
muting: boolean
muting_notifications: boolean
requested: boolean
+ requested_by?: boolean
domain_blocking: boolean
showing_reblogs: boolean
endorsed: boolean
diff --git a/packages/megalodon/src/mastodon/entities/relationship.ts b/packages/megalodon/src/mastodon/entities/relationship.ts
index 8e02df5769..f868a64063 100644
--- a/packages/megalodon/src/mastodon/entities/relationship.ts
+++ b/packages/megalodon/src/mastodon/entities/relationship.ts
@@ -8,6 +8,7 @@ namespace MastodonEntity {
muting: boolean
muting_notifications: boolean
requested: boolean
+ requested_by: boolean
domain_blocking: boolean
showing_reblogs: boolean
endorsed: boolean
diff --git a/packages/megalodon/src/misskey.ts b/packages/megalodon/src/misskey.ts
index 7d68d4eddf..7e493d8fb7 100644
--- a/packages/megalodon/src/misskey.ts
+++ b/packages/megalodon/src/misskey.ts
@@ -604,7 +604,7 @@ export default class Misskey implements MegalodonInterface {
/**
* POST /api/users/relation
*
- * @param id Array of account ID, for example `['1sdfag', 'ds12aa']`.
+ * @param ids Array of account ID, for example `['1sdfag', 'ds12aa']`.
*/
public async getRelationships(ids: Array<string>): Promise<Response<Array<Entity.Relationship>>> {
return Promise.all(ids.map(id => this.getRelationship(id))).then(results => ({
@@ -2232,7 +2232,7 @@ export default class Misskey implements MegalodonInterface {
hashtags: [],
},
}));
-
+
if (result.status !== 200) {
result.status = 200;
result.statusText = "OK";
diff --git a/packages/megalodon/src/misskey/api_client.ts b/packages/megalodon/src/misskey/api_client.ts
index 8996b802c8..a4352613eb 100644
--- a/packages/megalodon/src/misskey/api_client.ts
+++ b/packages/megalodon/src/misskey/api_client.ts
@@ -227,13 +227,14 @@ namespace MisskeyAPI {
blocking: r.isBlocking,
blocked_by: r.isBlocked,
muting: r.isMuted,
- muting_notifications: false,
+ muting_notifications: r.isMuted,
requested: r.hasPendingFollowRequestFromYou,
- domain_blocking: false,
- showing_reblogs: true,
+ requested_by: r.hasPendingFollowRequestToYou,
+ domain_blocking: r.isInstanceMuted ?? false,
+ showing_reblogs: !r.isRenoteMuted,
endorsed: false,
- notifying: false,
- note: null
+ notifying: !r.isMuted,
+ note: r.memo ?? '',
}
}
diff --git a/packages/megalodon/src/misskey/entities/relation.ts b/packages/megalodon/src/misskey/entities/relation.ts
index 07653b4865..a43dfbab4e 100644
--- a/packages/megalodon/src/misskey/entities/relation.ts
+++ b/packages/megalodon/src/misskey/entities/relation.ts
@@ -8,5 +8,8 @@ namespace MisskeyEntity {
isBlocking: boolean
isBlocked: boolean
isMuted: boolean
+ isRenoteMuted: boolean
+ isInstanceMuted?: boolean
+ memo?: string | null
}
}