import java.util.concurrent.LinkedBlockingQueue;\r
\r
import com.evernote.edam.type.Note;\r
-import com.evernote.edam.type.Notebook;\r
-import com.evernote.edam.type.Tag;\r
import com.trolltech.qt.core.QMutex;\r
import com.trolltech.qt.core.QObject;\r
\r
-import cx.fbn.nevernote.Global;\r
import cx.fbn.nevernote.filters.NotebookCounter;\r
import cx.fbn.nevernote.filters.TagCounter;\r
import cx.fbn.nevernote.signals.NotebookSignal;\r
import cx.fbn.nevernote.signals.TagSignal;\r
import cx.fbn.nevernote.signals.TrashSignal;\r
import cx.fbn.nevernote.sql.DatabaseConnection;\r
-import cx.fbn.nevernote.sql.runners.NoteTagsRecord;\r
import cx.fbn.nevernote.utilities.ApplicationLogger;\r
-import cx.fbn.nevernote.utilities.Pair;\r
\r
public class CounterRunner extends QObject implements Runnable {\r
\r
+ private class NoteRecord {\r
+ public String notebookGuid;\r
+ public Vector<String> tags;\r
+ public boolean active;\r
+ \r
+ public NoteRecord() {\r
+ tags = new Vector<String>();\r
+ }\r
+ }\r
private final ApplicationLogger logger;\r
private volatile boolean keepRunning;\r
public int ID;\r
public volatile NotebookSignal notebookSignal;\r
public volatile TrashSignal trashSignal;\r
public volatile TagSignal tagSignal;\r
- private volatile Vector<String> notebookIndex;\r
- private volatile Vector<String> noteIndex;\r
- private volatile Vector<Boolean> activeIndex;\r
+ private volatile Vector<NoteRecord> records;\r
public int type;\r
public QMutex threadLock;\r
\r
public static int NOTEBOOK=1;\r
public static int TAG=2;\r
public static int TRASH=3;\r
- public static int TAG_ALL = 4;\r
- public static int NOTEBOOK_ALL = 5;\r
\r
public boolean ready = false;\r
public boolean abortCount = false;\r
+ private final DatabaseConnection conn;\r
+\r
private volatile LinkedBlockingQueue<Integer> readyQueue = new LinkedBlockingQueue<Integer>();\r
\r
\r
//*********************************************\r
//* Constructor *\r
//*********************************************\r
- public CounterRunner(String logname, int t) {\r
+ public CounterRunner(String logname, int t, String u, String i, String r, String uid, String pswd, String cpswd) {\r
type = t;\r
+\r
threadLock = new QMutex();\r
logger = new ApplicationLogger(logname);\r
// setAutoDelete(false); \r
+ conn = new DatabaseConnection(logger, u, i, r, uid, pswd, cpswd, 300);\r
keepRunning = true;\r
notebookSignal = new NotebookSignal();\r
tagSignal = new TagSignal();\r
trashSignal = new TrashSignal();\r
\r
- notebookIndex = new Vector<String>();\r
- activeIndex = new Vector<Boolean>();\r
- noteIndex = new Vector<String>();\r
+ records = new Vector<NoteRecord>();\r
}\r
\r
\r
keepRunning = false;\r
if (type == NOTEBOOK)\r
countNotebookResults();\r
- if (type == NOTEBOOK_ALL)\r
- countNotebookResults();\r
if (type == TAG)\r
countTagResults();\r
- if (type == TAG_ALL)\r
- countTagResults();\r
if (type == TRASH)\r
countTrashResults();\r
threadLock.unlock();\r
} catch (InterruptedException e) {}\r
}\r
+ conn.dbShutdown();\r
}\r
\r
\r
abortCount = true;\r
threadLock.lock();\r
abortCount = false;\r
- notebookIndex.clear();\r
- activeIndex.clear();\r
- noteIndex.clear();\r
+ records.clear();\r
if (idx != null) {\r
for (int i=0; i<idx.size(); i++) {\r
- if (Global.showDeleted && !idx.get(i).isActive()) {\r
- notebookIndex.add(new String(idx.get(i).getNotebookGuid()));\r
- noteIndex.add(new String(idx.get(i).getGuid()));\r
- activeIndex.add(new Boolean(idx.get(i).isActive()));\r
- } \r
- if (!Global.showDeleted && idx.get(i).isActive()) {\r
- notebookIndex.add(new String(idx.get(i).getNotebookGuid()));\r
- noteIndex.add(new String(idx.get(i).getGuid()));\r
- activeIndex.add(new Boolean(idx.get(i).isActive())); \r
+ if (abortCount)\r
+ return;\r
+ NoteRecord record = new NoteRecord();\r
+ record.notebookGuid = new String(idx.get(i).getNotebookGuid());\r
+ record.active = idx.get(i).isActive();\r
+ for (int j=0; j<idx.get(i).getTagGuidsSize(); j++) {\r
+ if (abortCount)\r
+ return;\r
+ record.tags.add(new String(idx.get(i).getTagGuids().get(j)));\r
}\r
+ records.add(record);\r
}\r
}\r
threadLock.unlock();\r
logger.log(logger.EXTREME, "Entering ListManager.countNotebookResults"); \r
if (abortCount)\r
return;\r
- DatabaseConnection conn = new DatabaseConnection(Global.tagCounterThreadId);\r
List<NotebookCounter> nCounter = new ArrayList<NotebookCounter>();\r
- if (abortCount)\r
- return;\r
- List<Notebook> books = conn.getNotebookTable().getAll();\r
- \r
- if (abortCount)\r
- return;\r
-\r
- if (type == NOTEBOOK_ALL) {\r
- for (int i=0; i<books.size(); i++) {\r
- if (abortCount)\r
- return;\r
-\r
- nCounter.add(new NotebookCounter());\r
- nCounter.get(i).setCount(0);\r
- nCounter.get(i).setGuid(books.get(i).getGuid());\r
- }\r
- if (abortCount)\r
- return;\r
- List<Pair<String, Integer>> notebookCounts = conn.getNotebookTable().getNotebookCounts();\r
+ for (int i=0; i<records.size(); i++) {\r
if (abortCount)\r
return;\r
- for (int i=0; notebookCounts != null && i<notebookCounts.size(); i++) {\r
+ boolean found = false;\r
+ for (int j=0; j<nCounter.size(); j++) {\r
if (abortCount)\r
return;\r
- for (int j=0; j<nCounter.size(); j++) {\r
- if (abortCount)\r
- return;\r
-\r
- if (notebookCounts.get(i).getFirst().equals(nCounter.get(j).getGuid())) {\r
- nCounter.get(j).setCount(notebookCounts.get(i).getSecond());\r
- j=nCounter.size();\r
- }\r
- }\r
- }\r
- if (abortCount)\r
- return;\r
-\r
- notebookSignal.countsChanged.emit(nCounter);\r
- return;\r
- }\r
- \r
- if (abortCount)\r
- return;\r
- for (int i=notebookIndex.size()-1; i>=0 && keepRunning; i--) {\r
- if (abortCount)\r
- return;\r
- boolean notebookFound = false;\r
- for (int j=0; j<nCounter.size() && keepRunning; j++) {\r
- if (abortCount)\r
- return;\r
- if (nCounter.get(j).getGuid().equals(notebookIndex.get(i))) {\r
- notebookFound = true;\r
- if (activeIndex.get(i)) {\r
- int c = nCounter.get(j).getCount()+1;\r
- nCounter.get(j).setCount(c);\r
- }\r
+ if (nCounter.get(j).getGuid().equals(records.get(i).notebookGuid)) {\r
+ nCounter.get(j).setCount(nCounter.get(j).getCount()+1);\r
+ found = true;\r
j=nCounter.size();\r
}\r
}\r
- if (abortCount)\r
- return;\r
- if (!notebookFound) {\r
+ if (!found) {\r
NotebookCounter newCounter = new NotebookCounter();\r
- newCounter.setGuid(notebookIndex.get(i));\r
+ newCounter.setGuid(records.get(i).notebookGuid);\r
newCounter.setCount(1);\r
nCounter.add(newCounter);\r
}\r
}\r
\r
\r
+ /*\r
private void countTagResults() {\r
logger.log(logger.EXTREME, "Entering ListManager.countTagResults"); \r
- DatabaseConnection conn = new DatabaseConnection(Global.tagCounterThreadId);\r
List<TagCounter> counter = new ArrayList<TagCounter>();\r
List<Tag> allTags = conn.getTagTable().getAll();\r
\r
\r
if (abortCount)\r
return;\r
- List<NoteTagsRecord> tags = conn.getNoteTable().noteTagsTable.getAllNoteTags();\r
+ List<cx.fbn.nevernote.sql.NoteTagsRecord> tags = conn.getNoteTable().noteTagsTable.getAllNoteTags();\r
for (int i=noteIndex.size()-1; i>=0; i--) {\r
if (abortCount)\r
return;\r
return;\r
tagSignal.countsChanged.emit(counter);\r
logger.log(logger.EXTREME, "Leaving ListManager.countTagResults()");\r
+ } */\r
+ private void countTagResults() {\r
+ logger.log(logger.EXTREME, "Entering ListManager.countTagResults"); \r
+ if (abortCount)\r
+ return;\r
+ List<TagCounter> tCounter = new ArrayList<TagCounter>();\r
+ for (int i=0; i<records.size(); i++) {\r
+ if (abortCount)\r
+ return;\r
+ \r
+ // Loop through the list of tags so we can count them\r
+ Vector<String> tags = records.get(i).tags;\r
+ for (int z=0; z<tags.size(); z++) {\r
+ boolean found = false;\r
+ for (int j=0; j<tCounter.size(); j++) {\r
+ if (abortCount)\r
+ return;\r
+ if (tCounter.get(j).getGuid().equals(tags.get(z))) {\r
+ tCounter.get(j).setCount(tCounter.get(j).getCount()+1);\r
+ found = true;\r
+ j=tCounter.size();\r
+ }\r
+ }\r
+ if (!found) {\r
+ TagCounter newCounter = new TagCounter();\r
+ newCounter.setGuid(tags.get(z));\r
+ newCounter.setCount(1);\r
+ tCounter.add(newCounter);\r
+ }\r
+ }\r
+ }\r
+ if (abortCount)\r
+ return;\r
+ tagSignal.countsChanged.emit(tCounter);\r
+ logger.log(logger.EXTREME, "Leaving ListManager.countTagResults"); \r
}\r
\r
\r
private void countTrashResults() {\r
logger.log(logger.EXTREME, "Entering CounterRunner.countTrashResults()"); \r
- DatabaseConnection conn = new DatabaseConnection(Global.trashCounterThreadId);\r
if (abortCount)\r
return;\r
\r
- Integer tCounter = conn.getNoteTable().getDeletedCount();\r
+ int tCounter = 0;\r
+ for (int i=0; i<records.size(); i++) {\r
+ if (abortCount)\r
+ return;\r
+ if (!records.get(i).active)\r
+ tCounter++;\r
+ }\r
\r
if (abortCount)\r
return;\r