From 3f28bbd8c84a1cd99c7fbdda2d9767648e342d51 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Sun, 22 Jul 2018 14:46:03 +0200 Subject: [PATCH] Remove tab name from scriptable proxy state --- src/scriptable/scriptable.cpp | 40 ++++----- src/scriptable/scriptable.h | 2 + src/scriptable/scriptableproxy.cpp | 130 ++++++++++++----------------- src/scriptable/scriptableproxy.h | 40 ++++----- 4 files changed, 93 insertions(+), 119 deletions(-) diff --git a/src/scriptable/scriptable.cpp b/src/scriptable/scriptable.cpp index 2479819901..d373e2709b 100644 --- a/src/scriptable/scriptable.cpp +++ b/src/scriptable/scriptable.cpp @@ -986,7 +986,7 @@ QScriptValue Scriptable::tab() if ( name.isNull() ) return toScriptValue( m_proxy->tabs(), this ); - m_proxy->setTab(name); + m_tabName = name; return QScriptValue(); } @@ -1028,7 +1028,7 @@ QScriptValue Scriptable::tabIcon() QScriptValue Scriptable::length() { m_skipArguments = 0; - return m_proxy->browserLength(); + return m_proxy->browserLength(m_tabName); } void Scriptable::select() @@ -1039,7 +1039,7 @@ void Scriptable::select() if ( !toInt(value, &row) ) throwError(argumentError()); - m_proxy->browserMoveToClipboard(row); + m_proxy->browserMoveToClipboard(m_tabName, row); } void Scriptable::next() @@ -1072,7 +1072,7 @@ void Scriptable::remove() if ( rows.empty() ) rows.append(0); - const auto error = m_proxy->browserRemoveRows(rows); + const auto error = m_proxy->browserRemoveRows(m_tabName, rows); if ( !error.isEmpty() ) throwError(error); } @@ -1091,7 +1091,7 @@ void Scriptable::edit() if (i > 0) text.append(m_inputSeparator); if ( toInt(value, &row) ) { - const QByteArray bytes = row >= 0 ? m_proxy->browserItemData(row, mimeText) + const QByteArray bytes = row >= 0 ? m_proxy->browserItemData(m_tabName, row, mimeText) : m_proxy->getClipboardData(mimeText); text.append( getTextData(bytes) ); } else { @@ -1101,13 +1101,13 @@ void Scriptable::edit() bool changeClipboard = row < 0; - if ( !m_proxy->browserOpenEditor(fromString(text), changeClipboard) ) { - m_proxy->showCurrentBrowser(); + if ( !m_proxy->browserOpenEditor(m_tabName, fromString(text), changeClipboard) ) { + m_proxy->showBrowser(m_tabName); if (len == 1 && row >= 0) { - m_proxy->browserSetCurrent(row); - m_proxy->browserEditRow(row); + m_proxy->browserSetCurrent(m_tabName, row); + m_proxy->browserEditRow(m_tabName, row); } else { - m_proxy->browserEditNew(text, changeClipboard); + m_proxy->browserEditNew(m_tabName, text, changeClipboard); } } } @@ -1128,7 +1128,7 @@ QScriptValue Scriptable::read() if (used) result.append( m_inputSeparator.toUtf8() ); used = true; - result.append( row >= 0 ? m_proxy->browserItemData(row, mime) + result.append( row >= 0 ? m_proxy->browserItemData(m_tabName, row, mime) : m_proxy->getClipboardData(mime) ); } else { mime = toString(value, this); @@ -1175,7 +1175,7 @@ void Scriptable::action() text.append(m_inputSeparator); else anyRows = true; - text.append( getTextData(m_proxy->browserItemData(row, mimeText)) ); + text.append( getTextData(m_proxy->browserItemData(m_tabName, row, mimeText)) ); } m_skipArguments = i + 2; @@ -1192,7 +1192,7 @@ void Scriptable::action() command.output = mimeText; command.input = mimeText; command.wait = false; - command.outputTab = m_proxy->tab(); + command.outputTab = m_proxy->tab(m_tabName); command.sep = ((i + 1) < argumentCount()) ? toString( argument(i + 1), this ) : QString('\n'); m_proxy->action(data, command); @@ -1262,7 +1262,7 @@ void Scriptable::exportTab() const auto filePath = arg(0); if ( filePath.isNull() ) throwError(argumentError()); - else if ( !m_proxy->saveTab(getAbsoluteFilePath(filePath)) ) + else if ( !m_proxy->saveTab(m_tabName, getAbsoluteFilePath(filePath)) ) throwSaveError(filePath); } @@ -1696,7 +1696,7 @@ QScriptValue Scriptable::selectItems() { const auto rows = getRows(); m_skipArguments = rows.size(); - return m_proxy->selectItems(rows); + return m_proxy->selectItems(m_tabName, rows); } QScriptValue Scriptable::selectedTab() @@ -1789,7 +1789,7 @@ QScriptValue Scriptable::getItem() return QScriptValue(); } - return toScriptValue( m_proxy->browserItemData(row), this ); + return toScriptValue( m_proxy->browserItemData(m_tabName, row), this ); } void Scriptable::setItem() @@ -2679,17 +2679,17 @@ void Scriptable::changeItem(bool create) if (create) { QVector items(1, data); - const auto error = m_proxy->browserInsert(row, items); + const auto error = m_proxy->browserInsert(m_tabName, row, items); if ( !error.isEmpty() ) throwError(error); } else { - m_proxy->browserChange(data, row); + m_proxy->browserChange(m_tabName, data, row); } } void Scriptable::nextToClipboard(int where) { - QVariantMap data = m_proxy->nextItem(where); + QVariantMap data = m_proxy->nextItem(m_tabName, where); if (data.isEmpty()) return; @@ -3007,7 +3007,7 @@ void Scriptable::insert(int row, int argumentsBegin, int argumentsEnd) items.append( createDataMap(mimeText, toString(arg, this)) ); } - const auto error = m_proxy->browserInsert(row, items); + const auto error = m_proxy->browserInsert(m_tabName, row, items); if ( !error.isEmpty() ) throwError(error); } diff --git a/src/scriptable/scriptable.h b/src/scriptable/scriptable.h index 165867cfba..49890bf6c5 100644 --- a/src/scriptable/scriptable.h +++ b/src/scriptable/scriptable.h @@ -431,6 +431,8 @@ public slots: Action *m_action = nullptr; bool m_failed = false; + + QString m_tabName; }; class NetworkReply : public QObject { diff --git a/src/scriptable/scriptableproxy.cpp b/src/scriptable/scriptableproxy.cpp index 4f56bc5748..6a767cebbf 100644 --- a/src/scriptable/scriptableproxy.cpp +++ b/src/scriptable/scriptableproxy.cpp @@ -87,8 +87,8 @@ const quint32 serializedFunctionCallMagicNumber = 0x58746908; const quint32 serializedFunctionCallVersion = 2; -#define BROWSER(call) \ - ClipboardBrowser *c = fetchBrowser(); \ +#define BROWSER(tabName, call) \ + ClipboardBrowser *c = fetchBrowser(tabName); \ if (c) \ (c->call) @@ -97,7 +97,7 @@ const quint32 serializedFunctionCallVersion = 2; #define INVOKE_(function, arguments, functionCallId) \ static auto f = FunctionCallSerializer(STR(#function)).withSlotArguments arguments; \ f.setArguments arguments; \ - emit sendMessage(f.serializeAndClear(functionCallId, m_tabName), CommandFunctionCall) + emit sendMessage(f.serializeAndClear(functionCallId), CommandFunctionCall) #define INVOKE(function, arguments) \ if (!m_wnd) { \ @@ -305,13 +305,13 @@ class FunctionCallSerializer { return *this; } - QByteArray serializeAndClear(int functionCallId, const QString &tabName) + QByteArray serializeAndClear(int functionCallId) { QByteArray bytes; QDataStream stream(&bytes, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_5_0); stream << serializedFunctionCallMagicNumber << serializedFunctionCallVersion - << functionCallId << tabName << m_slotName << m_args; + << functionCallId << m_slotName << m_args; m_args.clear(); return bytes; } @@ -338,7 +338,6 @@ class FunctionCallSerializer { QVector m_args; QByteArray m_slotName; - QByteArray m_tabName; }; class ScreenshotRectWidget : public QLabel { @@ -809,7 +808,6 @@ class KeyClicker : public QObject { ScriptableProxy::ScriptableProxy(MainWindow *mainWindow, QObject *parent) : QObject(parent) , m_wnd(mainWindow) - , m_tabName() { qRegisterMetaType< QPointer >("QPointer"); qRegisterMetaTypeStreamOperators("ClipboardMode"); @@ -872,13 +870,6 @@ QByteArray ScriptableProxy::callFunctionHelper(const QByteArray &serializedFunct return QByteArray(); } - stream >> m_tabName; - if (stream.status() != QDataStream::Ok) { - log("Failed to read scriptable proxy slot tab name", LogError); - Q_ASSERT(false); - return QByteArray(); - } - stream >> slotName; if (stream.status() != QDataStream::Ok) { log("Failed to read scriptable proxy slot call name", LogError); @@ -1139,12 +1130,6 @@ bool ScriptableProxy::showBrowserAt(const QString &tabName, QRect rect) return showBrowser(tabName); } -bool ScriptableProxy::showCurrentBrowser() -{ - INVOKE(showCurrentBrowser, ()); - return showBrowser(m_tabName); -} - void ScriptableProxy::action(const QVariantMap &arg1, const Command &arg2) { INVOKE2(action, (arg1, arg2)); @@ -1177,10 +1162,10 @@ void ScriptableProxy::showMessage(const QString &title, notification->setButtons(buttons); } -QVariantMap ScriptableProxy::nextItem(int where) +QVariantMap ScriptableProxy::nextItem(const QString &tabName, int where) { - INVOKE(nextItem, (where)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(nextItem, (tabName, where)); + ClipboardBrowser *c = fetchBrowser(tabName); if (!c) return QVariantMap(); @@ -1194,23 +1179,23 @@ QVariantMap ScriptableProxy::nextItem(int where) return c->copyIndex(index); } -void ScriptableProxy::browserMoveToClipboard(int row) +void ScriptableProxy::browserMoveToClipboard(const QString &tabName, int row) { - INVOKE2(browserMoveToClipboard, (row)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE2(browserMoveToClipboard, (tabName, row)); + ClipboardBrowser *c = fetchBrowser(tabName); m_wnd->moveToClipboard(c, row); } -void ScriptableProxy::browserSetCurrent(int arg1) +void ScriptableProxy::browserSetCurrent(const QString &tabName, int arg1) { - INVOKE2(browserSetCurrent, (arg1)); - BROWSER(setCurrent(arg1)); + INVOKE2(browserSetCurrent, (tabName, arg1)); + BROWSER(tabName, setCurrent(arg1)); } -QString ScriptableProxy::browserRemoveRows(QVector rows) +QString ScriptableProxy::browserRemoveRows(const QString &tabName, QVector rows) { - INVOKE(browserRemoveRows, (rows)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(browserRemoveRows, (tabName, rows)); + ClipboardBrowser *c = fetchBrowser(tabName); if (!c) return QString("Invalid tab"); @@ -1241,16 +1226,16 @@ QString ScriptableProxy::browserRemoveRows(QVector rows) return QString(); } -void ScriptableProxy::browserEditRow(int arg1) +void ScriptableProxy::browserEditRow(const QString &tabName, int arg1) { - INVOKE2(browserEditRow, (arg1)); - BROWSER(editRow(arg1)); + INVOKE2(browserEditRow, (tabName, arg1)); + BROWSER(tabName, editRow(arg1)); } -void ScriptableProxy::browserEditNew(const QString &arg1, bool changeClipboard) +void ScriptableProxy::browserEditNew(const QString &tabName, const QString &arg1, bool changeClipboard) { - INVOKE2(browserEditNew, (arg1, changeClipboard)); - BROWSER(editNew(arg1, changeClipboard)); + INVOKE2(browserEditNew, (tabName, arg1, changeClipboard)); + BROWSER(tabName, editNew(arg1, changeClipboard)); } QStringList ScriptableProxy::tabs() @@ -1295,10 +1280,10 @@ bool ScriptableProxy::loadTab(const QString &arg1) return m_wnd->loadTab(arg1); } -bool ScriptableProxy::saveTab(const QString &arg1) +bool ScriptableProxy::saveTab(const QString &tabName, const QString &arg1) { - INVOKE(saveTab, (arg1)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(saveTab, (tabName, arg1)); + ClipboardBrowser *c = fetchBrowser(tabName); if (!c) return false; @@ -1362,25 +1347,25 @@ bool ScriptableProxy::hasClipboardFormat(const QString &mime, ClipboardMode mode return data && data->hasFormat(mime); } -int ScriptableProxy::browserLength() +int ScriptableProxy::browserLength(const QString &tabName) { - INVOKE(browserLength, ()); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(browserLength, (tabName)); + ClipboardBrowser *c = fetchBrowser(tabName); return c ? c->length() : 0; } -bool ScriptableProxy::browserOpenEditor(const QByteArray &arg1, bool changeClipboard) +bool ScriptableProxy::browserOpenEditor(const QString &tabName, const QByteArray &arg1, bool changeClipboard) { - INVOKE(browserOpenEditor, (arg1, changeClipboard)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(browserOpenEditor, (tabName, arg1, changeClipboard)); + ClipboardBrowser *c = fetchBrowser(tabName); return c && c->openEditor(arg1, changeClipboard); } -QString ScriptableProxy::browserInsert(int row, const QVector &items) +QString ScriptableProxy::browserInsert(const QString &tabName, int row, const QVector &items) { - INVOKE(browserInsert, (row, items)); + INVOKE(browserInsert, (tabName, row, items)); - ClipboardBrowser *c = fetchBrowser(); + ClipboardBrowser *c = fetchBrowser(tabName); if (!c) return "Invalid tab"; @@ -1395,10 +1380,10 @@ QString ScriptableProxy::browserInsert(int row, const QVector &item return QString(); } -bool ScriptableProxy::browserChange(const QVariantMap &data, int row) +bool ScriptableProxy::browserChange(const QString &tabName, const QVariantMap &data, int row) { - INVOKE(browserChange, (data, row)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(browserChange, (tabName, data, row)); + ClipboardBrowser *c = fetchBrowser(tabName); if (!c) return false; @@ -1414,16 +1399,16 @@ bool ScriptableProxy::browserChange(const QVariantMap &data, int row) return c->model()->setData(index, itemData, contentType::data); } -QByteArray ScriptableProxy::browserItemData(int arg1, const QString &arg2) +QByteArray ScriptableProxy::browserItemData(const QString &tabName, int arg1, const QString &arg2) { - INVOKE(browserItemData, (arg1, arg2)); - return itemData(arg1, arg2); + INVOKE(browserItemData, (tabName, arg1, arg2)); + return itemData(tabName, arg1, arg2); } -QVariantMap ScriptableProxy::browserItemData(int arg1) +QVariantMap ScriptableProxy::browserItemData(const QString &tabName, int arg1) { - INVOKE(browserItemData, (arg1)); - return itemData(arg1); + INVOKE(browserItemData, (tabName, arg1)); + return itemData(tabName, arg1); } void ScriptableProxy::setCurrentTab(const QString &tabName) @@ -1434,15 +1419,10 @@ void ScriptableProxy::setCurrentTab(const QString &tabName) m_wnd->setCurrentTab(c); } -void ScriptableProxy::setTab(const QString &tabName) +QString ScriptableProxy::tab(const QString &tabName) { - m_tabName = tabName; -} - -QString ScriptableProxy::tab() -{ - INVOKE(tab, ()); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(tab, (tabName)); + ClipboardBrowser *c = fetchBrowser(tabName); return c ? c->tabName() : QString(); } @@ -1455,10 +1435,10 @@ int ScriptableProxy::currentItem() return current.isValid() ? current.row() : -1; } -bool ScriptableProxy::selectItems(const QVector &rows) +bool ScriptableProxy::selectItems(const QString &tabName, const QVector &rows) { - INVOKE(selectItems, (rows)); - ClipboardBrowser *c = fetchBrowser(); + INVOKE(selectItems, (tabName, rows)); + ClipboardBrowser *c = fetchBrowser(tabName); if (!c) return false; @@ -2098,17 +2078,15 @@ ClipboardBrowser *ScriptableProxy::fetchBrowser(const QString &tabName) return tabName.isEmpty() ? m_wnd->browser(0) : m_wnd->tab(tabName); } -ClipboardBrowser *ScriptableProxy::fetchBrowser() { return fetchBrowser(m_tabName); } - -QVariantMap ScriptableProxy::itemData(int i) +QVariantMap ScriptableProxy::itemData(const QString &tabName, int i) { - auto c = fetchBrowser(); + auto c = fetchBrowser(tabName); return c ? c->copyIndex( c->index(i) ) : QVariantMap(); } -QByteArray ScriptableProxy::itemData(int i, const QString &mime) +QByteArray ScriptableProxy::itemData(const QString &tabName, int i, const QString &mime) { - const QVariantMap data = itemData(i); + const QVariantMap data = itemData(tabName, i); if ( data.isEmpty() ) return QByteArray(); diff --git a/src/scriptable/scriptableproxy.h b/src/scriptable/scriptableproxy.h index c00eb06297..dc1548e573 100644 --- a/src/scriptable/scriptableproxy.h +++ b/src/scriptable/scriptableproxy.h @@ -117,8 +117,6 @@ public slots: bool showBrowser(const QString &tabName); bool showBrowserAt(const QString &tabName, QRect rect); - bool showCurrentBrowser(); - void action(const QVariantMap &arg1, const Command &arg2); void runInternalAction(const QVariantMap &data, const QString &command); @@ -130,13 +128,13 @@ public slots: const QString ¬ificationId = QString(), const NotificationButtons &buttons = NotificationButtons()); - QVariantMap nextItem(int where); - void browserMoveToClipboard(int row); - void browserSetCurrent(int arg1); - QString browserRemoveRows(QVector rows); + QVariantMap nextItem(const QString &tabName, int where); + void browserMoveToClipboard(const QString &tabName, int row); + void browserSetCurrent(const QString &tabName, int arg1); + QString browserRemoveRows(const QString &tabName, QVector rows); - void browserEditRow(int arg1); - void browserEditNew(const QString &arg1, bool changeClipboard); + void browserEditRow(const QString &tabName, int arg1); + void browserEditNew(const QString &tabName, const QString &arg1, bool changeClipboard); QStringList tabs(); bool toggleVisible(); @@ -147,7 +145,7 @@ public slots: void openActionDialog(const QVariantMap &arg1); bool loadTab(const QString &arg1); - bool saveTab(const QString &arg1); + bool saveTab(const QString &tabName, const QString &arg1); bool importData(const QString &fileName); bool exportData(const QString &fileName); @@ -158,23 +156,21 @@ public slots: QByteArray getClipboardData(const QString &mime, ClipboardMode mode = ClipboardMode::Clipboard); bool hasClipboardFormat(const QString &mime, ClipboardMode mode = ClipboardMode::Clipboard); - int browserLength(); - bool browserOpenEditor(const QByteArray &arg1, bool changeClipboard); + int browserLength(const QString &tabName); + bool browserOpenEditor(const QString &tabName, const QByteArray &arg1, bool changeClipboard); - QString browserInsert(int row, const QVector &items); - bool browserChange(const QVariantMap &data, int row); + QString browserInsert(const QString &tabName, int row, const QVector &items); + bool browserChange(const QString &tabName, const QVariantMap &data, int row); - QByteArray browserItemData(int arg1, const QString &arg2); - QVariantMap browserItemData(int arg1); + QByteArray browserItemData(const QString &tabName, int arg1, const QString &arg2); + QVariantMap browserItemData(const QString &tabName, int arg1); void setCurrentTab(const QString &tabName); - void setTab(const QString &tabName); - - QString tab(); + QString tab(const QString &tabName); int currentItem(); - bool selectItems(const QVector &rows); + bool selectItems(const QString &tabName, const QVector &rows); QVector selectedItems(); @@ -252,10 +248,9 @@ public slots: private: ClipboardBrowser *fetchBrowser(const QString &tabName); - ClipboardBrowser *fetchBrowser(); - QVariantMap itemData(int i); - QByteArray itemData(int i, const QString &mime); + QVariantMap itemData(const QString &tabName, int i); + QByteArray itemData(const QString &tabName, int i, const QString &mime); ClipboardBrowser *currentBrowser() const; QList selectedIndexes() const; @@ -270,7 +265,6 @@ public slots: #endif // HAS_TESTS MainWindow* m_wnd; - QString m_tabName; QVariantMap m_actionData; int m_actionId = -1;