currentNoteGuid="";
currentNoteGuid = Global.getLastViewedNoteGuid();
+ if (currentNoteGuid.equals(""))
+ currentNote = new Note();
historyGuids = new ArrayList<String>();
historyPosition = 0;
fromHistory = false;
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();
}
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++) {
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);
}
}
}
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
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);
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);
}
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
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
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
}\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
idle=false;\r
return;\r
}\r
+ conn.getNoteTable().dumpDirtyNotes(); // Debugging statement\r
idle=false;\r
error=false;\r
if (syncNeeded) {\r
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
//* 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
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
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
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
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
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
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
}\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
// 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
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
//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
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