diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-05-15 10:38:20 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-05-15 10:38:20 +0000 |
commit | 48540940b6c28bb4378abfeb500ec45a625b37b6 (patch) | |
tree | 2ef294c0763e802f91d868bdef4229b6868527de /protocols/IRCG/output.cpp | |
parent | 5c350913f011e119127baeb32a6aedeb4f0d33bc (diff) |
initial commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/IRCG/output.cpp')
-rw-r--r-- | protocols/IRCG/output.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/protocols/IRCG/output.cpp b/protocols/IRCG/output.cpp new file mode 100644 index 0000000000..72ded9c4be --- /dev/null +++ b/protocols/IRCG/output.cpp @@ -0,0 +1,158 @@ +/*
+IRC plugin for Miranda IM
+
+Copyright (C) 2003-05 Jurgen Persson
+Copyright (C) 2007-09 George Hazan
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "irc.h"
+
+static CMString FormatOutput (const CIrcMessage* pmsg)
+{
+ CMString sMessage;
+
+ if ( pmsg->m_bIncoming ) { // Is it an incoming message?
+ if ( pmsg->sCommand == _T("WALLOPS") && pmsg->parameters.getCount() > 0 ) {
+ TCHAR temp[200]; *temp = '\0';
+ mir_sntprintf(temp, SIZEOF(temp), TranslateT("WallOps from %s: "), pmsg->prefix.sNick.c_str());
+ sMessage = temp;
+ for ( int i=0; i < (int)pmsg->parameters.getCount(); i++ ) {
+ sMessage += pmsg->parameters[i];
+ if (i != pmsg->parameters.getCount()-1)
+ sMessage += _T(" ");
+ }
+ goto THE_END;
+ }
+
+ if ( pmsg->sCommand == _T("INVITE") && pmsg->parameters.getCount() > 1 ) {
+ TCHAR temp[256]; *temp = '\0';
+ mir_sntprintf(temp, SIZEOF(temp), TranslateT("%s invites you to %s"), pmsg->prefix.sNick.c_str(), pmsg->parameters[1].c_str());
+ sMessage = temp;
+ for( int i=2; i < (int)pmsg->parameters.getCount(); i++ ) {
+ sMessage += _T(": ") + pmsg->parameters[i];
+ if ( i != pmsg->parameters.getCount()-1 )
+ sMessage += _T(" ");
+ }
+ goto THE_END;
+ }
+
+ int index = StrToInt( pmsg->sCommand.c_str() );
+ if ( index == 301 && pmsg->parameters.getCount() > 0 ) {
+ TCHAR temp[500]; *temp = '\0';
+ mir_sntprintf(temp, SIZEOF(temp), TranslateT("%s is away"), pmsg->parameters[1].c_str());
+ sMessage = temp;
+ for ( int i=2; i < (int)pmsg->parameters.getCount(); i++ ) {
+ sMessage += _T(": ") + pmsg->parameters[i];
+ if ( i != pmsg->parameters.getCount()-1 )
+ sMessage += _T(" ");
+ }
+ goto THE_END;
+ }
+
+ if (( index == 443 || index == 441 ) && pmsg->parameters.getCount() > 3 )
+ return pmsg->parameters[1] + _T(" ") + pmsg->parameters[3] + _T(": ") + pmsg->parameters[2];
+
+ if ( index == 303 ) { // ISON command
+ sMessage = TranslateT("These are online: ");
+ for ( int i=1; i < (int)pmsg->parameters.getCount(); i++ ) {
+ sMessage += pmsg->parameters[i];
+ if (i != pmsg->parameters.getCount()-1)
+ sMessage += _T(", ");
+ }
+ goto THE_END;
+ }
+
+ if (( index > 400 || index < 500) && pmsg->parameters.getCount() > 2 && pmsg->sCommand[0] == '4' ) //all error messages
+ return pmsg->parameters[2] + _T(": ") + pmsg->parameters[1];
+ }
+ else if ( pmsg->sCommand == _T("NOTICE") && pmsg->parameters.getCount() > 1 ) {
+ TCHAR temp[500]; *temp = '\0';
+
+ int l = pmsg->parameters[1].GetLength();
+ if ( l > 3 && pmsg->parameters[1][0] == 1 && pmsg->parameters[1][ l-1 ] == 1 ) {
+ // CTCP reply
+ CMString tempstr = pmsg->parameters[1];
+ tempstr.Delete(0,1);
+ tempstr.Delete(tempstr.GetLength()-1,1);
+ CMString type = GetWord(tempstr.c_str(), 0);
+ if ( lstrcmpi(type.c_str(), _T("ping")) == 0)
+ mir_sntprintf(temp, SIZEOF(temp), TranslateT("CTCP %s reply sent to %s"), type.c_str(), pmsg->parameters[0].c_str());
+ else
+ mir_sntprintf(temp, SIZEOF(temp), TranslateT("CTCP %s reply sent to %s: %s"), type.c_str(), pmsg->parameters[0].c_str(), GetWordAddress(tempstr.c_str(), 1));
+ sMessage = temp;
+ }
+ else {
+ mir_sntprintf(temp, SIZEOF(temp), TranslateT("Notice to %s: "), pmsg->parameters[0].c_str());
+ sMessage = temp;
+ for ( int i=1; i < (int)pmsg->parameters.getCount(); i++ ) {
+ sMessage += pmsg->parameters[i];
+ if (i != pmsg->parameters.getCount()-1)
+ sMessage += _T(" ");
+ } }
+ goto THE_END;
+ }
+
+ // Default Message handler.
+
+ if ( pmsg->m_bIncoming ) {
+ if ( pmsg->parameters.getCount() < 2 && pmsg->parameters.getCount() > 0 )
+ return pmsg->sCommand + _T(" : ") + pmsg->parameters[0];
+
+ if ( pmsg->parameters.getCount() > 1 )
+ for ( int i=1; i < (int)pmsg->parameters.getCount(); i++ )
+ sMessage += pmsg->parameters[i] + _T(" ");
+ }
+ else {
+ if ( pmsg->prefix.sNick.GetLength() )
+ sMessage = pmsg->prefix.sNick + _T(" ");
+ sMessage += pmsg->sCommand + _T(" ");
+ for ( int i=0; i < (int)pmsg->parameters.getCount(); i++ )
+ sMessage += pmsg->parameters[i] + _T(" ");
+ }
+
+THE_END:
+ return sMessage;
+}
+
+BOOL CIrcProto::ShowMessage (const CIrcMessage* pmsg)
+{
+ CMString mess = FormatOutput(pmsg);
+
+ if ( !pmsg->m_bIncoming )
+ ReplaceString( mess, _T("%%"), _T("%"));
+
+ int iTemp = StrToInt( pmsg->sCommand.c_str() );
+
+ //To active window
+ if (( iTemp > 400 || iTemp < 500 ) && pmsg->sCommand[0] == '4' //all error messages
+ || pmsg->sCommand == _T("303") //ISON command
+ || pmsg->sCommand == _T("INVITE")
+ || ( (pmsg->sCommand == _T("NOTICE")) && ( (pmsg->parameters.getCount() > 2) ? (_tcsstr(pmsg->parameters[1].c_str(), _T("\001"))==NULL) : false) ) // CTCP answers should go to m_network Log window!
+ || pmsg->sCommand == _T("515")) //chanserv error
+ {
+ DoEvent(GC_EVENT_INFORMATION, NULL, pmsg->m_bIncoming?pmsg->prefix.sNick.c_str():m_info.sNick.c_str(), mess.c_str(), NULL, NULL, NULL, true, pmsg->m_bIncoming?false:true);
+ return TRUE;
+ }
+
+ if ( m_useServer ) {
+ DoEvent( GC_EVENT_INFORMATION, SERVERWINDOW,
+ ( pmsg->m_bIncoming ) ? pmsg->prefix.sNick.c_str() : m_info.sNick.c_str(),
+ mess.c_str(), NULL, NULL, NULL, true, pmsg->m_bIncoming ? false : true );
+ return true;
+ }
+ return false;
+}
|