summaryrefslogtreecommitdiff
path: root/worldtime_protocol/timezone_list.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'worldtime_protocol/timezone_list.cpp')
-rw-r--r--worldtime_protocol/timezone_list.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/worldtime_protocol/timezone_list.cpp b/worldtime_protocol/timezone_list.cpp
new file mode 100644
index 0000000..4927515
--- /dev/null
+++ b/worldtime_protocol/timezone_list.cpp
@@ -0,0 +1,81 @@
+#include "common.h"
+#include "timezone_list.h"
+
+#include <sstream>
+
+ITEMLIST listbox_items;
+
+void load_listbox_items() {
+
+ HANDLE hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDFIRST, 0, 0 );
+ LISTITEM pa;
+ DBVARIANT dbv;
+ char *proto;
+
+ listbox_items.clear();
+ while ( hContact != NULL ) {
+ proto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, ( WPARAM )hContact,0 );
+ if ( proto && !lstrcmp( PROTO, proto)) {
+ pa.hContact = hContact;
+ pa.timezone_list_index = DBGetContactSettingDword(pa.hContact, PROTO, "TimezoneListIndex", -1);
+ if(!DBGetContactSetting(pa.hContact, PROTO, "Nick", &dbv)) {
+ strncpy(pa.pszText, dbv.pszVal, MAX_NAME_LENGTH);
+ DBFreeVariant(&dbv);
+ }
+
+ listbox_items.push_back(pa);
+ }
+
+ hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDNEXT,( WPARAM )hContact, 0 );
+ }
+}
+
+void save_listbox_items() {
+ bool is_contact;
+
+
+ for(ITEMLIST::iterator i = listbox_items.begin(); i != listbox_items.end(); i++) {
+ is_contact = (int)CallService(MS_DB_CONTACT_IS, (WPARAM)i->hContact, 0) == 1;
+
+ if(!is_contact) {
+ i->hContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0);
+ CallService( MS_PROTO_ADDTOCONTACT, ( WPARAM )i->hContact, ( LPARAM )PROTO );
+ CallService(MS_IGNORE_IGNORE, (WPARAM)i->hContact, (WPARAM)IGNOREEVENT_USERONLINE);
+ }
+
+ DBWriteContactSettingString(i->hContact, PROTO, "Nick", i->pszText);
+ DBWriteContactSettingDword(i->hContact, PROTO, "TimezoneListIndex", i->timezone_list_index);
+ DBWriteContactSettingWord(i->hContact, PROTO, "Status", ID_STATUS_ONLINE);
+ }
+
+ // remove contacts in DB that have been removed from the list
+ HANDLE hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDFIRST, 0, 0 );
+ char *proto;
+ bool found;
+ while ( hContact != NULL ) {
+ proto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, ( WPARAM )hContact,0 );
+ if ( proto && !lstrcmp( PROTO, proto)) {
+ found = false;
+ for(ITEMLIST::iterator i = listbox_items.begin(); i != listbox_items.end(); i++) {
+ if(i->hContact == hContact) {
+ found = true;
+ }
+ }
+
+ if(!found) {
+ // remove prot first, so that our contact deleted event handler (if present) isn't activated
+ HANDLE oldHContact = hContact;
+ hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDNEXT,( WPARAM )hContact, 0 );
+
+ CallService(MS_PROTO_REMOVEFROMCONTACT, (WPARAM)oldHContact, (LPARAM)PROTO);
+ CallService(MS_DB_CONTACT_DELETE, (WPARAM)oldHContact, 0);
+ } else
+ hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDNEXT,( WPARAM )hContact, 0 );
+ } else
+ hContact = ( HANDLE )CallService( MS_DB_CONTACT_FINDNEXT,( WPARAM )hContact, 0 );
+ }
+}
+
+
+
+