/*
- * This file is part of NixNote
+ * This file is part of NixNote/NeighborNote
* Copyright 2009 Randy Baumgarte
+ * Copyright 2013 Yuki Takahashi
*
* This file may be licensed under the terms of of the
* GNU General Public License Version 2 (the ``GPL'').
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
-import org.apache.thrift.TException;
import org.h2.tools.ChangeFileEncryption;
+import com.evernote.edam.error.EDAMErrorCode;
import com.evernote.edam.error.EDAMNotFoundException;
import com.evernote.edam.error.EDAMSystemException;
import com.evernote.edam.error.EDAMUserException;
import com.evernote.edam.type.SavedSearch;
import com.evernote.edam.type.Tag;
import com.evernote.edam.type.User;
+import com.evernote.thrift.TException;
import com.trolltech.qt.QThread;
import com.trolltech.qt.core.QByteArray;
import com.trolltech.qt.core.QDateTime;
import com.trolltech.qt.core.QSize;
import com.trolltech.qt.core.QTemporaryFile;
import com.trolltech.qt.core.QTextCodec;
+import com.trolltech.qt.core.QTextStream;
import com.trolltech.qt.core.QThreadPool;
import com.trolltech.qt.core.QTimer;
import com.trolltech.qt.core.QTranslator;
import com.trolltech.qt.gui.QCursor;
import com.trolltech.qt.gui.QDesktopServices;
import com.trolltech.qt.gui.QDialog;
-import com.trolltech.qt.gui.QDockWidget;
import com.trolltech.qt.gui.QFileDialog;
import com.trolltech.qt.gui.QFileDialog.AcceptMode;
import com.trolltech.qt.gui.QFileDialog.FileMode;
import com.trolltech.qt.webkit.QWebPage.WebAction;
import com.trolltech.qt.webkit.QWebSettings;
+import cx.fbn.nevernote.clipboard.ClipBoardObserver;
import cx.fbn.nevernote.config.InitializationException;
import cx.fbn.nevernote.config.StartupConfig;
import cx.fbn.nevernote.dialog.AccountDialog;
import cx.fbn.nevernote.gui.MainMenuBar;
import cx.fbn.nevernote.gui.NotebookTreeWidget;
import cx.fbn.nevernote.gui.RensoNoteList;
+import cx.fbn.nevernote.gui.RensoNoteListDock;
import cx.fbn.nevernote.gui.SavedSearchTreeWidget;
import cx.fbn.nevernote.gui.SearchPanel;
import cx.fbn.nevernote.gui.TabBrowse;
import cx.fbn.nevernote.gui.Thumbnailer;
import cx.fbn.nevernote.gui.TrashTreeWidget;
import cx.fbn.nevernote.gui.controls.QuotaProgressBar;
-import cx.fbn.nevernote.neighbornote.ClipBoardObserver;
import cx.fbn.nevernote.oauth.OAuthTokenizer;
import cx.fbn.nevernote.oauth.OAuthWindow;
import cx.fbn.nevernote.sql.DatabaseConnection;
NoteFilter filter; // Note filter
String currentNoteGuid; // GUID of the current note
Note currentNote; // The currently viewed note
- // ICHANGED
HashMap<Integer, Boolean> noteDirty; // Has the note been changed?
HashMap<Integer, Boolean> inkNote; // if this is an ink note, it is read only
HashMap<Integer, Boolean> readOnly; // Is this note read-only?
int tagDeadCount=0; // number of consecutive dead times for the tag thread
int trashDeadCount=0; // number of consecutive dead times for the trash thread
int saveThreadDeadCount=0; // number of consecutive dead times for the save thread
+ int enRelatedNotesThreadDeadCount=0; // number of consecutive dead times for the EvernoteRelatedNotes Thread
boolean disableTagThreadCheck=false;
boolean disableNotebookThreadCheck=false;
boolean disableTrashThreadCheck=false;
boolean disableSaveThreadCheck=false;
boolean disableSyncThreadCheck=false;
boolean disableIndexThreadCheck=false;
+ boolean disableENRelatedNotesThreadCheck=false;
HashMap<String, String> noteCache; // Cash of note content
HashMap<String, Boolean> readOnlyCache; // List of cashe notes that are read-only
HashMap<String, Boolean> inkNoteCache; // List of cache notes that are ink notes
- // ICHANGED
HashMap<Integer, ArrayList<String>> historyGuids; // タブごとの以前見たノートのGUID
HashMap<Integer, Integer> historyPosition; // Position within the viewed items
HashMap<Integer, Boolean> fromHistory; // Is this from the history queue?
private QTimer blockTimer;
BrowserWindow blockingWindow;
- // ICHANGED
- private final TabBrowserWidget tabBrowser; // ブラウザウィンドウをタブ化
- private final HashMap<Integer, TabBrowse> tabWindows; // タブウィンドウ
- private final RensoNoteList rensoNoteList; // 連想ノートリスト
- private final QDockWidget rensoNoteListDock; // 連想ノートリストドックウィジェット
+ private final TabBrowserWidget tabBrowser; // ブラウザウィンドウをタブ化
+ private final HashMap<Integer, TabBrowse> tabWindows; // タブウィンドウ
+ private final RensoNoteListDock rensoNoteListDock; // 連想ノートリストドックウィジェット
ClipBoardObserver cbObserver;
String rensoNotePressedItemGuid;
// Application Constructor
@SuppressWarnings("static-access")
public NeverNote(DatabaseConnection dbConn) {
- // ICHANGED
cbObserver = new ClipBoardObserver();
conn = dbConn;
logger.log(logger.EXTREME, "Starting GUI build");
QTranslator nevernoteTranslator = new QTranslator();
- nevernoteTranslator.load(Global.getFileManager().getTranslateFilePath("nevernote_" + QLocale.system().name() + ".qm"));
+ nevernoteTranslator.load(Global.getFileManager().getTranslateFilePath("neighbornote_" + QLocale.system().name() + ".qm"));
QApplication.instance().installTranslator(nevernoteTranslator);
Global.originalPalette = QApplication.palette();
setWindowTitle(tr("NeighborNote"));
mainLeftRightSplitter = new QSplitter();
- // ICHANGED
mainLeftRightSplitter.setOrientation(Qt.Orientation.Horizontal);
setCentralWidget(mainLeftRightSplitter);
listManager = new ListManager(conn, logger);
logger.log(logger.EXTREME, "Building index runners & timers");
- // ICHANGED Global.getBehaviorDatabaseUrl()を追加
indexRunner = new IndexRunner("indexRunner.log",
Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(),
Global.getResourceDatabaseUrl(),
indexThread = new QThread(indexRunner, "Index Thread");
indexRunner.indexAttachmentsLocally = Global.indexAttachmentsLocally();
indexRunner.indexImageRecognition = Global.indexImageRecognition();
- indexRunner.indexNoteBody = Global.indexNoteBody();
- indexRunner.indexNoteTitle = Global.indexNoteTitle();
- indexRunner.specialIndexCharacters = Global.getSpecialIndexCharacters();
+// indexRunner.indexNoteBody = Global.indexNoteBody();
+// indexRunner.indexNoteTitle = Global.indexNoteTitle();
+// indexRunner.specialIndexCharacters = Global.getSpecialIndexCharacters();
indexThread.start();
synchronizeAnimationTimer = new QTimer();
logger.log(logger.EXTREME, "Setting sync thread & timers");
syncThreadsReady=1;
- // ICHANGED Global.getBehaviorDatabaseUrl()を追加
syncRunner = new SyncRunner("syncRunner.log", Global.getDatabaseUrl(),
Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(),
Global.getBehaviorDatabaseUrl(), Global.getDatabaseUserid(),
syncRunner.status.message.connect(this, "setMessage(String)");
syncRunner.syncSignal.finished.connect(this, "syncThreadComplete(Boolean)");
syncRunner.syncSignal.errorDisconnect.connect(this, "remoteErrorDisconnect()");
+ syncRunner.limitSignal.rateLimitReached.connect(this, "informRateLimit(Integer)");
syncRunning = false;
if (syncTime > 0) {
automaticSync = true;
logger.log(logger.EXTREME, "Starting thumnail thread");
pdfReadyQueue = new ArrayList<String>();
- // ICHANGED Global.getBehaviorDatabaseUrl()を追加
thumbnailRunner = new ThumbnailRunner("thumbnailRunner.log",
Global.getDatabaseUrl(), Global.getIndexDatabaseUrl(),
Global.getResourceDatabaseUrl(),
tagTree = new TagTreeWidget(conn);
savedSearchTree = new SavedSearchTreeWidget();
trashTree = new TrashTreeWidget();
- // ICHANGED
noteTableView = new TableView(logger, listManager, this);
searchField = new QComboBox();
noteCache = new HashMap<String,String>();
readOnlyCache = new HashMap<String, Boolean>();
inkNoteCache = new HashMap<String, Boolean>();
- // ICHANGED
browserWindow = new BrowserWindow(conn, cbObserver);
- // ICHANGED 下から移動してきた。
+ // 下から移動してきた。
historyGuids = new HashMap<Integer, ArrayList<String>>();
historyPosition = new HashMap<Integer, Integer>();
fromHistory = new HashMap<Integer, Boolean>();
- // ICHANGED タブブラウザ作成
+ // タブブラウザ作成
tabWindows = new HashMap<Integer, TabBrowse>();
tabBrowser = new TabBrowserWidget(this);
tabBrowser.setStyleSheet("QTabBar::tab{width:150px;}");
+ tabBrowser.setMovable(true);
+ tabBrowser.setTabsClosable(true);
TabBrowse tab = new TabBrowse(conn, tabBrowser, cbObserver);
browserWindow = tab.getBrowserWindow();
int index = tabBrowser.addNewTab(tab, "");
tabWindows.put(index, tab);
- tabBrowser.setTabsClosable(true);
tabBrowser.currentChanged.connect(this, "tabWindowChanged(int)");
tabBrowser.tabCloseRequested.connect(this, "tabWindowClosing(int)");
inkNote = new HashMap<Integer, Boolean>();
readOnly = new HashMap<Integer, Boolean>();
- // ICHANGED
// 履歴記録のハッシュマップを初期化
historyGuids.put(index, new ArrayList<String>());
historyPosition.put(index, 0);
mainLeftRightSplitter.addWidget(leftSplitter1);
mainLeftRightSplitter.addWidget(browserIndexSplitter);
- // ICHANGED
// 連想ノートリストをセットアップ
- rensoNoteList = new RensoNoteList(conn, this);
- rensoNoteList.itemPressed.connect(this,
- "rensoNoteItemPressed(QListWidgetItem)");
- rensoNoteListDock = new QDockWidget(tr("Renso Note List"), this);
- rensoNoteListDock.setWidget(rensoNoteList);
+ rensoNoteListDock = new RensoNoteListDock(conn, this, syncRunner, iconPath, tr("Renso Note List"));
addDockWidget(DockWidgetArea.RightDockWidgetArea, rensoNoteListDock);
if (Global.getListView() == Global.View_List_Wide) {
browserIndexSplitter.addWidget(noteTableView);
- // ICHANGED
browserIndexSplitter.addWidget(tabBrowser);
- // browserIndexSplitter.addWidget(browserWindow);
} else {
mainLeftRightSplitter.addWidget(noteTableView);
- // ICHANGED
mainLeftRightSplitter.addWidget(tabBrowser);
- // mainLeftRightSplitter.addWidget(browserWindow);
}
// Setup the thumbnail viewer
savedSearchTree.setVisible(Global.isWindowVisible("savedSearchTree"));
menuBar.hideSavedSearches.setChecked(Global.isWindowVisible("savedSearchTree"));
- // ICHANGED noteTableViewに新しいタブで開くを追加
+ // noteTableViewに新しいタブで開くを追加
noteTableView.setOpenNewTabAction(menuBar.noteOpenNewTab);
noteTableView.setAddAction(menuBar.noteAdd);
- // ICHANGED noteTableViewに新しいタブでノート追加を追加
+ // noteTableViewに新しいタブでノート追加を追加
noteTableView.setAddNoteNewTabAction(menuBar.noteAddNewTab);
noteTableView.setDeleteAction(menuBar.noteDelete);
noteTableView.setVisible(Global.isWindowVisible("noteList"));
menuBar.hideNoteList.setChecked(Global.isWindowVisible("noteList"));
- if (!Global.isWindowVisible("editorButtonBar"))
+ if (!Global.isWindowVisible("editorButtonBar")) {
+ menuBar.showEditorBar.setChecked(false);
toggleEditorButtonBar();
+ }
if (!Global.isWindowVisible("leftPanel"))
menuBar.hideLeftSide.setChecked(true);
- if (Global.isWindowVisible("noteInformation"))
+
+ if (Global.isWindowVisible("noteInformation")) {
+ menuBar.noteAttributes.setChecked(true);
toggleNoteInformation();
+ }
+
quotaBar.setVisible(Global.isWindowVisible("quota"));
// IFIXED quotaBar.isVisible() → Global.isWindowVisible("quota")
// なぜかquotaBar.isVisible()が常にfalseを返すようなので修正
if (currentNoteGuid.equals(""))
currentNote = new Note();
- // ICHANGED
- /* 上に移動したので要らない
- historyGuids = new ArrayList<String>();
- historyPosition = 0;
- fromHistory = false;
- */
+ /* 上に移動したのでここには不要
+ * historyGuids = new ArrayList<String>();
+ * historyPosition = 0;
+ * fromHistory = false;
+ */
if (!currentNoteGuid.trim().equals("")) {
currentNote = conn.getNoteTable().getNote(currentNoteGuid, true,true,false,false,true);
threadMonitorTimer.timeout.connect(this, "threadMonitorCheck()");
threadMonitorTimer.start(1000*10); // Check for threads every 10 seconds;
- // ICHANGED たぶんこれはいらない
- // IFIXED ?
+ // IFIXED 恐らく不要なのでコメントアウト
/*
- historyGuids.add(currentNoteGuid);
- historyPosition = 1;
- */
+ * historyGuids.add(currentNoteGuid);
+ * historyPosition = 1;
+ */
menuBar.blockSignals(true);
menuBar.narrowListView.blockSignals(true);
menuBar.narrowListView.blockSignals(false);
menuBar.wideListView.blockSignals(false);
- // IFIXED
- // 上に同じコードがあるよね? とりあえずコメントアウト
+ // IFIXED 上に同じコードがあるのでコメントアウト
/*
* if (Global.getListView() == Global.View_List_Wide) {
- * browserIndexSplitter.addWidget(noteTableView); // ICHANGED //
+ * browserIndexSplitter.addWidget(noteTableView);
* browserIndexSplitter.addWidget(tabBrowser);
* browserIndexSplitter.addWidget(browserWindow); } else {
- * mainLeftRightSplitter.addWidget(noteTableView); // ICHANGED //
+ * mainLeftRightSplitter.addWidget(noteTableView);
* mainLeftRightSplitter.addWidget(tabBrowser);
* mainLeftRightSplitter.addWidget(browserWindow); }
*/
}
if (Global.checkVersionUpgrade()) {
- // ICHANGED TODO とりあえず封印
- // checkForUpdates();
+ checkForUpdates();
+ }
+
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
}
}
File fr = Global.getFileManager().getDbDirFile(Global.resourceDatabaseName + ".h2.db");
// IFIXED resourceDatabaseNameになっていたので修正
File fi = Global.getFileManager().getDbDirFile(Global.indexDatabaseName + ".h2.db");
- // ICHANGED
File fb = Global.getFileManager().getDbDirFile(Global.behaviorDatabaseName + ".h2.db");
if (!f.exists())
Global.setResourceDatabaseUrl("");
if (!fi.exists())
Global.setIndexDatabaseUrl("");
- // ICHANGED
if (!fb.exists())
Global.setBehaviorDatabaseUrl("");
Global.getDatabaseUserPassword(), Global.cipherPassword);
}
}
- // ICHANGED Global.getBehaviorDatabaserUrl()を追加
DatabaseConnection dbConn = new DatabaseConnection(logger,Global.getDatabaseUrl(),
Global.getIndexDatabaseUrl(), Global.getResourceDatabaseUrl(), Global.getBehaviorDatabaseUrl(),
Global.getDatabaseUserid(), Global.getDatabaseUserPassword(), Global.cipherPassword, 0);
st.execute("shutdown");
st = conn.getIndexConnection().createStatement();
st.execute("shutdown");
- // ICHANGED
st = conn.getBehaviorConnection().createStatement();
st.execute("shutdown");
ChangeFileEncryption.execute(dbPath, "NeverNote", encryptCipher, null, Global.cipherPassword.toCharArray(), true);
ChangeFileEncryption.execute(dbPath, "Resources", encryptCipher, null, Global.cipherPassword.toCharArray(), true);
ChangeFileEncryption.execute(dbPath, "Index", encryptCipher, null, Global.cipherPassword.toCharArray(), true);
- // ICHANGED
ChangeFileEncryption.execute(dbPath, "Behavior", encryptCipher, null, Global.cipherPassword.toCharArray(), true);
Global.setDatabaseUrl(Global.getDatabaseUrl() + ";CIPHER="+encryptCipher);
Global.setResourceDatabaseUrl(Global.getResourceDatabaseUrl() + ";CIPHER="+encryptCipher);
Global.setIndexDatabaseUrl(Global.getIndexDatabaseUrl() + ";CIPHER="+encryptCipher);
- // ICHANGED
Global.setBehaviorDatabaseUrl(Global.getBehaviorDatabaseUrl() + ";CIPHER=" + encryptCipher);
QMessageBox.information(this, tr("Encryption Complete"), tr("Encryption is complete"));
browser.close();
}
- // ICHANGED タブブラウザに対してクローズ処理を行う
+ // タブブラウザに対してクローズ処理を行う
Collection<TabBrowse> win = tabWindows.values();
Iterator<TabBrowse> it = win.iterator();
tabBrowser.currentChanged.disconnect();
saveNote();
listManager.stop();
saveWindowState();
+
+ // 連想ノートリストのEvernote関連ノート取得スレッドを終了
+ rensoNoteListDock.getRensoNoteList().stopThread();
if (tempFiles != null)
tempFiles.clear();
saveNoteColumnPositions();
saveNoteIndexWidth();
showColumns();
- ConfigDialog settings = new ConfigDialog(this);
+ ConfigDialog settings = new ConfigDialog(this, conn);
String dateFormat = Global.getDateFormat();
String timeFormat = Global.getTimeFormat();
settings.exec();
indexRunner.indexAttachmentsLocally = Global.indexAttachmentsLocally();
- indexRunner.indexNoteBody = Global.indexNoteBody();
- indexRunner.indexNoteTitle = Global.indexNoteTitle();
- indexRunner.specialIndexCharacters = Global.getSpecialIndexCharacters();
+// indexRunner.indexNoteBody = Global.indexNoteBody();
+// indexRunner.indexNoteTitle = Global.indexNoteTitle();
+// indexRunner.specialIndexCharacters = Global.getSpecialIndexCharacters();
indexRunner.indexImageRecognition = Global.indexImageRecognition();
if (Global.showTrayIcon() || Global.minimizeOnClose())
trayIcon.show();
trayIcon.hide();
showColumns();
if (menuBar.showEditorBar.isChecked()){
- // ICHANGED
for(int i = 0; i < tabBrowser.count(); i++){
BrowserWindow browser = ((TabBrowse) tabBrowser.widget(i)).getBrowserWindow();
showEditorButtons(browser);
mainLeftRightSplitter.setObjectName("mainLeftRightSplitter");
browserIndexSplitter.setObjectName("browserIndexSplitter");
leftSplitter1.setObjectName("leftSplitter1");
- // ICHANGED
rensoNoteListDock.setObjectName("rensoNoteListDock");
// Restore the actual positions.
mainLeftRightSplitter.restoreState(Global.restoreState(mainLeftRightSplitter.objectName()));
browserIndexSplitter.restoreState(Global.restoreState(browserIndexSplitter.objectName()));
leftSplitter1.restoreState(Global.restoreState(leftSplitter1.objectName()));
- // ICHANGED
rensoNoteListDock.restoreGeometry(Global.restoreGeometry(rensoNoteListDock.objectName()));
}
Global.saveState(browserIndexSplitter.objectName(), browserIndexSplitter.saveState());
Global.saveState(leftSplitter1.objectName(), leftSplitter1.saveState());
Global.saveState(objectName(), saveState());
- // ICHANGED
Global.saveGeometry(rensoNoteListDock.objectName(), rensoNoteListDock.saveGeometry());
}
// Load the style sheet
menuBar.notebookIconAction.setEnabled(true);
menuBar.notebookStackAction.setEnabled(true);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
if (!rensoNoteListDock.isEnabled()) {
rensoNoteListDock.setEnabled(true);
}
while(set.hasNext())
externalWindows.get(set.next()).getBrowserWindow().setNotebookList(filteredBooks);
- // ICHANGED
Iterator<Integer>it = tabWindows.keySet().iterator();
while (it.hasNext()) {
tabWindows.get(it.next()).getBrowserWindow()
// A note's notebook has been updated
@SuppressWarnings("unused")
private void updateNoteNotebook(String guid, String notebookGuid) {
- // ICHANGED 同じノートブックに入れられたノート間の履歴を登録
+ // 同じノートブックに入れられたノート間の履歴を登録
conn.getHistoryTable().addSameNotebookHistory(guid, notebookGuid);
// Update the list manager
while(set.hasNext())
externalWindows.get(set.next()).getBrowserWindow().setNotebookList(filteredBooks);
- // ICHANGED
// 全てのタブウィンドウを更新
Iterator<Integer> it = tabWindows.keySet().iterator();
while (it.hasNext()) {
menuBar.noteRestoreAction.setVisible(false);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
if (!rensoNoteListDock.isEnabled()) {
rensoNoteListDock.setEnabled(true);
}
}
browserWindow.setTag(names.toString());
- // ICHANGED
for (TabBrowse tab: tabWindows.values()) {
if (tab.getBrowserWindow().getNote().getGuid().equals(guid)) {
int index = tabBrowser.indexOf(tab);
menuBar.savedSearchDeleteAction.setEnabled(true);
menuBar.savedSearchIconAction.setEnabled(true);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
if (!rensoNoteListDock.isEnabled()) {
rensoNoteListDock.setEnabled(true);
}
status.setTagCount(listManager.getTagIndex().size());
status.setResourceCount(conn.getNoteTable().noteResourceTable.getResourceCount());
status.setWordCount(conn.getWordsTable().getWordCount());
+ status.setHistoryCount(conn.getHistoryTable().getHistoryCount());
+ status.setRensoClickCount(conn.getHistoryTable().getRensoClickCount());
waitCursor(false);
status.exec();
}
if (!file.open(new QIODevice.OpenMode(QIODevice.OpenModeFlag.ReadOnly,
QIODevice.OpenModeFlag.Text)))
return;
- textBox.setText(file.readAll().toString());
+ // 日本語文字化け対策
+ QTextCodec codec = QTextCodec.codecForName("UTF-8");
+ QTextStream textStream = new QTextStream(file);
+ textStream.setCodec(codec);
+ textBox.setText(textStream.readAll().toString());
+
file.close();
dialog.setWindowTitle(tr("Release Notes"));
dialog.setLayout(layout);
@SuppressWarnings("unused")
private void about() {
logger.log(logger.HIGH, "Entering NeverNote.about");
- // ICHANGED based on...の記述を付加
QMessageBox.about(this,
tr("About NeighborNote"),
tr("<h4><center><b>NeighborNote</b></center></h4><hr><center>Version ")
logger.log(logger.HIGH, "Entering NeverNote.setupToolBar");
toolBar = addToolBar(tr("Tool Bar"));
toolBar.setObjectName("toolBar");
+ toolBar.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon);
menuBar.setupToolBarVisible();
if (!Global.isWindowVisible("toolBar"))
toolBar.setVisible(false);
// toolBar.addWidget(menuBar);
// menuBar.setSizePolicy(Policy.Minimum, Policy.Minimum);
// toolBar.addSeparator();
- prevButton = toolBar.addAction(tr("Previous"));
+ prevButton = toolBar.addAction(tr(""));
+ prevButton.setToolTip(tr("Previous"));
QIcon prevIcon = new QIcon(iconPath+"back.png");
prevButton.setIcon(prevIcon);
prevButton.triggered.connect(this, "previousViewedAction()");
togglePrevArrowButton(Global.isToolbarButtonVisible("prevArrow"));
- nextButton = toolBar.addAction(tr("Next"));
+ nextButton = toolBar.addAction(tr(""));
+ nextButton.setToolTip(tr("Next"));
QIcon nextIcon = new QIcon(iconPath+"forward.png");
nextButton.setIcon(nextIcon);
nextButton.triggered.connect(this, "nextViewedAction()");
toggleNextArrowButton(Global.isToolbarButtonVisible("nextArrow"));
+ toolBar.addSeparator();
+
upButton = toolBar.addAction(tr("Up"));
QIcon upIcon = new QIcon(iconPath+"up.png");
upButton.setIcon(upIcon);
Global.showDeleted = false;
menuBar.noteRestoreAction.setEnabled(false);
menuBar.noteRestoreAction.setVisible(false);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
rensoNoteListDock.setEnabled(true);
}
else {
currentNoteGuid = trashNoteGuid;
menuBar.noteRestoreAction.setEnabled(true);
menuBar.noteRestoreAction.setVisible(true);
- // ICHANGED ゴミ箱を開く。連想ノートリストをOFFに。
+ // ゴミ箱を開く。連想ノートリストをOFFに。
rensoNoteListDock.setEnabled(false);
Global.showDeleted = true;
}
+
+ menuBar.noteAddNewTab.setEnabled(newButton.isEnabled());
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
+ }
+
listManager.loadNotesIndex();
noteIndexUpdated(false);
//// browserWindow.setEnabled(newButton.isEnabled());
listManager.setSelectedSavedSearch("");
newButton.setEnabled(!newButton.isEnabled());
menuBar.noteAdd.setEnabled(newButton.isEnabled());
+ menuBar.noteAddNewTab.setEnabled(newButton.isEnabled());
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
+ }
menuBar.noteAdd.setVisible(true);
browserWindow.clear();
listManager.loadNotesIndex();
noteIndexUpdated(false);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
if (!rensoNoteListDock.isEnabled()) {
rensoNoteListDock.setEnabled(true);
}
Global.showDeleted = false;
newButton.setEnabled(true);
menuBar.noteAdd.setEnabled(true);
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
+ } else {
+ menuBar.noteAddNewTab.setEnabled(true);
+ }
menuBar.noteAdd.setVisible(true);
trashTree.blockSignals(true);
trashTree.clearSelection();
Global.isConnected = syncRunner.isConnected;
+ boolean autoLoginMessageFlag = false;
if (!Global.isConnected) {
OAuthWindow window = new OAuthWindow(logger);
if (window.error) {
syncRunner.authToken = tokenizer.oauth_token;
syncRunner.enConnect();
Global.isConnected = syncRunner.isConnected;
+ autoLoginMessageFlag = true;
}
// Global.username = syncRunner.username;
return;
setupOnlineMenu();
setupConnectMenuOptions();
+
+ // 初回ログイン時に自動ログインが無効だったら、有効化するか確認する
+ if (autoLoginMessageFlag && !Global.automaticLogin()) {
+ if (QMessageBox.question(this, tr("Confirmation"), tr("Are you sure you want to enable the auto-login feature?"),
+ QMessageBox.StandardButton.Yes, QMessageBox.StandardButton.No) == StandardButton.Yes.value()) {
+ Global.setAutomaticLogin(true);
+ }
+ }
+
logger.log(logger.HIGH, "Leaving NeverNote.remoteConnect");
-
-
}
private void setupConnectMenuOptions() {
logger.log(logger.HIGH, "entering NeverNote.setupConnectMenuOptions");
clearTrashFilter();
// clearSavedSearchFilter();
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
if (!rensoNoteListDock.isEnabled()) {
rensoNoteListDock.setEnabled(true);
}
saveNote();
- // ICHANGED
// 右クリックだったときの処理
if (QApplication.mouseButtons().isSet(MouseButton.RightButton)) {
// 選択されたノートのguidをselectedNoteGUIDsにセット
// If the ctrl key is pressed, then they are selecting multiple
// entries and we don't want to change the currently viewed note.
- // ICHANGED
// Shiftキーを押しながらの場合の処理も追加
if ((QApplication.keyboardModifiers().isSet(KeyboardModifier.ControlModifier) ||
QApplication.keyboardModifiers().isSet(KeyboardModifier.ShiftModifier)) &&
return;
}
- // ICHANGED たぶんこれは不要
- // IFIXED ?
- /*if (historyGuids.size() == 0) {
- historyGuids.add(currentNoteGuid);
- historyPosition = 1;
- }*/
+ // IFIXED 恐らく不要なのでコメントアウト
+// if (historyGuids.size() == 0) {
+// historyGuids.add(currentNoteGuid);
+// historyPosition = 1;
+// }
noteTableView.showColumn(Global.noteTableGuidPosition);
menuBar.noteOnlineHistoryAction.setEnabled(true);
menuBar.noteMergeAction.setEnabled(true);
selectedNoteGUIDs.clear();
+ if (currentNoteGuid != null && !currentNoteGuid.equals("") && !Global.showDeleted) {
+ menuBar.noteAddNewTab.setEnabled(true);
+ }
if (selections.size() != 1 || Global.showDeleted) {
menuBar.noteDuplicateAction.setEnabled(false);
}
nextButton.setEnabled(true);
prevButton.setEnabled(true);
- // ICHANGED
int currentIndex = tabBrowser.currentIndex();
ArrayList<String> histGuids = historyGuids.get(currentIndex);
int histPosition = historyPosition.get(currentIndex);
boolean fromHist = fromHistory.get(currentIndex);
- // ICHANGED
if (!fromHist) {
int endPosition = histGuids.size() - 1;
scrollToGuid(currentNoteGuid);
refreshEvernoteNote(true);
- // ICHANGED
if (currentNoteGuid != null && !currentNoteGuid.equals("")) {
if (!Global.showDeleted) { // ゴミ箱じゃなければ
addBrowseHistory();
}
}
- // ICHANGED
// 連想ノートリストを更新
- rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
waitCursor(false);
logger.log(logger.HIGH, "Leaving NeverNote.noteTableSelection");
}
-
- // ICHANGED
// 複数ノートの同時閲覧履歴をデータベースに保存
private void addBrowseHistory() {
// このノートと他のタブウィンドウノートの関連性を内部データベースのHistoryテーブルに登録
String saveCurrentNoteGuid = new String();
String tempNoteGuid = new String();
- // ICHANGED
int currentIndex = tabBrowser.currentIndex();
ArrayList<String> histGuids = historyGuids.get(currentIndex);
histGuids.clear();
logger.log(logger.HIGH, "Leaving NeverNote.refreshEvernoteNoteList");
}
- // ICHANGED
// Called when the previous arrow button is clicked
@SuppressWarnings("unused")
private void previousViewedAction() {
private void nextViewedAction() {
if (!nextButton.isEnabled())
return;
- // ICHANGED
+
int currentIndex = tabBrowser.currentIndex();
ArrayList<String> histGuids = historyGuids.get(currentIndex);
int histPosition = historyPosition.get(currentIndex);
menuBar.narrowListView.blockSignals(false);
mainLeftRightSplitter.addWidget(noteTableView);
- // ICHANGED browserWindow → tabBrowser
mainLeftRightSplitter.addWidget(tabBrowser);
restoreWindowState(false);
menuBar.narrowListView.blockSignals(false);
browserIndexSplitter.setVisible(true);
browserIndexSplitter.addWidget(noteTableView);
- // ICHANGED browserWindow → tabBrowser
browserIndexSplitter.addWidget(tabBrowser);
restoreWindowState(false);
Note note = conn.getNoteTable().getNote(guid, true, true, false, true, true);
// We have a new external editor to create
QIcon appIcon = new QIcon(iconPath+"nevernote.png");
- // ICHANGED
ExternalBrowse newBrowser = new ExternalBrowse(conn, cbObserver);
newBrowser.setWindowIcon(appIcon);
}
}
- // ICHANGED 連想ノートリストから新しいタブで開く
+ // 連想ノートリストから新しいタブで開く
@SuppressWarnings("unused")
private void openNewTabFromRNL(){
if(rensoNotePressedItemGuid != null){
conn.getHistoryTable().addHistory("rensoItemClick", prevCurrentNoteGuid, rensoNotePressedItemGuid);
}
}
-
- // ICHANGED
+
private void openTabEditor(String guid) {
Note note = conn.getNoteTable().getNote(guid, true, true, false, true, true);
}
}
- // ICHANGED タブが閉じられた
+ // タブが閉じられた
private void tabWindowClosing(int index) {
// タブが1つしかなかったら閉じない
if (tabBrowser.count() <= 1) {
fromHistory.remove(i + 1);
}
+ // タブが残り1つになったら、閉じるボタンを消す
+ if (tabBrowser.count() == 1) {
+ tabBrowser.hideTabCloseButton(0);
+ }
+
// タブの閉じるボタンを押すと、tabWindowClosingより先にtabWindowChangedが呼ばれてしまうので、手動で呼びなおす
tabWindowChanged(tabBrowser.currentIndex());
}
// ノート追加前に開いていたノートとの関連性を記録するためにguidをとっておく
TabBrowse prevTab = (TabBrowse)tabBrowser.currentWidget();
- String prevTabGuid = prevTab.getBrowserWindow().getNote().getGuid();
+ String prevTabGuid = null;
+ if (prevTab.getBrowserWindow() != null && prevTab.getBrowserWindow().getNote() != null) {
+ prevTabGuid = prevTab.getBrowserWindow().getNote().getGuid();
+ }
openEmptyTabEditor();
addNote();
// 追加されたノートのguidを取得し、ノート追加操作履歴としてデータベースに登録
- TabBrowse addedTab = (TabBrowse)tabBrowser.currentWidget();
- String addedTabGuid = addedTab.getBrowserWindow().getNote().getGuid();
if (prevTabGuid != null && !prevTabGuid.equals("")) {
+ TabBrowse addedTab = (TabBrowse)tabBrowser.currentWidget();
+ String addedTabGuid = addedTab.getBrowserWindow().getNote().getGuid();
if (addedTabGuid != null && !addedTabGuid.equals("")) {
if (!prevTabGuid.equals(addedTabGuid)) {
conn.getHistoryTable().addHistory("addNewNote", prevTabGuid, addedTabGuid);
}
}
- // ICHANGED
private void openEmptyTabEditor() {
// 新しいタブエディタを作成
TabBrowse newBrowser = new TabBrowse(conn, tabBrowser, cbObserver);
//** These functions deal with Note specific things
//***************************************************************
//***************************************************************
- // ICHANGED
private void setNoteDirty() {
for (String guid: selectedNoteGUIDs) {
setNoteDirty(guid);
}
}
- // ICHANGED
private void setNoteDirty(String targetGuid) {
logger.log(logger.EXTREME, "Entering NeverNote.setNoteDirty()");
noteCache.remove(guid);
noteCache.put(guid, unicode.toString());
if (guid.equals(currentNoteGuid)) {
- // ICHANGED
int index = tabBrowser.currentIndex();
noteDirty.put(index, true);
browserWindow.setContent(unicode);
}
- // ICHANGED
private void saveNoteTabBrowser(String guid, String content, Boolean save,
BrowserWindow browser) {
QTextCodec codec = QTextCodec.codecForName("UTF-8");
}
private void saveNote() {
- // ICHANGED
// すべてのタブに対して、Dirtyを確認し、trueならセーブする
Collection<Integer> dirtyIndex = noteDirty.keySet();
Iterator<Integer> indexIterator = dirtyIndex.iterator();
browserWindow.setEnabled(false);
return;
}
- // ICHANGED
inkNote.put(tabBrowser.currentIndex(), false);
readOnly.put(tabBrowser.currentIndex(), false);
return;
}
- // ICHANGED
tabBrowser.setTabTitle(tabBrowser.currentIndex(), currentNote.getTitle());
loadNoteBrowserInformation(browserWindow, currentNoteGuid, currentNote);
}
- // ICHANGED
private void loadNoteBrowserInformation(BrowserWindow browser, String guid, Note note) {
NoteFormatter formatter = new NoteFormatter(logger, conn, tempFiles);
formatter.setNote(note, Global.pdfPreview());
browser.setAllTags(tagList);
browser.setCurrentTags(note.getTagNames());
- // ICHANGED
for (TabBrowse tab: tabWindows.values()) {
if (tab.getBrowserWindow().getNote().getGuid().equals(guid)) {
int index = tabBrowser.indexOf(tab);
logger.log(logger.HIGH, "Leaving NeverNote.refreshEvernoteNote");
}
- // ICHANGED
@SuppressWarnings("unused")
private void toggleNoteAttributes() {
menuBar.noteAttributes.setChecked(!menuBar.noteAttributes.isChecked());
private void toggleNoteInformation() {
logger.log(logger.HIGH, "Entering NeverNote.toggleNoteInformation");
- // ICHANGED
boolean isChecked = menuBar.noteAttributes.isChecked();
for(int i = 0; i < tabBrowser.count(); i++){
}
if (selectedNoteGUIDs.size() == 0 && !currentNoteGuid.equals(""))
selectedNoteGUIDs.add(currentNoteGuid);
+ closeTabs(selectedNoteGUIDs);
for (int i=0; i<selectedNoteGUIDs.size(); i++) {
listManager.deleteNote(selectedNoteGUIDs.get(i));
}
}
}
}
+ closeTabs(selectedNoteGUIDs);
listManager.expungeNote(selectedNoteGUIDs.get(i));
- // ICHANGED
conn.getHistoryTable().expungeHistory(selectedNoteGUIDs.get(i));
conn.getExcludedTable().expungeExcludedNote(selectedNoteGUIDs.get(i));
conn.getStaredTable().expungeStaredNote(selectedNoteGUIDs.get(i));
}
}
currentNoteGuid = "";
-
- // ICHANGED ↓↓↓ここから↓↓↓
- // 削除したノートを外部ウィンドウで開いていたら、閉じる
- Collection<ExternalBrowse> windows = externalWindows.values();
- Iterator<ExternalBrowse> windowIterator = windows.iterator();
- Collection<String> guids = externalWindows.keySet();
- Iterator<String> guidIterator = guids.iterator();
- List<ExternalBrowse> closeWindows = new ArrayList<ExternalBrowse>(); // イテレータ操作中に中身をいじっちゃダメなので
-
- while (windowIterator.hasNext()) {
- ExternalBrowse browser = windowIterator.next();
- String guid = guidIterator.next();
-
- for (int i = 0; i < selectedNoteGUIDs.size(); i++) {
- if (guid.equals(selectedNoteGUIDs.get(i))) {
- closeWindows.add(browser);
- }
- }
+ closeExternalWindows(selectedNoteGUIDs);
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
}
- for (int i = closeWindows.size() - 1; i >= 0; i--) {
- closeWindows.get(i).close();
- }
- // ICHANGED ↑↑↑ここまで↑↑↑
-
- // ICHANGED ↓↓↓ここから↓↓↓
- // 削除したノートをタブで開いていたら、閉じる
+ listManager.loadNotesIndex();
+ noteIndexUpdated(false);
+ refreshEvernoteNote(true);
+ scrollToGuid(currentNoteGuid);
+ logger.log(logger.HIGH, "Leaving NeverNote.deleteNote");
+ }
+
+ // 対象ノートをタブで開いていたら閉じる
+ private void closeTabs(List<String> noteGUIDs) {
Collection<TabBrowse> tabBrowsers = tabWindows.values();
Iterator<TabBrowse> tabIterator = tabBrowsers.iterator();
Collection<Integer> tabIndexes = tabWindows.keySet();
int index = indexIterator.next();
String guid = tab.getBrowserWindow().getNote().getGuid();
- for(int i = 0; i < selectedNoteGUIDs.size(); i++){
- if(guid.equals(selectedNoteGUIDs.get(i))){
+ for(int i = 0; i < noteGUIDs.size(); i++){
+ if(guid.equals(noteGUIDs.get(i))){
closeIndexes.add(index);
}
}
for(int i = closeIndexes.size() - 1; i >= 0; i--){
tabWindowClosing(closeIndexes.get(i));
}
- // ICHANGED ↑↑↑ここまで↑↑↑
-
- listManager.loadNotesIndex();
- noteIndexUpdated(false);
- refreshEvernoteNote(true);
- scrollToGuid(currentNoteGuid);
- logger.log(logger.HIGH, "Leaving NeverNote.deleteNote");
}
+
+ // 対象ノートを外部ウィンドウで開いていたら閉じる
+ private void closeExternalWindows(List<String> noteGUIDs) {
+ Collection<ExternalBrowse> windows = externalWindows.values();
+ Iterator<ExternalBrowse> windowIterator = windows.iterator();
+ Collection<String> guids = externalWindows.keySet();
+ Iterator<String> guidIterator = guids.iterator();
+ List<ExternalBrowse> closeWindows = new ArrayList<ExternalBrowse>(); // イテレータ操作中に中身をいじっちゃダメなので
+
+ while (windowIterator.hasNext()) {
+ ExternalBrowse browser = windowIterator.next();
+ String guid = guidIterator.next();
+
+ for (int i = 0; i < noteGUIDs.size(); i++) {
+ if (guid.equals(noteGUIDs.get(i))) {
+ closeWindows.add(browser);
+ }
+ }
+ }
+
+ for (int i = closeWindows.size() - 1; i >= 0; i--) {
+ closeWindows.get(i).close();
+ }
+ }
+
// Add a new note
- // ICHANGED @SuppressWarnings("unused") を削除
private void addNote() {
logger.log(logger.HIGH, "Inside NeverNote.addNote");
// browserWindow.setEnabled(true);
listManager.addNote(newNote, metadata);
// noteTableView.insertRow(newNote, true, -1);
- // ICHANGED
String prevCurrentNoteGuid = new String(currentNoteGuid);
currentNote = newNote;
// IFIXED こいつのせいで、ノート追加時にcurrentNoteGuidが更新されないので消す
// noteTableView.clearSelection();
- refreshEvernoteNote(true);
- listManager.countNotebookResults(listManager.getNoteIndex());
- browserWindow.titleLabel.setFocus();
- browserWindow.titleLabel.selectAll();
-// notebookTree.updateCounts(listManager.getNotebookIndex(), listManager.getNotebookCounter());
-
- // ICHANGED 新規に作成したノートとそれまで開いていたノートの関連性を追加
+ // 新規に作成したノートとそれまで開いていたノートの関連性を追加
if (prevCurrentNoteGuid != null && !prevCurrentNoteGuid.equals("")) {
if (currentNoteGuid != null && !currentNoteGuid.equals("")) {
conn.getHistoryTable().addHistory("addNewNote", prevCurrentNoteGuid, currentNoteGuid);
}
}
+ refreshEvernoteNote(true);
+ listManager.countNotebookResults(listManager.getNoteIndex());
+ browserWindow.titleLabel.setFocus();
+ browserWindow.titleLabel.selectAll();
+// notebookTree.updateCounts(listManager.getNotebookIndex(), listManager.getNotebookCounter());
+
// If the window is hidden, then we want to popup this in an external window &
if (!isVisible())
listDoubleClick();
externalWindows.put(newGuid, b);
}
- // ICHANGED
for(int i = 0; i < tabBrowser.count(); i++){
TabBrowse b = (TabBrowse)tabBrowser.widget(i);
if (b.getBrowserWindow().getNote().getGuid().equals(oldGuid)) {
}
// Toggle the note editor button bar
- // ICHANGED すべてのタブに
+ // すべてのタブに
private void toggleEditorButtonBar() {
boolean isChecked = menuBar.showEditorBar.isChecked();
}
newNote.setResources(resList);
- // ICHANGED
// 操作履歴と除外ノートとスター付きノートも複製する
if(Global.getDuplicateRensoNote()) {
conn.getHistoryTable().duplicateHistory(newGuid, oldNote.getGuid());
notebookTreeSelection();
refreshEvernoteNote(true);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
if (!rensoNoteListDock.isEnabled()) {
rensoNoteListDock.setEnabled(true);
}
mergeNoteContents(masterGuid, sources);
currentNoteGuid = masterGuid;
- // ICHANGED 操作履歴と除外ノートとスター付きノートをマージ
+ // 操作履歴と除外ノートとスター付きノートをマージ
if(Global.getMergeRensoNote()) {
for (int i = 0; i < sources.size(); i++) {
String childGuid = sources.get(i);
}
}
- // ICHANGED ↓↓↓ここから↓↓↓
// マージしたノート(child)を外部ウィンドウで開いていたら、閉じる
Collection<ExternalBrowse> windows = externalWindows.values();
Iterator<ExternalBrowse> windowIterator = windows.iterator();
Collection<String> guids = externalWindows.keySet();
Iterator<String> guidIterator = guids.iterator();
- List<ExternalBrowse> closeWindows = new ArrayList<ExternalBrowse>(); // イテレータ操作中に中身をいじっちゃダメなので
+ List<ExternalBrowse> closeWindows = new ArrayList<ExternalBrowse>();
while (windowIterator.hasNext()) {
ExternalBrowse browser = windowIterator.next();
for (int i = closeWindows.size() - 1; i >= 0; i--) {
closeWindows.get(i).close();
}
- // ICHANGED ↑↑↑ここまで↑↑↑
- // ICHANGED ↓↓↓ここから↓↓↓
// マージしたノート(child)をタブで開いていたら、閉じる
Collection<TabBrowse> tabBrowsers = tabWindows.values();
Iterator<TabBrowse> tabIterator = tabBrowsers.iterator();
Collection<Integer> tabIndexes = tabWindows.keySet();
Iterator<Integer> indexIterator = tabIndexes.iterator();
- List<Integer> closeIndexes = new ArrayList<Integer>(); //イテレータ操作中に中身をいじっちゃダメなので
+ List<Integer> closeIndexes = new ArrayList<Integer>();
while (tabIterator.hasNext()) {
TabBrowse tab = tabIterator.next();
for(int i = closeIndexes.size() - 1; i >= 0; i--){
tabWindowClosing(closeIndexes.get(i));
}
- // ICHANGED ↑↑↑ここまで↑↑↑
noteIndexUpdated(false);
// IFIXED
- // ICHANGED マージ後の新しいノートコンテンツを表示するためキャッシュを削除
+ // マージ後の新しいノートコンテンツを表示するためキャッシュを削除
noteCache.remove(masterGuid);
refreshEvernoteNote(true);
setMessage("EDAMUserException: " +e.getMessage());
return;
} catch (EDAMSystemException e) {
+ if (e.getErrorCode() == EDAMErrorCode.RATE_LIMIT_REACHED) {
+ QMessageBox.warning(this, tr("Rate limit reached"), tr("Rate limit reached.\nRetry your request in " + e.getRateLimitDuration() + " seconds."));
+ }
setMessage("EDAMSystemException: " +e.getMessage());
return;
} catch (EDAMNotFoundException e) {
// If we've gotten this far, we have a good note.
if (historyWindow == null) {
- // ICHANGED
historyWindow = new OnlineNoteHistory(logger, conn, cbObserver);
historyWindow.historyCombo.activated.connect(this, "reloadHistoryWindow(String)");
waitCursor(false);
return null;
} catch (EDAMSystemException e) {
+ if (e.getErrorCode() == EDAMErrorCode.RATE_LIMIT_REACHED) {
+ QMessageBox.warning(this, tr("Rate limit reached"), tr("Rate limit reached.\nRetry your request in " + e.getRateLimitDuration() + " seconds."));
+ }
setMessage("EDAMSystemException: " +e.getMessage());
waitCursor(false);
return null;
setMessage("EDAMUserException: " +e.getMessage());
return;
} catch (EDAMSystemException e) {
+ if (e.getErrorCode() == EDAMErrorCode.RATE_LIMIT_REACHED) {
+ QMessageBox.warning(this, tr("Rate limit reached"), tr("Rate limit reached.\nRetry your request in " + e.getRateLimitDuration() + " seconds."));
+ }
setMessage("EDAMSystemException: " +e.getMessage());
return;
} catch (TException e) {
//**********************************************************
//**********************************************************
// An error has happended fetching a resource. let the user know
- // ICHANGED
private void resourceErrorMessage(int tabIndex) {
if (tabIndex < 0) {
return;
public void refreshLists() {
logger.log(logger.EXTREME, "Entering NeverNote.refreshLists");
updateQuotaBar();
- // ICHANGED
// すべてのタブのノートを調べて、Dirtyならばセーブする。その後refreshListsする。
Collection<Integer> tabIndex = noteDirty.keySet();
Iterator<Integer> indexIterator = tabIndex.iterator();
} else
indexThreadDeadCount=0;
-
+ if (!rensoNoteListDock.getRensoNoteList().getEnRelatedNotesThread().isAlive()) {
+ enRelatedNotesThreadDeadCount++;
+ if (enRelatedNotesThreadDeadCount > MAX && !disableENRelatedNotesThreadCheck) {
+ QMessageBox.information(this, tr("A thread has died."), tr("It appears as the Evernote Related Notes thread has died. I recommend "+
+ "checking stopping NeighborNote, saving the logs for later viewing, and restarting. Sorry."));
+ disableENRelatedNotesThreadCheck = true;
+ }
+ } else
+ enRelatedNotesThreadDeadCount=0;
}
private void thumbnailTimer() {
//* View / Hide source HTML for a note
//*************************************************
public void viewSource() {
- // ICHANGED すべてのタブに対して
+ // すべてのタブに対して
for(int i = 0; i < tabBrowser.count(); i++){
BrowserWindow browser = ((TabBrowse) tabBrowser.widget(i)).getBrowserWindow();
browser.showSource(menuBar.viewSource.isChecked());
blockSignals(false);
}
- // ICHANGED
// タブが変更された
private void tabWindowChanged(int index) {
if (index < 0 || index >= tabBrowser.count()) {
refreshEvernoteNote(true);
// 連想ノートリストを更新
- rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
}
- // ICHANGD
// 生存ノートテーブル→ゴミ箱(またはその逆)に切り替える
private void switchNoteTable(boolean toDeleted) {
clearNotebookFilter();
// toggle the add buttons
newButton.setEnabled(!newButton.isEnabled());
menuBar.noteAdd.setEnabled(newButton.isEnabled());
+ menuBar.noteAddNewTab.setEnabled(newButton.isEnabled());
+ if (currentNoteGuid == null || currentNoteGuid.equals("")) {
+ menuBar.noteAddNewTab.setEnabled(false);
+ }
menuBar.noteAdd.setVisible(true);
if (!toDeleted) { // 生存ノートテーブルへ
Global.showDeleted = false;
menuBar.noteRestoreAction.setEnabled(false);
menuBar.noteRestoreAction.setVisible(false);
- // ICHANGED ゴミ箱から元の画面に戻す。連想ノートリストをONに。
+ // ゴミ箱から元の画面に戻す。連想ノートリストをONに。
rensoNoteListDock.setEnabled(true);
} else { // ゴミ箱へ
trashTree.itemSelectionChanged.disconnect(this, "trashTreeSelection()");
Global.showDeleted = true;
menuBar.noteRestoreAction.setEnabled(true);
menuBar.noteRestoreAction.setVisible(true);
- // ICHANGED ゴミ箱を開く。連想ノートリストをOFFに。
+ // ゴミ箱を開く。連想ノートリストをOFFに。
rensoNoteListDock.setEnabled(false);
}
browserWindow.setReadOnly(!newButton.isEnabled());
}
- // ICHANGED
// ユーザが連想ノートリストのアイテムを選択した時の処理
@SuppressWarnings("unused")
private void rensoNoteItemPressed(QListWidgetItem current) {
logger.log(logger.HIGH, "Nevernote.rensoNoteSelectionChangeに入った");
- rensoNotePressedItemGuid = rensoNoteList.getNoteGuid(current);
+ rensoNotePressedItemGuid = rensoNoteListDock.getRensoNoteList().getNoteGuid(current);
// 右クリックだったら終了
if (QApplication.mouseButtons().isSet(MouseButton.RightButton)) {
String tableGuid = (String) ix.values().toArray()[0];
if (tableGuid.equals(rensoNotePressedItemGuid)) {
noteTableView.selectRow(i);
- return;
+ break;
}
}
}
logger.log(logger.HIGH, "Nevernote.rensoNoteSelectionChangeを出た");
}
- // ICHANGED
// 関連ノートリストからノートを除外する
@SuppressWarnings("unused")
private void excludeNote() {
}
}
- // ICHANGED
// 関連ノートリストからノートを除外する
private void excludeNote(String guid) {
if (Global.verifyExclude()) {
// 除外ノートテーブルに追加
conn.getExcludedTable().addExclusion(guid, currentNoteGuid);
- rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
}
- // ICHANGED
// 関連ノートリストのノートにスターを付ける
@SuppressWarnings("unused")
private void starNote() {
}
}
- // ICHANGED
// 関連ノートリストのノートにスターを付ける
private void starNote(String guid) {
// スター付きノートテーブルに追加
conn.getStaredTable().addStaredItem(currentNoteGuid, guid);
- rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
}
- // ICHANGED
// 関連ノートリストのノートからスターを外す
@SuppressWarnings("unused")
private void unstarNote() {
}
}
- // ICHANGED
// 関連ノートリストのノートからスターを外す
private void unstarNote(String guid) {
// スター付きノートテーブルから削除
conn.getStaredTable().removeStaredItem(currentNoteGuid, guid);
- rensoNoteList.refreshRensoNoteList(currentNoteGuid);
+ rensoNoteListDock.getRensoNoteList().refreshRensoNoteList(currentNoteGuid);
}
- // ICHANGED
// currentNoteGuidを返す
public String getCurrentNoteGuid() {
return currentNoteGuid;
}
+
+ @SuppressWarnings("unused")
+ // タブ入れ替えによってタブインデックスが変わったので、インデックスで管理しているハッシュマップ達も入れ替える
+ private void tabIndexChanged(int from, int to) {
+ // tabWindows
+ TabBrowse tab = tabWindows.get(from);
+ tabWindows.put(from, tabWindows.get(to));
+ tabWindows.put(to, tab);
+ // noteDirty
+ boolean isNoteDirty = noteDirty.get(from);
+ noteDirty.put(from, noteDirty.get(to));
+ noteDirty.put(to, isNoteDirty);
+ // inkNote
+ boolean isInkNote = inkNote.get(from);
+ inkNote.put(from, inkNote.get(to));
+ inkNote.put(to, isInkNote);
+ // readOnly
+ boolean isReadOnly = readOnly.get(from);
+ readOnly.put(from, readOnly.get(to));
+ readOnly.put(to, isReadOnly);
+ // historyGuids
+ ArrayList<String> histGuids = historyGuids.get(from);
+ historyGuids.put(from, historyGuids.get(to));
+ historyGuids.put(to, histGuids);
+ // historyPosition
+ int histPosition = historyPosition.get(from);
+ historyPosition.put(from, historyPosition.get(to));
+ historyPosition.put(to, histPosition);
+ // fromHistory
+ boolean fromHist = fromHistory.get(from);
+ fromHistory.put(from, fromHistory.get(to));
+ fromHistory.put(to, fromHist);
+ }
+
+ // 連想ノートリストのgetter
+ public RensoNoteList getRensoNoteList() {
+ return rensoNoteListDock.getRensoNoteList();
+ }
+
+ // 帯域制限の超過をユーザに通知
+ @SuppressWarnings("unused")
+ private void informRateLimit(Integer rateLimitDuration) {
+ QMessageBox.warning(this, tr("Rate limit reached"), tr("Rate limit reached.\nRetry your request in " + rateLimitDuration + " seconds."));
+ }
}