view Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 172:a18d4d12fc36

Se ordena el historial por Nro de Orden
author juanjose.montesdeocaarbos
date Sat, 06 Aug 2011 15:11:41 -0300
parents 734d3f0853bf
children beeb48ddb44a
line wrap: on
line source

using System.Collections.Generic;
using System.Linq;
using AltNetHispano.Agendas.Configurations;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Twitter.Writers;

namespace AltNetHispano.Agendas.Twitter
{
	public class TwitterPublicador : IPublicador
	{
		private readonly IDictionary<Accion, ITwitterWriter> _writers;
		private readonly ITwitterAdapter _twitterAdapter;

		public TwitterPublicador()
			: this(new TwitterAdapter())
		{
		}

		public TwitterPublicador(ITwitterAdapter twitterAdapter)
		{
			_writers = new Dictionary<Accion, ITwitterWriter>
			            	{
			            		{Accion.Proponer, new ProponerTwitterWriter()},
			            		{Accion.Agendar, new AgendarTwitterWriter()},
			            		{Accion.Confirmar, new ConfirmarTwitterWriter()},
			            		{Accion.Publicar, new PublicarTwitterWriter()}
			            	};

			_twitterAdapter = twitterAdapter;
		}

		private const int LIMITE_MENSAJE = 140;

		public void Publicar(IEnumerable<Track> tracks)
		{
			if (!AgendasConfigurationManager.Publicadores.Twitter.Enabled) return;

			foreach (var track in tracks)
			{
				//Si ya hicimos el twitt de este track, no volvemos a hacerlo
				if (track.Logs.Any(l => l.Propietario == TrackLogPropietario.Twitter && l.Successful)) continue;

				var twitt = BuildTwitt(track);
				if (!string.IsNullOrWhiteSpace(twitt))
				{
					string message;
					bool success = _twitterAdapter.Update(twitt, out message);
					track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, success));
				}
			}
		}

		private string BuildTwitt(Track track)
		{
			ITwitterWriter writer;
			if (!_writers.TryGetValue(track.Accion, out writer))
				return string.Empty;

			string body = writer.Write(track);

			return body.Length > LIMITE_MENSAJE ? body.Substring(0, LIMITE_MENSAJE - 1) : body;
		}
	}
}