import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.security.MessageDigest;
import cx.fbn.nevernote.dialog.FindDialog;
import cx.fbn.nevernote.dialog.IgnoreSync;
import cx.fbn.nevernote.dialog.LogFileDialog;
-import cx.fbn.nevernote.dialog.LoginDialog;
import cx.fbn.nevernote.dialog.NotebookArchive;
import cx.fbn.nevernote.dialog.NotebookEdit;
import cx.fbn.nevernote.dialog.OnlineNoteHistory;
import cx.fbn.nevernote.gui.Thumbnailer;
import cx.fbn.nevernote.gui.TrashTreeWidget;
import cx.fbn.nevernote.gui.controls.QuotaProgressBar;
+import cx.fbn.nevernote.oauth.OAuthTokenizer;
+import cx.fbn.nevernote.oauth.OAuthWindow;
import cx.fbn.nevernote.sql.DatabaseConnection;
import cx.fbn.nevernote.sql.WatchFolderRecord;
import cx.fbn.nevernote.threads.IndexRunner;
int sortCol = Global.getSortColumn();
int sortOrder = Global.getSortOrder();
noteTableView.proxyModel.blocked = true;
+ // We sort the table twice to fix a bug. For some reaosn the table won't sort properly if it is in narrow
+ // list view and sorted descending on the date created. By sorting it twice it forces the proper sort. Ugly.
+ if (sortCol == 0 && sortOrder == 1 && Global.getListView() == Global.View_List_Narrow)
+ noteTableView.sortByColumn(sortCol, SortOrder.resolve(0));
noteTableView.sortByColumn(sortCol, SortOrder.resolve(sortOrder));
noteTableView.proxyModel.blocked = false;
noteTableView.proxyModel.sortChanged.connect(this, "tableSortOrderChanged(Integer,Integer)");
logger.log(logger.HIGH, "Leaving NeverNote.closeEvent");
}
- @SuppressWarnings("unused")
+
private void closeNeverNote() {
closeAction = true;
close();
public void setMessage(String s) {
logger.log(logger.HIGH, "Entering NeverNote.setMessage");
- statusBar.show();
- logger.log(logger.HIGH, "Message: " +s);
- statusBar.showMessage(s);
- emitLog.add(s);
-
-
- messageTimer.stop();
- messageTimer.setSingleShot(true);
- messageTimer.start();
+ if (statusBar != null) {
+ statusBar.show();
+ logger.log(logger.HIGH, "Message: " +s);
+ statusBar.showMessage(s);
+ emitLog.add(s);
+ messageTimer.stop();
+ messageTimer.setSingleShot(true);
+ messageTimer.start();
+ }
+
logger.log(logger.HIGH, "Leaving NeverNote.setMessage");
}
if (currentNote != null && currentNote.getTagGuids().contains(guid))
browserWindow.setTag(getTagNamesForNote(currentNote));
logger.log(logger.HIGH, "Leaving NeverNote.editTag");
- return;
+ //return;
}
}
+ listManager.reloadNoteTagNames(guid, edit.getTag());
+ noteIndexUpdated(true);
+ refreshEvernoteNote(true);
browserWindow.setTag(getTagNamesForNote(currentNote));
logger.log(logger.HIGH, "Leaving NeverNote.editTag...");
}
QMessageBox.about(this,
tr("About NixNote"),
tr("<h4><center><b>NixNote</b></center></h4><hr><center>Version ")
- //+Global.version
- +"1.2.120404"
+ +Global.version
+ //+"1.2.120724"
+tr("<hr>"
+"Open Source Evernote Client.<br><br>"
+"Licensed under GPL v2. <br><hr><br>"
}
// Do a manual connect/disconnect
private void remoteConnect() {
+
logger.log(logger.HIGH, "Entering NeverNote.remoteConnect");
+ // If we are already connected, we just disconnect
if (Global.isConnected) {
Global.isConnected = false;
syncRunner.enDisconnect();
return;
}
+ OAuthTokenizer tokenizer = new OAuthTokenizer();
AESEncrypter aes = new AESEncrypter();
try {
- aes.decrypt(new FileInputStream(Global.getFileManager().getHomeDirFile("secure.txt")));
+ aes.decrypt(new FileInputStream(Global.getFileManager().getHomeDirFile("oauth.txt")));
} catch (FileNotFoundException e) {
// File not found, so we'll just get empty strings anyway.
}
-
+
+
if (Global.getProxyValue("url").equals("")) {
System.setProperty("http.proxyHost","") ;
System.setProperty("http.proxyPort", "") ;
syncRunner.userStoreUrl = Global.userStoreUrl;
syncRunner.noteStoreUrl = Global.noteStoreUrl;
syncRunner.noteStoreUrlBase = Global.noteStoreUrlBase;
-
- String userid = aes.getUserid();
- String password = aes.getPassword();
- if (!userid.equals("") && !password.equals("")) {
- Global.username = userid;
- Global.password = password;
- syncRunner.username = Global.username;
- syncRunner.password = Global.password;
+
+
+
+ String authString = aes.getString();
+ if (!authString.equals("")) {
+ tokenizer.tokenize(authString);
+ syncRunner.authToken = tokenizer.oauth_token;
syncRunner.enConnect();
}
Global.isConnected = syncRunner.isConnected;
if (!Global.isConnected) {
- // Show the login dialog box
- if (!Global.automaticLogin() || userid.equals("")|| password.equals("")) {
- LoginDialog login = new LoginDialog();
- login.exec();
-
- if (!login.okPressed()) {
- return;
- }
-
- Global.username = login.getUserid();
- Global.password = login.getPassword();
+ OAuthWindow window = new OAuthWindow(logger);
+ if (window.error) {
+ setMessage(window.errorMessage);
+ return;
+ }
+ window.exec();
+ if (window.error) {
+ setMessage(window.errorMessage);
+ return;
}
- syncRunner.username = Global.username;
- syncRunner.password = Global.password;
+ tokenizer.tokenize(window.response);
+ if (tokenizer.oauth_token.equals("")) {
+ setMessage(tr("Invalid authorization token received."));
+ return;
+ }
+ aes.setString(window.response);
+ try {
+ aes.encrypt(new FileOutputStream(Global.getFileManager().getHomeDirFile("oauth.txt")));
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ syncRunner.authToken = tokenizer.oauth_token;
syncRunner.enConnect();
Global.isConnected = syncRunner.isConnected;
}
-
+ Global.username = syncRunner.username;
+
if (!Global.isConnected)
return;
setupOnlineMenu();
setupConnectMenuOptions();
logger.log(logger.HIGH, "Leaving NeverNote.remoteConnect");
+
+
}
private void setupConnectMenuOptions() {
logger.log(logger.HIGH, "entering NeverNote.setupConnectMenuOptions");
@SuppressWarnings("unused")
private void updateNoteTitle(String guid, String title) {
listManager.setNoteSynchronized(guid, false);
+
+ // We do this manually because if we've edited the note in an
+ // external window we run into the possibility of signal recursion
+ // looping.
+ if (guid.equals(currentNoteGuid)) {
+ browserWindow.titleLabel.blockSignals(true);
+ browserWindow.titleLabel.setText(title);
+ browserWindow.titleLabel.blockSignals(false);
+ }
}
// Signal received that note content has changed. Normally we just need the guid to remove
// it from the cache.
// importKeepWatcher.addPath(records.get(i).folder.replace('\\', '/'));
for (int i=0; i<records.size(); i++) {
+ logger.log(logger.LOW, "Adding file monitor: " +records.get(i).folder);
if (records.get(i).keep)
importKeepWatcher.addPath(records.get(i).folder);
else
importDeleteWatcher.addPath(records.get(i).folder);
}
+ logger.log(logger.EXTREME, "List of directories being watched (kept)...");
+ List<String> monitorDelete = importKeepWatcher.directories();
+ for (int i=0; i<monitorDelete.size(); i++) {
+ logger.log(logger.EXTREME, monitorDelete.get(i));
+ }
+ logger.log(logger.EXTREME, "<end of list>");
+ logger.log(logger.EXTREME, "List of directories being watched (delete)...");
+ monitorDelete = importDeleteWatcher.directories();
+ for (int i=0; i<monitorDelete.size(); i++) {
+ logger.log(logger.EXTREME, monitorDelete.get(i));
+ }
+ logger.log(logger.EXTREME, "<end of list>");
+
importKeepWatcher.directoryChanged.connect(this, "folderImportKeep(String)");
importDeleteWatcher.directoryChanged.connect(this, "folderImportDelete(String)");
}
}
}
+
+ // Menu folderImport action triggered
public void folderImport() {
List<WatchFolderRecord> recs = conn.getWatchFolderTable().getAll();
WatchFolder dialog = new WatchFolder(recs, listManager.getNotebookIndex());
setupFolderImports();
}
+
public void folderImportKeep(String dirName) throws NoSuchAlgorithmException {
-
+ logger.log(logger.LOW, "Inside folderImportKeep");
String whichOS = System.getProperty("os.name");
if (whichOS.contains("Windows"))
dirName = dirName.replace('/','\\');
String notebook = conn.getWatchFolderTable().getNotebook(dirName);
for (int i=0; i<list.size(); i++){
-
+ logger.log(logger.LOW, "File found: " +list.get(i).fileName());
boolean redundant = false;
// Check if we've already imported this one or if it existed before
for (int j=0; j<importedFiles.size(); j++) {
+ logger.log(logger.LOW, "redundant file list: " +list.get(i).absoluteFilePath());
if (importedFiles.get(j).equals(list.get(i).absoluteFilePath()))
redundant = true;
}
+ logger.log(logger.LOW, "Checking if redundant: " +redundant);
if (!redundant) {
importer.setFileInfo(list.get(i));
importer.setFileName(list.get(i).absoluteFilePath());
+ logger.log(logger.LOW, "File importing is a file: " +list.get(i).isFile());
+ logger.log(logger.LOW, "File importing is a valid: " +importer.isValidType());
if (list.get(i).isFile() && importer.isValidType()) {
if (!importer.importFile()) {
// If we can't get to the file, it is probably locked. We'll try again later.
logger.log(logger.LOW, "Unable to save externally edited file. Saving for later.");
importFilesKeep.add(list.get(i).absoluteFilePath());
- return;
+ } else {
+
+ Note newNote = importer.getNote();
+ newNote.setNotebookGuid(notebook);
+ newNote.setTitle(dir.at(i));
+ NoteMetadata metadata = new NoteMetadata();
+ metadata.setDirty(true);
+ metadata.setGuid(newNote.getGuid());
+ listManager.addNote(newNote, metadata);
+ conn.getNoteTable().addNote(newNote, true);
+ noteTableView.insertRow(newNote, metadata, true, -1);
+ listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
+ listManager.countNotebookResults(listManager.getNoteIndex());
+ importedFiles.add(list.get(i).absoluteFilePath());
}
-
- Note newNote = importer.getNote();
- newNote.setNotebookGuid(notebook);
- newNote.setTitle(dir.at(i));
- NoteMetadata metadata = new NoteMetadata();
- metadata.setDirty(true);
- metadata.setGuid(newNote.getGuid());
- listManager.addNote(newNote, metadata);
- conn.getNoteTable().addNote(newNote, true);
- noteTableView.insertRow(newNote, metadata, true, -1);
- listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
- listManager.countNotebookResults(listManager.getNoteIndex());
- importedFiles.add(list.get(i).absoluteFilePath());
}
}
}
}
public void folderImportDelete(String dirName) {
-
+ logger.log(logger.LOW, "Inside folderImportDelete");
String whichOS = System.getProperty("os.name");
if (whichOS.contains("Windows"))
dirName = dirName.replace('/','\\');
String notebook = conn.getWatchFolderTable().getNotebook(dirName);
for (int i=0; i<list.size(); i++){
+ logger.log(logger.LOW, "File found: " +list.get(i).fileName());
importer.setFileInfo(list.get(i));
importer.setFileName(list.get(i).absoluteFilePath());
+ logger.log(logger.LOW, "File importing is a file: " +list.get(i).isFile());
+ logger.log(logger.LOW, "File importing is a valid: " +importer.isValidType());
if (list.get(i).isFile() && importer.isValidType()) {
if (!importer.importFile()) {
// If we can't get to the file, it is probably locked. We'll try again later.
logger.log(logger.LOW, "Unable to save externally edited file. Saving for later.");
importFilesKeep.add(list.get(i).absoluteFilePath());
- return;
- }
+ } else {
- Note newNote = importer.getNote();
- newNote.setNotebookGuid(notebook);
- newNote.setTitle(dir.at(i));
- NoteMetadata metadata = new NoteMetadata();
- metadata.setDirty(true);
- metadata.setGuid(newNote.getGuid());
- listManager.addNote(newNote, metadata);
- conn.getNoteTable().addNote(newNote, true);
- noteTableView.insertRow(newNote, metadata, true, -1);
- listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
- listManager.countNotebookResults(listManager.getNoteIndex());
- dir.remove(dir.at(i));
+ Note newNote = importer.getNote();
+ newNote.setNotebookGuid(notebook);
+ newNote.setTitle(dir.at(i));
+ NoteMetadata metadata = new NoteMetadata();
+ metadata.setDirty(true);
+ metadata.setGuid(newNote.getGuid());
+ listManager.addNote(newNote, metadata);
+ conn.getNoteTable().addNote(newNote, true);
+ noteTableView.insertRow(newNote, metadata, true, -1);
+ listManager.updateNoteContent(newNote.getGuid(), importer.getNoteContent());
+ listManager.countNotebookResults(listManager.getNoteIndex());
+ dir.remove(dir.at(i));
+ }
}
}
}