public void GotoReplyToPost(ViewModelBase currentContext, CommentsViewModel source) { source.CurrentlyFocused = source.AddReplyComment(null); Messenger.Default.Send<FocusChangedMessage>(new FocusChangedMessage(source)); }
public LinkViewModel(ViewModelBase context, Link link) { Context = context; Link = link; Comments = new CommentsViewModel(this, link); _content = new Lazy<ContentViewModel>(() => SnooStream.ViewModel.Content.ContentViewModel.MakeContentViewModel(link.Url, link.Title, this, link.Thumbnail)); }
public CommentViewModel(CommentsViewModel context, Comment comment, string linkId, int depth = 0) { _context = context; _isMinimized = false; _comment = comment; _linkId = linkId; Depth = depth; AuthorFlair = SnooStreamViewModel.RedditService.GetUsernameModifiers(_comment.Author, _linkId, _comment.Subreddit); AuthorFlairText = HttpUtility.HtmlDecode(_comment.AuthorFlairText); Body = HttpUtility.HtmlDecode(_comment.Body); }
public CommentsContentStreamViewModel(CommentsViewModel context) { _context = context; Links = new ObservableCollection<ILinkViewModel>(); if (context.Link != null && context.Link.IsSelfPost) ProcessMarkdown(context.Link, context.Link.SelfText); foreach(var flatComment in context.FlatComments) { if(flatComment is CommentViewModel) { ProcessMarkdown(flatComment, SnooStreamViewModel.MarkdownProcessor.Process(((CommentViewModel)flatComment).Body)); } } }
public static ViewModelBase LoadFromDump(string dump, ViewModelBase context, SnooStreamViewModel rootContext) { try { var stateItem = JsonConvert.DeserializeObject<Tuple<string, string>>(dump); switch (stateItem.Item1) { case "AboutUserViewModel": { var accountThing = JsonConvert.DeserializeObject<Tuple<Account, DateTime>>(stateItem.Item2); return new AboutUserViewModel(accountThing.Item1, accountThing.Item2); } case "AboutRedditViewModel": { var subredditThing = JsonConvert.DeserializeObject<Tuple<Subreddit, DateTime>>(stateItem.Item2); return new AboutRedditViewModel(subredditThing.Item1, subredditThing.Item2); } case "LinkRiverViewModel": { Debug.Assert(context is SnooStreamViewModel); var subredditThing = JsonConvert.DeserializeObject<Tuple<Subreddit, string, List<Link>, DateTime, string, string>>(stateItem.Item2); var result = rootContext.SubredditRiver.GetOrMakeSubreddit(subredditThing.Item6, subredditThing.Item1, subredditThing.Item2, subredditThing.Item3, subredditThing.Item4); result.CurrentSelected = result.Links.FirstOrDefault(lnk => lnk.Id == subredditThing.Item5); return result; } case "CommentsViewModel": { var dumpArgs = JsonConvert.DeserializeObject<Tuple<Listing, string, string, DateTime?>>(stateItem.Item2); LinkViewModel targetContext = null; if (context is LinkRiverViewModel) targetContext = ((LinkRiverViewModel)context).Links.FirstOrDefault(link => link.Id == dumpArgs.Item3) as LinkViewModel; var comments = new CommentsViewModel(targetContext, dumpArgs.Item1, dumpArgs.Item2, dumpArgs.Item4); if (targetContext != null) targetContext.Comments = comments; return comments; } case "SettingsViewModel": { return new SettingsViewModel(SnooStreamViewModel.Settings); } case "PostViewModel": { var dumpArgs = JsonConvert.DeserializeAnonymousType(stateItem.Item2, new { Editing = false, Kind = "", Subreddit = "", Text = "", Title = "", Url = "" }); return new PostViewModel() { Editing = dumpArgs.Editing, Kind = dumpArgs.Kind, Subreddit = dumpArgs.Subreddit, Text = dumpArgs.Text, Title = dumpArgs.Title, Url = dumpArgs.Url, }; } case "MessageViewModel": { var postViewModel = new CreateMessageViewModel(); return postViewModel; } case "ConversationViewModel": { var dumpArgs = JsonConvert.DeserializeAnonymousType(stateItem.Item2, new { ActivityId = "", Username = "", Topic = "", Contents = "", IsReply = false }); CreateMessageViewModel createMessage = null; if (!string.IsNullOrWhiteSpace(dumpArgs.Username) || !string.IsNullOrWhiteSpace(dumpArgs.Topic) || !string.IsNullOrWhiteSpace(dumpArgs.Contents)) { createMessage = new CreateMessageViewModel { Contents = dumpArgs.Contents, Topic = dumpArgs.Topic, Username = dumpArgs.Username, IsReply = dumpArgs.IsReply }; } ActivityGroupViewModel targetGroup; if (!string.IsNullOrWhiteSpace(dumpArgs.ActivityId) && rootContext.SelfStream.Groups.TryGetValue(dumpArgs.ActivityId, out targetGroup)) { return new ConversationViewModel(targetGroup, rootContext.SelfStream, createMessage); } else { return new ConversationViewModel(null, rootContext.SelfStream, createMessage); } } case "CommentsContentStreamViewModel": { var dumpArgs = JsonConvert.DeserializeObject<Tuple<string, string>>(stateItem.Item2); Debug.Assert(context is CommentsViewModel); var commentsViewModel = context as CommentsViewModel; var streamViewModel = new CommentsContentStreamViewModel(commentsViewModel); streamViewModel.CurrentSelected = streamViewModel.Links.FirstOrDefault(linkVM => linkVM.Id == dumpArgs.Item1 && linkVM.Url == dumpArgs.Item2); return streamViewModel; } case "LoginViewModel": { return rootContext.Login; } default: throw new InvalidOperationException(stateItem.Item1); } } catch (Exception ex) { ////_logger.Fatal(string.Format("dump was {0}", dump), ex); throw; } }
public LoadFullCommentsViewModel(CommentsViewModel context) { Load = new RelayCommand(LoadFully); _context = context; }