summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordartraiden <wowemuh@gmail.com>2019-07-21 19:59:18 +0300
committerdartraiden <wowemuh@gmail.com>2019-07-21 19:59:18 +0300
commitb078dfb78c89aea87cd422eae52694738e473cf3 (patch)
treeca896e82a8a5ce81f80d041f4aee7fdeeb007162 /src
parentee7e29d02e94e969c1154515cd0c408c591a2414 (diff)
Restore "Free for chat" status support (fixes #1963)
Diffstat (limited to 'src')
-rw-r--r--src/core/stdautoaway/src/autoaway.cpp4
-rw-r--r--src/core/stdaway/src/sendmsg.cpp4
-rw-r--r--src/core/stdclist/src/clcopts.cpp4
-rw-r--r--src/core/stdclist/src/contact.cpp1
-rw-r--r--src/core/stdmsg/src/msgoptions.cpp3
-rw-r--r--src/core/stdmsg/src/msgs.cpp1
-rw-r--r--src/core/stduseronline/src/useronline.cpp2
-rw-r--r--src/icons/proto_metacontacts/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--src/icons/proto_metacontacts/res/Proto_MetaContacts.rc1
-rw-r--r--src/icons/proto_metacontacts/src/resource.h1
-rw-r--r--src/mir_app/res/resource.rc3
-rw-r--r--src/mir_app/src/clcidents.cpp1
-rw-r--r--src/mir_app/src/clcutils.cpp1
-rw-r--r--src/mir_app/src/clistmod.cpp3
-rw-r--r--src/mir_app/src/menu_clist.cpp1
-rw-r--r--src/mir_app/src/meta_services.cpp6
-rw-r--r--src/mir_app/src/meta_utils.cpp11
-rw-r--r--src/mir_app/src/skinicons.cpp3
18 files changed, 34 insertions, 16 deletions
diff --git a/src/core/stdautoaway/src/autoaway.cpp b/src/core/stdautoaway/src/autoaway.cpp
index 6511746e2a..40f9c2779d 100644
--- a/src/core/stdautoaway/src/autoaway.cpp
+++ b/src/core/stdautoaway/src/autoaway.cpp
@@ -75,7 +75,7 @@ static int AutoAwayEvent(WPARAM, LPARAM lParam)
status = ID_STATUS_AWAY;
if (lParam & IDF_ISIDLE) {
- if (pa->iRealStatus != ID_STATUS_ONLINE) {
+ if (pa->iRealStatus != ID_STATUS_ONLINE && pa->iRealStatus != ID_STATUS_FREECHAT) {
Netlib_Logf(0, "%s: '%s' isn't online (%d), skipping", MODULENAME, pa->szModuleName, pa->iRealStatus);
continue;
}
@@ -87,7 +87,7 @@ static int AutoAwayEvent(WPARAM, LPARAM lParam)
}
else {
int oldstatus = g_plugin.getWord(pa->szModuleName, 0);
- if (oldstatus != ID_STATUS_ONLINE) {
+ if (oldstatus != ID_STATUS_ONLINE && oldstatus != ID_STATUS_FREECHAT) {
Netlib_Logf(0, "%s: '%s' wasn't online (%d), skipping", MODULENAME, pa->szModuleName, oldstatus);
continue;
}
diff --git a/src/core/stdaway/src/sendmsg.cpp b/src/core/stdaway/src/sendmsg.cpp
index bd4b8440ee..bd6e9c6446 100644
--- a/src/core/stdaway/src/sendmsg.cpp
+++ b/src/core/stdaway/src/sendmsg.cpp
@@ -34,6 +34,7 @@ static const wchar_t* GetDefaultMessage(int status)
case ID_STATUS_NA: return TranslateT("Give it up, I'm not in!");
case ID_STATUS_OCCUPIED: return TranslateT("Not right now.");
case ID_STATUS_DND: return TranslateT("Give a guy some peace, would ya?");
+ case ID_STATUS_FREECHAT: return TranslateT("I'm a chatbot!");
case ID_STATUS_ONLINE: return TranslateT("Yep, I'm here.");
case ID_STATUS_OFFLINE: return TranslateT("Nope, not here.");
case ID_STATUS_INVISIBLE: return TranslateT("I'm hiding from the mafia.");
@@ -52,6 +53,7 @@ static const 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;
@@ -334,7 +336,7 @@ static int StatusModeChange(WPARAM wParam, LPARAM lParam)
static const int statusModes[] =
{
ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND,
- ID_STATUS_INVISIBLE, ID_STATUS_IDLE
+ ID_STATUS_FREECHAT, ID_STATUS_INVISIBLE, ID_STATUS_IDLE
};
struct AwayMsgInfo
diff --git a/src/core/stdclist/src/clcopts.cpp b/src/core/stdclist/src/clcopts.cpp
index c9070e91f3..ee4c3860f2 100644
--- a/src/core/stdclist/src/clcopts.cpp
+++ b/src/core/stdclist/src/clcopts.cpp
@@ -66,6 +66,7 @@ static const struct CheckBoxValues_t greyoutValues[] =
{ PF2_LONGAWAY, LPGENW("Not available") },
{ PF2_LIGHTDND, LPGENW("Occupied") },
{ PF2_HEAVYDND, LPGENW("Do not disturb")},
+ { PF2_FREECHAT, LPGENW("Free for chat") },
{ PF2_INVISIBLE, LPGENW("Invisible") }
};
@@ -77,7 +78,8 @@ static const struct CheckBoxValues_t offlineValues[] =
{ PF2_LONGAWAY, LPGENW("Not available") },
{ PF2_LIGHTDND, LPGENW("Occupied") },
{ PF2_HEAVYDND, LPGENW("Do not disturb")},
- { PF2_INVISIBLE, LPGENW("Invisible") },
+ { PF2_FREECHAT, LPGENW("Free for chat") },
+ { PF2_INVISIBLE, LPGENW("Invisible") }
};
static void FillCheckBoxTree(HWND hwndTree, const struct CheckBoxValues_t *values, int nValues, DWORD style)
diff --git a/src/core/stdclist/src/contact.cpp b/src/core/stdclist/src/contact.cpp
index 3a561482d0..9b40331e2f 100644
--- a/src/core/stdclist/src/contact.cpp
+++ b/src/core/stdclist/src/contact.cpp
@@ -38,6 +38,7 @@ static statusModeOrder[] =
{ ID_STATUS_DND, 110 },
{ ID_STATUS_NA, 450 },
{ ID_STATUS_OCCUPIED, 100 },
+ { ID_STATUS_FREECHAT, 0 },
{ ID_STATUS_INVISIBLE, 20 }
};
diff --git a/src/core/stdmsg/src/msgoptions.cpp b/src/core/stdmsg/src/msgoptions.cpp
index e4ce31045b..5d8565a7a2 100644
--- a/src/core/stdmsg/src/msgoptions.cpp
+++ b/src/core/stdmsg/src/msgoptions.cpp
@@ -139,7 +139,8 @@ statusValues[] =
{ PF2_LONGAWAY, LPGENW("Not available") },
{ PF2_LIGHTDND, LPGENW("Occupied") },
{ PF2_HEAVYDND, LPGENW("Do not disturb") },
- { PF2_INVISIBLE, LPGENW("Invisible") },
+ { PF2_FREECHAT, LPGENW("Free for chat") },
+ { PF2_INVISIBLE, LPGENW("Invisible") }
};
class COptionMainDlg : public CDlgBase
diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp
index e78c57968a..50c98f7a98 100644
--- a/src/core/stdmsg/src/msgs.cpp
+++ b/src/core/stdmsg/src/msgs.cpp
@@ -108,6 +108,7 @@ static int SRMMStatusToPf2(int status)
case ID_STATUS_DND: return PF2_HEAVYDND;
case ID_STATUS_NA: return PF2_LONGAWAY;
case ID_STATUS_OCCUPIED: return PF2_LIGHTDND;
+ case ID_STATUS_FREECHAT: return PF2_FREECHAT;
case ID_STATUS_INVISIBLE: return PF2_INVISIBLE;
case ID_STATUS_OFFLINE: return MODEF_OFFLINE;
}
diff --git a/src/core/stduseronline/src/useronline.cpp b/src/core/stduseronline/src/useronline.cpp
index e1de0b8f03..1c3a6d3640 100644
--- a/src/core/stduseronline/src/useronline.cpp
+++ b/src/core/stduseronline/src/useronline.cpp
@@ -46,7 +46,7 @@ static int UserOnlineSettingChanged(WPARAM hContact, LPARAM lParam)
}
}
- if (newStatus == ID_STATUS_ONLINE && oldStatus != ID_STATUS_ONLINE) {
+ if ((newStatus == ID_STATUS_ONLINE || newStatus == ID_STATUS_FREECHAT) && oldStatus != ID_STATUS_ONLINE && oldStatus != ID_STATUS_FREECHAT) {
DWORD ticked = g_plugin.getDword(cws->szModule, GetTickCount());
// only play the sound (or show event) if this event happens at least 10 secs after the proto went from offline
if (GetTickCount() - ticked > (1000 * 10)) {
diff --git a/src/icons/proto_metacontacts/res/FFC.ico b/src/icons/proto_metacontacts/res/FFC.ico
new file mode 100644
index 0000000000..94b2d4f21f
--- /dev/null
+++ b/src/icons/proto_metacontacts/res/FFC.ico
Binary files differ
diff --git a/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc b/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc
index e39cda7890..50e13a3a29 100644
--- a/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc
+++ b/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc
@@ -58,6 +58,7 @@ IDI_ICON4 ICON "Invisible.ico"
IDI_ICON5 ICON "NA.ico"
IDI_ICON6 ICON "DND.ico"
IDI_ICON7 ICON "Occupied.ico"
+IDI_ICON8 ICON "FFC.ico"
#endif // Russian (Russia) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/src/icons/proto_metacontacts/src/resource.h b/src/icons/proto_metacontacts/src/resource.h
index 5f167b1511..d90362ca11 100644
--- a/src/icons/proto_metacontacts/src/resource.h
+++ b/src/icons/proto_metacontacts/src/resource.h
@@ -5,6 +5,7 @@
#define IDI_ICON2 104
#define IDI_ICON1 105
#define IDI_ICON3 128
+#define IDI_ICON8 129
#define IDI_ICON4 130
#define IDI_ICON5 131
#define IDI_ICON6 158
diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc
index db270fefd9..90b54f150f 100644
--- a/src/mir_app/res/resource.rc
+++ b/src/mir_app/res/resource.rc
@@ -1310,7 +1310,8 @@ BEGIN
MENUITEM "&Not available\tCtrl+3", ID_STATUS_NA
MENUITEM "Occ&upied\tCtrl+4", ID_STATUS_OCCUPIED
MENUITEM "&Do not disturb\tCtrl+5", ID_STATUS_DND
- MENUITEM "&Invisible\tCtrl+6", ID_STATUS_INVISIBLE
+ MENUITEM "&Free for chat\tCtrl+6", ID_STATUS_FREECHAT
+ MENUITEM "&Invisible\tCtrl+7", ID_STATUS_INVISIBLE
END
END
diff --git a/src/mir_app/src/clcidents.cpp b/src/mir_app/src/clcidents.cpp
index 931975a599..0d4e3952b9 100644
--- a/src/mir_app/src/clcidents.cpp
+++ b/src/mir_app/src/clcidents.cpp
@@ -246,6 +246,7 @@ MIR_APP_DLL(int) Clist_GetGeneralizedStatus(char **szProto)
int iStatusWeight;
switch (pa->iRealStatus) {
+ case ID_STATUS_FREECHAT: iStatusWeight = 110; break;
case ID_STATUS_ONLINE: iStatusWeight = 100; break;
case ID_STATUS_OCCUPIED: iStatusWeight = 60; break;
case ID_STATUS_DND: iStatusWeight = 40; break;
diff --git a/src/mir_app/src/clcutils.cpp b/src/mir_app/src/clcutils.cpp
index 980a424d57..2ba762e39a 100644
--- a/src/mir_app/src/clcutils.cpp
+++ b/src/mir_app/src/clcutils.cpp
@@ -624,6 +624,7 @@ MIR_APP_DLL(int) Clist_ClcStatusToPf2(int status)
case ID_STATUS_DND: return PF2_HEAVYDND;
case ID_STATUS_NA: return PF2_LONGAWAY;
case ID_STATUS_OCCUPIED: return PF2_LIGHTDND;
+ case ID_STATUS_FREECHAT: return PF2_FREECHAT;
case ID_STATUS_INVISIBLE: return PF2_INVISIBLE;
case ID_STATUS_OFFLINE: return MODEF_OFFLINE;
}
diff --git a/src/mir_app/src/clistmod.cpp b/src/mir_app/src/clistmod.cpp
index 70a5fde409..ed2f250eb5 100644
--- a/src/mir_app/src/clistmod.cpp
+++ b/src/mir_app/src/clistmod.cpp
@@ -74,6 +74,9 @@ MIR_APP_DLL(wchar_t*) Clist_GetStatusModeDescription(int mode, int flags)
case ID_STATUS_OCCUPIED:
descr = LPGENW("Occupied");
break;
+ case ID_STATUS_FREECHAT:
+ descr = LPGENW("Free for chat");
+ break;
case ID_STATUS_INVISIBLE:
descr = LPGENW("Invisible");
break;
diff --git a/src/mir_app/src/menu_clist.cpp b/src/mir_app/src/menu_clist.cpp
index e266b712d5..181df23c64 100644
--- a/src/mir_app/src/menu_clist.cpp
+++ b/src/mir_app/src/menu_clist.cpp
@@ -63,6 +63,7 @@ MStatus g_statuses[MAX_STATUS_COUNT] =
{ ID_STATUS_NA, SKINICON_STATUS_NA, PF2_LONGAWAY },
{ ID_STATUS_OCCUPIED, SKINICON_STATUS_OCCUPIED, PF2_LIGHTDND },
{ ID_STATUS_DND, SKINICON_STATUS_DND, PF2_HEAVYDND },
+ { ID_STATUS_FREECHAT, SKINICON_STATUS_FREE4CHAT, PF2_FREECHAT },
{ ID_STATUS_INVISIBLE, SKINICON_STATUS_INVISIBLE, PF2_INVISIBLE },
};
diff --git a/src/mir_app/src/meta_services.cpp b/src/mir_app/src/meta_services.cpp
index 7b89a95b1a..ad63a46862 100644
--- a/src/mir_app/src/meta_services.cpp
+++ b/src/mir_app/src/meta_services.cpp
@@ -56,16 +56,16 @@ INT_PTR Meta_GetCaps(WPARAM wParam, LPARAM)
return PF1_IM | PF1_CHAT | PF1_FILESEND | PF1_MODEMSGRECV | PF1_NUMERICUSERID;
case PFLAGNUM_2:
- return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND;
+ return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT;
case PFLAGNUM_3:
- return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND;
+ return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT;
case PFLAGNUM_4:
return PF4_SUPPORTTYPING | PF4_AVATARS;
case PFLAGNUM_5:
- return PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND;
+ return PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT;
case PFLAG_MAXLENOFMESSAGE:
return 2000;
diff --git a/src/mir_app/src/meta_utils.cpp b/src/mir_app/src/meta_utils.cpp
index 2b7ccab6a2..75e02fa608 100644
--- a/src/mir_app/src/meta_utils.cpp
+++ b/src/mir_app/src/meta_utils.cpp
@@ -209,11 +209,12 @@ MCONTACT Meta_GetMostOnline(DBCachedContact *cc)
static int GetStatusPriority(int status)
{
switch (status) {
- case ID_STATUS_AWAY: return 1;
- case ID_STATUS_OCCUPIED: return 2;
- case ID_STATUS_NA: return 3;
- case ID_STATUS_DND: return 4;
- case ID_STATUS_OFFLINE: return 5;
+ case ID_STATUS_FREECHAT: return 1;
+ case ID_STATUS_AWAY: return 2;
+ case ID_STATUS_OCCUPIED: return 3;
+ case ID_STATUS_NA: return 4;
+ case ID_STATUS_DND: return 5;
+ case ID_STATUS_OFFLINE: return 6;
}
return 0;
diff --git a/src/mir_app/src/skinicons.cpp b/src/mir_app/src/skinicons.cpp
index b5ecd34c88..8f7f7c7624 100644
--- a/src/mir_app/src/skinicons.cpp
+++ b/src/mir_app/src/skinicons.cpp
@@ -108,7 +108,8 @@ static struct StandardIconDescription statusIcons[] =
{ ID_STATUS_NA, LPGEN("Not available"), -IDI_NA, PF2_LONGAWAY },
{ ID_STATUS_OCCUPIED, LPGEN("Occupied"), -IDI_OCCUPIED, PF2_LIGHTDND },
{ ID_STATUS_DND, LPGEN("Do not disturb"), -IDI_DND, PF2_HEAVYDND },
- { ID_STATUS_INVISIBLE, LPGEN("Invisible"), -IDI_INVISIBLE, PF2_INVISIBLE },
+ { ID_STATUS_FREECHAT, LPGEN("Free for chat"), -IDI_FREE4CHAT, PF2_FREECHAT },
+ { ID_STATUS_INVISIBLE, LPGEN("Invisible"), -IDI_INVISIBLE, PF2_INVISIBLE }
};
const char mainIconsFmt[] = "core_main_";