summaryrefslogtreecommitdiff
path: root/utilities.cpp
diff options
context:
space:
mode:
authorSergey (Elzor) Bolhovskoy <elzor@foobar2000.ru>2010-07-27 19:09:21 +0600
committerSergey (Elzor) Bolhovskoy <elzor@foobar2000.ru>2010-07-27 19:09:21 +0600
commite21fd2bb454c8a18948c677c4968fc397b7e6078 (patch)
tree8ffd2bc52df78e98f33f920ed0372162142da48e /utilities.cpp
parent8c4ce511abdbfb4dba04e4f845e85c96c0471312 (diff)
Fix deleting <Not In List> contacts when protocol is offline.
Note: contacts is delete after second restart
Diffstat (limited to 'utilities.cpp')
-rw-r--r--utilities.cpp27
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;
}