diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0dea94c93e..2f9a151c2f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -950,6 +950,19 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); + QString setBookmarkValue = getCmdOption(argc, constArgv, "--setBookmark"); + if (!setBookmarkValue.isEmpty()) { + // Bookmarks are expected to be in a name=url form. + // An `=` character in the name or url is unsupported. + auto parts = setBookmarkValue.split("="); + if (parts.length() != 2) { + qWarning() << "Malformed setBookmark argument: " << setBookmarkValue; + } else { + qDebug() << "Setting bookmark" << parts[0] << "to" << parts[1]; + DependencyManager::get()->insert(parts[0], parts[1]); + } + } + return previousSessionCrashed; } diff --git a/interface/src/Bookmarks.h b/interface/src/Bookmarks.h index 56d26b55c6..c31aee6e33 100644 --- a/interface/src/Bookmarks.h +++ b/interface/src/Bookmarks.h @@ -28,6 +28,7 @@ public: Bookmarks(); virtual void setupMenus(Menu* menubar, MenuWrapper* menu) = 0; + void insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name. QString addressForBookmark(const QString& name) const; protected: @@ -37,7 +38,6 @@ protected: virtual void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) = 0; void enableMenuItems(bool enabled); virtual void readFromFile(); - void insert(const QString& name, const QVariant& address); // Overwrites any existing entry with same name. void sortActions(Menu* menubar, MenuWrapper* menu); int getMenuItemLocation(QList actions, const QString& name) const; void removeBookmarkFromMenu(Menu* menubar, const QString& name); diff --git a/interface/src/LocationBookmarks.cpp b/interface/src/LocationBookmarks.cpp index b2e31c3021..fda70d379d 100644 --- a/interface/src/LocationBookmarks.cpp +++ b/interface/src/LocationBookmarks.cpp @@ -67,6 +67,10 @@ QString LocationBookmarks::getHomeLocationAddress() { return addressForBookmark(HOME_BOOKMARK); } +QString LocationBookmarks::getAddress(const QString& bookmarkName) { + return addressForBookmark(bookmarkName); +} + void LocationBookmarks::teleportToBookmark() { QAction* action = qobject_cast(sender()); QString address = action->data().toString(); diff --git a/interface/src/LocationBookmarks.h b/interface/src/LocationBookmarks.h index f9de19c626..eebaf2f383 100644 --- a/interface/src/LocationBookmarks.h +++ b/interface/src/LocationBookmarks.h @@ -34,6 +34,13 @@ public: void setupMenus(Menu* menubar, MenuWrapper* menu) override; static const QString HOME_BOOKMARK; + /**jsdoc + * @function LocationBookmarks.getAddress + * @param {string} bookmarkName Name of the bookmark to get the address for. + * @returns {string} The url for the specified bookmark. If the bookmark does not exist, the empty string will be returned. + */ + Q_INVOKABLE QString getAddress(const QString& bookmarkName); + public slots: /**jsdoc @@ -48,7 +55,7 @@ public slots: void setHomeLocationToAddress(const QVariant& address); /**jsdoc - * @function LocationBookmarksgetHomeLocationAddress + * @function LocationBookmarks.getHomeLocationAddress * @returns {string} The url for the home location bookmark */ QString getHomeLocationAddress(); diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 7fc4a5b651..3fd65f452c 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -85,6 +85,7 @@ int main(int argc, const char* argv[]) { QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts ", "path"); QCommandLineOption responseTokensOption("tokens", "set response tokens ", "json"); QCommandLineOption displayNameOption("displayName", "set user display name ", "string"); + QCommandLineOption setBookmarkOption("setBookmark", "set bookmark key=value pair", "string"); parser.addOption(urlOption); parser.addOption(noLauncherOption); @@ -97,6 +98,7 @@ int main(int argc, const char* argv[]) { parser.addOption(allowMultipleInstancesOption); parser.addOption(responseTokensOption); parser.addOption(displayNameOption); + parser.addOption(setBookmarkOption); if (!parser.parse(arguments)) { std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam