summaryrefslogtreecommitdiff
path: root/protocols/JabberG
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/JabberG')
-rw-r--r--protocols/JabberG/proto_jabber/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--protocols/JabberG/proto_jabber/res/Proto_Jabber.rc1
-rw-r--r--protocols/JabberG/proto_jabber/src/resource.h1
-rw-r--r--protocols/JabberG/src/jabber_chat.cpp5
-rw-r--r--protocols/JabberG/src/jabber_groupchat.cpp1
-rw-r--r--protocols/JabberG/src/jabber_icolib.cpp3
-rw-r--r--protocols/JabberG/src/jabber_list.cpp12
-rw-r--r--protocols/JabberG/src/jabber_menu.cpp1
-rwxr-xr-xprotocols/JabberG/src/jabber_misc.cpp1
-rwxr-xr-xprotocols/JabberG/src/jabber_proto.cpp9
-rw-r--r--protocols/JabberG/src/jabber_rc.cpp5
-rw-r--r--protocols/JabberG/src/jabber_svc.cpp3
-rwxr-xr-xprotocols/JabberG/src/jabber_thread.cpp1
-rwxr-xr-xprotocols/JabberG/src/jabber_util.cpp7
-rwxr-xr-xprotocols/JabberG/src/stdafx.h1
15 files changed, 43 insertions, 8 deletions
diff --git a/protocols/JabberG/proto_jabber/res/FFC.ico b/protocols/JabberG/proto_jabber/res/FFC.ico
new file mode 100644
index 0000000000..dbc899c02a
--- /dev/null
+++ b/protocols/JabberG/proto_jabber/res/FFC.ico
Binary files differ
diff --git a/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc b/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc
index f6a19debab..3a9e85cae0 100644
--- a/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc
+++ b/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc
@@ -57,6 +57,7 @@ IDI_ICON3 ICON "Away.ico"
IDI_ICON4 ICON "Invisible.ico"
IDI_ICON5 ICON "NA.ico"
IDI_ICON6 ICON "DND.ico"
+IDI_ICON7 ICON "FFC.ico"
#endif // Russian (Russia) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/protocols/JabberG/proto_jabber/src/resource.h b/protocols/JabberG/proto_jabber/src/resource.h
index f59e3ec356..e1031b138e 100644
--- a/protocols/JabberG/proto_jabber/src/resource.h
+++ b/protocols/JabberG/proto_jabber/src/resource.h
@@ -8,6 +8,7 @@
#define IDI_ICON4 130
#define IDI_ICON5 131
#define IDI_ICON6 158
+#define IDI_ICON7 129
// Next default values for new objects
//
diff --git a/protocols/JabberG/src/jabber_chat.cpp b/protocols/JabberG/src/jabber_chat.cpp
index 99556d85b7..c0e3fa6923 100644
--- a/protocols/JabberG/src/jabber_chat.cpp
+++ b/protocols/JabberG/src/jabber_chat.cpp
@@ -49,7 +49,8 @@ enum {
IDM_PRESENCE_ONLINE = ID_STATUS_ONLINE,
IDM_PRESENCE_AWAY = ID_STATUS_AWAY,
IDM_PRESENCE_NA = ID_STATUS_NA,
- IDM_PRESENCE_DND = ID_STATUS_DND
+ IDM_PRESENCE_DND = ID_STATUS_DND,
+ IDM_PRESENCE_FREE4CHAT = ID_STATUS_FREECHAT
};
struct TRoleOrAffiliationInfo
@@ -425,6 +426,7 @@ static gc_item sttLogListItems[] =
{ LPGENW("Away"), IDM_PRESENCE_AWAY, MENU_POPUPITEM },
{ LPGENW("Not available"), IDM_PRESENCE_NA, MENU_POPUPITEM },
{ LPGENW("Do not disturb"), IDM_PRESENCE_DND, MENU_POPUPITEM },
+ { LPGENW("Free for chat"), IDM_PRESENCE_FREE4CHAT, MENU_POPUPITEM },
{ LPGENW("&Leave chat session"), IDM_LEAVE, MENU_ITEM }
};
@@ -1294,6 +1296,7 @@ static void sttLogListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* g
case IDM_PRESENCE_AWAY:
case IDM_PRESENCE_NA:
case IDM_PRESENCE_DND:
+ case IDM_PRESENCE_FREE4CHAT:
if (MCONTACT h = ppro->HContactFromJID(item->jid))
ppro->OnMenuHandleDirectPresence((WPARAM)h, 0, gch->dwData);
break;
diff --git a/protocols/JabberG/src/jabber_groupchat.cpp b/protocols/JabberG/src/jabber_groupchat.cpp
index 67b3d17568..7e18ceae1b 100644
--- a/protocols/JabberG/src/jabber_groupchat.cpp
+++ b/protocols/JabberG/src/jabber_groupchat.cpp
@@ -844,6 +844,7 @@ void CJabberProto::GroupchatProcessPresence(const TiXmlElement *node)
if (!mir_strcmp(pszStatus, "away")) status = ID_STATUS_AWAY;
else if (!mir_strcmp(pszStatus, "xa")) status = ID_STATUS_NA;
else if (!mir_strcmp(pszStatus, "dnd")) status = ID_STATUS_DND;
+ else if (!mir_strcmp(pszStatus, "chat")) status = ID_STATUS_FREECHAT;
}
// process custom nick change
diff --git a/protocols/JabberG/src/jabber_icolib.cpp b/protocols/JabberG/src/jabber_icolib.cpp
index 6a81703261..feedbec77a 100644
--- a/protocols/JabberG/src/jabber_icolib.cpp
+++ b/protocols/JabberG/src/jabber_icolib.cpp
@@ -29,6 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define IDI_ONLINE 104
#define IDI_OFFLINE 105
#define IDI_AWAY 128
+#define IDI_FREE4CHAT 129
#define IDI_INVISIBLE 130
#define IDI_NA 131
#define IDI_DND 158
@@ -72,7 +73,7 @@ static CTransportProtoTableItem TransportProtoTable[] =
{ "meinvz*", "MeinVZ" },
};
-static int skinIconStatusToResourceId[] = { IDI_OFFLINE, IDI_ONLINE, IDI_AWAY, IDI_DND, IDI_NA, IDI_NA, IDI_OCCUPIED, IDI_INVISIBLE };
+static int skinIconStatusToResourceId[] = { IDI_OFFLINE, IDI_ONLINE, IDI_AWAY, IDI_DND, IDI_NA, IDI_NA, IDI_OCCUPIED, IDI_FREE4CHAT, IDI_INVISIBLE };
///////////////////////////////////////////////////////////////////////////////
// CIconPool class
diff --git a/protocols/JabberG/src/jabber_list.cpp b/protocols/JabberG/src/jabber_list.cpp
index 8582963ebe..08e7eb0cff 100644
--- a/protocols/JabberG/src/jabber_list.cpp
+++ b/protocols/JabberG/src/jabber_list.cpp
@@ -394,19 +394,23 @@ char* CJabberProto::ListGetBestClientResourceNamePtr(const char *jid)
for (auto &it : LI->arResources) {
bool foundBetter = false;
switch (it->m_iStatus) {
- case ID_STATUS_ONLINE:
+ case ID_STATUS_FREECHAT:
foundBetter = true;
break;
+ case ID_STATUS_ONLINE:
+ if (status != ID_STATUS_FREECHAT)
+ foundBetter = true;
+ break;
case ID_STATUS_DND:
- if (status != ID_STATUS_ONLINE)
+ if (status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE)
foundBetter = true;
break;
case ID_STATUS_AWAY:
- if (status != ID_STATUS_ONLINE && status != ID_STATUS_DND)
+ if (status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE && status != ID_STATUS_DND)
foundBetter = true;
break;
case ID_STATUS_NA:
- if (status != ID_STATUS_ONLINE && status != ID_STATUS_DND && status != ID_STATUS_AWAY)
+ if (status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE && status != ID_STATUS_DND && status != ID_STATUS_AWAY)
foundBetter = true;
break;
}
diff --git a/protocols/JabberG/src/jabber_menu.cpp b/protocols/JabberG/src/jabber_menu.cpp
index 0f7fcf3409..bdd1684ca2 100644
--- a/protocols/JabberG/src/jabber_menu.cpp
+++ b/protocols/JabberG/src/jabber_menu.cpp
@@ -61,6 +61,7 @@ static PresenceModeArray[] =
{ SKINICON_STATUS_AWAY, ID_STATUS_AWAY },
{ SKINICON_STATUS_NA, ID_STATUS_NA },
{ SKINICON_STATUS_DND, ID_STATUS_DND },
+ { SKINICON_STATUS_FREE4CHAT, ID_STATUS_FREECHAT },
};
static HGENMENU g_hMenuDirectPresence[_countof(PresenceModeArray) + 1];
diff --git a/protocols/JabberG/src/jabber_misc.cpp b/protocols/JabberG/src/jabber_misc.cpp
index 9395d2b6a5..b6ef4735d9 100755
--- a/protocols/JabberG/src/jabber_misc.cpp
+++ b/protocols/JabberG/src/jabber_misc.cpp
@@ -215,6 +215,7 @@ void CJabberProto::SetServerStatus(int iNewStatus)
switch (iNewStatus) {
case ID_STATUS_ONLINE:
case ID_STATUS_NA:
+ case ID_STATUS_FREECHAT:
case ID_STATUS_INVISIBLE:
m_iStatus = iNewStatus;
break;
diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp
index 296f12e516..2803329e83 100755
--- a/protocols/JabberG/src/jabber_proto.cpp
+++ b/protocols/JabberG/src/jabber_proto.cpp
@@ -240,6 +240,7 @@ CJabberProto::~CJabberProto()
mir_free(m_modeMsgs.szAway);
mir_free(m_modeMsgs.szNa);
mir_free(m_modeMsgs.szDnd);
+ mir_free(m_modeMsgs.szFreechat);
mir_free(m_transportProtoTableStartIndex);
@@ -579,9 +580,9 @@ INT_PTR CJabberProto::GetCaps(int type, MCONTACT hContact)
case PFLAGNUM_1:
return PF1_IM | PF1_AUTHREQ | PF1_CHAT | PF1_SERVERCLIST | PF1_MODEMSG | PF1_BASICSEARCH | PF1_EXTSEARCH | PF1_FILE | PF1_CONTACT;
case PFLAGNUM_2:
- return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND;
+ return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND | PF2_FREECHAT;
case PFLAGNUM_3:
- return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND;
+ return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND | PF2_FREECHAT;
case PFLAGNUM_4:
return PF4_FORCEAUTH | PF4_NOCUSTOMAUTH | PF4_NOAUTHDENYREASON | PF4_SUPPORTTYPING | PF4_AVATARS;
case PFLAG_UNIQUEIDTEXT:
@@ -1198,6 +1199,10 @@ int CJabberProto::SetAwayMsg(int status, const wchar_t *msg)
szMsg = &m_modeMsgs.szDnd;
status = ID_STATUS_DND;
break;
+
+ case ID_STATUS_FREECHAT:
+ szMsg = &m_modeMsgs.szFreechat;
+ break;
default:
return 1;
diff --git a/protocols/JabberG/src/jabber_rc.cpp b/protocols/JabberG/src/jabber_rc.cpp
index e880fb9f60..3f19deda87 100644
--- a/protocols/JabberG/src/jabber_rc.cpp
+++ b/protocols/JabberG/src/jabber_rc.cpp
@@ -238,6 +238,7 @@ static char *StatusModeToDbSetting(int status, const char *suffix)
case ID_STATUS_NA: prefix = "Na"; break;
case ID_STATUS_DND: prefix = "Dnd"; break;
case ID_STATUS_OCCUPIED: prefix = "Occupied"; break;
+ case ID_STATUS_FREECHAT: prefix = "FreeChat"; break;
case ID_STATUS_ONLINE: prefix = "On"; break;
case ID_STATUS_OFFLINE: prefix = "Off"; break;
case ID_STATUS_INVISIBLE: prefix = "Inv"; break;
@@ -286,6 +287,9 @@ int CJabberProto::AdhocSetStatusHandler(const TiXmlElement*, CJabberIqInfo *pInf
case ID_STATUS_OCCUPIED:
fieldNode << XCHILD("value", "dnd");
break;
+ case ID_STATUS_FREECHAT:
+ fieldNode << XCHILD("value", "chat");
+ break;
case ID_STATUS_ONLINE:
default:
fieldNode << XCHILD("value", "online");
@@ -342,6 +346,7 @@ int CJabberProto::AdhocSetStatusHandler(const TiXmlElement*, CJabberIqInfo *pInf
if (!mir_strcmp(pszValue, "away")) status = ID_STATUS_AWAY;
else if (!mir_strcmp(pszValue, "xa")) status = ID_STATUS_NA;
else if (!mir_strcmp(pszValue, "dnd")) status = ID_STATUS_DND;
+ else if (!mir_strcmp(pszValue, "chat")) status = ID_STATUS_FREECHAT;
else if (!mir_strcmp(pszValue, "online")) status = ID_STATUS_ONLINE;
else if (!mir_strcmp(pszValue, "invisible")) status = ID_STATUS_INVISIBLE;
else if (!mir_strcmp(pszValue, "offline")) status = ID_STATUS_OFFLINE;
diff --git a/protocols/JabberG/src/jabber_svc.cpp b/protocols/JabberG/src/jabber_svc.cpp
index d1119b6bbf..ad263039bd 100644
--- a/protocols/JabberG/src/jabber_svc.cpp
+++ b/protocols/JabberG/src/jabber_svc.cpp
@@ -54,6 +54,9 @@ INT_PTR __cdecl CJabberProto::GetMyAwayMsg(WPARAM wParam, LPARAM lParam)
case ID_STATUS_OCCUPIED:
szStatus = m_modeMsgs.szDnd;
break;
+ case ID_STATUS_FREECHAT:
+ szStatus = m_modeMsgs.szFreechat;
+ break;
default: // Should not reach here
break;
}
diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp
index 64ea91d5b4..bd146d967a 100755
--- a/protocols/JabberG/src/jabber_thread.cpp
+++ b/protocols/JabberG/src/jabber_thread.cpp
@@ -1614,6 +1614,7 @@ void CJabberProto::OnProcessPresence(const TiXmlElement *node, ThreadData *info)
if (!mir_strcmp(show, "away")) status = ID_STATUS_AWAY;
else if (!mir_strcmp(show, "xa")) status = ID_STATUS_NA;
else if (!mir_strcmp(show, "dnd")) status = ID_STATUS_DND;
+ else if (!mir_strcmp(show, "chat")) status = ID_STATUS_FREECHAT;
}
int priority = XmlGetChildInt(node, "priority");
diff --git a/protocols/JabberG/src/jabber_util.cpp b/protocols/JabberG/src/jabber_util.cpp
index db99565983..87b69204e7 100755
--- a/protocols/JabberG/src/jabber_util.cpp
+++ b/protocols/JabberG/src/jabber_util.cpp
@@ -197,6 +197,7 @@ void JabberHttpUrlDecode(wchar_t *str)
int JabberCombineStatus(int status1, int status2)
{
// Combine according to the following priority (high to low)
+ // ID_STATUS_FREECHAT
// ID_STATUS_ONLINE
// ID_STATUS_DND
// ID_STATUS_AWAY
@@ -204,6 +205,8 @@ int JabberCombineStatus(int status1, int status2)
// ID_STATUS_INVISIBLE (valid only for TLEN_PLUGIN)
// ID_STATUS_OFFLINE
// other ID_STATUS in random order (actually return status1)
+ if (status1 == ID_STATUS_FREECHAT || status2 == ID_STATUS_FREECHAT)
+ return ID_STATUS_FREECHAT;
if (status1 == ID_STATUS_ONLINE || status2 == ID_STATUS_ONLINE)
return ID_STATUS_ONLINE;
if (status1 == ID_STATUS_DND || status2 == ID_STATUS_DND)
@@ -475,6 +478,10 @@ void CJabberProto::SendPresenceTo(int status, const char *to, const TiXmlElement
p << XCHILD("show", "dnd");
if (!msg) msg = m_modeMsgs.szDnd;
break;
+ case ID_STATUS_FREECHAT:
+ p << XCHILD("show", "chat");
+ if (!msg) msg = m_modeMsgs.szFreechat;
+ break;
default: // Should not reach here
break;
}
diff --git a/protocols/JabberG/src/stdafx.h b/protocols/JabberG/src/stdafx.h
index 71067a498c..d7710f32a6 100755
--- a/protocols/JabberG/src/stdafx.h
+++ b/protocols/JabberG/src/stdafx.h
@@ -401,6 +401,7 @@ struct JABBER_MODEMSGS
char *szAway;
char *szNa;
char *szDnd;
+ char *szFreechat;
};
typedef enum { FT_SI, FT_OOB, FT_BYTESTREAM, FT_IBB } JABBER_FT_TYPE;