winamp/Src/Plugins/General/gen_crasher/feedback/silent.cpp

134 lines
3.8 KiB
C++

#include ".\main.h"
#include <commctrl.h>
#include <shlobj.h>
#include "resource.h"
BOOL CALLBACK SilentDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
HICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ICON_XP));
SetClassLongPtr(hwndDlg, GCLP_HICON, (LONG_PTR)hIcon);
HWND hwndPrg = GetDlgItem(hwndDlg, IDC_PRG_COLLECT);
SendMessage(hwndPrg, PBM_SETRANGE, 0, MAKELPARAM(0,100));
SendMessage(hwndPrg, PBM_SETPOS, 0, 0);
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Starting reporter...");
ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON1), SW_HIDE);
ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), SW_HIDE);
UpdateWindow(hwndDlg);
if ((settings.createLOG && !settings.ReadLogCollectResult()) &&
(settings.createDMP && !settings.ReadDmpCollectResult()) )
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Error. Data was not generated.");
SendMessage(hwndPrg, PBM_SETPOS, 100, 0);
UpdateWindow(hwndDlg);
SetTimer(hwndDlg, 126, 2000, NULL);
break;
}
SetTimer(hwndDlg, 123, 500, NULL);
break;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
{
BOOL ret = FALSE;
wchar_t file[MAX_PATH] = {0};
lstrcpyn(file, settings.zipPath, MAX_PATH);
LPSHELLFOLDER pDesktopFolder = 0;
if(SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
{
LPITEMIDLIST filepidl = 0;
HRESULT hr = pDesktopFolder->ParseDisplayName(NULL,0,file,0,&filepidl,0);
if(FAILED(hr)){ pDesktopFolder->Release(); ret = FALSE; }
else
{
if(SUCCEEDED(SHOpenFolderAndSelectItems(filepidl,0,NULL,NULL))){
ret = TRUE;
}
}
}
if (ret == FALSE)
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Error. Unable to locate crash report.");
UpdateWindow(hwndDlg);
}
}
break;
case IDCANCEL:
case IDC_BUTTON2:
SetTimer(hwndDlg, 126, 1, NULL);
break;
}
break;
case WM_TIMER:
if (wParam == 123)
{
KillTimer(hwndDlg, wParam);
HWND hwndPrg;
hwndPrg = GetDlgItem(hwndDlg, IDC_PRG_COLLECT);
SendMessage(hwndPrg, PBM_SETPOS, 20, 0);
if (settings.zipData)
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Packing results...");
if(!ZipData())
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Error. Unable to pack results.");
SendMessage(hwndPrg, PBM_SETPOS, 100, 0);
UpdateWindow(hwndDlg);
SetTimer(hwndDlg, 126, 2000, NULL);
break;
}
}
SendMessage(hwndPrg, PBM_SETPOS, 40, 0);
UpdateWindow(hwndDlg);
if (settings.sendData)
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Sending results...");
UpdateWindow(hwndDlg);
if(!SendData(hwndDlg))
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Error. Unable to send crash report.");
SendMessage(hwndPrg, PBM_SETPOS, 100, 0);
ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON1), SW_SHOW);
ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), SW_SHOW);
ShowWindow(GetDlgItem(hwndDlg, IDC_PRG_COLLECT), SW_HIDE);
UpdateWindow(hwndDlg);
break;
}
}
if (settings.autoRestart)
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Restarting Winamp...");
SendMessage(hwndPrg, PBM_SETPOS, 80, 0);
UpdateWindow(hwndDlg);
if(!Restart())
{
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Error. Unable to restart Winamp.");
SendMessage(hwndPrg, PBM_SETPOS, 100, 0);
UpdateWindow(hwndDlg);
SetTimer(hwndDlg, 126, 2000, NULL);
break;
}
}
SetDlgItemText(hwndDlg, IDC_LBL_STEP, L"Done.");
SendMessage(hwndPrg, PBM_SETPOS, 100, 0);
UpdateWindow(hwndDlg);
SetTimer(hwndDlg, 126, 1000, NULL);
}
else if (wParam == 126)
{
KillTimer(hwndDlg, wParam);
EndDialog(hwndDlg, TRUE);
}
break;
}
return FALSE;
}