OSDN Git Service

Added more thumbnail logic & correct search bugs.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / utilities / ListManager.java
index e580d5c..1e964ed 100644 (file)
@@ -34,6 +34,8 @@ import com.evernote.edam.type.SavedSearch;
 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
@@ -96,9 +98,11 @@ 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
-    QThread                            saveThread;\r
+    public SaveRunner                          saveRunner;                                     // Thread used to save content.  Used because the xml conversion is slowwwww\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
@@ -148,7 +152,10 @@ public class ListManager  {
                saveRunner = new SaveRunner("saveRunner.log", Global.getDatabaseUrl(), 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
                loadNoteTitleColors();\r
                                \r
        }\r
@@ -382,7 +389,32 @@ 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
@@ -802,6 +834,88 @@ public class ListManager  {
        //**  Load and filter the note index\r
        //************************************************************************************\r
        //************************************************************************************\r
+       \r
+       public void noteDownloaded(Note n) {\r
+               boolean found = false;\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(n.getGuid())) {\r
+                               getMasterNoteIndex().set(i,n);\r
+                               found = true;\r
+                               i=getMasterNoteIndex().size();\r
+                       }\r
+               }\r
+               \r
+               if (!found)\r
+                       getMasterNoteIndex().add(n);\r
+               \r
+               for (int i=0; i<getNoteIndex().size(); i++) {\r
+                       if (getNoteIndex().get(i).getGuid().equals(n.getGuid())) {\r
+                               if (filterRecord(getNoteIndex().get(i)))\r
+                                       getNoteIndex().add(n);\r
+                               getNoteIndex().remove(i);\r
+                               i=getNoteIndex().size();\r
+                       }\r
+               }\r
+               \r
+               if (filterRecord(n))\r
+                       getNoteIndex().add(n);\r
+               \r
+       }\r
+       // Check if a note matches the currently selected notebooks, tags, or attribute searches.\r
+       public boolean filterRecord(Note n) {\r
+                               \r
+               boolean goodNotebook = false;\r
+               boolean goodTag = false;\r
+               boolean goodStatus = false;\r
+                       \r
+               // Check note status\r
+               if (!n.isActive() && Global.showDeleted)\r
+                       return true;\r
+               else {\r
+                       if (n.isActive() && !Global.showDeleted)\r
+                               goodStatus = true;\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
+                               \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
@@ -809,8 +923,6 @@ public class ListManager  {
                notebookCounterRunner.abortCount = true;\r
                trashCounterRunner.abortCount = true;\r
                \r
-               List<Note> index = new ArrayList<Note>();\r
-               \r
                List<Note> matches;\r
                if (enSearchChanged || getMasterNoteIndex() == null)\r
                        matches = enSearch.matchWords();\r
@@ -820,65 +932,14 @@ public class ListManager  {
                if (matches == null)\r
                        matches = getMasterNoteIndex();\r
                \r
+               setNoteIndex(new ArrayList<Note>());\r
                for (int i=0; i<matches.size(); i++) {\r
-                       Note n = matches.get(i);\r
-                       boolean goodNotebook = false;\r
-                       boolean goodTag = false;\r
-                       boolean goodStatus = false;\r
-                       \r
-                       // Check note status\r
-                       if (!n.isActive() && Global.showDeleted)\r
-                               index.add(n);\r
-                       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
-                                       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
-\r
-                                       if (!Global.changedSinceFilter.hasSelection())\r
-                                               goodChangedSince = true;\r
-                                       else\r
-                                               goodChangedSince = Global.changedSinceFilter.check(n);\r
-\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
-                                               index.add(n);\r
-                               }\r
-                       }\r
-\r
-               }       \r
-               countNotebookResults(index);\r
-               countTagResults(index);\r
+                       if (filterRecord(matches.get(i)))\r
+                               getNoteIndex().add(matches.get(i));\r
+               }\r
+               countNotebookResults(getNoteIndex());\r
+               countTagResults(getNoteIndex());\r
                enSearchChanged = false;\r
-               setNoteIndex(index);\r
                reloadTrashCount();\r
                logger.log(logger.EXTREME, "Leaving ListManager.loadNotesIndex()");\r
        }\r
@@ -942,7 +1003,9 @@ public class ListManager  {
                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