OSDN Git Service

Added inter-note links. Added index content controls. Altered Android Unicode test...
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / sql / NoteTable.java
index 5ccfb8f..97c4a8e 100644 (file)
@@ -319,12 +319,31 @@ public class NoteTable {
                // convert the &lt; character to < it will mess up the XML parsing.  So, to get around this\r
                // I am "bit stuffing" the &lt; to &&lt; so StringEscapeUtils doesn't unescape it.  After\r
                // I'm done I convert it back.\r
+               StringBuffer buffer = new StringBuffer(unicode);\r
                if (Global.enableHTMLEntitiesFix && unicode.indexOf("&#") > 0) {\r
                        unicode = query.valueString(16);\r
-                       unicode = unicode.replace("&lt;", "&_lt;");\r
-                       unicode = codec.fromUnicode(StringEscapeUtils.unescapeHtml(unicode)).toString();\r
-                       unicode = unicode.replace("&_lt;", "&lt;");\r
-               }\r
+                       //System.out.println(unicode);\r
+                       //unicode = unicode.replace("&lt;", "&_lt;");\r
+                       //unicode = codec.fromUnicode(StringEscapeUtils.unescapeHtml(unicode)).toString();\r
+                       //unicode = unicode.replace("&_lt;", "&lt;");\r
+                       //System.out.println("************************");\r
+                       int j=1;\r
+                       for (int i=buffer.indexOf("&#"); i != -1 && buffer.indexOf("&#", i)>0; i=buffer.indexOf("&#",i+1)) {\r
+                               j = buffer.indexOf(";",i)+1;\r
+                               if (i<j) {\r
+                                       String entity = buffer.substring(i,j).toString();\r
+                                       int len = entity.length()-1;\r
+                                       String tempEntity = entity.substring(2, len);\r
+                                       try {\r
+                                               Integer.parseInt(tempEntity);\r
+                                               entity = codec.fromUnicode(StringEscapeUtils.unescapeHtml(entity)).toString();\r
+                                               buffer.delete(i, j);\r
+                                               buffer.insert(i, entity);\r
+                                       } catch (Exception e){ }\r
+                                       \r
+                               }\r
+                       } \r
+               } \r
                        \r
                n.setContent(unicode);\r
 //                     n.setContent(query.valueString(16).toString());\r
@@ -675,8 +694,9 @@ public class NoteTable {
         NSqlQuery query = new NSqlQuery(db.getConnection());\r
         NSqlQuery resQuery = new NSqlQuery(db.getResourceConnection());\r
         NSqlQuery wordQuery = new NSqlQuery(db.getIndexConnection());\r
-               query.prepare("Update Note set guid=:newGuid where guid=:oldGuid");\r
+               query.prepare("Update Note set guid=:newGuid, original_guid=:original_guid where guid=:oldGuid");\r
 \r
+               query.bindValue(":original_guid", oldGuid);\r
                query.bindValue(":newGuid", newGuid);\r
                query.bindValue(":oldGuid", oldGuid);\r
 \r
@@ -715,10 +735,15 @@ public class NoteTable {
        // Update a note\r
        public void updateNote(Note n, boolean isNew) {\r
                int titleColor = getNoteTitleColor(n.getGuid());\r
+               String originalGuid = findAlternateGuid(n.getGuid());\r
                expungeNote(n.getGuid(), true, false);\r
                addNote(n, false);\r
                if (titleColor != -1)\r
                        setNoteTitleColor(n.getGuid(), titleColor);\r
+               if (originalGuid != null) {\r
+                       updateNoteGuid(n.getGuid(), originalGuid);\r
+                       updateNoteGuid(originalGuid, n.getGuid());\r
+               }\r
        }\r
        // Does a note exist?\r
        public boolean exists(String guid) {\r
@@ -1375,6 +1400,41 @@ public class NoteTable {
                return 0;       \r
        }\r
 \r
+       //***********************************************************************************\r
+       public String findAlternateGuid(String guid) {\r
+               boolean check;\r
+        NSqlQuery query = new NSqlQuery(db.getConnection());\r
+                                       \r
+               check = query.prepare("select guid from note where original_guid=:guid");\r
+               query.bindValue(":guid", guid);\r
+               check = query.exec();\r
+               if (!check) \r
+                       logger.log(logger.EXTREME, "Note SQL findAlternateguid query failed: " +query.lastError().toString());\r
+               \r
+               if (query.next()) {\r
+                       return query.valueString(0); \r
+               }\r
+\r
+               return null;    \r
+       }\r
+       \r
+       //* Check if a note guid exists\r
+       public boolean guidExists(String guid) {\r
+               boolean check;\r
+        NSqlQuery query = new NSqlQuery(db.getConnection());\r
+                                       \r
+               check = query.prepare("select guid from note where guid=:guid");\r
+               query.bindValue(":guid", guid);\r
+               check = query.exec();\r
+               if (!check) \r
+                       logger.log(logger.EXTREME, "Note SQL guidExists query failed: " +query.lastError().toString());\r
+               \r
+               if (query.next()) {\r
+                       return true; \r
+               }\r
+\r
+               return false;                   \r
+       }\r
        \r
        // Update a note content's hash.  This happens if a resource is edited outside of NN\r
        public void updateResourceContentHash(String guid, String oldHash, String newHash) {\r