Example #1
0
        /// <summary>
        /// NavigateTo means navigate to a spot in the book. Will also do a navigation with User...
        /// </summary>
        /// <param name="sourceId"></param>
        /// <param name="location"></param>
        public void NavigateTo(NavigateControlId sourceId, BookLocation location)
        {
            var bookdb = BookDataContext.Get();

            if (Logger.LogExtraTiming)
            {
                Logger.Log($"MainEpubReader: Navigation: to {location}");
            }
            // Save the fact that we navigated to here. Only the main reader saves this information
            var navigationData = CommonQueries.BookNavigationDataFind(bookdb, BookData.BookId);

            if (navigationData == null)
            {
                navigationData = new BookNavigationData()
                {
                    BookId = BookData.BookId, CurrStatus = BookNavigationData.UserStatus.Reading
                };
                CommonQueries.BookNavigationDataAdd(bookdb, navigationData, CommonQueries.ExistHandling.IfNotExists);
            }
            navigationData.CurrSpot   = location.Location;
            navigationData.CurrStatus = BookNavigationData.UserStatus.Reading; // If I'm navigating then I'm reading?


            // And now actually navigate. There are two types of navigation: navigation
            // via tags and navigation by percent.
            // Both need to be handled.
            var percent = location.HtmlPercent;

            if (percent >= 0.0)
            {
                if (Logger.LogExtraTiming)
                {
                    Logger.Log($"MainEpubReader: Navigation: to percent");
                }
                NavigateToPercent(location);
            }
            else
            {
                if (Logger.LogExtraTiming)
                {
                    Logger.Log($"MainEpubReader: Navigation: via location, not percent ({location})");
                }
                NavigateToLocation(location);
            }
        }
Example #2
0
        private BookNavigationData EnsureBookNavigationData(BookDataContext bookdb)
        {
            var nd = CommonQueries.BookNavigationDataFind(bookdb, BookData.BookId);

            if (nd == null)
            {
                nd = new BookNavigationData()
                {
                    BookId   = BookData.BookId,
                    CurrSpot = GetCurrBookLocation().ToJson()
                };
                CommonQueries.BookNavigationDataAdd(bookdb, nd, CommonQueries.ExistHandling.IfNotExists);
                nd = CommonQueries.BookNavigationDataFind(bookdb, BookData.BookId);
            }
            if (nd == null)
            {
                App.Error($"ERROR: trying to ensure navigation data, but don't have one.");
            }
            return(nd);
        }
Example #3
0
        /// <summary>
        /// Called externally in order to display a book; will use the BookNavigationData to move
        /// to the previous spot.
        /// </summary>
        /// <param name="bookId"></param>
        /// <returns></returns>
        public async Task DisplayBook(BookData bookData, BookLocation location = null)
        {
            // Reset all of the position values.
            CurrHtml           = "";
            CurrHtmlIndex      = -1;
            CurrHtmlFileName   = null;
            CurrScrollPosition = double.NaN;
            CurrSelectPosition = double.NaN;

            BookData = bookData;
            var bookdb = BookDataContext.Get();
            var dd     = bookData.DownloadData ?? CommonQueries.DownloadedBookFind(bookdb, BookData.BookId);
            var nav    = bookData.NavigationData ?? CommonQueries.BookNavigationDataFind(bookdb, BookData.BookId);

            if (location == null && !string.IsNullOrEmpty(nav?.CurrSpot))
            {
                location = BookLocation.FromJson(nav.CurrSpot);
            }
            SetReviewSymbol();

            if (dd == null)
            {
                return;
            }
            var fullpath = dd.FullFilePath;

            if (fullpath.Contains(@"\source\repos\SimpleEpubReader\SimpleEpubReader\bin\x64\Debug\AppX\Assets\PreinstalledBooks"))
            {
                // Whoops. The initial database might incorrectly have a developer path hard-coded.
                // Replace with correct location.
                var installationFolder = FolderMethods.InstallationFolder;
                fullpath = $"{installationFolder}\\Assets\\PreinstalledBooks\\{dd.FileName}";
            }
            else if (fullpath.StartsWith("PreinstalledBooks:"))
            {
                // Preinstalled books are in a sort of relative path. It's designed to be an invalid
                // (or at least incredibly rare) directory.
                var installationFolder = FolderMethods.InstallationFolder;
                fullpath = $"{installationFolder}\\Assets\\PreinstalledBooks\\{dd.FileName}";
            }
            var openResult = await OpenFile(fullpath, location);

            switch (openResult)
            {
            case OpenResult.OK:
                // Set up the uiAllUpPosition
                var sectionSizes = new List <double>();
                foreach (var file in EpubBook.ResourcesHtmlOrdered)
                {
                    sectionSizes.Add(file.Content.Length);
                }
                uiAllUpPosition.SetSectionSizes(sectionSizes);
                // No need to set to zero; it's already set in the OpenFile!. uiAllUpPosition.UpdatePosition(0, 0); // set to zero!

                ApplicationView appView = ApplicationView.GetForCurrentView();
                appView.Title = bookData.Title.Replace("\n", " -- ");     // title is multi-line
                break;

            case OpenResult.RedownloadableError:                     // An error. Mark the book as not downloaded + redownload
                dd.CurrFileStatus = DownloadData.FileStatus.Unknown; // deleted? gone? corrupt? we really don't know.
                CommonQueries.BookSaveChanges(bookdb);
                await BookSearch.DoSwipeDownloadOrReadAsync(BookData);

                break;

            default:                                                 // An error. Mark the book as not downloaded
                dd.CurrFileStatus = DownloadData.FileStatus.Unknown; // deleted? gone? corrupt? we really don't know.
                CommonQueries.BookSaveChanges(bookdb);
                break;
            }
        }