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

#~ Now Playing Amarok plugin pour le forum Harwdare.fr
#~ Copyright (C) 2005 Jonathan Ballet

#~ This program is free software; you can redistribute it and/or
#~ modify it under the terms of the GNU General Public License
#~ as published by the Free Software Foundation; either version 2
#~ of the License, or (at your option) any later version.

#~ This program is distributed in the hope that it will be useful,
#~ but WITHOUT ANY WARRANTY; without even the implied warranty of
#~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#~ GNU General Public License for more details.

#~ You should have received a copy of the GNU General Public License
#~ along with this program, in the file COPYING. If not, write
#~ to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
#~ Boston, MA 02111-1307, USA.

## Références :
## Send cookies : curl -b "name=Daniel" www.cookiesite.com
## Post : curl -d "birthyear=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

## DCOP function for amarok : http://amarok.kde.org/wiki/index.php/DCOP_Functions
## DCOP call with python : http://webcvs.kde.org/kdebindings/dcoppython/test/test.py?rev=1.4&view=auto

############ Variable à définir ################
## Pseudo de l'utilisateur
pseudo = ''

## Mot de passe crypté à récupérer dans les cookies du navigateur (nom de la variable : passs)
password_crypt = ''

## email de l'utilisateur
####### Attention, si l'email est différent de celui d'origine,
####### un nouveau mot de passe est généré et envoyé à cet adresse !!
email = ''

## Signature à afficher, {NP} sera remplacé par la valeur générée par le plugin (cf variable 'np' plus bas)
signature = '[url=http://multani.info/npamarok/]amarok np[/url] -> [b]{NP}[/b]'
############ Variable à définir ################


import urllib
import pycurl
import sys
import pcop


## Recoit les pages renvoyés par CURL après un perform
def get_curl_result(self):
	pass	## Pour l'instant, on a pas trop envie de recevoir la page, donc elle est pas affichée

def update_profile(self, np):

	## Champs à récupérer dans son profil utilisateur
	champs = {
		'email': email,
		'sexe':'', ## 1 pour un homme, 2 pour une femme, 0 pour NA
		'mailv':'', ## email visible : 0 = non, 1 = oui
		'online':'', ## Apparaitre dans la liste des connectés : 0 = non, 1 = oui
		'ville':'', ## ville
		'icq':'', ## numéro ICQ
		'homepage':'', ## site perso
		'bday':'', ## jour de naissance
		'bmonth':'', ## mois de naissance
		'byear':'', ## année de naissance
		'hobby':'', ## Passions
		'metier':'',  ## Métier
		'citation':'', ## Citation personnel
		'signature':signature.replace('{NP}', np), ## Signature
		'topicpp':'50', ## Nombre de topic par page
		'image':'1', ## Afficher les images : 0 = non, 1 = oui
		'affichsign':'1', ## Afficher la signature : 0 = non, 1 = oui
		'affichoutils':'1', ## Afficher la barre d'outils : 0 = non, 1 = oui
		'quote':'0', ## Afficher les citations de façon traditionnelle : 0 = non, 1 = oui
		'smilies':'1', ## Interprétation des smilies & images : 0 = non, 1 = oui
		'rollover':'1', ## Surlignage des lignes : 0 = non, 1 = oui
		'theme_css_choice':'', ## Thème graphique : value = "Selon le forum consulté" => "", "Défaut" => "defaut", "Dégradé" => "degrade"
		'theme_images_choice':'', ## Jeu d'icône : value = "Selon le forum consulté" => "", "Défaut" => "defaut", etc.
		'language_choice':'0', ## Language du forum : Anglais = 1, Français = 0
		'zlib':'1', ## Compressé les pages : 0 = non, 1 = oui
		'mailmp':'0', ## Envoi de mail par mp : 0 = non, 1 = oui
		'modomp':'0', ## Mode de contact préféré: 0 = email, 1 = message privé
		'submit':'Valider les modifications'}
	
	cookie = 'sign=0; passs=' + password_crypt + '; user=' + pseudo + '; p=1; data=' + pseudo
	
	## Création de la connexion avec CURL
	c = pycurl.Curl()
	c.setopt(c.URL, 'http://forum.hardware.fr/user/editprofil_validation.php?config=hardwarefr.inc')
	
	## Encodage des champs
	c.setopt(c.POSTFIELDS, urllib.urlencode(champs))
	
	## Mise en place du cookie
	c.setopt(c.COOKIE, cookie)
	
	## On veut pas de détail (sinon, on passe à 1)
	c.setopt(c.VERBOSE, 0)
	
	## On renvoit les pages reçues par perform vers cette fonction
	c.setopt(c.WRITEFUNCTION, get_curl_result)
	
	print 'NOW PLAYING : ' + np
	
	## Envoi de la requête HTTP
	res = c.perform()
	
	## On ferme la connexion
	c.close()

while True:
	# Read data from stdin. Will block until data arrives.
	str = sys.stdin.readline()
	
	if str:
		
		if str.find( "configure" ) != -1:
			pass
		
		if str.find( "engineStateChange: play" ) != -1:
			# Récupération des informations sur la chanson via DCOP
			## cf. http://amarok.kde.org/wiki/index.php/DCOP_Functions pour récupérer d'autres valeurs
			artist = pcop.dcop_call( "amarok", "default", "artist", () )
			title = pcop.dcop_call( "amarok", "default", "title", () )
			track = pcop.dcop_call( "amarok", "default", "track", () )
			## NP à afficher dans la signature, remplace la chaine {NP} de la variable 'signature' définie plus haut)
			np = '#' + track + ' ' + title + ' - ' + artist 
			print "Now playing"
			update_profile(0, np)
		
		
		
		
		if str.find( "engineStateChange: idle" ) != -1:
			np = 'empty'
			print "Idle"
			update_profile(0, np)
		
		
		
		
		if str.find( "engineStateChange: pause" ) != -1:
			artist = pcop.dcop_call( "amarok", "default", "artist", () )
			title = pcop.dcop_call( "amarok", "default", "title", () )
			track = pcop.dcop_call( "amarok", "default", "track", () )
			np = '#' + track + ' ' + title + ' - ' + artist  + ' [i](paused)[/i]'
			print "Paused"
			update_profile(0, np)
		
		
		
		
		if str.find( "engineStateChange: empty" ) != -1:
			np = 'empty'
			print "Idle"
			update_profile(0, np)
		
		
		
		
		if str.find( "trackChange" ) != -1:
			print "track changed"
			## On ne met pas à jour, c'est les autres événèments qui s'en occupe
		
		
	else:
		break
