static INT_PTR Service_CanCall(WPARAM wParam, LPARAM lParam) { HANDLE hContact = (HANDLE) wParam; if (hContact == NULL) return -1; hContact = ConvertMetacontact(hContact); return CanCall(hContact) ? 1 : 0; }
int Protocol::GetNickMaxLength() { if (CanCall(PS_GETMYNICKNAMEMAXLENGTH)) { int ret = Call(PS_GETMYNICKNAMEMAXLENGTH); if (ret <= 0) ret = MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE; return ret; } else return MS_MYDETAILS_GETMYNICKNAME_BUFFER_SIZE; }
void Protocol::UpdateStatus() { status_initialized = true; status = Call(PS_GETSTATUS); if (status > ID_STATUS_OFFLINE && CanCall(PS_ICQ_GETCUSTOMSTATUS)) { char *name_key = NULL; char *message_key = NULL; custom_status = Call(PS_ICQ_GETCUSTOMSTATUS, (WPARAM) &name_key, (LPARAM) &message_key); // Fix fo jabber, that returns 0xbaadf00d here if (custom_status < 0) custom_status = 0; custom_status_name_key = (name_key ? name_key : ""); custom_status_message_key = (message_key ? message_key : ""); } else { custom_status = 0; custom_status_name_key = ""; custom_status_message_key = ""; } if (custom_status == 0) { status_name = (char *) CallService(MS_CLIST_GETSTATUSMODEDESCRIPTION, status, GSMDF_TCHAR); } else { status_name = ""; if (!custom_status_name_key.empty()) status_name = GetDBSettingString(custom_status_name_key.c_str()); if (!custom_status_message_key.empty()) { std::string tmp = GetDBSettingString(custom_status_message_key.c_str()); if (!tmp.empty()) { status_name += ": "; status_name += tmp; } } } if (status_name.empty()) status_name = TranslateTS("<no status name>"); }
bool Protocol::CanGetEmailCount() { return CanCall(PS_GETUNREADEMAILCOUNT) != 0 && GetStatus() > ID_STATUS_OFFLINE; }
bool Protocol::CanGetListeningTo() { return CanCall(PS_SET_LISTENINGTO) != 0; }
bool Protocol::CanSetNick() { return CanCall(PS_SETMYNICKNAME) != 0; }
void Protocol::GetStatusMsg(int aStatus, char *msg, size_t msg_size) { if (!CanGetStatusMsg()) { lstrcpyn(msg, "", msg_size); return; } bool isCurrentStatus = (aStatus == GetStatus()); if (isCurrentStatus && CanCall(PS_GETMYAWAYMSG)) { char *tmp = (char *) Call(PS_GETMYAWAYMSG); lstrcpyn(msg, tmp == NULL ? "" : tmp, msg_size); } else if (isCurrentStatus && ServiceExists(MS_SA_ISSARUNNING) && CallService(MS_SA_ISSARUNNING, 0, 0)) { char *tmp = (char *) CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM) ID_STATUS_CURRENT, (LPARAM) name.c_str()); if (tmp != NULL) { lstrcpyn(msg, tmp, msg_size); mir_free(tmp); } else lstrcpyn(msg, "", msg_size); } else if (ServiceExists(MS_NAS_GETSTATE)) { NAS_PROTOINFO pi; ZeroMemory(&pi, sizeof(pi)); pi.cbSize = sizeof(NAS_PROTOINFO); pi.szProto = (char *) name.c_str(); pi.status = (isCurrentStatus ? 0 : aStatus); pi.szMsg = NULL; if (CallService(MS_NAS_GETSTATE, (WPARAM) &pi, 1) == 0) { if (pi.szMsg == NULL) { pi.szProto = NULL; if (CallService(MS_NAS_GETSTATE, (WPARAM) &pi, 1) == 0) { if (pi.szMsg != NULL) { lstrcpyn(msg, pi.szMsg, msg_size); mir_free(pi.szMsg); } else lstrcpyn(msg, "", msg_size); } else lstrcpyn(msg, "", msg_size); } else // if (pi.szMsg != NULL) { lstrcpyn(msg, pi.szMsg, msg_size); mir_free(pi.szMsg); } } else lstrcpyn(msg, "", msg_size); if (ServiceExists(MS_VARS_FORMATSTRING)) { char *tmp = variables_parse(msg, NULL, NULL); lstrcpyn(msg, tmp, msg_size); variables_free(tmp); } } // TODO: Remove when removing old NAS services support else if (ServiceExists("NewAwaySystem/GetState")) { NAS_PROTOINFO pi, *pii; ZeroMemory(&pi, sizeof(pi)); pi.cbSize = sizeof(NAS_PROTOINFO); pi.szProto = (char *) name.c_str(); pi.status = (isCurrentStatus ? 0 : aStatus); pi.szMsg = NULL; pii = π if (CallService("NewAwaySystem/GetState", (WPARAM) &pii, 1) == 0) { if (pi.szMsg == NULL) { pi.szProto = NULL; if (CallService("NewAwaySystem/GetState", (WPARAM) &pii, 1) == 0) { if (pi.szMsg != NULL) { lstrcpyn(msg, pi.szMsg, msg_size); mir_free(pi.szMsg); } else lstrcpyn(msg, "", msg_size); } else lstrcpyn(msg, "", msg_size); } else // if (pi.szMsg != NULL) { lstrcpyn(msg, pi.szMsg, msg_size); mir_free(pi.szMsg); } } else lstrcpyn(msg, "", msg_size); if (ServiceExists(MS_VARS_FORMATSTRING)) { char *tmp = variables_parse(msg, NULL, NULL); lstrcpyn(msg, tmp, msg_size); variables_free(tmp); } } else if (ServiceExists(MS_AWAYMSG_GETSTATUSMSG)) { char *tmp = (char *) CallService(MS_AWAYMSG_GETSTATUSMSG, (WPARAM)aStatus, 0); if (tmp != NULL) { lstrcpyn(msg, tmp, msg_size); mir_free(tmp); } else lstrcpyn(msg, "", msg_size); } }