Use meid7 for Note
This commit is contained in:
parent
6b726eea39
commit
71fc84e224
3 changed files with 42 additions and 0 deletions
12
src/misc/gen-id.ts
Normal file
12
src/misc/gen-id.ts
Normal 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
28
src/misc/id/meid7.ts
Normal 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();
|
||||
}
|
|
@ -34,6 +34,7 @@ import Instance from '../../models/instance';
|
|||
import extractMentions from '../../misc/extract-mentions';
|
||||
import extractEmojis from '../../misc/extract-emojis';
|
||||
import extractHashtags from '../../misc/extract-hashtags';
|
||||
import { genId } from '../../misc/gen-id';
|
||||
|
||||
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[]) {
|
||||
const insert: any = {
|
||||
_id: genId(data.createdAt),
|
||||
createdAt: data.createdAt,
|
||||
fileIds: data.files ? data.files.map(file => file._id) : [],
|
||||
replyId: data.reply ? data.reply._id : null,
|
||||
|
|
Loading…
Reference in a new issue