From 5fb7d6a8304db2236f46a6c7b33b0540fee11fd6 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Thu, 6 Mar 2014 19:03:12 +0000 Subject: Dropbox: - added first approach of options page - fixed tabsrmm button destruction git-svn-id: http://svn.miranda-ng.org/main/trunk@8430 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Dropbox/src/dropbox_dialogs.cpp | 124 +++++++++++++++++++++++++++----- 1 file changed, 107 insertions(+), 17 deletions(-) (limited to 'plugins/Dropbox/src/dropbox_dialogs.cpp') diff --git a/plugins/Dropbox/src/dropbox_dialogs.cpp b/plugins/Dropbox/src/dropbox_dialogs.cpp index 6c07e4f0bf..445da14a3f 100644 --- a/plugins/Dropbox/src/dropbox_dialogs.cpp +++ b/plugins/Dropbox/src/dropbox_dialogs.cpp @@ -17,9 +17,9 @@ INT_PTR CALLBACK CDropbox::TokenRequestProc(HWND hwndDlg, UINT msg, WPARAM wPara /*wchar_t title[MAX_PATH]; ::mir_sntprintf( - title, - MAX_PATH, - ::TranslateT("Enter a password for %s:"), + title, + MAX_PATH, + ::TranslateT("Enter a password for %s:"), param->login);*/ //::SetDlgItemText(hwndDlg, IDC_INSTRUCTION, title); @@ -32,24 +32,24 @@ INT_PTR CALLBACK CDropbox::TokenRequestProc(HWND hwndDlg, UINT msg, WPARAM wPara break; case WM_COMMAND: + { + switch (LOWORD(wParam)) { - switch (LOWORD(wParam)) - { - case IDOK: - { - char data[128]; - GetDlgItemTextA(hwndDlg, IDC_TOKEN, data, SIZEOF(data)); - strcpy(token, data); + case IDOK: + { + char data[128]; + GetDlgItemTextA(hwndDlg, IDC_TOKEN, data, SIZEOF(data)); + strcpy(token, data); - EndDialog(hwndDlg, IDOK); - } - break; + EndDialog(hwndDlg, IDOK); + } + break; - case IDCANCEL: - EndDialog(hwndDlg, IDCANCEL); - break; - } + case IDCANCEL: + EndDialog(hwndDlg, IDCANCEL); + break; } + } break; } @@ -58,5 +58,95 @@ INT_PTR CALLBACK CDropbox::TokenRequestProc(HWND hwndDlg, UINT msg, WPARAM wPara INT_PTR CALLBACK CDropbox::MainOptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { + switch (msg) + { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + { + CheckDlgButton(hwndDlg, IDC_USE_SHORT_LINKS, db_get_b(NULL, MODULE, "UseSortLinks", 1)); + } + return TRUE; + + case WM_COMMAND: + if (HIWORD(wParam) == STN_CLICKED) + { + switch (LOWORD(wParam)) + { + case IDC_GETAUTH: + CallService(MS_UTILS_OPENURL, 0, (LPARAM)DROPBOX_WWW_URL DROPBOX_API_VER "/oauth2/authorize?response_type=code&client_id=" DROPBOX_API_KEY); + break; + + case IDC_USE_SHORT_LINKS: + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + + case IDC_AUTHORIZE: + { + char request_token[128]; + GetDlgItemTextA(hwndDlg, IDC_REQUEST_CODE, request_token, SIZEOF(request_token)); + + char data[1024]; + mir_snprintf( + data, + SIZEOF(data), + "grant_type=authorization_code&code=%s", + request_token); + + HttpRequest *request = new HttpRequest(INSTANCE->hNetlibUser, REQUEST_POST, DROPBOX_API_URL "/oauth2/token"); + request->pData = mir_strdup(data); + request->dataLength = (int)strlen(data); + request->AddHeader("Content-Type", "application/x-www-form-urlencoded"); + request->AddBasicAuthHeader(DROPBOX_API_KEY, DROPBOX_API_SECRET); + + mir_ptr response(request->Send()); + + delete request; + + MCONTACT hContact = CDropbox::GetDefaultContact(); + + if (response) + { + JSONNODE *root = json_parse(response->pData); + if (root) + { + if (response->resultCode == HTTP_STATUS::OK) + { + JSONNODE *node = json_get(root, "access_token"); + ptrA access_token = ptrA(mir_u2a(json_as_string(node))); + db_set_s(NULL, MODULE, "TokenSecret", access_token); + + if (hContact) + { + if (db_get_w(hContact, MODULE, "Status", ID_STATUS_OFFLINE) == ID_STATUS_OFFLINE) + db_set_w(hContact, MODULE, "Status", ID_STATUS_ONLINE); + } + + ShowNotification(TranslateT("You have been authorized"), MB_ICONINFORMATION); + } + else + { + JSONNODE *node = json_get(root, "error_description"); + ptrW error_description(json_as_string(node)); + + ShowNotification((wchar_t*)error_description, MB_ICONERROR); + } + } + } + else + HandleFileTransferError(response, hContact); + + } + } + break; + } + break; + + case WM_NOTIFY: + if (reinterpret_cast(lParam)->code == PSN_APPLY) + { + db_set_b(NULL, MODULE, "UseSortLinks", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_USE_SHORT_LINKS)); + } + break; + } return FALSE; } \ No newline at end of file -- cgit v1.2.3