## Create HTML files from MASTER Database Table Data.
## Line 048: [1]  Last_Run_Additions.
## Line 079: [2]  Last_Run_Deletions.
## Line 109: [3]  New_Dupe_Tracks.
## Line 139: [4]  URI_Change.
## Line 171: [5a] Last_Played_Tracks (EPM) - Present in the MASTER database.
## Line 201: [5b] Last_Played_Tracks (ETX) - Not yet part of the EPM System.
## Line 232: [6]  Queue Errors. (from Queue_check Table).

### NOTE: IMPORTANT ###
### Add your own database name in Line: 42  ###
### (no need for full path if running 'htmlbuilder.py' in same folder) ###

from datetime import datetime
import sqlite3
from sqlite3 import Error

### HTML BUILDER Creates HTML files from MASTER Database Tables. (22/10/22)

print('HTML BUILDER v2.1.8')
now = datetime.now()
date_time = now.strftime('%d-%m-%y @ %H:%M')

## Format HTML for HEADER, BODY, CSS, TABLE and basic layout details.
title = "<html><head><title>Endless Playlist Management System</title>"
style = "<link href='endless.css' rel='stylesheet' type='text/css' /></head><body>"
head = "<table width='100%' bgcolor='#cccccc' border='0' align='center' cellpadding='3' cellspacing='20'><tr><td>"
banner = "<table width='100%' align='center' border='0' cellspacing='3' cellpadding='3'><tr><th><h2>ENDLESS PLAYLIST MANAGEMENT SYSTEM</h2></th></tr></table></td></tr><tr><td>"
menu = "<table border='1' align='center' cellpadding='3' cellspacing='3'><tr>"
menu0 = "<td><a href='index.html'>MAIN</a></td>"
menu1 = "<td><a href='additions.html'>ADDED</a></td>"
menu2 = "<td><a href='deletions.html'>DELETED</a></td>"
menu3 = "<td><a href='duplicates.html'>DUPLICATES</a></td>"
menu4 = "<td><a href='urichanges.html'>URI CHANGES</a></td>"
menu5 = "<td><a href='queue-errors.html'>QUEUE ERRORS</a></td>"
menu6 = "<td><a href='played-epm.html'>PLAYED [EPM]</a></td>"
menu7 = "<td><a href='played-ext.html'>PLAYED [EXT]</a></td></tr></table></td></tr><tr><td>"
main = title + style + head + banner + menu + menu0 + menu1 + menu2 + menu3 + menu4 + menu5 + menu6 + menu7
footer = "</table><tr><td><table width='65%' height='40' border='0' align='center' cellpadding='3' cellspacing='3' bgcolor='#66cccc'><tr><th>&copy; Viking Utilities ~ 2022</th></tr></table></td></tr></table></body></html>"

conn = None
### filename = "MASTER.db" ### CHANGE HERE ###
filename = "C:\Spotty Main\Vi&Cyn Test\Endless Feed.db" ### <== Als db path ###

try:
      conn = sqlite3.connect(filename)

      ## NOTE: [1] Last Run Additions.
      sql = ("SELECT * FROM Last_Run_Additions")    
      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()
    
      ## Replicate HTML Header plus data Table for:
      table = "Last Run Additions - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='5'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>URI</th><th>TRACK</th><th>ARTIST</th><th>REVIEWED</th></tr>"

      ## Set personal preference for alternative row bgcolors (back ground colours).
      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td><a href=" + str(row[0]) + ">" + str(row[0]) + "</a></td><td>" + str(row[1]) + "</td>"
            html = html + "<td>" + str(row[2]) + "</td><td>" + str(row[3]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("additions.html", "w")
      file.write(html)
      file.close

      ##==========================================================================

      ## NOTE: [2] Last Run Deletions.
      sql = ("SELECT * FROM Last_Run_Deletions")    
      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()

      ## Replicate HTML Header plus data Table for:
      table = "Last Run Deletions - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='5'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>URI</th><th>TRACK</th><th>ARTIST</th><th>ALBUM</th></tr>"

      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td><a href=" + str(row[0]) + ">" + str(row[0]) + "</a></td><td>" + str(row[1]) + "</td>"  
            html = html + "<td>" + str(row[2]) + "</td><td>" + str(row[3]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("deletions.html", "w")
      file.write(html)
      file.close

      ##==========================================================================

      ## NOTE: [3] Duplicated tracks.
      sql = ("SELECT * FROM New_Dupe_Tracks WHERE REVIEWED = 0")    
      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()

      ## Replicate HTML Header plus data Table for:
      table = "Duplicated Tracks - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='5'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>URI</th><th>TRACK</th><th>ARTIST</th><th>REVIEWED</th></tr>"

      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td><a href=" + str(row[0]) + ">" + str(row[0]) + "</a></td><td>" + str(row[1]) + "</td>"
            html = html + "<td>" + str(row[2]) + "</td><td>" + str(row[3]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("duplicates.html", "w")
      file.write(html)
      file.close

      ##==========================================================================

      ## NOTE: [4] URI Changes.
      sql = ("SELECT * FROM URI_Change ORDER by DATE_OF_CHANGE DESC")    
      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()

      ## Replicate HTML Header plus data Table for:
      table = "URI Changes - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='6'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>DATE</th><th>OLD URI</th><th>NEW URI</th><th>TRACK</th><th>ARTIST</th></tr>"
      
      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td nowrap>" + str(row[0]) + "</td></td>"
            html = html + "<td><a href=" + str(row[1]) + ">" + str(row[1]) + "</td>"
            html = html + "<td><a href=" + str(row[2]) + ">" + str(row[2]) + "</a></td>"
            html = html + "<td>" + str(row[3]) + "</td><td>" + str(row[4]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("urichanges.html", "w")
      file.write(html)
      file.close

      ##==========================================================================

      ## NOTE: [5a] Last_Played_Tracks (EPM)
      sql = ("SELECT * FROM Last_Played_Tracks WHERE PLAY_COUNT != -100 ORDER BY LAST_PLAYED DESC LIMIT 100")

      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()

      ## Replicate HTML Header plus data Table for: 
      table = "Last Played Tracks (EPM) - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='6'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>URI</th><th>TRACK</th><th>ARTIST</th><th>PLAYED</<th></tr>"

      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td><a href=" + str(row[0]) + ">" + str(row[0]) + "</a></td><td>" + str(row[1]) + "</td>"  
            html = html + "<td>" + str(row[2]) + "</td><td nowrap>" + str(row[3]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("played-epm.html", "w")
      file.write(html)
      file.close

      ##==========================================================================

      ## NOTE: [5b] Last_Played_Tracks (EXT)
      sql = ("SELECT * FROM Last_Played_Tracks WHERE PLAY_COUNT = -100 ORDER BY LAST_PLAYED DESC")  
      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()

      ## Replicate HTML Header plus data Table for: 
      table = "Last Played Tracks (EXT) - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='5'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>URI</th><th>TRACK</th><th>ARTIST</th><th>PLAYED</<th></tr>"

      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td><a href=" + str(row[0]) + ">" + str(row[0]) + "</a></td><td>" + str(row[1]) + "</td>"  
            html = html + "<td>" + str(row[2]) + "</td><td nowrap>" + str(row[3]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("played-ext.html", "w")
      file.write(html)
      file.close

      ##==========================================================================

      ## NOTE: [6] Queue Check.
      sql = ("SELECT * FROM Queue_check")  
      curr = conn.cursor()
      curr.execute(sql)
      rows = curr.fetchall()

      ## Replicate HTML Header plus data Table for: 
      table = "Queue Errors - [" + date_time +"]"
      html = main + "<table border='3' bgcolor = '#ffffff' align='center' cellpadding='2' cellspacing='2'><tr><th colspan='5'>" + table + "</th>"

      ## Header Row Labels:
      html = html + "<tr><th>#</th><th>URI</th><th>TRACK</th><th>ARTIST</th><th>ALBUM</<th></tr>"

      tr = 1
      for row in rows:
            if tr & 1:
                  bgcolor = "#ffffff"
            else:
                  bgcolor = "#dfdfdf"
            html = html + "<tr bgcolor=" + bgcolor + "><td>" + str(tr) + "</td><td><a href=" + str(row[0]) + ">" + str(row[0]) + "</a></td><td>" + str(row[1]) + "</td>"  
            html = html + "<td>" + str(row[2]) + "</td><td>" + str(row[3]) + "</td></tr>"
            tr = tr + 1
      html = html + footer

      file = open("queue-errors.html", "w")
      file.write(html)
      file.close


except Error as e:       
            print(e)  
finally:
      if conn:
            conn.close()
print('All done.')

