blob: 7c37bcfb08db9ef9d2fabb1aca1142997cf5127c [file] [log] [blame]
Olivier SOLDANO47aa97f2017-04-04 10:40:00 -04001/**************************************************************************
Andreas Traczykb8b13ba2018-08-21 16:30:16 -04002* Copyright (C) 2015-2018 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"
Edric Milaretcdc978b2015-06-04 11:25:12 -040033#include "instantmessagingwidget.h"
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040034#include "smartlistmodel.h"
Edric Milaret627500d2015-03-27 16:41:40 -040035
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040036// old LRC
Edric Milaret627500d2015-03-27 16:41:40 -040037#include "callmodel.h"
38#include "video/renderer.h"
39#include "video/previewmanager.h"
Edric Milarete5afb072015-06-02 16:45:44 -040040#include "accountmodel.h"
Edric Milaret627500d2015-03-27 16:41:40 -040041#include "categorizedhistorymodel.h"
Edric Milaret00a32252016-01-19 10:37:13 -050042#include "media/textrecording.h"
Edric Milaret627500d2015-03-27 16:41:40 -040043
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040044// new LRC
45#include "globalinstances.h"
46#include "api/newaccountmodel.h"
47#include "api/conversationmodel.h"
48#include "api/account.h"
49#include "api/contact.h"
50#include "api/contactmodel.h"
51#include "api/newcallmodel.h"
52
53class ConversationItemDelegate;
Edric Milaretab12d022015-12-04 16:09:44 -050054class ImDelegate;
Nicolas Jagerca850292016-01-17 14:11:10 -050055class QPropertyAnimation;
Edric Milareted0b2802015-10-01 15:10:02 -040056
Edric Milaret627500d2015-03-27 16:41:40 -040057namespace Ui {
58class CallWidget;
59}
60
61class CallWidget : public NavWidget
62{
63 Q_OBJECT
64
65public:
Nicolas Jager97a21b42015-12-03 16:55:45 -050066 explicit CallWidget(QWidget* parent = 0);
Edric Milaret627500d2015-03-27 16:41:40 -040067 ~CallWidget();
Edric Milaret627500d2015-03-27 16:41:40 -040068
Edric Milaret33cb4832016-01-08 10:14:14 -050069public slots:
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040070 void on_ringContactLineEdit_returnPressed();
71
72public slots:
Nicolas Jager74fe46f2016-02-29 14:55:09 -050073 void settingsButtonClicked();
Nicolas Jager74fe46f2016-02-29 14:55:09 -050074 void showIMOutOfCall(const QModelIndex& nodeIdx);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040075 void slotAcceptInviteClicked(const QModelIndex& index);
76 void slotBlockInviteClicked(const QModelIndex& index);
77 void slotIgnoreInviteClicked(const QModelIndex& index);
Andreas Traczyk912242e2018-10-29 14:44:44 -040078 void slotCustomContextMenuRequested(const QPoint & pos);
Isa Nanic601de1d2018-10-23 11:37:26 -040079 void slotAccountChanged(int index);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -040080 void slotShowCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
81 void slotShowIncomingCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
82 void slotShowChatView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
83 void update();
Nicolas Jager97a21b42015-12-03 16:55:45 -050084
Edric Milaret627500d2015-03-27 16:41:40 -040085private slots:
86 void on_acceptButton_clicked();
87 void on_refuseButton_clicked();
Edric Milareted0b2802015-10-01 15:10:02 -040088 void on_cancelButton_clicked();
Nicolas Jager97a21b42015-12-03 16:55:45 -050089 void on_smartList_doubleClicked(const QModelIndex& index);
Edric Milaret6a785af2016-03-07 15:39:30 -050090 void on_sendIMButton_clicked();
91 void on_imMessageEdit_returnPressed();
Edric Milaret8001f6f2016-01-27 09:55:12 -050092 void on_ringContactLineEdit_textChanged(const QString& text);
Edric Milareta0ebd062016-01-13 12:18:23 -050093 void on_imBackButton_clicked();
Andreas Traczyk912242e2018-10-29 14:44:44 -040094 void on_sendContactRequestButton_clicked();
Edric Milaret6b68a482016-02-01 15:23:44 -050095 void on_smartList_clicked(const QModelIndex &index);
Edric Milaret1e598592016-09-02 10:10:01 -040096 void on_qrButton_toggled(bool checked);
Edric Milaret4097d2f2016-02-09 14:41:50 -050097 void on_shareButton_clicked();
Anthony Léonardd47179c2017-03-28 10:39:10 -040098 void on_pendingCRBackButton_clicked();
Andreas Traczyk912242e2018-10-29 14:44:44 -040099 void on_btnAudioCall_clicked();
100 void on_btnVideoCall_clicked();
Edric Milaret627500d2015-03-27 16:41:40 -0400101
102private slots:
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400103 void smartListSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
Anthony Léonardd47179c2017-03-28 10:39:10 -0400104 void contactReqListCurrentChanged(const QModelIndex &currentIdx, const QModelIndex &previousIdx);
Andreas Traczyke86fb3c2018-08-02 17:38:34 -0400105 void slotAccountMessageReceived(const QMap<QString,QString> message,ContactMethod* cm, media::Media::Direction dir);
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400106 void onIncomingMessage(const std::string & convUid, uint64_t interactionId, const lrc::api::interaction::Info & interaction);
Edric Milaretd8528fa2015-07-07 14:13:51 -0400107
Edric Milaret627500d2015-03-27 16:41:40 -0400108private:
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400109 void placeCall();
110 void conversationsButtonClicked();
111 void invitationsButtonClicked();
112 void setupOutOfCallIM();
113 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();
135 const std::string& selectedAccountId();
136 const std::string& selectedConvUid();
137
Nicolas Jager97a21b42015-12-03 16:55:45 -0500138 QMenu* menu_;
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400139 ConversationItemDelegate* conversationItemDelegate_;
Edric Milaretab12d022015-12-04 16:09:44 -0500140 ImDelegate* imDelegate_;
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400141
Edric Milaretab12d022015-12-04 16:09:44 -0500142 QMetaObject::Connection imConnection_;
Edric Milaret49130472016-01-22 10:39:37 -0500143 QMetaObject::Connection imVisibleConnection_;
Edric Milaret00d34f22016-05-09 16:30:29 -0400144 QMetaObject::Connection callChangedConnection_;
Edric Milaret70ae8782016-04-18 16:10:44 -0400145 QMetaObject::Connection imClickedConnection_;
Anthony Léonardd47179c2017-03-28 10:39:10 -0400146 QMetaObject::Connection crListSelectionConnection_;
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400147
148 Ui::CallWidget* ui;
Olivier SOLDANO19193412017-06-06 12:03:36 -0400149 QMovie* miniSpinner_;
Nicolas Jagerca850292016-01-17 14:11:10 -0500150
Edric Milaret6d0e5312016-04-04 16:30:22 -0400151 constexpr static int qrSize_ = 200;
Edric Milaret01f23842015-06-22 14:46:01 -0400152
Andreas Traczykb8b13ba2018-08-21 16:30:16 -0400153 // lrc
154 Video::Renderer* videoRenderer_;
155 std::string lastConvUid_ {};
156 lrc::api::profile::Type currentTypeFilter_{};
157
158 std::unique_ptr<SmartListModel> smartListModel_;
159 std::unique_ptr<MessageModel> messageModel_;
160 QMetaObject::Connection modelSortedConnection_;
161 QMetaObject::Connection modelUpdatedConnection_;
162 QMetaObject::Connection filterChangedConnection_;
163 QMetaObject::Connection newConversationConnection_;
164 QMetaObject::Connection conversationRemovedConnection_;
165 QMetaObject::Connection newInteractionConnection_;
166 QMetaObject::Connection interactionStatusUpdatedConnection_;
167 QMetaObject::Connection conversationClearedConnection;
168 QMetaObject::Connection selectedCallChanged_;
169 QMetaObject::Connection smartlistSelectionConnection_;
Edric Milaret627500d2015-03-27 16:41:40 -0400170};