Use meid7 for Note

This commit is contained in:
mei23 2019-04-22 06:19:19 +09:00 committed by Acid Chicken (硫酸鶏)
parent 6b726eea39
commit 71fc84e224
No known key found for this signature in database
GPG key ID: 5388F56C75B677A1
3 changed files with 42 additions and 0 deletions

12
src/misc/gen-id.ts Normal file
View file

@ -0,0 +1,12 @@
import { genMeid7 } from './id/meid7';
const method = 'meid7';
export function genId(date?: Date): string {
if (!date || (date > new Date())) date = new Date();
switch (method) {
case 'meid7': return genMeid7(date);
default: throw new Error('unknown id generation method');
}
}

28
src/misc/id/meid7.ts Normal file
View file

@ -0,0 +1,28 @@
const CHARS = '0123456789abcdef';
// 4bit Fixed hex value '7'
// 44bit UNIX Time ms in Hex
// 48bit Random value in Hex
function getTime(time: number) {
if (time < 0) time = 0;
if (time === 0) {
return CHARS[0];
}
return time.toString(16).padStart(11, CHARS[0]);
}
function getRandom() {
let str = '';
for (let i = 0; i < 12; i++) {
str += CHARS[Math.floor(Math.random() * CHARS.length)];
}
return str;
}
export function genMeid7(date: Date): string {
return '7' + getTime(date.getTime()) + getRandom();
}

View file

@ -34,6 +34,7 @@ import Instance from '../../models/instance';
import extractMentions from '../../misc/extract-mentions'; import extractMentions from '../../misc/extract-mentions';
import extractEmojis from '../../misc/extract-emojis'; import extractEmojis from '../../misc/extract-emojis';
import extractHashtags from '../../misc/extract-hashtags'; import extractHashtags from '../../misc/extract-hashtags';
import { genId } from '../../misc/gen-id';
type NotificationType = 'reply' | 'renote' | 'quote' | 'mention'; type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
@ -434,6 +435,7 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
async function insertNote(user: IUser, data: Option, tags: string[], emojis: string[], mentionedUsers: IUser[]) { async function insertNote(user: IUser, data: Option, tags: string[], emojis: string[], mentionedUsers: IUser[]) {
const insert: any = { const insert: any = {
_id: genId(data.createdAt),
createdAt: data.createdAt, createdAt: data.createdAt,
fileIds: data.files ? data.files.map(file => file._id) : [], fileIds: data.files ? data.files.map(file => file._id) : [],
replyId: data.reply ? data.reply._id : null, replyId: data.reply ? data.reply._id : null,