Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 228:9f61e8555114
Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
author | nelopauselli |
---|---|
date | Wed, 28 Sep 2011 18:51:53 -0300 |
parents | beeb48ddb44a |
children | e2c6610b14c7 |
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) { //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 { bool success=true; string 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.Empty}; 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(); } } }