diff options
Diffstat (limited to 'Juick/ViewModels')
-rw-r--r-- | Juick/ViewModels/AppViewModel.cs | 94 | ||||
-rw-r--r-- | Juick/ViewModels/LoginViewModel.cs | 6 | ||||
-rw-r--r-- | Juick/ViewModels/NewPostViewModel.cs | 28 | ||||
-rw-r--r-- | Juick/ViewModels/PostItem.cs | 9 |
4 files changed, 67 insertions, 70 deletions
diff --git a/Juick/ViewModels/AppViewModel.cs b/Juick/ViewModels/AppViewModel.cs index e3a58bb..4b30c08 100644 --- a/Juick/ViewModels/AppViewModel.cs +++ b/Juick/ViewModels/AppViewModel.cs @@ -19,7 +19,12 @@ namespace Juick.ViewModels readonly HttpNotificationChannel pushChannel; // The name of our push channel. - string channelName = "JuickChannel"; + private const string channelName = "JuickChannel"; + + public void UpdateNetworkStatus() + { + NetworkUnavailable = !DeviceNetworkInformation.IsNetworkAvailable; + } public void UpdateNetworkStatus() { @@ -33,24 +38,19 @@ namespace Juick.ViewModels pushChannel = HttpNotificationChannel.Find(channelName); // If the channel was not found, then create a new connection to the push service. - if (pushChannel == null) + if (_pushChannel == null) { - pushChannel = new HttpNotificationChannel(channelName); + _pushChannel = new HttpNotificationChannel(channelName); // Register for all the events before attempting to open the channel. - pushChannel.ChannelUriUpdated += (sender, e) => { - EnableNotifications(); - }; - pushChannel.ErrorOccurred += (sender, e) => - { - DisableNotifications(); - }; + _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) => + _pushChannel.ShellToastNotificationReceived += (sender, e) => { - StringBuilder message = new StringBuilder(); + var message = new StringBuilder(); string relativeUri = string.Empty; message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString()); @@ -71,19 +71,21 @@ namespace Juick.ViewModels } Debug.WriteLine("Received: " + message.ToString()); }; - pushChannel.Open(); + + _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(); - }; - pushChannel.ErrorOccurred += (sender, e) => DisableNotifications(); + _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) => + _pushChannel.ShellToastNotificationReceived += (sender, e) => { StringBuilder message = new StringBuilder(); string relativeUri = string.Empty; @@ -105,8 +107,10 @@ namespace Juick.ViewModels } } Debug.WriteLine("Received: " + message.ToString()); - }; - } + }; + + EnableNotifications(_pushChannel.ChannelUri.ToString()); + } } private ObservableCollection<PageViewModel> _pages; public ObservableCollection<PageViewModel> Pages @@ -141,6 +145,18 @@ namespace Juick.ViewModels } } + private bool _isNetworkUnavailable; + public bool NetworkUnavailable + { + get { return _isNetworkUnavailable; } + set + { + _isNetworkUnavailable = value; + NotifyPropertyChanged(IsNetworkAvailablePropertyName); + } + } + + private AccountManager _acc; public AccountManager Account @@ -160,23 +176,37 @@ namespace Juick.ViewModels } } - public void EnableNotifications() + public void EnableNotifications(string Url) { if (!Account.IsAuthenticated) return; - var channelUri = pushChannel.ChannelUri.ToString(); - if (channelUri == Account.NotificationUri) - return; - Account.NotificationUri = channelUri; - if (!pushChannel.IsShellToastBound) - // Bind this new channel for toast events. - pushChannel.BindToShellToast(); + 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() { - if (pushChannel.IsShellToastBound) - pushChannel.UnbindToShellToast(); + 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)); + } } } diff --git a/Juick/ViewModels/LoginViewModel.cs b/Juick/ViewModels/LoginViewModel.cs index c0bf1f9..95528fe 100644 --- a/Juick/ViewModels/LoginViewModel.cs +++ b/Juick/ViewModels/LoginViewModel.cs @@ -2,11 +2,12 @@ using System.Net; using System.Windows; using Juick.Classes; +using Juick.ViewModels.Validation; using RestSharp; namespace Juick.ViewModels { - public class LoginViewModel : ViewModelBase + public class LoginViewModel : DataViewModelBase { private string _username; private string _password; @@ -59,12 +60,11 @@ namespace Juick.ViewModels App.AppContext.Account.UserName = Username; App.AppContext.Account.Password = Password; App.AppContext.Account.IsAuthenticated = true; - App.AppContext.EnableNotifications(); ((App)Application.Current).NavigateTo(NextUri, true); } else { - MessageBox.Show("Invalid username or password", "Error", MessageBoxButton.OK); + AddError("Username", "Invalid username or password", false); } }); } diff --git a/Juick/ViewModels/NewPostViewModel.cs b/Juick/ViewModels/NewPostViewModel.cs deleted file mode 100644 index 3c28cc7..0000000 --- a/Juick/ViewModels/NewPostViewModel.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Ink; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; - -namespace Juick.ViewModels -{ - public class NewPostViewModel : ViewModelBase - { - public PostItem ReplyTo { get; set; } - - public PostItem Draft { get; set; } - - public BitmapImage Attachment { get; set; } - - public NewPostViewModel(PostItem replyTo) - { - ReplyTo = replyTo; - } - } -} diff --git a/Juick/ViewModels/PostItem.cs b/Juick/ViewModels/PostItem.cs index 88f6b86..97935b3 100644 --- a/Juick/ViewModels/PostItem.cs +++ b/Juick/ViewModels/PostItem.cs @@ -1,8 +1,6 @@ using System; using System.Net; using JuickApi; -using Juick.Classes; -using System.Globalization; namespace Juick.ViewModels { @@ -13,11 +11,8 @@ namespace Juick.ViewModels MID = message.Mid; RID = message.Rid; Username = message.User.UName; - // Juick timestamp in utc: 2013-04-22 13:14:30 - var timestamp = DateTime.ParseExact(message.Timestamp, "yyyy-MM-dd HH:mm:ss", null); - Status = string.Format("{0}", DateHelper.PrettyDate(timestamp.ToLocalTime())); - if (message.Replies > 0) - Status = string.Format("{0}, replies: {1}", Status, message.Replies); + Status = string.Format("Posted on: {0}, replies: {1}", message.Timestamp, message.Replies); + MessageText = HttpUtility.HtmlDecode(message.Body); if (message.Tags != null) |