qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
friendchatroom.cpp
Go to the documentation of this file.
1 /*
2  Copyright © 2014-2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "src/grouplist.h"
23 #include "src/model/friend.h"
24 #include "src/model/group.h"
25 #include "src/model/status.h"
28 
29 #include <QCollator>
30 
31 namespace {
32 
33 QString getShortName(const QString& name)
34 {
35  constexpr auto MAX_NAME_LENGTH = 30;
36  if (name.length() <= MAX_NAME_LENGTH) {
37  return name;
38  }
39 
40  return name.left(MAX_NAME_LENGTH).trimmed() + "…";
41 }
42 
43 }
44 
46  : frnd{frnd}
47  , dialogsManager{dialogsManager}
48  , core{_core}
49 {
50 }
51 
53 {
54  return frnd;
55 }
56 
58 {
59  return frnd;
60 }
61 
62 void FriendChatroom::setActive(bool _active)
63 {
64  if (active != _active) {
65  active = _active;
66  emit activeChanged(active);
67  }
68 }
69 
71 {
72  return Status::isOnline(frnd->getStatus());
73 }
74 
76 {
78 }
79 
81 {
82  const auto circleId = getCircleId();
83  return Settings::getInstance().getCircleName(circleId);
84 }
85 
87 {
88  const auto friendId = frnd->getId();
89  const auto groupId = core.createGroup();
90  core.groupInviteFriend(friendId, groupId);
91 }
92 
94 {
95  const auto pk = frnd->getPublicKey();
97 }
98 
99 void FriendChatroom::setAutoAcceptDir(const QString& dir)
100 {
101  const auto pk = frnd->getPublicKey();
103 }
104 
106 {
107  setAutoAcceptDir(QString{});
108 }
109 
111 {
112  return getAutoAcceptDir().isEmpty();
113 }
114 
116 {
117  const auto friendId = frnd->getId();
118  const auto groupId = group->getId();
119  core.groupInviteFriend(friendId, groupId);
120 }
121 
122 QVector<GroupToDisplay> FriendChatroom::getGroups() const
123 {
124  QVector<GroupToDisplay> groups;
125  for (const auto group : GroupList::getAllGroups()) {
126  const auto name = getShortName(group->getName());
127  const GroupToDisplay groupToDisplay = { name, group };
128  groups.push_back(groupToDisplay);
129  }
130 
131  return groups;
132 }
133 
137 QVector<CircleToDisplay> FriendChatroom::getOtherCircles() const
138 {
139  QVector<CircleToDisplay> circles;
140  const auto currentCircleId = getCircleId();
141  const auto& s = Settings::getInstance();
142  for (int i = 0; i < s.getCircleCount(); ++i) {
143  if (i == currentCircleId) {
144  continue;
145  }
146 
147  const auto name = getShortName(s.getCircleName(i));
148  const CircleToDisplay circle = { name, i };
149  circles.push_back(circle);
150  }
151 
152  std::sort(circles.begin(), circles.end(),
153  [](const CircleToDisplay& a, const CircleToDisplay& b) -> bool {
154  QCollator collator;
155  collator.setNumericMode(true);
156  return collator.compare(a.name, b.name) < 0;
157  });
158 
159  return circles;
160 }
161 
163 {
164  frnd->setEventFlag(false);
165 }
166 
168 {
169  const auto friendPk = frnd->getPublicKey();
170  const auto dialogs = dialogsManager->getFriendDialogs(friendPk);
171  return !dialogs || dialogs->chatroomCount() > 1;
172 }
173 
175 {
176  const auto friendPk = frnd->getPublicKey();
177  const auto dialogs = dialogsManager->getFriendDialogs(friendPk);
178  return dialogs && dialogs->hasContact(friendPk);
179 }
180 
182 {
183  const auto friendPk = frnd->getPublicKey();
184  const auto dialogs = dialogsManager->getFriendDialogs(friendPk);
185  return !dialogs || !dialogs->hasContact(friendPk);
186 }
187 
189 {
190  const auto friendPk = frnd->getPublicKey();
191  auto dialogs = dialogsManager->getFriendDialogs(friendPk);
192  dialogs->removeFriend(friendPk);
193 }
Settings::setAutoAcceptDir
void setAutoAcceptDir(const ToxPk &id, const QString &dir) override
Definition: settings.cpp:1287
IDialogsManager
Definition: idialogsmanager.h:27
FriendChatroom::dialogsManager
IDialogsManager * dialogsManager
Definition: friendchatroom.h:88
friend.h
settings.h
FriendChatroom::getContact
Contact * getContact() override
Definition: friendchatroom.cpp:57
idialogsmanager.h
FriendChatroom::activeChanged
void activeChanged(bool activated)
FriendChatroom::FriendChatroom
FriendChatroom(Friend *frnd, IDialogsManager *dialogsManager, Core &_core)
Definition: friendchatroom.cpp:45
group.h
contentdialog.h
FriendChatroom::inviteToNewGroup
void inviteToNewGroup()
Definition: friendchatroom.cpp:86
FriendChatroom::autoAcceptEnabled
bool autoAcceptEnabled() const
Definition: friendchatroom.cpp:110
FriendChatroom::resetEventFlags
void resetEventFlags()
Definition: friendchatroom.cpp:162
FriendChatroom::possibleToOpenInNewWindow
bool possibleToOpenInNewWindow() const
Definition: friendchatroom.cpp:167
IDialogsManager::getFriendDialogs
virtual IDialogs * getFriendDialogs(const ToxPk &friendPk) const =0
FriendChatroom::friendCanBeRemoved
bool friendCanBeRemoved() const
Definition: friendchatroom.cpp:181
Group::getId
uint32_t getId() const override
Definition: group.cpp:140
FriendChatroom::setActive
void setActive(bool active)
Definition: friendchatroom.cpp:62
IDialogs::chatroomCount
virtual int chatroomCount() const =0
Settings::getAutoAcceptDir
QString getAutoAcceptDir(const ToxPk &id) const override
Definition: settings.cpp:1276
CircleToDisplay
Definition: friendchatroom.h:39
Settings::getFriendCircleID
int getFriendCircleID(const ToxPk &id) const override
Definition: settings.cpp:1894
FriendChatroom::getCircleName
QString getCircleName() const
Definition: friendchatroom.cpp:80
Friend::getStatus
Status::Status getStatus() const
Definition: friend.cpp:190
FriendChatroom::setAutoAcceptDir
void setAutoAcceptDir(const QString &dir)
Definition: friendchatroom.cpp:99
FriendChatroom::getCircleId
int getCircleId() const
Definition: friendchatroom.cpp:75
grouplist.h
Contact
Definition: contact.h:26
Friend
Definition: friend.h:31
Friend::setEventFlag
void setEventFlag(bool f) override
Definition: friend.cpp:146
FriendChatroom::getGroups
QVector< GroupToDisplay > getGroups() const
Definition: friendchatroom.cpp:122
FriendChatroom::getAutoAcceptDir
QString getAutoAcceptDir() const
Definition: friendchatroom.cpp:93
FriendChatroom::active
bool active
Definition: friendchatroom.h:86
IDialogs::removeFriend
virtual void removeFriend(const ToxPk &friendPk)=0
FriendChatroom::frnd
Friend * frnd
Definition: friendchatroom.h:87
Settings::getInstance
static Settings & getInstance()
Returns the singleton instance.
Definition: settings.cpp:88
Group
Definition: group.h:34
FriendChatroom::getOtherCircles
QVector< CircleToDisplay > getOtherCircles() const
Return sorted list of circles exclude current circle.
Definition: friendchatroom.cpp:137
Friend::getPublicKey
const ToxPk & getPublicKey() const
Definition: friend.cpp:131
Core::createGroup
int createGroup(uint8_t type=TOX_CONFERENCE_TYPE_AV)
Definition: core.cpp:1659
Settings::getCircleName
QString getCircleName(int id) const
Definition: settings.cpp:2024
friendchatroom.h
FriendChatroom::inviteFriend
void inviteFriend(const Group *group)
Definition: friendchatroom.cpp:115
FriendChatroom::canBeRemovedFromWindow
bool canBeRemovedFromWindow() const
Definition: friendchatroom.cpp:174
FriendChatroom::canBeInvited
bool canBeInvited() const
Definition: friendchatroom.cpp:70
GroupList::getAllGroups
static QList< Group * > getAllGroups()
Definition: grouplist.cpp:64
IDialogs::hasContact
virtual bool hasContact(const ContactId &contactId) const =0
FriendChatroom::removeFriendFromDialogs
void removeFriendFromDialogs()
Definition: friendchatroom.cpp:188
Friend::getId
uint32_t getId() const override
Definition: friend.cpp:136
Status::isOnline
bool isOnline(Status status)
Definition: status.cpp:83
FriendChatroom::disableAutoAccept
void disableAutoAccept()
Definition: friendchatroom.cpp:105
FriendChatroom::core
Core & core
Definition: friendchatroom.h:89
FriendChatroom::getFriend
Friend * getFriend()
Definition: friendchatroom.cpp:52
status.h
Core::groupInviteFriend
void groupInviteFriend(uint32_t friendId, int groupId)
Definition: core.cpp:1650
Core
Definition: core.h:59
GroupToDisplay
Definition: friendchatroom.h:33