#!/usr/bin/env python
import os, os.path, sys
import urllib, urllib2
import tempfile
import glob
import posixpath
from BitTorrent import makemetafile

sections = {
	"xvid": 45,
	"xxx": 46,
}

login = {
	"username": "YOUR_USERNAME",
	"password": "YOUR_PASSWORD",
}

base_url = "http://www.scenetorrents.org"

announce_url = posixpath.join(base_url, "announce.php?passkey=YOUR_PASSKEY")

def auto_upload(selection, release, base="/home/web/data"):
	def create_torrent():
		# XXX: 16 == 2 ** 16 == ~65K, probably not sane to have the chunk length always that long
		makemetafile.make_meta_file(os.path.join(base, release), announce_url, 16)
		return os.path.join(base, release + ".torrent")

	def hit_loginphp(opener, ua):
		req = urllib2.Request(
			posixpath.join(base_url, "login.php"),
			headers={
				"User-Agent": ua
			})
		f = opener.open(req)
		return f
	def login(opener, ua):
		req = urllib2.Request(
			posixpath.join(base_url, "takelogin.php"),
			urllib.urlencode(login),
			{
				"User-Agent": ua,
				"Referer": posixpath.join(base_url, "login.php")
			})
		f = opener.open(req)
		return f
	def upload(opener, ua, torrent_fname, nfo_text):
		upinfo = {
			# XXX: is file supposed to be the file data or name? (don't think just the name makes much sense)
			"file": open(torrent_fname).read(),
			"subject": release,
			"type": sections[section],
			"MAX_FILE_SIZE": "104857600",
			"message": "nfo_text",
			"submit": "Upload Torrent",
		}
		req = urllib2.Request(
			posixpath.join(base_url, "takeupload.php"),
			urllib.urlencode(upinfo),
			{
				"User-Agent": ua,
				"Referer": posixpath.join(base_url, "upload.php"),
				# XXX: the php script also has an Expect: header, empty
			})
		f = opener.open(req)
		return f

	ua = "Mozilla/5.0 (X11; U; Linux i686; en; rv:1.9.0.1) Gecko/20080528 (Gentoo) Epiphany/2.22 Firefox/3.0"
	opener = urllib2.build_opener([urllib2.HTTPCookieProcessor])
	tname = create_torrent()
	nfodata = open(glob.glob(os.path.join(base, release, "*.nfo"))[0]).read()
	print hit_loginphp(opener, ua).read()
	print login(opener, ua).read()
	print upload(opener, ua, tname, nfodata).read()


if __name__ == "__main__":
	selection = sys.argv[0]
	release = sys.argv[1]
	auto_upload(selection, release)

