public override UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath) { var cell = (PageCell)collectionView.DequeueReusableCell(cellID, indexPath); var page = list[indexPath.Row]; if (page != null) { cell.PageID = page.ID; if (page.ID != StringRef.Empty || page.ChapterID != StringRef.Empty) { String url = DownloadedFilesCache.BuildCachedFilePath(page.URL); if (!String.IsNullOrEmpty(url)) { CGPDFDocument pdfDoc = CGPDFDocument.FromFile(url); if (pdfDoc != null) { CGPDFPage pdfPage = pdfDoc.GetPage(1); UIImage image = ImageHelper.PDF2Image(pdfPage, 150, UIScreen.MainScreen.Scale); // THIS IS REQUIRED TO SKIP iCLOUD BACKUP SkipBackup2iCloud.SetAttribute(url); if (image != null) { cell.Image = image; } } } } } return cell; }
public static void RemoveBookInCache(Book book) { // Remove page images from the file system List <Page> pageList = BooksOnDeviceAccessor.GetPages(book.ID); if (pageList != null) { foreach (Page page in pageList) { DownloadedFilesCache.RemoveFile(page.URL); } } // Remove chapter images from the file system List <Chapter> chapterList = BooksOnDeviceAccessor.GetChapters(book.ID); if (chapterList != null) { foreach (Chapter chapter in chapterList) { DownloadedFilesCache.RemoveFile(chapter.SmallImageURL); DownloadedFilesCache.RemoveFile(chapter.LargeImageURL); } } // Remove book images from the file system DownloadedFilesCache.RemoveFile(book.SmallImageURL); DownloadedFilesCache.RemoveFile(book.LargeImageURL); }
public void RedownloadFailedURLs() { if (BookUpdater.CurrentBook != null && BookUpdater.CurrentBook.FailedURLs != null) { ASINetworkQueue networkQueue = new ASINetworkQueue(); networkQueue.Reset(); networkQueue.ShowAccurateProgress = false; networkQueue.ShouldCancelAllRequestsOnFailure = false; networkQueue.Delegate = this; networkQueue.RequestDidFail = new Selector("requestDidFail:"); networkQueue.RequestDidFinish = new Selector("requestDidFinish:"); networkQueue.QueueDidFinish = new Selector("queueDidFinish:"); ASIHTTPRequest request = null; foreach (String url in BookUpdater.CurrentBook.FailedURLs) { DownloadedFilesCache.RemoveFile(url); request = new ASIHTTPRequest(NSUrl.FromString(url)); request.DownloadDestinationPath = DownloadedFilesCache.BuildCachedFilePath(url); request.Username = Settings.UserID; request.Password = KeychainAccessor.Password; request.Domain = Settings.Domain; networkQueue.AddOperation(request); } // Clear failedUrls before starting to re-download BookUpdater.CurrentBook.FailedURLs.Clear(); networkQueue.Go(); } }
private static List <Chapter> DownloadChaptersWork(String bookID, List <String> fileUrlsToDownload) { // If chapters are not downloaded yet or expired, download them again List <Chapter> chapterList = null; if (!BooksOnServerAccessor.HasChapters(bookID) || CurrentBook.Status == Book.BookStatus.UPDATING) { chapterList = eBriefingService.StartDownloadChapters(bookID); if (chapterList != null) { BooksOnServerAccessor.SaveChapters(bookID, chapterList); } } else { // Or get them from the cache chapterList = BooksOnServerAccessor.GetChapters(bookID); } // Queue up cover images for the chapter only if the image version is different if (chapterList != null) { foreach (Chapter serverCh in chapterList) { // Remove cover image if this is an update bool download = false; if (CurrentBook.Status == Book.BookStatus.UPDATING) { Chapter deviceCh = BooksOnDeviceAccessor.GetChapter(CurrentBook.ID, serverCh.ID); if (deviceCh == null) { download = true; } else if (serverCh.ImageVersion != deviceCh.ImageVersion) { DownloadedFilesCache.RemoveFile(deviceCh.LargeImageURL); DownloadedFilesCache.RemoveFile(deviceCh.SmallImageURL); download = true; } } else { download = true; } if (download) { fileUrlsToDownload.Add(serverCh.LargeImageURL); fileUrlsToDownload.Add(serverCh.SmallImageURL); } } } return(chapterList); }
//to remove page that not being use anymore in device. private static void RemovePages(List <Page> serverPageList, List <Page> devicePageList) { foreach (Page devicePage in devicePageList) { var item = serverPageList.Where(i => i.ID == devicePage.ID).FirstOrDefault(); if (item == null) { DownloadedFilesCache.RemoveFile(devicePage.URL); } } }
public static void RemoveBookFromDevice(Book book) { if (book != null) { if (book.Status == Book.BookStatus.DOWNLOADING || book.Status == Book.BookStatus.PENDING2DOWNLOAD) { if (book.Status == Book.BookStatus.DOWNLOADING) { // Remove page images from the file system List <Page> pageList = BooksOnServerAccessor.GetPages(book.ID); if (pageList != null) { foreach (Page page in pageList) { DownloadedFilesCache.RemoveFile(page.URL); } } BooksOnServerAccessor.RemovePages(book.ID); // Remove chapter images from the file system List <Chapter> chapterList = BooksOnServerAccessor.GetChapters(book.ID); if (chapterList != null) { foreach (Chapter chapter in chapterList) { DownloadedFilesCache.RemoveFile(chapter.SmallImageURL); DownloadedFilesCache.RemoveFile(chapter.LargeImageURL); } } BooksOnServerAccessor.RemoveChapters(book.ID); } // Remove book images from the file system DownloadedFilesCache.RemoveFile(book.SmallImageURL); DownloadedFilesCache.RemoveFile(book.LargeImageURL); BooksOnDeviceAccessor.RemoveBook(book.ID); // Initialize CurrentBook InitializeFailedURLs(); } else if (book.Status == Book.BookStatus.PENDING2UPDATE || book.Status == Book.BookStatus.UPDATING) { RemoveBookFromBooks2Update(book.ID); BooksOnServerAccessor.RemovePages(book.ID); BooksOnServerAccessor.RemoveChapters(book.ID); } } }
public void UpdateImage(String url) { if (imageSpinner != null) { imageSpinner.StopAnimating(); } String localPath = DownloadedFilesCache.BuildCachedFilePath(url); UIImage image = UIImage.FromFile(localPath); if (image != null) { imageView.Image = image; } }
private static void DownloadPDFsWork(String bookID, List <String> urlList) { if (urlList.Count > 0) { networkQueue.Reset(); networkQueue.ShowAccurateProgress = false; networkQueue.ShouldCancelAllRequestsOnFailure = false; networkQueue.Delegate = ParentViewController; networkQueue.RequestDidFail = new Selector("requestDidFail:"); networkQueue.RequestDidFinish = new Selector("requestDidFinish:"); networkQueue.QueueDidFinish = new Selector("queueDidFinish:"); ASIHTTPRequest request = null; foreach (String url in urlList) { // Remove page if this is an update if (CurrentBook.Status == Book.BookStatus.UPDATING) { DownloadedFilesCache.RemoveFile(url); } request = new ASIHTTPRequest(NSUrl.FromString(url)); request.DownloadDestinationPath = DownloadedFilesCache.BuildCachedFilePath(url); request.Username = Settings.UserID; request.Password = KeychainAccessor.Password; request.Domain = Settings.Domain; networkQueue.AddOperation(request); } // Clear failedUrls before starting to re-download InitializeFailedURLs(); networkQueue.Go(); } else { // Finished downloading if (DownloadFinishEvent != null) { DownloadFinishEvent(bookID); } } }
public static bool Download(String url, UIViewController controller, bool forceDownload = false) { bool exist = false; if (!String.IsNullOrEmpty(url) && url.Contains("http")) { try { String localPath = DownloadedFilesCache.BuildCachedFilePath(url); if (File.Exists(localPath) && !forceDownload) { exist = true; } else { if (Reachability.IsDefaultNetworkAvailable()) { BackgroundWorker downloadWorker = new BackgroundWorker(); downloadWorker.DoWork += delegate { ASIHTTPRequest request = new ASIHTTPRequest(NSUrl.FromString(url)); request.Username = Settings.UserID; request.Password = KeychainAccessor.Password; request.Domain = Settings.Domain; request.Delegate = controller; request.DidFinishSelector = new Selector("requestFinish:"); request.DownloadDestinationPath = DownloadedFilesCache.BuildCachedFilePath(url); request.StartAsynchronous(); }; downloadWorker.RunWorkerAsync(); } } } catch (Exception ex) { Logger.WriteLineDebugging("FileDownloader - Download: {0}", ex.ToString()); } } return(exist); }
private PSPDFDocument GenerateDocument() { try { // Build local pdf file path array List <Page> pageList = BooksOnDeviceAccessor.GetPages(book.ID); if (pageList != null && pageList.Count > 0) { List <String> urlList = new List <String>(); foreach (Page page in pageList) { urlList.Add(DownloadedFilesCache.BuildCachedFilePath(page.URL)); } // Generate NSData array for each pdf file List <NSData> dataList = new List <NSData>(); foreach (String url in urlList) { NSData data = NSData.FromFile(url); dataList.Add(data); } // Generate PSPDFDocument from NSData array if (dataList.Count > 0) { PSPDFDocument document = PSPDFDocument.FromData(dataList.ToArray()); if (document != null) { document.Title = book.Title; return(document); } } } } catch (Exception ex) { Logger.WriteLineDebugging("DashboardViewController - GenerateDocument: {0}", ex.ToString()); } return(null); }
public static void RemoveBook(Book book) { // Remove page images from the file system List <Page> pageList = BooksOnDeviceAccessor.GetPages(book.ID); if (pageList != null) { foreach (Page page in pageList) { BooksOnDeviceAccessor.RemoveBookmark(book.ID, page.ID); BooksOnDeviceAccessor.RemoveAllNotesForThisPage(book.ID, page.ID); BooksOnDeviceAccessor.RemoveAnnotation(book.ID, page.ID); DownloadedFilesCache.RemoveFile(page.URL); } } BooksOnServerAccessor.RemovePages(book.ID); BooksOnDeviceAccessor.RemovePages(book.ID); // Remove chapter images from the file system List <Chapter> chapterList = BooksOnDeviceAccessor.GetChapters(book.ID); if (chapterList != null) { foreach (Chapter chapter in chapterList) { DownloadedFilesCache.RemoveFile(chapter.SmallImageURL); DownloadedFilesCache.RemoveFile(chapter.LargeImageURL); } } BooksOnServerAccessor.RemoveChapters(book.ID); BooksOnDeviceAccessor.RemoveChapters(book.ID); // Remove book images from the file system DownloadedFilesCache.RemoveFile(book.SmallImageURL); DownloadedFilesCache.RemoveFile(book.LargeImageURL); BooksOnDeviceAccessor.RemoveBook(book.ID); }
public PopoverSearchResultView(Book book, CGRect frame) : base(frame) { this.BackgroundColor = UIColor.Clear; // imageView UIImageView imageView = new UIImageView(new CGRect(10, 10, 80, 80)); imageView.ContentMode = UIViewContentMode.ScaleAspectFit; this.AddSubview(imageView); String localImagePath = DownloadedFilesCache.BuildCachedFilePath(book.LargeImageURL); if (File.Exists(localImagePath)) { imageView.Image = UIImage.FromFile(localImagePath); } TitleDescriptionView tdView = new TitleDescriptionView(book.Title, book.Description, frame.Width - (imageView.Frame.Width + 30)); tdView.Frame = new CGRect(imageView.Frame.Right + 10, frame.Height / 2 - tdView.Frame.Height / 2, tdView.Frame.Width, tdView.TotalHeight); this.AddSubview(tdView); }
public ChapterView(String bookID, Chapter chapter, int index) : base(new CGRect(0, 0, 220, 388.33f)) { this.BookChapter = chapter; this.BackgroundColor = UIColor.White; this.Layer.ShadowColor = UIColor.Black.CGColor; this.Layer.ShadowOpacity = 0.3f; this.Layer.ShadowRadius = 2f; this.Layer.ShadowOffset = new CGSize(5f, 5f); // imageView UIImageView imageView = new UIImageView(); imageView.Frame = new CGRect(0, 0, this.Frame.Width, 293.33f); String localImagePath = DownloadedFilesCache.BuildCachedFilePath(BookChapter.LargeImageURL); imageView.Image = UIImage.FromFile(localImagePath); imageView.ContentMode = UIViewContentMode.ScaleToFill; this.AddSubview(imageView); // chapterLabel UILabel chapterLabel = eBriefingAppearance.GenerateLabel(14); chapterLabel.Frame = new CGRect(10, imageView.Frame.Bottom + 8, 200, 21); chapterLabel.Text = "Chapter " + (index + 1).ToString(); this.AddSubview(chapterLabel); // titleLabel UILabel titleLabel = eBriefingAppearance.GenerateLabel(14); titleLabel.Frame = new CGRect(10, chapterLabel.Frame.Bottom + 4, 200, 21); titleLabel.LineBreakMode = UILineBreakMode.TailTruncation; titleLabel.Text = chapter.Title; this.AddSubview(titleLabel); // Add book info layer AddBookInfoView(bookID, chapter); }
private void UpdateImage() { try { String localImagePath = DownloadedFilesCache.BuildCachedFilePath(book.LargeImageURL); if (File.Exists(localImagePath)) { spinner1.StopAnimating(); imageView.Alpha = 0f; imageView.Image = UIImage.FromFile(localImagePath); UIView.Animate(0.3d, delegate { imageView.Alpha = 1f; }); } } catch (Exception ex) { Logger.WriteLineDebugging("BookOverviewController - UpdateImage: {0}", ex.ToString()); } }
private static List <String> RemoveAlreadyDownloadedFiles(List <String> fileUrlsToDownload) { // Set total number of downloads required TotalDownloadCount = fileUrlsToDownload.Count; if (CurrentBook.Status == Book.BookStatus.DOWNLOADING) { List <String> removeList = null; for (int i = 0; i < fileUrlsToDownload.Count; i++) { String localPath = DownloadedFilesCache.BuildCachedFilePath(fileUrlsToDownload[i]); if (File.Exists(localPath)) { if (removeList == null) { removeList = new List <String>(); } removeList.Add(fileUrlsToDownload[i]); } } if (removeList != null) { for (int i = 0; i < removeList.Count; i++) { fileUrlsToDownload.Remove(removeList[i]); } } } // Set total number of already downloaded files CurrentBook.DownloadCount = TotalDownloadCount - fileUrlsToDownload.Count; return(fileUrlsToDownload); }
public NoteCellView(String bookID, Note note) { this.BackgroundColor = UIColor.Clear; this.pageID = pageID; this.note = note; nfloat height = 300; Page page = BooksOnDeviceAccessor.GetPage(bookID, note.PageID); if (note.Text == "Header: " + note.PageID) { this.Frame = new CGRect(0, 0, 200, height); // pageView UIImageView pageView = new UIImageView(); pageView.Frame = new CGRect(15, 20, 170, height - 80); this.AddSubview(pageView); bool notFound = true; if (page != null) { String localPath = DownloadedFilesCache.BuildCachedFilePath(page.URL); CGPDFDocument pdfDoc = CGPDFDocument.FromFile(localPath); if (pdfDoc != null) { notFound = false; CGPDFPage pdfPage = pdfDoc.GetPage(1); UIImage pageImage = ImageHelper.PDF2Image(pdfPage, pageView.Frame.Width, UIScreen.MainScreen.Scale); pageView.Image = pageImage; } } if (notFound) { pageView.Image = UIImage.FromBundle("Assets/Icons/empty_page.png"); // emptyLabel UILabel emptyLabel = eBriefingAppearance.GenerateLabel(17); emptyLabel.Frame = pageView.Frame; emptyLabel.Text = "Empty"; emptyLabel.TextAlignment = UITextAlignment.Center; emptyLabel.SizeToFit(); emptyLabel.Center = pageView.Center; this.AddSubview(emptyLabel); } // pageView NotePageView circleView = new NotePageView(page, pageView.Frame.Width / 2); circleView.Center = new CGPoint(pageView.Center.X, pageView.Frame.Bottom); this.AddSubview(circleView); } else if (note.Text == "Footer: " + note.PageID) { this.Frame = new CGRect(0, 0, 50, height); // footerView // UIImageView footerView = new UIImageView(UIImage.FromBundle("Assets/Icons/endPageNote.png")); // footerView.Frame = new CGRect(15, ((height - 40) / 2 - 10), 20, 20); // this.AddSubview(footerView); } else { this.Frame = new CGRect(0, 0, 250, height); // noteView NoteCellNoteView noteView = new NoteCellNoteView(note, height - 80); noteView.Frame = new CGRect(15, 20, noteView.Frame.Width, noteView.Frame.Height); noteView.TouchUpInside += delegate { if (ItemPressedEvent != null) { ItemPressedEvent(page.ID, note); } }; this.AddSubview(noteView); } }
bool GenerateImage(Dictionary <Page, eBriefingMobile.Annotation> dict1, Dictionary <Page, List <eBriefingMobile.Note> > dict2) { try { if (pageList != null) { nuint totalImageSize = 0; List <Note> notes = new List <eBriefingMobile.Note> (); foreach (var page in pageList) { String localPath = DownloadedFilesCache.BuildCachedFilePath(page.URL); var printItemDict = new Dictionary <UIImage, List <Note> >(); if (!String.IsNullOrEmpty(localPath)) { CGPDFDocument pdfDoc = CGPDFDocument.FromFile(localPath); if (pdfDoc != null) { CGPDFPage pdfPage = pdfDoc.GetPage(1); if (pdfPage != null) { CGRect pageRect = pdfPage.GetBoxRect(CGPDFBox.Media); UIImage pdfImg = ImageHelper.PDF2Image(pdfPage, pageRect.Width, scale); // Add annotation if option selected if (dict1.ContainsKey(page)) { Annotation annotation = dict1 [page]; if (annotation != null) { Dictionary <String, PSPDFInkAnnotation> coordinateDict = AnnotationsDataAccessor.GenerateAnnDictionary((UInt32)page.PageNumber - 1, annotation); if (coordinateDict != null) { foreach (KeyValuePair <String, PSPDFInkAnnotation> item in coordinateDict) { // Create full size annotation UIImage annImg = ImageHelper.DrawPSPDFAnnotation(item.Key, item.Value); if (annImg != null) { // Scale down the annotation image annImg = annImg.Scale(new CGSize(pdfImg.Size.Width, pdfImg.Size.Height)); // Overlap pdfImg and annImg pdfImg = ImageHelper.Overlap(pdfImg, annImg, CGPoint.Empty, CGPoint.Empty, scale); } } } } } // Create image from text bool printNote = false; UIImage noteImg = null; if (dict2.ContainsKey(page) && dict2 [page] != null) { printNote = true; notes = dict2 [page]; // Create image from text //noteImg = ImageHelper.Text2Image(_notesText, pdfImg.Size); } else { notes = null; } // Scale down and add to canvas // Used 900 and 1200 because couldn't control the paper margin // if (Orientation == ORIENTATION.PORTRAIT) // { // //if (printNote) // { // //pdfImg = ImageHelper.Scale(pdfImg, 500); // //pdfImg=ImageHelper.MaxResizeImage(pdfImg,1000,scale); // //pdfImg = ImageHelper.Add2Canvas(pdfImg, new CGPoint(0, (1024 / 2) - (pdfImg.Size.Height / 2)), scale); // // // Overlap pdfImg and noteImg // //pdfImg = ImageHelper.Overlap(pdfImg, noteImg, CGPoint.Empty, new CGPoint(500, 0), scale); // } // //else // { // //pdfImg=ImageHelper.MaxResizeImage(pdfImg,1000,scale); // //pdfImg = ImageHelper.Scale(pdfImg, 900); // //pdfImg = ImageHelper.Add2Canvas(pdfImg, new CGPoint((768 / 2) - (pdfImg.Size.Width / 2), (1024 / 2) - (pdfImg.Size.Height / 2)), scale); // } // } // else // { // //if (printNote) // { // //pdfImg=ImageHelper.MaxResizeImage(pdfImg,500,scale); // //pdfImg = ImageHelper.Scale(pdfImg, 500); // // pdfImg = ImageHelper.Add2Canvas(pdfImg, new CGPoint(0,0), scale*2, UIInterfaceOrientation.LandscapeLeft); // // Overlap pdfImg and noteImg // //pdfImg = ImageHelper.Overlap(pdfImg, noteImg, CGPoint.Empty, new CGPoint(756, 0), scale); // } // //else // { // //pdfImg=ImageHelper.MaxResizeImage(pdfImg,1000,scale); // //pdfImg = ImageHelper.Scale(pdfImg, 500); // ///pdfImg = ImageHelper.Add2Canvas(pdfImg, new CGPoint((1024 / 2) - (pdfImg.Size.Width / 2), (768 / 2) - (pdfImg.Size.Height / 2)), scale*2, UIInterfaceOrientation.LandscapeLeft); // } // // // Rotate canvas // //pdfImg = ImageHelper.Rotate(pdfImg); // } // Save // if (printItems == null) // { // printItems = new List<UIImage>(); // } // printItems.Add(pdfImg); if (dict == null) { dict = new Dictionary <int, Dictionary <UIImage, List <Note> > > (); } if (pdfImg != null) { printItemDict.Add(pdfImg, notes); dict.Add(page.PageNumber, printItemDict); var pngImage = pdfImg.AsPNG(); totalImageSize = pngImage.Length + totalImageSize; Console.WriteLine("Img : " + totalImageSize.ToString()); //image dispose pdfImg = null; if (CheckReachMemoryLimit(totalImageSize)) { PagesNum = dict.Count - 1; dict.Clear(); dict = null; return(false); } } } } } } PagesNum = dict.Count; return(true); } return(false); } catch (Exception ex) { return(false); } }
public static void Start() { if (Books2Download != null && Books2Download.Count > 0) { try { // Check to see if there is any book that was downloading or updating in progress. // If there is, then resume downloading and do not sort bool sortRequired = true; foreach (Book book in Books2Download) { if (book.Status == Book.BookStatus.DOWNLOADING || book.Status == Book.BookStatus.UPDATING) { sortRequired = false; } } if (sortRequired) { SortBooks(); } InProgress = true; CurrentBook = Books2Download[0]; if (CurrentBook.Status == Book.BookStatus.PENDING2UPDATE) { CurrentBook.Status = Book.BookStatus.UPDATING; } else if (CurrentBook.Status == Book.BookStatus.PENDING2DOWNLOAD) { CurrentBook.Status = Book.BookStatus.DOWNLOADING; } BackgroundWorker downloadWorker = new BackgroundWorker(); downloadWorker.WorkerSupportsCancellation = true; downloadWorker.DoWork += async delegate { // Get my stuff for this book if (CurrentBook.Status == Book.BookStatus.DOWNLOADING) { if (!CloudSync.SyncingInProgress) { await eBriefingService.Run(() => CloudSync.PullMyStuffs(CurrentBook)); } } List <String> fileUrlsToDownload = new List <String>(); // Notify UI the start of the downloading ParentViewController.InvokeOnMainThread(delegate { if (DownloadStartEvent != null) { DownloadStartEvent(CurrentBook.ID); } }); // Queue up cover images for the book only if the image version is different if (CurrentBook.Status == Book.BookStatus.UPDATING) { Book deviceBook = BooksOnDeviceAccessor.GetBook(CurrentBook.ID); if (deviceBook != null && (deviceBook.ImageVersion != CurrentBook.ImageVersion)) { DownloadedFilesCache.RemoveFile(deviceBook.LargeImageURL); DownloadedFilesCache.RemoveFile(deviceBook.SmallImageURL); fileUrlsToDownload.Add(CurrentBook.LargeImageURL); fileUrlsToDownload.Add(CurrentBook.SmallImageURL); } } // Download chapters await eBriefingService.Run(() => DownloadChaptersWork(CurrentBook.ID, fileUrlsToDownload)); // Download pages List <Page> pageList = await eBriefingService.Run(() => DownloadPagesWork(CurrentBook.ID)); if (pageList != null) { List <Page> differentPageList = Pages2Download(CurrentBook.ID, pageList); foreach (Page page in differentPageList) { fileUrlsToDownload.Add(page.URL); } } // Filter out those files that are already downloaded (Only if the status is DOWNLOADING, not UPDATING) // CoreServices 2.0 will check for updates too since we can check for version number for each file fileUrlsToDownload = RemoveAlreadyDownloadedFiles(fileUrlsToDownload); // Download Start if (fileUrlsToDownload.Count == 0) { QueueDidFinish(null); } else { DownloadPDFsWork(CurrentBook.ID, fileUrlsToDownload); } }; downloadWorker.RunWorkerAsync(); } catch (Exception ex) { Logger.WriteLineDebugging("BookUpdater - Start: {0}", ex.ToString()); } } }
public BookshelfBookView(Book book, bool updateMenu, BookshelfViewController parentVC) : base(new CGRect(0, 0, 280, 280)) { this.BookshelfBook = book; this.updateMenu = updateMenu; this.BackgroundColor = UIColor.White; this.Layer.ShadowColor = UIColor.Black.CGColor; this.Layer.ShadowOpacity = 0.3f; this.Layer.ShadowRadius = 2f; this.Layer.ShadowOffset = new CGSize(5f, 5f); // imageView imageView = new UIImageView(); imageView.Frame = new CGRect(0, 0, this.Frame.Width, 150); this.AddSubview(imageView); // recognizer this.AddGestureRecognizer(new UILongPressGestureRecognizer(this, new Selector("HandleLongPress:"))); if (!String.IsNullOrEmpty(BookshelfBook.LargeImageURL)) { // imageSpinner imageSpinner = eBriefingAppearance.GenerateBounceSpinner(); imageSpinner.Center = imageView.Center; this.AddSubview(imageSpinner); // Download image bool exist = FileDownloader.Download(BookshelfBook.LargeImageURL, parentVC); if (exist) { bool outDated = false; var item = BooksOnDeviceAccessor.GetBook(BookshelfBook.ID); if (item != null) { if (item.ImageVersion < BookshelfBook.ImageVersion) { DownloadedFilesCache.RemoveFile(item.LargeImageURL); DownloadedFilesCache.RemoveFile(item.SmallImageURL); outDated = true; } } if (outDated) { FileDownloader.Download(BookshelfBook.LargeImageURL, parentVC, true); } else { UpdateImage(BookshelfBook.LargeImageURL); } } } // favoriteView if (BooksDataAccessor.IsFavorite(book.ID)) { AddFavorite(); } if (book.New) { AddRibbon(); } // titleLabel titleLabel = eBriefingAppearance.GenerateLabel(16); titleLabel.Frame = new CGRect(10, imageView.Frame.Bottom + 8, 260, 21); titleLabel.Lines = 2; titleLabel.LineBreakMode = UILineBreakMode.WordWrap; titleLabel.Text = book.Title; titleLabel.SizeToFit(); titleLabel.Frame = new CGRect(10, titleLabel.Frame.Y, 260, titleLabel.Frame.Height); this.AddSubview(titleLabel); UpdateUI(); }
public DashboardView(Book book, CGRect frame) : base(frame) { this.book = book; this.BackgroundColor = UIColor.White; // overview UILabel overview = eBriefingAppearance.GenerateLabel(21); overview.Frame = new CGRect(20, 20, frame.Width - 40, 21); overview.Text = "Overview"; this.AddSubview(overview); // imageView UIImageView imageView = new UIImageView(); imageView.Frame = new CGRect(overview.Frame.X, overview.Frame.Bottom + 16, overview.Frame.Width, 150); String localImagePath = DownloadedFilesCache.BuildCachedFilePath(book.LargeImageURL); if (File.Exists(localImagePath)) { imageView.Image = UIImage.FromFile(localImagePath); } this.AddSubview(imageView); // bookInfoView bookInfoView = new BookInfoView("0", "0", "0", book.PageCount.ToString(), false, false, frame.Width - 60); bookInfoView.Frame = new CGRect(30, imageView.Frame.Bottom + 8, bookInfoView.Frame.Width, bookInfoView.Frame.Height); this.AddSubview(bookInfoView); // line0 UIView line0 = new UIView(); line0.BackgroundColor = eBriefingAppearance.Gray4; line0.Frame = new CGRect(overview.Frame.X, bookInfoView.Frame.Bottom + 10, overview.Frame.Width, 1); this.AddSubview(line0); // descLabel UILabel descLabel = GenerateLabel("Description", true); descLabel.Frame = new CGRect(overview.Frame.X, line0.Frame.Bottom + 10, overview.Frame.Width, 21); this.AddSubview(descLabel); // desc UILabel desc = GenerateLabel(book.Description, false); desc.Frame = new CGRect(overview.Frame.X, descLabel.Frame.Bottom + 8, overview.Frame.Width, 1); desc.Lines = 0; desc.SizeToFit(); this.AddSubview(desc); // line1 UIView line1 = new UIView(); line1.BackgroundColor = eBriefingAppearance.Gray4; line1.Frame = new CGRect(overview.Frame.X, desc.Frame.Bottom + 10, overview.Frame.Width, 1); this.AddSubview(line1); // versionLabel UILabel versionLabel = GenerateLabel("Version", true); versionLabel.Frame = new CGRect(overview.Frame.X, line1.Frame.Bottom + 10, overview.Frame.Width, 21); this.AddSubview(versionLabel); // version UILabel version = GenerateLabel(book.Version.ToString(), false); version.Frame = new CGRect(overview.Frame.X, versionLabel.Frame.Bottom + 8, overview.Frame.Width, 21); this.AddSubview(version); // line2 UIView line2 = new UIView(); line2.BackgroundColor = eBriefingAppearance.Gray4; line2.Frame = new CGRect(overview.Frame.X, version.Frame.Bottom + 10, overview.Frame.Width, 1); this.AddSubview(line2); // createdLabel UILabel createdLabel = GenerateLabel("Date Created", true); createdLabel.Frame = new CGRect(overview.Frame.X, line2.Frame.Bottom + 10, overview.Frame.Width, 21); this.AddSubview(createdLabel); // created UILabel created = GenerateLabel(book.UserAddedDate.ToString("MMMM dd, yyyy"), false); created.Frame = new CGRect(overview.Frame.X, createdLabel.Frame.Bottom + 8, overview.Frame.Width, 21); this.AddSubview(created); // line3 UIView line3 = new UIView(); line3.BackgroundColor = eBriefingAppearance.Gray4; line3.Frame = new CGRect(overview.Frame.X, created.Frame.Bottom + 10, overview.Frame.Width, 1); this.AddSubview(line3); // modifiedLabel UILabel modifiedLabel = GenerateLabel("Date Modified", true); modifiedLabel.Frame = new CGRect(overview.Frame.X, line3.Frame.Bottom + 10, overview.Frame.Width, 21); this.AddSubview(modifiedLabel); // modified UILabel modified = GenerateLabel(book.UserModifiedDate.ToString("MMMM dd, yyyy"), false); modified.Frame = new CGRect(overview.Frame.X, modifiedLabel.Frame.Bottom + 8, overview.Frame.Width, 21); this.AddSubview(modified); // shadow UIImageView shadow = new UIImageView(); shadow.AutoresizingMask = UIViewAutoresizing.FlexibleHeight; shadow.Frame = new CGRect(frame.Right - 3, 0, 3, frame.Height); shadow.Image = UIImage.FromBundle("Assets/Backgrounds/shadow.png").CreateResizableImage(new UIEdgeInsets(2, 0, 2, 0)); this.AddSubview(shadow); this.ContentSize = new CGSize(frame.Width, modified.Frame.Bottom + 20); }
async private void GenerateThumbnail(String bookID, String pageID, String text, bool bookmark = false) { try { // spinner RTSpinKitView spinner = eBriefingAppearance.GenerateBounceSpinner(); spinner.Center = this.Center; this.AddSubview(spinner); // Generate pdf thumbnail Page page = await eBriefingService.Run(() => BooksOnDeviceAccessor.GetPage(bookID, pageID)); Annotation annotation = null; if (String.IsNullOrEmpty(text)) { annotation = await eBriefingService.Run(() => BooksOnDeviceAccessor.GetAnnotation(bookID, pageID)); } spinner.StopAnimating(); if (page != null) { String localPath = DownloadedFilesCache.BuildCachedFilePath(page.URL); if (!String.IsNullOrEmpty(localPath)) { CGPDFDocument pdfDoc = CGPDFDocument.FromFile(localPath); if (pdfDoc != null) { CGPDFPage pdfPage = pdfDoc.GetPage(1); if (pdfPage != null) { UIImage pdfImg = ImageHelper.PDF2Image(pdfPage, this.Frame.Width, UIScreen.MainScreen.Scale); // pageView UIImageView pageView = new UIImageView(); pageView.Frame = new CGRect(0, (this.Frame.Height / 2) - (pdfImg.Size.Height / 2), pdfImg.Size.Width, pdfImg.Size.Height); // If this is annotation thumbnail, draw annotation overlay on top of pdf if (annotation != null) { Dictionary <String, PSPDFInkAnnotation> dictionary = AnnotationsDataAccessor.GenerateAnnDictionary((nuint)page.PageNumber - 1, annotation); if (dictionary != null) { foreach (KeyValuePair <String, PSPDFInkAnnotation> item in dictionary) { // Create full size annotation UIImage annImg = ImageHelper.DrawPSPDFAnnotation(item.Key, item.Value); if (annImg != null) { // Scale down the annotation image annImg = annImg.Scale(new CGSize(pdfImg.Size.Width, pdfImg.Size.Height)); // Overlap pdfImg and annImg pdfImg = ImageHelper.Overlap(pdfImg, annImg, CGPoint.Empty, CGPoint.Empty, UIScreen.MainScreen.Scale); } } } } pageView.Image = pdfImg; this.AddSubview(pageView); if (pdfImg.Size.Height < this.Frame.Height) { this.BackgroundColor = UIColor.Clear; } // THIS IS REQUIRED TO SKIP iCLOUD BACKUP SkipBackup2iCloud.SetAttribute(localPath); // Add ribbon if this is bookmark thumbnail if (bookmark) { UIImageView ribbon = new UIImageView(); ribbon.Image = UIImage.FromBundle("Assets/Buttons/bookmark_solid.png"); ribbon.Frame = new CGRect(pageView.Frame.Right - 35, pageView.Frame.Y, 25, 33.78f); this.AddSubview(ribbon); } // Do not add text if this is annotation thumbnail if (!String.IsNullOrEmpty(text)) { // titleLabel UILabel titleLabel = eBriefingAppearance.GenerateLabel(16); titleLabel.Frame = new CGRect(0, pageView.Frame.Bottom + 4, this.Frame.Width, 42); titleLabel.Lines = 2; titleLabel.LineBreakMode = UILineBreakMode.TailTruncation; titleLabel.TextAlignment = UITextAlignment.Center; titleLabel.Text = text; this.AddSubview(titleLabel); } } } } } } catch (Exception ex) { Logger.WriteLineDebugging("ThumbnailView - GenerateThumbnail: {0}", ex.ToString()); } }
private void GenerateThumbnail(String bookID, String pageID, String text, bool bookmark = false) { try { // activityIndicator UIActivityIndicatorView activityIndicator = new UIActivityIndicatorView(); activityIndicator.ActivityIndicatorViewStyle = UIActivityIndicatorViewStyle.White; activityIndicator.StartAnimating(); activityIndicator.HidesWhenStopped = true; activityIndicator.Frame = new RectangleF((this.Frame.Width / 2) - 10, (this.Frame.Height / 2) - 10, 20, 20); this.AddSubview(activityIndicator); // Generate pdf thumbnail Page page = null; Annotation annotation = null; BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += delegate { page = BooksOnDeviceAccessor.GetPage(bookID, pageID); if (String.IsNullOrEmpty(text)) { annotation = BooksOnDeviceAccessor.GetAnnotation(bookID, pageID); } }; worker.RunWorkerCompleted += delegate { this.InvokeOnMainThread(delegate { activityIndicator.StopAnimating(); if (page != null) { String localPath = DownloadedFilesCache.BuildCachedFilePath(page.URL); if (!String.IsNullOrEmpty(localPath)) { CGPDFDocument pdfDoc = CGPDFDocument.FromFile(localPath); if (pdfDoc != null) { CGPDFPage pdfPage = pdfDoc.GetPage(1); if (pdfPage != null) { UIImage pdfImg = PDFConverter.Transform2Image(pdfPage, this.Frame.Width); // pageView UIImageView pageView = new UIImageView(); pageView.Frame = new RectangleF(0, (this.Frame.Height / 2) - (pdfImg.Size.Height / 2), pdfImg.Size.Width, pdfImg.Size.Height); // If this is annotation thumbnail, draw annotation overlay on top of pdf if (annotation != null) { Dictionary <String, PSPDFInkAnnotation> dictionary = AnnotationsDataAccessor.GenerateAnnDictionary((UInt32)page.PageNumber - 1, annotation); if (dictionary != null) { foreach (KeyValuePair <String, PSPDFInkAnnotation> item in dictionary) { // Create full size annotation UIImage annImg = DrawAnnotation(item.Key, item.Value); if (annImg != null) { // Scale down the annotation image annImg = annImg.Scale(new SizeF(pdfImg.Size.Width, pdfImg.Size.Height)); // Overlap pdfImg and annImg pdfImg = Overlap(pdfImg, annImg); } } } } pageView.Image = pdfImg; this.AddSubview(pageView); // THIS IS REQUIRED TO SKIP iCLOUD BACKUP SkipBackup2iCloud.SetAttribute(localPath); // Add ribbon if this is bookmark thumbnail if (bookmark) { UIImageView ribbon = new UIImageView(); ribbon.Image = UIImage.FromBundle("Assets/Buttons/bookmark_solid.png"); ribbon.Frame = new RectangleF(pageView.Frame.Right - 35, pageView.Frame.Y, 25, 33.78f); this.AddSubview(ribbon); } // Do not add text if this is annotation thumbnail if (!String.IsNullOrEmpty(text)) { // titleLabel UILabel titleLabel = new UILabel(); titleLabel.Frame = new RectangleF(0, pageView.Frame.Bottom + 4, this.Frame.Width, 42); titleLabel.Font = UIFont.SystemFontOfSize(16f); titleLabel.BackgroundColor = UIColor.Clear; titleLabel.TextColor = eBriefingAppearance.DarkGrayColor; titleLabel.Lines = 2; titleLabel.LineBreakMode = UILineBreakMode.TailTruncation; titleLabel.TextAlignment = UITextAlignment.Center; titleLabel.Text = text; this.AddSubview(titleLabel); } } } } } }); }; worker.RunWorkerAsync(); } catch (Exception ex) { Logger.WriteLineDebugging("ThumbnailView - GenerateThumbnail: {0}", ex.ToString()); } }
public LibraryBookView(Book book, LibraryViewController parentVC) : base(new CGRect(0, 0, 280, 280)) { this.LibraryBook = book; this.BackgroundColor = UIColor.White; this.Layer.ShadowColor = UIColor.Black.CGColor; this.Layer.ShadowOpacity = 0.3f; this.Layer.ShadowRadius = 2f; this.Layer.ShadowOffset = new CGSize(5f, 5f); // imageView imageView = new UIImageView(); imageView.Frame = new CGRect(0, 0, this.Frame.Width, 150); this.AddSubview(imageView); if (!String.IsNullOrEmpty(LibraryBook.LargeImageURL)) { // imageSpinner imageSpinner = eBriefingAppearance.GenerateBounceSpinner(); imageSpinner.Center = imageView.Center; this.AddSubview(imageSpinner); // Download image bool exist = FileDownloader.Download(LibraryBook.LargeImageURL, parentVC); if (exist) { bool outDated = false; var item = BooksOnServerAccessor.GetBook(LibraryBook.ID); if (item != null) { if (item.ImageVersion < LibraryBook.ImageVersion) { DownloadedFilesCache.RemoveFile(item.LargeImageURL); DownloadedFilesCache.RemoveFile(item.SmallImageURL); outDated = true; } } if (outDated) { FileDownloader.Download(LibraryBook.LargeImageURL, parentVC, true); } else { UpdateImage(LibraryBook.LargeImageURL); } } } // titleLabel UILabel titleLabel = eBriefingAppearance.GenerateLabel(16); titleLabel.Frame = new CGRect(10, imageView.Frame.Bottom + 8, 260, 21); titleLabel.Lines = 2; titleLabel.LineBreakMode = UILineBreakMode.WordWrap; titleLabel.Text = book.Title; titleLabel.SizeToFit(); titleLabel.Frame = new CGRect(10, titleLabel.Frame.Y, 260, titleLabel.Frame.Height); this.AddSubview(titleLabel); // bookInfoView BookInfoView bookInfoView = new BookInfoView("0", "0", "0", book.PageCount.ToString(), false, false, this.Frame.Width - 30); bookInfoView.Frame = new CGRect(10, this.Frame.Bottom - 44, bookInfoView.Frame.Width, bookInfoView.Frame.Height); this.AddSubview(bookInfoView); // downloadButton UIButton downloadButton = UIButton.FromType(UIButtonType.Custom); downloadButton.Font = eBriefingAppearance.ThemeBoldFont(14); downloadButton.SetTitleColor(eBriefingAppearance.Color("37b878"), UIControlState.Normal); downloadButton.SetTitleColor(UIColor.White, UIControlState.Highlighted); downloadButton.SetBackgroundImage(UIImage.FromBundle("Assets/Buttons/green_unfilled.png").CreateResizableImage(new UIEdgeInsets(15f, 14f, 15f, 14f)), UIControlState.Normal); downloadButton.SetBackgroundImage(UIImage.FromBundle("Assets/Buttons/green_filled.png").CreateResizableImage(new UIEdgeInsets(15f, 14f, 15f, 14f)), UIControlState.Highlighted); downloadButton.Frame = new CGRect(this.Center.X - 65, bookInfoView.Frame.Top - 28, 130, downloadButton.CurrentBackgroundImage.Size.Height); downloadButton.SetTitle("DOWNLOAD", UIControlState.Normal); downloadButton.TouchUpInside += HandleDownloadButtonTouchUpInside; this.AddSubview(downloadButton); }
public ChapterView(String bookID, Chapter chapter, Int32 index) : base(new RectangleF(0, 0, 220, 388.33f)) { this.BackgroundColor = UIColor.Clear; this.Layer.ShadowColor = UIColor.Black.CGColor; this.Layer.ShadowOpacity = 0.3f; this.Layer.ShadowRadius = 2f; this.Layer.ShadowOffset = new SizeF(0f, 2f); this.Layer.ShadowPath = UIBezierPath.FromRoundedRect(this.Frame, 7f).CGPath; this.Layer.ShouldRasterize = true; this.Layer.RasterizationScale = UIScreen.MainScreen.Scale; this.BookChapter = chapter; // For rounded corner and shadow UIView subView = new UIView(new RectangleF(0, 0, 220, 388.33f)); subView.BackgroundColor = UIColor.White; subView.Layer.CornerRadius = 7f; subView.Layer.MasksToBounds = true; this.AddSubview(subView); // imageView UIImageView imageView = new UIImageView(); imageView.Frame = new RectangleF(0, 0, this.Frame.Width, 293.33f); String localImagePath = DownloadedFilesCache.BuildCachedFilePath(BookChapter.LargeImageURL); imageView.Image = UIImage.FromFile(localImagePath); imageView.ContentMode = UIViewContentMode.ScaleToFill; subView.AddSubview(imageView); // chapterLabel UILabel chapterLabel = new UILabel(); chapterLabel.Frame = new RectangleF(10, imageView.Frame.Bottom + 8, 200, 21); chapterLabel.Font = UIFont.SystemFontOfSize(14f); chapterLabel.TextAlignment = UITextAlignment.Left; chapterLabel.BackgroundColor = UIColor.Clear; chapterLabel.TextColor = UIColor.DarkGray; chapterLabel.Text = "Chapter " + (index + 1).ToString(); this.AddSubview(chapterLabel); // titleLabel UILabel titleLabel = new UILabel(); titleLabel.Frame = new RectangleF(10, chapterLabel.Frame.Bottom + 4, 200, 21); titleLabel.Font = UIFont.SystemFontOfSize(14f); titleLabel.BackgroundColor = UIColor.Clear; titleLabel.TextColor = UIColor.DarkGray; titleLabel.LineBreakMode = UILineBreakMode.TailTruncation; titleLabel.Text = chapter.Title; this.AddSubview(titleLabel); // bookInfoView String numNotes = "0"; String numBookmarks = "0"; String numAnnotations = "0"; BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += delegate { numNotes = BooksOnDeviceAccessor.GetNumNotesInChapter(bookID, chapter.ID); numBookmarks = BooksOnDeviceAccessor.GetNumBookmarksInChapter(bookID, chapter.ID); numAnnotations = BooksOnDeviceAccessor.GetNumAnnotationsInChapter(bookID, chapter.ID); }; worker.RunWorkerCompleted += delegate { this.InvokeOnMainThread(delegate { BookInfoView bookInfoView = new BookInfoView(numNotes, numBookmarks, numAnnotations, chapter.Pagecount.ToString(), false, false, this.Frame.Width - 30); bookInfoView.Frame = new RectangleF(10, this.Frame.Bottom - 40, bookInfoView.Frame.Width, bookInfoView.Frame.Height); this.AddSubview(bookInfoView); }); }; worker.RunWorkerAsync(); }