+ // Expunge notes that we don't want to synchronize\r
+ public List<String> expungeIgnoreSynchronizedNotes(List<String> notebooks, List<String>tags, List<String> linked) {\r
+ \r
+ List<String> noteGuids = new ArrayList<String>();\r
+ for (int i=0; i<notebooks.size(); i++) {\r
+ List<String> notes = findNotesByNotebook(notebooks.get(i));\r
+ for (int j=0; j<notes.size(); j++) {\r
+ if (!isNoteDirty(notes.get(j))) {\r
+ expungeNote(notes.get(j), true, false);\r
+ noteGuids.add(notes.get(j));\r
+ }\r
+ }\r
+ }\r
+ \r
+ for (int i=0; i<tags.size(); i++) {\r
+ List<String> notes = findNotesByTag(tags.get(i));\r
+ for (int j=0; j<notes.size(); j++) {\r
+ if (!isNoteDirty(notes.get(j))) {\r
+ expungeNote(notes.get(j), true, false);\r
+ noteGuids.add(notes.get(j));\r
+ }\r
+ }\r
+ }\r
+ \r
+ for (int i=0; i<linked.size(); i++) {\r
+ String notebookGuid = db.getLinkedNotebookTable().getNotebookGuid(linked.get(i));\r
+ if (notebookGuid != null && !notebookGuid.trim().equals("")) {\r
+ List<Tag> linkedTags = db.getTagTable().getTagsForNotebook(notebookGuid);\r
+ for (int j=0; j<linkedTags.size(); j++)\r
+ db.getTagTable().expungeTag(linkedTags.get(j).getGuid(), false);\r
+ \r
+ List<String> notes = findNotesByNotebook(notebookGuid);\r
+ for (int j=0; j<notes.size(); j++) {\r
+ if (!isNoteDirty(notes.get(j))) {\r
+ expungeNote(notes.get(j), true, false);\r
+ noteGuids.add(notes.get(j));\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return noteGuids;\r
+ }\r
+ \r
+ // Find a note by its notebook\r
+ // Expunge notes that we don't want to synchronize\r
+ public List<String> findNotesByNotebook(String notebook) {\r
+ List<String> values = new ArrayList<String>();\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ query.prepare("Select guid from note where notebookguid=:notebook");\r
+\r
+ query.bindValue(":notebook", notebook);\r
+ query.exec();\r
+ while (query.next()) {\r
+ values.add(query.valueString(0));\r
+ }\r
+ return values;\r
+ }\r
+ \r
+ public List<String> findNotesByTag(String tag) {\r
+ List<String> values = new ArrayList<String>();\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ query.prepare("Select distinct noteguid from notetags where tagguid=:tag");\r
+\r
+ query.bindValue(":tag", tag);\r
+ query.exec();\r
+ while (query.next()) {\r
+ values.add(query.valueString(0));\r
+ }\r
+ return values;\r
+ }\r
+ \r
+ // Find a note based upon its title.\r
+ public List<Pair<String,String>> findNotesByTitle(String text) {\r
+ List<Pair<String,String>> results = new ArrayList<Pair<String,String>>();\r
+ boolean check; \r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ check = query.prepare("Select guid,title from Note where lower(title) like :title");\r
+ if (!check) \r
+ logger.log(logger.EXTREME, "Note SQL prepare for search by title has failed: " +query.lastError().toString());\r
+ \r
+ query.bindValue(":title", "%"+text.toLowerCase()+"%");\r
+ query.exec();\r
+ // Get a list of the notes\r
+ while (query.next()) {\r
+ Pair<String,String> p = new Pair<String,String>();\r
+ p.setFirst(query.valueString(0));\r
+ p.setSecond(query.valueString(1)); \r
+ results.add(p); \r
+ } \r
+ return results;\r
+ }\r
+\r