#!/usr/bin/env python
"""
homepage - Update the Pluvo Homepage
Author: Sean B. Palmer, inamidst.com

@@ Eventually this should be in Pluvo itself.
"""

import os.path, time, md5, shutil, glob

filenames = [fn for fn in glob.glob('*.tar.gz') if not 'latest' in fn]
stable = list(sorted(filenames)).pop()

def formatnumber(n): 
   parts = list(str(n))
   for i in range((len(parts) - 3), 0, -3):
      parts.insert(i, ',')
   return ''.join(parts)

def md5sum(fn): 
   bufsiz = 2048
   m = md5.new()
   f = open(fn, 'rb')
   while True: 
      chunk = f.read(bufsiz)
      if not chunk: break
      m.update(chunk)
   f.close()
   return m.hexdigest()

def main(): 
   shutil.copyfile("index.html", "../odds/attic/homepage.html.bak")
   # @sh "cp index.html ../odds/attic/homepage.html.bak"

   f = open("index.html")
   lines = list(f.readlines())
   f.close()
   # lines = { @lines <index.html> }

   latest = False
   f = open('index.html', 'w')
   for line in lines: 
      if line.startswith('     <a href="pluvo-latest.tar.gz">'): 
         first = line[:line.find('(')+1]
         third = line[line.find(')'):]

         mtime = os.path.getmtime('pluvo-latest.tar.gz')
         day = time.strftime('%Y-%m-%d', time.gmtime(mtime))

         f.write(first + day + third)
         latest = True

      elif line.startswith('      <li>Size:'): 
         first = line[:line.find(': ')+2]
         third = line[line.find(' bytes'):]

         if latest: 
            size = os.path.getsize('pluvo-latest.tar.gz')
         else: size = os.path.getsize(stable)
         size = formatnumber(size)

         f.write(first + size + third)

      elif line.startswith('      <li>MD5:'): 
         first = line[:line.find(': ')+2]
         third = line[line.find('</li>'):]

         if latest: 
            md5hash = md5sum('pluvo-latest.tar.gz')
         else: md5hash = md5sum(stable)

         f.write(first + md5hash + third)

      elif line.startswith('     <a href="pluvo-'): 
         f.write('     <a href="%s">%s</a>\n' % (stable, stable))
         latest = False

      else: f.write(line)

if __name__ == '__main__': 
   main()
