From 3142979bb604231a556d0173f0b2b90903399455 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Mon, 15 Apr 2013 08:46:42 +0000 Subject: fixed crash when you did not select any contact for group chat creating git-svn-id: http://svn.miranda-ng.org/main/trunk@4455 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Skype/src/skype_chat.cpp | 103 +++++++++++++++++----------------- protocols/Skype/src/skype_dialogs.cpp | 6 +- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/protocols/Skype/src/skype_chat.cpp b/protocols/Skype/src/skype_chat.cpp index 6da1496e51..e46a52bc1b 100644 --- a/protocols/Skype/src/skype_chat.cpp +++ b/protocols/Skype/src/skype_chat.cpp @@ -160,63 +160,66 @@ char *CSkypeProto::StartChat(const char *cid, const SEStringList &invitedContact SEString data; CConversation::Ref conversation; - if (cid) - { - this->skype->GetConversationByIdentity(cid, conversation); - conversation->GetJoinBlob(data); - this->skype->GetConversationByBlob(data, conversation, false); - conversation->Join(); - - chatID = ::mir_strdup(cid); - } - else - { - this->skype->CreateConference(conversation); - conversation->SetOption(CConversation::P_OPT_JOINING_ENABLED, true); - conversation->SetOption(CConversation::P_OPT_ENTRY_LEVEL_RANK, CParticipant::WRITER); - conversation->SetOption(CConversation::P_OPT_DISCLOSE_HISTORY, 1); - - conversation->GetPropIdentity(data); - chatID = ::mir_strdup(data); - } - - conversation->AddConsumers(invitedContacts); + if (invitedContacts.size()) { + if (cid) + { + this->skype->GetConversationByIdentity(cid, conversation); + conversation->GetJoinBlob(data); + this->skype->GetConversationByBlob(data, conversation, false); + conversation->Join(); - conversation->GetPropDisplayname(data); - char *chatName; - if (data.length()) - chatName = ::mir_utf8decodeA(data); - else - chatName = Translate("New conference"); + chatID = ::mir_strdup(cid); + } + else + { + this->skype->CreateConference(conversation); + conversation->SetOption(CConversation::P_OPT_JOINING_ENABLED, true); + conversation->SetOption(CConversation::P_OPT_ENTRY_LEVEL_RANK, CParticipant::WRITER); + conversation->SetOption(CConversation::P_OPT_DISCLOSE_HISTORY, 1); - GCSESSION gcw = {0}; - gcw.cbSize = sizeof(gcw); - gcw.iType = GCW_CHATROOM; - gcw.pszModule = this->m_szModuleName; - gcw.pszName = chatName; - gcw.pszID = chatID; - ::CallServiceSync(MS_GC_NEWSESSION, 0, (LPARAM)&gcw); + conversation->GetPropIdentity(data); + chatID = ::mir_strdup(data); + } - GCDEST gcd = { m_szModuleName, { NULL }, GC_EVENT_ADDGROUP }; - gcd.pszID = chatID; + conversation->AddConsumers(invitedContacts); - GCEVENT gce = {0}; - gce.cbSize = sizeof(GCEVENT); - gce.pDest = &gcd; - for (int i = 0; i < SIZEOF(CSkypeProto::Groups); i++) - { - gce.pszStatus = Translate(CSkypeProto::Groups[i]); - CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce); - } + conversation->GetPropDisplayname(data); + TCHAR *chatName; + if (data.length()) + chatName = ::mir_utf8decodeT(data); + else + chatName = TranslateT("New conference"); + + GCSESSION gcw = {0}; + gcw.cbSize = sizeof(gcw); + gcw.iType = GCW_CHATROOM; + gcw.pszModule = this->m_szModuleName; + gcw.ptszName = chatName; + gcw.pszID = chatID; + ::CallServiceSync(MS_GC_NEWSESSION, 0, (LPARAM)&gcw); + + GCDEST gcd = { m_szModuleName, { NULL }, GC_EVENT_ADDGROUP }; + gcd.pszID = chatID; + + GCEVENT gce = {0}; + gce.cbSize = sizeof(GCEVENT); + gce.pDest = &gcd; + for (int i = 0; i < SIZEOF(CSkypeProto::Groups); i++) + { + gce.pszStatus = Translate(CSkypeProto::Groups[i]); + CallServiceSync(MS_GC_EVENT, NULL, (LPARAM)&gce); + } - gcd.iType = GC_EVENT_CONTROL; - ::CallServiceSync(MS_GC_EVENT, SESSION_INITDONE, (LPARAM)&gce); - ::CallServiceSync(MS_GC_EVENT, SESSION_ONLINE, (LPARAM)&gce); - ::CallServiceSync(MS_GC_EVENT, WINDOW_VISIBLE, (LPARAM)&gce); + gcd.iType = GC_EVENT_CONTROL; + ::CallServiceSync(MS_GC_EVENT, SESSION_INITDONE, (LPARAM)&gce); + ::CallServiceSync(MS_GC_EVENT, SESSION_ONLINE, (LPARAM)&gce); + ::CallServiceSync(MS_GC_EVENT, WINDOW_VISIBLE, (LPARAM)&gce); - ::mir_free(chatName); + ::mir_free(chatName); - return chatID; + return chatID; + } else + return NULL; } void CSkypeProto::JoinToChat(const char *cid, bool showWindow) diff --git a/protocols/Skype/src/skype_dialogs.cpp b/protocols/Skype/src/skype_dialogs.cpp index f6b6740ff7..2327d2e4ce 100644 --- a/protocols/Skype/src/skype_dialogs.cpp +++ b/protocols/Skype/src/skype_dialogs.cpp @@ -681,9 +681,11 @@ INT_PTR CALLBACK CSkypeProto::InviteToChatProc(HWND hwndDlg, UINT msg, WPARAM wP status); } } + if (chatID) + EndDialog(hwndDlg, IDOK); + else + param->ppro->ShowNotification(TranslateT("You did not select any contact")); } - - EndDialog(hwndDlg, IDOK); break; case IDCANCEL: -- cgit v1.2.3