Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 286:a8f7c41e3b47
#196: Patrocinadores, en el histórico de eventos.
author | juanjose.montesdeocaarbos |
---|---|
date | Mon, 02 Jan 2012 15:51:19 -0300 |
parents | 33e6ee3d1776 |
children |
line wrap: on
line source
using System; 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 = 134; public void Publicar(IEnumerable<Track> tracks) { if (!AgendasConfigurationManager.Publicadores.Twitter.Enabled) return; foreach (var track in tracks) { if (track.Evento.FechaInicio < DateTime.Today || track.Evento.FechaTermino < DateTime.Today) { var message = string.Empty; message = "Solo se generan twitts de eventos futuros."; track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, false)); } else { //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 (twitt.Length > 0) { try { var success = true; var message = string.Empty; foreach (var t in twitt) { string m; success &= _twitterAdapter.Update(t, out m); message += m; } track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, success)); } catch (Exception ex) { track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, track.Usuario, ex)); } } } } } private string[] BuildTwitt(Track track) { ITwitterWriter writer; if (!_writers.TryGetValue(track.Accion, out writer)) return new string[0]; var partes = writer.Write(track).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray(); var twitters = new List<string>(); string twitter = string.Empty; for (int index = 0; index < partes.Length; index++) { string parte = partes[index]; var nuevo = twitter + parte; if (nuevo.Length < LIMITE_MENSAJE) twitter = nuevo; else { if (index<parte.Length-1) twitter += "..."; if (twitters.Any()) twitter = "..." + twitter; twitters.Add(twitter); twitter = parte.Trim(); } } if (!string.IsNullOrWhiteSpace(twitter)) { if (twitters.Any()) twitter = "..." + twitter; twitters.Add(twitter); } return twitters.ToArray(); } } }