BDServer/modules/Legacy.py
2024-11-23 22:34:11 +02:00

153 lines
5.4 KiB
Python

# AGPL 3 or any later version
# (C) J.Y.Amihud ( Blender Dumbass )
import os
import json
from modules import Set
from modules.Common import *
categories = ["/articles", "/books", "/films", "/music", "/games", "/software", "/forum", "/reviews", "/malware", "/legals"]
def count(folder, text):
walk = os.walk(folder)
c = 0
for i in walk:
for b in i[2]:
try:
c = c + open(i[0]+"/"+b).read().count(text)
except:
pass
return c
def Transfer(location):
# This function is pretty pointless. But it is useful for me. Because I
# Was using another, badly written server for years. And now to migrate
# to this server, I need something that will transfer my data over. If
# by any miracle you happended to use my code to build your own website,
# well, using this you too could do the same. LOL.
if not os.path.exists(location):
print(clr["bold"]+clr["tdrd"]+"Error:"+clr["norm"]+" Path does not exist!")
return
##### ARTICLES #####
for tab in categories:
for article in os.listdir(location+tab):
if article.endswith(".md"):
title = article[article.replace("/", " ", 1).find("/")+1:].replace("-", " ").replace("_", " ").replace(".md", "").replace("%28", "(").replace("%29", ")")
timestamp = os.path.getctime(location+tab+"/"+article.replace("%28", "(").replace("%29", ")"))
text = open(location+tab+"/"+article)
text = text.read()
# Description is a bit more complicated
art = text
while art.startswith("*"):
art = art[art.find("\n"):]
while art.startswith("\n") or art.startswith("_"):
art = art[1:]
description = art[:art.find("\n")]
# Legacy system only had non blenderdumbass authors
# when it is a forum.
author = "blenderdumbass"
if tab == "/forum":
with open(location+"/accounts.json") as o:
accounts = json.load(o)["accounts"]
for person in accounts:
if tab+"/"+article in accounts[person].get("forums", []):
author = person
with open(location+"/posters.json") as o:
posters = json.load(o)
thumbnail = posters.get(tab+"/"+article, "")
# This will only give us the general number of views.
views = count(location+"/logs", "/graph"+tab+"/"+article)
# But we also want to get number of views per day.
dates = {}
for date in os.listdir(location+"/logs"):
if date.endswith(".log"):
date = date[:-4]
try: datetext = open(location+"/logs/"+date+".log", "r")
except: continue
amount = datetext.read().count("/graph"+tab+"/"+article)
if amount > 0:
dates[date] = amount
# Comments
with open(location+"/comments.json") as o:
commentdata = json.load(o)
comments = {
"comments":commentdata["comments"].get(tab+"/"+article, []),
"requests":commentdata["requests"].get(tab+"/"+article, [])
}
# Making the directory for the article
try: os.makedirs(Set.Folder()+"/tabs"+tab+"/"+article[:-3])
except:pass
# Transferring the texts
textfile = Set.Folder()+"/tabs"+tab+"/"+article[:-3]+"/text.md"
textfile = open(textfile, "w")
textfile.write(text)
textfile.close()
# Metadata
metadata = {
"title":title,
"timestamp":timestamp,
"description":description,
"author":author,
"thumbnail":thumbnail,
"views":{
"amount":views,
"viewers":[],
"dates":dates
},
"recording":"",
"comments":comments
}
with open(Set.Folder()+"/tabs"+tab+"/"+article[:-3]+"/metadata.json", "w") as save:
json.dump(metadata, save, indent=4)
#### ACCOUNTS ####
with open(location+"/accounts.json") as o:
accounts = json.load(o)["accounts"]
for username in accounts:
account = accounts[username]
# We are adding some new stuff to accounts
account["title"] = username # Visible title
account["contact"] = "" # Contact info
account["website"] = "" # Website
account["mastodon"] = "" # Mastodon ( useful for fediverse tags )
account["sessions"] = {} # List of cookies accosiated with this account
# We are saving the accounts in a different way too.
with open(Set.Folder()+"/accounts/"+username+".json", "w") as save:
json.dump(account, save, indent=4)