各種カウントを復活させたりなど

This commit is contained in:
syuilo 2018-04-07 15:39:40 +09:00
parent 62171dce22
commit 2259747072
2 changed files with 56 additions and 16 deletions

View File

@ -6,6 +6,7 @@ import User, { validateUsername, isValidName, isValidDescription } from '../../m
import webFinger from '../webfinger';
import Resolver from './resolver';
import uploadFromUrl from '../../services/drive/upload-from-url';
import { isCollectionOrOrderedCollection } from './type';
export default async (value, verifier?: string) => {
const id = value.id || value;
@ -30,7 +31,21 @@ export default async (value, verifier?: string) => {
throw new Error('invalid person');
}
const finger = await webFinger(id, verifier);
const [followersCount = 0, followingCount = 0, postsCount = 0, finger] = await Promise.all([
resolver.resolve(object.followers).then(
resolved => isCollectionOrOrderedCollection(resolved) ? resolved.totalItems : undefined,
() => undefined
),
resolver.resolve(object.following).then(
resolved => isCollectionOrOrderedCollection(resolved) ? resolved.totalItems : undefined,
() => undefined
),
resolver.resolve(object.outbox).then(
resolved => isCollectionOrOrderedCollection(resolved) ? resolved.totalItems : undefined,
() => undefined
),
webFinger(id, verifier)
]);
const host = toUnicode(finger.subject.replace(/^.*?@/, ''));
const hostLower = host.replace(/[A-Z]+/, matched => matched.toLowerCase());
@ -42,10 +57,10 @@ export default async (value, verifier?: string) => {
bannerId: null,
createdAt: Date.parse(object.published) || null,
description: summaryDOM.textContent,
followersCount: 0,
followingCount: 0,
followersCount,
followingCount,
postsCount,
name: object.name,
postsCount: 0,
driveCapacity: 1024 * 1024 * 8, // 8MiB
username: object.preferredUsername,
usernameLower: object.preferredUsername.toLowerCase(),
@ -61,18 +76,14 @@ export default async (value, verifier?: string) => {
},
});
const [avatarId, bannerId] = await Promise.all([
const [avatarId, bannerId] = (await Promise.all([
object.icon,
object.image
].map(async img => {
if (img === undefined) {
return null;
}
const file = await uploadFromUrl(img.url, user);
return file._id;
}));
].map(img =>
img == null
? Promise.resolve(null)
: uploadFromUrl(img.url, user)
))).map(file => file != null ? file._id : null);
User.update({ _id: user._id }, { $set: { avatarId, bannerId } });

View File

@ -1,3 +1,32 @@
export type IObject = {
export type Object = { [x: string]: any };
export type ActivityType =
'Create';
export interface IObject {
'@context': string | object | any[];
type: string;
};
id?: string;
summary?: string;
}
export interface ICollection extends IObject {
type: 'Collection';
totalItems: number;
items: IObject | string | IObject[] | string[];
}
export interface IOrderedCollection extends IObject {
type: 'OrderedCollection';
totalItems: number;
orderedItems: IObject | string | IObject[] | string[];
}
export const isCollection = (object: IObject): object is ICollection =>
object.type === 'Collection';
export const isOrderedCollection = (object: IObject): object is IOrderedCollection =>
object.type === 'OrderedCollection';
export const isCollectionOrOrderedCollection = (object: IObject): object is ICollection | IOrderedCollection =>
isCollection(object) || isOrderedCollection(object);