Пример #1
0
        public async void Init(ForumsTopicNavigationArgs args)
        {
            ViewModelLocator.ForumsMain.CurrentBackNavRegistrar = this;
            if (LoadingTopic)
            {
                return;
            }

            LoadingTopic = true;
            _prevArgs    = args;
            Messages?.Clear();
            AvailablePages?.Clear();

            ToggleWatchingButtonText = "Toggle watching";
            CurrentTopicData         = await ForumTopicQueries.GetTopicData(_prevArgs.TopicId, _prevArgs.TopicPage, _prevArgs.LastPost, _prevArgs.MessageId);

            CurrentPage = _prevArgs.LastPost ? CurrentTopicData.AllPages : CurrentTopicData.CurrentPage;
            ViewModelLocator.GeneralMain.CurrentStatus = $"Forums - {(CurrentTopicData.IsLocked ? "Locked: " : "")}{CurrentTopicData?.Title}";
            Messages = new ObservableCollection <ForumTopicMessageEntryViewModel>(
                CurrentTopicData.Messages.Select(
                    entry => new ForumTopicMessageEntryViewModel(entry)));

            if (_prevArgs.FirstVisibleItemIndex != null)
            {
                RequestScroll?.Invoke(this, _prevArgs.FirstVisibleItemIndex.Value);
            }
            else if (_prevArgs.LastPost)
            {
                RequestScroll?.Invoke(this, Messages.Count - 1);
            }
            else if (CurrentTopicData.TargetMessageId != null /*|| (_prevArgs.MessageId != null && _prevArgs.MessageId != -1)*/)
            {
                //var index = _prevArgs.MessageId != null && _prevArgs.MessageId != -1 ? _prevArgs.MessageId.ToString() : CurrentTopicData.T
                RequestScroll?.Invoke(this, Messages.IndexOf(Messages.First(model => model.Data.Id == CurrentTopicData.TargetMessageId)));
            }

            var watched = _handyDataStorage.WatchedTopics.StoredItems.FirstOrDefault(model => model.Id == CurrentTopicData.Id);

            if (watched != null)
            {
                _isWatched         = true;
                watched.OnCooldown = false;
                _handyDataStorage.WatchedTopics.SaveData();
            }
            else
            {
                _isWatched = false;
            }
            RaisePropertyChanged(() => IsWatched);


            IsPinned = ViewModelLocator.ForumsMain.PinnedTopics.Any(entry => entry.Id == CurrentTopicData.Id);
            ViewModelLocator.ForumsMain.PinnedTopics.CollectionChanged += PinnedTopicsOnCollectionChanged;
            LoadingTopic = false;
        }
 public ForumTopicPageFragment(ForumsTopicNavigationArgs args)
 {
     _args = args;
 }