OSDN Git Service

- Correct issue with importing when not a premium member.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / NeverNote.java
index 47c5fe8..5ec756e 100644 (file)
@@ -21,6 +21,7 @@ import java.awt.Desktop;
 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;
@@ -148,7 +149,6 @@ import cx.fbn.nevernote.dialog.DatabaseStatus;
 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;
@@ -180,6 +180,8 @@ import cx.fbn.nevernote.gui.TagTreeWidget;
 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;
@@ -769,6 +771,10 @@ public class NeverNote extends QMainWindow{
        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)");
@@ -1123,7 +1129,7 @@ public class NeverNote extends QMainWindow{
                logger.log(logger.HIGH, "Leaving NeverNote.closeEvent");
        }
 
-       @SuppressWarnings("unused")
+
        private void closeNeverNote() {
                closeAction = true;
                close();
@@ -1131,16 +1137,17 @@ public class NeverNote extends QMainWindow{
        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");
        }
@@ -2120,9 +2127,12 @@ public class NeverNote extends QMainWindow{
                                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...");
        }
@@ -2748,8 +2758,8 @@ public class NeverNote extends QMainWindow{
                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>"
@@ -3378,8 +3388,10 @@ public class NeverNote extends QMainWindow{
        }
        // 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();
@@ -3388,13 +3400,15 @@ public class NeverNote extends QMainWindow{
                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", "") ;
@@ -3421,43 +3435,54 @@ public class NeverNote extends QMainWindow{
                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");
@@ -4857,6 +4882,15 @@ public class NeverNote extends QMainWindow{
     @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.
@@ -6073,12 +6107,26 @@ public class NeverNote extends QMainWindow{
                
 //             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)");
                
@@ -6095,6 +6143,8 @@ public class NeverNote extends QMainWindow{
                        }
                }
        }
+       
+       // Menu folderImport action triggered
        public void folderImport() {
                List<WatchFolderRecord> recs = conn.getWatchFolderTable().getAll();
                WatchFolder dialog = new WatchFolder(recs, listManager.getNotebookIndex());
@@ -6128,8 +6178,9 @@ public class NeverNote extends QMainWindow{
                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('/','\\');
@@ -6141,40 +6192,44 @@ public class NeverNote extends QMainWindow{
                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());
                                }
                        }
                }
@@ -6183,7 +6238,7 @@ public class NeverNote extends QMainWindow{
        }
        
        public void folderImportDelete(String dirName) {
-               
+               logger.log(logger.LOW, "Inside folderImportDelete");
                String whichOS = System.getProperty("os.name");
                if (whichOS.contains("Windows")) 
                        dirName = dirName.replace('/','\\');
@@ -6194,30 +6249,33 @@ public class NeverNote extends QMainWindow{
                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));
+                               }
                        }
                }
        }