/// <summary> /// Deep clone, but does not copy the OnPDFHighlightListChanged subscribers. /// </summary> public object Clone() { var clone = new PDFHightlightList(); foreach (var highlights_for_page in highlights.Values) { foreach (var highlight in highlights_for_page) { clone.AddUpdatedHighlight((PDFHighlight)highlight.Clone()); } } return(clone); }
internal static void ReadFromStream(PDFDocument_ThreadUnsafe pdf_document, PDFHightlightList highlights, Dictionary <string, byte[]> /* can be null */ library_items_highlights_cache) { byte[] highlights_data = null; if (null != library_items_highlights_cache) { library_items_highlights_cache.TryGetValue(pdf_document.Fingerprint, out highlights_data); } else { List <LibraryDB.LibraryItem> library_items = pdf_document.Library.LibraryDB.GetLibraryItems(pdf_document.Fingerprint, PDFDocumentFileLocations.HIGHLIGHTS); if (0 < library_items.Count) { highlights_data = library_items[0].data; } } if (null != highlights_data) { try { List <PDFHighlight> highlights_list = null; // First try normal try { highlights_list = ReadFromStream_JSON(highlights_data); } catch (Exception) { highlights_list = ReadFromStream_PROTOBUF(highlights_data); FeatureTrackingManager.Instance.UseFeature(Features.Legacy_Highlights_ProtoBuf); } if (null != highlights_list) { foreach (PDFHighlight highlight in highlights_list) { highlights.AddUpdatedHighlight(highlight); } } } catch (Exception ex) { Logging.Error(ex, "There was a problem loading the Highlights for document {0}", pdf_document.Fingerprint); } } }