#!/usr/bin/env python
import getopt
import jppy
import tempfile
import mx.DateTime
import sys
import os.path
import string
import rfc822


# Example procmail recipe

#:0
#* > 32500
#* ^TO_palmmemo@nickpiper.co.uk
#| /usr/local/bin/jp_add_doc --rfc822


def usage():
    print """
jp_add_doc [options] [filename]
if filename is not specified on the command line, doc is read from stdin.
  --rfc822        Treat data as an 822 message, and only store parts as the doc.
  --title [title] Specify title to use, otherwise will try take Subject out of 822 msg.
"""

try:
    opts, args = getopt.getopt(sys.argv[1:], "hmtw", ["help","rfc822","title"])
except getopt.GetoptError:
    print "Arguments could not be understood..."
    usage()
    sys.exit(2)
mail = None
Title = None
for o, a in opts:
    if o in ("-h", "--help"):
        usage()
        sys.exit()
    if o in ("-m", "--rfc822"):
        mail = 1
    if o in ("-t", "--title"):
        Title = str(a)

if args:
    if len(args) > 1:
        sys.stderr.write("Can only take one filename\n")
        os.exit(1)
    filename = args[0]
    if not os.path.isfile(filename):
        sys.stderr.write("File %s does not exist\n" % filename)
        os.exit(1)
else:
    usage()
    sys.exit(2)

if mail:
    if not filename:
        msg = rfc822.Message(sys.stdin)
    else:
        msg = rfc822.Message(open(filename,"r"))
    if not Title:
        Title = "%s %s" % (
            msg.getheader('Subject'),
            msg.getheader('Date'))
    Fp = msg.fp
else:
    if not filename:
        if not Title:
            Title = "Stdin at %s" % mx.DateTime.now().strftime("%c")
        Fp = sys.stdin
    else:
        if not Title:
            path, _filename = os.path.split(filename)
            Title = "%s from ...%s" % (_filename, path[-15:])
        Fp = open(filename,"r")

txt_fn = tempfile.mktemp(".txt")
pdb_fn = tempfile.mktemp(".pdb")

txt_fp = open(txt_fn,"w")
txt_fp.write(Fp.read())
txt_fp.close()

env = jppy.environment.Environment()

if os.spawnlp(os.P_WAIT, 'txt2pdbdoc', 'txt2pdbdoc', Title, txt_fn, pdb_fn) == 0:
    print "Adding %s (%s)" % (Title,pdb_fn)
    env.installFile(pdb_fn)
else:
    sys.stderr.write("Call to txt2pdbdoc failed.\n")
    os.exit(1)
