From eec1873e28347530feefa256ec5c3d8614f39fae Mon Sep 17 00:00:00 2001
From: tdgmcode
diff --git a/src/lib/db/db.js b/src/lib/db/db.js index b9a0564..5080a93 100644 --- a/src/lib/db/db.js +++ b/src/lib/db/db.js @@ -63,6 +63,11 @@ async function initDb() { time INTEGER \ )'); + await db.run('CREATE TABLE IF NOT EXISTS tag ( \ + id CHAR(64), \ + reply CHAR(64) \ + )'); + await db.run('CREATE TABLE IF NOT EXISTS chat ( \ username CHAR(64), \ content CHAR(10240), \ diff --git a/src/lib/db/handlers.js b/src/lib/db/handlers.js index b9365e8..9c9613b 100644 --- a/src/lib/db/handlers.js +++ b/src/lib/db/handlers.js @@ -170,7 +170,7 @@ backend.login = async ({user, pass, cookies},{db}) => { return { success: 'Successfully logged into account.', data: token, location: '/'}; } -backend.postCreate = async ({content}, {user,db}) => { +backend.postCreate = async ({content, edit}, {user,db}) => { if (!content) return {'success': 'No post provided.'} var lengthCheck = checkLength(content,'Post content',1,10240); @@ -178,40 +178,69 @@ backend.postCreate = async ({content}, {user,db}) => { if (lengthCheck) return lengthCheck; + let userData = (await db.all('SELECT * FROM post WHERE id = ?', [ + edit || '' + ])); + var id = randomBytes(10).toString('hex'); + if (edit && userData[0] && userData[0].user === user) + id = edit; + var postFlatten = formatPost(content).flat(); - var reply = postFlatten[postFlatten.findIndex(x => x.subtype == 'post')]; + var reply = postFlatten.filter(x => x.subtype == 'post').map(x => x.url.split('/').pop()); + var firstReply = reply[0]; - if (reply) - reply = reply.url.split('/').pop(); + await db.run('DELETE from tag WHERE id = ?', [ + id + ]) - if (reply) { + if (firstReply) { let replyData = (await db.all('SELECT * FROM post WHERE id = ?', [ - reply + firstReply ])); let replyUser = ''; if (replyData && replyData[0]) replyUser = replyData[0].username; - await db.run('INSERT INTO messages (username, content, time,read) VALUES (?, ?, ?, ?)', [ - replyUser, - `@${user} replied to #${reply} on #${id}`, - Math.floor(new Date() * 1000), - 0 - ]); + if (replyUser && !edit) { + await db.run('INSERT INTO messages (username, content, time,read) VALUES (?, ?, ?, ?)', [ + replyUser, + `@${user} replied to #${irstReply} on #${id}`, + Math.floor(new Date() * 1000), + 0 + ]); + } } - await db.run('INSERT INTO post (username, id, content, rating, reply, time) VALUES (?, ?, ?, ?, ?, ?)', [ - user, - id, - content, - calcVote(0,0), - reply || '', - Math.floor(new Date() * 1000) - ]) + if (id === edit) { + await db.run('UPDATE post SET content = ? WHERE id = ?', [ + content, + id + ]) + + } else { + await db.run('INSERT INTO post (username, id, content, rating, reply, time) VALUES (?, ?, ?, ?, ?, ?)', [ + user, + id, + content, + calcVote(0,0), + firstReply || '', + Math.floor(new Date() * 1000) + ]) + + } + + + for (var i = 0; i < reply.length; i++) { + await db.run('INSERT INTO tag (id, reply) VALUES (?, ?)', [ + id, + reply[i] + ]) + } + return {'success': 'Your post has been broadcasted!', 'href': `/post/${id}` }; } @@ -298,7 +327,7 @@ backend.postBulk = async ({page, id, user, cookies, sort, type}, {admin, db}) => if (posts.length == 0) posts.push({}); - posts.push(...(await db.all('SELECT * from post WHERE reply = ? ORDER BY '+sort+' DESC LIMIT ?, ?', [ + posts.push(...(await db.all('SELECT * from post WHERE id IN (SELECT id FROM tag WHERE reply = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ id, ...pageParams ]))) @@ -309,7 +338,7 @@ backend.postBulk = async ({page, id, user, cookies, sort, type}, {admin, db}) => ...pageParams ]) } else if (type == 'follow') { - posts = await db.all('SELECT * from post WHERE username IN (SELECT following from follow WHERE username = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ + posts = await db.all('SELECT * from post WHERE username IN (SELECT following FROM follow WHERE username = ?) ORDER BY '+sort+' DESC LIMIT ?, ?', [ userAuth, ...pageParams ]) diff --git a/src/routes/new_post/+page.svelte b/src/routes/new_post/+page.svelte index 9d68b0d..bc67833 100644 --- a/src/routes/new_post/+page.svelte +++ b/src/routes/new_post/+page.svelte @@ -18,6 +18,8 @@ let currentState = 'editor'; + let edit = $page.url.searchParams.get('edit') || ''; + function setState(editor) { currentState = editor; } @@ -50,6 +52,7 @@ method='POST' on:submit|preventDefault={async e => form = JSON.parse(await handleSubmit(e)) } > + {#if currentState == 'editor'} @@ -88,7 +91,7 @@ @user mentions a user
- #post replies to a post by ID + #post tags a post as a reply or subtopic
%post links to a chatroom diff --git a/static/edit.svg b/static/edit.svg new file mode 100644 index 0000000..3540cd8 --- /dev/null +++ b/static/edit.svg @@ -0,0 +1,49 @@ + + + +