trackers/history.py

168 lines
8.7 KiB
Python

import os
import gamesort,gameskel,variables
from datetime import datetime,timedelta
"""
Generates history page and RSS feed
"""
def history(local=False):
# delete existing files
if not os.path.isdir("gamebuild/history"):
os.mkdir("gamebuild/history")
if os.path.exists("gamebuild/history/index.html"):
os.remove("gamebuild/history/index.html")
if os.path.exists("gamebuild/feed.xml"):
os.remove("gamebuild/feed.xml")
# write header
gameskel.headerwrite("gamebuild/history/index.html","history",local)
output = "gamebuild/history/index.html"
filewrite = open(output, "a")
filewrite.write(" <section class=\"history\">\n <div class=\"list\">\n")
feedwrite = open("gamebuild/feed.xml", "a")
feedwrite.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">\n <channel>\n <atom:link href=\"" + variables.domain + variables.gameserverpath + "feed.xml\" rel=\"self\" type=\"application/rss+xml\" />\n <title>Static backlog</title>\n <link>" + variables.domain + variables.gameserverpath + "backlog</link>\n <description>Feed for gaming updates</description>\n <language>en-gb</language>")
theyear = int(gamesort.thisyear)
while theyear >= variables.gamestartyear:
yearlist = []
enddate = datetime.strptime((str(theyear) + "-12-31"),"%Y-%m-%d")
startdate = datetime.strptime((str(theyear) + "-01-01"),"%Y-%m-%d")
eachdate = enddate
while eachdate >= startdate:
for game in gamesort.games:
if game["initialdate"] == eachdate:
yearlist.append({"date":eachdate,"name":game["name"],"console":game["console"],"action":"Added"})
try:
if game["firstplayed"] == eachdate:
yearlist.append({"date":eachdate,"name":game["name"],"console":game["console"],"action":"Started"})
except:
pass
try:
if game["beaten"] == eachdate:
yearlist.append({"date":eachdate,"name":game["name"],"console":game["console"],"action":"Beat"})
except:
pass
try:
if game["completed"] == eachdate:
yearlist.append({"date":eachdate,"name":game["name"],"console":game["console"],"action":"Completed"})
except:
pass
eachdate -= timedelta(days=1)
checkdate = enddate
for event in yearlist:
filewrite.write(" <div>\n")
if checkdate != event["date"]:
filewrite.write(" <h2>" + event["date"].strftime("%Y-%m-%d") + "</h2>\n")
filewrite.write(" <div>\n <div> " + event["action"] + "\n <div class=\"status-dot ")
if event["action"] == "Started":
fullpath = str(event["name"] + " (" + event["console"] + ")")
if fullpath in variables.endlessgames:
filewrite.write("Endless")
else:
filewrite.write("Started")
else:
filewrite.write(event["action"])
filewrite.write("\"></div>\n </div>\n <div> " + event["name"] + "\n <span>(" + event["console"] + ")</span>\n </div>\n </div>\n </div>\n")
feedwrite.write(" <item>\n <title>" + event["action"] + " " + event["name"] + " (" + event["console"] + ")</title>\n <pubDate>" + event["date"].strftime("%a, %-d %b %Y") + " 00:00:00 GMT</pubDate>\n <link>" + variables.domain + variables.gameserverpath + "history</link>\n <guid isPermaLink=\"false\">" + event["action"] + "-" + event["name"].replace(" ","-") + "-" + event["console"] + "</guid>\n <description>" + event["action"] + " " + event["name"] + " (" + event["console"] + ")</description>\n </item>\n")
checkdate = event["date"]
theyear -= 1
feedwrite.write(" </channel>\n</rss>")
feedwrite.close()
filewrite.write(" </div>\n")
theyear = int(gamesort.thisyear)
filewrite.write(" <div class=\"side box_1\">\n")
while theyear > 2016:
yeargames = 0
yearplaying = 0
for game in gamesort.games:
if game["initialdate"].year == theyear:
try:
if game["gameplay"]:
if game["id"] not in variables.endlessgames:
yeargames += 1
except:
yeargames += 1
for game in gamesort.games:
try:
if game["beaten"].year == theyear:
yeargames -= 1
except:
try:
if game["completed"].year == theyear:
yeargames -= 1
except:
pass
yearbacklog = []
for game in gamesort.games:
try:
if game["completed"].year == theyear:
yearbacklog.append(game)
except:
try:
if game["beaten"].year == theyear:
yearbacklog.append(game)
except:
if game["initialdate"].year == theyear:
yearbacklog.append(game)
yearcompleted = 0
yearbeaten = 0
yearstarted = 0
yearadded = 0
yeartotal = len(yearbacklog)
if yeartotal > 0:
for game in yearbacklog:
try:
if game["initialdate"].year == theyear:
yearadded += 1
except:
pass
try:
if game["firstplayed"].year == theyear:
yearstarted += 1
except:
pass
try:
if game["completed"].year == theyear:
yearcompleted += 1
except:
pass
try:
if game["beaten"].year == theyear:
yearbeaten += 1
except:
pass
compare = []
compare.append(yearadded)
compare.append(yearstarted)
compare.append(yearbeaten)
compare.append(yearcompleted)
maxvalue = max(compare)
filewrite.write(" <div class=\"year-tally")
if theyear == int(gamesort.thisyear):
filewrite.write(" active")
filewrite.write("\">\n <h2> " + str(theyear) + " Summary\n <span>Backlog ")
if yeargames > 0:
filewrite.write("" + str(yeargames))
elif yeargames == 0:
filewrite.write(" 0")
elif yeargames < 0:
filewrite.write("" + str(yeargames * -1))
filewrite.write("</span></h2>\n <div>\n <div>Added</div>\n <div>" + str(yearadded) + "</div>\n <div>\n <div class=\"unplayed\" style=\"width: calc(95% * (" + str(yearadded) + " / " + str(maxvalue) + "));\">\n </div>\n </div>\n </div>\n <div>\n <div>Started</div>\n <div>" + str(yearstarted) + "</div>\n <div>\n <div class=\"unfinished\" style=\"width: calc(95% * (" + str(yearstarted) + " / " + str(maxvalue) + "));\">\n </div>\n </div>\n </div>\n <div>\n <div>Beat</div>\n <div>" + str(yearbeaten) + "</div>\n <div>\n <div class=\"beaten\" style=\"width: calc(95% * (" + str(yearbeaten) + " / " + str(maxvalue) + "));\">\n </div>\n </div>\n </div>\n <div>\n <div>Completed</div>\n <div>" + str(yearcompleted) + "</div>\n <div>\n <div class=\"completed\" style=\"width: calc(95% * (" + str(yearcompleted) + " / " + str(maxvalue) + "));\">\n </div>\n </div>\n </div>\n </div>\n")
theyear -= 1
filewrite.write(" </div>\n </section>\n")
filewrite.close()
gameskel.footerwrite("gamebuild/history/index.html")
if __name__ == "__main__":
history(True)