各種カウントを復活させたりなど
This commit is contained in:
		
							parent
							
								
									62171dce22
								
							
						
					
					
						commit
						2259747072
					
				
					 2 changed files with 56 additions and 16 deletions
				
			
		| 
						 | 
					@ -6,6 +6,7 @@ import User, { validateUsername, isValidName, isValidDescription } from '../../m
 | 
				
			||||||
import webFinger from '../webfinger';
 | 
					import webFinger from '../webfinger';
 | 
				
			||||||
import Resolver from './resolver';
 | 
					import Resolver from './resolver';
 | 
				
			||||||
import uploadFromUrl from '../../services/drive/upload-from-url';
 | 
					import uploadFromUrl from '../../services/drive/upload-from-url';
 | 
				
			||||||
 | 
					import { isCollectionOrOrderedCollection } from './type';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async (value, verifier?: string) => {
 | 
					export default async (value, verifier?: string) => {
 | 
				
			||||||
	const id = value.id || value;
 | 
						const id = value.id || value;
 | 
				
			||||||
| 
						 | 
					@ -30,7 +31,21 @@ export default async (value, verifier?: string) => {
 | 
				
			||||||
		throw new Error('invalid person');
 | 
							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 host = toUnicode(finger.subject.replace(/^.*?@/, ''));
 | 
				
			||||||
	const hostLower = host.replace(/[A-Z]+/, matched => matched.toLowerCase());
 | 
						const hostLower = host.replace(/[A-Z]+/, matched => matched.toLowerCase());
 | 
				
			||||||
| 
						 | 
					@ -42,10 +57,10 @@ export default async (value, verifier?: string) => {
 | 
				
			||||||
		bannerId: null,
 | 
							bannerId: null,
 | 
				
			||||||
		createdAt: Date.parse(object.published) || null,
 | 
							createdAt: Date.parse(object.published) || null,
 | 
				
			||||||
		description: summaryDOM.textContent,
 | 
							description: summaryDOM.textContent,
 | 
				
			||||||
		followersCount: 0,
 | 
							followersCount,
 | 
				
			||||||
		followingCount: 0,
 | 
							followingCount,
 | 
				
			||||||
 | 
							postsCount,
 | 
				
			||||||
		name: object.name,
 | 
							name: object.name,
 | 
				
			||||||
		postsCount: 0,
 | 
					 | 
				
			||||||
		driveCapacity: 1024 * 1024 * 8, // 8MiB
 | 
							driveCapacity: 1024 * 1024 * 8, // 8MiB
 | 
				
			||||||
		username: object.preferredUsername,
 | 
							username: object.preferredUsername,
 | 
				
			||||||
		usernameLower: object.preferredUsername.toLowerCase(),
 | 
							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.icon,
 | 
				
			||||||
		object.image
 | 
							object.image
 | 
				
			||||||
	].map(async img => {
 | 
						].map(img =>
 | 
				
			||||||
		if (img === undefined) {
 | 
							img == null
 | 
				
			||||||
			return null;
 | 
								? Promise.resolve(null)
 | 
				
			||||||
		}
 | 
								: uploadFromUrl(img.url, user)
 | 
				
			||||||
 | 
						))).map(file => file != null ? file._id : null);
 | 
				
			||||||
		const file = await uploadFromUrl(img.url, user);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return file._id;
 | 
					 | 
				
			||||||
	}));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	User.update({ _id: user._id }, { $set: { avatarId, bannerId } });
 | 
						User.update({ _id: user._id }, { $set: { avatarId, bannerId } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
						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);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue