import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Vector;
import org.apache.thrift.TException;
+import org.h2.tools.ChangeFileEncryption;
import com.evernote.edam.error.EDAMNotFoundException;
import com.evernote.edam.error.EDAMSystemException;
import com.trolltech.qt.core.QDataStream;
import com.trolltech.qt.core.QDateTime;
import com.trolltech.qt.core.QDir;
+import com.trolltech.qt.core.QEvent;
import com.trolltech.qt.core.QFile;
import com.trolltech.qt.core.QFileInfo;
import com.trolltech.qt.core.QFileSystemWatcher;
import com.trolltech.qt.core.QTranslator;
import com.trolltech.qt.core.QUrl;
import com.trolltech.qt.core.Qt;
+import com.trolltech.qt.core.Qt.ItemDataRole;
import com.trolltech.qt.core.Qt.SortOrder;
import com.trolltech.qt.core.Qt.WidgetAttribute;
import com.trolltech.qt.gui.QAbstractItemView;
import com.trolltech.qt.gui.QColor;
import com.trolltech.qt.gui.QComboBox;
import com.trolltech.qt.gui.QComboBox.InsertPolicy;
-import com.trolltech.qt.gui.QCursor;
import com.trolltech.qt.gui.QDesktopServices;
import com.trolltech.qt.gui.QDialog;
import com.trolltech.qt.gui.QFileDialog;
import cx.fbn.nevernote.config.StartupConfig;
import cx.fbn.nevernote.dialog.AccountDialog;
import cx.fbn.nevernote.dialog.ConfigDialog;
+import cx.fbn.nevernote.dialog.DBEncryptDialog;
import cx.fbn.nevernote.dialog.DatabaseLoginDialog;
import cx.fbn.nevernote.dialog.DatabaseStatus;
import cx.fbn.nevernote.dialog.FindDialog;
TableView noteTableView; // List of notes (the widget).
public BrowserWindow browserWindow; // Window containing browser & labels
- QToolBar toolBar; // The tool bar under the menu
+ public QToolBar toolBar; // The tool bar under the menu
// QLineEdit searchField; // The search filter bar on the toolbar
QComboBox searchField; // search filter bar on the toolbar;
boolean searchPerformed = false; // Search was done?
String trashNoteGuid; // Guid to restore / set into or out of trash to save position
Thumbnailer preview; // generate preview image
ThumbnailViewer thumbnailViewer; // View preview thumbnail;
+ boolean encryptOnShutdown; // should I encrypt when I close?
+ boolean decryptOnShutdown; // should I decrypt on shutdown;
+ String encryptCipher; // What cipher should I use?
+ Signal0 minimizeToTray;
+ boolean windowMaximized = false; // Keep track of the window state for restores
String iconPath = new String("classpath:cx/fbn/nevernote/icons/");
logger = new ApplicationLogger("nevernote.log");
logger.log(logger.HIGH, "Starting Application");
-
+
+ decryptOnShutdown = false;
+ encryptOnShutdown = false;
conn.checkDatabaseVersion();
+
+
// Start building the invalid XML tables
Global.invalidElements = conn.getInvalidXMLTable().getInvalidElements();
List<String> elements = conn.getInvalidXMLTable().getInvalidAttributeElements();
QThreadPool.globalInstance().setMaxThreadCount(indexRunnerCount+5); // increase max thread count
logger.log(logger.EXTREME, "Building list manager");
- listManager = new ListManager(conn, logger, Global.mainThreadId);
+ listManager = new ListManager(conn, logger);
logger.log(logger.EXTREME, "Building index runners & timers");
indexRunner = new IndexRunner("indexRunner.log", Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);
synchronizeAnimationTimer.timeout.connect(this, "updateSyncButton()");
indexTimer = new QTimer();
- indexTime = 1000*60*5; // look for unindexed every 5 minutes
-// indexTime = 1000*5;
+ indexTime = 1000*Global.getIndexThreadSleepInterval();
indexTimer.start(indexTime); // Start indexing timer
indexTimer.timeout.connect(this, "indexTimer()");
indexDisabled = false;
// saveTimer.setInterval(1000*10); // auto save every 20 seconds;
saveTimer.start();
}
+ listManager.saveRunner.noteSignals.noteSaveRunnerError.connect(this, "saveRunnerError(String, String)");
-// Global.trace();
logger.log(logger.EXTREME, "Starting external file monitor timer");
externalFileSaveTimer = new QTimer();
externalFileSaveTimer.timeout.connect(this, "externalFileEditedSaver()");
tagTree = new TagTreeWidget(conn);
savedSearchTree = new SavedSearchTreeWidget();
trashTree = new TrashTreeWidget();
- noteTableView = new TableView(logger);
+ noteTableView = new TableView(logger, listManager);
QGridLayout leftGrid = new QGridLayout();
leftSplitter1.setLayout(leftGrid);
*/
private static DatabaseConnection setupDatabaseConnection() throws InitializationException {
ApplicationLogger logger = new ApplicationLogger("nevernote-database.log");
- DatabaseConnection dbConn = new DatabaseConnection(logger,Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);
-
+
+ File f = Global.getFileManager().getDbDirFile(Global.databaseName + ".h2.db");
+ boolean dbExists = f.exists();
+ if (!dbExists)
+ Global.setDatabaseUrl("");
+
if (Global.getDatabaseUrl().toUpperCase().indexOf("CIPHER=") > -1) {
boolean goodCheck = false;
while (!goodCheck) {
Global.getDatabaseUserPassword(), Global.cipherPassword);
}
}
- return dbConn;
+ DatabaseConnection dbConn = new DatabaseConnection(logger,Global.getDatabaseUrl(), Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword);
+ return dbConn;
}
+
+ // Encrypt the database upon shutdown
+ private void encryptOnShutdown() {
+ String dbPath= Global.getFileManager().getDbDirPath("");
+ String dbName = "NeverNote";
+ try {
+ Statement st = conn.getConnection().createStatement();
+ st.execute("shutdown");
+ if (QMessageBox.question(this, "Are you sure",
+ "Are you sure you wish to encrypt the database?",
+ QMessageBox.StandardButton.Yes,
+ QMessageBox.StandardButton.No) == StandardButton.Yes.value()) {
+ ChangeFileEncryption.execute(dbPath, dbName, encryptCipher, null, Global.cipherPassword.toCharArray(), true);
+ Global.setDatabaseUrl(Global.getDatabaseUrl() + ";CIPHER="+encryptCipher);
+ QMessageBox.information(this, "Encryption Complete", "Encryption is complete");
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ // Decrypt the database upon shutdown
+ private void decryptOnShutdown() {
+ String dbPath= Global.getFileManager().getDbDirPath("");
+ String dbName = "NeverNote";
+ try {
+ Statement st = conn.getConnection().createStatement();
+ st.execute("shutdown");
+ if (Global.getDatabaseUrl().toUpperCase().indexOf(";CIPHER=AES") > -1)
+ encryptCipher = "AES";
+ else
+ encryptCipher = "XTEA";
+ if (QMessageBox.question(this, tr("Confirmation"), tr("Are you sure",
+ "Are you sure you wish to decrypt the database?"),
+ QMessageBox.StandardButton.Yes,
+ QMessageBox.StandardButton.No) == StandardButton.Yes.value()) {
- private static void initializeGlobalSettings(String[] args) throws InitializationException {
- StartupConfig startupConfig = new StartupConfig();
+ ChangeFileEncryption.execute(dbPath, dbName, encryptCipher, Global.cipherPassword.toCharArray(), null, true);
+ Global.setDatabaseUrl("");
+ QMessageBox.information(this, tr("Decryption Complete"), tr("Decryption is complete"));
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ /**
+ * Encrypt/Decrypt the local database
+ **/
+ public void doDatabaseEncrypt() {
+ // The database is not currently encrypted
+ if (Global.getDatabaseUrl().toUpperCase().indexOf("CIPHER=") == -1) {
+ if (QMessageBox.question(this, tr("Confirmation"), tr("Encrypting the database is used" +
+ "to enhance security and is performed\nupon shutdown, but please be aware that if"+
+ " you lose the password your\nis lost forever.\n\nIt is highly recommended you " +
+ "perform a backup and/or fully synchronize\n prior to executing this funtction.\n\n" +
+ "Do you wish to proceed?"),
+ QMessageBox.StandardButton.Yes,
+ QMessageBox.StandardButton.No)==StandardButton.No.value()) {
+ return;
+ }
+ DBEncryptDialog dialog = new DBEncryptDialog();
+ dialog.exec();
+ if (dialog.okPressed()) {
+ Global.cipherPassword = dialog.getPassword();
+ encryptOnShutdown = true;
+ encryptCipher = dialog.getEncryptionMethod();
+ }
+ } else {
+ DBEncryptDialog dialog = new DBEncryptDialog();
+ dialog.setWindowTitle("Database Decryption");
+ dialog.hideEncryption();
+ dialog.exec();
+ if (dialog.okPressed()) {
+ if (!dialog.getPassword().equals(Global.cipherPassword)) {
+ QMessageBox.critical(null, tr("Incorrect Password"), tr("Incorrect Password"));
+ return;
+ }
+ decryptOnShutdown = true;
+ encryptCipher = "";
+ }
+ }
+ return;
+ }
- for (String arg : args) {
- String lower = arg.toLowerCase();
- if (lower.startsWith("--name="))
- startupConfig.setName(arg.substring(arg.indexOf('=') + 1));
- if (lower.startsWith("--home="))
- startupConfig.setHomeDirPath(arg.substring(arg.indexOf('=') + 1));
- if (lower.startsWith("--disable-viewing"))
- startupConfig.setDisableViewing(true);
- }
+ private static void initializeGlobalSettings(String[] args) throws InitializationException {
+ StartupConfig startupConfig = new StartupConfig();
- Global.setup(startupConfig);
+ for (String arg : args) {
+ String lower = arg.toLowerCase();
+ if (lower.startsWith("--name="))
+ startupConfig.setName(arg.substring(arg.indexOf('=') + 1));
+ if (lower.startsWith("--home="))
+ startupConfig.setHomeDirPath(arg.substring(arg.indexOf('=') + 1));
+ if (lower.startsWith("--disable-viewing"))
+ startupConfig.setDisableViewing(true);
}
+ Global.setup(startupConfig);
+ }
// Exit point
@Override
Global.setColumnPosition("noteTableTitlePosition", position);
position = noteTableView.header.visualIndex(Global.noteTableSynchronizedPosition);
Global.setColumnPosition("noteTableSynchronizedPosition", position);
-
+
+ Global.saveWindowVisible("toolBar", toolBar.isVisible());
saveNoteIndexWidth();
int width = notebookTree.columnWidth(0);
}
}
+ if (encryptOnShutdown) {
+ encryptOnShutdown();
+ }
+ if (decryptOnShutdown) {
+ decryptOnShutdown();
+ }
logger.log(logger.HIGH, "Leaving NeverNote.closeEvent");
}
}
private void waitCursor(boolean wait) {
- if (wait)
- QApplication.setOverrideCursor(new QCursor(Qt.CursorShape.WaitCursor));
- else
- QApplication.restoreOverrideCursor();
+// if (wait)
+// QApplication.setOverrideCursor(new QCursor(Qt.CursorShape.WaitCursor));
+// else
+// QApplication.restoreOverrideCursor();
}
private void setupIndexListeners() {
syncRunner.noteIndexSignal.listChanged.connect(this, "noteIndexUpdated(boolean)");
syncRunner.noteSignal.quotaChanged.connect(this, "updateQuotaBar()");
-// syncRunner.syncSignal.setSequenceDate.connect(this,"setSequenceDate(long)");
syncRunner.syncSignal.saveUploadAmount.connect(this,"saveUploadAmount(long)");
-// syncRunner.syncSignal.setUpdateSequenceNumber.connect(this,"setUpdateSequenceNumber(int)");
syncRunner.syncSignal.saveUserInformation.connect(this,"saveUserInformation(User)");
syncRunner.syncSignal.saveEvernoteUpdateCount.connect(this,"saveEvernoteUpdateCount(int)");
syncRunner.noteSignal.guidChanged.connect(this, "noteGuidChanged(String, String)");
syncRunner.noteSignal.noteChanged.connect(this, "invalidateNoteCache(String, String)");
syncRunner.resourceSignal.resourceGuidChanged.connect(this, "noteResourceGuidChanged(String,String,String)");
+ syncRunner.noteSignal.noteDownloaded.connect(listManager, "noteDownloaded(Note)");
syncRunner.syncSignal.refreshLists.connect(this, "refreshLists()");
}
browserWindow.fileWatcher.fileChanged.connect(this, "externalFileEdited(String)");
browserWindow.noteSignal.tagsChanged.connect(this, "updateNoteTags(String, List)");
browserWindow.noteSignal.tagsChanged.connect(this, "updateListTags(String, List)");
- browserWindow.noteSignal.noteChanged.connect(this, "invalidateNoteCache(String, String)");
+ //browserWindow.noteSignal.noteChanged.connect(this, "invalidateNoteCache(String, String)");
browserWindow.noteSignal.noteChanged.connect(this, "setNoteDirty()");
browserWindow.noteSignal.titleChanged.connect(listManager, "updateNoteTitle(String, String)");
- browserWindow.noteSignal.titleChanged.connect(this, "updateListTitle(String, String)");
browserWindow.noteSignal.notebookChanged.connect(this, "updateNoteNotebook(String, String)");
browserWindow.noteSignal.createdDateChanged.connect(listManager, "updateNoteCreatedDate(String, QDateTime)");
- browserWindow.noteSignal.createdDateChanged.connect(this, "updateListDateCreated(String, QDateTime)");
browserWindow.noteSignal.alteredDateChanged.connect(listManager, "updateNoteAlteredDate(String, QDateTime)");
- browserWindow.noteSignal.alteredDateChanged.connect(this, "updateListDateChanged(String, QDateTime)");
browserWindow.noteSignal.subjectDateChanged.connect(listManager, "updateNoteSubjectDate(String, QDateTime)");
- browserWindow.noteSignal.subjectDateChanged.connect(this, "updateListDateSubject(String, QDateTime)");
browserWindow.noteSignal.authorChanged.connect(listManager, "updateNoteAuthor(String, String)");
browserWindow.noteSignal.geoChanged.connect(listManager, "updateNoteGeoTag(String, Double,Double,Double)");
- browserWindow.noteSignal.authorChanged.connect(this, "updateListAuthor(String, String)");
browserWindow.noteSignal.geoChanged.connect(this, "setNoteDirty()");
browserWindow.noteSignal.sourceUrlChanged.connect(listManager, "updateNoteSourceUrl(String, String)");
- browserWindow.noteSignal.sourceUrlChanged.connect(this, "updateListSourceUrl(String, String)");
browserWindow.focusLost.connect(this, "saveNote()");
browserWindow.resourceSignal.contentChanged.connect(this, "externalFileEdited(String)");
-// browserWindow.resourceSignal.externalFileEdit.connect(this, "saveResourceLater(String, String)");
}
String dateFormat = Global.getDateFormat();
String timeFormat = Global.getTimeFormat();
+ indexTime = 1000*Global.getIndexThreadSleepInterval();
+ indexTimer.start(indexTime); // reset indexing timer
+
settings.exec();
if (Global.showTrayIcon())
trayIcon.show();
logger.log(logger.HIGH, "Leaving NeverNote.initializeNotebookTree");
}
// Listener when a notebook is selected
- @SuppressWarnings("unused")
private void notebookTreeSelection() {
logger.log(logger.HIGH, "Entering NeverNote.notebookTreeSelection");
clearTagFilter();
searchField.clear();
}
-
menuBar.noteRestoreAction.setVisible(false);
menuBar.notebookEditAction.setEnabled(true);
menuBar.notebookDeleteAction.setEnabled(true);
// for (int i=<dbRunner.getLocalNotebooks().size()-1; i>=0; i--) {
// if (dbRunner.getLocalNotebooks().get(i).equals(arg0))
// }
+ notebookTreeSelection();
notebookTree.load(listManager.getNotebookIndex(), listManager.getLocalNotebooks());
listManager.countNotebookResults(listManager.getNoteIndex());
// notebookTree.updateCounts(listManager.getNotebookIndex(), listManager.getNotebookCounter());
for (int i=0; i<listManager.getNotebookIndex().size(); i++) {
if (listManager.getNotebookIndex().get(i).getGuid().equals(notebookGuid)) {
notebookName = listManager.getNotebookIndex().get(i).getName();
- i=listManager.getNotebookIndex().size();
+ break;
}
}
}
}
}
-
+ notebookTreeSelection();
listManager.loadNotesIndex();
notebookIndexUpdated();
- noteIndexUpdated(true);
+ noteIndexUpdated(false);
// noteIndexUpdated(false);
// Build a list of non-closed notebooks
removeTagItem(currentSelection.text(2));
}
tagIndexUpdated(true);
+ tagTreeSelection();
listManager.countTagResults(listManager.getNoteIndex());
// tagTree.updateCounts(listManager.getTagCounter());
logger.log(logger.HIGH, "Leaving NeverNote.deleteTag");
logger.log(logger.HIGH, "Leaving NeverNote.initializeTagTree");
}
// Listener when a tag is selected
- @SuppressWarnings("unused")
private void tagTreeSelection() {
logger.log(logger.HIGH, "Entering NeverNote.tagTreeSelection");
-
- List<QTreeWidgetItem> x = tagTree.selectedItems();
- for (int i=0; i<x.size(); i++) {
- }
-
+
clearTrashFilter();
clearAttributeFilter();
clearSavedSearchFilter();
if (tagName == null)
return;
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
- if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
- String titleGuid = (String)ix.values().toArray()[0];
- if (titleGuid.equals(noteGuid)) {
- String text = (String)noteTableView.model.data(i, Global.noteTableTagPosition);
- if (!text.trim().equals(""))
- text = text + Global.tagDelimeter + " " +tagName;
- else
- text = tagName;
- noteTableView.model.setData(i, Global.noteTableTagPosition, text);
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- if (noteGuid.equals(currentNoteGuid))
- browserWindow.setTag(text);
- i=noteTableView.model.rowCount();
+ for (int i=0; i<listManager.getMasterNoteIndex().size(); i++) {
+ if (listManager.getMasterNoteIndex().get(i).getGuid().equals(noteGuid)) {
+ List<String> tagNames = new ArrayList<String>();
+ tagNames.add(new String(tagName));
+ Note n = listManager.getMasterNoteIndex().get(i);
+ for (int j=0; j<n.getTagNames().size(); j++) {
+ tagNames.add(new String(n.getTagNames().get(j)));
+ }
+ listManager.getNoteTableModel().updateNoteTags(noteGuid, n.getTagGuids(), tagNames);
+ if (n.getGuid().equals(currentNoteGuid)) {
+ Collections.sort(tagNames);
+ String display = "";
+ for (int j=0; j<tagNames.size(); j++) {
+ display = display+tagNames.get(j);
+ if (j+2<tagNames.size())
+ display = display+Global.tagDelimeter+" ";
+ }
+ browserWindow.setTag(display);
}
+ i=listManager.getMasterNoteIndex().size();
}
}
+
+
+ listManager.getNoteTableModel().updateNoteSyncStatus(noteGuid, false);
}
private void clearTagFilter() {
tagTree.blockSignals(true);
private void editSavedSearch() {
logger.log(logger.HIGH, "Entering NeverNote.editSavedSearch");
SavedSearchEdit edit = new SavedSearchEdit();
- edit.setTitle("Edit Search");
+ edit.setTitle(tr("Edit Search"));
List<QTreeWidgetItem> selections = savedSearchTree.selectedItems();
QTreeWidgetItem currentSelection;
currentSelection = selections.get(0);
tr("<h4><center><b>NeverNote</b></center></h4><hr><center>Version ")
+Global.version
+tr("<hr></center>Evernote"
- +" Generic client.<br><br>"
+ +"An Open Source Evernote Client.<br><br>"
+"Licensed under GPL v2. <br><hr><br>"
+"Evernote is copyright 2001-2010 by Evernote Corporation<br>"
+"Jambi and QT are the licensed trademark of Nokia Corporation<br>"
+"PDFRenderer is licened under the LGPL<br>"
+ +"JTidy is copyrighted under the World Wide Web Consortium<br>"
+ +"Apache Common Utilities licensed under the Apache License Version 2.0<br>"
+"Jazzy is licened under the LGPL<br>"
- +"Java is a registered trademark of Sun Microsystems.<br><hr>"));
+ +"Java is a registered trademark of Oracle Corporation.<br><hr>"));
logger.log(logger.HIGH, "Leaving NeverNote.about");
}
// Hide the entire left hand side
searchPerformed = true;
logger.log(logger.HIGH, "Leaving NeverNote.searchFieldChanged");
}
+
// Build the window tool bar
private void setupToolBar() {
logger.log(logger.HIGH, "Entering NeverNote.setupToolBar");
- toolBar = addToolBar(tr("toolBar"));
+ toolBar = addToolBar(tr("Tool Bar"));
+ menuBar.setupToolBarVisible();
+ if (!Global.isWindowVisible("toolBar"))
+ toolBar.setVisible(false);
+ else
+ toolBar.setVisible(true);
prevButton = toolBar.addAction("Previous");
QIcon prevIcon = new QIcon(iconPath+"back.png");
newButton.triggered.connect(this, "addNote()");
newButton.setIcon(newIcon);
toolBar.addSeparator();
- toolBar.addWidget(new QLabel("Quota:"));
+ toolBar.addWidget(new QLabel(tr("Quota:")));
toolBar.addWidget(quotaBar);
//quotaBar.setSizePolicy(Policy.Minimum, Policy.Minimum);
updateQuotaBar();
zoomSpinner.setSingleStep(10);
zoomSpinner.setValue(100);
zoomSpinner.valueChanged.connect(this, "zoomChanged()");
- toolBar.addWidget(new QLabel("Zoom"));
+ toolBar.addWidget(new QLabel(tr("Zoom")));
toolBar.addWidget(zoomSpinner);
//toolBar.addWidget(new QLabel(" "));
toolBar.addSeparator();
- toolBar.addWidget(new QLabel(" Search:"));
+ toolBar.addWidget(new QLabel(tr(" Search:")));
toolBar.addWidget(searchField);
QSizePolicy sizePolicy = new QSizePolicy();
sizePolicy.setHorizontalPolicy(Policy.MinimumExpanding);
hide();
} else {
show();
+ if (windowMaximized)
+ showMaximized();
+ else
+ showNormal();
raise();
}
}
// SyncRunner had a problem and things are disconnected
@SuppressWarnings("unused")
private void remoteErrorDisconnect() {
- menuBar.connectAction.setText("Connect");
- menuBar.connectAction.setToolTip("Connect to Evernote");
+ menuBar.connectAction.setText(tr("Connect"));
+ menuBar.connectAction.setToolTip(tr("Connect to Evernote"));
menuBar.synchronizeAction.setEnabled(false);
synchronizeAnimationTimer.stop();
return;
private void setupConnectMenuOptions() {
logger.log(logger.HIGH, "entering NeverNote.setupConnectMenuOptions");
if (!Global.isConnected) {
- menuBar.connectAction.setText("Connect");
- menuBar.connectAction.setToolTip("Connect to Evernote");
+ menuBar.connectAction.setText(tr("Connect"));
+ menuBar.connectAction.setToolTip(tr("Connect to Evernote"));
menuBar.synchronizeAction.setEnabled(false);
} else {
- menuBar.connectAction.setText("Disconnect");
- menuBar.connectAction.setToolTip("Disconnect from Evernote");
+ menuBar.connectAction.setText(tr("Disconnect"));
+ menuBar.connectAction.setToolTip(tr("Disconnect from Evernote"));
menuBar.synchronizeAction.setEnabled(true);
}
logger.log(logger.HIGH, "Leaving NeverNote.setupConnectionMenuOptions");
DateAttributeFilterTable f = null;
f = findDateAttributeFilterTable(item.parent());
if (f!=null)
- f.select(item.text(0));
+ f.select(item.parent().indexOfChild(item));
else {
- String text = item.text(0);
- Global.containsFilter.select(text);
+ Global.containsFilter.select(item.parent().indexOfChild(item));
}
}
listManager.loadNotesIndex();
private DateAttributeFilterTable findDateAttributeFilterTable(QTreeWidgetItem w) {
if (w.parent() != null && w.childCount() > 0) {
QTreeWidgetItem parent = w.parent();
- if (parent.text(0).equalsIgnoreCase("created") &&
- w.text(0).equalsIgnoreCase("since"))
+ if (parent.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.Created &&
+ w.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.Since)
return Global.createdSinceFilter;
- if (parent.text(0).equalsIgnoreCase("created") &&
- w.text(0).equalsIgnoreCase("before"))
+ if (parent.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.Created &&
+ w.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.Before)
return Global.createdBeforeFilter;
- if (parent.text(0).equalsIgnoreCase("last modified") &&
- w.text(0).equalsIgnoreCase("since"))
+ if (parent.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.LastModified &&
+ w.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.Since)
return Global.changedSinceFilter;
- if (parent.text(0).equalsIgnoreCase("last modified") &&
- w.text(0).equalsIgnoreCase("before"))
+ if (parent.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.LastModified &&
+ w.data(0,ItemDataRole.UserRole)==AttributeTreeWidget.Attributes.Before)
return Global.changedBeforeFilter;
}
return null;
}
+
// Show/Hide attribute search window
private void toggleAttributesWindow() {
logger.log(logger.HIGH, "Entering NeverNote.toggleAttributesWindow");
upButton.setEnabled(false);
else
upButton.setEnabled(true);
- if (row < noteTableView.model.rowCount()-1)
+ if (row < listManager.getNoteTableModel().rowCount()-1)
downButton.setEnabled(true);
else
downButton.setEnabled(false);
// Trigger a refresh when the note db has been updated
private void noteIndexUpdated(boolean reload) {
logger.log(logger.HIGH, "Entering NeverNote.noteIndexUpdated");
- Global.traceReset();
saveNote();
refreshEvernoteNoteList();
logger.log(logger.HIGH, "Calling note table reload in NeverNote.noteIndexUpdated() - "+reload);
- noteTableView.load(listManager, reload);
+ noteTableView.load(reload);
scrollToGuid(currentNoteGuid);
logger.log(logger.HIGH, "Leaving NeverNote.noteIndexUpdated");
}
private void downAction() {
List<QModelIndex> selections = noteTableView.selectionModel().selectedRows();
int row = selections.get(0).row();
- int max = noteTableView.model.rowCount();
+ int max = listManager.getNoteTableModel().rowCount();
if (row < max-1) {
noteTableView.selectRow(row+1);
}
tagBuffer.append(", ");
}
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableTagPosition,tagBuffer.toString());
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition,tagBuffer.toString());
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
return;
}
}
}
// Update a title for a specific note in the list
@SuppressWarnings("unused")
- private void updateListTitle(String guid, String title) {
- logger.log(logger.HIGH, "Entering NeverNote.updateListTitle");
-
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- //QModelIndex modelIndex = noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
- if (modelIndex != null) {
-// SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
- String tableGuid = (String)ix.values().toArray()[0];
- if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableTitlePosition,title);
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- return;
- }
- }
- }
- logger.log(logger.HIGH, "Leaving NeverNote.updateListTitle");
- }
- // Update a title for a specific note in the list
- @SuppressWarnings("unused")
private void updateListAuthor(String guid, String author) {
logger.log(logger.HIGH, "Entering NeverNote.updateListAuthor");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
//QModelIndex modelIndex = noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
// SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableAuthorPosition,author);
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableAuthorPosition,author);
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
return;
}
}
}
private void updateListNoteNotebook(String guid, String notebook) {
logger.log(logger.HIGH, "Entering NeverNote.updateListNoteNotebook");
-
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- //QModelIndex modelIndex = noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
- if (modelIndex != null) {
-// SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
- String tableGuid = (String)ix.values().toArray()[0];
- if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableNotebookPosition,notebook);
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- return;
- }
- }
- }
+ listManager.getNoteTableModel().updateNoteSyncStatus(guid, false);
logger.log(logger.HIGH, "Leaving NeverNote.updateListNoteNotebook");
}
// Update a title for a specific note in the list
private void updateListSourceUrl(String guid, String url) {
logger.log(logger.HIGH, "Entering NeverNote.updateListAuthor");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
//QModelIndex modelIndex = noteTableView.proxyModel.index(i, Global.noteTableGuidPosition);
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
// SortedMap<Integer, Object> ix = noteTableView.proxyModel.itemData(modelIndex);
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- noteTableView.model.setData(i, Global.noteTableSourceUrlPosition,url);
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableSourceUrlPosition,url);
return;
}
}
private void updateListGuid(String oldGuid, String newGuid) {
logger.log(logger.HIGH, "Entering NeverNote.updateListTitle");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(oldGuid)) {
- noteTableView.model.setData(i, Global.noteTableGuidPosition,newGuid);
- //noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableGuidPosition,newGuid);
+ //listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
return;
}
}
if (listManager.getNoteIndex().get(j).getTagGuids().contains(guid)) {
String newName = listManager.getTagNamesForNote(listManager.getNoteIndex().get(j));
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String noteGuid = (String)ix.values().toArray()[0];
if (noteGuid.equalsIgnoreCase(listManager.getNoteIndex().get(j).getGuid())) {
- noteTableView.model.setData(i, Global.noteTableTagPosition, newName);
- //noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- i=noteTableView.model.rowCount();
+ listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition, newName);
+ //listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ i=listManager.getNoteTableModel().rowCount();
}
}
}
}
String newName = listManager.getTagNamesForNote(listManager.getNoteIndex().get(j));
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String noteGuid = (String)ix.values().toArray()[0];
if (noteGuid.equalsIgnoreCase(listManager.getNoteIndex().get(j).getGuid())) {
- noteTableView.model.setData(i, Global.noteTableTagPosition, newName);
-// noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- i=noteTableView.model.rowCount();
+ listManager.getNoteTableModel().setData(i, Global.noteTableTagPosition, newName);
+// listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ i=listManager.getNoteTableModel().rowCount();
}
}
}
private void updateListNotebookName(String oldName, String newName) {
logger.log(logger.HIGH, "Entering NeverNote.updateListNotebookName");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableNotebookPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableNotebookPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableName = (String)ix.values().toArray()[0];
if (tableName.equalsIgnoreCase(oldName)) {
-// noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- noteTableView.model.setData(i, Global.noteTableNotebookPosition, newName);
+// listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableNotebookPosition, newName);
}
}
}
private void updateListDateCreated(String guid, QDateTime date) {
logger.log(logger.HIGH, "Entering NeverNote.updateListDateCreated");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableCreationPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+ listManager.getNoteTableModel().setData(i, Global.noteTableCreationPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
return;
}
}
private void updateListDateSubject(String guid, QDateTime date) {
logger.log(logger.HIGH, "Entering NeverNote.updateListDateSubject");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- noteTableView.model.setData(i, Global.noteTableSubjectDatePosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableSubjectDatePosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
return;
}
}
private void updateListDateChanged(String guid, QDateTime date) {
logger.log(logger.HIGH, "Entering NeverNote.updateListDateChanged");
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(guid)) {
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- noteTableView.model.setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
return;
}
}
private void updateListDateChanged() {
logger.log(logger.HIGH, "Entering NeverNote.updateListDateChanged");
QDateTime date = new QDateTime(QDateTime.currentDateTime());
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(currentNoteGuid)) {
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
- noteTableView.model.setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableChangedPosition, date.toString(Global.getDateFormat()+" " +Global.getTimeFormat()));
return;
}
}
// noteTableView.setCurrentIndex(index);
noteTableView.selectRow(i);
noteTableView.scrollTo(index, ScrollHint.EnsureVisible); // This should work, but it doesn't
- i=noteTableView.model.rowCount();
+ i=listManager.getNoteTableModel().rowCount();
}
}
}
selectedNoteGUIDs.add(currentNoteGuid);
for (int j=0; j<selectedNoteGUIDs.size(); j++) {
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(selectedNoteGUIDs.get(j))) {
for (int k=0; k<Global.noteTableColumnCount; k++) {
- noteTableView.model.setData(i, k, backgroundColor, Qt.ItemDataRole.BackgroundRole);
- noteTableView.model.setData(i, k, foregroundColor, Qt.ItemDataRole.ForegroundRole);
+ listManager.getNoteTableModel().setData(i, k, backgroundColor, Qt.ItemDataRole.BackgroundRole);
+ listManager.getNoteTableModel().setData(i, k, foregroundColor, Qt.ItemDataRole.ForegroundRole);
listManager.updateNoteTitleColor(selectedNoteGUIDs.get(j), backgroundColor.rgb());
}
- i=noteTableView.model.rowCount();
+ i=listManager.getNoteTableModel().rowCount();
}
}
}
@SuppressWarnings("unused")
private void setNoteDirty() {
logger.log(logger.EXTREME, "Entering NeverNote.setNoteDirty()");
- noteDirty = true;
-
- listManager.getUnsynchronizedNotes().add(currentNoteGuid);
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
+
+ // If the note is dirty, then it is unsynchronized by default.
+ if (noteDirty)
+ return;
+
+ // Set the note as dirty and check if its status is synchronized in the display table
+ noteDirty = true;
+ for (int i=0; i<listManager.getUnsynchronizedNotes().size(); i++) {
+ if (listManager.getUnsynchronizedNotes().get(i).equals(currentNoteGuid))
+ return;
+ }
+
+ // If this wasn't already marked as unsynchronized, then we need to update the table
+ listManager.getNoteTableModel().updateNoteSyncStatus(currentNoteGuid, false);
+/* listManager.getUnsynchronizedNotes().add(currentNoteGuid);
+ for (int i=0; i<listManager.getNoteTableModel().rowCount(); i++) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(i, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(currentNoteGuid)) {
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, "false");
+ listManager.getNoteTableModel().setData(i, Global.noteTableSynchronizedPosition, "false");
return;
}
}
}
+ */
logger.log(logger.EXTREME, "Leaving NeverNote.setNoteDirty()");
}
private void saveNote() {
logger.log(logger.EXTREME, "updating list manager");
listManager.updateNoteContent(currentNoteGuid, browserWindow.getContent());
+// noteCache.put(currentNoteGuid, browserWindow.getContent());
logger.log(logger.EXTREME, "Updating title");
listManager.updateNoteTitle(currentNoteGuid, browserWindow.getTitle());
updateListDateChanged();
String text2 = browserWindow.getContentsToEmail();
QUrl url = new QUrl("mailto:");
url.addQueryItem("subject", currentNote.getTitle());
- url.addQueryItem("body", QUrl.toPercentEncoding(text2).toString());
+// url.addQueryItem("body", QUrl.toPercentEncoding(text2).toString());
+ url.addQueryItem("body", text2);
QDesktopServices.openUrl(url);
}
/*
if (selectedNoteGUIDs.size() == 0 && !currentNoteGuid.equals(""))
selectedNoteGUIDs.add(currentNoteGuid);
for (int i=selectedNoteGUIDs.size()-1; i>=0; i--) {
- for (int j=noteTableView.model.rowCount()-1; j>=0; j--) {
- QModelIndex modelIndex = noteTableView.model.index(j, Global.noteTableGuidPosition);
+ for (int j=listManager.getNoteTableModel().rowCount()-1; j>=0; j--) {
+ QModelIndex modelIndex = listManager.getNoteTableModel().index(j, Global.noteTableGuidPosition);
if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
+ SortedMap<Integer, Object> ix = listManager.getNoteTableModel().itemData(modelIndex);
String tableGuid = (String)ix.values().toArray()[0];
if (tableGuid.equals(selectedNoteGUIDs.get(i))) {
- noteTableView.model.removeRow(j);
+ listManager.getNoteTableModel().removeRow(j);
j=-1;
}
}
"<en-note>\n<br clear=\"none\" /></en-note>");
Long l = new Long(currentTime.getTimeInMillis());
- String randint = new String(Long.toString(l));
+ String randint = new String(Long.toString(l));
// Find a notebook. We first look for a selected notebook (the "All Notebooks" one doesn't count).
// Then we look
na.setLongitude(0.0);
na.setAltitude(0.0);
newNote.setAttributes(new NoteAttributes());
+ newNote.setTagGuids(new ArrayList<String>());
+ newNote.setTagNames(new ArrayList<String>());
+
+ // If new notes are to be created based upon the selected tags, then we need to assign the tags
+ if (Global.newNoteWithSelectedTags()) {
+ List<QTreeWidgetItem> selections = tagTree.selectedItems();
+ QTreeWidgetItem currentSelection;
+ for (int i=0; i<selections.size(); i++) {
+ currentSelection = selections.get(i);
+ newNote.getTagGuids().add(currentSelection.text(2));
+ newNote.getTagNames().add(currentSelection.text(0));
+ }
+ }
+
conn.getNoteTable().addNote(newNote, true);
listManager.getUnsynchronizedNotes().add(newNote.getGuid());
- noteTableView.insertRow(listManager, newNote, true, -1);
+ listManager.addNote(newNote);
+// noteTableView.insertRow(newNote, true, -1);
currentNote = newNote;
currentNoteGuid = currentNote.getGuid();
- listManager.addNote(newNote);
refreshEvernoteNote(true);
listManager.countNotebookResults(listManager.getNoteIndex());
browserWindow.titleLabel.setFocus();
private void invalidateNoteCache(String guid, String content) {
String v = noteCache.remove(guid);
if (content != null) {
- v = noteCache.put(guid, content);
+ //noteCache.put(guid, content);
}
}
// Signal received that a note guid has changed
i=listManager.getNoteIndex().size();
}
}
- updateListGuid(oldGuid, newGuid);
+ if (listManager.getNoteTableModel().titleColors.containsKey(oldGuid)) {
+ int color = listManager.getNoteTableModel().titleColors.get(oldGuid);
+ listManager.getNoteTableModel().titleColors.put(newGuid, color);
+ listManager.getNoteTableModel().titleColors.remove(oldGuid);
+ }
+
}
// Toggle the note editor button bar
private void toggleEditorButtonBar() {
}
// Show editor buttons
private void showEditorButtons() {
+ browserWindow.buttonLayout.setVisible(true);
+ browserWindow.undoAction.setVisible(false);
+
browserWindow.undoButton.setVisible(false);
- browserWindow.redoButton.setVisible(false);
- browserWindow.cutButton.setVisible(false);
- browserWindow.copyButton.setVisible(false);
- browserWindow.pasteButton.setVisible(false);
- browserWindow.strikethroughButton.setVisible(false);
- browserWindow.underlineButton.setVisible(false);
- browserWindow.boldButton.setVisible(false);
- browserWindow.italicButton.setVisible(false);
- browserWindow.hlineButton.setVisible(false);
- browserWindow.indentButton.setVisible(false);
- browserWindow.outdentButton.setVisible(false);
- browserWindow.fontList.setVisible(false);
- browserWindow.fontSize.setVisible(false);
- browserWindow.fontColor.setVisible(false);
- browserWindow.fontHilight.setVisible(false);
- browserWindow.leftAlignButton.setVisible(false);
- browserWindow.centerAlignButton.setVisible(false);
- browserWindow.rightAlignButton.setVisible(false);
- browserWindow.indentButton.setVisible(false);
- browserWindow.outdentButton.setVisible(false);
- browserWindow.undoButton.setVisible(Global.isEditorButtonVisible("undo"));
- browserWindow.redoButton.setVisible(Global.isEditorButtonVisible("redo"));
- browserWindow.cutButton.setVisible(Global.isEditorButtonVisible("cut"));
- browserWindow.copyButton.setVisible(Global.isEditorButtonVisible("copy"));
- browserWindow.pasteButton.setVisible(Global.isEditorButtonVisible("paste"));
- browserWindow.strikethroughButton.setVisible(Global.isEditorButtonVisible("strikethrough"));
- browserWindow.underlineButton.setVisible(Global.isEditorButtonVisible("underline"));
- browserWindow.boldButton.setVisible(Global.isEditorButtonVisible("bold"));
- browserWindow.italicButton.setVisible(Global.isEditorButtonVisible("italic"));
- browserWindow.hlineButton.setVisible(Global.isEditorButtonVisible("hline"));
- browserWindow.indentButton.setVisible(Global.isEditorButtonVisible("indent"));
- browserWindow.outdentButton.setVisible(Global.isEditorButtonVisible("outdent"));
- browserWindow.bulletListButton.setVisible(Global.isEditorButtonVisible("bulletList"));
- browserWindow.numberListButton.setVisible(Global.isEditorButtonVisible("numberList"));
- browserWindow.fontList.setVisible(Global.isEditorButtonVisible("font"));
- browserWindow.fontSize.setVisible(Global.isEditorButtonVisible("fontSize"));
- browserWindow.fontColor.setVisible(Global.isEditorButtonVisible("fontColor"));
- browserWindow.fontHilight.setVisible(Global.isEditorButtonVisible("fontHilight"));
- browserWindow.leftAlignButton.setVisible(Global.isEditorButtonVisible("alignLeft"));
- browserWindow.centerAlignButton.setVisible(Global.isEditorButtonVisible("alignCenter"));
- browserWindow.rightAlignButton.setVisible(Global.isEditorButtonVisible("alignRight"));
+ browserWindow.undoAction.setVisible(Global.isEditorButtonVisible("undo"));
+ browserWindow.redoAction.setVisible(Global.isEditorButtonVisible("redo"));
+ browserWindow.cutAction.setVisible(Global.isEditorButtonVisible("cut"));
+ browserWindow.copyAction.setVisible(Global.isEditorButtonVisible("copy"));
+ browserWindow.pasteAction.setVisible(Global.isEditorButtonVisible("paste"));
+ browserWindow.strikethroughAction.setVisible(Global.isEditorButtonVisible("strikethrough"));
+ browserWindow.underlineAction.setVisible(Global.isEditorButtonVisible("underline"));
+ browserWindow.boldAction.setVisible(Global.isEditorButtonVisible("bold"));
+ browserWindow.italicAction.setVisible(Global.isEditorButtonVisible("italic"));
+ browserWindow.hlineAction.setVisible(Global.isEditorButtonVisible("hline"));
+ browserWindow.indentAction.setVisible(Global.isEditorButtonVisible("indent"));
+ browserWindow.outdentAction.setVisible(Global.isEditorButtonVisible("outdent"));
+ browserWindow.bulletListAction.setVisible(Global.isEditorButtonVisible("bulletList"));
+ browserWindow.numberListAction.setVisible(Global.isEditorButtonVisible("numberList"));
+ browserWindow.fontListAction.setVisible(Global.isEditorButtonVisible("font"));
+ browserWindow.fontSizeAction.setVisible(Global.isEditorButtonVisible("fontSize"));
+ browserWindow.fontColorAction.setVisible(Global.isEditorButtonVisible("fontColor"));
+ browserWindow.fontHilightAction.setVisible(Global.isEditorButtonVisible("fontHilight"));
+ browserWindow.leftAlignAction.setVisible(Global.isEditorButtonVisible("alignLeft"));
+ browserWindow.centerAlignAction.setVisible(Global.isEditorButtonVisible("alignCenter"));
+ browserWindow.rightAlignAction.setVisible(Global.isEditorButtonVisible("alignRight"));
}
private void duplicateNote(String guid) {
- Calendar currentTime = new GregorianCalendar();
- Long l = new Long(currentTime.getTimeInMillis());
- String newGuid = new String(Long.toString(l));
-
Note oldNote = conn.getNoteTable().getNote(guid, true, true, false, false, false);
- Note newNote = oldNote.deepCopy();
- newNote.setGuid(newGuid);
List<Resource> resList = conn.getNoteTable().noteResourceTable.getNoteResources(guid, true);
+ oldNote.setContent(conn.getNoteTable().getNoteContentBinary(guid));
oldNote.setResources(resList);
duplicateNote(oldNote);
}
listManager.addNote(newNote);
conn.getNoteTable().addNote(newNote, true);
listManager.getUnsynchronizedNotes().add(newNote.getGuid());
- noteTableView.insertRow(listManager, newNote, true, -1);
+ noteTableView.insertRow(newNote, true, -1);
listManager.countNotebookResults(listManager.getNoteIndex());
waitCursor(false);
}
if (!thumbnailViewer.isVisible())
thumbnailViewer.showFullScreen();
}
-
+ // An error happened while saving a note. Inform the user
+ @SuppressWarnings("unused")
+ private void saveRunnerError(String guid, String msg) {
+ if (msg == null) {
+ String title = "*Unknown*";
+ for (int i=0; i<listManager.getMasterNoteIndex().size(); i++) {
+ if (listManager.getMasterNoteIndex().get(i).getGuid().equals(guid)) {
+ title = listManager.getMasterNoteIndex().get(i).getTitle();
+ i=listManager.getMasterNoteIndex().size();
+ }
+ }
+ msg = "An error has happened saving the note \"" +title+
+ "\". \nThis is probably due to a document that is too complex for Nevernote to process. "+
+ "As a result, changes to the note may not be saved.\n\nPlease review the note for any potential problems.";
+
+ QMessageBox.information(this, tr("Error Saving Note"), tr(msg));
+ }
+ }
+
//**********************************************************
//**********************************************************
//* Online user actions
int endPos =html.indexOf(">",i+1);
String input = html.substring(i,endPos);
if (input.indexOf("value=\"true\"") > 0)
- input = input.replace("unchecked=\"\"", "checked=\"\"");
+ input = input.replace(" unchecked=\"\"", " checked=\"\"");
else
- input = input.replace("checked=\"\"", "unchecked=\"\"");
+ input = input.replace(" checked=\"\"", " unchecked=\"\"");
html.replace(i, endPos, input);
i++;
}
enmedia.removeChild(enmedia.firstChild()); // Remove the actual encrypted text
}
+
+ // Modify link tags
+ anchors = docElem.elementsByTagName("a");
+ enCryptLen = anchors.length();
+ for (int i=0; i<anchors.length(); i++) {
+ QDomElement element = anchors.at(i).toElement();
+ element.setAttribute("title", element.attribute("href"));
+ }
+
logger.log(logger.HIGH, "Leaving NeverNote.modifyTags");
return doc;
}
syncRunning = false;
syncRunner.syncNeeded = false;
synchronizeAnimationTimer.stop();
- noteIndexUpdated(true);
synchronizeButton.setIcon(synchronizeAnimation.get(0));
saveNote();
-// noteTableView.selectionModel().selectionChanged.disconnect(this, "noteTableSelection()");
+ if (currentNote == null) {
+ currentNote = conn.getNoteTable().getNote(currentNoteGuid, false, false, false, false, true);
+ }
+ listManager.setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());
+ noteIndexUpdated(false);
noteTableView.selectionModel().blockSignals(true);
scrollToGuid(currentNoteGuid);
noteTableView.selectionModel().blockSignals(false);
-// noteTableView.selectionModel().selectionChanged.connect(this, "noteTableSelection()");
-// indexRunner.setKeepRunning(Global.keepRunning);
-
- listManager.setUnsynchronizedNotes(conn.getNoteTable().getUnsynchronizedGUIDs());
- for (int i=0; i<noteTableView.model.rowCount(); i++) {
- QModelIndex modelIndex = noteTableView.model.index(i, Global.noteTableGuidPosition);
- if (modelIndex != null) {
- SortedMap<Integer, Object> ix = noteTableView.model.itemData(modelIndex);
- String tableGuid = (String)ix.values().toArray()[0];
- String synch = "true";
- for (int j=0; j<listManager.getUnsynchronizedNotes().size(); j++) {
- if (listManager.getUnsynchronizedNotes().get(j).equalsIgnoreCase(tableGuid)) {
- synch = "false";
- j = listManager.getUnsynchronizedNotes().size();
- }
- }
- noteTableView.model.setData(i, Global.noteTableSynchronizedPosition, synch);
- }
- }
refreshEvernoteNote(false);
scrollToGuid(currentNoteGuid);
- setMessage(tr("Synchronization Complete"));
+ waitCursor(false);
+ if (!syncRunner.error)
+ setMessage(tr("Synchronization Complete"));
+ else
+ setMessage(tr("Synchronization completed with errors. Please check the log for details."));
logger.log(logger.MEDIUM, "Sync complete.");
}
-// public void setSequenceDate(long t) {
-// Global.setSequenceDate(t);
-// }
public void saveUploadAmount(long t) {
Global.saveUploadAmount(t);
}
-// public void setUpdateSequenceNumber(int t) {
-// Global.setUpdateSequenceNumber(t);
-// }
public void saveUserInformation(User user) {
Global.saveUserInformation(user);
}
listManager.addNote(newNote);
conn.getNoteTable().addNote(newNote, true);
listManager.getUnsynchronizedNotes().add(newNote.getGuid());
- noteTableView.insertRow(listManager, newNote, true, -1);
+ noteTableView.insertRow(newNote, true, -1);
listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
listManager.countNotebookResults(listManager.getNoteIndex());
importedFiles.add(list.get(i).absoluteFilePath());
listManager.addNote(newNote);
conn.getNoteTable().addNote(newNote, true);
listManager.getUnsynchronizedNotes().add(newNote.getGuid());
- noteTableView.insertRow(listManager, newNote, true, -1);
+ noteTableView.insertRow(newNote, true, -1);
listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
listManager.countNotebookResults(listManager.getNoteIndex());
dir.remove(dir.at(i));
}
-
+ //*************************************************
+ //* Minimize to tray
+ //*************************************************
+ @Override
+ public void changeEvent(QEvent e) {
+ if (e.type() == QEvent.Type.WindowStateChange) {
+ if (isMinimized() && Global.showTrayIcon()) {
+ e.accept();
+ QTimer.singleShot(10, this, "hide()");
+ return;
+ }
+ if (isMaximized())
+ windowMaximized = true;
+ else
+ windowMaximized = false;
+ }
+ }
//*************************************************
//* Check database userid & passwords