annotate Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 271:e2c6610b14c7

Ticket #194: Error enviar twit cuando Cancela Evento. Test y Corrección.
author juanjose.montesdeocaarbos
date Fri, 11 Nov 2011 08:14:21 -0300
parents 9f61e8555114
children 33e6ee3d1776
rev   line source
182
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
1 using System;
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
2 using System.Collections.Generic;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
3 using System.Linq;
158
734d3f0853bf Manejando configuración de los publicadores con una sección propia en los .config
nelopauselli
parents: 122
diff changeset
4 using AltNetHispano.Agendas.Configurations;
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
5 using AltNetHispano.Agendas.Domain;
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
6 using AltNetHispano.Agendas.Twitter.Writers;
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
7
34
475be11edf56 Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents: 3
diff changeset
8 namespace AltNetHispano.Agendas.Twitter
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
9 {
87
26d0513a8410 A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents: 34
diff changeset
10 public class TwitterPublicador : IPublicador
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
11 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
12 private readonly IDictionary<Accion, ITwitterWriter> _writers;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
13 private readonly ITwitterAdapter _twitterAdapter;
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
14
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
15 public TwitterPublicador()
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
16 : this(new TwitterAdapter())
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
17 {
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
18 }
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
19
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
20 public TwitterPublicador(ITwitterAdapter twitterAdapter)
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
21 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
22 _writers = new Dictionary<Accion, ITwitterWriter>
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
23 {
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
24 {Accion.Proponer, new ProponerTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
25 {Accion.Agendar, new AgendarTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
26 {Accion.Confirmar, new ConfirmarTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
27 {Accion.Publicar, new PublicarTwitterWriter()}
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
28 };
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
29
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
30 _twitterAdapter = twitterAdapter;
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
31 }
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
32
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
33 private const int LIMITE_MENSAJE = 134;
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
34
87
26d0513a8410 A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents: 34
diff changeset
35 public void Publicar(IEnumerable<Track> tracks)
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
36 {
158
734d3f0853bf Manejando configuración de los publicadores con una sección propia en los .config
nelopauselli
parents: 122
diff changeset
37 if (!AgendasConfigurationManager.Publicadores.Twitter.Enabled) return;
734d3f0853bf Manejando configuración de los publicadores con una sección propia en los .config
nelopauselli
parents: 122
diff changeset
38
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
39 foreach (var track in tracks)
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
40 {
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
41 //Si ya hicimos el twitt de este track, no volvemos a hacerlo
120
c3573defd18f Agregado de Fecha, Usuario y Successful en TrackLog
Jorge@Jorge-PC
parents: 111
diff changeset
42 if (track.Logs.Any(l => l.Propietario == TrackLogPropietario.Twitter && l.Successful)) continue;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
43
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
44 var twitt = BuildTwitt(track);
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
45 if (twitt.Length>0)
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
46 {
182
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
47 try
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
48 {
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
49 bool success=true;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
50 string message=string.Empty;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
51
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
52 foreach (var t in twitt)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
53 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
54 string m;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
55 success &= _twitterAdapter.Update(t, out m);
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
56 message += m;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
57 }
182
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
58 track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, success));
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
59 }
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
60 catch(Exception ex)
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
61 {
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
62 track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, track.Usuario, ex));
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
63 }
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
64 }
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
65 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
66 }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
67
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
68 private string[] BuildTwitt(Track track)
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
69 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
70 ITwitterWriter writer;
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
71 if (!_writers.TryGetValue(track.Accion, out writer))
271
e2c6610b14c7 Ticket #194: Error enviar twit cuando Cancela Evento. Test y Corrección.
juanjose.montesdeocaarbos
parents: 228
diff changeset
72 return new string[0];
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
73
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
74 var partes = writer.Write(track).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray();
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
75
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
76 var twitters = new List<string>();
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
77
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
78 string twitter = string.Empty;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
79 for (int index = 0; index < partes.Length; index++)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
80 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
81 string parte = partes[index];
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
82
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
83 var nuevo = twitter + parte;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
84 if (nuevo.Length < LIMITE_MENSAJE)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
85 twitter = nuevo;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
86 else
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
87 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
88 if (index<parte.Length-1)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
89 twitter += "...";
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
90 if (twitters.Any())
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
91 twitter = "..." + twitter;
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
92
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
93 twitters.Add(twitter);
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
94 twitter = parte.Trim();
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
95 }
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
96 }
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
97 if (!string.IsNullOrWhiteSpace(twitter))
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
98 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
99 if (twitters.Any())
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
100 twitter = "..." + twitter;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
101 twitters.Add(twitter);
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
102 }
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
103
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
104 return twitters.ToArray();
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
105 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
106 }
3
5f007e266509 code cleanup
nelopauselli
parents: 1
diff changeset
107 }