OSDN Git Service

- Upgraded version to 1.5
authorRandy Baumgarte <randy@fbn.cx>
Sun, 3 Feb 2013 17:35:44 +0000 (12:35 -0500)
committerRandy Baumgarte <randy@fbn.cx>
Sun, 3 Feb 2013 17:35:44 +0000 (12:35 -0500)
- Correct delete bug that could cause repeated deletion failures on Evernote's serverv.
- Correct but where tag changes could cause notes to be marked as unsynchronized incorrectly.
- Correct possible null pointer in note list headers.
- Correct null pointer issue on startup.

src/cx/fbn/nevernote/Global.java
src/cx/fbn/nevernote/NeverNote.java
src/cx/fbn/nevernote/gui/NoteTableModel.java
src/cx/fbn/nevernote/gui/TagTreeWidget.java
src/cx/fbn/nevernote/sql/DeletedTable.java
src/cx/fbn/nevernote/sql/NoteTable.java
src/cx/fbn/nevernote/sql/NoteTagsTable.java
src/cx/fbn/nevernote/threads/SyncRunner.java
src/cx/fbn/nevernote/utilities/ListManager.java

index 4e6083a..89b5966 100644 (file)
@@ -63,8 +63,8 @@ import cx.fbn.nevernote.utilities.Pair;
 \r
 public class Global {\r
        // Set current version and the known versions.\r
-       public static String version = "1.4";\r
-       public static String[] validVersions = {"1.4", "1.3", "1.2", "1.1", "1.0", "0.99", "0.98", "0.97", "0.96"};\r
+       public static String version = "1.5";\r
+       public static String[] validVersions = {"1.5", "1.4", "1.3", "1.2", "1.1", "1.0", "0.99", "0.98", "0.97", "0.96"};\r
     public static String username = ""; \r
     //public static String password = "";     \r
     \r
@@ -213,7 +213,8 @@ public class Global {
                //messageLevel = 1;\r
                setMessageLevel(msglevel);\r
                keepRunning = true;  // Make sure child threads stay running\r
-               disableUploads = disableUploads();  // Should we upload anything?  Normally true.\r
+               disableUploads = disableUploads();  // Should we upload anything?  Normally false.\r
+               //disableUploads = true;  //***** DELETE THIS LINE *******\r
                enableCarriageReturnFix = enableCarriageReturnFix();  // Enable test fix?\r
                enableHTMLEntitiesFix = enableHtmlEntitiesFix();  // Enable test fix?\r
                \r
index ff0bf46..681df70 100644 (file)
@@ -692,6 +692,8 @@ public class NeverNote extends QMainWindow{
 
                currentNoteGuid="";
                currentNoteGuid = Global.getLastViewedNoteGuid();
+               if (currentNoteGuid.equals(""))
+                       currentNote = new Note();
        historyGuids = new ArrayList<String>();
        historyPosition = 0;
        fromHistory = false;
@@ -1223,8 +1225,10 @@ public class NeverNote extends QMainWindow{
                                QApplication.setOverrideCursor(new QCursor(Qt.CursorShape.WaitCursor));
                }
                else {
-                       while (QApplication.overrideCursor() != null)
+                       if (QApplication.overrideCursor() != null)
                                QApplication.restoreOverrideCursor();
+                       else
+                               QApplication.setOverrideCursor(new QCursor(Qt.CursorShape.ArrowCursor));
                }
                listManager.refreshCounters();
        }
@@ -2337,7 +2341,7 @@ public class NeverNote extends QMainWindow{
                                newTags.add(tags.get(i));
                }
                
-               listManager.saveNoteTags(guid, tags);
+               listManager.saveNoteTags(guid, tags, true);
                listManager.countTagResults(listManager.getNoteIndex());
                StringBuffer names = new StringBuffer("");
                for (int i=0; i<tags.size(); i++) {
@@ -2489,7 +2493,7 @@ public class NeverNote extends QMainWindow{
                                        String noteGuid = noteGuids.get(j);
                                        conn.getNoteTable().noteTagsTable.deleteNoteTag(noteGuid);
                                        if (!conn.getNoteTable().noteTagsTable.checkNoteNoteTags(noteGuid, newGuid))
-                                               conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, newGuid);
+                                               conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, newGuid, true);
                                }
                        }
                }
@@ -3756,6 +3760,7 @@ public class NeverNote extends QMainWindow{
        fromHistory = false;
        scrollToGuid(currentNoteGuid);
        refreshEvernoteNote(true);
+       waitCursor(false);
                logger.log(logger.HIGH, "Leaving NeverNote.noteTableSelection");
     }    
        // Trigger a refresh when the note db has been updated
@@ -3817,9 +3822,10 @@ public class NeverNote extends QMainWindow{
                        currentNote = null;
                        browserWindow.clear();
                        browserWindow.setDisabled(true);
+                       waitCursor(false);
                } 
                
-               if (Global.showDeleted && listManager.getNotebookIndex().size() > 0 && saveCurrentNoteGuid.equals("")) {
+               if (Global.showDeleted && listManager.getNoteIndex().size() > 0 && saveCurrentNoteGuid.equals("")) {
                        currentNoteGuid = listManager.getNoteIndex().get(0).getGuid();
                        saveCurrentNoteGuid = currentNoteGuid;
                        refreshEvernoteNote(true);
@@ -4514,8 +4520,10 @@ public class NeverNote extends QMainWindow{
                browserWindow.loadingData(true);
 
                currentNote = conn.getNoteTable().getNote(currentNoteGuid, true,true,false,false,true);
-               if (currentNote == null) 
+               if (currentNote == null) {
+                       waitCursor(false);
                        return;
+               }
                loadNoteBrowserInformation(browserWindow, currentNoteGuid, currentNote);
        }
 
index c92e927..cfa825f 100644 (file)
@@ -217,7 +217,7 @@ public class NoteTableModel extends QAbstractTableModel {
                if (role != Qt.ItemDataRole.DisplayRole)\r
                        return null;\r
                \r
-               if (orientation == Qt.Orientation.Horizontal && section < headers.length) { \r
+               if (orientation == Qt.Orientation.Horizontal && section < headers.length && section >=0) { \r
                        return headers[section];\r
                }\r
                return null;\r
index d8c8378..8f3910d 100644 (file)
@@ -388,7 +388,7 @@ public class TagTreeWidget extends QTreeWidget {
                                if (!db.getNoteTable().noteTagsTable.checkNoteNoteTags(element.trim(), parent.text(2)) &&\r
                                                (notebookGuid == null || n.getNotebookGuid().equalsIgnoreCase(notebookGuid) || notebookGuid.equals("")) &&\r
                                                !db.getNotebookTable().isReadOnly(n.getNotebookGuid())) {\r
-                                       db.getNoteTable().noteTagsTable.saveNoteTag(element.trim(), parent.text(2));\r
+                                       db.getNoteTable().noteTagsTable.saveNoteTag(element.trim(), parent.text(2), true);\r
                                        noteSignal.tagsAdded.emit(element.trim(), parent.text(2));\r
                                }\r
                        }\r
index 1fbbcdf..c672286 100644 (file)
@@ -82,8 +82,8 @@ public class DeletedTable {
                query.bindValue(":guid", guid);\r
                query.bindValue(":type", type);\r
                if (!query.exec()) {\r
-                       logger.log(logger.MEDIUM, "Expunge deleted items failed.");\r
-                       logger.log(logger.MEDIUM, query.lastError());\r
+                       logger.log(logger.LOW, "Expunge deleted items failed.");\r
+                       logger.log(logger.LOW, query.lastError());\r
                }\r
        }\r
        public List<DeletedItemRecord> getAllDeleted() {\r
index a949425..3df5ac4 100644 (file)
@@ -173,7 +173,7 @@ public class NoteTable {
                // Save the note tags\r
                if (n.getTagGuids() != null) {\r
                        for (int i=0; i<n.getTagGuids().size(); i++) \r
-                               noteTagsTable.saveNoteTag(n.getGuid(), n.getTagGuids().get(i));\r
+                               noteTagsTable.saveNoteTag(n.getGuid(), n.getTagGuids().get(i), isDirty);\r
                }\r
                logger.log(logger.EXTREME, "Leaving addNote");\r
        } \r
@@ -1689,8 +1689,19 @@ public class NoteTable {
                return startString+endString;\r
        }\r
 \r
+       public void dumpDirtyNotes() {\r
+               logger.log(logger.LOW, "Dirty Notes: ");\r
+               List<Note>  noteList = this.getDirty();\r
+               for (int i=0; i<noteList.size();i++) {\r
+                       logger.log(logger.LOW, i +" : " +noteList.get(i).getGuid() + " : " +noteList.get(i).getTitle() );\r
+               }\r
+       }\r
+       \r
 }      \r
 \r
 \r
 \r
 \r
+\r
+\r
+\r
index 71c113d..250318c 100644 (file)
@@ -141,7 +141,7 @@ public class NoteTagsTable {
                return false;\r
        }\r
        // Save Note Tags\r
-       public void saveNoteTag(String noteGuid, String tagGuid) {\r
+       public void saveNoteTag(String noteGuid, String tagGuid, boolean isDirty) {\r
                boolean check;\r
                NSqlQuery query = new NSqlQuery(db.getConnection());\r
 \r
@@ -159,9 +159,10 @@ public class NoteTagsTable {
                        logger.log(logger.MEDIUM, "NoteTags Table insert failed.");             \r
                        logger.log(logger.MEDIUM, query.lastError());\r
                }\r
-               check = query.prepare("Update Note set isDirty=true where guid=:guid");\r
+               check = query.prepare("Update Note set isDirty=:isDirty where guid=:guid");\r
                if (!check)\r
                        logger.log(logger.EXTREME, "RNoteTagsTable.saveNoteTag prepare has failed.");\r
+               query.bindValue(":isDirty", isDirty);\r
                query.bindValue(":guid", noteGuid);\r
                query.exec();\r
                if (!check) {\r
index 0423de1..9431649 100644 (file)
@@ -32,7 +32,6 @@ import java.util.GregorianCalendar;
 import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.TreeSet;\r
-import java.util.Vector;\r
 import java.util.concurrent.LinkedBlockingQueue;\r
 \r
 import org.apache.http.HttpEntity;\r
@@ -93,7 +92,7 @@ public class SyncRunner extends QObject implements Runnable {
                private DatabaseConnection              conn;\r
                private boolean                                 idle;\r
                public boolean                                  error;\r
-               public volatile Vector<String>  errorSharedNotebooks;\r
+               public volatile List<String>    errorSharedNotebooks;\r
                public volatile HashMap<String,String>  errorSharedNotebooksIgnored;\r
                public volatile boolean                 isConnected;\r
                public volatile boolean                 keepRunning;\r
@@ -118,7 +117,7 @@ public class SyncRunner extends QObject implements Runnable {
                public volatile boolean                                 syncNeeded;\r
                public volatile boolean                                 disableUploads;\r
                public volatile boolean                                 syncDeletedContent;\r
-               private volatile Vector<String>                 dirtyNoteGuids;\r
+               private volatile List<String>                   dirtyNoteGuids;\r
                \r
            public volatile String username = ""; \r
            public volatile String password = ""; \r
@@ -190,7 +189,7 @@ public class SyncRunner extends QObject implements Runnable {
        }\r
        @Override\r
        public void run() {\r
-               errorSharedNotebooks = new Vector<String>();\r
+               errorSharedNotebooks = new ArrayList<String>();\r
                errorSharedNotebooksIgnored = new HashMap<String,String>();\r
                try {\r
                        logger.log(logger.EXTREME, "Starting thread");\r
@@ -204,6 +203,7 @@ public class SyncRunner extends QObject implements Runnable {
                                        idle=false;\r
                                        return;\r
                                }\r
+                               conn.getNoteTable().dumpDirtyNotes();  // Debugging statement\r
                                idle=false;\r
                                error=false;\r
                                if (syncNeeded) {\r
@@ -227,6 +227,8 @@ public class SyncRunner extends QObject implements Runnable {
                                        status.message.emit(tr("Error synchronizing - see log for details."));\r
                                }\r
                                logger.log(logger.LOW, "Dirty Notes After Sync: " +new Integer(conn.getNoteTable().getDirtyCount()).toString());\r
+                               conn.getNoteTable().dumpDirtyNotes();\r
+                               logger.log(logger.LOW, "---");\r
                        }\r
                }       \r
                catch (InterruptedException e1) {\r
@@ -412,7 +414,8 @@ public class SyncRunner extends QObject implements Runnable {
                        //* Sync linked/shared notebooks \r
                        //*****************************************\r
                        //syncLinkedNotebooks();\r
-                       conn.getNoteTable().getDirty();\r
+                       //conn.getNoteTable().getDirty();\r
+                       //disableUploads = true;   /// DELETE THIS LINE!!!!\r
                        if (!disableUploads) {\r
                                logger.log(logger.EXTREME, "Uploading changes");\r
                                // Synchronize remote changes\r
@@ -478,33 +481,33 @@ public class SyncRunner extends QObject implements Runnable {
                        try {\r
                                if (expunged.get(i).type.equalsIgnoreCase("TAG")) {\r
                                        logger.log(logger.EXTREME, "Tag expunged");\r
+                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "TAG"); \r
                                        updateSequenceNumber = noteStore.expungeTag(authToken, expunged.get(i).guid);\r
                                        conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
                                        conn.getSyncTable().setLastSequenceDate(sequenceDate);\r
-                                       conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
-                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "TAG");                                 \r
+                                       conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);                              \r
                                }\r
                                if      (expunged.get(i).type.equalsIgnoreCase("NOTEBOOK")) {\r
                                        logger.log(logger.EXTREME, "Notebook expunged");\r
+                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "NOTEBOOK");\r
                                        updateSequenceNumber = noteStore.expungeNotebook(authToken, expunged.get(i).guid);\r
                                        conn.getSyncTable().setLastSequenceDate(sequenceDate);\r
                                        conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
-                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "NOTEBOOK");\r
                                }\r
                                if (expunged.get(i).type.equalsIgnoreCase("NOTE")) {\r
                                        logger.log(logger.EXTREME, "Note expunged");\r
+                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "NOTE");\r
                                        updateSequenceNumber = noteStore.deleteNote(authToken, expunged.get(i).guid);\r
                                        refreshNeeded = true;\r
                                        conn.getSyncTable().setLastSequenceDate(sequenceDate);\r
                                        conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
-                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "NOTE");\r
                                }\r
                                if (expunged.get(i).type.equalsIgnoreCase("SAVEDSEARCH")) {\r
                                        logger.log(logger.EXTREME, "saved search expunged");\r
+                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "SAVEDSEARCH");\r
                                        updateSequenceNumber = noteStore.expungeSearch(authToken, expunged.get(i).guid);\r
                                        conn.getSyncTable().setLastSequenceDate(sequenceDate);\r
                                        conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
-                                       conn.getDeletedTable().expungeDeletedItem(expunged.get(i).guid, "SAVEDSEARCH");\r
                                }\r
                        } catch (EDAMUserException e) {\r
                                logger.log(logger.LOW, "EDAM User Excepton in syncExpunged: " +expunged.get(i).guid);   // This can happen if we try to delete a deleted note\r
@@ -543,6 +546,11 @@ public class SyncRunner extends QObject implements Runnable {
                        Note enNote = notes.get(i);\r
                        try {\r
                                if (enNote.getUpdateSequenceNum() > 0 && (enNote.isActive() == false || enNote.getDeleted() > 0)) {\r
+                                       // Check that the note is valid.  \r
+                                       if (enNote.isActive() == true || enNote.getDeleted() == 0) {\r
+                                               conn.getNoteTable().deleteNote(enNote.getGuid());\r
+                                               enNote = conn.getNoteTable().getNote(enNote.getGuid(), false, false, false, false, false);\r
+                                       }\r
                                        if (syncDeletedContent) {\r
                                                logger.log(logger.EXTREME, "Deleted note found & synch content selected");\r
                                                Note delNote = conn.getNoteTable().getNote(enNote.getGuid(), true, true, true, true, true);\r
@@ -563,7 +571,7 @@ public class SyncRunner extends QObject implements Runnable {
                                        conn.getSyncTable().setUpdateSequenceNumber(updateSequenceNumber);\r
                                }                               \r
                        } catch (EDAMUserException e) {\r
-                               //logger.log(logger.LOW, "*** EDAM User Excepton syncLocalNotes "+e);\r
+                               logger.log(logger.LOW, "*** EDAM User Excepton syncLocalNotes "+e);\r
                                //status.message.emit("Error sending local note: " +e.getParameter());\r
                                //logger.log(logger.LOW, e.toString()); \r
                                //error = true;\r
@@ -573,7 +581,7 @@ public class SyncRunner extends QObject implements Runnable {
                                logger.log(logger.LOW, e.toString());           \r
                                error = true;\r
                        } catch (EDAMNotFoundException e) {\r
-                               //logger.log(logger.LOW, "*** EDAM Not Found Excepton syncLocalNotes " +e);\r
+                               logger.log(logger.LOW, "*** EDAM Not Found Excepton syncLocalNotes " +e);\r
                                //status.message.emit("Error deleting local note: " +e +" - Continuing");\r
                                //logger.log(logger.LOW, e.toString());         \r
                                //error = true;\r
@@ -1005,7 +1013,7 @@ public class SyncRunner extends QObject implements Runnable {
                logger.log(logger.HIGH, "Entering SyncRunner.syncRemoteToLocal");\r
 \r
                List<Note> dirtyNotes = conn.getNoteTable().getDirty();\r
-               dirtyNoteGuids = new Vector<String>();\r
+               dirtyNoteGuids = new ArrayList<String>();\r
                for (int i=0; i<dirtyNotes.size() && keepRunning; i++) {\r
                        dirtyNoteGuids.add(dirtyNotes.get(i).getGuid());\r
                }\r
@@ -1104,7 +1112,10 @@ public class SyncRunner extends QObject implements Runnable {
                                        conn.getNoteTable().updateNoteSequence(guid.get(i), 0);\r
                                        notebookGuid = localNote.getNotebookGuid();\r
                                }\r
-                               if (!conn.getNotebookTable().isNotebookLocal(notebookGuid)) {\r
+                               // If the note is in a local notebook (which means we moved it) or if the \r
+                               // note returned is null (which means it is already deleted or flagged expunged) \r
+                               // we delete it.\r
+                               if (!conn.getNotebookTable().isNotebookLocal(notebookGuid) || localNote == null) {\r
                                        logger.log(logger.EXTREME, "Expunging local note from database");\r
                                        conn.getNoteTable().expungeNote(guid.get(i), true, false);\r
                                }\r
@@ -1256,8 +1267,17 @@ public class SyncRunner extends QObject implements Runnable {
        }\r
        // Sync remote notes\r
        private void syncRemoteNotes(Client noteStore, List<Note> note, boolean fullSync, String token) {\r
-               logger.log(logger.EXTREME, "Entering SyncRunner.syncRemoteNotes");\r
+\r
                if (note != null) {\r
+                       \r
+                       logger.log(logger.EXTREME, "Entering SyncRunner.syncRemoteNotes");\r
+                       logger.log(logger.LOW, "Local Dirty Notes: ");\r
+                       logger.log(logger.LOW, "Remote Dirty Notes:");\r
+                       for (int i=0; i<note.size();i++) {\r
+                               logger.log(logger.LOW, i +" : " +note.get(i).getGuid() + " : " +note.get(i).getTitle() );\r
+                       }\r
+                       logger.log(logger.LOW, "---");\r
+                       \r
                        for (int i=0; i<note.size() && keepRunning; i++) {\r
                                Note n = getEvernoteNote(noteStore, note.get(i).getGuid(), true, fullSync, true,true, token);\r
                                syncRemoteNote(n, fullSync, token);\r
@@ -1278,7 +1298,7 @@ public class SyncRunner extends QObject implements Runnable {
                        // are different we move the local copy to a local notebook (making sure\r
                        // to copy all resources) and we accept the new one.                    \r
                        boolean conflictingNote = true;\r
-                       logger.log(logger.EXTREME, "Checking for duplicate note " +n.getGuid());\r
+                       logger.log(logger.EXTREME, "Checking for duplicate note " +n.getGuid() +" : " +n.getTitle());\r
                        if (dirtyNoteGuids != null && dirtyNoteGuids.contains(n.getGuid())) { \r
                                logger.log(logger.EXTREME, "Conflict check beginning");\r
                                conflictingNote = checkForConflict(n);\r
@@ -1379,7 +1399,13 @@ public class SyncRunner extends QObject implements Runnable {
                logger.log(logger.EXTREME, "Checking note sequence number  " +n.getGuid());\r
                Note oldNote = conn.getNoteTable().getNote(n.getGuid(), false, false, false, false, false);\r
                logger.log(logger.EXTREME, "Local/Remote sequence numbers: " +oldNote.getUpdateSequenceNum()+"/"+n.getUpdateSequenceNum());\r
-               if (oldNote.getUpdateSequenceNum() == n.getUpdateSequenceNum())\r
+               logger.log(logger.LOW, "Remote Note Title:" +n.getTitle());\r
+               logger.log(logger.LOW, "Local Note Title:" +oldNote.getTitle());\r
+               if (oldNote.getUpdateSequenceNum() == n.getUpdateSequenceNum()) {\r
+                       return false;\r
+               } \r
+               boolean oldIsDirty = conn.getNoteTable().isNoteDirty(n.getGuid());\r
+               if (!oldIsDirty) \r
                        return false;\r
                return true;\r
        }\r
@@ -1557,6 +1583,15 @@ public class SyncRunner extends QObject implements Runnable {
            //if (authResult != null) {\r
                //user = authResult.getUser(); \r
                //authToken = authResult.getAuthenticationToken(); \r
+           if (user == null || noteStoreUrlBase == null) {\r
+               logger.log(logger.LOW, "Error retrieving user information.  Aborting.");\r
+               System.err.println("Error retrieving user information.");\r
+               isConnected = false;    \r
+                       QMessageBox mb = new QMessageBox(QMessageBox.Icon.Critical, tr("Connection Error"), tr("Error retrieving user information.  Synchronization not complete"));\r
+                       mb.exec();\r
+                       return false;\r
+               \r
+           }\r
                noteStoreUrl = noteStoreUrlBase + user.getShardId();\r
                syncSignal.saveAuthToken.emit(authToken);\r
                syncSignal.saveNoteStore.emit(localNoteStore);\r
@@ -1941,7 +1976,7 @@ public class SyncRunner extends QObject implements Runnable {
                        return;\r
                List<Note> dirtyNotes = conn.getNoteTable().getDirtyLinkedNotes();\r
                if (dirtyNoteGuids == null) \r
-                       dirtyNoteGuids = new Vector<String>();\r
+                       dirtyNoteGuids = new ArrayList<String>();\r
 \r
                for (int i=0; i<dirtyNotes.size() && keepRunning; i++) {\r
                        dirtyNoteGuids.add(dirtyNotes.get(i).getGuid());\r
index 7776d4e..864ec58 100644 (file)
@@ -482,7 +482,7 @@ public class ListManager  {
     //***************************************************************\r
     //***************************************************************\r
        // Save Note Tags\r
-       public void saveNoteTags(String noteGuid, List<String> tags) {\r
+       public void saveNoteTags(String noteGuid, List<String> tags, boolean isDirty) {\r
                logger.log(logger.HIGH, "Entering ListManager.saveNoteTags");\r
                String tagName;\r
                conn.getNoteTable().noteTagsTable.deleteNoteTag(noteGuid);\r
@@ -494,7 +494,7 @@ public class ListManager  {
                        boolean found = false;\r
                        for (int j=0; j<tagIndex.size(); j++) {\r
                                if (tagIndex.get(j).getName().equalsIgnoreCase(tagName)) {\r
-                                       conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, tagIndex.get(j).getGuid());\r
+                                       conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, tagIndex.get(j).getGuid(), isDirty);\r
                                        tagGuids.add(tagIndex.get(j).getGuid());\r
                                        j=tagIndex.size()+1;\r
                                        found = true;\r
@@ -516,7 +516,7 @@ public class ListManager  {
                                nTag.setGuid(randint);\r
                                conn.getTagTable().addTag(nTag, true);\r
                                getTagIndex().add(nTag);\r
-                               conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, nTag.getGuid());\r
+                               conn.getNoteTable().noteTagsTable.saveNoteTag(noteGuid, nTag.getGuid(), isDirty);\r
                                tagGuids.add(nTag.getGuid());\r
                                newTagCreated = true;\r
                        }\r