summaryrefslogtreecommitdiff
path: root/Juick/ViewModels/MessageListViewModelBase.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Juick/ViewModels/MessageListViewModelBase.cs')
-rw-r--r--Juick/ViewModels/MessageListViewModelBase.cs95
1 files changed, 95 insertions, 0 deletions
diff --git a/Juick/ViewModels/MessageListViewModelBase.cs b/Juick/ViewModels/MessageListViewModelBase.cs
new file mode 100644
index 0000000..6bbfd55
--- /dev/null
+++ b/Juick/ViewModels/MessageListViewModelBase.cs
@@ -0,0 +1,95 @@
+using System;
+using System.ComponentModel;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Runtime.Serialization.Json;
+using System.Collections.ObjectModel;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media.Imaging;
+using Juick.Api;
+using RestSharp;
+
+namespace Juick.ViewModels
+{
+ public class MessageListViewModelBase : INotifyPropertyChanged
+ {
+ public MessageListViewModelBase()
+ {
+ this.Items = new ObservableCollection<MessageViewModel>();
+ }
+
+ public string RestUri { get; set; }
+
+ /// <summary>
+ /// A collection for MessageViewModel objects.
+ /// </summary>
+ public ObservableCollection<MessageViewModel> Items { get; private set; }
+
+ public bool IsDataLoaded
+ {
+ get;
+ private set;
+ }
+
+ /// <summary>
+ /// Creates and adds a few MessageViewModel objects into the Items collection.
+ /// </summary>
+ public void LoadData()
+ {
+ if (string.IsNullOrEmpty(RestUri))
+ {
+ RestUri = "/home?1=1" + "&rnd=" + Environment.TickCount;
+ }
+ var request = new RestRequest(RestUri);
+ App.Client.Authenticator = new HttpBasicAuthenticator(App.Account.Credentials.UserName, App.Account.Credentials.Password);
+ App.Client.ExecuteAsync<List<Message>>(request, response =>
+ {
+ if (response.StatusCode != HttpStatusCode.OK)
+ {
+ MessageBox.Show(response.StatusCode.ToString());
+ return;
+ }
+
+ var messages = response.Data;
+ Items.Clear();
+ messages.ForEach(post =>
+ {
+ var item = new MessageViewModel(post)
+ {
+ Status =
+ string.Format(
+ "Posted on: {0}, replies: {1}",
+ post.Timestamp,
+ post.Replies)
+ };
+ Items.Add(item);
+ var imageUri = new Uri(string.Format("http://i.juick.com/as/{0}.png", post.User.Uid), UriKind.Absolute);
+ item.UserAvatar = new BitmapImage
+ {
+ UriSource = imageUri
+ };
+ if (post.Photo != null)
+ {
+ item.Attachment = new BitmapImage { UriSource = new Uri(post.Photo.Small, UriKind.Absolute) };
+ }
+
+ });
+ NotifyPropertyChanged("Items");
+ });
+ }
+
+
+ public event PropertyChangedEventHandler PropertyChanged;
+ public void NotifyPropertyChanged(String propertyName)
+ {
+ PropertyChangedEventHandler handler = PropertyChanged;
+ if (null != handler)
+ {
+ handler(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+} \ No newline at end of file