From 866da95252cd1cf90ea74cc85730a9b643634974 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Fri, 27 Aug 2021 16:24:47 -0400
Subject: [PATCH] phase2: add button to start generic swarm

GitLab: #340
Change-Id: I72534e9e3599b70cdf0f91aa81be7636499715b8
---
 resources/icons/create_swarm.svg      | 21 ++++++++++
 src/constant/JamiStrings.qml          |  1 +
 src/conversationsadapter.cpp          |  7 ++++
 src/conversationsadapter.h            |  1 +
 src/mainview/components/SidePanel.qml | 55 ++++++++++++++++++++-------
 5 files changed, 71 insertions(+), 14 deletions(-)
 create mode 100644 resources/icons/create_swarm.svg

diff --git a/resources/icons/create_swarm.svg b/resources/icons/create_swarm.svg
new file mode 100644
index 000000000..d590be279
--- /dev/null
+++ b/resources/icons/create_swarm.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
+<path d="M20,8.4c-0.4-0.3-0.8-0.5-1.2-0.7c0.2-0.2,0.4-0.5,0.6-0.8c0.4-0.8,0.4-1.8,0-2.6c-0.5-0.9-1.5-1.6-2.6-1.6
+	c-0.7,0-1.5,0.3-2,0.8c-0.6,0.6-1,1.6-0.8,2.5c0.1,0.6,0.4,1.2,0.8,1.6c-0.3,0.1-0.6,0.3-0.9,0.5c-0.5-0.4-1.2-0.6-1.9-0.6
+	c-0.6,0-1.3,0.2-1.8,0.6C9.9,8,9.5,7.9,9.2,7.7c0.2-0.2,0.4-0.5,0.6-0.8c0.4-0.8,0.4-1.7,0-2.5c-0.5-1-1.5-1.6-2.6-1.6
+	c-0.7,0-1.4,0.3-1.9,0.8c-0.7,0.6-1,1.6-0.9,2.5c0.1,0.6,0.4,1.2,0.8,1.6c-1.8,0.7-3.1,2.5-3.4,4.4c0,0.3,0,0.7,0,1
+	c0,0.2,0,0.2,0.1,0.3c0.1,0.2,0.4,0.3,0.6,0.3c0.3,0,0.5-0.2,0.5-0.5c0,0,0-0.1,0-0.1v-0.3c0-1.4,0.7-2.7,1.8-3.5
+	c1.3-0.9,3-1,4.4-0.2C9.2,9.2,9.1,9.4,9,9.5c-0.4,0.9-0.5,2,0,3c0.2,0.4,0.5,0.8,0.8,1.1c-1.2,0.5-2.3,1.3-3,2.3
+	C6,17,5.6,18.3,5.6,19.6l0,0.1c0,0.2,0,0.4,0.1,0.6c0.1,0.2,0.4,0.3,0.6,0.3c0.3,0,0.5-0.2,0.5-0.5c0,0,0-0.1,0-0.1v-0.4
+	c0-1.5,0.6-2.9,1.7-3.9c1.4-1.3,3.6-1.7,5.4-1c1.7,0.7,2.9,2.3,3.2,4c0.1,0.4,0.1,0.8,0.1,1.2c0,0,0,0.1,0,0.1
+	c0,0.1,0.1,0.2,0.2,0.3c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0,0.2,0,0.2,0c0.2-0.1,0.4-0.3,0.4-0.6v-0.4c0-1.4-0.4-2.7-1.2-3.8
+	c-0.7-1-1.8-1.8-3-2.2c0.3-0.3,0.6-0.7,0.8-1.1c0.4-0.9,0.4-2,0-3c-0.1-0.1-0.1-0.3-0.2-0.4c1.1-0.6,2.4-0.7,3.6-0.3
+	c1.4,0.5,2.4,1.9,2.6,3.4c0,0.3,0,0.5,0,0.9c0,0.2,0,0.2,0.1,0.3c0.1,0.2,0.4,0.3,0.6,0.3c0.3,0,0.5-0.2,0.5-0.5c0,0,0-0.1,0-0.1
+	v-0.3C22.2,11.1,21.4,9.5,20,8.4z M8.8,5.9C8.7,6.5,8.3,7,7.8,7.2C7.2,7.5,6.5,7.3,6.1,6.9c-0.4-0.4-0.6-1-0.5-1.5
+	C5.8,4.6,6.5,4,7.2,4c0,0,0.1,0,0.1,0c0.4,0,0.8,0.2,1.1,0.6C8.7,5,8.9,5.5,8.8,5.9z M14.1,11.3C14,12,13.5,12.7,12.8,13
+	c-0.7,0.3-1.7,0.1-2.3-0.4C10,12,9.8,11.3,9.9,10.6c0.2-0.9,1.1-1.7,2-1.7c0.3,0,0.6,0.1,0.9,0.2C13.7,9.5,14.2,10.4,14.1,11.3z
+	 M16.8,3.8l0,0.2c0.7,0,1.4,0.6,1.6,1.3c0.1,0.7-0.3,1.5-1,1.8c-0.6,0.2-1.3,0.1-1.8-0.3c-0.4-0.4-0.6-1-0.5-1.5
+	C15.4,4.6,16,4,16.8,4L16.8,3.8L16.8,3.8z"/>
+</svg>
diff --git a/src/constant/JamiStrings.qml b/src/constant/JamiStrings.qml
index 722f829ae..d0db3dcea 100644
--- a/src/constant/JamiStrings.qml
+++ b/src/constant/JamiStrings.qml
@@ -37,6 +37,7 @@ Item {
     property string incomingAudioCallFrom: qsTr("Incoming audio call from {}")
     property string incomingVideoCallFrom: qsTr("Incoming video call from {}")
     property string contactSearchConversation: qsTr("Find a user or search for a conversation")
+    property string startASwarm: qsTr("Start a swarm")
     property string contactSearchInvitations: qsTr("Search your invitations")
     property string invitations: qsTr("Invitations")
     property string description: qsTr("Jami is free software for universal communication which respects the freedoms and the privacy of its users.")
diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp
index 11b7bfc97..02786c587 100644
--- a/src/conversationsadapter.cpp
+++ b/src/conversationsadapter.cpp
@@ -549,3 +549,10 @@ ConversationsAdapter::connectConversationModel()
 
     return true;
 }
+
+void
+ConversationsAdapter::createSwarm()
+{
+    auto convModel = lrcInstance_->getCurrentConversationModel();
+    convModel->createConversation({}, "");
+}
\ No newline at end of file
diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h
index 3302bd558..72da591ea 100644
--- a/src/conversationsadapter.h
+++ b/src/conversationsadapter.h
@@ -48,6 +48,7 @@ protected:
 
 public:
     Q_INVOKABLE bool connectConversationModel();
+    Q_INVOKABLE void createSwarm();
     Q_INVOKABLE void setFilter(const QString& filterString);
     Q_INVOKABLE QVariantMap getConvInfoMap(const QString& convId);
     Q_INVOKABLE void restartConversation(const QString& convId);
diff --git a/src/mainview/components/SidePanel.qml b/src/mainview/components/SidePanel.qml
index 45feb8af4..f0ad5fcb7 100644
--- a/src/mainview/components/SidePanel.qml
+++ b/src/mainview/components/SidePanel.qml
@@ -56,8 +56,8 @@ Rectangle {
         sidePanelTabBar.selectTab(tabIndex)
     }
 
-    ContactSearchBar {
-        id: contactSearchBar
+    RowLayout {
+        id: startBar
 
         height: 40
         anchors.top: sidePanelRect.top
@@ -67,19 +67,46 @@ Rectangle {
         anchors.right: sidePanelRect.right
         anchors.rightMargin: 15
 
-        onContactSearchBarTextChanged: function (text) {
-            // not calling positionViewAtBeginning will cause
-            // sort animation visual bugs
-            conversationListView.positionViewAtBeginning()
-            ConversationsAdapter.setFilter(text)
+        ContactSearchBar {
+            id: contactSearchBar
+
+            Layout.fillHeight: true
+            Layout.fillWidth: true
+
+            onContactSearchBarTextChanged: function (text) {
+                // not calling positionViewAtBeginning will cause
+                // sort animation visual bugs
+                conversationListView.positionViewAtBeginning()
+                ConversationsAdapter.setFilter(text)
+            }
+
+            onReturnPressedWhileSearching: {
+                var listView = searchResultsListView.count ?
+                            searchResultsListView :
+                            conversationListView
+                if (listView.count)
+                    listView.model.select(0)
+            }
         }
 
-        onReturnPressedWhileSearching: {
-            var listView = searchResultsListView.count ?
-                        searchResultsListView :
-                        conversationListView
-            if (listView.count)
-                listView.model.select(0)
+        PushButton {
+            id: startConversation
+
+            Layout.alignment: Qt.AlignLeft
+            radius: JamiTheme.primaryRadius
+
+            imageColor: JamiTheme.textColor
+            imagePadding: 8
+            normalColor: JamiTheme.secondaryBackgroundColor
+
+            preferredSize: startBar.height
+
+            source: JamiResources.create_swarm_svg
+            toolTipText: JamiStrings.startASwarm
+
+            onClicked: {
+                ConversationsAdapter.createSwarm()
+            }
         }
     }
 
@@ -88,7 +115,7 @@ Rectangle {
 
         visible: ConversationsAdapter.pendingRequestCount &&
                  !contactSearchBar.textContent
-        anchors.top: contactSearchBar.bottom
+        anchors.top: startBar.bottom
         anchors.topMargin: visible ? 10 : 0
         width: sidePanelRect.width
         height: visible ? 42 : 0
-- 
GitLab