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


# (c) meschugge
# licensed by WTFPL

import getpass   # Passwort abfragen ermöglichen
import threading # ermöglicht Threads
import mpd	     # python Module das den MPD handelt
import time      # Zeitfunktionen
import datetime  # Datumsfunktionen
import urllib    # zugriff aufs www



class spam(threading.Thread):        # Thread der den MPD Spamed
	def __init__(self, player, song):  # eine Instanz von mpd.MPDClient und ein Song, 
		threading.Thread.__init__(self)  # als String mit dem Pfad Müssen zu beginn übergeben werden.
		self.player = player              
		self.song = song
	def run(self):                     # hauptmethode 
		goon = True
		while goon:                      # während der thread läuft versuche
			try:       
				if player.status()['state'] != 'play' or player.playlist() != [self.song]: # Wenn der player nicht läuft oder die playlist nicht genau aus dem, und nur dem, übergebenen Lied besteht.
					player.clear()        # Leere Playlist
					player.add(self.song) # füge Song ein
					player.volume(100)    # drehe lautsträrke auf maximum
					player.repeat(1)      # Stelle auf dauerschleife
					player.play()         # Starte wiedergabe
				time.sleep(2)           # warte 2 sekunden bevor der loop weiterläuft  
	 		except:
				goon = False            # wenn ein Fehler auftritt beende die schleife, Der erwartete Fehler ist das keine Verbindung zu stande kommt da das script dieses beendet hat

## Lege verschiedene Variabelen fest
MPDhost = "mediathek.lan"
MPDport = 6600
user = ""
twitterpswd = ""
song = '.mp3'
timeformat = "%a %b %d %H:%M CET %Y" 

print "WELCOME TO CLEANUP"       # einige Ausgaben an den User
print "Cleaning is FUN!"
print "Enter a Password to authenticate your Power!"
pswd = getpass.getpass()         # Frage Passwort ab
player = mpd.MPDClient()         # initialisiere MPDClient object Player
player.connect(MPDhost, MPDport) # stell eine verbindung her
nerv = spam(player, song)        # initialisiere spam Thread
nerv.start()                     # starte spam Thread. Ruft spam.run() auf
print "Enter password again to confirm cleanness"               
while True:                  
	stop = getpass.getpass() # Frage solange ein passwort ab bis
	if stop == pswd:         # das passwort stimmt
		player.disconnect()    # beende die Verbindung (dies wirft einen Error in der while schleife des spam Thread)    

		post_text = "hey guyz tha room is CLEANED UP! @ %s " % datetime.datetime.now().strftime(timeformat) # erstelle Botschaft für Twitter

		data = urllib.urlencode({"status" : post_text}) # Mache die Botschaft Webfreunlich
		res = urllib.urlopen("http://%s:%s@twitter.com/statuses/update.xml" % (user, twitterpswd), data) #Poste tweet über die Twitter API

		print "Have a nice day in your clean room!"
		quit() #Beende Programm
	else:
		print "WRONG" #Gebe eine Ausgabe bei falscher Passworteingabe aus



