diff options
author | Sergey (Elzor) Bolhovskoy <elzor@foobar2000.ru> | 2010-07-27 19:09:21 +0600 |
---|---|---|
committer | Sergey (Elzor) Bolhovskoy <elzor@foobar2000.ru> | 2010-07-27 19:09:21 +0600 |
commit | e21fd2bb454c8a18948c677c4968fc397b7e6078 (patch) | |
tree | 8ffd2bc52df78e98f33f920ed0372162142da48e | |
parent | 8c4ce511abdbfb4dba04e4f845e85c96c0471312 (diff) |
Fix deleting <Not In List> contacts when protocol is offline.
Note: contacts is delete after second restart
-rw-r--r-- | utilities.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
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;
}
|