import { existsSync } from 'fs'; import { v4 as uuidV4, v5 as uuidV5, NIL as uuidNIL } from 'uuid'; import { getImg, postImg, getImgType } from './image'; import type { Thread, Comment } from '../models/Thread' export async function processThreadIn(board: string, thread: Thread, comments = false) { if(!thread || !board) return; let imageId: string = thread.imageId; if(existsSync(`dist/client/images/${imageId}`)) // if(existsSync(`public/images/${imageId}`)) thread.imageId = `/images/${imageId}`; else thread.imageId = await getImg(imageId); thread.threadText = replaceURLs(thread.threadText, board, thread.id); if(!comments) return; for(let comment of thread.comments) { let cimageId = comment.imageId; if(existsSync(`dist/client/images/${cimageId}`)) // if(existsSync(`public/images/${cimageId}`)) comment.imageId = `/images/${cimageId}`; else comment.imageId = await getImg(cimageId); comment.commentText = replaceURLs(comment.commentText, board, thread.id); } } export async function processThreadOut(form: any): Thread { let img = form.get('image').toString(); let t: Thread = {}; t.id = uuidV4(); t.ThreadName = form.get('ThreadName').toString(); t.ThreadCreator = uuidV5(form.get('iphash'), uuidNIL); t.ThreadText = form.get('ThreadText').toString(); t.Comments = []; t.CreationDate = Date.now(); t.ImageId = await postImg(img); t.FileType = getImgType(img); return t; } export async function processCommentOut(form: any): Comment { } function replaceURLs(text: string, board: string, OPtid?: string): string { if(!text) return; if(OPtid) { let replyRegex = /(^|[^>])>>[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/g; text = text.replace(replyRegex, (id) => { let showid = id; id = id.replace(/(>|\n| )/g, ''); if(id == OPtid) showid += "(OP)"; // this adds the targeted class // to the target id when its hovered on // and removes it when it stops hovering return ` ${showid} `; }); } // link to thread on other board let otherthreadlinkRegex = />>>\/.*\/[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/g; text = text.replace(otherthreadlinkRegex, (id) => { let link = id.slice(4); let parts = link.split('/'); let linkid = parts[1]; let board = parts[0]; return ` >>>/${board}/${linkid} ` }); // link to thread on this board let threadlinkRegex = />>>[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}/g; text = text.replace(threadlinkRegex, (id) => { let linkid = id.slice(3); // remove the first >>> return ` ${id} ` }); // link to another board let otherboardRegex = />>>\/.*\/($|[^0-9a-fA-F])/g; text = text.replace(otherboardRegex, (id) => { let boardid = id.split('/')[1]; return ` >>>/${boardid}/ ` }); let newlineRegex = /(\r\n|\r|\n)/g; text = text.replace(newlineRegex, () => { return '
' }); let urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g; return text.replace(urlRegex, (url) => { var hyperlink = url; if (!hyperlink.match('^https?:\/\/')) { hyperlink = 'http://' + hyperlink; } return ' ' + url + ' ' }); }