- Screen Saver (merge from 5.10): Add additional information about the work
running when no graphics are available. Increased the size to the box displaying the message to accommodate larger image sizes. Add code to center images if less then the allowed max size of 450x166 - Screen Saver (merge from 5.10): If graphics are not available, then rotate through the currently running results (it will change every 10 seconds) for display so that all are presented - Manager (merge from 5.10): During an auto-attach initiated by a project_init.xml file, Mozilla based browsers are checking cookies in the domain (ex: worldcommunitygrid.org) for a project while IE cookies were only being checked for the full project dns (www.worldcommunitygrid.org). IE has been changed so that it will also check the domain. This mechanism is generic and can be used by any project or account manager. - Manager (merge from 5.10): During an auto-attach initiated by a project_init.xml file, the code to check for the Setup cookie within an IE browser would fail and cause the attach to project dialogue to close with no warning in the event that there is a cookie set for the project but there is not a Setup cookie. - WCG files: Updated image, icon and installer files for WCG svn path=/trunk/boinc/; revision=13755
|
@ -9017,3 +9017,32 @@ David 2 Oct 2007
|
|||
gui_http.h
|
||||
lib/
|
||||
util.C
|
||||
|
||||
Kevin 2 Oct 2007
|
||||
- Screen Saver (merge from 5.10): Add additional information about the work
|
||||
running when no graphics are available. Increased the size to the box
|
||||
displaying the message to accommodate larger image sizes. Add code to
|
||||
center images if less then the allowed max size of 450x166
|
||||
- Screen Saver (merge from 5.10): If graphics are not available, then rotate
|
||||
through the currently running results (it will change every 10 seconds)
|
||||
for display so that all are presented
|
||||
- Manager (merge from 5.10): During an auto-attach initiated by a project_init.xml file, Mozilla
|
||||
based browsers are checking cookies in the domain (ex: worldcommunitygrid.org)
|
||||
for a project while IE cookies were only being checked for the full project
|
||||
dns (www.worldcommunitygrid.org). IE has been changed so that it will also
|
||||
check the domain. This mechanism is generic and can be used by any project or
|
||||
account manager.
|
||||
- Manager (merge from 5.10): During an auto-attach initiated by a project_init.xml file,
|
||||
the code to check for the Setup cookie within an IE browser would fail and cause
|
||||
the attach to project dialogue to close with no warning in the event that there
|
||||
is a cookie set for the project but there is not a Setup cookie.
|
||||
- WCG files: Updated image, icon and installer files for WCG
|
||||
|
||||
clientgui/
|
||||
browser.C
|
||||
clientscr/
|
||||
screensaver_win.cpp
|
||||
screensaver_win.h
|
||||
|
||||
|
||||
|
||||
|
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
@ -427,7 +427,7 @@ bool detect_setup_authenticator_firefox(
|
|||
//
|
||||
bool detect_setup_authenticator_ie(std::string& project_url, std::string& authenticator)
|
||||
{
|
||||
bool bReturnValue = FALSE;
|
||||
bool bReturnValue = false;
|
||||
char szCookieBuffer[2048];
|
||||
char* pszCookieFragment = NULL;
|
||||
DWORD dwSize = sizeof(szCookieBuffer)/sizeof(char);
|
||||
|
@ -435,10 +435,21 @@ bool detect_setup_authenticator_ie(std::string& project_url, std::string& authen
|
|||
std::string strCookieName;
|
||||
std::string strCookieValue;
|
||||
size_t uiDelimeterLocation;
|
||||
std::string hostname;
|
||||
|
||||
|
||||
// if we don't find the cookie at the exact project dns name, check one higher (i.e. www.worldcommunitygrid.org becomes
|
||||
// worldcommunitygrid.org
|
||||
parse_hostname(project_url, hostname);
|
||||
|
||||
bReturnValue = InternetGetCookie(project_url.c_str(), NULL, szCookieBuffer, &dwSize) == TRUE;
|
||||
if (!bReturnValue) bReturnValue = InternetGetCookie(hostname.c_str(), NULL, szCookieBuffer, &dwSize) == TRUE;
|
||||
if (bReturnValue)
|
||||
{
|
||||
// reset this becuase at this point we just know that we found some cookies for the website. We don't
|
||||
// know if we actually found the Setup cookie
|
||||
//
|
||||
bReturnValue = false;
|
||||
// Format of cookie buffer:
|
||||
// 'cookie1=value1; cookie2=value2; cookie3=value3;
|
||||
//
|
||||
|
@ -460,7 +471,9 @@ bool detect_setup_authenticator_ie(std::string& project_url, std::string& authen
|
|||
if (!is_authenticator_valid(strCookieValue)) {
|
||||
authenticator = "";
|
||||
} else {
|
||||
// Now we found it! Yea - auto attach!
|
||||
authenticator = strCookieValue;
|
||||
bReturnValue = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
@ -862,8 +862,12 @@ BOOL CScreensaver::SetError(BOOL bErrorMode, HRESULT hrError) {
|
|||
// Update the error message
|
||||
//
|
||||
VOID CScreensaver::UpdateErrorBoxText() {
|
||||
RESULTS results;
|
||||
PROJECT* pProject;
|
||||
TCHAR szBuffer[256];
|
||||
bool bIsActive = false;
|
||||
bool bIsExecuting = false;
|
||||
bool bIsDownloaded = false;
|
||||
size_t iResultCount = 0;
|
||||
size_t iIndex = 0;
|
||||
|
||||
|
@ -872,18 +876,38 @@ VOID CScreensaver::UpdateErrorBoxText() {
|
|||
GetTextForError(m_hrError, m_szError, sizeof(m_szError) / sizeof(TCHAR));
|
||||
if (SCRAPPERR_BOINCNOGRAPHICSAPPSEXECUTING == m_hrError) {
|
||||
iResultCount = results.results.size();
|
||||
int iModIndex;
|
||||
for (iIndex = 0; iIndex < iResultCount; iIndex++) {
|
||||
// cycle through the active results starting from the last one
|
||||
iModIndex = (iIndex + m_iLastResultShown+1) % iResultCount;
|
||||
bIsDownloaded = (RESULT_FILES_DOWNLOADED == results.results.at(iModIndex)->state);
|
||||
bIsActive = (results.results.at(iModIndex)->active_task);
|
||||
bIsExecuting = (CPU_SCHED_SCHEDULED == results.results.at(iModIndex)->scheduler_state);
|
||||
if (!(bIsActive) || !(bIsDownloaded) || !(bIsExecuting)) continue;
|
||||
pProject = state.lookup_project(results.results.at(iIndex)->project_url);
|
||||
if (NULL != pProject) {
|
||||
StringCbPrintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR),
|
||||
_T("%s: %.2f%%\n"),
|
||||
pProject->project_name.c_str(),
|
||||
results.results.at(iIndex)->fraction_done * 100
|
||||
);
|
||||
|
||||
StringCbCat(m_szError, sizeof(m_szError) / sizeof(TCHAR), szBuffer);
|
||||
RESULT* pResult = state.lookup_result(pProject, results.results.at(iModIndex)->name);
|
||||
if ( pResult != NULL ) {
|
||||
BOINCTRACE(_T("CScreensaver::UpdateErrorBoxText - Display result. iIndex=%d, iModIndex=%d, lastResult=%d\n"), iIndex, iModIndex, m_iLastResultShown);
|
||||
StringCbPrintf(m_szError, sizeof(m_szError) / sizeof(TCHAR),
|
||||
_T("\nRunning research for %s\nApplication: %s\nWorkunit: %s\n%.2f%% complete\n"),
|
||||
pProject->project_name.c_str(),
|
||||
pResult->app->user_friendly_name.c_str(),
|
||||
pResult->wu_name.c_str(),
|
||||
results.results.at(iModIndex)->fraction_done*100
|
||||
);
|
||||
if ( m_tLastResultChangeTime+10 < time(0) ) {
|
||||
m_iLastResultShown = iModIndex;
|
||||
m_tLastResultChangeTime = time(0);
|
||||
}
|
||||
break;
|
||||
} else {
|
||||
m_bResetCoreState = TRUE;
|
||||
GetTextForError(IDS_ERR_GENERIC, m_szError, sizeof(m_szError) / sizeof(TCHAR));
|
||||
}
|
||||
} else {
|
||||
m_bResetCoreState = TRUE;
|
||||
GetTextForError(IDS_ERR_GENERIC, m_szError, sizeof(m_szError) / sizeof(TCHAR));
|
||||
}
|
||||
}
|
||||
m_szError[ sizeof(m_szError) -1 ] = '\0';
|
||||
|
@ -1001,6 +1025,10 @@ DWORD WINAPI CScreensaver::DataManagementProc() {
|
|||
SetError(TRUE, SCRAPPERR_BOINCSCREENSAVERLOADING);
|
||||
tThreadCreateTime = time(0);
|
||||
|
||||
// Set the starting point for iterating through the results
|
||||
m_iLastResultShown = 0;
|
||||
m_tLastResultChangeTime = 0;
|
||||
|
||||
while(1) {
|
||||
bScreenSaverStarting = (3 >= (time(0) - tThreadCreateTime));
|
||||
|
||||
|
@ -1666,8 +1694,8 @@ VOID CScreensaver::UpdateErrorBox() {
|
|||
InvalidateRect(hwnd, NULL, FALSE); // Invalidate the hwnd so it gets drawn
|
||||
UpdateWindow(hwnd);
|
||||
} else {
|
||||
pMonitorInfo->widthError = 500;
|
||||
pMonitorInfo->heightError = 154;
|
||||
pMonitorInfo->widthError = 454;
|
||||
pMonitorInfo->heightError = 320;
|
||||
pMonitorInfo->xError = (rcBounds.right + rcBounds.left - pMonitorInfo->widthError) / 2.0f;
|
||||
pMonitorInfo->yError = (rcBounds.bottom + rcBounds.top - pMonitorInfo->heightError) / 2.0f;
|
||||
pMonitorInfo->xVelError = (rcBounds.right - rcBounds.left) / 10.0f;
|
||||
|
@ -1768,6 +1796,8 @@ VOID CScreensaver::DoPaint(HWND hwnd, HDC hdc, LPPAINTSTRUCT lpps) {
|
|||
(INT)(pMonitorInfo->xError + pMonitorInfo->widthError),
|
||||
(INT)(pMonitorInfo->yError + pMonitorInfo->heightError)
|
||||
);
|
||||
// This fill rect is useful when testing
|
||||
// FillRect(hdc, &rc, hbrushRed);
|
||||
rcOrginal = rc;
|
||||
|
||||
|
||||
|
@ -1775,17 +1805,29 @@ VOID CScreensaver::DoPaint(HWND hwnd, HDC hdc, LPPAINTSTRUCT lpps) {
|
|||
// it. the bitmap is centered in the rectangle by adding 2
|
||||
// to the left and top coordinates of the bitmap rectangle,
|
||||
// and subtracting 4 from the right and bottom coordinates.
|
||||
DrawTransparentBitmap(hdc, hbmp, (rc.left + 2), (rc.top + 2), RGB(255, 0, 255));
|
||||
rc.left += 166;
|
||||
BITMAP bm;
|
||||
GetObject(hbmp, sizeof(BITMAP), (LPSTR)&bm);
|
||||
|
||||
long left = rc.left + (pMonitorInfo->widthError - 4 - bm.bmWidth)/2;
|
||||
long top = rc.top + 2;
|
||||
DrawTransparentBitmap(hdc, hbmp, left, top, RGB(255, 0, 255));
|
||||
|
||||
// Draw text in the center of the frame
|
||||
SetBkColor(hdc, RGB(0,0,0)); // Black
|
||||
SetTextColor(hdc, RGB(255,255,255)); // Red
|
||||
|
||||
|
||||
// Set font
|
||||
HFONT hf;
|
||||
hf = CreateFont(0, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial Narrow");
|
||||
|
||||
if(hf)
|
||||
{
|
||||
SelectObject(hdc, hf);
|
||||
}
|
||||
rc2 = rc;
|
||||
iTextHeight = DrawText(hdc, szError, -1, &rc, DT_CENTER | DT_CALCRECT);
|
||||
rc = rc2;
|
||||
rc2.top = (rc.bottom + rc.top - iTextHeight) / 2;
|
||||
rc2.top+=bm.bmHeight+20;
|
||||
DrawText(hdc, szError, -1, &rc2, DT_CENTER);
|
||||
}
|
||||
|
||||
|
|
|
@ -183,6 +183,8 @@ protected:
|
|||
HANDLE m_hGraphicsApplication;
|
||||
BOOL m_bScreensaverStarted;
|
||||
BOOL m_bResetCoreState;
|
||||
int m_iLastResultShown;
|
||||
time_t m_tLastResultChangeTime;
|
||||
|
||||
|
||||
//
|
||||
|
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1,5 @@
|
|||
<account>
|
||||
<master_url>http://www.worldcommunitygrid.org/</master_url>
|
||||
<authenticator></authenticator>
|
||||
<project_name>World Community Grid</project_name>
|
||||
</account>
|
|
@ -0,0 +1,7 @@
|
|||
<cc_config>
|
||||
<log_flags>
|
||||
</log_flags>
|
||||
<options>
|
||||
<dont_contact_ref_site>1</dont_contact_ref_site>
|
||||
</options>
|
||||
</cc_config>
|
|
@ -0,0 +1,152 @@
|
|||
//
|
||||
// IIIIIII SSSSSS
|
||||
// II SS InstallShield (R)
|
||||
// II SSSSSS (c) 1996-2002, InstallShield Software Corporation
|
||||
// II SS All rights reserved.
|
||||
// IIIIIII SSSSSS
|
||||
//
|
||||
//
|
||||
// This template script provides the code necessary to build an entry-point
|
||||
// function to be called in an InstallScript custom action.
|
||||
// Two major functions:
|
||||
// CheckUnitedDevices: Check whether there is a previous World Community Agent ( United Devices)
|
||||
// DeleteUnitedDevices: Delete United Devices
|
||||
//
|
||||
//
|
||||
// File Name: Setup.rul
|
||||
//
|
||||
// Description: InstallShield script
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// Include Ifx.h for built-in InstallScript function prototypes, for Windows
|
||||
// Installer API function prototypes and constants, and to declare code for
|
||||
// the OnBegin and OnEnd events.
|
||||
#include "ifx.h"
|
||||
|
||||
//including constants
|
||||
#include "constants.rul"
|
||||
|
||||
// Include header file for built-in functions
|
||||
#include "isrt.h"
|
||||
// Include header file for MSI API functions and constants
|
||||
#include "iswi.h"
|
||||
|
||||
|
||||
// The keyword export identifies the function as an entry-point function.
|
||||
// The argument it accepts must be a handle to the Installer database.
|
||||
export prototype DeleteUnitedDevices(HWND);
|
||||
export prototype CheckUnitedDevices(HWND);
|
||||
// To Do: Declare global variables, define constants, and prototype user-
|
||||
// defined and DLL functions here.
|
||||
|
||||
|
||||
// To Do: Create a custom action for this entry-point function:
|
||||
// 1. Right-click on "Custom Actions" in the Sequences/Actions view.
|
||||
// 2. Select "Custom Action Wizard" from the context menu.
|
||||
// 3. Proceed through the wizard and give the custom action a unique name.
|
||||
// 4. Select "Run InstallScript code" for the custom action type, and in
|
||||
// the next panel select "DeleteUnitedDevices" (or the new name of the entry-
|
||||
// point function) for the source.
|
||||
// 5. Click Next, accepting the default selections until the wizard
|
||||
// creates the custom action.
|
||||
//
|
||||
// Once you have made a custom action, you must execute it in your setup by
|
||||
// inserting it into a sequence or making it the result of a dialog's
|
||||
// control event.
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Function: DeleteUnitedDevices
|
||||
//
|
||||
// Purpose: This function will be called by the script engine when
|
||||
// Windows(TM) Installer executes your custom action (see the "To
|
||||
// Do," above).
|
||||
// This Script is used to delete United Devices
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function DeleteUnitedDevices(hMSI)
|
||||
// To Do: Declare local variables.
|
||||
STRING svName;
|
||||
NUMBER nvSize;
|
||||
|
||||
begin
|
||||
// MsiSetProperty(hMSI, "UDProcess", "NotDoneUD");
|
||||
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
|
||||
|
||||
// Script that will be executed when DeleteUnitedDevices is called.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
nvSize = 256;
|
||||
|
||||
// if (RegDBKeyExist (WCG_UD_KEY) < 0) then
|
||||
// MessageBox (NO_UD_MSG+"ininstallscriptsetup", SEVERE);
|
||||
// else
|
||||
|
||||
// LaunchApp(KILL_UD_PROCESS, KILL_UD_PROCESS_PARAM);
|
||||
if (LaunchAppAndWait ("MsiExec.exe ", UD_UNINSTALL_PARAM,LAAW_OPTION_WAIT) < 0) then
|
||||
MessageBox (UD_UNABLE_UNINSTALL_MSG, SEVERE);
|
||||
else
|
||||
MsiSetProperty(hMSI, "UDAVAILABLE", "No");
|
||||
endif;
|
||||
|
||||
// endif;
|
||||
|
||||
// MsiSetProperty(hMSI, "UDProcess", "DoneUD");
|
||||
// MsiGetProperty(hMSI, "UDProcess",svName, nvSize);
|
||||
// MessageBox ("the value of the UDPRocess in checkud function is "+svName+" for testing", INFORMATION);
|
||||
|
||||
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// To Do: Create a custom action for this entry-point function:
|
||||
// 1. Right-click on "Custom Actions" in the Sequences/Actions view.
|
||||
// 2. Select "Custom Action Wizard" from the context menu.
|
||||
// 3. Proceed through the wizard and give the custom action a unique name.
|
||||
// 4. Select "Run InstallScript code" for the custom action type, and in
|
||||
// the next panel select "checkUnitedDevices" (or the new name of the entry-
|
||||
// point function) for the source.
|
||||
// 5. Click Next, accepting the default selections until the wizard
|
||||
// creates the custom action.
|
||||
//
|
||||
// Once you have made a custom action, you must execute it in your setup by
|
||||
// inserting it into a sequence or making it the result of a dialog's
|
||||
// control event.
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Function: CheckUnitedDevices
|
||||
//
|
||||
// Purpose: This function will be called by the script engine when
|
||||
// Windows(TM) Installer executes your custom action (see the "To
|
||||
// Do," above).
|
||||
// This Script is used to check whether United Devices is present
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
function CheckUnitedDevices(hMSI)
|
||||
// To Do: Declare local variables.
|
||||
STRING svName1;
|
||||
NUMBER nvSize;
|
||||
|
||||
begin
|
||||
|
||||
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
|
||||
nvSize = 256;
|
||||
// Script that will be executed when CheckUnitedDevices is called.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
MsiSetProperty(hMSI, "UDAVAILABLE", "dontknow");
|
||||
if (RegDBKeyExist (WCG_UD_KEY) < 0) then
|
||||
// MessageBox (NO_UD_MSG, SEVERE);
|
||||
MsiSetProperty(hMSI, "UDAVAILABLE", "No");
|
||||
else
|
||||
MsiSetProperty(hMSI, "UDAVAILABLE", "Yes");
|
||||
endif;
|
||||
MsiGetProperty(hMSI, "UDAVAILABLE",svName1, nvSize);
|
||||
//MessageBox ("the value of the CheckedUD is "+svName1+" for testing", INFORMATION);
|
||||
// MsiSetProperty(hMSI, "UDProcess", "DoneUD");
|
||||
// MsiGetProperty(hMSI, "UDProcess",svName1, nvSize);
|
||||
// MessageBox ("the value of the UDPRocess in checkud function is "+svName1+" for testing", INFORMATION);
|
||||
end;
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
|
||||
#define TITLE_TEXT "RegDBKeyExist"
|
||||
#define NO_UD_MSG "cool UD Doesn't exist"
|
||||
// #define UD_ASK_UNISTALL "There is Previous World Community Group Agent(United Devices) on your pc , it is highly recommended to delete it before installing the Latest BOINC Client, click on yes if you want to remove it"
|
||||
#define UD_UNABLE_UNINSTALL_MSG "Unable to unistall UD"
|
||||
|
||||
#define KILL_UD_PROCESS "taskkill"
|
||||
#define KILL_UD_PROCESS_PARAM "/t /f /im UD.exe"
|
||||
|
||||
#define WCG_UD_GID "{3CEA3FEC-1AF5-4818-89D5-406F627E7337}"
|
||||
// The SUB KEY PATH OF UD SOFTWARE
|
||||
#define WCG_UD_KEY_PATH "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
|
||||
// The SUB KEY PATH INCLUDING THE GID OF UD SOFTWARE
|
||||
#define WCG_UD_KEY WCG_UD_KEY_PATH+WCG_UD_GID
|
||||
|
||||
//THE CMD LINE PARAM FOR UNINSTALLING UD
|
||||
#define UD_UNINSTALL_PARAM "/quiet /X"+WCG_UD_GID
|
After Width: | Height: | Size: 3.2 KiB |