Пример #1
0
        public void UpdateMediaListItem(AniList.Models.MediaModels.MediaList mediaList)
        {
            if (mediaList.Media?.Type == MediaType.Anime)
            {
                var instance = MediaListFragment.GetInstance(MediaListFragment.AnimeMediaListFragmentName);

                (instance as MediaListFragment)?.UpdateMediaListItem(mediaList);
            }
            else if (mediaList.Media?.Type == MediaType.Manga)
            {
                (MediaListFragment.GetInstance(MediaListFragment.MangaMediaListFragmentName) as MediaListFragment)
                ?.UpdateMediaListItem(mediaList);
            }

            var itemPosition =
                _adapter?.Items.FindIndex(x => x.Model?.Id == mediaList.Media?.Id);

            if (itemPosition == null || mediaList.Media == null)
            {
                return;
            }

            mediaList.Media.MediaListEntry = mediaList;

            _adapter.ReplaceItem(itemPosition.Value, _adapter.CreateViewModelFunc?.Invoke(mediaList.Media));
        }
Пример #2
0
        public void UpdateMediaListItem(AniList.Models.MediaModels.MediaList mediaList)
        {
            foreach (var adapter in _recyclerAdapters)
            {
                if (mediaList?.Media?.Id == null)
                {
                    Activity.Logger.Error("UpdateMediaListItem", "A media list item update was attempted with a null reference.");
                    continue;
                }

                adapter.UpdateMediaListItem(mediaList.Media.Id, mediaList);
            }
        }
Пример #3
0
        public void UpdateMediaListItem(AniList.Models.MediaModels.MediaList mediaList)
        {
            // this whole method is predicated on the fact that deletions from media lists are currently not possible throught he app
            // this logic will need to be updated once that functionality has been added

            _media.MediaListEntry = _mediaList = mediaList;

            if (_mediaDetailsView == null)
            {
                DisplaySnackbarMessage("Error occurred while updating media view", Snackbar.LengthLong);
                return;
            }

            var statusView = _mediaDetailsView.FindViewById <TextView>(Resource.Id.Media_ListStatus);

            statusView.Visibility = ViewStates.Visible;
            statusView.Text       = _mediaList.Status.DisplayValue;

            var mediaListSummaryView = _mediaDetailsView.FindViewById <DataRow>(Resource.Id.Media_MediaListSummary);

            if (mediaList != null && _mediaListOptions != null)
            {
                mediaListSummaryView.Visibility = ViewStates.Visible;
                mediaListSummaryView.TextOne    = $"Rating:  {mediaList.GetScoreString(_mediaListOptions.ScoreFormat)}";

                if (_media?.Type == MediaType.Anime)
                {
                    mediaListSummaryView.TextTwo =
                        mediaList.GetFormattedProgressString(_media.Type, _media.Episodes);
                }
                else if (_media?.Type == MediaType.Manga)
                {
                    mediaListSummaryView.TextTwo =
                        mediaList.GetFormattedProgressString(_media.Type, _media.Chapters);
                }
            }

            InvalidateOptionsMenu();

            if (_media.Type == MediaType.Anime)
            {
                var instance = MediaListFragment.GetInstance(MediaListFragment.AnimeMediaListFragmentName);

                (instance as MediaListFragment)?.UpdateMediaListItem(mediaList);
            }
            else if (_media.Type == MediaType.Manga)
            {
                (MediaListFragment.GetInstance(MediaListFragment.MangaMediaListFragmentName) as MediaListFragment)
                ?.UpdateMediaListItem(mediaList);
            }
        }
Пример #4
0
        private void UpdateMediaListOnAdapters(AniList.Models.MediaModels.MediaList mediaList)
        {
            AdapterList.ForEach(adapter => {
                var itemPosition =
                    adapter?.Items.FindIndex(x => x?.Model?.Id == mediaList.Media?.Id);

                if (itemPosition >= 0)
                {
                    mediaList.Media.MediaListEntry = mediaList;

                    adapter.ReplaceItem(itemPosition.Value, adapter.CreateViewModelFunc?.Invoke(mediaList.Media));
                }
            });
        }
Пример #5
0
        public void UpdateMediaListItem(AniList.Models.MediaModels.MediaList mediaList)
        {
            if (mediaList.Media?.Type == MediaType.Anime)
            {
                var instance = MediaListFragment.GetInstance(MediaListFragment.AnimeMediaListFragmentName);

                (instance as MediaListFragment)?.UpdateMediaListItem(mediaList);
            }
            else if (mediaList.Media?.Type == MediaType.Manga)
            {
                (MediaListFragment.GetInstance(MediaListFragment.MangaMediaListFragmentName) as MediaListFragment)
                ?.UpdateMediaListItem(mediaList);
            }

            UpdateMediaListOnAdapters(mediaList);
        }
Пример #6
0
            public EditMediaListItemDialogFragment(IAniListMediaListEditPresenter presenter, Media media, AniList.Models.MediaModels.MediaList mediaList, UserMediaListOptions mediaListOptions, bool completeMedia)
            {
                _presenter           = presenter;
                _media               = media;
                _mediaList           = mediaList;
                _mediaListOptions    = mediaListOptions;
                _isPrivate           = mediaList?.Private ?? false;
                _priority            = mediaList?.Priority ?? 0;
                _hideFromStatusLists = mediaList?.HiddenFromStatusLists ?? false;
                _completeMedia       = completeMedia;
                _customLists         = (mediaList?.CustomLists?.Where(x => x.Enabled).Select(x => x.Name).ToList() ??
                                        new List <string>()).ToHashSet();
                _customScoringEnabled = mediaListOptions.AnimeList?.AdvancedScoringEnabled ??
                                        mediaListOptions.MangaList?.AdvancedScoringEnabled == true;

                _mediaStatusList = AniListEnum.GetEnumValues <MediaListStatus>().OrderBy(x => x.Index)
                                   .Select(x => x.DisplayValue).ToList();
            }
Пример #7
0
        public async Task IncreaseMediaProgress(AniList.Models.MediaModels.MediaList mediaListToUpdate)
        {
            var editDto = new MediaListEditDto
            {
                MediaId  = mediaListToUpdate.Media.Id,
                Progress = (mediaListToUpdate.Progress ?? 0) + 1
            };

            var mediaUpdateResp = await AniListService.UpdateMediaListEntry(editDto, default);

            mediaUpdateResp.Switch(mediaList =>
            {
                View.DisplaySnackbarMessage($"Updated progress for {mediaList.Media.Title.UserPreferred}", Snackbar.LengthShort);
                View.UpdateMediaListItem(mediaList);
            })
            .Switch(error =>
            {
                View.DisplaySnackbarMessage("Error occurred while saving list entry", Snackbar.LengthLong);
                View.ResetMediaListItem(mediaListToUpdate.Media.Id);
            });
        }
Пример #8
0
        public async Task CompleteMedia(AniList.Models.MediaModels.MediaList mediaListToComplete)
        {
            var editDto = new MediaListEditDto
            {
                MediaId  = mediaListToComplete.Media.Id,
                Progress = mediaListToComplete.Media.Episodes,
                Status   = MediaListStatus.Completed
            };

            var mediaUpdateResp = await AniListService.UpdateMediaListEntry(editDto, default);

            mediaUpdateResp.Switch(mediaList =>
            {
                View.DisplaySnackbarMessage($"Completed {mediaList.Media.Title.UserPreferred}", Snackbar.LengthShort);
                View.UpdateMediaListItem(mediaList);
            })
            .Switch(error =>
            {
                View.DisplaySnackbarMessage("Error occurred while saving list entry", Snackbar.LengthLong);
                View.ResetMediaListItem(mediaListToComplete.Media.Id);
            });
        }
Пример #9
0
 public void UpdateMediaListItem(AniList.Models.MediaModels.MediaList mediaList)
 {
 }
Пример #10
0
        public static void Create(BaseAniDroidActivity context, IAniListMediaListEditPresenter presenter, Media media, AniList.Models.MediaModels.MediaList mediaList, UserMediaListOptions mediaListOptions, bool completeMedia = false)
        {
            var dialog = new EditMediaListItemDialogFragment(presenter, media, mediaList, mediaListOptions, completeMedia)
            {
                Cancelable = true
            };
            var transaction = context.SupportFragmentManager.BeginTransaction();

            transaction.SetTransition((int)FragmentTransit.FragmentOpen);
            transaction.Add(Android.Resource.Id.Content, dialog).AddToBackStack(EditMediaListItemDialogFragment.BackstackTag).Commit();
        }
Пример #11
0
 public void RemoveMediaListItem()
 {
     _media.MediaListEntry = _mediaList = null;
     Recreate();
 }
Пример #12
0
 public void ShowMediaListEditDialog(AniList.Models.MediaModels.MediaList mediaList)
 {
     _editItem?.SetEnabled(true);
     EditMediaListItemDialog.Create(this, Presenter, _media, mediaList, _mediaListOptions);
 }
Пример #13
0
        public void SetupMediaView(AniList.Models.MediaModels.Media media)
        {
            _media     = media;
            _mediaList = media.MediaListEntry;

            var adapter = new FragmentlessViewPagerAdapter();

            adapter.AddView(_mediaDetailsView = CreateMediaDetailsView(media), "Details");

            if (media.Characters?.PageInfo?.Total > 0)
            {
                adapter.AddView(CreateMediaCharactersView(media.Id), "Characters");
            }

            if (media.Staff?.PageInfo?.Total > 0)
            {
                adapter.AddView(CreateMediaStaffView(media.Id), "Staff");
            }

            if (media.Relations?.Data?.Any() == true)
            {
                adapter.AddView(CreateMediaRelationsView(media.Relations.Data.ToList()), "Relations");
            }

            if (media.Recommendations?.PageInfo?.Total > 0)
            {
                adapter.AddView(CreateMediaRecommendationsView(media.Id), "Recommendations");
            }

            if (media.Studios?.Data?.Any() == true)
            {
                adapter.AddView(CreateMediaStudiosView(media.Studios.Data.ToList()), "Studios");
            }

            if (media.Tags?.Any() == true)
            {
                adapter.AddView(CreateMediaTagsView(media.Tags, media.Type), "Tags");
            }

            if (media.Rankings?.Any() == true || media.Stats?.AreStatsValid() == true)
            {
                adapter.AddView(CreateMediaUserDataView(media), "User Data");
            }

            if (media.Trends?.PageInfo?.Total > 4 || media.AiringTrends?.PageInfo?.Total >= 2)
            {
                adapter.AddView(CreateMediaTrendsView(media.Trends?.Data?.ToList(), media.AiringTrends?.Data?.Where(x => x.Node.Episode.HasValue).DistinctBy(x => x.Node.Episode).ToList()), "Trends");
            }

            // TODO: see if there's a better way of determining whether to display this or not
            if (Settings.IsUserAuthenticated)
            {
                adapter.AddView(CreateMediaFollowingUsersMediaListStatusView(media.Id), "Following");
            }

            if (media.Reviews?.PageInfo?.Total > 0)
            {
                adapter.AddView(CreateMediaReviewsView(media.Id), "Reviews");
            }

            adapter.AddView(CreateMediaForumThreadsView(media.Id), "Forum Threads");

            ViewPager.OffscreenPageLimit = adapter.Count - 1;
            ViewPager.Adapter            = adapter;

            TabLayout.SetupWithViewPager(ViewPager);
        }