using System; using System.Linq; using System.Windows.Controls; using System.Windows.Navigation; using Juick.ViewModels; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using System.Windows.Data; using System.Windows; using RestSharp; using System.Net; namespace Juick { public partial class ThreadView : PhoneApplicationPage { public ThreadView() { InitializeComponent(); Model = new ThreadViewModel(App.AppContext); DataContext = Model; Loaded += (o, args) => { var progressIndicator = SystemTray.ProgressIndicator; if (progressIndicator != null) { return; } progressIndicator = new ProgressIndicator(); SystemTray.SetProgressIndicator(this, progressIndicator); Binding binding = new Binding("IsDataLoading") { Source = App.AppContext }; BindingOperations.SetBinding( progressIndicator, ProgressIndicator.IsVisibleProperty, binding); binding = new Binding("IsDataLoading") { Source = App.AppContext }; BindingOperations.SetBinding( progressIndicator, ProgressIndicator.IsIndeterminateProperty, binding); }; } public ThreadViewModel Model; // When page is navigated to set data context to selected item in list protected override void OnNavigatedTo(NavigationEventArgs e) { if (Model.Items.Count > 0) return; string _mid = ""; if (NavigationContext.QueryString.TryGetValue("mid", out _mid)) { Model.Mid = int.Parse(_mid); } Model.RefreshData(); } private void ListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { // If selected index is -1 (no selection) do nothing if (((ListBox)sender).SelectedIndex == -1) return; // Navigate to the new page var item = Model.Items[((ListBox)sender).SelectedIndex]; var destUri = string.Format("/NewPostView.xaml?mid={0}", item.MID); if (item.RID > 0) destUri += string.Format("&rid={0}", item.RID); NavigationService.Navigate(new Uri(destUri, UriKind.Relative)); // Reset selected index to -1 (no selection) ((ListBox)sender).SelectedIndex = -1; } void RecommendBarMenuItem_Click(object sender, EventArgs e) { ExecuteJuickAction("!"); } void SubscribeBarMenuItem_Click(object sender, EventArgs e) { ExecuteJuickAction("S"); } void UnsubscribeBarMenuItem_Click(object sender, EventArgs e) { ExecuteJuickAction("U"); } void ExecuteJuickAction(string action) { var request = new RestRequest("/post", Method.POST); request.AddParameter("body", string.Concat(action, " #", Model.Mid)); App.AppContext.Client.ExecuteAsync(request, response => { App.AppContext.IsDataLoading = false; if(response.StatusCode != HttpStatusCode.OK || !string.IsNullOrEmpty(response.Content)) { MessageBox.Show(string.Concat(response.StatusCode, ": ", response.Content)); } }); App.AppContext.IsDataLoading = true; } } }