OSDN Git Service

Correct trash counts.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / utilities / ListManager.java
index 47794cf..3ed0039 100644 (file)
@@ -28,12 +28,15 @@ import java.util.HashMap;
 import java.util.List;\r
 import java.util.Vector;\r
 \r
+import com.evernote.edam.type.LinkedNotebook;\r
 import com.evernote.edam.type.Note;\r
 import com.evernote.edam.type.Notebook;\r
 import com.evernote.edam.type.SavedSearch;\r
 import com.evernote.edam.type.Tag;\r
 import com.trolltech.qt.QThread;\r
 import com.trolltech.qt.core.QDateTime;\r
+import com.trolltech.qt.gui.QImage;\r
+import com.trolltech.qt.gui.QPixmap;\r
 import com.trolltech.qt.sql.QSqlQuery;\r
 import com.trolltech.qt.xml.QDomAttr;\r
 import com.trolltech.qt.xml.QDomDocument;\r
@@ -67,6 +70,8 @@ public class ListManager  {
        private List<Notebook>                  notebookIndex;\r
        private List<Notebook>                  archiveNotebookIndex;\r
        private List<String>                    localNotebookIndex;\r
+       \r
+       private List<LinkedNotebook>    linkedNotebookIndex;\r
 \r
        private List<SavedSearch>               searchIndex;\r
 \r
@@ -95,15 +100,19 @@ public class ListManager  {
        public HashMap<String, String>  wordMap;\r
        public TagSignal                                tagSignal;\r
        public NotebookSignal                   notebookSignal;\r
+       public boolean                                  refreshCounters;                        // Used to control when to recount lists\r
        private int                                             trashCount;\r
     public SaveRunner                          saveRunner;                                     // Thread used to save content.  Used because the xml conversion is slowwwww\r
-    QThread                            saveThread;\r
+    QThread                                                    saveThread;\r
        \r
+//    private final HashMap<String, QImage> thumbnailList;\r
+    \r
        // Constructor\r
        public ListManager(DatabaseConnection d, ApplicationLogger l) {\r
                conn = d;\r
                logger = l;\r
-               \r
+                       \r
+               conn.getTagTable().cleanupTags();\r
        status = new StatusSignal();\r
                signals = new ThreadSignal();\r
                \r
@@ -121,35 +130,49 @@ public class ListManager  {
                reloadIndexes();\r
                \r
                notebookSignal = new NotebookSignal();\r
-               notebookCounterRunner = new CounterRunner("notebook_counter.log", CounterRunner.NOTEBOOK, Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+               notebookCounterRunner = new CounterRunner("notebook_counter.log", CounterRunner.NOTEBOOK, \r
+                                               Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+                                               Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
                notebookCounterRunner.setNoteIndex(getNoteIndex());\r
                notebookCounterRunner.notebookSignal.countsChanged.connect(this, "setNotebookCounter(List)");\r
                notebookThread = new QThread(notebookCounterRunner, "Notebook Counter Thread");\r
                notebookThread.start();\r
                \r
                tagSignal = new TagSignal();\r
-               tagCounterRunner = new CounterRunner("tag_counter.log", CounterRunner.TAG, Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+               tagCounterRunner = new CounterRunner("tag_counter.log", CounterRunner.TAG, \r
+                               Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+                               Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
                tagCounterRunner.setNoteIndex(getNoteIndex());\r
                tagCounterRunner.tagSignal.countsChanged.connect(this, "setTagCounter(List)");\r
                tagThread = new QThread(tagCounterRunner, "Tag Counter Thread");\r
                tagThread.start();\r
                \r
                trashSignal = new TrashSignal();\r
-               trashCounterRunner = new CounterRunner("trash_counter.log", CounterRunner.TRASH, Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+               trashCounterRunner = new CounterRunner("trash_counter.log", CounterRunner.TRASH, \r
+                               Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+                               Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
                trashCounterRunner.trashSignal.countChanged.connect(this, "trashSignalReceiver(Integer)");\r
                trashThread = new QThread(trashCounterRunner, "Trash Counter Thread");\r
                trashThread.start();\r
-               reloadTrashCount();\r
+//             reloadTrashCount();\r
                \r
                wordMap = new HashMap<String, String>();\r
                tagSignal = new TagSignal();\r
                \r
                logger.log(logger.EXTREME, "Setting save thread");\r
-               saveRunner = new SaveRunner("saveRunner.log", Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+               saveRunner = new SaveRunner("saveRunner.log", \r
+                               Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+                               Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
                saveThread = new QThread(saveRunner, "Save Runner Thread");\r
                saveThread.start();\r
-\r
+               \r
+//             thumbnailList = conn.getNoteTable().getThumbnails();\r
+//             thumbnailList = new HashMap<String,QImage>();\r
+               \r
+               linkedNotebookIndex = conn.getLinkedNotebookTable().getAll();\r
                loadNoteTitleColors();\r
+               refreshCounters = true;\r
+               refreshCounters();\r
                                \r
        }\r
        \r
@@ -188,7 +211,6 @@ public class ListManager  {
                        e.printStackTrace();\r
                }\r
 \r
-\r
        }\r
 \r
        //***************************************************************\r
@@ -233,9 +255,14 @@ public class ListManager  {
                \r
                setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());\r
                \r
+               linkedNotebookIndex = conn.getLinkedNotebookTable().getAll();\r
+               \r
                enSearchChanged = true;\r
        }\r
 \r
+       public void reloadTagIndex() {\r
+               setTagIndex(conn.getTagTable().getAll());       \r
+       }\r
        public void reloadIndexes() {\r
                setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());\r
 \r
@@ -244,8 +271,7 @@ public class ListManager  {
                for (int i=0; i<local.size(); i++)\r
                        localNotebookIndex.add(local.get(i).getGuid());\r
                \r
-               // Load tags\r
-               setTagIndex(conn.getTagTable().getAll());\r
+               reloadTagIndex();\r
                // Load notebooks\r
                setNotebookIndex(conn.getNotebookTable().getAll());\r
                // load archived notebooks (if note using the EN interface)\r
@@ -253,7 +279,7 @@ public class ListManager  {
                // load saved search index\r
                setSavedSearchIndex(conn.getSavedSearchTable().getAll());\r
                // Load search helper utility\r
-               enSearch = new EnSearch(conn,  logger, "", getTagIndex(), Global.getMinimumWordLength(), Global.getRecognitionWeight());\r
+               enSearch = new EnSearch(conn,  logger, "", getTagIndex(), Global.getRecognitionWeight());\r
                logger.log(logger.HIGH, "Building note index");\r
 \r
 //             if (getMasterNoteIndex() == null) { \r
@@ -285,7 +311,7 @@ public class ListManager  {
        //* selected notebooks\r
        //***************************************************************\r
        //***************************************************************\r
-       // Return the selected notebook(s)\r
+       // Return the selected notebook(s)\r
        public List<String> getSelectedNotebooks() {\r
                return selectedNotebooks;\r
        }\r
@@ -334,6 +360,9 @@ public class ListManager  {
                return notebookIndex;\r
 \r
        }\r
+       public List<LinkedNotebook> getLinkedNotebookIndex() {\r
+               return linkedNotebookIndex;\r
+       }\r
        public List<Notebook> getArchiveNotebookIndex() {\r
                return archiveNotebookIndex;\r
        }\r
@@ -382,14 +411,39 @@ public class ListManager  {
        public List<Note> getMasterNoteIndex() {\r
                return noteModel.getMasterNoteIndex();\r
        }\r
-       \r
+       // Thumbnails\r
+//     public HashMap<String, QImage> getThumbnails() {\r
+//             return thumbnailList;\r
+//     }\r
+       public QImage getThumbnail(String guid) {\r
+//             if (getThumbnails().containsKey(guid))\r
+//                     return getThumbnails().get(guid);\r
+               \r
+               QImage img = new QImage();\r
+               img = QImage.fromData(conn.getNoteTable().getThumbnail(guid));\r
+               if (img == null || img.isNull()) \r
+                       return null;\r
+               //getThumbnails().put(guid, img);\r
+               return img;\r
+       }\r
+       public QPixmap getThumbnailPixmap(String guid) {\r
+//             if (getThumbnails().containsKey(guid))\r
+//                     return getThumbnails().get(guid);\r
+               \r
+               QPixmap img = new QPixmap();\r
+               img.loadFromData(conn.getNoteTable().getThumbnail(guid));\r
+               if (img == null || img.isNull()) \r
+                       return null;\r
+               //getThumbnails().put(guid, img);\r
+               return img;\r
+       }\r
     //***************************************************************\r
     //***************************************************************\r
     //** These functions deal with setting & retrieving filters\r
     //***************************************************************\r
     //***************************************************************\r
        public void setEnSearch(String t) {\r
-               enSearch = new EnSearch(conn,logger, t, getTagIndex(), Global.getMinimumWordLength(), Global.getRecognitionWeight());\r
+               enSearch = new EnSearch(conn,logger, t, getTagIndex(), Global.getRecognitionWeight());\r
                enSearchChanged = true;\r
        }\r
        // Save search tags\r
@@ -765,6 +819,15 @@ public class ListManager  {
                }\r
                conn.getNotebookTable().expungeNotebook(guid, true);            \r
        }\r
+       // Rename a stack\r
+       public void renameStack(String oldName, String newName) {\r
+               for (int i=0; i<getNotebookIndex().size(); i++) {\r
+                       if (getNotebookIndex().get(i).getStack() != null && \r
+                                       getNotebookIndex().get(i).getStack().equalsIgnoreCase(oldName)) {\r
+                               getNotebookIndex().get(i).setStack(newName);\r
+                       }\r
+               }       \r
+       }\r
        // Update a notebook sequence number\r
        public void updateNotebookSequence(String guid, int sequence) {\r
                logger.log(logger.HIGH, "Entering ListManager.updateNotebookSequence");\r
@@ -795,6 +858,21 @@ public class ListManager  {
                logger.log(logger.HIGH, "Leaving ListManager.updateNotebookGuid");\r
 \r
        }\r
+       // Update a notebook Guid number\r
+       public void updateNotebookStack(String oldGuid, String stack) {\r
+               logger.log(logger.HIGH, "Entering ListManager.updateNotebookGuid");\r
+\r
+               conn.getNotebookTable().setStack(oldGuid, stack);\r
+               \r
+               for (int i=0; i<notebookIndex.size(); i++) {\r
+                       if (notebookIndex.get(i).getGuid().equals(oldGuid)) {\r
+                               notebookIndex.get(i).setStack(stack);\r
+                               i=notebookIndex.size()+1;\r
+                       }\r
+               }\r
+               logger.log(logger.HIGH, "Leaving ListManager.updateNotebookGuid");\r
+\r
+       }\r
        \r
        \r
        //************************************************************************************\r
@@ -842,54 +920,65 @@ public class ListManager  {
                else {\r
                        if (n.isActive() && !Global.showDeleted)\r
                                goodStatus = true;\r
-                       // Begin filtering results\r
-                       if (goodStatus)\r
-                               goodNotebook = filterByNotebook(n.getNotebookGuid());\r
-                       if (goodNotebook) \r
-                               goodTag = filterByTag(n.getTagGuids());\r
-                       if (goodTag) {\r
-                               boolean goodCreatedBefore = false;\r
-                               boolean goodCreatedSince = false;\r
-                               boolean goodChangedBefore = false;\r
-                               boolean goodChangedSince = false;\r
-                               boolean goodContains = false;\r
-                                       \r
-                               if (!Global.createdBeforeFilter.hasSelection())\r
-                                       goodCreatedBefore = true;\r
-                               else\r
-                                       goodCreatedBefore = Global.createdBeforeFilter.check(n);\r
+               }\r
+               \r
+               // Begin filtering results\r
+               if (goodStatus)\r
+                       goodNotebook = filterByNotebook(n.getNotebookGuid());\r
+               if (goodNotebook) \r
+                       goodTag = filterByTag(n.getTagGuids());\r
+               if (goodTag) {\r
+                       boolean goodCreatedBefore = false;\r
+                       boolean goodCreatedSince = false;\r
+                       boolean goodChangedBefore = false;\r
+                       boolean goodChangedSince = false;\r
+                       boolean goodContains = false;\r
+                       if (!Global.createdBeforeFilter.hasSelection())\r
+                               goodCreatedBefore = true;\r
+                       else\r
+                               goodCreatedBefore = Global.createdBeforeFilter.check(n);\r
                                \r
-                               if (!Global.createdSinceFilter.hasSelection())\r
-                                       goodCreatedSince = true;\r
-                               else\r
-                                       goodCreatedSince = Global.createdSinceFilter.check(n);\r
+                       if (!Global.createdSinceFilter.hasSelection())\r
+                               goodCreatedSince = true;\r
+                       else\r
+                               goodCreatedSince = Global.createdSinceFilter.check(n);\r
                                \r
-                               if (!Global.changedBeforeFilter.hasSelection())\r
-                                       goodChangedBefore = true;\r
-                               else\r
-                                       goodChangedBefore = Global.changedBeforeFilter.check(n);\r
-                                       if (!Global.changedSinceFilter.hasSelection())\r
-                                       goodChangedSince = true;\r
-                               else\r
-                                       goodChangedSince = Global.changedSinceFilter.check(n);\r
-                               if (!Global.containsFilter.hasSelection())\r
-                                       goodContains = true;\r
-                               else\r
-                                       goodContains = Global.containsFilter.check(conn.getNoteTable(), n);\r
-                                       \r
-                               if (goodCreatedSince && goodCreatedBefore && goodChangedSince && goodChangedBefore && goodContains)\r
-                                       return true;\r
-                       }\r
+                       if (!Global.changedBeforeFilter.hasSelection())\r
+                               goodChangedBefore = true;\r
+                       else\r
+                               goodChangedBefore = Global.changedBeforeFilter.check(n);\r
+                               if (!Global.changedSinceFilter.hasSelection())\r
+                               goodChangedSince = true;\r
+                       else\r
+                               goodChangedSince = Global.changedSinceFilter.check(n);\r
+                       if (!Global.containsFilter.hasSelection())\r
+                               goodContains = true;\r
+                       else\r
+                               goodContains = Global.containsFilter.check(conn.getNoteTable(), n);\r
+                               \r
+                       if (goodCreatedSince && goodCreatedBefore && goodChangedSince && goodChangedBefore && goodContains)\r
+                               return true;\r
                }       \r
                return false;\r
        }\r
        \r
-       // Load the note index based upon what the user wants.\r
-       public void loadNotesIndex() {\r
-               logger.log(logger.EXTREME, "Entering ListManager.loadNotesIndex()");\r
+       // Trigger a recount of counters\r
+       public void refreshCounters() {\r
+//             refreshCounters= false;\r
+               if (!refreshCounters)\r
+                       return;\r
+               refreshCounters = false;\r
                tagCounterRunner.abortCount = true;\r
                notebookCounterRunner.abortCount = true;\r
                trashCounterRunner.abortCount = true;\r
+               countNotebookResults(getNoteIndex());\r
+               countTagResults(getNoteIndex());\r
+               reloadTrashCount();\r
+\r
+       }\r
+       // Load the note index based upon what the user wants.\r
+       public void loadNotesIndex() {\r
+               logger.log(logger.EXTREME, "Entering ListManager.loadNotesIndex()");\r
                \r
                List<Note> matches;\r
                if (enSearchChanged || getMasterNoteIndex() == null)\r
@@ -905,38 +994,35 @@ public class ListManager  {
                        if (filterRecord(matches.get(i)))\r
                                getNoteIndex().add(matches.get(i));\r
                }\r
-               countNotebookResults(getNoteIndex());\r
-               countTagResults(getNoteIndex());\r
+               refreshCounters = true;\r
                enSearchChanged = false;\r
-               reloadTrashCount();\r
                logger.log(logger.EXTREME, "Leaving ListManager.loadNotesIndex()");\r
        }\r
        public void countNotebookResults(List<Note> index) {\r
                logger.log(logger.EXTREME, "Entering ListManager.countNotebookResults()");\r
-               if (!Global.mimicEvernoteInterface) {\r
+               notebookCounterRunner.abortCount = true;\r
+               if (!Global.mimicEvernoteInterface) \r
                        notebookCounterRunner.setNoteIndex(index);\r
-                       notebookCounterRunner.release(CounterRunner.NOTEBOOK);\r
-               } else {\r
+               else \r
                        notebookCounterRunner.setNoteIndex(getMasterNoteIndex());\r
-                       notebookCounterRunner.release(CounterRunner.NOTEBOOK_ALL);\r
-               }\r
+               notebookCounterRunner.release(CounterRunner.NOTEBOOK);\r
                logger.log(logger.EXTREME, "Leaving ListManager.countNotebookResults()");\r
        }\r
        public void countTagResults(List<Note> index) {\r
                logger.log(logger.EXTREME, "Entering ListManager.countTagResults");\r
-               if (!Global.tagBehavior().equalsIgnoreCase("DoNothing")) {\r
+               trashCounterRunner.abortCount = true;\r
+               if (!Global.tagBehavior().equalsIgnoreCase("DoNothing")) \r
                        tagCounterRunner.setNoteIndex(index);\r
-                       tagCounterRunner.release(CounterRunner.TAG);\r
-               } else {\r
-                       tagCounterRunner.setNoteIndex(null);\r
-                       tagCounterRunner.release(CounterRunner.TAG_ALL);\r
-               }\r
+               else\r
+                       tagCounterRunner.setNoteIndex(getMasterNoteIndex());\r
+               tagCounterRunner.release(CounterRunner.TAG);\r
                logger.log(logger.EXTREME, "Leaving ListManager.countTagResults()");\r
        }\r
        // Update the count of items in the trash\r
        public void reloadTrashCount() {\r
                logger.log(logger.EXTREME, "Entering ListManager.reloadTrashCount");\r
-               trashCounterRunner.setNoteIndex(getNoteIndex());\r
+               trashCounterRunner.abortCount = true;\r
+               trashCounterRunner.setNoteIndex(getMasterNoteIndex());\r
                trashCounterRunner.release(CounterRunner.TRASH);\r
                logger.log(logger.EXTREME, "Leaving ListManager.reloadTrashCount");\r
        }       \r
@@ -963,15 +1049,26 @@ public class ListManager  {
                if (selectedTags.size() == 0) \r
                        return true;\r
                \r
-               for (int i=0; i<selectedTags.size(); i++) {\r
-                       String selectedGuid = selectedTags.get(i);\r
-                       if (noteTags.contains(selectedGuid))\r
-                                       return true;\r
+               if (!Global.anyTagSelectionMatch()) {\r
+                       for (int i=0; i<selectedTags.size(); i++) {\r
+                               String selectedGuid = selectedTags.get(i);\r
+                               if (!noteTags.contains(selectedGuid))\r
+                                       return false;\r
+                       }\r
+                       return true;\r
+               } else {\r
+                       for (int i=0; i<selectedTags.size(); i++) {\r
+                               String selectedGuid = selectedTags.get(i);\r
+                               if (noteTags.contains(selectedGuid))\r
+                                               return true;\r
+                       }\r
+                       return false;\r
                }\r
-               return false;\r
        }\r
 \r
-       \r
+       public void setNoteSynchronized(String guid, boolean value) {\r
+               getNoteTableModel().updateNoteSyncStatus(guid, value);\r
+       }\r
        \r
        public void updateNoteTitleColor(String guid, Integer color) {\r
                noteModel.updateNoteTitleColor(guid, color);\r