Stylet/Samples/Stylet.Samples.RedditBrowser/Pages/PostsViewModel.cs

95 lines
2.5 KiB
C#

using Stylet.Samples.RedditBrowser.RedditApi;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stylet.Samples.RedditBrowser.Pages
{
public class PostsViewModel : Screen
{
public event EventHandler<PostCommentsOpenedEventArgs> PostCommentsOpened;
private IRedditClient client;
public string Subreddit { get; set; }
public SortMode SortMode { get; set; }
public PostCollection PostCollection { get; private set; }
public Post SelectedPost { get; set; }
public PostsViewModel(IRedditClient client)
{
this.client = client;
}
protected override async void OnInitialActivate()
{
// Really un-advanced - just close
try
{
this.PostCollection = await this.client.GetPostsAsync(this.Subreddit, this.SortMode);
}
catch (Exception)
{
this.TryClose();
}
}
public void Close()
{
this.TryClose();
}
public bool CanNext
{
get { return this.PostCollection != null && this.PostCollection.HasNext; }
}
public async void Next()
{
this.PostCollection = await this.PostCollection.NextAsync();
}
public bool CanPrev
{
get { return this.PostCollection != null && this.PostCollection.HasPrev; }
}
public async void Prev()
{
this.PostCollection = await this.PostCollection.PrevAsync();
}
public bool CanOpenSelected
{
get { return this.SelectedPost != null; }
}
public void OpenSelected()
{
if (this.SelectedPost == null)
return;
Process.Start(this.SelectedPost.LinkUrl);
}
public bool CanOpenSelectedComments
{
get { return this.SelectedPost != null && this.SelectedPost.NumComments > 0; }
}
public void OpenSelectedComments()
{
if (this.SelectedPost == null)
return;
var handler = this.PostCommentsOpened;
if (handler != null)
handler(this, new PostCommentsOpenedEventArgs() { PostId36 = this.SelectedPost.Id36 });
}
}
public class PostCommentsOpenedEventArgs : EventArgs
{
public string PostId36 { get; set; }
}
}