*** empty log message ***

svn path=/trunk/boinc/; revision=9432
This commit is contained in:
Rom Walton 2006-02-09 21:51:07 +00:00
parent 4a571ea68c
commit a32b03a98d
8 changed files with 506 additions and 314 deletions

View File

@ -1682,3 +1682,14 @@ Bruce 9 Feb 2006
ops/
manage_special_users.php
Rom 9 Feb 2006
- Integrate BOINC Manager into David's last API change.
- Breakout the dial up functionality into its own class.
- Increase the refresh rate of the list view to 1 second.
- Terminology change in the project tab. credit = work done.
clientgui/
BOINCDialupManager.cpp, .h (Added)
MainFrame.cpp, .h
ViewProjects.cpp

View File

@ -0,0 +1,407 @@
// Berkeley Open Infrastructure for Network Computing
// http://boinc.berkeley.edu
// Copyright (C) 2005 University of California
//
// This is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
//
// This software 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 Lesser General Public License for more details.
//
// To view the GNU Lesser General Public License visit
// http://www.gnu.org/copyleft/lesser.html
// or write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma implementation "BOINCDialUpManager.h"
#endif
#include "stdwx.h"
#include "network.h"
#include "BOINCGUIApp.h"
#include "diagnostics.h"
#include "BOINCDialUpManager.h"
#include "DlgOptions.h"
#include "DlgDialupCredentials.h"
CBOINCDialUpManager::CBOINCDialUpManager() {
m_pDialupManager = wxDialUpManager::Create();
wxASSERT(m_pDialupManager->IsOk());
m_dtLastDialupAlertSent = wxDateTime((time_t)0);
m_dtLastDialupRequest = wxDateTime((time_t)0);
m_dtFirstDialupDisconnectEvent = wxDateTime((time_t)0);
m_bNotifyConnectionAvailable = false;
m_bConnectedSuccessfully = false;
m_bResetTimers = false;
m_bWasDialing = false;
m_iNetworkStatus = 0;
// Construct the default dialog title for dial-up messages
//
// %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
m_strDialogTitle.Printf(
_("%s - Network Status"),
wxGetApp().GetBrand()->GetApplicationName().c_str()
);
}
CBOINCDialUpManager::~CBOINCDialUpManager() {
delete m_pDialupManager;
}
bool CBOINCDialUpManager::IsOk() {
return m_pDialupManager->IsOk();
}
size_t CBOINCDialUpManager::GetISPNames(wxArrayString& names) {
return m_pDialupManager->GetISPNames(names);
}
void CBOINCDialUpManager::poll() {
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
bool bIsDialing = false;
bool bIsOnline = false;
bool bWantConnection = false;
bool bWantDisconnect = false;
int iNetworkStatus = 0;
long dwConnectionFlags =
NETWORK_ALIVE_LAN | NETWORK_ALIVE_WAN | NETWORK_ALIVE_AOL;
wxString strDialogMessage = wxEmptyString;
// We are ready to rock and roll.
if (pDoc) {
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
// cache the various states
// The dialup manager tells us if we are still dialing or if we have
// successfully connected. IsNetworkAlive/IsOnline both report the
// success or failure of the dialup device to establish a connection
// to the outside world.
pDoc->rpc.network_status(iNetworkStatus);
bIsDialing = m_pDialupManager->IsDialing();
bIsOnline = wxGetApp().IsNetworkAlive(&dwConnectionFlags) ? true : false;
bWantConnection = iNetworkStatus == 1 ? true : false;
bWantDisconnect = iNetworkStatus == 2 ? true : false;
// The timers are used to keep from spamming the user with the same
// messages over each iteration of the poll loop. we only need to
// reset them during a connect event in case we randomly loose
// a connection.
if (m_bResetTimers) {
wxLogTrace(wxT("Function Status"), wxT("CBOINCDialUpManager::poll - Resetting dial-up notification timers"));
m_bResetTimers = false;
m_dtLastDialupAlertSent = wxDateTime((time_t)0);
m_dtLastDialupRequest = wxDateTime((time_t)0);
}
if (!bIsOnline && !bIsDialing && !m_bWasDialing && bWantConnection)
{
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Internet connection needed"));
if (!pFrame->IsShown()) {
// BOINC Manager is hidden and displaying a dialog might interupt what they
// are doing.
NotifyNeedConnection();
} else {
// BOINC Manager is visable and can process user input.
Connect();
}
} else if (!bIsDialing && !m_bWasDialing) {
if (bIsOnline && bWantConnection && m_bConnectedSuccessfully && !m_bNotifyConnectionAvailable) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Connection Detected, notifing user of update to all projects"));
ConnectionDetected();
} else if (bIsOnline && bWantDisconnect && m_bConnectedSuccessfully ) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Connection Detected, disconnect requested via the CC."));
Disconnect();
}
} else if (!bIsDialing && m_bWasDialing) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - We were dialing and now we are not, detect success or failure of the connection."));
m_bWasDialing = false;
m_bResetTimers = true;
if (bIsDialing) {
ConnectionSucceeded();
} else {
ConnectionFailed();
}
} else if (bIsDialing && !m_bWasDialing) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - We are now dialing, where before we were not."));
m_bWasDialing = true;
}
}
}
int CBOINCDialUpManager::NotifyNeedConnection() {
CMainFrame* pFrame = wxGetApp().GetFrame();
wxTimeSpan tsLastDialupAlertSent;
wxString strDialogMessage = wxEmptyString;
wxASSERT(pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
tsLastDialupAlertSent = wxDateTime::Now() - m_dtLastDialupAlertSent;
if (tsLastDialupAlertSent.GetSeconds() >= (pFrame->GetReminderFrequency() * 60)) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Manager not shown, notify instead"));
m_dtLastDialupAlertSent = wxDateTime::Now();
// 1st %s is the project name
// i.e. 'BOINC', 'GridRepublic'
// 2st %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogMessage.Printf(
_("%s needs a connection to the Internet to perform some "
"maintenance, open the %s to connect up and "
"perform the needed work."),
wxGetApp().GetBrand()->GetProjectName().c_str(),
wxGetApp().GetBrand()->GetApplicationName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
}
return 0;
}
int CBOINCDialUpManager::Connect() {
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
wxTimeSpan tsLastDialupRequest;
int iAnswer;
wxString strConnectionName = wxEmptyString;
wxString strConnectionUsername = wxEmptyString;
wxString strConnectionPassword = wxEmptyString;
wxString strDialogMessage = wxEmptyString;
wxASSERT(pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
tsLastDialupRequest = wxDateTime::Now() - m_dtLastDialupRequest;
if (tsLastDialupRequest.GetSeconds() >= (pFrame->GetReminderFrequency() * 60)) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Begin connection process"));
m_dtLastDialupRequest = wxDateTime::Now();
if(pDoc->state.global_prefs.confirm_before_connecting) {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s needs to connect to the network.\nMay it do so now?"),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
iAnswer = ::wxMessageBox(
strDialogMessage,
m_strDialogTitle,
wxYES_NO | wxICON_QUESTION,
pFrame
);
} else {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s is connecting to the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
iAnswer = wxYES;
}
// Are we allow to connect?
if (wxYES == iAnswer) {
if (pFrame->GetDialupConnectionName().size()) {
strConnectionName = pFrame->GetDialupConnectionName();
}
if (pFrame->GetDialupPromptForCredentials()) {
CDlgDialupCredentials* pDlgDialupCredentials = new CDlgDialupCredentials(pFrame);
iAnswer = pDlgDialupCredentials->ShowModal();
if (wxID_OK == iAnswer) {
strConnectionUsername = pDlgDialupCredentials->GetUsername();
strConnectionPassword = pDlgDialupCredentials->GetPassword();
}
if (pDlgDialupCredentials) {
pDlgDialupCredentials->Destroy();
}
}
m_bNotifyConnectionAvailable = false;
m_bConnectedSuccessfully = false;
m_pDialupManager->Dial(strConnectionName, strConnectionUsername, strConnectionPassword, true);
}
}
return 0;
}
int CBOINCDialUpManager::ConnectionSucceeded() {
CMainFrame* pFrame = wxGetApp().GetFrame();
wxString strDialogMessage = wxEmptyString;
wxASSERT(pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s has successfully connected to the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
m_bConnectedSuccessfully = true;
return 0;
}
int CBOINCDialUpManager::ConnectionFailed() {
CMainFrame* pFrame = wxGetApp().GetFrame();
wxString strDialogMessage = wxEmptyString;
wxASSERT(pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s failed to connect to the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_ERROR,
true
);
m_bConnectedSuccessfully = false;
return 0;
}
int CBOINCDialUpManager::ConnectionDetected() {
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
wxString strDialogMessage = wxEmptyString;
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
m_bNotifyConnectionAvailable = true;
// We are already online but BOINC for some reason is in a state
// where it belives it has some pending work to do, so give it
// a nudge
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s has detected it is now connected to the internet. "
"Updating all projects and retrying all transfers."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
// Signal BOINC to update all projects and transfers.
pDoc->rpc.network_available();
return 0;
}
int CBOINCDialUpManager::Disconnect() {
CMainDocument* pDoc = wxGetApp().GetDocument();
CMainFrame* pFrame = wxGetApp().GetFrame();
wxString strDialogMessage = wxEmptyString;
wxASSERT(pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(pFrame);
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
if (pDoc->state.global_prefs.hangup_if_dialed) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Connection Detected, Don't need the network, Hanging up."));
if (m_pDialupManager->HangUp()) {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s has successfully disconnected from the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
m_bConnectedSuccessfully = false;
} else {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s failed to disconnected from the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
pFrame->ShowAlert(
m_strDialogTitle,
strDialogMessage,
wxICON_ERROR
);
}
}
return 0;
}

View File

@ -0,0 +1,66 @@
// Berkeley Open Infrastructure for Network Computing
// http://boinc.berkeley.edu
// Copyright (C) 2005 University of California
//
// This is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
//
// This software 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 Lesser General Public License for more details.
//
// To view the GNU Lesser General Public License visit
// http://www.gnu.org/copyleft/lesser.html
// or write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#ifndef _BOINCDIALUPMANAGER_H_
#define _BOINCDIALUPMANAGER_H_
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "BOINCDialUpManager.cpp"
#endif
class CBOINCDialUpManager : public wxObject
{
public:
CBOINCDialUpManager();
~CBOINCDialUpManager();
bool IsOk();
size_t GetISPNames(wxArrayString& names);
void poll();
int NotifyNeedConnection();
int Connect();
int ConnectionSucceeded();
int ConnectionFailed();
int ConnectionDetected();
int Disconnect();
protected:
wxDialUpManager* m_pDialupManager;
wxDateTime m_dtLastDialupAlertSent;
wxDateTime m_dtLastDialupRequest;
wxDateTime m_dtFirstDialupDisconnectEvent;
bool m_bNotifyConnectionAvailable;
bool m_bConnectedSuccessfully;
bool m_bResetTimers;
bool m_bWasDialing;
int m_iNetworkStatus;
wxString m_strDialogTitle;
};
#endif

View File

@ -27,11 +27,11 @@
#include "stdwx.h"
#include "hyperlink.h"
#include "network.h"
#include "BOINCGUIApp.h"
#include "MainFrame.h"
#include "Events.h"
#include "BOINCBaseView.h"
#include "BOINCDialUpManager.h"
#include "ViewProjects.h"
#include "ViewWork.h"
#include "ViewTransfers.h"
@ -39,7 +39,6 @@
#include "ViewStatistics.h"
#include "ViewResources.h"
#include "DlgAbout.h"
#include "DlgDialupCredentials.h"
#include "DlgGenericMessage.h"
#include "DlgOptions.h"
#include "DlgSelectComputer.h"
@ -230,7 +229,7 @@ CMainFrame::CMainFrame(wxString title, wxIcon* icon) :
// wxDialUpManager->IsAlwaysOnline happen quicker.
m_WININET.Load(wxT("WININET"));
if (m_RASAPI32.Load(wxT("RASAPI32"))) {
m_pDialupManager = wxDialUpManager::Create();
m_pDialupManager = new CBOINCDialUpManager();
wxASSERT(m_pDialupManager->IsOk());
} else {
m_pDialupManager = NULL;
@ -251,7 +250,7 @@ CMainFrame::CMainFrame(wxString title, wxIcon* icon) :
m_pRefreshStateTimer->Start(300000); // Send event every 5 minutes
m_pFrameRenderTimer->Start(1000); // Send event every 1 second
m_pFrameListPanelRenderTimer->Start(5000); // Send event every 5 seconds
m_pFrameListPanelRenderTimer->Start(1000); // Send event every 1 second
m_pDocumentPollTimer->Start(250); // Send event every 250 milliseconds
// Limit the number of times the UI can update itself to two times a second
@ -1698,315 +1697,12 @@ void CMainFrame::OnFrameRender(wxTimerEvent &event) {
bAlreadyRunOnce = true;
}
// Check to see if there is anything that we need to do from the
// dial up user perspective.
#ifdef __WXMSW__
if (pDoc->IsConnected()) {
static wxDateTime dtLastDialupIsAlreadyOnlineCheck = wxDateTime((time_t)0);
static wxDateTime dtLastDialupAlertSent = wxDateTime((time_t)0);
static wxDateTime dtLastDialupRequest = wxDateTime((time_t)0);
static wxDateTime dtFirstDialupDisconnectEvent = wxDateTime((time_t)0);
static bool already_notified_update_all_projects = false;
static bool connected_successfully = false;
static bool reset_timers = false;
static bool was_dialing = false;
static bool is_already_online = true;
bool should_check_connection = false;
bool is_dialing = false;
bool is_online = false;
int want_network = 0;
int answer = 0;
long dwConnectionFlags =
NETWORK_ALIVE_LAN | NETWORK_ALIVE_WAN | NETWORK_ALIVE_AOL;
wxString strConnectionName = wxEmptyString;
wxString strConnectionUsername = wxEmptyString;
wxString strConnectionPassword = wxEmptyString;
wxString strBuffer = wxEmptyString;
wxTimeSpan tsLastDialupIsAlreadyOnlineCheck;
wxTimeSpan tsLastDialupAlertSent;
wxTimeSpan tsLastDialupRequest;
wxTimeSpan tsFirstDialupDisconnectEvent;
wxString strDialogTitle = wxEmptyString;
wxString strDialogMessage = wxEmptyString;
// Construct the default dialog title for dial-up messages
//
// %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogTitle.Printf(
_("%s - Network Status"),
wxGetApp().GetBrand()->GetApplicationName().c_str()
);
if (m_pDialupManager && pDoc) {
// Update the always online flag every 60 seconds. This call is expensive
// on slow machines.
tsLastDialupIsAlreadyOnlineCheck = wxDateTime::Now() - dtLastDialupIsAlreadyOnlineCheck;
if (tsLastDialupIsAlreadyOnlineCheck.GetSeconds() > 60) {
dtLastDialupIsAlreadyOnlineCheck = wxDateTime::Now();
is_already_online = wxGetApp().IsNetworkAlwaysOnline() ? true : false;
}
// Are we configured to detect a network or told one already exists?
if (ID_NETWORKLAN != m_iNetworkConnectionType) {
if (ID_NETWORKDIALUP == m_iNetworkConnectionType) {
should_check_connection = true;
}
if (ID_NETWORKAUTODETECT == m_iNetworkConnectionType) {
if (!is_already_online) {
should_check_connection = true;
}
}
}
if (should_check_connection) {
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
// cache the various states
is_dialing = m_pDialupManager->IsDialing();
is_online = wxGetApp().IsNetworkAlive(&dwConnectionFlags) ? true : false;
pDoc->rpc.network_query(want_network);
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Dialup Flags"));
wxLogTrace(wxT("Function Status"),
wxT("CMainFrame::OnFrameRender - -- is_online = '%d', is_dialing = '%d', was_dialing = '%d', want_network = '%d'"),
is_online, is_dialing, was_dialing, want_network
);
wxLogTrace(wxT("Function Status"),
wxT("CMainFrame::OnFrameRender - -- reset_timers = '%d', already_notified_update_all_projects = '%d', connected_successfully = '%d'"),
reset_timers, already_notified_update_all_projects, connected_successfully
);
wxLogTrace(wxT("Function Status"),
wxT("CMainFrame::OnFrameRender - -- confirm_before_connecting = '%d', hangup_if_dialed = '%d'"),
pDoc->state.global_prefs.confirm_before_connecting, pDoc->state.global_prefs.hangup_if_dialed
);
// If we have received any connection event, then we should reset the
// dtLastDialupAlertSent and dtLastDialupRequest variables
// so that if we are disconnected without completing the user will
// be notifed in a prompt fashion.
if (reset_timers) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Resetting dial-up notification timers"));
reset_timers = false;
dtLastDialupAlertSent = wxDateTime((time_t)0);
dtLastDialupRequest = wxDateTime((time_t)0);
}
if (!is_online && !is_dialing && !was_dialing && want_network)
{
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Internet connection needed"));
if (!IsShown()) {
// BOINC Manager is hidden and displaying a dialog might interupt what they
// are doing.
tsLastDialupAlertSent = wxDateTime::Now() - dtLastDialupAlertSent;
if (tsLastDialupAlertSent.GetSeconds() >= (m_iReminderFrequency * 60)) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Manager not shown, notify instead"));
dtLastDialupAlertSent = wxDateTime::Now();
// 1st %s is the project name
// i.e. 'BOINC', 'GridRepublic'
// 2st %s is the application name
// i.e. 'BOINC Manager', 'GridRepublic Manager'
strDialogMessage.Printf(
_("%s needs a connection to the Internet to perform some "
"maintenance, open the %s to connect up and "
"perform the needed work."),
wxGetApp().GetBrand()->GetProjectName().c_str(),
wxGetApp().GetBrand()->GetApplicationName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
}
} else {
// BOINC Manager is visable and can process user input.
tsLastDialupRequest = wxDateTime::Now() - dtLastDialupRequest;
if (tsLastDialupRequest.GetSeconds() >= (m_iReminderFrequency * 60)) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Begin connection process"));
dtLastDialupRequest = wxDateTime::Now();
if(pDoc->state.global_prefs.confirm_before_connecting) {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s needs to connect to the network.\nMay it do so now?"),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
answer = ::wxMessageBox(
strDialogMessage,
strDialogTitle,
wxYES_NO | wxICON_QUESTION,
this
);
} else {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s is connecting to the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
answer = wxYES;
}
// Are we allow to connect?
if (wxYES == answer) {
if (m_strNetworkDialupConnectionName.size())
strConnectionName = m_strNetworkDialupConnectionName;
if (m_bNetworkDialupPromptCredentials) {
CDlgDialupCredentials* pDlgDialupCredentials = new CDlgDialupCredentials(this);
answer = pDlgDialupCredentials->ShowModal();
if (wxID_OK == answer) {
strConnectionUsername = pDlgDialupCredentials->GetUsername();
strConnectionPassword = pDlgDialupCredentials->GetPassword();
}
if (pDlgDialupCredentials) {
pDlgDialupCredentials->Destroy();
}
}
already_notified_update_all_projects = false;
connected_successfully = false;
m_pDialupManager->Dial(strConnectionName, strConnectionUsername, strConnectionPassword, true);
}
}
}
} else if (!is_dialing && !was_dialing) {
if (is_online && want_network && connected_successfully && !already_notified_update_all_projects) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Connection Detected, notifing user of update to all projects"));
already_notified_update_all_projects = true;
// We are already online but BOINC for some reason is in a state
// where it belives it has some pending work to do, so give it
// a nudge
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s has detected it is now connected to the internet. "
"Updating all projects and retrying all transfers."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
// Sleep for a couple of seconds to let the network interface finish
// initializing.
::wxSleep(2);
// Signal BOINC to update all projects and transfers.
pDoc->rpc.network_available();
} else if (is_online && !want_network && connected_successfully) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Connection Detected, Don't need the network, We successfully connected."));
// Should we disconnect now? The first time we see the disconnect event
// we should ignore it and wait for 5 seconds to see if it is really
// safe to disconnect.
if (wxDateTime((time_t)0) == dtFirstDialupDisconnectEvent) {
dtFirstDialupDisconnectEvent = wxDateTime::Now();
}
tsFirstDialupDisconnectEvent = wxDateTime::Now() - dtFirstDialupDisconnectEvent;
if (tsFirstDialupDisconnectEvent.GetSeconds() >= 5) {
if (pDoc->state.global_prefs.hangup_if_dialed) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - Connection Detected, Don't need the network, Hanging up."));
if (m_pDialupManager->HangUp()) {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s has successfully disconnected from the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
connected_successfully = false;
} else {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s failed to disconnected from the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_ERROR
);
}
}
}
}
} else if (!is_dialing && was_dialing) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - We were dialing and now we are not, detect success or failure of the connection."));
was_dialing = false;
reset_timers = true;
if (is_online) {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s has successfully connected to the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_INFORMATION,
true
);
connected_successfully = true;
} else {
// %s is the project name
// i.e. 'BOINC', 'GridRepublic'
strDialogMessage.Printf(
_("%s failed to connect to the internet."),
wxGetApp().GetBrand()->GetProjectName().c_str()
);
ShowAlert(
strDialogTitle,
strDialogMessage,
wxICON_ERROR,
true
);
connected_successfully = false;
}
} else if (is_dialing && !was_dialing) {
wxLogTrace(wxT("Function Status"), wxT("CMainFrame::OnFrameRender - We are now dialing, where before we were not."));
was_dialing = true;
}
}
if (m_pDialupManager) {
m_pDialupManager->poll();
}
}
#endif

View File

@ -46,6 +46,8 @@ private:
};
class CBOINCDialUpManager;
class CMainFrameEvent;
class CMainFrameAlertEvent;
@ -105,6 +107,10 @@ public:
void FireRefreshView();
void FireConnect();
int GetReminderFrequency() { return m_iReminderFrequency; }
wxString GetDialupConnectionName() { return m_strNetworkDialupConnectionName; }
bool GetDialupPromptForCredentials() { return m_bNetworkDialupPromptCredentials; }
void ShowConnectionBadPasswordAlert();
void ShowConnectionFailedAlert();
void ShowNotCurrentlyConnectedAlert();
@ -135,7 +141,7 @@ private:
#ifdef __WXMSW__
wxDynamicLibrary m_WININET;
wxDynamicLibrary m_RASAPI32;
wxDialUpManager* m_pDialupManager;
CBOINCDialUpManager* m_pDialupManager;
#endif
wxString m_strBaseTitle;

View File

@ -150,8 +150,8 @@ CViewProjects::CViewProjects(wxNotebook* pNotebook) :
m_pListPane->InsertColumn(COLUMN_PROJECT, _("Project"), wxLIST_FORMAT_LEFT, 150);
m_pListPane->InsertColumn(COLUMN_ACCOUNTNAME, _("Account"), wxLIST_FORMAT_LEFT, 80);
m_pListPane->InsertColumn(COLUMN_TEAMNAME, _("Team"), wxLIST_FORMAT_LEFT, 80);
m_pListPane->InsertColumn(COLUMN_TOTALCREDIT, _("Total credit"), wxLIST_FORMAT_RIGHT, 80);
m_pListPane->InsertColumn(COLUMN_AVGCREDIT, _("Avg. credit"), wxLIST_FORMAT_RIGHT, 80);
m_pListPane->InsertColumn(COLUMN_TOTALCREDIT, _("Work done"), wxLIST_FORMAT_RIGHT, 80);
m_pListPane->InsertColumn(COLUMN_AVGCREDIT, _("Avg. work done"), wxLIST_FORMAT_RIGHT, 80);
m_pListPane->InsertColumn(COLUMN_RESOURCESHARE, _("Resource share"), wxLIST_FORMAT_CENTRE, 85);
m_pListPane->InsertColumn(COLUMN_STATUS, _("Status"), wxLIST_FORMAT_LEFT, 150);

View File

@ -147,6 +147,9 @@
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath="..\clientgui\BOINCDialupManager.cpp">
</File>
<File
RelativePath="..\clientgui\BOINCGUIApp.cpp">
</File>
@ -226,6 +229,9 @@
<File
RelativePath="..\clientgui\_wx_intellisense.h">
</File>
<File
RelativePath="..\clientgui\BOINCDialupManager.h">
</File>
<File
RelativePath="..\clientgui\BOINCGUIApp.h">
</File>

Binary file not shown.