diff --git a/blogHandler.py b/blogHandler.py index 387ffcb..229fe4a 100644 --- a/blogHandler.py +++ b/blogHandler.py @@ -45,24 +45,27 @@ def getBlogTitle(blogID: int) -> str: try: fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r') title = orgHandler.checkAndRetrieveMetadata(fileData, "TITLE") + fileData.close() if title: return title except Exception as error: debugPrint("Error getting blog title! " + repr(error)) -def getBlogDescription(blogID: int) -> str: +def getBlogDescription(blogID: int) -> tuple: debugPrint("Attempting to retrieve blog description of blog ID " + str(blogID)) try: fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r') - orgRoot = loads(fileData.read()) - - fileData.readline() shortDescription = orgHandler.checkAndRetrieveMetadata(fileData, "DESCRIPTION") + fileData.close() + fileData = open(blogDir + "/" + str(blogID) + "/" + str(blogID) + ".org", 'r') + orgRoot = loads(fileData.read()) + fileData.close() if not shortDescription: debugPrint("No valid description found, will generate a placeholder from the text itself...") firstText = orgRoot[1].body shortDescription = (firstText[:60] + "...") if len(firstText) > 60 else firstText - return shortDescription + return (shortDescription, False) + return (shortDescription, True) except Exception as error: debugPrint("Error getting blog description! Unexpected error: " + repr(error) + ".") @@ -94,7 +97,16 @@ def generateBlogTitle(dbConnection: psycopg2.extensions.connection, blogID: int) return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "title", getBlogTitle(blogID)) def generateBlogDescription(dbConnection: psycopg2.extensions.connection, blogID: int) -> tuple: - return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "description", getBlogDescription(blogID)) + return dbHandler.changeFieldValueByID(dbConnection, "blogs", blogID, "description", getBlogDescription(blogID)[0]) + +def generateBlogHTMLContents(dbConnection: psycopg2.extensions.connection, orgParsed: str, userID: int, blogID: int) -> str: + generatedHTML = orgParsed + shortDescription = getBlogDescription(blogID) + if shortDescription[1]: + generatedHTML = "

" + shortDescription[0] + "

\n" + generatedHTML + generatedHTML = "

" + userHandler.getUserInfoByID(dbConnection, userID, "username") + "

\n" + generatedHTML + generatedHTML = "

" + getBlogTitle(blogID) + "

\n" + generatedHTML + return generatedHTML def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRawIn: str): try: @@ -113,8 +125,10 @@ def uploadBlog(dbConnection: psycopg2.extensions.connection, userID: int, orgRaw debugPrint("Attempting to write new blog file " + blogDir + "/" + str(blogID) + "/" + str(blogID) + ".html...") HTMLFileData = open(newBlogDir + "/" + str(blogID) + ".html", 'w') - HTMLFileData.write(orgParsedOut) + orgFileData = open(newBlogDir + "/" + str(blogID) + ".org", 'r') + HTMLFileData.write(generateBlogHTMLContents(dbConnection, orgParsedOut, userID, blogID)) HTMLFileData.close() + orgFileData.close() generateBlogTitle(dbConnection, blogID) generateBlogDescription(dbConnection, blogID) diff --git a/main.py b/main.py index f313c74..cd137b6 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ import os import sys import atexit import signal +import base64 from typing import Union, Annotated from contextlib import asynccontextmanager @@ -284,8 +285,9 @@ class postblogCreateBody(BaseModel): def postblogCreate(body: postblogCreateBody): try: if tokenHandler.validateTokenExistence(dbConnection, body.authToken): + decodedOrgContents = base64.b32decode(body.orgContents).decode() userID = userHandler.getIDByAuthToken(dbConnection, body.authToken) - newBlog = blogHandler.uploadBlog(dbConnection, userID, body.orgContents) + newBlog = blogHandler.uploadBlog(dbConnection, userID, decodedOrgContents) if newBlog: return { "success": True, diff --git a/orgHandler.py b/orgHandler.py index b57aadf..1554462 100644 --- a/orgHandler.py +++ b/orgHandler.py @@ -1,3 +1,5 @@ +import os + from orgparse import loads blogDir: str = "./blogs" @@ -7,15 +9,14 @@ def debugPrint(msg: str) -> None: if debug: print("(ORG HANDLER) PRINT: " + msg) -def checkAndRetrieveMetadata(fileData: str, metadataName: str): - line = fileData.readline() +def checkAndRetrieveMetadata(fileData, metadataName: str): metadataFullName = "#+" + metadataName + ":" - if metadataFullName in line: - linetoarray = line.split() - return " ".join(linetoarray[1:]) - else: - debugPrint("Could not find " + metadataFullName + " metadata field of document!") - return False + for line in fileData: + if metadataFullName in line: + linetoarray = line.split() + return " ".join(linetoarray[1:]) + debugPrint("Could not find " + metadataFullName + " metadata field of document!") + return False def orgToHTML(orgData: str) -> str: try: @@ -24,8 +25,9 @@ def orgToHTML(orgData: str) -> str: for node in orgRoot[1:]: if node.heading: - headingLevel = str(node.level if node.level <= 6 else 6) - parsedHTML += "" + node.heading + "" + "\n" + headingLevel = node.level if node.level <= 6 else 6 + headingLevel += 2 + parsedHTML += "" + node.heading + "" + "\n" if node.body: parsedHTML += node.body + "\n" return parsedHTML