#!/usr/bin/python
# -*- coding: utf-8 -*-

####################################################################################
#
# Script to notify when a dowload is finished on SABnzbd+ with Karotz text-to-speech
#
# Author : Magetys
# Link : http://www.magetys.com
# Version : 1.0
# Note : You need to configure SABnzbd+ to launch this script on post-process
#
####################################################################################

import hmac
import urllib
import time
import random
import hashlib
import sys
import base64
from xml.dom.minidom import parse, parseString

# params

APIKEY= ''
SECRET= ''
INSTALLID = ''

# utils functions

def sign(parameters, signature):
    keys = parameters.keys()
    keys.sort()
    sortedParameters = [(key, parameters[key]) for key in keys]
    query = urllib.urlencode(sortedParameters)
    digest_maker = hmac.new(signature, query, hashlib.sha1)
    signValue = base64.b64encode(digest_maker.digest())
    query = query + "&signature=" + urllib.quote(signValue)
    return query


def getInteractiveId(result):
    doc = parseString(result)
    return doc.getElementsByTagName("VoosMsg")[0].getElementsByTagName("interactiveMode")[0].getElementsByTagName("interactiveId")[0].firstChild.nodeValue


# build parameters for Remote Authentication request

parameters = {}
parameters['installid'] = INSTALLID
parameters['apikey'] = APIKEY
parameters['once'] = "%d" % random.randint(100000000, 99999999999)
parameters['timestamp'] = "%d" % time.time()

query = sign(parameters, SECRET)


# launch Remote Authentication request

f = urllib.urlopen("http://api.karotz.com/api/karotz/start?%s" % query)
result = f.read()


# get Interactive ID from XML response

interactiveId = getInteractiveId(result)


# launch speak request

if sys.argv[7] == "0":
    string = 'Téléchargement de ' + sys.argv[3] + ' terminé avec succès'
else:
    string = 'Téléchargement de ' + sys.argv[3] + ' échoué'

params = urllib.urlencode({'action': 'speak', 'lang': 'FR', 'text': string, 'interactiveid': interactiveId})

f = urllib.urlopen("http://api.karotz.com/api/karotz/tts?%s" % params)


# stop the application

time.sleep(8)
f = urllib.urlopen("http://api.karotz.com/api/karotz/interactivemode?action=stop&interactiveid=%s" % interactiveId)


