#!/usr/bin/python
TRAC_ENV_PATH = '/var/lib/trac/ops'

import time
import email
import sys
import re
import trac.util
from trac.env import Environment
from trac.ticket import Ticket

env=Environment(TRAC_ENV_PATH)

################################
## Stolen from emailfilter.py
class TicketEmailParser(object):
        env = None
        def __init__(self, env):
                self.env = env
        def parse(self, msg):
                tkt = Ticket(self.env)
                tkt['status'] = 'new'
                tkt['reporter'] = msg['from']
                tkt['summary'] = msg['subject']
                for part in msg.walk():
                        if part.get_content_type() == 'text/plain':
                                tkt['description'] = part.get_payload(decode=1).strip()
                tkt.insert()

################################
## Parse the message
msg = email.message_from_file(sys.stdin)
msg_sub_is_reply        = re.compile('^[rR][eE]:')
msg_sub_find_ticket_num = re.compile('#[0-9]+')
m1                      = msg_sub_is_reply.match(msg['subject'])
m2                      = msg_sub_find_ticket_num.search(msg['subject'])
tNum=None
dbMatch=2
if m1:
        if m2:
                tNum=m2.group()
                tNum=tNum[1:8]
if tNum:
        db = env.get_db_cnx()
        cursor = db.cursor()
        cursor.execute("SELECT id FROM ticket WHERE id=" + tNum)
        for id in cursor:
                if id[0] == int(tNum):
                        dbMatch = 1

if dbMatch and tNum:
        ### We want to add this e-mail message as a COMMENT
        tkt = Ticket(env, int(tNum))
        msgSender=msg['From']
        msgBody=""
        msgPart=0
        for part in msg.walk():
                if part.get_content_type() == 'text/plain':
                        msgPart=msgPart+1
                        if msgPart == 1:
                                msgBody=part.get_payload(decode=1).strip()
                        else:
                                msgBody=msgBody + "\r\n" + part.get_payload(decode=1).strip()
        cursor.execute('INSERT INTO ticket_change (\'ticket\',\'time\',\'author\',\'field\',\'oldvalue\',\'newvalue\') VALUES (\'%s\',\'%s\',\'%s\',\'comment\',\'\',\'%s\')' % (tNum, time.time(), msgSender, trac.util.sql_escape(msgBody)))
        db.commit()
else:
        ### we want to add this e-mail message as a NEW TICKET
        tktparser = TicketEmailParser(env)
        tktparser.parse(msg)

