import java.util.Calendar;\r
import java.util.Date;\r
import java.util.GregorianCalendar;\r
-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
String dburl;\r
String dbpswd;\r
String dbcpswd;\r
- private final HashMap<String,String> ignoreTags;\r
- private final HashMap<String,String> ignoreNotebooks;\r
+ private final TreeSet<String> ignoreTags;\r
+ private final TreeSet<String> ignoreNotebooks;\r
+ private final TreeSet<String> ignoreLinkedNotebooks;\r
\r
\r
\r
userStore = null;\r
authToken = null;\r
disableUploads = false;\r
- ignoreTags = new HashMap<String,String>();\r
- ignoreNotebooks = new HashMap<String,String>();\r
+ ignoreTags = new TreeSet<String>();\r
+ ignoreNotebooks = new TreeSet<String>();\r
+ ignoreLinkedNotebooks = new TreeSet<String>();\r
\r
// setAutoDelete(false);\r
workQueue=new LinkedBlockingQueue<String>(MAX_QUEUED_WAITING);\r
public void run() {\r
try {\r
logger.log(logger.EXTREME, "Starting thread");\r
- conn = new DatabaseConnection(logger, dburl, dbuid, dbpswd, dbcpswd);\r
+ conn = new DatabaseConnection(logger, dburl, dbuid, dbpswd, dbcpswd, 200);\r
while(keepRunning) {\r
String work = workQueue.take();\r
logger.log(logger.EXTREME, "Work found: " +work);\r
ignoreNotebooks.clear();\r
List<String> ignore = conn.getSyncTable().getIgnoreRecords("NOTEBOOK");\r
for (int i=0; i<ignore.size(); i++) \r
- ignoreNotebooks.put(ignore.get(i),"");\r
+ ignoreNotebooks.add(ignore.get(i));\r
+ \r
+ ignore.clear();\r
+ ignore = conn.getSyncTable().getIgnoreRecords("LINKEDNOTEBOOK");\r
+ for (int i=0; i<ignore.size(); i++) \r
+ ignoreLinkedNotebooks.add(ignore.get(i));\r
\r
ignoreTags.clear();\r
ignore = conn.getSyncTable().getIgnoreRecords("TAG");\r
for (int i=0; i<ignore.size(); i++) \r
- ignoreTags.put(ignore.get(i),"");\r
+ ignoreTags.add(ignore.get(i));\r
\r
// Make sure we are connected & should keep running\r
if (isConnected && keepRunning) {\r
}\r
\r
status.message.emit(tr("Cleaning up"));\r
- List<String> notes = conn.getNoteTable().expungeIgnoreSynchronizedNotes(conn.getSyncTable().getIgnoreRecords("NOTEBOOK"), conn.getSyncTable().getIgnoreRecords("TAG"));\r
+ List<String> notes = conn.getNoteTable().expungeIgnoreSynchronizedNotes(conn.getSyncTable().getIgnoreRecords("NOTEBOOK"), \r
+ conn.getSyncTable().getIgnoreRecords("TAG"), conn.getSyncTable().getIgnoreRecords("LINKEDNOTEBOOK"));\r
if (notes.size() > 0)\r
syncSignal.refreshLists.emit();\r
\r
moveConflictingNote(n.getGuid());\r
}\r
boolean ignoreNote = false;\r
- if (ignoreNotebooks.containsKey(n.getNotebookGuid()))\r
+ if (ignoreNotebooks.contains(n.getNotebookGuid()))\r
ignoreNote = true;\r
for (int i=0; i<n.getTagGuidsSize(); i++) {\r
- if (ignoreTags.containsKey(n.getTagGuids().get(i))) {\r
+ if (ignoreTags.contains(n.getTagGuids().get(i))) {\r
ignoreNote = true;\r
i=n.getTagGuidsSize();\r
}\r
newBook.setPublished(false);\r
\r
conn.getNotebookTable().addNotebook(newBook, false, true);\r
+ notebookSignal.listChanged.emit();\r
notebookGuid = newBook.getGuid();\r
+ refreshNeeded = true;\r
}\r
\r
// Now that we have a good notebook guid, we need to move the conflicting note\r
conn.getNoteTable().updateNoteGuid(guid, newGuid);\r
conn.getNoteTable().updateNoteNotebook(newGuid, notebookGuid, true);\r
\r
- \r
+ noteSignal.notebookChanged.emit(newGuid, notebookGuid);\r
+ refreshNeeded = true;\r
noteSignal.guidChanged.emit(guid,newGuid);\r
}\r
\r
logger.log(logger.MEDIUM, "Authenticating Shared Notebooks");\r
status.message.emit(tr("Synchronizing shared notebooks."));\r
List<LinkedNotebook> books = conn.getLinkedNotebookTable().getAll();\r
+\r
for (int i=0; i<books.size(); i++) {\r
try {\r
- long lastSyncDate = conn.getLinkedNotebookTable().getLastSequenceDate(books.get(i).getGuid());\r
- int lastSequenceNumber = conn.getLinkedNotebookTable().getLastSequenceNumber(books.get(i).getGuid());\r
- linkedAuthResult = noteStore.authenticateToSharedNotebook(books.get(i).getShareKey(), authToken);\r
- SyncState linkedSyncState = \r
- noteStore.getLinkedNotebookSyncState(linkedAuthResult.getAuthenticationToken(), books.get(i));\r
- if (linkedSyncState.getUpdateCount() > lastSequenceNumber) {\r
- if (lastSyncDate < linkedSyncState.getFullSyncBefore()) {\r
- lastSequenceNumber = 0;\r
- }\r
+ long lastSyncDate = conn.getLinkedNotebookTable().getLastSequenceDate(books.get(i).getGuid());\r
+ int lastSequenceNumber = conn.getLinkedNotebookTable().getLastSequenceNumber(books.get(i).getGuid());\r
+ linkedAuthResult = noteStore.authenticateToSharedNotebook(books.get(i).getShareKey(), authToken);\r
+ SyncState linkedSyncState = \r
+ noteStore.getLinkedNotebookSyncState(linkedAuthResult.getAuthenticationToken(), books.get(i));\r
+ if (linkedSyncState.getUpdateCount() > lastSequenceNumber) {\r
+ if (lastSyncDate < linkedSyncState.getFullSyncBefore()) {\r
+ lastSequenceNumber = 0;\r
+ } \r
syncLinkedNotebook(books.get(i), lastSequenceNumber, linkedSyncState.getUpdateCount());\r
- }\r
+ }\r
\r
// Synchronize local changes\r
syncLocalLinkedNoteChanges(books.get(i));\r
//* Linked notebook contents (from someone else's account)\r
//*************************************************************\r
private void syncLinkedNotebook(LinkedNotebook book, int usn, int highSequence) {\r
+ \r
+ List<Note> dirtyNotes = conn.getNoteTable().getDirtyLinkedNotes();\r
+ if (dirtyNoteGuids == null) \r
+ dirtyNoteGuids = new Vector<String>();\r
+\r
+ for (int i=0; i<dirtyNotes.size() && keepRunning; i++) {\r
+ dirtyNoteGuids.add(dirtyNotes.get(i).getGuid());\r
+ }\r
boolean fullSync = false;\r
if (usn == 0)\r
fullSync = true;\r
try {\r
SyncChunk chunk = \r
noteStore.getLinkedNotebookSyncChunk(authToken, book, usn, 10, fullSync);\r
-// noteStore.getLinkedNotebookSyncChunk(linkedAuthResult.getAuthenticationToken(), book, usn, 10, fullSync);\r
\r
- syncRemoteNotes(chunk.getNotes(), fullSync, linkedAuthResult.getAuthenticationToken());\r
+ if (!ignoreLinkedNotebooks.contains(book.getGuid()))\r
+ syncRemoteNotes(chunk.getNotes(), fullSync, linkedAuthResult.getAuthenticationToken());\r
findNewLinkedTags(chunk.getNotes(), linkedAuthResult.getAuthenticationToken());\r
for (int i=0; i<chunk.getResourcesSize(); i++) {\r
syncRemoteResource(chunk.getResources().get(i), linkedAuthResult.getAuthenticationToken());\r
}\r
syncRemoteLinkedNotebooks(chunk.getNotebooks(), false, book);\r
-// String notebookGuid = conn.getLinkedNotebookTable().getNotebookGuid(book.getGuid());\r
SharedNotebook s = noteStore.getSharedNotebookByAuth(linkedAuthResult.getAuthenticationToken());\r
syncLinkedTags(chunk.getTags(), s.getNotebookGuid());\r
\r