コード例 #1
0
ファイル: ReadingActivity.cs プロジェクト: amocsari/HBRClient
        private async void LoadNextChapter()
        {
            if (currentChapterIndex == null)
            {
                return;
            }
            ChapterNavigationItem nextChapter = null;

            try
            {
                var currentMainChapter = chapterList[currentChapterIndex ?? 0];
                nextChapter = currentMainChapter.SubChapters.ElementAtOrDefault((currentChapterIndex ?? 0) + 1);

                if (nextChapter == null)
                {
                    var nextMainChapter = chapterList.ElementAtOrDefault((currentChapterIndex ?? 0) + 1);

                    nextChapter = nextMainChapter?.SubChapters?.FirstOrDefault();

                    if (nextChapter == null)
                    {
                        nextChapter = nextMainChapter;
                    }
                }
            }
            catch { }

            if (nextChapter != null)
            {
                await LoadChapterAsync(nextChapter, true);
            }
        }
コード例 #2
0
        private static List <ChapterNavigationItem> FindChapterList(XElement root)
        {
            var elements    = root.Elements().Where(d => d.Name.LocalName == "navPoint");
            var chapterList = new List <ChapterNavigationItem>();

            foreach (var element in elements)
            {
                var chapterElements = element.Elements();

                var chapterElement = chapterElements.FirstOrDefault(d => d.Name.LocalName == "navLabel");
                var chapterTitle   = chapterElement.Elements().FirstOrDefault(d => d.Name.LocalName == "text")?.Value;

                var chapterSrcElement = chapterElements.FirstOrDefault(d => d.Name.LocalName == "content");
                var chapterSrc        = chapterSrcElement.Attributes().FirstOrDefault(a => a.Name == "src")?.Value;

                var chapter = new ChapterNavigationItem
                {
                    Text        = chapterTitle,
                    Src         = chapterSrc,
                    SubChapters = FindChapterList(element)
                };

                chapterList.Add(chapter);
            }

            return(chapterList);
        }
コード例 #3
0
ファイル: ReadingActivity.cs プロジェクト: amocsari/HBRClient
        private async Task LoadChapterAsync(ChapterNavigationItem chapter, bool forceReload = false)
        {
            var link   = chapter.Src.Split("#");
            var src    = link[0];
            var anchor = link.Length > 1 ? link[1] : string.Empty;

            if (loadedSrc != src || forceReload)
            {
                var url = book.GetChapterUrl(src);
                webView.LoadUrl(url);

                loadedSrc = src;
            }

            if (!string.IsNullOrEmpty(anchor))
            {
                webView.ScrollToAnchor(anchor);
            }
            else
            {
                webView.ScrollToTop();
            }

            var chapterIndex = chapterList.IndexOf(chapter);

            if (chapterIndex >= 0)
            {
                currentChapterIndex    = chapterIndex;
                currentSubChapterIndex = null;
            }
            else
            {
                var mainChapter = chapterList.FirstOrDefault(c => c.SubChapters != null && c.SubChapters.Contains(chapter));
                if (mainChapter == null)
                {
                    return;
                }

                currentChapterIndex    = chapterList.IndexOf(mainChapter);
                currentSubChapterIndex = mainChapter.SubChapters.IndexOf(chapter);
            }
        }