[SCM] ktp-text-ui packaging branch, master, updated. debian/15.12.1-1-1918-gdf4b0ec

Maximiliano Curia maxy at moszumanska.debian.org
Sat May 28 00:21:42 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-text-ui.git;a=commitdiff;h=70dca13

The following commit has been merged in the master branch:
commit 70dca13386b104d877413f7f710119a0fd58aa20
Author: Ahmed Ibrahim <ahmedibrahimkhali at gmail.com>
Date:   Sat Mar 31 15:52:14 2012 +0200

    Block/Unblock feature in ktp-text-ui module
    
    REVIEW: 104407
    FEATURE: 292402
---
 app/chat-window.cpp           | 52 +++++++++++++++++++++++++++++++++++++++++++
 app/chat-window.h             |  3 +++
 app/chatwindow.rc             |  1 +
 app/main.cpp                  |  1 +
 lib/channel-contact-model.cpp | 12 ++++++++++
 lib/channel-contact-model.h   |  3 ++-
 lib/chat-widget.cpp           | 20 +++++++++++++++++
 lib/chat-widget.h             |  5 +++++
 8 files changed, 96 insertions(+), 1 deletion(-)

diff --git a/app/chat-window.cpp b/app/chat-window.cpp
index bd4fc35..ee62869 100644
--- a/app/chat-window.cpp
+++ b/app/chat-window.cpp
@@ -257,6 +257,18 @@ void ChatWindow::onAudioCallTriggered()
     startAudioCall(currChat->account(), currChat->textChannel()->targetContact());
 }
 
+void ChatWindow::onBlockContactTriggered()
+{
+    ChatWidget *currChat = qobject_cast<ChatWidget*>(m_tabWidget->currentWidget());
+
+    if (!currChat) {
+        return;
+    }
+
+    Tp::ContactPtr contact = currChat->textChannel()->targetContact();
+    contact->block();
+}
+
 void ChatWindow::onCurrentIndexChanged(int index)
 {
     kDebug() << index;
@@ -298,6 +310,8 @@ void ChatWindow::onCurrentIndexChanged(int index)
         /// TODO re-activate check when invitation to chat has been sorted out
         setInviteToChatEnabled(false);
 
+        toggleBlockButton(currentChatTab->textChannel()->targetContact()->isBlocked());
+
     } else {
         setAudioCallEnabled(false);
         setFileTransferEnabled(false);
@@ -438,6 +452,18 @@ void ChatWindow::onVideoCallTriggered()
     startVideoCall(currChat->account(), currChat->textChannel()->targetContact());
 }
 
+void ChatWindow::onUnblockContactTriggered()
+{
+    ChatWidget *currChat = qobject_cast<ChatWidget*>(m_tabWidget->currentWidget());
+
+    if(!currChat) {
+        return;
+    }
+
+    Tp::ContactPtr contact = currChat->textChannel()->targetContact();
+    contact->unblock();
+}
+
 void ChatWindow::onShareDesktopTriggered()
 {
     ChatWidget *currChat =  qobject_cast<ChatWidget*>(m_tabWidget->currentWidget());
@@ -477,6 +503,7 @@ void ChatWindow::removeChatTabSignals(ChatTab* chatTab)
     disconnect(chatTab, SIGNAL(unreadMessagesChanged()), this, SLOT(onTabStateChanged()));
     disconnect(chatTab, SIGNAL(contactPresenceChanged(Tp::Presence)), this, SLOT(onTabStateChanged()));
     disconnect(chatTab->chatSearchBar(), SIGNAL(enableSearchButtonsSignal(bool)), this, SLOT(onEnableSearchActions(bool)));
+    disconnect(chatTab, SIGNAL(contactBlockStatusChanged(bool)), this, SLOT(toggleBlockButton(bool)));
 }
 
 void ChatWindow::sendNotificationToUser(ChatWindow::NotificationType type, const QString& errorMsg)
@@ -503,6 +530,7 @@ void ChatWindow::setupChatTabSignals(ChatTab *chatTab)
     connect(chatTab, SIGNAL(unreadMessagesChanged()), this, SLOT(onTabStateChanged()));
     connect(chatTab, SIGNAL(contactPresenceChanged(KTp::Presence)), this, SLOT(onTabStateChanged()));
     connect(chatTab->chatSearchBar(), SIGNAL(enableSearchButtonsSignal(bool)), this, SLOT(onEnableSearchActions(bool)));
+    connect(chatTab, SIGNAL(contactBlockStatusChanged(bool)), this, SLOT(toggleBlockButton(bool)));
 }
 
 void ChatWindow::setupCustomActions()
@@ -518,6 +546,9 @@ void ChatWindow::setupCustomActions()
     KAction *audioCallAction = new KAction(KIcon(QLatin1String("audio-headset")), i18n("&Audio Call"), this);
     connect(audioCallAction, SIGNAL(triggered()), this, SLOT(onAudioCallTriggered()));
 
+    KAction *blockContactAction = new KAction(KIcon(QLatin1String("im-ban-kick-user")), i18n("&Block Contact"), this);
+    connect(blockContactAction, SIGNAL(triggered()), this, SLOT(onBlockContactTriggered()));
+
     KAction *fileTransferAction = new KAction(KIcon(QLatin1String("mail-attachment")), i18n("&Send File"), this);
     connect(fileTransferAction, SIGNAL(triggered()), this, SLOT(onFileTransferTriggered()));
 
@@ -554,6 +585,7 @@ void ChatWindow::setupCustomActions()
     actionCollection()->addAction(QLatin1String("share-desktop"), shareDesktopAction);
     actionCollection()->addAction(QLatin1String("language"), spellDictComboAction);
     actionCollection()->addAction(QLatin1String("account-icon"), accountIconAction);
+    actionCollection()->addAction(QLatin1String("block-contact"), blockContactAction);
 }
 
 void ChatWindow::setAudioCallEnabled(bool enable)
@@ -706,5 +738,25 @@ void ChatWindow::setTabSpellDictionary(const QString &dict)
     currentChatTab->setSpellDictionary(dict);
 }
 
+void ChatWindow::toggleBlockButton(bool contactIsBlocked)
+{
+    QAction *action = actionCollection()->action(QLatin1String("block-contact"));
+    if(contactIsBlocked) {
+        //Change the name of the action to "Unblock Contact"
+        //and disconnect it with the block slot and reconnect it with unblock slot
+        disconnect(action, SIGNAL(triggered()), this, SLOT(onBlockContactTriggered()));
+        action->setText(i18n("&Unblock Contact"));
+
+        connect(action, SIGNAL(triggered()), this, SLOT(onUnblockContactTriggered()));
+    } else {
+        //Change the name of the action to "Block Contact"
+        //and disconnect it with the unblock slot and reconnect it with block slot
+        disconnect(action, SIGNAL(triggered()), this, SLOT(onUnblockContactTriggered()));
+        action->setText(i18n("&Block Contact"));
+
+        connect(action, SIGNAL(triggered()), this, SLOT(onBlockContactTriggered()));
+    }
+}
+
 
 #include "chat-window.moc"
diff --git a/app/chat-window.h b/app/chat-window.h
index fd81141..fc5b26f 100644
--- a/app/chat-window.h
+++ b/app/chat-window.h
@@ -79,6 +79,7 @@ private Q_SLOTS:
     void tabBarContextMenu(int  index, const QPoint &  globalPos);
     void closeCurrentTab();
     void onAudioCallTriggered();                                /** start an audio call */
+    void onBlockContactTriggered();                             /** Blocks contact */
     void onCurrentIndexChanged(int index);
     void onEnableSearchActions(bool enable);                    /** enables/disables menu search actions */
     void onFileTransferTriggered();                             /** start a file transfer (to be used only for 1on1 chats!) */
@@ -94,8 +95,10 @@ private Q_SLOTS:
     void onTabIconChanged(const KIcon &newIcon);
     void onVideoCallTriggered();                                /** start a video call */
     void onUserTypingChanged(Tp::ChannelChatState state);
+    void onUnblockContactTriggered();                           /** Unblocks contact when already blocked */
     void onShareDesktopTriggered();                             /** start a desktop share */
     void setTabSpellDictionary(const QString &dict);            /** set the spelling language for the current chat tab*/
+    void toggleBlockButton(bool contactIsBlocked);              /** Toggle block/unblock action according to the flag */
 
 protected Q_SLOTS:
     void showSettingsDialog();
diff --git a/app/chatwindow.rc b/app/chatwindow.rc
index ac5a259..54cf882 100644
--- a/app/chatwindow.rc
+++ b/app/chatwindow.rc
@@ -25,6 +25,7 @@
   <text>Main Toolbar</text>
   <Action name="invite-to-chat"/>
   <Separator />
+  <Action name="block-contact"/>
   <Action name="audio-call"/>
   <Action name="video-call"/>
   <Action name="send-file"/>
diff --git a/app/main.cpp b/app/main.cpp
index d76ce04..1e26612 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -53,6 +53,7 @@ int main(int argc, char *argv[])
         QDBusConnection::sessionBus(),
         Tp::Features() << Tp::Connection::FeatureSelfContact
                        << Tp::Connection::FeatureCore
+                       << Tp::Connection::FeatureRoster
     );
 
     Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus());
diff --git a/lib/channel-contact-model.cpp b/lib/channel-contact-model.cpp
index d731322..619e9ad 100644
--- a/lib/channel-contact-model.cpp
+++ b/lib/channel-contact-model.cpp
@@ -112,6 +112,16 @@ void ChannelContactModel::onContactAliasChanged(const QString &alias)
     Q_EMIT contactAliasChanged(contact, alias);
 }
 
+void ChannelContactModel::onContactBlockStatusChanged(bool blocked)
+{
+    Tp::ContactPtr contact(qobject_cast<Tp::Contact*>(sender()));
+
+    QModelIndex index = createIndex(m_contacts.lastIndexOf(contact), 0);
+    Q_EMIT dataChanged(index, index);
+
+    Q_EMIT contactBlockStatusChanged(contact, blocked);
+}
+
 void ChannelContactModel::addContacts(const Tp::Contacts &contacts)
 {
     QList<Tp::ContactPtr> newContacts = contacts.toList();
@@ -119,6 +129,7 @@ void ChannelContactModel::addContacts(const Tp::Contacts &contacts)
     Q_FOREACH(Tp::ContactPtr contact, newContacts) {
         connect(contact.data(), SIGNAL(aliasChanged(QString)), SLOT(onContactAliasChanged(QString)));
         connect(contact.data(), SIGNAL(presenceChanged(Tp::Presence)), SLOT(onContactPresenceChanged(Tp::Presence)));
+        connect(contact.data(), SIGNAL(blockStatusChanged(bool)), SLOT(onContactBlockStatusChanged(bool)));
     }
 
     beginInsertRows(QModelIndex(), m_contacts.size(), m_contacts.size() + newContacts.size());
@@ -135,6 +146,7 @@ void ChannelContactModel::removeContacts(const Tp::Contacts &contacts)
         //if we don't disconnect could we still get notifications here about their status/presence changes even if a contact has left the room
         disconnect(contact.data(), SIGNAL(aliasChanged(QString)), this, SLOT(onContactAliasChanged(QString)));
         disconnect(contact.data(), SIGNAL(presenceChanged(Tp::Presence)), this, SLOT(onContactPresenceChanged(Tp::Presence)));
+        disconnect(contact.data(), SIGNAL(blockStatusChanged(bool)), this, SLOT(onContactBlockStatusChanged(bool)));
 
         beginRemoveRows(QModelIndex(), m_contacts.indexOf(contact), m_contacts.indexOf(contact));
         m_contacts.removeAll(contact);
diff --git a/lib/channel-contact-model.h b/lib/channel-contact-model.h
index 41d5d84..55840ea 100644
--- a/lib/channel-contact-model.h
+++ b/lib/channel-contact-model.h
@@ -47,6 +47,7 @@ public:
 Q_SIGNALS:
     void contactPresenceChanged(const Tp::ContactPtr &contact, const KTp::Presence &presence);
     void contactAliasChanged(const Tp::ContactPtr &contact, const QString &alias);
+    void contactBlockStatusChanged(const Tp::ContactPtr &contact, bool blocked);
 
 protected:
     int rowCount(const QModelIndex &parent) const;
@@ -60,7 +61,7 @@ private Q_SLOTS:
                              const Tp::Channel::GroupMemberChangeDetails &details);
     void onContactPresenceChanged(const Tp::Presence &presence);
     void onContactAliasChanged(const QString &alias);
-
+    void onContactBlockStatusChanged(bool blocked);
 
 private:
     void addContacts(const Tp::Contacts &contacts);
diff --git a/lib/chat-widget.cpp b/lib/chat-widget.cpp
index 0a0b5db..cfbb74b 100644
--- a/lib/chat-widget.cpp
+++ b/lib/chat-widget.cpp
@@ -405,6 +405,8 @@ void ChatWidget::setupContactModelSignals()
             SLOT(onContactPresenceChange(Tp::ContactPtr,KTp::Presence)));
     connect(d->contactModel, SIGNAL(contactAliasChanged(Tp::ContactPtr,QString)),
             SLOT(onContactAliasChanged(Tp::ContactPtr,QString)));
+    connect(d->contactModel, SIGNAL(contactBlockStatusChanged(Tp::ContactPtr,bool)),
+       SLOT(onContactBlockStatusChanged(Tp::ContactPtr,bool)));
 }
 
 
@@ -814,6 +816,24 @@ void ChatWidget::onContactAliasChanged(const Tp::ContactPtr & contact, const QSt
     }
 }
 
+void ChatWidget::onContactBlockStatusChanged(const Tp::ContactPtr &contact, bool blocked)
+{
+    QString message;
+    if(blocked) {
+        message = i18n("%1 is now blocked.", contact->alias());
+    } else {
+        message = i18n("%1 is now unblocked.", contact->alias());
+    }
+
+    AdiumThemeStatusInfo statusMessage;
+    statusMessage.setMessage(message);
+    statusMessage.setService(d->channel->connection()->protocolName());
+    statusMessage.setTime(QDateTime::currentDateTime());
+    d->ui.chatArea->addStatusMessage(statusMessage);
+
+    Q_EMIT contactBlockStatusChanged(blocked);
+}
+
 void ChatWidget::onChannelInvalidated()
 {
     setChatEnabled(false);
diff --git a/lib/chat-widget.h b/lib/chat-widget.h
index 10de317..533882b 100644
--- a/lib/chat-widget.h
+++ b/lib/chat-widget.h
@@ -119,6 +119,8 @@ protected Q_SLOTS:
 
     void onChatStatusChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state);
 
+    void onContactBlockStatusChanged(const Tp::ContactPtr &contact, bool blocked);
+
     void onContactPresenceChange(const Tp::ContactPtr &contact, const KTp::Presence &presence);
 
     void onContactAliasChanged(const Tp::ContactPtr &contact, const QString &alias);
@@ -145,6 +147,9 @@ Q_SIGNALS:
     /** Emitted when another contact in the channel starts/stops typing (if supported by the protocol)*/
     void userTypingChanged(Tp::ChannelChatState);
 
+    /** Emitted when a contact is blocked or unblocked */
+    void contactBlockStatusChanged(bool blocked);
+
     void contactPresenceChanged(KTp::Presence presence);
 
     void unreadMessagesChanged();

-- 
ktp-text-ui packaging



More information about the pkg-kde-commits mailing list