aboutsummaryrefslogtreecommitdiff
path: root/src/browser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/browser.cpp')
-rw-r--r--src/browser.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/browser.cpp b/src/browser.cpp
index 7a169e9..7d39035 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -19,6 +19,8 @@ Browser::Browser(int &argc, char *argv[]) :
{
setApplicationName("smolbote");
setWindowIcon(QIcon(":/icon.svg"));
+
+ connect(this, &Browser::messageAvailable, this, &Browser::createSession);
}
Browser::~Browser()
@@ -94,6 +96,41 @@ MainWindow *Browser::createWindow()
return window;
}
+MainWindow *Browser::createSession(const SessionParam &params)
+{
+ MainWindow *window = nullptr;
+ if(params.newWindow || m_windows.isEmpty()) {
+ window = createWindow();
+ window->setProfile(profile(params.profile));
+ } else {
+ // reverse-iterate through windows to check for window with the same profile
+ for(auto it = m_windows.rbegin(); it != m_windows.rend(); ++it) {
+ if((*it)->profile()->storageName() == params.profile) {
+ window = *it;
+ break;
+ }
+ }
+ // if none is found, create one
+ if(window == nullptr) {
+ window = createWindow();
+ window->setProfile(profile(params.profile));
+ }
+ }
+
+ Q_CHECK_PTR(window);
+
+ if(params.urls.isEmpty()) {
+ // no URLs were given
+ window->newTab(QUrl::fromUserInput(m_config->value<std::string>("profile.homepage").value().c_str()));
+ } else {
+ for(const QUrl &url : params.urls) {
+ window->newTab(url);
+ }
+ }
+
+ return window;
+}
+
std::shared_ptr<WebEngineProfile> Browser::profile(const QString name)
{
return m_profiles[name];