Exemplo n.º 1
0
        private async Task SaveMediaList(PlexPayload payload, Media anime)
        {
            var mutation  = @"
            mutation($mediaId: Int, $status: MediaListStatus, $progress: Int, $score: Float, $startedAt: FuzzyDateInput, $completedAt: FuzzyDateInput){ 
                SaveMediaListEntry (mediaId: $mediaId, status: $status, progress: $progress, score: $score, startedAt: $startedAt, completedAt: $completedAt)
                { 
                    id 
                    status 
                } 
            }
            ";
            var variables = new QueryVariables();

            variables.MediaId = anime.Id;

            if (!string.IsNullOrEmpty(payload.Rating))
            {
                variables.Score = int.Parse(payload.Rating);
            }
            else
            {
                var isMovie     = payload.Metadata.Type == "movie";
                var isCompleted = isMovie ? true : payload.Metadata.Index == anime.Episodes;

                variables.Status = isCompleted ? MediaListStatus.COMPLETED : MediaListStatus.CURRENT;
                if (!isCompleted)
                {
                    variables.Progress = payload.Metadata.Index;
                }
            }

            var queryBody = new QueryBody(mutation, variables);

            await QueryAnilist(queryBody);
        }
Exemplo n.º 2
0
        public async Task Sync(PlexPayload payload)
        {
            var anime = await SearchAnilist(payload);

            if (anime == null)
            {
                return;
            }

            await UpdateAniList(payload, anime);
        }
Exemplo n.º 3
0
        private async Task UpdateAniList(PlexPayload payload, Media anime)
        {
            var userId = await GetUser();

            if (!userId.HasValue)
            {
                return;
            }

            var mediaListMatch = await SearchMediaList(userId.Value, anime);

            if (string.IsNullOrEmpty(payload.Rating) && mediaListMatch != null && mediaListMatch.Status == MediaListStatus.COMPLETED)
            {
                return;
            }
            await SaveMediaList(payload, anime);
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Post(PlexPayload payload)
        {
            if (payload.Event != "media.scrobble" && payload.Event != "media.rate")
            {
                return(Ok());
            }

            var animeLibraryTitle      = _config.GetValue <string>("animeLibraryTitle");
            var animeMovieLibraryTitle = _config.GetValue <string>("animeMovieLibraryTitle");

            if (payload.Metadata.LibrarySectionTitle != animeLibraryTitle && payload.Metadata.LibrarySectionTitle != animeMovieLibraryTitle)
            {
                return(Ok());
            }

            await _anilistService.Sync(payload);

            return(Ok());
        }
Exemplo n.º 5
0
        private async Task <Media> SearchAnilist(PlexPayload payload)
        {
            var query = @"
            query($search:String, $seasonYear: Int, $format: MediaFormat){
                Page (page: 1, perPage: 1) {
                    pageInfo {
                    total
                    currentPage
                    lastPage
                    hasNextPage
                    perPage
                    }
                    media(search:$search, seasonYear:$seasonYear, format: $format, type:ANIME){
                    id
                    title {
                        romaji
                    }
                    episodes
                    }
                }
            }
            ";

            if (string.IsNullOrEmpty(payload.Metadata.GrandparentTitle))
            {
                payload.Metadata.GrandparentTitle = null;
            }

            var variables = new QueryVariables
            {
                Search     = payload.Metadata.GrandparentTitle ?? payload.Metadata.ParentTitle ?? payload.Metadata.Title,
                SeasonYear = payload.Metadata.Year,
                Format     = payload.Metadata.Type == "movie" ? MediaFormat.MOVIE : MediaFormat.TV
            };
            var queryBody = new QueryBody(query, variables);

            var responseData = await QueryAnilist(queryBody);

            var anilistReturnData = AnlistReturnData.FromJson(responseData);

            return(anilistReturnData.Data.Page?.Media?.FirstOrDefault());
        }