import java.util.List;\r
import java.util.Vector;\r
\r
+import com.evernote.edam.type.LinkedNotebook;\r
import com.evernote.edam.type.Note;\r
import com.evernote.edam.type.Notebook;\r
import com.evernote.edam.type.SavedSearch;\r
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
private List<Notebook> notebookIndex;\r
private List<Notebook> archiveNotebookIndex;\r
private List<String> localNotebookIndex;\r
+ \r
+ private List<LinkedNotebook> linkedNotebookIndex;\r
\r
private List<SavedSearch> searchIndex;\r
\r
public HashMap<String, String> wordMap;\r
public TagSignal tagSignal;\r
public NotebookSignal notebookSignal;\r
+ public boolean refreshCounters; // Used to control when to recount lists\r
private int trashCount;\r
public SaveRunner saveRunner; // Thread used to save content. Used because the xml conversion is slowwwww\r
- QThread saveThread;\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
logger = l;\r
- \r
+ \r
+ conn.getTagTable().cleanupTags();\r
status = new StatusSignal();\r
signals = new ThreadSignal();\r
\r
reloadIndexes();\r
\r
notebookSignal = new NotebookSignal();\r
- notebookCounterRunner = new CounterRunner("notebook_counter.log", CounterRunner.NOTEBOOK, Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+ notebookCounterRunner = new CounterRunner("notebook_counter.log", CounterRunner.NOTEBOOK, \r
+ Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+ Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
notebookCounterRunner.setNoteIndex(getNoteIndex());\r
notebookCounterRunner.notebookSignal.countsChanged.connect(this, "setNotebookCounter(List)");\r
notebookThread = new QThread(notebookCounterRunner, "Notebook Counter Thread");\r
notebookThread.start();\r
\r
tagSignal = new TagSignal();\r
- tagCounterRunner = new CounterRunner("tag_counter.log", CounterRunner.TAG, Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+ tagCounterRunner = new CounterRunner("tag_counter.log", CounterRunner.TAG, \r
+ Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+ Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
tagCounterRunner.setNoteIndex(getNoteIndex());\r
tagCounterRunner.tagSignal.countsChanged.connect(this, "setTagCounter(List)");\r
tagThread = new QThread(tagCounterRunner, "Tag Counter Thread");\r
tagThread.start();\r
\r
trashSignal = new TrashSignal();\r
- trashCounterRunner = new CounterRunner("trash_counter.log", CounterRunner.TRASH, Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+ trashCounterRunner = new CounterRunner("trash_counter.log", CounterRunner.TRASH, \r
+ Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+ Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
trashCounterRunner.trashSignal.countChanged.connect(this, "trashSignalReceiver(Integer)");\r
trashThread = new QThread(trashCounterRunner, "Trash Counter Thread");\r
trashThread.start();\r
- reloadTrashCount();\r
+// reloadTrashCount();\r
\r
wordMap = new HashMap<String, String>();\r
tagSignal = new TagSignal();\r
\r
logger.log(logger.EXTREME, "Setting save thread");\r
- saveRunner = new SaveRunner("saveRunner.log", Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);\r
+ saveRunner = new SaveRunner("saveRunner.log", \r
+ Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),\r
+ 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
+ linkedNotebookIndex = conn.getLinkedNotebookTable().getAll();\r
loadNoteTitleColors();\r
+ refreshCounters = true;\r
+ refreshCounters();\r
\r
}\r
\r
e.printStackTrace();\r
}\r
\r
-\r
}\r
\r
//***************************************************************\r
\r
setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());\r
\r
+ linkedNotebookIndex = conn.getLinkedNotebookTable().getAll();\r
+ \r
enSearchChanged = true;\r
}\r
\r
+ public void reloadTagIndex() {\r
+ setTagIndex(conn.getTagTable().getAll()); \r
+ }\r
public void reloadIndexes() {\r
setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());\r
\r
for (int i=0; i<local.size(); i++)\r
localNotebookIndex.add(local.get(i).getGuid());\r
\r
- // Load tags\r
- setTagIndex(conn.getTagTable().getAll());\r
+ reloadTagIndex();\r
// Load notebooks\r
setNotebookIndex(conn.getNotebookTable().getAll());\r
// load archived notebooks (if note using the EN interface)\r
// load saved search index\r
setSavedSearchIndex(conn.getSavedSearchTable().getAll());\r
// Load search helper utility\r
- enSearch = new EnSearch(conn, logger, "", getTagIndex(), Global.getMinimumWordLength(), Global.getRecognitionWeight());\r
+ enSearch = new EnSearch(conn, logger, "", getTagIndex(), Global.getRecognitionWeight());\r
logger.log(logger.HIGH, "Building note index");\r
\r
// if (getMasterNoteIndex() == null) { \r
//* selected notebooks\r
//***************************************************************\r
//***************************************************************\r
- // Return the selected notebook(s)\r
+ // Return the selected notebook(s)\r
public List<String> getSelectedNotebooks() {\r
return selectedNotebooks;\r
}\r
return notebookIndex;\r
\r
}\r
+ public List<LinkedNotebook> getLinkedNotebookIndex() {\r
+ return linkedNotebookIndex;\r
+ }\r
public List<Notebook> getArchiveNotebookIndex() {\r
return archiveNotebookIndex;\r
}\r
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
//***************************************************************\r
//***************************************************************\r
public void setEnSearch(String t) {\r
- enSearch = new EnSearch(conn,logger, t, getTagIndex(), Global.getMinimumWordLength(), Global.getRecognitionWeight());\r
+ enSearch = new EnSearch(conn,logger, t, getTagIndex(), Global.getRecognitionWeight());\r
enSearchChanged = true;\r
}\r
// Save search tags\r
}\r
conn.getNotebookTable().expungeNotebook(guid, true); \r
}\r
+ // Rename a stack\r
+ public void renameStack(String oldName, String newName) {\r
+ for (int i=0; i<getNotebookIndex().size(); i++) {\r
+ if (getNotebookIndex().get(i).getStack() != null && \r
+ getNotebookIndex().get(i).getStack().equalsIgnoreCase(oldName)) {\r
+ getNotebookIndex().get(i).setStack(newName);\r
+ }\r
+ } \r
+ }\r
// Update a notebook sequence number\r
public void updateNotebookSequence(String guid, int sequence) {\r
logger.log(logger.HIGH, "Entering ListManager.updateNotebookSequence");\r
logger.log(logger.HIGH, "Leaving ListManager.updateNotebookGuid");\r
\r
}\r
+ // Update a notebook Guid number\r
+ public void updateNotebookStack(String oldGuid, String stack) {\r
+ logger.log(logger.HIGH, "Entering ListManager.updateNotebookGuid");\r
+\r
+ conn.getNotebookTable().setStack(oldGuid, stack);\r
+ \r
+ for (int i=0; i<notebookIndex.size(); i++) {\r
+ if (notebookIndex.get(i).getGuid().equals(oldGuid)) {\r
+ notebookIndex.get(i).setStack(stack);\r
+ i=notebookIndex.size()+1;\r
+ }\r
+ }\r
+ logger.log(logger.HIGH, "Leaving ListManager.updateNotebookGuid");\r
+\r
+ }\r
\r
\r
//************************************************************************************\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
+ \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
+ 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
+ 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
+ // Trigger a recount of counters\r
+ public void refreshCounters() {\r
+// refreshCounters= false;\r
+ if (!refreshCounters)\r
+ return;\r
+ refreshCounters = false;\r
tagCounterRunner.abortCount = true;\r
notebookCounterRunner.abortCount = true;\r
trashCounterRunner.abortCount = true;\r
+ countNotebookResults(getNoteIndex());\r
+ countTagResults(getNoteIndex());\r
+ reloadTrashCount();\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
\r
List<Note> matches;\r
if (enSearchChanged || getMasterNoteIndex() == null)\r
if (filterRecord(matches.get(i)))\r
getNoteIndex().add(matches.get(i));\r
}\r
- countNotebookResults(getNoteIndex());\r
- countTagResults(getNoteIndex());\r
+ refreshCounters = true;\r
enSearchChanged = false;\r
- reloadTrashCount();\r
logger.log(logger.EXTREME, "Leaving ListManager.loadNotesIndex()");\r
}\r
public void countNotebookResults(List<Note> index) {\r
logger.log(logger.EXTREME, "Entering ListManager.countNotebookResults()");\r
- if (!Global.mimicEvernoteInterface) {\r
+ notebookCounterRunner.abortCount = true;\r
+ if (!Global.mimicEvernoteInterface) \r
notebookCounterRunner.setNoteIndex(index);\r
- notebookCounterRunner.release(CounterRunner.NOTEBOOK);\r
- } else {\r
+ else \r
notebookCounterRunner.setNoteIndex(getMasterNoteIndex());\r
- notebookCounterRunner.release(CounterRunner.NOTEBOOK_ALL);\r
- }\r
+ notebookCounterRunner.release(CounterRunner.NOTEBOOK);\r
logger.log(logger.EXTREME, "Leaving ListManager.countNotebookResults()");\r
}\r
public void countTagResults(List<Note> index) {\r
logger.log(logger.EXTREME, "Entering ListManager.countTagResults");\r
- if (!Global.tagBehavior().equalsIgnoreCase("DoNothing")) {\r
+ trashCounterRunner.abortCount = true;\r
+ if (!Global.tagBehavior().equalsIgnoreCase("DoNothing")) \r
tagCounterRunner.setNoteIndex(index);\r
- tagCounterRunner.release(CounterRunner.TAG);\r
- } else {\r
- tagCounterRunner.setNoteIndex(null);\r
- tagCounterRunner.release(CounterRunner.TAG_ALL);\r
- }\r
+ else\r
+ tagCounterRunner.setNoteIndex(getMasterNoteIndex());\r
+ tagCounterRunner.release(CounterRunner.TAG);\r
logger.log(logger.EXTREME, "Leaving ListManager.countTagResults()");\r
}\r
// Update the count of items in the trash\r
public void reloadTrashCount() {\r
logger.log(logger.EXTREME, "Entering ListManager.reloadTrashCount");\r
- trashCounterRunner.setNoteIndex(getNoteIndex());\r
+ trashCounterRunner.abortCount = true;\r
+ trashCounterRunner.setNoteIndex(getMasterNoteIndex());\r
trashCounterRunner.release(CounterRunner.TRASH);\r
logger.log(logger.EXTREME, "Leaving ListManager.reloadTrashCount");\r
} \r
if (selectedTags.size() == 0) \r
return true;\r
\r
- for (int i=0; i<selectedTags.size(); i++) {\r
- String selectedGuid = selectedTags.get(i);\r
- if (noteTags.contains(selectedGuid))\r
- return true;\r
+ if (!Global.anyTagSelectionMatch()) {\r
+ for (int i=0; i<selectedTags.size(); i++) {\r
+ String selectedGuid = selectedTags.get(i);\r
+ if (!noteTags.contains(selectedGuid))\r
+ return false;\r
+ }\r
+ return true;\r
+ } else {\r
+ for (int i=0; i<selectedTags.size(); i++) {\r
+ String selectedGuid = selectedTags.get(i);\r
+ if (noteTags.contains(selectedGuid))\r
+ return true;\r
+ }\r
+ return false;\r
}\r
- 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