summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net-im/psi/ChangeLog10
-rw-r--r--net-im/psi/Manifest8
-rw-r--r--net-im/psi/files/psi-0.13-psi+muc-kickban-reasons.patch381
-rw-r--r--net-im/psi/files/psi-0.13-psi+options-coloring-in-chat-dialog.patch272
-rw-r--r--net-im/psi/psi-0.13-r1.ebuild130
5 files changed, 799 insertions, 2 deletions
diff --git a/net-im/psi/ChangeLog b/net-im/psi/ChangeLog
index fb07b2f23ac4..261a80f36837 100644
--- a/net-im/psi/ChangeLog
+++ b/net-im/psi/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for net-im/psi
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-im/psi/ChangeLog,v 1.166 2009/08/02 14:50:45 jer Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-im/psi/ChangeLog,v 1.167 2009/08/17 11:16:37 pva Exp $
+
+*psi-0.13-r1 (17 Aug 2009)
+
+ 17 Aug 2009; Peter Volkov <pva@gentoo.org> +psi-0.13-r1.ebuild,
+ +files/psi-0.13-psi+muc-kickban-reasons.patch,
+ +files/psi-0.13-psi+options-coloring-in-chat-dialog.patch:
+ Updated translations, thank Rion for report. Updated psi+ patchset.
+ Backported two patches from git to make psi+ patchset apliable.
02 Aug 2009; Jeroen Roovers <jer@gentoo.org> psi-0.13.ebuild:
Marked ~hppa (bug #279676).
diff --git a/net-im/psi/Manifest b/net-im/psi/Manifest
index a91825f0db18..8dbc198290a6 100644
--- a/net-im/psi/Manifest
+++ b/net-im/psi/Manifest
@@ -1,6 +1,8 @@
AUX psi-0.10-gpg2.patch 505 RMD160 bfccc6ee984fac7b93ef0343a16c84bd6653d60d SHA1 b9d79a567cbbca837fb69a05ea8e59e07fdadf36 SHA256 cedeef3a18d0f7c4d50d1d86d9de88cceddf352977b2ae7df72451f3ba188348
AUX psi-0.12.1-build-error.patch 719 RMD160 401d3d17d9617ead7a78d78431a19c65c21b5667 SHA1 f47f6365c04872ba0a977241ee9d756eee640f0b SHA256 8daaf3e27d153b0c3e97b203adfc081fa06dd0d46a85a219baac9b181d0c51bb
AUX psi-0.12.1-qt-4.5-compatibility.patch 524 RMD160 c68887a6bc31ad20cd42c427769ecd3cfed53280 SHA1 5afbaa1474eec179a6c3ce1f1ea2deafd0a22369 SHA256 5e5c3d8089092c7b81eb6295a701c634ebd223ee6791f36ed56d83d72374ac13
+AUX psi-0.13-psi+muc-kickban-reasons.patch 10877 RMD160 dd2de05acdc790f6a7c5fef4016bf8b3827372bb SHA1 6f71b9670b3fee2d1cf8545fc701d4bd012dbef8 SHA256 ca18311d0d361527b9568bd21c1628769bb8240118a5ab696b155a86271a9380
+AUX psi-0.13-psi+options-coloring-in-chat-dialog.patch 11215 RMD160 602d91fb2a1f2b62d1b675f944ce0fa3b8f54fe2 SHA1 c74972b9af7b47e0c533d0f20f28ba3345f4965b SHA256 00ff4e618b19adfd7d13eadfdaf2f481e86987c9130f4400e2be39dd2b69f265
AUX psi-desktop2.patch 508 RMD160 50037b740407ec36e5d01386f145f5f055e4eae0 SHA1 71ddba6d8cafa8b7de218620dd7373758cc064d9 SHA256 b4045dafc0bc00b0167449693fc3e9b2f53041a070a93954f8939ee0866efa8e
AUX psi-echoplugin.patch 785 RMD160 eba6e881b251062d5f102d0a9450239eb778cf75 SHA1 1ba5d83ce9cf517e13eb6510ea16b62641c276f1 SHA256 9476e8de292427a7c3e209a72cd2ee5663bfe76e88b89618414adde84991c8ff
AUX psi-indicator.png 300 RMD160 507ab090f82276492bbf6af23eab78e2f8c8ccf2 SHA1 2adcd9b63b2f0ba98415c8bb526d1a57c24d88f4 SHA256 a0e9adcd0409d23c9033170ceb8f22980ba6d5e14f19234630f9986bfb94bce2
@@ -12,9 +14,12 @@ DIST gentoo-psi-0.10-r2.tar.bz2 36370 RMD160 157b2f6fd4d1be8886572f10752a94b732c
DIST gentoo-psi-0.10.tar.bz2 211538 RMD160 35b7c7c45420ee18917f3b073e063ef3b046ef3a SHA1 96723e8172c581c5e21f5e245658382ded49e6f1 SHA256 1d499ecb693401a69600d48c62bc3cbd3f4eed7605729655959d13af981d72bd
DIST psi-0.10.tar.bz2 1430929 RMD160 b8be1490cd02f61cf86f09f2dc9f29716ea4c186 SHA1 f1687f8b93338f47cb1c8fa363e4b4f58628f167 SHA256 e10a88586f8d7f29535510cf3a3857dc8ff2792e64db4207d62a935890a60ca1
DIST psi-0.12.1.tar.bz2 2112404 RMD160 a5fc850796b0078bc1a03f4ff93a03611ee11e80 SHA1 6fdcea3a072b40333faecc37acdb925f9bf8c5c3 SHA256 a8022faadbbe15bc4691338b1d83400adf069f773b7fa3b462552515990b277e
+DIST psi-0.13-20090817_langpack_for_packagers.zip 2099303 RMD160 f2b683835233c803013a3b1af9e598974529dd4a SHA1 9ffe43d686660907bc3ccace74207118123bf12b SHA256 a991a816f3e989e6b7866e33fbf6963a7ac1eb51e21fbc1e50d53db3e8671f96
DIST psi-0.13.tar.bz2 2180062 RMD160 7557aea37d837eede5f28ec481eaa74dcc7958f5 SHA1 36d9d058531b29a47f94418b6e8a8b75e5446adf SHA256 4e7771cd79b251656f3435d8d4f261ff367f8c69492576fd63ced03dcb87e070
DIST psi-extra-iconsets-r807.tar.bz2 2846907 RMD160 fa8516ce37bf2936cdabe5f13b985fe368a0d906 SHA1 50f50ab951cc05a68da5a2b2547587d28ecf18ec SHA256 b10f398ffac34bc97476beedf7989fa77c45d259aacd9f0b761601d13b777b30
+DIST psi-extra-iconsets-r927.tar.bz2 3056366 RMD160 33f072e9db0c5430021963f0ad8fdbf9c4c8b0a4 SHA1 965efe6733bd61731238fcf24bbf4809ebef843d SHA256 292d64032c88b78169c455535c1496a306e8132265da1dfd65b9f7eaffbf4653
DIST psi-extra-patches-r807.tar.bz2 98515 RMD160 636034b6f184d56cc441d8a17ee7f64f56256411 SHA1 41eb359d33dc3e84a953982564e82a442c8a8afd SHA256 ead3d5417ce2409fca2c265b57a94839a6943a57cadb409b53bbfc1a4a1fe802
+DIST psi-extra-patches-r927.tar.bz2 112414 RMD160 8ccf9325d1ea8ca89baebf3db6ac8a0697d49d2d SHA1 81ba49cbd687c86f096f3790446cb0a054ef4c36 SHA256 d1609118cec71009b24e96f9861cb55cf1de3218d285d6dc4a51eb60cc5ece3a
DIST psi-extras-insecure.tar.bz2 15914 RMD160 a61d51cbc9280677f62d3121eada4981573842fa SHA1 22c8da902f00ae401df756b0d4195dc70083a9ff SHA256 44ac11a3f1a3280a2dc613dc3719a4750f30aadd4516bee61942409d648c4740
DIST psi-langs-20090217.tar.bz2 641414 RMD160 03e95fc690aa0e1ea49b7ac277ef0ecea91285f8 SHA1 de5e149d6fc55a464af6e614121b8c228b6e1432 SHA256 59f17d6547e4c911e83199fcd3908fa1bf4db312ae25d2c14e27d4c536915f9c
DIST psi_ar-0.9.3.tar.bz2 31466 RMD160 c592e630fda60f097dc8df0079b0fb72380fd996 SHA1 8aedb3f8cfdda29ccf5a59c9b0f84462fcd3b649 SHA256 5108803f55a6c71b15b90d76ca20040970349ee89edc2613d96379d6c61f04a9
@@ -48,6 +53,7 @@ DIST psi_zh-0.10-a-1.tar.bz2 32898 RMD160 c0440dcb7763908354fc9c8f1d1b1873a00f7f
EBUILD psi-0.10-r3.ebuild 11114 RMD160 976ca5966451c160c5b9d1a3b807e448e3806cba SHA1 82482330f1eee7e663616a4372760bad6b3b07eb SHA256 95f5a8ec32f1f24468960fef8f617fb69b743978b19432ed61d208e3dd6c1cc8
EBUILD psi-0.10-r4.ebuild 11397 RMD160 c20c4f836a46adad23327029605818104441d98e SHA1 256af111995319422ffa88a61f600acce60ffb97 SHA256 0ecdf57a7ead4808dcddd572a88d8c103e127af35eb0a75973330629f41dc5e8
EBUILD psi-0.12.1.ebuild 2522 RMD160 45ce61c682c2c67b0494f2540d96c4e00d4387ca SHA1 bea59266a7c381fea331200aa1e1681ec2b64eea SHA256 87eba6ba85ae6065239a3d13a73c54661d417ded2c5d3957837db1907cd0e337
+EBUILD psi-0.13-r1.ebuild 3856 RMD160 ab80f7c2f0781de1cec51352a54a1751843c2a0d SHA1 69530c34c0ac6c607f21948dd87e7a698072f605 SHA256 72669a90de5ae7f6fb2f7e11a89f7e9ae26e08e7115afb0daa1c847278566583
EBUILD psi-0.13.ebuild 3630 RMD160 cc1a60f2962070547a2e511bc28ead8d6701326f SHA1 0118847016d220a4a0d13f400f70ee6d54032804 SHA256 0351a504993e0a925762259eeb530497ff0e56b441a4c496b709e4b55f3f5427
-MISC ChangeLog 24223 RMD160 2e08be1032728cc27faa9309b59d0646e1a97327 SHA1 0951eb42126750a3abaf3b47ca381f78b489b0c9 SHA256 764a3f0ea72af7d410b11637293da8ed3c9a385c267ba23232682e9a264d2aef
+MISC ChangeLog 24564 RMD160 fd0c7b0083cef86296d58f3e9a34ffb88578cd2c SHA1 5d885f7175cf612c680db065ee90909d06f7f936 SHA256 aea66f97f74f04d53f20054f9aa995fe5153a11d4f991528212d53b226f29c89
MISC metadata.xml 657 RMD160 023b0019db1f817210d34984e84707b61f6bbcc8 SHA1 211eafaca6d54acdddac70381bd630a67896d11b SHA256 758f7d2a69a9f3f3a49a7bec2c866f19fc416a45fd1fd0bebfe8a4fd1a2dfa2e
diff --git a/net-im/psi/files/psi-0.13-psi+muc-kickban-reasons.patch b/net-im/psi/files/psi-0.13-psi+muc-kickban-reasons.patch
new file mode 100644
index 000000000000..15d2da44ea2c
--- /dev/null
+++ b/net-im/psi/files/psi-0.13-psi+muc-kickban-reasons.patch
@@ -0,0 +1,381 @@
+commit 3614141a6e94ea1820dd731f2bb37f33371a4fcb
+Author: Justin Karneges <justin@affinix.com>
+Date: Thu Aug 6 20:45:40 2009 -0700
+
+ 020-psi-muc-kickban-reasons.diff from psi+, with adjustment
+
+diff --git a/options/default.xml b/options/default.xml
+index 988589e..74021f2 100644
+--- a/options/default.xml
++++ b/options/default.xml
+@@ -51,6 +51,7 @@
+ <jids type="QStringList" />
+ <maximum comment="The maximum number of recently joined rooms that should be remembered" type="int">10</maximum>
+ </recent-joins>
++ <reasons type="QStringList" />
+ </muc>
+ <pgp comment="PGP encryption options">
+ <enable comment="Enable PGP globally" type="bool">true</enable>
+diff --git a/src/gcuserview.cpp b/src/gcuserview.cpp
+index 810feb2..8962425 100644
+--- a/src/gcuserview.cpp
++++ b/src/gcuserview.cpp
+@@ -335,10 +335,34 @@ void GCUserView::qlv_contextMenuRequested(Q3ListViewItem *i, const QPoint &pos,
+ pm->insertItem(IconsetFactory::icon("psi/sendMessage").icon(), tr("Send &Message"), 0);
+ pm->insertItem(IconsetFactory::icon("psi/start-chat").icon(), tr("Open &Chat Window"), 1);
+ pm->insertSeparator();
+- pm->insertItem(tr("&Kick"),10);
+- pm->setItemEnabled(10, MUCManager::canKick(c->s.mucItem(),lvi->s.mucItem()));
+- pm->insertItem(tr("&Ban"),11);
+- pm->setItemEnabled(11, MUCManager::canBan(c->s.mucItem(),lvi->s.mucItem()));
++
++ // Kick and Ban submenus
++ QStringList reasons = PsiOptions::instance()->getOption("options.muc.reasons").toStringList();
++ int cntReasons=reasons.count();
++ if (cntReasons>99) cntReasons=99; // Only first 99 reasons
++
++ Q3PopupMenu *kickMenu = new Q3PopupMenu(pm);
++ kickMenu->insertItem(tr("No reason"),10);
++ kickMenu->insertItem(tr("Custom reason"),100);
++ kickMenu->insertSeparator();
++ bool canKick=MUCManager::canKick(c->s.mucItem(),lvi->s.mucItem());
++ for (int i=0; i<cntReasons; ++i)
++ kickMenu->insertItem(reasons[i], 101+i);
++ kickMenu->setEnabled(canKick);
++
++ Q3PopupMenu *banMenu = new Q3PopupMenu(pm);
++ banMenu->insertItem(tr("No reason"),11);
++ banMenu->insertItem(tr("Custom reason"),200);
++ banMenu->insertSeparator();
++ bool canBan=MUCManager::canBan(c->s.mucItem(),lvi->s.mucItem());
++ for (int i=0; i<cntReasons; ++i)
++ banMenu->insertItem(reasons[i], 201+i);
++ banMenu->setEnabled(canBan);
++
++ pm->insertItem(tr("&Kick"), kickMenu);
++ pm->setItemEnabled(10, canKick);
++ pm->insertItem(tr("&Ban"), banMenu);
++ pm->setItemEnabled(11, canBan);
+
+ Q3PopupMenu* rm = new Q3PopupMenu(pm);
+ rm->insertItem(tr("Visitor"),12);
+@@ -372,7 +396,7 @@ void GCUserView::qlv_contextMenuRequested(Q3ListViewItem *i, const QPoint &pos,
+ pm->insertItem(tr("Check &Status"), 2);
+ pm->insertItem(IconsetFactory::icon("psi/vCard").icon(), tr("User &Info"), 3);
+ int x = pm->exec(pos);
+- bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x);
++ bool enabled = pm->isItemEnabled(x) || rm->isItemEnabled(x) || kickMenu->isItemEnabled(x) || banMenu->isItemEnabled(x);
+ delete pm;
+
+ if(x == -1 || !enabled || lvi.isNull())
+diff --git a/src/groupchatdlg.cpp b/src/groupchatdlg.cpp
+index 1397af3..baed25b 100644
+--- a/src/groupchatdlg.cpp
++++ b/src/groupchatdlg.cpp
+@@ -76,6 +76,7 @@
+ #include "psicontactlist.h"
+ #include "accountlabel.h"
+ #include "gcuserview.h"
++#include "mucreasonseditor.h"
+ #include "mcmdmanager.h"
+
+ #include "mcmdsimplesite.h"
+@@ -1712,6 +1713,32 @@ void GCMainDlg::lv_action(const QString &nick, const Status &s, int x)
+ if (contact->s.mucItem().role() != MUCItem::Moderator)
+ d->mucManager->setRole(nick, MUCItem::Moderator);
+ }
++ else if(x >= 100 && x<300) {
++ // Kick || Ban with reason
++ QString reason;
++ QStringList reasons = PsiOptions::instance()->getOption("options.muc.reasons").toStringList();
++ if (x==100 || x==200) {
++ // Show custom reason dialog
++ MUCReasonsEditor *editor=new MUCReasonsEditor(this);
++ if (editor->exec())
++ reason=editor->reason();
++ delete editor;
++ } else {
++ int idx = (x<200) ? x-101 : x-201;
++ if (idx<reasons.count())
++ reason=reasons[idx];
++ }
++ if (!reason.isEmpty()) {
++ if (x<200)
++ d->mucManager->kick(nick, reason);
++ else {
++ GCUserViewItem *contact = (GCUserViewItem*) ui_.lv_users->findEntry(nick);
++ if (!contact) return;
++ d->mucManager->ban(contact->s.mucItem().jid(), reason);
++ }
++ }
++
++ }
+ /*else if(x == 15) {
+ GCUserViewItem *contact = (GCUserViewItem*) ui_.lv_users->findEntry(nick);
+ if (contact->s.mucItem().affiliation() != MUCItem::NoAffiliation)
+diff --git a/src/mucreasonseditor.cpp b/src/mucreasonseditor.cpp
+new file mode 100644
+index 0000000..54117ba
+--- /dev/null
++++ b/src/mucreasonseditor.cpp
+@@ -0,0 +1,44 @@
++#include "mucreasonseditor.h"
++#include "common.h"
++#include "psioptions.h"
++
++
++MUCReasonsEditor::MUCReasonsEditor(QWidget* parent)
++ : QDialog(parent)
++{
++ ui_.setupUi(this);
++ ui_.lstReasons->addItems(PsiOptions::instance()->getOption("options.muc.reasons").toStringList());
++}
++
++MUCReasonsEditor::~MUCReasonsEditor()
++{
++}
++
++void MUCReasonsEditor::accept()
++{
++ QStringList reasons;
++ int cnt=ui_.lstReasons->count();
++ for (int i=0; i<cnt; ++i)
++ reasons.append(ui_.lstReasons->item(i)->text());
++ PsiOptions::instance()->setOption("options.muc.reasons", reasons);
++ reason_=ui_.txtReason->text();
++ QDialog::accept();
++}
++
++void MUCReasonsEditor::on_btnAdd_clicked()
++{
++ reason_=ui_.txtReason->text().trimmed();
++ if (reason_.isEmpty())
++ return;
++ ui_.lstReasons->addItem(reason_);
++}
++
++void MUCReasonsEditor::on_btnRemove_clicked()
++{
++ int idx=ui_.lstReasons->currentRow();
++ if (idx>=0) {
++ QListWidgetItem *item =ui_.lstReasons->takeItem(idx);
++ if (item) delete item;
++ }
++}
++
+diff --git a/src/mucreasonseditor.h b/src/mucreasonseditor.h
+new file mode 100644
+index 0000000..765fb2e
+--- /dev/null
++++ b/src/mucreasonseditor.h
+@@ -0,0 +1,25 @@
++#ifndef MUCREASONSEDITOR_H
++#define MUCREASONSEDITOR_H
++
++#include <QDialog>
++
++#include "ui_mucreasonseditor.h"
++
++class MUCReasonsEditor: public QDialog
++{
++ Q_OBJECT
++public:
++ MUCReasonsEditor(QWidget* parent = 0);
++ ~MUCReasonsEditor();
++ QString reason() const { return reason_; }
++private:
++ Ui::MUCReasonsEditor ui_;
++ QString reason_;
++private slots:
++ void on_btnAdd_clicked();
++ void on_btnRemove_clicked();
++protected slots:
++ void accept();
++};
++
++#endif
+diff --git a/src/mucreasonseditor.ui b/src/mucreasonseditor.ui
+new file mode 100644
+index 0000000..b1d9b8a
+--- /dev/null
++++ b/src/mucreasonseditor.ui
+@@ -0,0 +1,151 @@
++<ui version="4.0" >
++ <class>MUCReasonsEditor</class>
++ <widget class="QDialog" name="MUCReasonsEditor" >
++ <property name="geometry" >
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>400</width>
++ <height>300</height>
++ </rect>
++ </property>
++ <property name="windowTitle" >
++ <string>Reason editor</string>
++ </property>
++ <layout class="QVBoxLayout" >
++ <property name="margin" >
++ <number>9</number>
++ </property>
++ <property name="spacing" >
++ <number>6</number>
++ </property>
++ <item>
++ <widget class="QGroupBox" name="groupBox" >
++ <property name="title" >
++ <string>Reasons</string>
++ </property>
++ <layout class="QVBoxLayout" >
++ <property name="margin" >
++ <number>9</number>
++ </property>
++ <property name="spacing" >
++ <number>6</number>
++ </property>
++ <item>
++ <widget class="QLineEdit" name="txtReason" >
++ <property name="text" >
++ <string/>
++ </property>
++ </widget>
++ </item>
++ <item>
++ <widget class="QListWidget" name="lstReasons" />
++ </item>
++ <item>
++ <layout class="QHBoxLayout" >
++ <property name="margin" >
++ <number>0</number>
++ </property>
++ <property name="spacing" >
++ <number>6</number>
++ </property>
++ <item>
++ <widget class="QPushButton" name="btnAdd" >
++ <property name="text" >
++ <string>Add</string>
++ </property>
++ </widget>
++ </item>
++ <item>
++ <widget class="QPushButton" name="btnRemove" >
++ <property name="text" >
++ <string>Remove</string>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ </layout>
++ </widget>
++ </item>
++ <item>
++ <layout class="QHBoxLayout" >
++ <property name="margin" >
++ <number>0</number>
++ </property>
++ <property name="spacing" >
++ <number>6</number>
++ </property>
++ <item>
++ <spacer>
++ <property name="orientation" >
++ <enum>Qt::Horizontal</enum>
++ </property>
++ <property name="sizeHint" >
++ <size>
++ <width>40</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </item>
++ <item>
++ <widget class="QPushButton" name="btnOk" >
++ <property name="text" >
++ <string>Ok</string>
++ </property>
++ <property name="autoDefault" >
++ <bool>false</bool>
++ </property>
++ <property name="default" >
++ <bool>true</bool>
++ </property>
++ </widget>
++ </item>
++ <item>
++ <widget class="QPushButton" name="btnCancel" >
++ <property name="text" >
++ <string>Cancel</string>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ </layout>
++ </widget>
++ <resources/>
++ <connections>
++ <connection>
++ <sender>btnOk</sender>
++ <signal>clicked()</signal>
++ <receiver>MUCReasonsEditor</receiver>
++ <slot>accept()</slot>
++ <hints>
++ <hint type="sourcelabel" >
++ <x>265</x>
++ <y>271</y>
++ </hint>
++ <hint type="destinationlabel" >
++ <x>-2</x>
++ <y>287</y>
++ </hint>
++ </hints>
++ </connection>
++ <connection>
++ <sender>btnCancel</sender>
++ <signal>clicked()</signal>
++ <receiver>MUCReasonsEditor</receiver>
++ <slot>reject()</slot>
++ <hints>
++ <hint type="sourcelabel" >
++ <x>341</x>
++ <y>283</y>
++ </hint>
++ <hint type="destinationlabel" >
++ <x>81</x>
++ <y>272</y>
++ </hint>
++ </hints>
++ </connection>
++ </connections>
++</ui>
+diff --git a/src/src.pri b/src/src.pri
+index 2487038..1562bab 100644
+--- a/src/src.pri
++++ b/src/src.pri
+@@ -190,6 +190,7 @@ HEADERS += \
+ $$PWD/mucaffiliationsmodel.h \
+ $$PWD/mucaffiliationsproxymodel.h \
+ $$PWD/mucaffiliationsview.h \
++ $$PWD/mucreasonseditor.h \
+ $$PWD/rosteritemexchangetask.h \
+ $$PWD/mood.h \
+ $$PWD/moodcatalog.h \
+@@ -308,6 +309,7 @@ SOURCES += \
+ $$PWD/mucaffiliationsmodel.cpp \
+ $$PWD/mucaffiliationsproxymodel.cpp \
+ $$PWD/mucaffiliationsview.cpp \
++ $$PWD/mucreasonseditor.cpp \
+ $$PWD/rosteritemexchangetask.cpp \
+ $$PWD/mood.cpp \
+ $$PWD/moodcatalog.cpp \
+@@ -411,6 +413,7 @@ INTERFACES += \
+ $$PWD/optioneditor.ui \
+ $$PWD/passphrase.ui \
+ $$PWD/mucconfig.ui \
++ $$PWD/mucreasonseditor.ui \
+ $$PWD/xmlconsole.ui \
+ $$PWD/disco.ui \
+ $$PWD/tip.ui \
diff --git a/net-im/psi/files/psi-0.13-psi+options-coloring-in-chat-dialog.patch b/net-im/psi/files/psi-0.13-psi+options-coloring-in-chat-dialog.patch
new file mode 100644
index 000000000000..30a50944f1d6
--- /dev/null
+++ b/net-im/psi/files/psi-0.13-psi+options-coloring-in-chat-dialog.patch
@@ -0,0 +1,272 @@
+commit 6e89fff225084fa685fe49438f4b7b4505dbf075
+Author: Martin H <textshell-I1QKlO@neutronstar.dyndns.org>
+Date: Sun Aug 16 18:16:00 2009 +0200
+
+ Add new options for coloring in chat dialog and system messages in muc.
+ Based on patches from psi+ and Prados.
+ Spooled messages and system messages share the same color, because the color difference was almost unnoticable and it's not worth adding yet another option.
+ fixes #454
+
+diff --git a/options/default.xml b/options/default.xml
+index 74021f2..7b696bd 100644
+--- a/options/default.xml
++++ b/options/default.xml
+@@ -244,6 +244,11 @@
+ <item>Red</item>
+ </nick-colors>
+ </muc>
++ <messages comment="Message coloring.">
++ <received type="QColor" comment="Color used to indicate received messages.">#0000ff</received>
++ <sent type="QColor" comment="Color used to indicate sent messages.">#ff0000</sent>
++ <informational type="QColor" comment="Color used to indicate informational (status change, spooled) messages.">#008000</informational>
++ </messages>
+ <passive-popup>
+ <border type="QColor">#5297f9</border>
+ </passive-popup>
+diff --git a/src/groupchatdlg.cpp b/src/groupchatdlg.cpp
+index baed25b..8e0114d 100644
+--- a/src/groupchatdlg.cpp
++++ b/src/groupchatdlg.cpp
+@@ -1458,7 +1458,7 @@ void GCMainDlg::updateLastMsgTime(QDateTime t)
+ bool doInsert = t.date() != lastMsgTime_.date();
+ lastMsgTime_ = t;
+ if (doInsert) {
+- QString color = "#00A000";
++ QString color = PsiOptions::instance()->getOption("options.ui.look.colors.messages.informational").toString();
+ ui_.log->appendText(QString("<font color=\"%1\">*** %2</font>").arg(color).arg(t.date().toString(Qt::ISODate)));
+ }
+ }
+@@ -1477,7 +1477,8 @@ void GCMainDlg::appendSysMsg(const QString &str, bool alert, const QDateTime &ts
+
+ updateLastMsgTime(time);
+ QString timestr = ui_.log->formatTimeStamp(time);
+- ui_.log->appendText(QString("<font color=\"#00A000\">[%1]").arg(timestr) + QString(" *** %1</font>").arg(Qt::escape(str)));
++ QString color = PsiOptions::instance()->getOption("options.ui.look.colors.messages.informational").toString();
++ ui_.log->appendText(QString("<font color=\"%1\">[%2]").arg(color, timestr) + QString(" *** %1</font>").arg(Qt::escape(str)));
+
+ if(alert)
+ doAlert();
+@@ -1535,8 +1536,9 @@ void GCMainDlg::appendMessage(const Message &m, bool alert)
+ alerttagso = "<b>";
+ alerttagsc = "</b>";
+ }
+- if(m.spooled())
+- nickcolor = "#008000"; //color = "#008000";
++ if(m.spooled()) {
++ nickcolor = PsiOptions::instance()->getOption("options.ui.look.colors.messages.informational").toString();
++ }
+
+ QString timestr = ui_.log->formatTimeStamp(m.timeStamp());
+
+diff --git a/src/historydlg.cpp b/src/historydlg.cpp
+index 63b3b4f..eb1fb3f 100644
+--- a/src/historydlg.cpp
++++ b/src/historydlg.cpp
+@@ -755,9 +755,13 @@ void HistoryViewItem::paintCell(QPainter *p, const QColorGroup & cg, int column,
+ {
+ QColorGroup mycg = cg;
+ if(e->originLocal())
+- mycg.setColor(QColorGroup::Text, Qt::red);
++{
++ mycg.setColor(QColorGroup::Text, PsiOptions::instance()->getOption("options.ui.look.colors.messages.sent").toString() );
++}
+ else
+- mycg.setColor(QColorGroup::Text, Qt::blue);
++{
++ mycg.setColor(QColorGroup::Text,PsiOptions::instance()->getOption("options.ui.look.colors.messages.received").toString() );
++}
+
+ if(column == 3) {
+ QBrush br;
+diff --git a/src/options/opt_appearance.cpp b/src/options/opt_appearance.cpp
+index b407824..b7e5c9d 100644
+--- a/src/options/opt_appearance.cpp
++++ b/src/options/opt_appearance.cpp
+@@ -215,6 +215,9 @@ QWidget *OptionsTabAppearanceGeneral::widget()
+ bg_color->insert(d->pb_cAnimFront);
+ bg_color->insert(d->pb_cAnimBack);
+ bg_color->insert(d->pb_cStatus);
++ bg_color->insert(d->pb_cMessageSent);
++ bg_color->insert(d->pb_cMessageReceived);
++ bg_color->insert(d->pb_cSysMsg);
+ connect(bg_color, SIGNAL(buttonClicked(QAbstractButton*)), SLOT(chooseColor(QAbstractButton*)));
+
+ QString s = tr("Specifies the text color for a contact name in the main window when that user is \"%1\".");
+@@ -238,6 +241,12 @@ QWidget *OptionsTabAppearanceGeneral::widget()
+ tr("Specifies the foreground animation color for nicks."));
+ QWhatsThis::add(d->pb_cAnimBack,
+ tr("Specifies the background animation color for nicks."));
++ QWhatsThis::add(d->pb_cMessageSent,
++ tr("Specifies the color for sent messages in chat and history windows."));
++ QWhatsThis::add(d->pb_cMessageReceived,
++ tr("Specifies the color for received messages in chat and history windows."));
++ QWhatsThis::add(d->pb_cSysMsg,
++ tr("Specifies the color for informational Messages in chat windows, like status changes and offline messages."));
+
+ // Avatars
+ //QWhatsThis::add(d->ck_avatarsChatdlg,
+@@ -282,6 +291,9 @@ void OptionsTabAppearanceGeneral::applyOptions()
+ PsiOptions::instance()->setOption("options.ui.look.contactlist.status-change-animation.color1", getColor(d->pb_cAnimFront));
+ PsiOptions::instance()->setOption("options.ui.look.contactlist.status-change-animation.color2", getColor(d->pb_cAnimBack));
+ PsiOptions::instance()->setOption("options.ui.look.colors.contactlist.status-messages", getColor(d->pb_cStatus));
++ PsiOptions::instance()->setOption("options.ui.look.colors.messages.received", getColor(d->pb_cMessageReceived));
++ PsiOptions::instance()->setOption("options.ui.look.colors.messages.sent", getColor(d->pb_cMessageSent));
++ PsiOptions::instance()->setOption("options.ui.look.colors.messages.informational", getColor(d->pb_cSysMsg));
+ }
+
+ static void restoreColor(QToolButton *button, QColor c)
+@@ -315,6 +327,9 @@ void OptionsTabAppearanceGeneral::restoreOptions()
+ restoreColor(d->pb_cAnimFront, PsiOptions::instance()->getOption("options.ui.look.contactlist.status-change-animation.color1").value<QColor>());
+ restoreColor(d->pb_cAnimBack, PsiOptions::instance()->getOption("options.ui.look.contactlist.status-change-animation.color2").value<QColor>());
+ restoreColor(d->pb_cStatus, PsiOptions::instance()->getOption("options.ui.look.colors.contactlist.status-messages").value<QColor>());
++ restoreColor(d->pb_cMessageReceived, PsiOptions::instance()->getOption("options.ui.look.colors.messages.received").value<QColor>());
++ restoreColor(d->pb_cMessageSent, PsiOptions::instance()->getOption("options.ui.look.colors.messages.sent").value<QColor>());
++ restoreColor(d->pb_cSysMsg, PsiOptions::instance()->getOption("options.ui.look.colors.messages.informational").value<QColor>());
+ }
+
+ void OptionsTabAppearanceGeneral::setData(PsiCon *, QWidget *parentDialog)
+diff --git a/src/options/opt_appearance.ui b/src/options/opt_appearance.ui
+index ed86f7e..306dc58 100644
+--- a/src/options/opt_appearance.ui
++++ b/src/options/opt_appearance.ui
+@@ -165,6 +165,69 @@
+ <string/>
+ </property>
+ </widget>
++ </item>
++ <item row="6" column="1" >
++ <widget class="QToolButton" name="pb_cMessageSent" >
++ <property name="sizePolicy" >
++ <sizepolicy>
++ <hsizetype>0</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="maximumSize" >
++ <size>
++ <width>20</width>
++ <height>20</height>
++ </size>
++ </property>
++ <property name="text" >
++ <string/>
++ </property>
++ </widget>
++ </item>
++ <item row="7" column="1">
++ <widget class="QToolButton" name="pb_cMessageReceived" >
++ <property name="sizePolicy" >
++ <sizepolicy>
++ <hsizetype>0</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="maximumSize" >
++ <size>
++ <width>20</width>
++ <height>20</height>
++ </size>
++ </property>
++ <property name="text" >
++ <string/>
++ </property>
++ </widget>
++ </item>
++ <item row="8" column="1">
++ <widget class="QToolButton" name="pb_cSysMsg">
++ <property name="sizePolicy" >
++ <sizepolicy>
++ <hsizetype>0</hsizetype>
++ <vsizetype>0</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="maximumSize" >
++ <size>
++ <width>20</width>
++ <height>20</height>
++ </size>
++ </property>
++ <property name="text" >
++ <string/>
++ </property>
++ </widget>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QToolButton" name="pb_cProfileBack" >
+@@ -284,6 +347,27 @@
+ <string>Nick animation background:</string>
+ </property>
+ </widget>
++ </item>
++ <item row="6" column="0">
++ <widget class="QLabel" name="tl_cMessageSent" >
++ <property name="text" >
++ <string>Sent message foreground:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="7" column="0">
++ <widget class="QLabel" name="tl_cMessageReceived" >
++ <property name="text" >
++ <string>Received message foreground:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="8" column="0">
++ <widget class="QLabel" name="tl_cSysMsg">
++ <property name="text">
++ <string>Informational messages in chats:</string>
++ </property>
++ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="tl_cProfileFore" >
+@@ -498,6 +582,9 @@
+ <tabstop>pb_cGroupBack</tabstop>
+ <tabstop>pb_cAnimFront</tabstop>
+ <tabstop>pb_cAnimBack</tabstop>
++ <tabstop>pb_cMessageSent</tabstop>
++ <tabstop>pb_cMessageReceived</tabstop>
++ <tabstop>pb_cSysMsg</tabstop>
+ <tabstop>pb_cOnline</tabstop>
+ <tabstop>pb_cAway</tabstop>
+ <tabstop>pb_cDND</tabstop>
+diff --git a/src/psichatdlg.cpp b/src/psichatdlg.cpp
+index cb5dc2e..8d35935 100644
+--- a/src/psichatdlg.cpp
++++ b/src/psichatdlg.cpp
+@@ -532,20 +532,22 @@ void PsiChatDlg::appendSysMsg(const QString &str)
+ QDateTime t = QDateTime::currentDateTime();
+ updateLastMsgTime(t);
+ QString timestr = chatView()->formatTimeStamp(t);
+- QString color = "#00A000";
++ QString color = PsiOptions::instance()->getOption("options.ui.look.colors.messages.informational").toString();
+
+ chatView()->appendText(QString("<font color=\"%1\">[%2]").arg(color, timestr) + QString(" *** %1</font>").arg(str));
+ }
+
+ QString PsiChatDlg::colorString(bool local, ChatDlg::SpooledType spooled) const
+ {
+- if (spooled == ChatDlg::Spooled_OfflineStorage)
+- return "#008000";
++ if (spooled == ChatDlg::Spooled_OfflineStorage) {
++ return PsiOptions::instance()->getOption("options.ui.look.colors.messages.informational").toString();
++ }
+
+- if (local)
+- return "#FF0000";
++ if (local) {
++ return PsiOptions::instance()->getOption("options.ui.look.colors.messages.sent").toString();
++ }
+
+- return "#0000FF";
++ return PsiOptions::instance()->getOption("options.ui.look.colors.messages.received").toString();
+ }
+
+ ChatView* PsiChatDlg::chatView() const
diff --git a/net-im/psi/psi-0.13-r1.ebuild b/net-im/psi/psi-0.13-r1.ebuild
new file mode 100644
index 000000000000..b520d66fd7a7
--- /dev/null
+++ b/net-im/psi/psi-0.13-r1.ebuild
@@ -0,0 +1,130 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-im/psi/psi-0.13-r1.ebuild,v 1.1 2009/08/17 11:16:37 pva Exp $
+
+EAPI="2"
+
+inherit eutils qt4 multilib
+
+MY_P="${P/_rc/-rc}"
+
+DESCRIPTION="Qt4 Jabber client, with Licq-like interface"
+HOMEPAGE="http://psi-im.org/"
+# Langpack:
+# http://lists.affinix.com/pipermail/psi-devel-affinix.com/2009-August/008798.html
+SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.bz2
+ mirror://gentoo/${P}-20090817_langpack_for_packagers.zip
+ extras? ( mirror://gentoo/${PN}-extra-patches-r927.tar.bz2
+ mirror://gentoo/${PN}-extra-iconsets-r927.tar.bz2 )"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~hppa ~x86 ~x86-fbsd"
+IUSE="crypt dbus debug doc extras jingle spell ssl xscreensaver"
+RESTRICT="test"
+
+LANGS="de es fr it mk pl pt_BR ru sv uk ur_PK zh_TW"
+for LNG in ${LANGS}; do
+ IUSE="${IUSE} linguas_${LNG}"
+ #SRC_URI="${SRC_URI} http://psi-im.org/download/lang/psi_${LNG/ur_PK/ur_pk}.qm"
+done
+
+RDEPEND=">=x11-libs/qt-gui-4.4:4[qt3support,dbus?]
+ >=app-crypt/qca-2.0.2:2
+ spell? ( app-text/aspell )
+ xscreensaver? ( x11-libs/libXScrnSaver )"
+
+DEPEND="${RDEPEND}
+ doc? ( app-doc/doxygen )"
+
+PDEPEND="crypt? ( app-crypt/qca-gnupg:2 )
+ jingle? ( net-im/psimedia )
+ ssl? ( app-crypt/qca-ossl:2 )"
+
+S=${WORKDIR}/${MY_P}
+
+src_prepare() {
+ epatch "${FILESDIR}/psi-0.13-psi+muc-kickban-reasons.patch"
+ epatch "${FILESDIR}/psi-0.13-psi+options-coloring-in-chat-dialog.patch"
+
+ if use extras; then
+ # some patches from psi+ project http://code.google.com/p/psi-dev
+ ewarn "You're about to build heavily patched version of Psi called Psi+."
+ ewarn "It has really nice features but still is under heavy development."
+ ewarn "Take a look at homepage for more info: http://code.google.com/p/psi-dev"
+ ewarn "If you wish to disable some patches just put"
+ ewarn "MY_EPATCH_EXCLUDE=\"list of patches\""
+ ewarn "into /etc/portage/env/${CATEGORY}/${PN} file."
+ ewarn
+ ewarn "Note: some patches depend on other. So if you disabled some patch"
+ ewarn "and other started to fail to apply, you'll have to disable patches"
+ ewarn "that fail too."
+ ebeep
+
+ EPATCH_EXCLUDE="${MY_EPATCH_EXCLUDE} 270-psi-application-info.diff" \
+ EPATCH_SUFFIX="diff" EPATCH_FORCE="yes" epatch
+ sed -e 's/\(^#define PROG_CAPS_NODE \).*/\1"http:\/\/psi-dev.googlecode.com\/caps";/' \
+ -e 's:\(^#define PROG_NAME "Psi\):\1+:' \
+ -i src/applicationinfo.cpp || die
+ fi
+
+ rm -rf third-party/qca # We use system libraries.
+}
+
+src_configure() {
+ # unable to use econf because of non-standard configure script
+ # disable growl as it is a MacOS X extension only
+ local confcmd="./configure
+ --prefix=/usr
+ --qtdir=/usr
+ --disable-bundled-qca
+ --disable-growl
+ $(use dbus || echo '--disable-qdbus')
+ $(use debug && echo '--enable-debug')
+ $(use spell || echo '--disable-aspell')
+ $(use xscreensaver || echo '--disable-xss')"
+
+ echo ${confcmd}
+ ${confcmd} || die "configure failed"
+}
+
+src_compile() {
+ eqmake4
+
+ emake || die "emake failed"
+
+ if use doc; then
+ cd doc
+ mkdir -p api # 259632
+ make api_public || die "make api_public failed"
+ fi
+}
+
+src_install() {
+ emake INSTALL_ROOT="${D}" install || die "emake install failed"
+ rm "${D}"/usr/share/psi/{COPYING,README}
+
+ # this way the docs will be installed in the standard gentoo dir
+ newdoc iconsets/roster/README README.roster || die
+ newdoc iconsets/system/README README.system || die
+ newdoc certs/README README.certs || die
+ dodoc README || die
+
+ if use doc; then
+ cd doc
+ dohtml -r api || die "dohtml failed"
+ fi
+
+ # install translations
+ cd "${WORKDIR}"
+ insinto /usr/share/${PN}/
+ for LNG in ${LANGS}; do
+ if use linguas_${LNG}; then
+ doins ${LNG}/${PN}_${LNG}.qm || die
+ fi
+ done
+
+ if use extras; then
+ cp -a "${WORKDIR}"/iconsets/* "${D}"/usr/share/${PN}/iconsets/ || die
+ fi
+}