blob: 94b7d09f5ddf9531b50a908b9e8c336bafee5585 [file] [log] [blame]
Olivier SOLDANO47aa97f2017-04-04 10:40:00 -04001/**************************************************************************
Sébastien Blin68abac92019-01-02 17:41:31 -05002* Copyright (C) 2015-2019 by Savoir-faire Linux *
Olivier SOLDANO47aa97f2017-04-04 10:40:00 -04003* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
4* Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com> *
5* Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com> *
Andreas Traczykb8b13ba2018-08-21 16:30:16 -04006* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> *
Isa Nanic37ccc1c2018-10-26 14:16:28 -04007* Author: Isa Nanic <isa.nanic@savoirfairelinux.com> *
Olivier SOLDANO47aa97f2017-04-04 10:40:00 -04008* *
9* This program is free software; you can redistribute it and/or modify *
10* it under the terms of the GNU General Public License as published by *
11* the Free Software Foundation; either version 3 of the License, or *
12* (at your option) any later version. *
13* *
14* This program is distributed in the hope that it will be useful, *
15* but WITHOUT ANY WARRANTY; without even the implied warranty of *
16* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
17* GNU General Public License for more details. *
18* *
19* You should have received a copy of the GNU General Public License *
20* along with this program. If not, see <http://www.gnu.org/licenses/>. *
21**************************************************************************/
Edric Milaret627500d2015-03-27 16:41:40 -040022
Edric Milaret5f316da2015-09-28 11:57:42 -040023#pragma once
Edric Milaret627500d2015-03-27 16:41:40 -040024
25#include <QWidget>
Edric Milaret67007d12015-05-07 09:40:09 -040026#include <QVector>
27#include <QString>
Edric Milaret7d40a4a2015-05-13 13:01:15 -040028#include <QMenu>
Edric Milaret029b95a2015-06-09 09:51:44 -040029#include <QItemSelection>
Edric Milaretc7ab5502015-06-15 11:18:02 -040030#include <QMovie>
Edric Milaret627500d2015-03-27 16:41:40 -040031
32#include "navwidget.h"
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040033#include "smartlistmodel.h"
Edric Milaret627500d2015-03-27 16:41:40 -040034
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040035// old LRC
Edric Milaret627500d2015-03-27 16:41:40 -040036#include "callmodel.h"
37#include "video/renderer.h"
38#include "video/previewmanager.h"
Edric Milarete5afb072015-06-02 16:45:44 -040039#include "accountmodel.h"
Edric Milaret627500d2015-03-27 16:41:40 -040040#include "categorizedhistorymodel.h"
Edric Milaret00a32252016-01-19 10:37:13 -050041#include "media/textrecording.h"
Edric Milaret627500d2015-03-27 16:41:40 -040042
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040043// new LRC
44#include "globalinstances.h"
45#include "api/newaccountmodel.h"
46#include "api/conversationmodel.h"
47#include "api/account.h"
48#include "api/contact.h"
49#include "api/contactmodel.h"
50#include "api/newcallmodel.h"
51
52class ConversationItemDelegate;
Nicolas Jagerca850292016-01-17 14:11:10 -050053class QPropertyAnimation;
Edric Milareted0b2802015-10-01 15:10:02 -040054
Edric Milaret627500d2015-03-27 16:41:40 -040055namespace Ui {
56class CallWidget;
57}
58
59class CallWidget : public NavWidget
60{
61 Q_OBJECT
62
63public:
Nicolas Jager97a21b42015-12-03 16:55:45 -050064 explicit CallWidget(QWidget* parent = 0);
Edric Milaret627500d2015-03-27 16:41:40 -040065 ~CallWidget();
Edric Milaret627500d2015-03-27 16:41:40 -040066
Andreas Traczykb81281e2018-12-13 13:13:28 -050067 int getLeftPanelWidth();
Isa Nanic6e4a39a2018-12-04 14:26:02 -050068
Andreas Traczykfc33a492018-12-14 13:53:13 -050069 // NavWidget
70 virtual void navigated(bool to);
Andreas Traczyk6ace34f2018-12-14 14:31:23 -050071 virtual void updateCustomUI();
Andreas Traczykfc33a492018-12-14 13:53:13 -050072
Edric Milaret33cb4832016-01-08 10:14:14 -050073public slots:
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040074 void on_ringContactLineEdit_returnPressed();
75
76public slots:
Nicolas Jager74fe46f2016-02-29 14:55:09 -050077 void settingsButtonClicked();
Nicolas Jager74fe46f2016-02-29 14:55:09 -050078 void showIMOutOfCall(const QModelIndex& nodeIdx);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040079 void slotAcceptInviteClicked(const QModelIndex& index);
80 void slotBlockInviteClicked(const QModelIndex& index);
81 void slotIgnoreInviteClicked(const QModelIndex& index);
Andreas Traczyk912242e2018-10-29 14:44:44 -040082 void slotCustomContextMenuRequested(const QPoint & pos);
Isa Nanic601de1d2018-10-23 11:37:26 -040083 void slotAccountChanged(int index);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040084 void slotShowCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
85 void slotShowIncomingCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
86 void slotShowChatView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
Sébastien Blin93bd2062018-12-17 15:57:16 -050087 void slotToggleFullScreenClicked();
88 void slotVideoViewDestroyed(const std::string& callid);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040089 void update();
Nicolas Jager97a21b42015-12-03 16:55:45 -050090
Edric Milaret627500d2015-03-27 16:41:40 -040091private slots:
92 void on_acceptButton_clicked();
93 void on_refuseButton_clicked();
Edric Milareted0b2802015-10-01 15:10:02 -040094 void on_cancelButton_clicked();
Nicolas Jager97a21b42015-12-03 16:55:45 -050095 void on_smartList_doubleClicked(const QModelIndex& index);
Edric Milaret8001f6f2016-01-27 09:55:12 -050096 void on_ringContactLineEdit_textChanged(const QString& text);
Edric Milareta0ebd062016-01-13 12:18:23 -050097 void on_imBackButton_clicked();
Andreas Traczyk912242e2018-10-29 14:44:44 -040098 void on_sendContactRequestButton_clicked();
Edric Milaret6b68a482016-02-01 15:23:44 -050099 void on_smartList_clicked(const QModelIndex &index);
Edric Milaret1e598592016-09-02 10:10:01 -0400100 void on_qrButton_toggled(bool checked);
Edric Milaret4097d2f2016-02-09 14:41:50 -0500101 void on_shareButton_clicked();
Andreas Traczyk912242e2018-10-29 14:44:44 -0400102 void on_btnAudioCall_clicked();
103 void on_btnVideoCall_clicked();
Edric Milaret627500d2015-03-27 16:41:40 -0400104
105private slots:
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400106 void smartListSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400107 void onIncomingMessage(const std::string & convUid, uint64_t interactionId, const lrc::api::interaction::Info & interaction);
Edric Milaretd8528fa2015-07-07 14:13:51 -0400108
Edric Milaret627500d2015-03-27 16:41:40 -0400109private:
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400110 void placeCall();
111 void conversationsButtonClicked();
112 void invitationsButtonClicked();
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400113 void setupSmartListContextMenu(const QPoint &pos);
114 void setupQRCode(QString ringID);
115 void backToWelcomePage();
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400116
117 // lrc
118 void selectConversation(const QModelIndex& index);
119 bool selectConversation(const lrc::api::conversation::Info& item,
120 lrc::api::ConversationModel& convModel);
121 void deselectConversation();
122 bool connectConversationModel();
123 void updateConversationView(const std::string& convUid);
124 void showConversationView();
125 void selectSmartlistItem(const std::string& convUid);
126 QImage imageForConv(const std::string & convUid);
127 void processContactLineEdit();
128 void hideMiniSpinner();
129 void updateConversationForNewContact(const std::string& convUid);
130 void updateSmartList();
131 void setSelectedAccount(const std::string & accountId);
132 void setConversationFilter(const QString& filter);
133 void setConversationFilter(lrc::api::profile::Type filter);
134 void updateConversationsFilterWidget();
Isa Nanic6e4a39a2018-12-04 14:26:02 -0500135 void updateComboBox();
Andreas Traczyk6b5ad3e2019-01-02 17:04:36 -0500136 void connectAccount(const std::string& accId);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400137
Nicolas Jager97a21b42015-12-03 16:55:45 -0500138 QMenu* menu_;
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400139
140 Ui::CallWidget* ui;
Olivier SOLDANO19193412017-06-06 12:03:36 -0400141 QMovie* miniSpinner_;
Nicolas Jagerca850292016-01-17 14:11:10 -0500142
Edric Milaret6d0e5312016-04-04 16:30:22 -0400143 constexpr static int qrSize_ = 200;
Edric Milaret01f23842015-06-22 14:46:01 -0400144
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400145 // lrc
146 Video::Renderer* videoRenderer_;
147 std::string lastConvUid_ {};
148 lrc::api::profile::Type currentTypeFilter_{};
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400149 std::unique_ptr<SmartListModel> smartListModel_;
Andreas Traczyk43c08232018-10-31 13:42:09 -0400150
151 QMetaObject::Connection imConnection_;
152 QMetaObject::Connection imVisibleConnection_;
153 QMetaObject::Connection callChangedConnection_;
154 QMetaObject::Connection imClickedConnection_;
155 QMetaObject::Connection crListSelectionConnection_;
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400156 QMetaObject::Connection modelSortedConnection_;
157 QMetaObject::Connection modelUpdatedConnection_;
158 QMetaObject::Connection filterChangedConnection_;
159 QMetaObject::Connection newConversationConnection_;
160 QMetaObject::Connection conversationRemovedConnection_;
161 QMetaObject::Connection newInteractionConnection_;
162 QMetaObject::Connection interactionStatusUpdatedConnection_;
163 QMetaObject::Connection conversationClearedConnection;
164 QMetaObject::Connection selectedCallChanged_;
165 QMetaObject::Connection smartlistSelectionConnection_;
Andreas Traczyk43c08232018-10-31 13:42:09 -0400166 QMetaObject::Connection interactionRemovedConnection_;
Andreas Traczyk43865372018-12-27 12:12:35 -0500167 QMetaObject::Connection contactAddedConnection_;
Andreas Traczyk6b5ad3e2019-01-02 17:04:36 -0500168 QMetaObject::Connection callStatusChangedConnection_;
Andreas Traczyk43865372018-12-27 12:12:35 -0500169
Edric Milaret627500d2015-03-27 16:41:40 -0400170};