OSDN Git Service

Alter sync logic to examine new notes as they arrive rather than doing a full reload...
authorRandy Baumgarte <randy@fbn.cx>
Sun, 22 Aug 2010 11:15:14 +0000 (07:15 -0400)
committerRandy Baumgarte <randy@fbn.cx>
Sun, 22 Aug 2010 22:50:02 +0000 (18:50 -0400)
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/gui/NoteTableModel.java
src/cx/fbn/nevernote/signals/NoteSignal.java
src/cx/fbn/nevernote/threads/SyncRunner.java
src/cx/fbn/nevernote/utilities/ListManager.java

index 6b8615c..279e92b 100644 (file)
@@ -803,15 +803,14 @@ public class NeverNote extends QMainWindow{
         syncRunner.noteIndexSignal.listChanged.connect(this, "noteIndexUpdated(boolean)");
         syncRunner.noteSignal.quotaChanged.connect(this, "updateQuotaBar()");
         
-//             syncRunner.syncSignal.setSequenceDate.connect(this,"setSequenceDate(long)");
                syncRunner.syncSignal.saveUploadAmount.connect(this,"saveUploadAmount(long)");
-//             syncRunner.syncSignal.setUpdateSequenceNumber.connect(this,"setUpdateSequenceNumber(int)");
                syncRunner.syncSignal.saveUserInformation.connect(this,"saveUserInformation(User)");
                syncRunner.syncSignal.saveEvernoteUpdateCount.connect(this,"saveEvernoteUpdateCount(int)");
                
                syncRunner.noteSignal.guidChanged.connect(this, "noteGuidChanged(String, String)");
                syncRunner.noteSignal.noteChanged.connect(this, "invalidateNoteCache(String, String)");
                syncRunner.resourceSignal.resourceGuidChanged.connect(this, "noteResourceGuidChanged(String,String,String)");
+               syncRunner.noteSignal.noteDownloaded.connect(listManager, "noteDownloaded(Note)");
                
                syncRunner.syncSignal.refreshLists.connect(this, "refreshLists()");
        }
@@ -2908,8 +2907,9 @@ public class NeverNote extends QMainWindow{
                                return;
                }
                
-               // If tihs wasn't already marked as unsynchronized, then we need to update the table
-       listManager.getUnsynchronizedNotes().add(currentNoteGuid);
+               // If this wasn't already marked as unsynchronized, then we need to update the table
+               listManager.getNoteTableModel().updateNoteSyncStatus(currentNoteGuid, false);
+/*     listManager.getUnsynchronizedNotes().add(currentNoteGuid);
        for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
                QModelIndex modelIndex =  listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
                if (modelIndex != null) {
@@ -2921,7 +2921,7 @@ public class NeverNote extends QMainWindow{
                        }
                }
        }
-       
+ */    
                logger.log(logger.EXTREME, "Leaving NeverNote.setNoteDirty()");
     }
     private void saveNote() {
@@ -3290,11 +3290,11 @@ public class NeverNote extends QMainWindow{
        na.setLongitude(0.0);
        na.setAltitude(0.0);
        newNote.setAttributes(new NoteAttributes());
-
+               newNote.setTagGuids(new ArrayList<String>());
+               newNote.setTagNames(new ArrayList<String>());
+       
        // If new notes are to be created based upon the selected tags, then we need to assign the tags
        if (Global.newNoteWithSelectedTags()) { 
-               newNote.setTagGuids(new ArrayList<String>());
-               newNote.setTagNames(new ArrayList<String>());
                List<QTreeWidgetItem> selections = tagTree.selectedItems();
                QTreeWidgetItem currentSelection;
                for (int i=0; i<selections.size(); i++) {
@@ -3307,7 +3307,7 @@ public class NeverNote extends QMainWindow{
        conn.getNoteTable().addNote(newNote, true);
        listManager.getUnsynchronizedNotes().add(newNote.getGuid());
        listManager.addNote(newNote);
-       noteTableView.insertRow(newNote, true, -1);
+//     noteTableView.insertRow(newNote, true, -1);
        
        currentNote = newNote;
        currentNoteGuid = currentNote.getGuid();
@@ -4115,14 +4115,17 @@ public class NeverNote extends QMainWindow{
                synchronizeAnimationTimer.stop();
                synchronizeButton.setIcon(synchronizeAnimation.get(0));
                saveNote();
+               if (currentNote == null) {
+                       currentNote = conn.getNoteTable().getNote(currentNoteGuid, false, false, false, false, true);
+               }
                listManager.setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());
-               listManager.reloadIndexes();
-               noteIndexUpdated(true);
+               noteIndexUpdated(false);
                noteTableView.selectionModel().blockSignals(true);
                scrollToGuid(currentNoteGuid);
                noteTableView.selectionModel().blockSignals(false);
                refreshEvernoteNote(false);
                scrollToGuid(currentNoteGuid);
+               waitCursor(false);
                setMessage(tr("Synchronization Complete"));
                logger.log(logger.MEDIUM, "Sync complete.");
        }   
index 95c64a0..195d019 100644 (file)
@@ -299,7 +299,7 @@ public class NoteTableModel extends QAbstractTableModel {
                        if (getMasterNoteIndex().get(i).getGuid() != null && getMasterNoteIndex().get(i).getGuid().equals(oldGuid)) {\r
                                getMasterNoteIndex().get(i).setGuid(newGuid);\r
                                QModelIndex idx = createIndex(i, Global.noteTableGuidPosition, nativePointer());\r
-                               setData(idx, new Long(getMasterNoteIndex().get(i).getGuid()), Qt.ItemDataRole.EditRole); \r
+                               setData(idx, new String(getMasterNoteIndex().get(i).getGuid()), Qt.ItemDataRole.EditRole); \r
                                i=getMasterNoteIndex().size()+1;\r
                        }\r
                }\r
@@ -341,7 +341,6 @@ public class NoteTableModel extends QAbstractTableModel {
                                getMasterNoteIndex().get(i).getAttributes().setAltitudeIsSet(true);\r
                                QModelIndex idx = createIndex(i, Global.noteTableAuthorPosition, nativePointer());\r
                                setData(idx, author, Qt.ItemDataRole.EditRole); \r
-\r
                                i = getMasterNoteIndex().size();\r
                        }       \r
                }\r
@@ -375,13 +374,50 @@ public class NoteTableModel extends QAbstractTableModel {
                }\r
        }\r
 \r
+       public void updateNoteSyncStatus(String guid, boolean sync) {\r
+               \r
+               boolean found = false;\r
+               for (int i=0; i<unsynchronizedNotes.size(); i++) {                      \r
+                       // If the note is now synchronized, but it is in the unsynchronized list, remove it\r
+                       if (unsynchronizedNotes.get(i).equalsIgnoreCase(guid) && sync) {\r
+                               unsynchronizedNotes.remove(i);\r
+                               found = true;\r
+                               i=unsynchronizedNotes.size();\r
+                       }\r
+                       \r
+                       // If the note is not synchronized, but it is already in the unsynchronized list, do nothing\r
+                       if (unsynchronizedNotes.get(i).equalsIgnoreCase(guid) && sync) {\r
+                               found = true;\r
+                               i=unsynchronizedNotes.size();\r
+                       }\r
+               }\r
+               \r
+               // If we've gotten through the entire list, then we consider it synchronized.  If this is \r
+               // wrong, add it to the list.\r
+               if (!sync && !found) \r
+                       unsynchronizedNotes.add(guid);\r
+               \r
+               // Now we need to go through the table & update it\r
+               for (int i=0; i<getMasterNoteIndex().size(); i++) {\r
+                       if (getMasterNoteIndex().get(i).getGuid().equals(guid)) {\r
+                               QModelIndex idx = createIndex(i, Global.noteTableSynchronizedPosition, nativePointer());\r
+                               String value;\r
+                               if (!sync)\r
+                                       value = tr("false");\r
+                               else\r
+                                       value = tr("true");\r
+                               setData(idx, value, Qt.ItemDataRole.EditRole); \r
+                               return;\r
+                       }       \r
+               }\r
+       }\r
        \r
        public void addNote(Note n) {\r
-               beginInsertRows(null, 0, 1);\r
                getNoteIndex().add(n);\r
                getMasterNoteIndex().add(n);\r
                proxyModel.addGuid(n.getGuid());\r
-               endInsertRows();\r
+               proxyModel.invalidate();\r
+//             proxyModel.filter();\r
        }\r
        \r
        \r
index 4c2016f..fad4b2b 100644 (file)
@@ -43,6 +43,7 @@ public class NoteSignal extends QSignalEmitter {
        public Signal1<Note>                            noteAdded = new Signal1<Note>();\r
        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
 }\r
 \r
 \r
index 5ed5137..9b21fc1 100644 (file)
@@ -488,9 +488,6 @@ public class SyncRunner extends QObject implements Runnable {
                                        logger.log(logger.EXTREME, "Active dirty note found - non new");\r
                                        if (enNote.getUpdateSequenceNum() > 0) {\r
                                                enNote = getNoteContent(enNote);\r
-                                               System.out.println("--------");\r
-                                               System.out.println("Note:" +enNote);\r
-                                               System.out.println("--------");\r
                                                logger.log(logger.MEDIUM, "Updating note : "+ enNote.getGuid() +" <title>" +enNote.getTitle()+"</title>");\r
                                                enNote = noteStore.updateNote(authToken, enNote);\r
                                        } else { \r
@@ -1043,6 +1040,7 @@ public class SyncRunner extends QObject implements Runnable {
                                                logger.log(logger.EXTREME, "Saving Note");\r
                                                conn.getNoteTable().syncNote(n, false);\r
                                                noteSignal.noteChanged.emit(n.getGuid(), null);   // Signal to ivalidate note cache\r
+                                               noteSignal.noteDownloaded.emit(n, true);                // Signal to add note to index\r
                                                logger.log(logger.EXTREME, "Note Saved");\r
                                                if (fullSync && n.getResources() != null) {\r
                                                        for (int q=0; q<n.getResources().size() && keepRunning; q++) {\r
index e580d5c..e46e398 100644 (file)
@@ -802,6 +802,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
+                       // 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
+                                       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
+               }       \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 +891,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 +900,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