예제 #1
0
        private static async Task <List <GroupedSearchResult> > OnlineResult(string Query)
        {
            var User = Logincredentials.getuser(1);                                        //Grab username and password
            var url  = new Uri("https://myanimelist.net/api/anime/search.xml?q=" + Query);
            var url2 = new Uri("https://myanimelist.net/api/manga/search.xml?q=" + Query); //my god, I hate this hack

            //GET
            HttpResponseMessage AnimeResponse, MangaResponse;

            byte[] bytes         = Encoding.UTF8.GetBytes(User.UserName + ":" + User.Password);
            string LoginToBase64 = Convert.ToBase64String(bytes);

            using (var client = new HttpClient()) {
                client.DefaultRequestHeaders.Add("Authorization", "Basic " + LoginToBase64);

                AnimeResponse = await client.GetAsync(url);

                AnimeResponse.EnsureSuccessStatusCode();

                MangaResponse = await client.GetAsync(url2);

                MangaResponse.EnsureSuccessStatusCode();
            }

            List <GroupedSearchResult> ItemList = new List <GroupedSearchResult>();
            XDocument AnimeItems = ParseResponse(AnimeResponse.Content.ToString());
            XDocument MangaItems = ParseResponse(MangaResponse.Content.ToString());

            if (AnimeItems == null && MangaItems == null)
            {
                return(ItemList);                                                                         // just return null list.
            }
            AnimeResponse.Dispose();
            MangaResponse.Dispose();
            if (AnimeItems != null)
            {
                var AnimeIndex = AnimeItems.Descendants("entry").Take(3);
                foreach (var item in AnimeIndex)
                {
                    ItemList.Add(new GroupedSearchResult {
                        GroupName = "Anime",
                        Library   = new ItemModel {
                            Item_Id    = (int)item.Element("id"),
                            Item_Title = item.Element("title").Value,
                            Imgurl     = item.Element("image").Value
                        }
                    });
                }
            }

            if (MangaItems != null)
            {
                var MangaIndex = MangaItems.Descendants("entry").Take(3);
                foreach (var item in MangaIndex)
                {
                    ItemList.Add(new GroupedSearchResult {
                        GroupName = "Manga",
                        Library   = new ItemModel {
                            Item_Id    = (int)item.Element("id"),
                            Item_Title = item.Element("title").Value,
                            Imgurl     = item.Element("image").Value
                        }
                    });
                }
            }
            return(ItemList);
        }
예제 #2
0
    public void LoadFromTitleId()
    {
        if (_chapterRoutine != null)
        {
            StopCoroutine(_chapterRoutine);
        }

        _mangaRequest?.Abort();
        var url = _titleId.text.Trim();

        if (string.IsNullOrEmpty(url) || !Uri.TryCreate(url, UriKind.Absolute, out var uri) || !uri.Host.Contains("mangadex") || uri.Segments.Length < 3)
        {
            return;
        }

        var title = uri.Segments[2].Trim('/');

        if (string.IsNullOrEmpty(title))
        {
            return;
        }

        _currentManga = null;
        _chapters.Clear();
        _chapter.ClearOptions();

        foreach (Transform child in _list)
        {
            Destroy(child.gameObject);
        }

        var titleId = long.Parse(title);

        _mangaRequest = UnityWebRequest.Get(API_MANGA + titleId);
        _mangaRequest.SendWebRequest().completed += _ =>
        {
            if (_mangaRequest.isHttpError || _mangaRequest.isNetworkError)
            {
                Debug.LogError($"Error while trying to get Manga info ERROR: {_mangaRequest.error}");
                return;
            }

            var options  = new List <string>();
            var response = MangaResponse.FromJson(_mangaRequest.downloadHandler.text);
            foreach (var chapter in response.Chapters)
            {
                if (chapter.Value.LangCode == "gb")
                {
                    var chapterName = $"Vol. {chapter.Value.Volume} Ch. {chapter.Value.ChapterNo}";
                    if (string.IsNullOrEmpty(chapter.Value.ChapterNo))
                    {
                        chapterName = "Oneshot";
                    }
                    else if (!string.IsNullOrEmpty(chapter.Value.Title))
                    {
                        chapterName += $" - {chapter.Value.Title}";
                    }

                    _chapters[chapterName] = chapter.Key;
                    options.Add(chapterName);
                }
            }

            _chapter.AddOptions(options.Select(x =>
            {
                var split = x.Split(' ');
                return(new { str = x, split = split.Length >= 4 ? split : new string[4] });
            })
                                .OrderBy(x => float.Parse("0" + x.split[3]))
                                .Select(x => x.str)
                                .ToList());

            _currentManga = response;

            SetChapterNo(PlayerPrefs.GetInt(_currentManga.Manga.Title, 0));

            // Load the chapters
            _chapterRoutine = StartCoroutine(LoadMangaChapter());
        };
    }