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 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,
|
||||||
|
|
Loading…
Reference in a new issue