Переглянути джерело

Fixed crash when cached documents needed to be reloaded

frogsoftware 1 тиждень тому
батько
коміт
2e3aa1cf90

+ 34 - 18
InABox.Core/CoreObservableCollection.cs

@@ -448,31 +448,47 @@ namespace InABox.Core
                 int i = index;
                 for (; i < rangeCount && i - index < addedCount; i++)
                 {
-                    //parallel position
-                    T old = this[i], @new = list[i - index];
-                    if (Comparer.Equals(old, @new))
+                    
+                    try
                     {
-                        OnRangeReplaced(i, newCluster!, oldCluster!);
-                        continue;
-                    }
-                    else
-                    {
-                        Items[i] = @new;
-
-                        if (newCluster == null)
+                        // This threw an exception 2025-07-11 for some reason
+                        // i = 0; this.Length=0
+                        
+                        //parallel position
+                        T old = this[i], @new = list[i - index];
+                        
+                        if (Comparer.Equals(old, @new))
                         {
-                            Debug.Assert(oldCluster == null);
-                            newCluster = new List<T> { @new };
-                            oldCluster = new List<T> { old };
+                            OnRangeReplaced(i, newCluster!, oldCluster!);
+                            continue;
                         }
                         else
                         {
-                            newCluster.Add(@new);
-                            oldCluster!.Add(old);
+                            Items[i] = @new;
+
+                            if (newCluster == null)
+                            {
+                                Debug.Assert(oldCluster == null);
+                                newCluster = new List<T> { @new };
+                                oldCluster = new List<T> { old };
+                            }
+                            else
+                            {
+                                newCluster.Add(@new);
+                                oldCluster!.Add(old);
+                            }
+
+                            changesMade = true;
                         }
-
-                        changesMade = true;
                     }
+                    catch (Exception e)
+                    {
+                        // Not sure what to do with this yet
+                        throw (e);
+                    }
+                    
+                    
+                    
                 }
 
                 OnRangeReplaced(i, newCluster!, oldCluster!);

+ 34 - 30
inabox.wpf/DynamicGrid/PDF/DocumentEditor.xaml.cs

@@ -83,37 +83,41 @@ namespace InABox.DynamicGrid
                     var doc = item.Tag as IEntityDocument;
                     if (doc != null)
                     {
-                        IDocumentEditor editor = null;
-
-                        var extension = Path.GetExtension(doc.DocumentLink.FileName).ToLower();
-
-                        if (extension.Equals(".pdf"))
-                        {
-                            var pdf = new PDFEditorControl();
-                            //pdf.PrintAllowed = PrintAllowed;
-                            pdf.SaveAllowed = SaveAllowed;
-                            pdf.ButtonsVisible = ButtonsVisible;
-                            pdf.Watermark = Watermark;
-                            editor = pdf;
-                        }
-                        else if (extension.Equals(".png") || extension.Equals(".bmp") || extension.Equals(".jpg") || extension.Equals(".jpeg"))
-                        {
-                            editor = new ImageEditorControl();
-                        }
-                        else if (extension.Equals(".xls") || extension.Equals(".xlsx"))
-                        {
-                            editor = new SpreadsheetEditorControl();
-                        }
-                        else if (extension.Equals(".doc") || extension.Equals(".docx")  || extension.Equals(".rtf")  || extension.Equals(".html")  || extension.Equals(".htm")  || extension.Equals(".txt"))
-                        {
-                            editor = new RTFEditorControl();
-                        }
-
-                        if (editor != null)
+                        Dispatcher.BeginInvoke(() =>
                         {
-                            item.Content = editor;
-                            editor.Document = doc;
-                        }
+                            IDocumentEditor editor = null;
+
+                            var extension = Path.GetExtension(doc.DocumentLink.FileName).ToLower();
+
+                            if (extension.Equals(".pdf"))
+                            {
+                                var pdf = new PDFEditorControl();
+                                //pdf.PrintAllowed = PrintAllowed;
+                                pdf.SaveAllowed = SaveAllowed;
+                                pdf.ButtonsVisible = ButtonsVisible;
+                                pdf.Watermark = Watermark;
+                                editor = pdf;
+                            }
+                            else if (extension.Equals(".png") || extension.Equals(".bmp") || extension.Equals(".jpg") || extension.Equals(".jpeg"))
+                            {
+                                editor = new ImageEditorControl();
+                            }
+                            else if (extension.Equals(".xls") || extension.Equals(".xlsx"))
+                            {
+                                editor = new SpreadsheetEditorControl();
+                            }
+                            else if (extension.Equals(".doc") || extension.Equals(".docx")  || extension.Equals(".rtf")  || extension.Equals(".html")  || extension.Equals(".htm")  || extension.Equals(".txt"))
+                            {
+                                editor = new RTFEditorControl();
+                            }
+
+                            if (editor != null)
+                            {
+                                item.Content = editor;
+                                editor.Document = doc;
+                            }
+                        });
+                        
                     }
                 }
             }