diff options
Diffstat (limited to 'utilities.cpp')
-rwxr-xr-x[-rw-r--r--] | utilities.cpp | 216 |
1 files changed, 122 insertions, 94 deletions
diff --git a/utilities.cpp b/utilities.cpp index 19c2d79..660a203 100644..100755 --- a/utilities.cpp +++ b/utilities.cpp @@ -381,13 +381,13 @@ boost::mutex clean_mutex; void CleanProtocolTmpThread(std::string proto) { - while(true)
- {
- UINT status = CallProtoService(proto.c_str(), PS_GETSTATUS, 0, 0);
- if(status > ID_STATUS_OFFLINE)
- break;
- boost::this_thread::sleep(boost::posix_time::seconds(2));
- }
+ while(true) + { + UINT status = CallProtoService(proto.c_str(), PS_GETSTATUS, 0, 0); + if(status > ID_STATUS_OFFLINE) + break; + boost::this_thread::sleep(boost::posix_time::seconds(2)); + } std::list<HANDLE> contacts; for(HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)) { @@ -397,11 +397,11 @@ void CleanProtocolTmpThread(std::string proto) if(DBGetContactSettingByte(hContact, "CList", "NotOnList", 0)|| (_T("Not In List")== DBGetContactSettingStringPAN(hContact,"CList","Group",_T("")))) contacts.push_back(hContact); } - boost::this_thread::sleep(boost::posix_time::seconds(5));
+ boost::this_thread::sleep(boost::posix_time::seconds(5)); clean_mutex.lock(); std::list<HANDLE>::iterator end = contacts.end(); for(std::list<HANDLE>::iterator i = contacts.begin(); i != end; ++i) - {
+ { LogSpamToFile(*i, _T("Deleted")); HistoryLogFunc(*i, "Deleted"); CallService(MS_DB_CONTACT_DELETE, (WPARAM)*i, 0); @@ -409,41 +409,41 @@ void CleanProtocolTmpThread(std::string proto) clean_mutex.unlock(); } -void CleanProtocolExclThread(std::string proto)
-{
- while(true)
- {
- UINT status = CallProtoService(proto.c_str(), PS_GETSTATUS, 0, 0);
- if(status > ID_STATUS_OFFLINE)
- break;
- boost::this_thread::sleep(boost::posix_time::seconds(2));
- }
- std::list<HANDLE> contacts;
- for(HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0))
- {
- char *proto_tmp = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
- if(proto_tmp)
- if(!strcmp(proto.c_str(), proto_tmp))
- if(DBGetContactSettingByte(hContact, "CList", "NotOnList", 0) && DBGetContactSettingByte(hContact, pluginName, "Excluded", 0))
- contacts.push_back(hContact);
- }
- boost::this_thread::sleep(boost::posix_time::seconds(5));
- clean_mutex.lock();
- std::list<HANDLE>::iterator end = contacts.end();
- for(std::list<HANDLE>::iterator i = contacts.begin(); i != end; ++i)
- {
- LogSpamToFile(*i, _T("Deleted"));
- HistoryLogFunc(*i, "Deleted");
- CallService(MS_DB_CONTACT_DELETE, (WPARAM)*i, 0);
- }
- clean_mutex.unlock();
-}
+void CleanProtocolExclThread(std::string proto) +{ + while(true) + { + UINT status = CallProtoService(proto.c_str(), PS_GETSTATUS, 0, 0); + if(status > ID_STATUS_OFFLINE) + break; + boost::this_thread::sleep(boost::posix_time::seconds(2)); + } + std::list<HANDLE> contacts; + for(HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)) + { + char *proto_tmp = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + if(proto_tmp) + if(!strcmp(proto.c_str(), proto_tmp)) + if(DBGetContactSettingByte(hContact, "CList", "NotOnList", 0) && DBGetContactSettingByte(hContact, pluginName, "Excluded", 0)) + contacts.push_back(hContact); + } + boost::this_thread::sleep(boost::posix_time::seconds(5)); + clean_mutex.lock(); + std::list<HANDLE>::iterator end = contacts.end(); + for(std::list<HANDLE>::iterator i = contacts.begin(); i != end; ++i) + { + LogSpamToFile(*i, _T("Deleted")); + HistoryLogFunc(*i, "Deleted"); + CallService(MS_DB_CONTACT_DELETE, (WPARAM)*i, 0); + } + clean_mutex.unlock(); +} void CleanThread() { - std::list<std::string> protocols;
- int count = 0;
+ std::list<std::string> protocols; + int count = 0; PROTOACCOUNT **accounts; ProtoEnumAccounts(&count, &accounts); for(int i = 0; i < count; i++) @@ -452,7 +452,7 @@ void CleanThread() protocols.push_back(accounts[i]->szModuleName); } std::list<std::string>::iterator end = protocols.end(); - for(std::list<std::string>::iterator i = protocols.begin(); i != end; ++i)
+ for(std::list<std::string>::iterator i = protocols.begin(); i != end; ++i) { if(gbDelAllTempory) boost::thread *thr = new boost::thread(boost::bind(&CleanProtocolTmpThread, *i)); @@ -460,56 +460,84 @@ void CleanThread() boost::thread *thr = new boost::thread(boost::bind(&CleanProtocolExclThread, *i)); } } -void HistoryLog(HANDLE hContact, char *data, int event_type, int flags)
-{
- DBEVENTINFO Event = {0};
- Event.cbSize = sizeof(Event);
- Event.szModule = pluginName;
- Event.eventType = event_type;
- Event.flags = flags | DBEF_UTF;
- Event.timestamp = (DWORD)time(NULL);
- Event.cbBlob = strlen(data)+1;
- Event.pBlob = (PBYTE)_strdup(data);
- CallService(MS_DB_EVENT_ADD, (WPARAM)(HANDLE)hContact,(LPARAM)&Event);
-}
-void HistoryLogFunc(HANDLE hContact, std::string message)
-{
- if(gbHistoryLog)
- {
- if(hContact == INVALID_HANDLE_VALUE)
- return;
- std::string msg = message;
- msg.append("\n");
- msg.append("Protocol: ").append((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)).append(" Contact: ");
- msg.append(toUTF8((TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) hContact, GCDNF_TCHAR))).append(" ID: ");
- msg.append(toUTF8(GetContactUid(hContact,toUTF16((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)))));
- HistoryLog(NULL, (char*)msg.c_str(), EVENTTYPE_MESSAGE, DBEF_READ);
- }
-}
-
-std::string toUTF8(std::wstring str)
-{
- std::string ustr;
- utf8::utf16to8(str.begin(), str.end(), back_inserter(ustr));
- return ustr;
-}
-
-std::string toUTF8(std::string str)
-{
- std::string ustr;
- std::string tmpstr;
- utf8::replace_invalid(str.begin(), str.end(), back_inserter(tmpstr));
- utf8::utf16to8(tmpstr.begin(), tmpstr.end(), back_inserter(ustr));
- return ustr;
-}
-
-
-std::wstring toUTF16(std::string str) //convert as much as possible
-{
- std::wstring ustr;
- std::string tmpstr;
- utf8::replace_invalid(str.begin(), str.end(), back_inserter(tmpstr));
- utf8::utf8to16(tmpstr.begin(), tmpstr.end(), back_inserter(ustr));
- return ustr;
-}
-
+void HistoryLog(HANDLE hContact, char *data, int event_type, int flags) +{ + DBEVENTINFO Event = {0}; + Event.cbSize = sizeof(Event); + Event.szModule = pluginName; + Event.eventType = event_type; + Event.flags = flags | DBEF_UTF; + Event.timestamp = (DWORD)time(NULL); + Event.cbBlob = strlen(data)+1; + Event.pBlob = (PBYTE)_strdup(data); + CallService(MS_DB_EVENT_ADD, (WPARAM)(HANDLE)hContact,(LPARAM)&Event); +} +void HistoryLogFunc(HANDLE hContact, std::string message) +{ + if(gbHistoryLog) + { + if(hContact == INVALID_HANDLE_VALUE) + return; + std::string msg = message; + msg.append("\n"); + msg.append("Protocol: ").append((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)).append(" Contact: "); + msg.append(toUTF8((TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM) hContact, GCDNF_TCHAR))).append(" ID: "); + msg.append(toUTF8(GetContactUid(hContact,toUTF16((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0))))); + HistoryLog(NULL, (char*)msg.c_str(), EVENTTYPE_MESSAGE, DBEF_READ); + } +} + +std::string toUTF8(std::wstring str) +{ + std::string ustr; + try{ + utf8::utf16to8(str.begin(), str.end(), back_inserter(ustr)); + } + catch(const std::exception &e) + { + //TODO: handle utf8cpp exceptions + } + return ustr; +} + +std::string toUTF8(std::string str) +{ + std::string ustr; + std::string tmpstr; + try{ + utf8::replace_invalid(str.begin(), str.end(), back_inserter(tmpstr)); + utf8::utf16to8(tmpstr.begin(), tmpstr.end(), back_inserter(ustr)); + } + catch(const std::exception &e) + { + //TODO: handle utf8cpp exceptions + } + return ustr; +} + + +std::wstring toUTF16(std::string str) //convert as much as possible +{ + std::wstring ustr; + std::string tmpstr; + try{ + utf8::replace_invalid(str.begin(), str.end(), back_inserter(tmpstr)); + utf8::utf8to16(tmpstr.begin(), tmpstr.end(), back_inserter(ustr)); + } + catch(const std::exception &e) + { + //TODO: handle utf8cpp exceptions + } + return ustr; +} + +std::string get_random_num(int length) +{ + std::string chars("123456789"); + std::string data; + boost::random_device rng; + boost::variate_generator<boost::random_device&, boost::uniform_int<>> gen(rng, boost::uniform_int<>(0, chars.length()-1)); + for(int i = 0; i < length; ++i) + data += chars[gen()]; + return data; +} |