Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 182:beeb48ddb44a
Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
author | nelopauselli |
---|---|
date | Mon, 08 Aug 2011 21:57:10 -0300 |
parents | 734d3f0853bf |
children | 9f61e8555114 |
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 = 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)) { try { string message; bool success = _twitterAdapter.Update(twitt, out message); 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 string.Empty; string body = writer.Write(track); return body.Length > LIMITE_MENSAJE ? body.Substring(0, LIMITE_MENSAJE - 1) : body; } } }