OSDN Git Service

Alter save thread logic so that if an error happens, a message box is produced rather...
authorRandy Baumgarte <randy@fbn.cx>
Mon, 23 Aug 2010 14:06:55 +0000 (10:06 -0400)
committerRandy Baumgarte <randy@fbn.cx>
Tue, 24 Aug 2010 00:14:55 +0000 (20:14 -0400)
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/evernote/EnmlConverter.java
src/cx/fbn/nevernote/signals/NoteSignal.java
src/cx/fbn/nevernote/threads/SaveRunner.java
src/cx/fbn/nevernote/utilities/ListManager.java
src/cx/fbn/nevernote/xml/XMLCleanup.java
src/cx/fbn/nevernote/xml/XMLNoteRepair.java

index a5c0b79..becfe8f 100644 (file)
@@ -392,6 +392,7 @@ public class NeverNote extends QMainWindow{
 //                     saveTimer.setInterval(1000*10); // auto save every 20 seconds;
                        saveTimer.start();
                }
+               listManager.saveRunner.noteSignals.noteSaveRunnerError.connect(this, "saveRunnerError(String, String)");
                
                logger.log(logger.EXTREME, "Starting external file monitor timer");
                externalFileSaveTimer = new QTimer();
@@ -3576,7 +3577,25 @@ public class NeverNote extends QMainWindow{
                if (!thumbnailViewer.isVisible()) 
                        thumbnailViewer.showFullScreen();
        }
-
+       // An error happened while saving a note.  Inform the user
+       @SuppressWarnings("unused")
+       private void saveRunnerError(String guid, String msg) {
+               if (msg == null) {
+                       String title = "*Unknown*";
+                       for (int i=0; i<listManager.getMasterNoteIndex().size(); i++) {
+                               if (listManager.getMasterNoteIndex().get(i).getGuid().equals(guid)) {
+                                       title = listManager.getMasterNoteIndex().get(i).getTitle();
+                                       i=listManager.getMasterNoteIndex().size();
+                               }
+                       }
+                       msg = "An error has happened saving the note \"" +title+
+                       "\". \nThis is probably due to a document that is too complex for Nevernote to process.  "+
+                       "As a result, changes to the note may not be saved.\n\nPlease review the note for any potential problems.";
+                       
+                       QMessageBox.information(this, tr("Error Saving Note"), tr(msg));
+               }
+       }
+       
        //**********************************************************
     //**********************************************************
     //* Online user actions
index a6359a1..ca23846 100644 (file)
@@ -105,7 +105,7 @@ public class EnmlConverter {
                        logger.log(logger.LOW, "End of modified note HTML");\r
 //                             logger.log(logger.LOW, result.errorMessage);\r
 //                             logger.log(logger.LOW, "Error Line:Column "+result.errorLine+":" +result.errorColumn);\r
-                       System.exit(16);\r
+                       return null;\r
 \r
 \r
                }\r
@@ -206,6 +206,9 @@ public class EnmlConverter {
 \r
        // Fix XML that Evernote thinks is invalid\r
        public String fixEnXMLCrap(String note) {\r
+               if (note == null)\r
+                       return null;\r
+               \r
                int pos;\r
                StringBuffer buffer = new StringBuffer(note);\r
                \r
index fad4b2b..ed89ed3 100644 (file)
@@ -44,6 +44,7 @@ public class NoteSignal extends QSignalEmitter {
        public Signal2<String, String>          guidChanged = new Signal2<String, String>();\r
        public Signal1<Integer>                         titleColorChanged = new Signal1<Integer>();\r
        public Signal2<Note, Boolean>           noteDownloaded = new Signal2<Note, Boolean>();\r
+       public Signal2<String, String>          noteSaveRunnerError = new Signal2<String, String>();\r
 }\r
 \r
 \r
index 9efbd1a..418c211 100644 (file)
@@ -29,6 +29,7 @@ import com.trolltech.qt.core.QObject;
 \r
 import cx.fbn.nevernote.Global;\r
 import cx.fbn.nevernote.evernote.EnmlConverter;\r
+import cx.fbn.nevernote.signals.NoteSignal;\r
 import cx.fbn.nevernote.sql.DatabaseConnection;\r
 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
 import cx.fbn.nevernote.utilities.Pair;\r
@@ -40,6 +41,7 @@ public class SaveRunner extends QObject implements Runnable {
        public QMutex                                           threadLock;\r
        private final DatabaseConnection        conn;\r
        private boolean                                         idle;\r
+       public NoteSignal                                       noteSignals;\r
 \r
        private volatile LinkedBlockingQueue<Pair<String, String>> workQueue = new LinkedBlockingQueue<Pair<String, String>>();\r
        \r
@@ -52,6 +54,7 @@ public class SaveRunner extends QObject implements Runnable {
                conn = new DatabaseConnection(logger, u, uid, pswd, cpswd);\r
                threadLock = new QMutex();\r
                keepRunning = true;\r
+               noteSignals = new NoteSignal();\r
        }\r
        \r
        \r
@@ -136,14 +139,15 @@ public class SaveRunner extends QObject implements Runnable {
                EnmlConverter enml = new EnmlConverter(logger);\r
                String newContent = enml.convert(guid, content);\r
                String fixedContent = enml.fixEnXMLCrap(newContent);\r
-               conn.getNoteTable().updateNoteContent(guid, fixedContent);\r
-\r
-\r
-               logger.log(logger.EXTREME, "Saving new note resources");\r
-               List<Resource> oldResources = conn.getNoteTable().noteResourceTable.getNoteResources(guid, false);\r
-               List<String> newResources = enml.getResources();\r
-               removeObsoleteResources(oldResources, newResources);\r
-               \r
+               if (fixedContent != null) {\r
+                       conn.getNoteTable().updateNoteContent(guid, fixedContent);\r
+                       logger.log(logger.EXTREME, "Saving new note resources");\r
+                       List<Resource> oldResources = conn.getNoteTable().noteResourceTable.getNoteResources(guid, false);\r
+                       List<String> newResources = enml.getResources();\r
+                       removeObsoleteResources(oldResources, newResources);\r
+               } else {\r
+                       noteSignals.noteSaveRunnerError.emit(guid, null);\r
+               }\r
                logger.log(logger.HIGH, "Leaving ListManager.updateNoteContent");\r
        }\r
        \r
index e46e398..47794cf 100644 (file)
@@ -96,7 +96,7 @@ public class ListManager  {
        public TagSignal                                tagSignal;\r
        public NotebookSignal                   notebookSignal;\r
        private int                                             trashCount;\r
-    SaveRunner                 saveRunner;                                     // Thread used to save content.  Used because the xml conversion is slowwwww\r
+    public SaveRunner                          saveRunner;                                     // Thread used to save content.  Used because the xml conversion is slowwwww\r
     QThread                            saveThread;\r
        \r
        // Constructor\r
index c7b8e13..6fd54b8 100644 (file)
@@ -78,7 +78,7 @@ public class XMLCleanup {
                        System.out.println(newContent);\r
                        System.out.println("Location : Line-"+result.errorLine +" Column-" + result.errorColumn);\r
                        System.out.println("Exiting");\r
-                       System.exit(16);\r
+                       content = null;\r
                        return;\r
                }\r
                \r
index 8fec2bc..9d5de24 100644 (file)
@@ -97,7 +97,7 @@ public class XMLNoteRepair {
                                is.setCharacterStream(new StringReader(handler.getXml()));
                                if (validate) {
                                        System.err.println("Error validating ENML2 DTD");
-                                       System.exit(16);
+                                       return null;
                                }
                        } catch (SAXException e) {
                                System.err.append("SAXException");