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

#-------------------------------------------
# Beállítás:
#   Add meg a szolgáltatási gmail bejelentkezési adatait:

gmail_acc = "szolgáltatási_gmail_felhasználó_név"
gmail_pass = "hozzátartozó_jelszó"
#-------------------------------------------

import sm
import os
import exif
import time
import token
from gmail import Gmail
#-------------------------------------------

to = 'trigger@ifttt.com'
# Hashtag szavak. Ezek segítségével lehet különböző helyekre triggerelni ugyanazt az egy üzenetet.
# Fontos, hogy mindig az első (0.) legyen a trigger-tárgy. - A tárgy, amivel az IFTTT triggelhető.
facebook = ['#facebook','Facebook', 'facebook', 'face', 'Face', 'Facebok', 'facebok', '#Facebook', 'Fbook', 'fbook']
twitter = ['#twitter','Twitter','twitter','tweet','Tweet', 'Twiter', 'twiter','#Twitter']
linkedin = ['#linkedin','LinkedIn','linkedin','Linkdin','linkdin','Linkedin','lindekIn','#LinkedIn']
tumblr = ['#tumblr','Tumblr','tumblr', '#Tumblr']
hashtags = [facebook, twitter, linkedin, tumblr]

#-------------------------------------------

def address_split(address):
  if '<' in address:
    if '>' in address:
      address = address.split('<')
      address = (address[1]).split('>')
      return address[0]

# Futó program
#-------------
clear = lambda: os.system('clear')					# Windows: 'cls'

while True:
  clear()
  imano = Gmail()
  imano.login(gmail_acc,gmail_pass)					#  Bejelentkezés a Gmail fiókba
  #
  email = imano.inbox().mail(unread=True,prefetch=True)			# Olvasatlan levelek beolvasása az "email" változóba
  if email == []:
    print '|!|  Nincs új üzenet'
  else:
    print '|!| Új üzenetek:\n---------------'
  for i in range(len(email)):						# Egyetlen levelet kiolvas a sok közül az "i" változóba
    user = address_split(email[i].fr)					# Küldő leválasztása
    Subject = email[i].subject						# Tárgy leválasztás
    Text = email[i].body						# Üzenet leválasztás
    #Text = str(Text.encode("utf-8"))					# Üzenet kódolásának átállítása
    Access_Token = token.r_token(user)					# Ellenőrzi, hogy van-e hozzáférése az e-mail küldőjének
    if Access_Token != '':
      if email[i].attachments != 'None':				# Ellenőrzi, hogy van-e csatolmány
	print str(i+1)+". levél :\n---------------"			# Kiírja a levél adatait
	print "Access Token:",Access_Token
	print "Feladó: ",user
	print "Címzett: ",address_split(email[i].to)
	print "Tárgy: ",Subject
	print "Van-e csatolmány: Van."
	print "Üzenet:\n------\n",Text,"\n------"
	attachment = (email[i].attachments)[0]
	print 'Csatolmány mentése:'
	print 'Méret: ' + str(attachment.size) + ' KB'
	fname = str((attachment.name).encode("utf-8"))			# Megvizsgálja, hogy milyen kiterjesztésű a fájl.
	if 'jpg' in fname:
	  fname = "jpg"
	elif 'png' in fname:
	  fname = "png"
	else:
	  fname = ''
	attachment.save('attachments/' + 'image.'+fname)		# Lementi a csatolmányt
	#
	iform = exif.image_anonim('attachments/' + 'image.'+fname)	# Megpróbálja anonimizálni a képet
	if iform == True:						# Ha sikeres volt az anonimizálás, elküldi a képet.
	  for p in range(len(hashtags)):				# Előtte kiválasztja a megfelelő küldési tárgyat.
	    for q in range(len(hashtags[p])):
	      if hashtags[p][q] in Subject:
		S_Subject = hashtags[p][0]
		S_Subject = str(S_Subject.encode("utf-8"))		# Kódolás átállítása küldés előtt.   
		print "------\nküldési tárgy:", S_Subject
		sm.sendmail (user, to, '', S_Subject, Text, Access_Token, 'attachments/image.'+fname) # ELküldi az anonimizált képet
		break
	#
	exif.del_image('attachments/image.'+fname)			# törli az anonimizált képet
	email[i].read()							# Olvasottnak jelöli a képet,
	email[i].delete()						# És törli
	print 'A levél és annak tartalma törölve.\n'
  #
  imano.logout()							# Kijelentkezés a Gmail fiókból
  print "--------------------------------\nAz utolsó frissítés:",(time.strftime("%H:%M:%S")),"\n--------------------------------"
  print "Következő frissítés 30 mp. múlva."
  for sleep in range(30,0,-5):
      print '   . ',sleep,'mp.'
      time.sleep(3) 