From e21fd2bb454c8a18948c677c4968fc397b7e6078 Mon Sep 17 00:00:00 2001 From: "Sergey (Elzor) Bolhovskoy" Date: Tue, 27 Jul 2010 19:09:21 +0600 Subject: Fix deleting contacts when protocol is offline. Note: contacts is delete after second restart --- utilities.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'utilities.cpp') diff --git a/utilities.cpp b/utilities.cpp index b56fa4b..4ffebd7 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -90,6 +90,7 @@ void DeleteCListGroupsByName(TCHAR* szGroupName) DBWriteContactSettingByte(NULL, "CList", "ConfirmDelete",ConfirmDelete); } + void RemoveExcludedUsers() { HANDLE hContact; @@ -113,7 +114,16 @@ void RemoveExcludedUsers() plist = first; while(plist->hContact != INVALID_HANDLE_VALUE) { - CallService(MS_DB_CONTACT_DELETE, (WPARAM)plist->hContact, 0); + std::string proto=DBGetContactSettingStringPAN_A(plist->hContact,"Protocol","p",""); + UINT status = CallProtoService(proto.c_str(), PS_GETSTATUS, 0, 0); + + if(status>= ID_STATUS_CONNECTING && status <= ID_STATUS_OFFLINE){ + LogSpamToFile(plist->hContact, _T("Mark for delete")); + DBWriteContactSettingByte(plist->hContact,"CList","Delete", 1); + }else{ + LogSpamToFile(plist->hContact, _T("Deleted")); + CallService(MS_DB_CONTACT_DELETE, (WPARAM)plist->hContact, 0); + }; tmp = plist; plist = plist->next; delete tmp; @@ -147,9 +157,18 @@ void RemoveTemporaryUsers() plist = first; while(plist->hContact != INVALID_HANDLE_VALUE) { - LogSpamToFile(plist->hContact, _T("Deleted")); - CallService(MS_DB_CONTACT_DELETE, (WPARAM)plist->hContact, 0); - tmp = plist; + std::string proto=DBGetContactSettingStringPAN_A(plist->hContact,"Protocol","p",""); + UINT status = CallProtoService(proto.c_str(), PS_GETSTATUS, 0, 0); + + if(status>= ID_STATUS_CONNECTING && status <= ID_STATUS_OFFLINE){ + LogSpamToFile(plist->hContact, _T("Mark for delete")); + DBWriteContactSettingByte(plist->hContact,"CList","Delete", 1); + }else{ + LogSpamToFile(plist->hContact, _T("Deleted")); + CallService(MS_DB_CONTACT_DELETE, (WPARAM)plist->hContact, 0); + }; + + tmp = plist; plist = plist->next; delete tmp; } -- cgit v1.2.3