예제 #1
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());
        };
    }