OSDN Git Service

Rework some database logic to try and reduce the overhead with indexing & thumbnail...
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / threads / IndexRunner.java
index 4ea69c5..e9b4dab 100644 (file)
@@ -82,12 +82,13 @@ public class IndexRunner extends QObject implements Runnable {
        public boolean indexAttachmentsLocally = true;\r
        public volatile IndexSignal                     signal;\r
        private final TreeSet<String>           foundWords;\r
+       int uncommittedCount = 0;\r
 \r
        \r
        public IndexRunner(String logname, String u, String uid, String pswd, String cpswd) {\r
                foundWords = new TreeSet<String>();\r
                logger = new ApplicationLogger(logname);\r
-               conn = new DatabaseConnection(logger, u, uid, pswd, cpswd, 300);\r
+               conn = new DatabaseConnection(logger, u, uid, pswd, cpswd, 0);\r
                indexType = SCAN;\r
                guid = null;\r
                keepRunning = true;\r
@@ -110,6 +111,8 @@ public class IndexRunner extends QObject implements Runnable {
                while (keepRunning) {\r
                        idle=true;\r
                        try {\r
+                               conn.commitTransaction();\r
+                               uncommittedCount = 0;\r
                                waitSeconds(1);\r
                                String work = workQueue.take();\r
                                idle=false;\r
@@ -173,11 +176,12 @@ public class IndexRunner extends QObject implements Runnable {
                                \r
                logger.log(logger.EXTREME, "Splitting words");\r
                String[] result = text.toString().split(regex);\r
+               conn.beginTransaction();\r
                logger.log(logger.EXTREME, "Deleting existing words for note from index");\r
                conn.getWordsTable().expungeFromWordIndex(guid, "CONTENT");\r
                \r
                logger.log(logger.EXTREME, "Number of words found: " +result.length);\r
-               for (int j=0; j<result.length && keepRunning; j++) {\r
+               for (int j=0; j<result.length && keepRunning && !interrupt; j++) {\r
                        if (!result[j].trim().equals("")) {\r
                                logger.log(logger.EXTREME, "Result word: " +result[j].trim());\r
                                addToIndex(guid, result[j], "CONTENT");\r
@@ -187,7 +191,9 @@ public class IndexRunner extends QObject implements Runnable {
                if (Global.keepRunning) {\r
                        logger.log(logger.EXTREME, "Resetting note guid needed");\r
                        conn.getNoteTable().setIndexNeeded(guid, false);\r
-               }\r
+               } \r
+               conn.commitTransaction();\r
+               uncommittedCount = 0;\r
                logger.log(logger.EXTREME, "Leaving indexRunner.indexNoteContent()");\r
        }\r
        \r
@@ -231,30 +237,44 @@ public class IndexRunner extends QObject implements Runnable {
                else\r
                        resourceBinary = new QByteArray(r.getRecognition().getBody());\r
                \r
+               conn.beginTransaction();\r
                conn.getWordsTable().expungeFromWordIndex(r.getNoteGuid(), "RESOURCE");\r
                // This is due to an old bug & can be removed at some point in the future 11/23/2010\r
                conn.getWordsTable().expungeFromWordIndex(guid, "RESOURCE");   \r
+               conn.commitTransaction();\r
+               uncommittedCount = 0;\r
+               conn.beginTransaction();\r
                        \r
                doc.setContent(resourceBinary);\r
                QDomElement docElem = doc.documentElement();\r
                        \r
                // look for text tags\r
                QDomNodeList anchors = docElem.elementsByTagName("t");\r
-               for (int i=0; i<anchors.length() && keepRunning; i++) {\r
+               for (int i=0; i<anchors.length() && keepRunning && !interrupt; i++) {\r
                        QDomElement enmedia = anchors.at(i).toElement();\r
                        String weight = new String(enmedia.attribute("w"));\r
                        String text = new String(enmedia.text()).toLowerCase();\r
                        if (!text.equals("")) {\r
                                conn.getWordsTable().addWordToNoteIndex(r.getNoteGuid(), text, "RESOURCE", new Integer(weight));\r
+                               uncommittedCount++;\r
+                               if (uncommittedCount > 100) {\r
+                                       conn.commitTransaction();\r
+                                       uncommittedCount=0;\r
+                               }\r
                        }\r
                }\r
                \r
-               if (Global.keepRunning && indexAttachmentsLocally) {\r
+               if (Global.keepRunning && indexAttachmentsLocally && !interrupt) {\r
+                       conn.commitTransaction();\r
+                       uncommittedCount = 0;\r
+                       conn.beginTransaction();\r
                        indexResourceContent(guid);\r
                }\r
                                \r
                if (Global.keepRunning)\r
                        conn.getNoteTable().noteResourceTable.setIndexNeeded(guid,false);\r
+               conn.commitTransaction();\r
+               uncommittedCount = 0;\r
        }\r
        \r
        private void indexResourceContent(String guid) {\r
@@ -296,7 +316,7 @@ public class IndexRunner extends QObject implements Runnable {
        private void indexResourceRTF(Resource r) {\r
 \r
                QTemporaryFile f = writeResource(r.getData());\r
-               if (!keepRunning) {\r
+               if (!keepRunning || interrupt) {\r
                        return;\r
                }\r
                \r
@@ -309,7 +329,7 @@ public class IndexRunner extends QObject implements Runnable {
                        ParseContext context = new ParseContext();\r
                        parser.parse(input, textHandler, metadata, context);\r
                        String[] result = textHandler.toString().split(regex);\r
-                       for (int i=0; i<result.length && keepRunning; i++) {\r
+                       for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
                                addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
                        }\r
                        input.close();\r
@@ -338,7 +358,7 @@ public class IndexRunner extends QObject implements Runnable {
        private void indexResourceODF(Resource r) {\r
 \r
                QTemporaryFile f = writeResource(r.getData());\r
-               if (!keepRunning) {\r
+               if (!keepRunning || interrupt) {\r
                        return;\r
                }\r
                \r
@@ -351,7 +371,7 @@ public class IndexRunner extends QObject implements Runnable {
                        ParseContext context = new ParseContext();\r
                        parser.parse(input, textHandler, metadata, context);\r
                        String[] result = textHandler.toString().split(regex);\r
-                       for (int i=0; i<result.length && keepRunning; i++) {\r
+                       for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
                                addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
                        }\r
                        input.close();\r
@@ -380,7 +400,7 @@ public class IndexRunner extends QObject implements Runnable {
        private void indexResourceOffice(Resource r) {\r
 \r
                QTemporaryFile f = writeResource(r.getData());\r
-               if (!keepRunning) {\r
+               if (!keepRunning || interrupt) {\r
                        return;\r
                }\r
                \r
@@ -393,7 +413,7 @@ public class IndexRunner extends QObject implements Runnable {
                        ParseContext context = new ParseContext();\r
                        parser.parse(input, textHandler, metadata, context);\r
                        String[] result = textHandler.toString().split(regex);\r
-                       for (int i=0; i<result.length && keepRunning; i++) {\r
+                       for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
                                addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
                        }\r
                        input.close();\r
@@ -423,7 +443,7 @@ public class IndexRunner extends QObject implements Runnable {
        private void indexResourcePDF(Resource r) {\r
 \r
                QTemporaryFile f = writeResource(r.getData());\r
-               if (!keepRunning) {\r
+               if (!keepRunning || interrupt) {\r
                        return;\r
                }\r
                \r
@@ -436,7 +456,7 @@ public class IndexRunner extends QObject implements Runnable {
                        ParseContext context = new ParseContext();\r
                        parser.parse(input, textHandler, metadata, context);\r
                        String[] result = textHandler.toString().split(regex);\r
-                       for (int i=0; i<result.length && keepRunning; i++) {\r
+                       for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
                                addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
                        }\r
                        input.close();\r
@@ -465,7 +485,7 @@ public class IndexRunner extends QObject implements Runnable {
        private void indexResourceOOXML(Resource r) {\r
 \r
                QTemporaryFile f = writeResource(r.getData());\r
-               if (!keepRunning) {\r
+               if (!keepRunning || interrupt) {\r
                        return;\r
                }\r
                \r
@@ -478,7 +498,7 @@ public class IndexRunner extends QObject implements Runnable {
                        ParseContext context = new ParseContext();\r
                        parser.parse(input, textHandler, metadata, context);\r
                        String[] result = textHandler.toString().split(regex);\r
-                       for (int i=0; i<result.length && keepRunning; i++) {\r
+                       for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
                                addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
                        }\r
                        input.close();\r
@@ -518,7 +538,7 @@ public class IndexRunner extends QObject implements Runnable {
                int index = content.indexOf("<en-crypt");\r
                int endPos;\r
                boolean tagFound = true;\r
-               while (tagFound && keepRunning) {\r
+               while (tagFound && keepRunning && !interrupt) {\r
                        endPos = content.indexOf("</en-crypt>", index)+11;\r
                        if (endPos > -1 && index > -1) {\r
                                content = content.substring(0,index)+content.substring(endPos);\r
@@ -555,6 +575,11 @@ public class IndexRunner extends QObject implements Runnable {
                                foundWords.add(buffer.toString());\r
                                foundWords.add(word);\r
                                conn.getWordsTable().addWordToNoteIndex(guid, buffer.toString(), type, 100);\r
+                               uncommittedCount++;\r
+                               if (uncommittedCount > 100) {\r
+                                       conn.commitTransaction();\r
+                                       uncommittedCount=0;\r
+                               }\r
                        }\r
                }\r
                return;\r
@@ -570,7 +595,7 @@ public class IndexRunner extends QObject implements Runnable {
                }\r
                for (int i=0; i<notes.size() && !interrupt && keepRunning; i++) {\r
                        guid = notes.get(i);\r
-                       if (guid != null && keepRunning) {\r
+                       if (guid != null && keepRunning && !interrupt) {\r
                                waitSeconds(1);\r
                                indexNoteContent();\r
                        }\r
@@ -605,6 +630,8 @@ public class IndexRunner extends QObject implements Runnable {
 \r
        private void waitSeconds(int len) {\r
                long starttime = 0; // variable declared\r
+               if (starttime == 0)\r
+                       return;\r
                //...\r
                // for the first time, remember the timestamp\r
            starttime = System.currentTimeMillis();\r