summaryrefslogtreecommitdiff
path: root/Juick/ViewModels/AppViewModel.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Juick/ViewModels/AppViewModel.cs')
-rw-r--r--Juick/ViewModels/AppViewModel.cs120
1 files changed, 120 insertions, 0 deletions
diff --git a/Juick/ViewModels/AppViewModel.cs b/Juick/ViewModels/AppViewModel.cs
index 77970df..29e2a6b 100644
--- a/Juick/ViewModels/AppViewModel.cs
+++ b/Juick/ViewModels/AppViewModel.cs
@@ -5,11 +5,98 @@ using System.Linq;
using Juick.Classes;
using JuickApi;
using RestSharp;
+using Microsoft.Phone.Notification;
+using System.Diagnostics;
+using System.Text;
namespace Juick.ViewModels
{
public class AppViewModel : ViewModelBase
{
+ readonly HttpNotificationChannel pushChannel;
+
+ // The name of our push channel.
+ string channelName = "JuickChannel";
+
+ public AppViewModel()
+ {
+ pushChannel = HttpNotificationChannel.Find(channelName);
+
+ // If the channel was not found, then create a new connection to the push service.
+ if (pushChannel == null)
+ {
+ pushChannel = new HttpNotificationChannel(channelName);
+
+ // Register for all the events before attempting to open the channel.
+ pushChannel.ChannelUriUpdated += (sender, e) => EnableNotifications(e.ChannelUri.ToString());
+ pushChannel.ErrorOccurred += (sender, e) => DisableNotifications();
+
+ // Register for this notification only if you need to receive the notifications while your application is running.
+ // Register for this notification only if you need to receive the notifications while your application is running.
+ pushChannel.ShellToastNotificationReceived += (sender, e) =>
+ {
+ StringBuilder message = new StringBuilder();
+ string relativeUri = string.Empty;
+
+ message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString());
+
+ // Parse out the information that was part of the message.
+ foreach (string key in e.Collection.Keys)
+ {
+ message.AppendFormat("{0}: {1}\n", key, e.Collection[key]);
+
+ if (string.Compare(
+ key,
+ "wp:Param",
+ System.Globalization.CultureInfo.InvariantCulture,
+ System.Globalization.CompareOptions.IgnoreCase) == 0)
+ {
+ relativeUri = e.Collection[key];
+ }
+ }
+ Debug.WriteLine("Received: " + message.ToString());
+ };
+
+ pushChannel.Open();
+
+ // Bind this new channel for toast events.
+ pushChannel.BindToShellToast();
+
+ }
+ else
+ {
+ // The channel was already open, so just register for all the events.
+ pushChannel.ChannelUriUpdated += (sender, e) => EnableNotifications(e.ChannelUri.ToString());
+ pushChannel.ErrorOccurred += (sender, e) => DisableNotifications();
+
+ // Register for this notification only if you need to receive the notifications while your application is running.
+ pushChannel.ShellToastNotificationReceived += (sender, e) =>
+ {
+ StringBuilder message = new StringBuilder();
+ string relativeUri = string.Empty;
+
+ message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString());
+
+ // Parse out the information that was part of the message.
+ foreach (string key in e.Collection.Keys)
+ {
+ message.AppendFormat("{0}: {1}\n", key, e.Collection[key]);
+
+ if (string.Compare(
+ key,
+ "wp:Param",
+ System.Globalization.CultureInfo.InvariantCulture,
+ System.Globalization.CompareOptions.IgnoreCase) == 0)
+ {
+ relativeUri = e.Collection[key];
+ }
+ }
+ Debug.WriteLine("Received: " + message.ToString());
+ };
+
+ EnableNotifications(pushChannel.ChannelUri.ToString());
+ }
+ }
private ObservableCollection<PageViewModel> _pages;
public ObservableCollection<PageViewModel> Pages
{
@@ -51,5 +138,38 @@ namespace Juick.ViewModels
});
}
}
+
+ public void EnableNotifications(string Url)
+ {
+ if (!Account.IsAuthenticated) return;
+ Client.Authenticator = new HttpBasicAuthenticator(Account.UserName, Account.Password);
+ Debug.WriteLine(Url.ToString());
+ if (string.IsNullOrEmpty(Account.NotificationUri) || Account.NotificationUri != Url)
+ {
+ Account.NotificationUri = Url;
+ RegisterNotificationUrl(Url);
+ }
+ else
+ {
+ UnregisterNotificationUrl(Account.NotificationUri);
+ Account.NotificationUri = Url;
+ RegisterNotificationUrl(Url);
+ }
+ }
+
+ public void DisableNotifications()
+ {
+ UnregisterNotificationUrl(Account.NotificationUri);
+ Account.NotificationUri = string.Empty;
+ }
+
+ void RegisterNotificationUrl(string newUrl)
+ {
+ Client.ExecuteAsync(new RestRequest("/winphone/register?url=" + newUrl), response => Debug.WriteLine(response.StatusCode));
+ }
+ void UnregisterNotificationUrl(string oldUrl)
+ {
+ Client.ExecuteAsync(new RestRequest("/winphone/unregister?url=" + oldUrl), response => Debug.WriteLine(response.StatusCode));
+ }
}
}