From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Gadu-Gadu/token.c | 178 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 protocols/Gadu-Gadu/token.c (limited to 'protocols/Gadu-Gadu/token.c') diff --git a/protocols/Gadu-Gadu/token.c b/protocols/Gadu-Gadu/token.c new file mode 100644 index 0000000000..44bfb1f794 --- /dev/null +++ b/protocols/Gadu-Gadu/token.c @@ -0,0 +1,178 @@ +//////////////////////////////////////////////////////////////////////////////// +// Gadu-Gadu Plugin for Miranda IM +// +// Copyright (c) 2003-2006 Adam Strzelecki +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +//////////////////////////////////////////////////////////////////////////////// + +#include "gg.h" + +#define MAX_LOADSTRING 100 +#define HIMETRIC_INCH 2540 +#define MAP_LOGHIM_TO_PIX(x,ppli) ( ((ppli)*(x) + HIMETRIC_INCH/2) / HIMETRIC_INCH ) + +//////////////////////////////////////////////////////////////////////////////// +// User Util Dlg Page : Data + +typedef struct _GGTOKENDLGDATA +{ + int width; + int height; + char id[256]; + char val[256]; + HBITMAP hBitmap; +} GGTOKENDLGDATA; + +INT_PTR CALLBACK gg_tokendlgproc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + GGTOKENDLGDATA *dat = (GGTOKENDLGDATA *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + + switch(msg) + { + case WM_INITDIALOG: + { + RECT rc; + TranslateDialogDefault(hwndDlg); + GetClientRect(GetDlgItem(hwndDlg, IDC_WHITERECT), &rc); + InvalidateRect(hwndDlg, &rc, TRUE); + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); + return TRUE; + } + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + { + GetDlgItemText(hwndDlg, IDC_TOKEN, dat->val, sizeof(dat->val)); + EndDialog(hwndDlg, IDOK); + break; + } + case IDCANCEL: + EndDialog(hwndDlg, IDCANCEL); + break; + } + break; + + case WM_PAINT: + { + PAINTSTRUCT paintStruct; + HDC hdc = BeginPaint(hwndDlg, &paintStruct); + RECT rc; GetClientRect(GetDlgItem(hwndDlg, IDC_WHITERECT), &rc); + FillRect(hdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); + + if(dat && dat->hBitmap) + { + HDC hdcBmp = NULL; + int nWidth, nHeight; + BITMAP bmp; + + GetObject(dat->hBitmap, sizeof(bmp), &bmp); + nWidth = bmp.bmWidth; nHeight = bmp.bmHeight; + + if(hdcBmp = CreateCompatibleDC(hdc)) + { + SelectObject(hdcBmp, dat->hBitmap); + SetStretchBltMode(hdc, HALFTONE); + BitBlt(hdc, + (rc.left + rc.right - nWidth) / 2, + (rc.top + rc.bottom - nHeight) / 2, + nWidth, nHeight, + hdcBmp, 0, 0, SRCCOPY); + DeleteDC(hdcBmp); + } + } + EndPaint(hwndDlg, &paintStruct); + return 0; + } + } + return FALSE; +} + +//////////////////////////////////////////////////////////////////////////////// +// Gets GG token +int gg_gettoken(GGPROTO *gg, GGTOKEN *token) +{ + struct gg_http *h = NULL; + struct gg_token *t = NULL; + IMGSRVC_MEMIO memio = {0}; + GGTOKENDLGDATA dat = {0}; + + // Zero tokens + strcpy(token->id, ""); + strcpy(token->val, ""); + + if(!(h = gg_token(0)) || gg_token_watch_fd(h) || h->state == GG_STATE_ERROR || h->state != GG_STATE_DONE) + { + char error[128]; + mir_snprintf(error, sizeof(error), Translate("Token retrieval failed because of error:\n\t%s"), http_error_string(h ? h->error : 0)); + MessageBox( + NULL, + error, + GG_PROTONAME, + MB_OK | MB_ICONSTOP + ); + gg_free_pubdir(h); + return FALSE; + } + + if (!(t = (struct gg_token *)h->data) || (!h->body)) + { + char error[128]; + mir_snprintf(error, sizeof(error), Translate("Token retrieval failed because of error:\n\t%s"), http_error_string(h ? h->error : 0)); + MessageBox( + NULL, + error, + GG_PROTONAME, + MB_OK | MB_ICONSTOP + ); + gg_free_pubdir(h); + return FALSE; + } + + // Return token id + strncpy(dat.id, t->tokenid, sizeof(dat.id)); + dat.width = t->width; + dat.height = t->height; + + // Load bitmap + memio.iLen = h->body_size; + memio.pBuf = (void *)h->body; + memio.fif = -1; /* detect */ + memio.flags = 0; + dat.hBitmap = (HBITMAP) CallService(MS_IMG_LOADFROMMEM, (WPARAM) &memio, 0); + if(dat.hBitmap == NULL) + { + MessageBox( + NULL, + Translate("Could not load token image."), + GG_PROTONAME, + MB_OK | MB_ICONSTOP + ); + gg_free_pubdir(h); + return FALSE; + } + + // Load token dialog + if(DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_TOKEN), NULL, gg_tokendlgproc, (LPARAM)&dat) == IDCANCEL) + return FALSE; + + // Fillup patterns + strncpy(token->id, dat.id, sizeof(token->id)); + strncpy(token->val, dat.val, sizeof(token->val)); + + return TRUE; +} -- cgit v1.2.3