diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-05-15 10:38:20 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-05-15 10:38:20 +0000 |
commit | 48540940b6c28bb4378abfeb500ec45a625b37b6 (patch) | |
tree | 2ef294c0763e802f91d868bdef4229b6868527de /protocols/Yahoo/search.cpp | |
parent | 5c350913f011e119127baeb32a6aedeb4f0d33bc (diff) |
initial commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/Yahoo/search.cpp')
-rw-r--r-- | protocols/Yahoo/search.cpp | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/protocols/Yahoo/search.cpp b/protocols/Yahoo/search.cpp new file mode 100644 index 0000000000..3f0bb3710a --- /dev/null +++ b/protocols/Yahoo/search.cpp @@ -0,0 +1,207 @@ +/*
+ * $Id: search.cpp 11632 2010-04-24 12:32:03Z borkra $
+ *
+ * myYahoo Miranda Plugin
+ *
+ * Authors: Gennady Feldman (aka Gena01)
+ * Laurent Marechal (aka Peorth)
+ *
+ * This code is under GPL and is based on AIM, MSN and Miranda source code.
+ * I want to thank Robert Rainwater and George Hazan for their code and support
+ * and for answering some of my questions during development of this plugin.
+ */
+
+#include "yahoo.h"
+#include <m_protosvc.h>
+#include <m_langpack.h>
+
+#include "resource.h"
+
+////////////////////////////////////////////////////////////////////////////////////////
+// SearchBasic - searches the contact by UIN
+
+void __cdecl CYahooProto::search_simplethread(void *snsearch)
+{
+ TCHAR *id = (TCHAR *) snsearch;
+
+ if (lstrlen(id) < 4) {
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+ MessageBoxA(NULL, "Please enter a valid ID to search for.", "Search", MB_OK);
+ return;
+ }
+
+ TCHAR *c = _tcschr(id, '@');
+ if (c) *c = 0;
+
+ PROTOSEARCHRESULT psr = { 0 };
+ psr.cbSize = sizeof(psr);
+ psr.flags = PSR_TCHAR;
+ psr.id = (TCHAR*)_tcslwr(id);
+ psr.reserved[0] = YAHOO_IM_YAHOO;
+
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE) 1, (LPARAM) & psr);
+
+ //yahoo_search(m_id, YAHOO_SEARCH_YID, m, YAHOO_GENDER_NONE, YAHOO_AGERANGE_NONE, 0, 1);
+
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+}
+
+HANDLE __cdecl CYahooProto::SearchBasic( const TCHAR* nick )
+{
+ LOG(("[YahooBasicSearch] Searching for: %S", nick));
+
+ if ( !m_bLoggedIn )
+ return 0;
+
+ YForkThread(&CYahooProto::search_simplethread, _tcsdup( nick ));
+ return ( HANDLE )1;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////
+// SearchAdvanced - searches the contact by UIN
+
+void CYahooProto::ext_got_search_result(int found, int start, int total, YList *contacts)
+{
+ struct yahoo_found_contact *yct=NULL;
+ int i=start;
+ YList *en=contacts;
+
+ LOG(("got search result: "));
+
+ LOG(("Found: %d", found));
+ LOG(("Start: %d", start));
+ LOG(("Total: %d", total));
+
+ PROTOSEARCHRESULT psr = { 0 };
+ psr.cbSize = sizeof(psr);
+ psr.flags = PSR_TCHAR;
+ psr.reserved[0] = YAHOO_IM_YAHOO;
+
+ while (en) {
+ yct = ( yahoo_found_contact* )en->data;
+
+ if (yct == NULL) {
+ LOG(("[%d] Empty record?",i++));
+ } else {
+ LOG(("[%d] id: '%s', online: %d, age: %d, sex: '%s', location: '%s'", i++, yct->id, yct->online, yct->age, yct->gender, yct->location));
+ psr.id = mir_utf8decodeT( yct->id );
+
+ if (yct->gender[0] != 5)
+ psr.firstName = mir_utf8decodeT( yct->gender );
+ else
+ psr.firstName = NULL;
+
+ TCHAR c[10];
+ if (yct->age > 0) {
+ _itot(yct->age, c,10);
+ psr.lastName = ( TCHAR* )c;
+ }
+ else
+ psr.lastName = NULL;
+
+ if (yct->location[0] != 5)
+ psr.email = mir_utf8decodeT( yct->location );
+ else
+ psr.email = NULL;
+
+ //void yahoo_search(int id, enum yahoo_search_type t, const char *text, enum yahoo_search_gender g, enum yahoo_search_agerange ar,
+ // int photo, int yahoo_only)
+
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE) 1, (LPARAM) & psr);
+
+ mir_free(psr.id);
+ mir_free(psr.firstName);
+ mir_free(psr.email);
+ }
+ en = y_list_next(en);
+ }
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+}
+
+/*
+ * This service function creates an advanced search dialog in Find/Add contacts Custom area.
+ *
+ * Returns: 0 on failure or HWND on success
+ */
+
+static INT_PTR CALLBACK YahooSearchAdvancedDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch ( msg ) {
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hwndDlg);
+
+ SendDlgItemMessageA(hwndDlg, IDC_SEARCH_PROTOCOL, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Yahoo! Messenger");
+ SendDlgItemMessageA(hwndDlg, IDC_SEARCH_PROTOCOL, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Lotus Sametime");
+ SendDlgItemMessageA(hwndDlg, IDC_SEARCH_PROTOCOL, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"LCS");
+ SendDlgItemMessageA(hwndDlg, IDC_SEARCH_PROTOCOL, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Windows Live (MSN)");
+
+ // select the first one
+ SendDlgItemMessage(hwndDlg, IDC_SEARCH_PROTOCOL, CB_SETCURSEL, 0, 0);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+HWND __cdecl CYahooProto::CreateExtendedSearchUI( HWND parent )
+{
+ if ( parent && hInstance )
+ return CreateDialogParam( hInstance, MAKEINTRESOURCE(IDD_SEARCHUSER), parent, YahooSearchAdvancedDlgProc, ( LPARAM )this );
+
+ return 0;
+}
+
+void __cdecl CYahooProto::searchadv_thread(void *pHWND)
+{
+ HWND hwndDlg = (HWND) pHWND;
+
+ TCHAR searchid[128];
+ GetDlgItemText(hwndDlg, IDC_SEARCH_ID, searchid, 128);
+
+ if (lstrlen(searchid) == 0) {
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+ MessageBoxA(NULL, "Please enter a valid ID to search for.", "Search", MB_OK);
+ return;
+ }
+
+ PROTOSEARCHRESULT psr = { 0 };
+ psr.cbSize = sizeof(psr);
+ psr.flags = PSR_TCHAR;
+ psr.id = _tcslwr(searchid);
+
+ int pid = SendDlgItemMessage(hwndDlg , IDC_SEARCH_PROTOCOL, CB_GETCURSEL, 0, 0);
+ switch (pid){
+ case 0: psr.firstName = _T("<Yahoo >"); pid = YAHOO_IM_YAHOO; break;
+ case 1: psr.firstName = _T("<Lotus Sametime>"); pid = YAHOO_IM_SAMETIME;break;
+ case 2: psr.firstName = _T("<LCS>"); pid = YAHOO_IM_LCS; break;
+ case 3: psr.firstName = _T("<Windows Live (MSN)>"); pid = YAHOO_IM_MSN; break;
+ }
+
+ psr.reserved[0] = pid;
+
+ /*
+ * Show this in results
+ */
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE) 1, (LPARAM) & psr);
+
+ /*
+ * Done searching.
+ */
+ SendBroadcast(NULL, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+}
+
+/*
+ * This service function does the advanced search
+ *
+ * Returns: 0 on failure or HWND on success
+ */
+
+HWND __cdecl CYahooProto::SearchAdvanced( HWND owner )
+{
+ LOG(("[YahooAdvancedSearch]"));
+
+ if ( !m_bLoggedIn )
+ return 0;
+
+ YForkThread( &CYahooProto::searchadv_thread, owner );
+ return ( HWND )1;
+}
|