public static void Update(this MangaCacheObject current, MangaCacheObject update) { if (!Equals(update, null)) { // Update BookmarkObject if (!Equals(update.BookmarkObject, null)) { current.BookmarkObject = update.BookmarkObject; } // Update MangaObject if (!Equals(update.MangaObject, null)) { current.MangaObject = update.MangaObject; } // Update CoverImage if (!Equals(update.CoverImage, null)) { current.CoverImage = update.CoverImage.Clone(); } } }
private static void OnCacheObjectChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { MangaCacheObject control = source as MangaCacheObject; if (!Equals(control.MangaObject, null)) { // MangaObject exists // Use the first ChapterObject or null for the ResumeChapterObject ChapterObject ResumeChapterObject = control.MangaObject.Chapters.FirstOrDefault(); if (!Equals(control.BookmarkObject, null)) { // BookmarkObject exists control.IsNewManga = false; // A BookmarkObject exists, lookup the ResumeChapterObject ResumeChapterObject = control.MangaObject.ChapterObjectOfBookmarkObject(control.BookmarkObject); Double ChapterProgressMaxValue = control.MangaObject.Chapters.Count, ChapterProgressValue = control.MangaObject.IndexOfChapterObject(ResumeChapterObject), ChapterProgressStep = 1 / ChapterProgressMaxValue, ChapterProgress = ChapterProgressValue / ChapterProgressMaxValue, ChapterSubProgress = 1; if (control.BookmarkObject.LastPage > 0) { ChapterSubProgress = (Double)control.BookmarkObject.Page / (Double)control.BookmarkObject.LastPage; } // Calculate and round the readers progress for chapters control.ChapterProgress = (Int32)Math.Round((ChapterProgress + (ChapterSubProgress * ChapterProgressStep)) * 100); ChapterObject LastChapterObject = control.MangaObject.Chapters.LastOrDefault(); if (!Equals(LastChapterObject, null)) { // If there is a ChapterObject to resume, check to see if there are more chapters/pages to read. control.HasMoreToRead = false; if (!control.HasMoreToRead) { control.HasMoreToRead = control.BookmarkObject.Volume < LastChapterObject.Volume; } if (!control.HasMoreToRead) { control.HasMoreToRead = control.BookmarkObject.Chapter < LastChapterObject.Chapter; } if (!control.HasMoreToRead) { control.HasMoreToRead = control.BookmarkObject.SubChapter < LastChapterObject.SubChapter; } if (!control.HasMoreToRead) { control.HasMoreToRead = control.BookmarkObject.Page < control.BookmarkObject.LastPage; } } } else { control.IsNewManga = true; control.ChapterProgress = 0; control.HasMoreToRead = !Equals(ResumeChapterObject, null); } // Store boolean for if the ResumeChapterObject is null Boolean ResumeChapterIsNull = Equals(ResumeChapterObject, null); String MangaObjectChaptersDirectory = System.IO.Path.Combine(control.App.CORE.CHAPTER_ARCHIVE_DIRECTORY, control.MangaObject.MangaFileName()); control.ChapterCacheObjects = new List <ChapterCacheObject>( from ChapterObject in control.MangaObject.Chapters select new ChapterCacheObject(control.MangaObject, ChapterObject) { // If ResumeChapterIsNull is true, there is no ResumeChapter IsResumeChapter = ResumeChapterIsNull ? false : Equals(ChapterObject, ResumeChapterObject), // Store if the ChapterObject archive exists locally IsLocal = ChapterObject.IsLocal( MangaObjectChaptersDirectory, control.App.CORE.CHAPTER_ARCHIVE_EXTENSION) }); } else { control.IsNewManga = false; control.HasMoreToRead = false; control.ChapterProgress = 0; } }