YList *y_list_insert_sorted(YList *list, void *data, YListCompFunc comp) { YList *l, *n, *prev = NULL; if (!list) return y_list_append(list, data); n = malloc(sizeof(YList)); n->data = data; for (l = list; l && comp(l->data, n->data) <= 0; l = l->next) prev = l; if (l) { n->prev = l->prev; l->prev = n; } else n->prev = prev; n->next = l; if (n->prev) { n->prev->next = n; return list; } else { return n; } }
static void clist_chat_invite_send(MCONTACT hItem, HWND hwndList, YList* &who, char* room, CYahooProto* ppro, TCHAR *msg) { bool root = !hItem; if (root) hItem = (MCONTACT)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_ROOT, 0); while (hItem) { if (IsHContactGroup(hItem)) { MCONTACT hItemT = (MCONTACT)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); if (hItemT) clist_chat_invite_send(hItemT, hwndList, who, room, ppro, msg); } else { int chk = SendMessage(hwndList, CLM_GETCHECKMARK, (WPARAM)hItem, 0); if (chk) { if (IsHContactInfo(hItem)) { TCHAR buf[128] = _T(""); SendMessage(hwndList, CLM_GETITEMTEXT, (WPARAM)hItem, (LPARAM)buf); who = y_list_append(who, mir_t2a(buf)); } else { DBVARIANT dbv; if (!ppro->getString(hItem, YAHOO_LOGINID, &dbv)) who = y_list_append(who, dbv.pszVal); } } } hItem = (MCONTACT)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXT, (LPARAM)hItem); } if (root && who) { T2Utf msg8(msg); CYahooProto::ChatRoom *cm = ppro->m_chatrooms.find((CYahooProto::ChatRoom*)&room); if (cm) { for (YList *l = who; l; l = l->next) yahoo_conference_addinvite(ppro->m_id, NULL, (char*)l->data, room, cm->members, msg8); } else yahoo_conference_invite(ppro->m_id, NULL, who, room, msg8); for (YList *l = who; l; l = l->next) mir_free(l->data); y_list_free(who); } }
YList *y_list_copy(YList *list) { YList *n; YList *copy = NULL; for (n = list; n != NULL; n = n->next) { copy = y_list_append(copy, n->data); } return copy; }
void ext_yahoo_conf_userjoin(int id, const char*, const char *who, const char *room) { CYahooProto* ppro = getProtoById(id); if (!ppro) return; CYahooProto::ChatRoom *cm = ppro->m_chatrooms.find((CYahooProto::ChatRoom*)&room); if (!cm) return; for (YList *l = cm->members; l; l = l->next) { if (!mir_strcmp(who, (char*)l->data)) return; } cm->members = y_list_append(cm->members, strdup(who)); ppro->ChatEvent(room, who, GC_EVENT_JOIN); }