[#GADGETS] HowTo: Integrar el USB Email Notifier para mostrar los estados de Lync 2013 Beta (III)

image

Buenas,

hoy cierro la serie donde comento como utilizando C# podemos controlar el estado de las luces de un USB Email Notifier de poco más de U$S 8.00.

En primer lugar el ejemplo real que estaba armando era una aplicación que mostraba las alertas para un servidor de Builds con Team Foundation Server 2012. Como alguna vez hace tiempo ya armé algo parecido con el lanza misiles USB y Team Foundation Server 2008, pues hoy haré algo diferente.

Hace un tiempo me llamo la atención este post de Scott Hanselman, donde comenta como ha puesto un BusyLight en la puerta de su oficina para que su familia sepa si está en una call, conferencia, etc. Además de sentirme bastante identificado con su situación, me llamó la atención de que nadie haya creado una solución “barata” para esto. Pues bien, aquí está por unos U$S 20 y con la satisfacción de haberlo hecho uno mismo.

Lo único que necesitamos es un light notifier y un par de extensiones USB, por ejemplo

Lo siguiente es crear una aplicación WPF donde utilicemos los controles de presencia de Lync. En este caso estoy utilizando LYNC 2013 BETA, con lo que tuve que descargar el SDK también en modo Beta desde aquí. Lo bueno de este SDK, es que además del clásico modelo de objetos, también tenemos una serie de controles WPF que nos permiten crear una aplicación como la que podemos ver la siguiente imagen en pocos minutos:

image

El código WPF

   1: <Window x:Class="ElBruno.LyncLightNotifier.MainWindow"

   2:         xmlns:controls="clr-namespace:Microsoft.Lync.Controls;assembly=Microsoft.Lync.Controls"

   3:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   4:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   5:         Title="El Bruno - LYNC 2013 Light Alert"

   6:         Height="264"

   7:         Width="405">

   8:     <Grid>

   9:         <Grid.RowDefinitions>

  10:             <RowDefinition />

  11:             <RowDefinition />

  12:         </Grid.RowDefinitions>

  13:         <Grid.ColumnDefinitions>

  14:             <ColumnDefinition Width="187*" />

  15:             <ColumnDefinition Width="384*" />

  16:         </Grid.ColumnDefinitions>

  17:         <Grid.Background>

  18:             <ImageBrush ImageSource="Lync.png" />

  19:         </Grid.Background>

  20:         <StackPanel Orientation="Vertical"

  21:                     Margin="10,0,0,10"

  22:                     HorizontalAlignment="Stretch"

  23:                     VerticalAlignment="Center"

  24:                     Height="106"

  25:                     Grid.Column="1"

  26:                     Grid.Row="1">

  27:             <controls:MyPresenceChooser x:Name="myPresence"

  28:                                         HorizontalAlignment="Stretch" />

  29:             <controls:MyStatusArea x:Name="myStatus" />

  30:         </StackPanel>

  31:     </Grid>

  32: </Window>

Ahora bien, como no he invertido mucho tiempo en ver como funciona el SDK, en los primeros 10 minutos no encontré un evento que me indique el cambio de estado. Es por eso que el siguiente código es casi igual de dañino para el mundo de la programación como asesinar al último unicornio o hacer un par de kilómetros en mi coche (lo último es dañino para la ecología).

   1: using System;

   2: using System.Timers;

   3: using System.Windows;

   4: using System.Windows.Threading;

   5: using ElBruno.LightNotifier;

   6: using Microsoft.Lync.Controls;

   7:  

   8: namespace ElBruno.LyncLightNotifier

   9: {

  10:     public partial class MainWindow

  11:     {

  12:         private readonly Timer _timer = new Timer(1000);

  13:         public MainWindow()

  14:         {

  15:             InitializeComponent();

  16:             Loaded += MainWindowLoaded;

  17:             Unloaded += MainWindowUnloaded;

  18:         }

  19:  

  20:         void MainWindowUnloaded(object sender, RoutedEventArgs e)

  21:         {

  22:             _timer.Elapsed -= TimerElapsed;

  23:             _timer.Stop();

  24:         }

  25:  

  26:         void MainWindowLoaded(object sender, RoutedEventArgs e)

  27:         {

  28:             _timer.Elapsed += TimerElapsed;

  29:             _timer.Enabled = true;

  30:         }

  31:  

  32:         void TimerElapsed(object sender, ElapsedEventArgs e)

  33:         {

  34:             Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(CheckLyncState));

  35:         }

  36:         void CheckLyncState()

  37:         {

  38:             var state = myPresence.AvailabilityState;

  39:             var lightController = new LightController();

  40:             lightController.TurnLight(state == ContactAvailability.DoNotDisturb);

  41:         }

  42:     }

  43: }

Pues bien, la solución es bastante simple: un timer que cada segundo verifica el estado en LYNC 2013 y si el mismo es Do Not Disturb, pues enciende el light notifier. Las líneas 32 hasta la 41 te harán feliz.

Si una imagen vale más que mil palabras, el siguiente valor debe valer 2 o 3 monosílabos

Video: http://youtu.be/Tah42D8Vozw

El código de la aplicación completa se puede descargar desde http://sdrv.ms/PkgQ4L.

Referencias:

Saludos @ Home

El Bruno

image image image

One thought on “[#GADGETS] HowTo: Integrar el USB Email Notifier para mostrar los estados de Lync 2013 Beta (III)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.