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