📄 dlgurlaction.cpp
字号:
//
// DlgURLAction.cpp
//
// Copyright (c) Shareaza Development Team, 2002-2004.
// This file is part of SHAREAZA (www.shareaza.com)
//
// Shareaza 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.
//
// Shareaza 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 Shareaza; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
#include "StdAfx.h"
#include "Shareaza.h"
#include "Settings.h"
#include "ShareazaURL.h"
#include "Download.h"
#include "Downloads.h"
#include "Transfers.h"
#include "Network.h"
#include "Library.h"
#include "SharedFile.h"
#include "HostCache.h"
#include "DiscoveryServices.h"
#include "Skin.h"
#include "DlgURLAction.h"
#include "WndMain.h"
#include "WndSearch.h"
#include "WndDownloads.h"
#include "WndBrowseHost.h"
#include "TigerTree.h"
#include "SHA.h"
#include "MD5.h"
#include "ED2K.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(CURLActionDlg, CSkinDialog)
//{{AFX_MSG_MAP(CURLActionDlg)
ON_BN_CLICKED(IDC_URL_DOWNLOAD, OnUrlDownload)
ON_BN_CLICKED(IDC_URL_SEARCH, OnUrlSearch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CURLActionDlg construction
CURLActionDlg::CURLActionDlg(CWnd* pParent, CShareazaURL* pURL, BOOL bMultiple) : CSkinDialog(CURLActionDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CURLActionDlg)
m_sNameTitle = _T("");
m_sNameValue = _T("");
m_sHashTitle = _T("");
m_sHashValue = _T("");
m_bNewWindow = FALSE;
m_bAlwaysOpen = FALSE;
//}}AFX_DATA_INIT
m_pURLs.AddTail( pURL );
m_bMultiple = bMultiple;
}
CURLActionDlg::~CURLActionDlg()
{
for ( POSITION pos = m_pURLs.GetHeadPosition() ; pos ; )
{
delete (CShareazaURL*)m_pURLs.GetNext( pos );
}
}
void CURLActionDlg::DoDataExchange(CDataExchange* pDX)
{
CSkinDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CURLActionDlg)
DDX_Control(pDX, IDC_MESSAGE_4, m_wndMessage4);
DDX_Control(pDX, IDC_MESSAGE_3, m_wndMessage3);
DDX_Control(pDX, IDC_NEW_WINDOW, m_wndNewWindow);
DDX_Control(pDX, IDCANCEL, m_wndCancel);
DDX_Control(pDX, IDC_MESSAGE_2, m_wndMessage2);
DDX_Control(pDX, IDC_MESSAGE_1, m_wndMessage1);
DDX_Control(pDX, IDC_URL_SEARCH, m_wndSearch);
DDX_Control(pDX, IDC_URL_DOWNLOAD, m_wndDownload);
DDX_Text(pDX, IDC_URL_NAME_TITLE, m_sNameTitle);
DDX_Text(pDX, IDC_URL_NAME_VALUE, m_sNameValue);
DDX_Text(pDX, IDC_URL_URN_TITLE, m_sHashTitle);
DDX_Text(pDX, IDC_URL_URN_VALUE, m_sHashValue);
DDX_Check(pDX, IDC_NEW_WINDOW, m_bNewWindow);
DDX_Check(pDX, IDC_ALWAYS_OPEN, m_bAlwaysOpen);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CURLActionDlg message handlers
BOOL CURLActionDlg::OnInitDialog()
{
CSkinDialog::OnInitDialog();
SkinMe( _T("CURLActionDlg"), IDR_MAINFRAME );
m_bAlwaysOpen = Settings.General.AlwaysOpenURLs;
m_bNewWindow = Settings.Downloads.ShowMonitorURLs;
Update();
if ( m_bAlwaysOpen )
{
if ( m_wndDownload.IsWindowEnabled() )
PostMessage( WM_COMMAND, IDC_URL_DOWNLOAD );
else
PostMessage( WM_COMMAND, IDC_URL_SEARCH );
}
else
{
m_bMultiple = FALSE;
if ( CWnd* pWnd = AfxGetMainWnd() )
{
if ( pWnd->IsWindowVisible() && ! pWnd->IsIconic() )
{
pWnd->BringWindowToTop();
pWnd->SetForegroundWindow();
}
}
}
return FALSE;
}
void CURLActionDlg::AddURL(CShareazaURL* pURL)
{
if ( IsWindowVisible() && m_pURLs.GetCount() > 0 )
{
CShareazaURL* pFirst = (CShareazaURL*)m_pURLs.GetHead();
if ( pFirst->m_nAction == pURL->m_nAction )
{
m_pURLs.AddTail( pURL );
Update();
return;
}
}
delete pURL;
}
void CURLActionDlg::Update()
{
CShareazaURL* pURL = (CShareazaURL*)m_pURLs.GetHead();
if ( pURL->m_nAction == CShareazaURL::uriHost ||
pURL->m_nAction == CShareazaURL::uriDonkeyServer )
{
m_sNameTitle = _T("Host:");
m_sHashTitle = _T("Port:");
m_sNameValue = pURL->m_sName;
m_sHashValue.Format( _T("%lu"), pURL->m_nPort );
m_wndMessage2.ShowWindow( SW_SHOW );
m_wndNewWindow.ShowWindow( SW_HIDE );
m_wndDownload.SetWindowText( _T("&Connect Now") );
m_wndDownload.SetFocus();
if ( pURL->m_nAction == CShareazaURL::uriHost )
m_wndSearch.SetWindowText( _T("&Browse") );
else
m_wndSearch.ShowWindow( SW_HIDE );
}
else if ( pURL->m_nAction == CShareazaURL::uriBrowse )
{
m_sNameTitle = _T("Host:");
m_sHashTitle = _T("Port:");
m_sNameValue = pURL->m_sName;
m_sHashValue.Format( _T("%lu"), pURL->m_nPort );
m_wndMessage3.ShowWindow( SW_SHOW );
m_wndNewWindow.ShowWindow( SW_HIDE );
m_wndDownload.SetWindowText( _T("&Browse Now") );
m_wndDownload.SetFocus();
m_wndSearch.SetWindowText( _T("&Connect") );
}
else if ( pURL->m_nAction == CShareazaURL::uriDiscovery )
{
m_sNameTitle = _T("URL:");
m_sHashTitle = _T("Type:");
if ( m_pURLs.GetCount() == 1 )
{
m_sNameValue = pURL->m_sURL;
}
else
{
m_sNameValue.Format( _T("%i URL(s)"), m_pURLs.GetCount() );
}
switch ( pURL->m_nSize )
{
case CDiscoveryService::dsWebCache:
m_sHashValue = _T("GWebCache");
break;
case CDiscoveryService::dsServerMet:
m_sHashValue = _T("Server.met URL");
break;
}
m_wndMessage4.ShowWindow( SW_SHOW );
m_wndDownload.SetWindowText( _T("Add") );
m_wndSearch.ShowWindow( SW_HIDE );
m_wndNewWindow.ShowWindow( SW_HIDE );
}
else if ( pURL->m_nAction == CShareazaURL::uriSource )
{
m_sNameTitle = _T("URL:");
if ( m_pURLs.GetCount() == 1 )
{
m_sNameValue = pURL->m_sURL;
}
else
{
m_sNameValue.Format( _T("%i URL(s)"), m_pURLs.GetCount() );
}
m_wndMessage1.ShowWindow( SW_SHOW );
m_wndSearch.ShowWindow( SW_HIDE );
}
else
{
m_sNameTitle = _T("Filename:");
m_sHashTitle = _T("URN:");
if ( m_pURLs.GetCount() > 1 )
{
m_sNameValue.Format( _T("%i file(s)"), m_pURLs.GetCount() );
}
else if ( pURL->m_sName.GetLength() )
{
m_sNameValue = pURL->m_sName;
if ( pURL->m_bSize )
{
m_sNameValue += _T(" (");
m_sNameValue += Settings.SmartVolume( pURL->m_nSize, FALSE );
m_sNameValue += _T(")");
}
}
else
{
m_sNameValue = _T("Unspecified");
}
if ( m_pURLs.GetCount() > 1 )
{
m_sHashValue.Format( _T("%i file(s)"), m_pURLs.GetCount() );
}
else if ( pURL->m_bTiger && pURL->m_bSHA1 )
{
m_sHashValue = _T("bitprint:")
+ CSHA::HashToString( &pURL->m_pSHA1 ) + _T(".")
+ CTigerNode::HashToString( &pURL->m_pTiger );
}
else if ( pURL->m_bTiger )
{
m_sHashValue = _T("tree:tiger/:") + CTigerNode::HashToString( &pURL->m_pTiger );
}
else if ( pURL->m_bSHA1 )
{
m_sHashValue = _T("sha1:") + CSHA::HashToString( &pURL->m_pSHA1 );
}
else if ( pURL->m_bED2K )
{
m_sHashValue = _T("ed2k:") + CED2K::HashToString( &pURL->m_pED2K );
}
else
{
m_sHashValue = _T("Unspecified");
}
m_wndMessage1.ShowWindow( SW_SHOW );
if ( pURL->m_nAction == CShareazaURL::uriDownload )
{
m_wndDownload.SetFocus();
}
else if ( pURL->m_nAction == CShareazaURL::uriSearch )
{
m_wndDownload.EnableWindow( FALSE );
m_wndDownload.ModifyStyle( BS_DEFPUSHBUTTON, 0 );
m_wndSearch.ModifyStyle( 0, BS_DEFPUSHBUTTON );
m_wndSearch.SetFocus();
m_wndNewWindow.ShowWindow( SW_HIDE );
}
}
UpdateData( FALSE );
}
BOOL CURLActionDlg::PreTranslateMessage(MSG* pMsg)
{
if ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN )
{
if ( GetFocus() == &m_wndCancel )
PostMessage( WM_COMMAND, IDCANCEL );
else if ( m_wndDownload.IsWindowEnabled() )
PostMessage( WM_COMMAND, IDC_URL_DOWNLOAD );
else if ( m_wndSearch.IsWindowEnabled() )
PostMessage( WM_COMMAND, IDC_URL_SEARCH );
return TRUE;
}
return CSkinDialog::PreTranslateMessage( pMsg );
}
void CURLActionDlg::OnUrlDownload()
{
UpdateData();
Settings.General.AlwaysOpenURLs = m_bAlwaysOpen;
Settings.Downloads.ShowMonitorURLs = m_bNewWindow;
for ( POSITION pos = m_pURLs.GetHeadPosition() ; pos ; )
{
CShareazaURL* pURL = (CShareazaURL*)m_pURLs.GetNext( pos );
if ( pURL->m_nAction == CShareazaURL::uriDownload ||
pURL->m_nAction == CShareazaURL::uriSource )
{
CLibraryFile* pFile;
if ( ( pURL->m_bSHA1 && ( pFile = LibraryMaps.LookupFileBySHA1( &pURL->m_pSHA1, TRUE ) ) ) ||
( pURL->m_bED2K && ( pFile = LibraryMaps.LookupFileByED2K( &pURL->m_pED2K, TRUE ) ) ) )
{
CString strFormat, strMessage;
::Skin.LoadString( strFormat, IDS_URL_ALREADY_HAVE );
strMessage.Format( strFormat, (LPCTSTR)pFile->m_sName );
Library.Unlock();
UINT nMBOX = AfxMessageBox( strMessage, MB_ICONINFORMATION|MB_YESNOCANCEL|MB_DEFBUTTON2 );
if ( nMBOX == IDCANCEL ) return;
if ( nMBOX == IDNO ) continue;
}
CDownload* pDownload = Downloads.Add( pURL );
if ( pDownload == NULL ) continue;
if ( ( GetAsyncKeyState( VK_SHIFT ) & 0x8000 ) == 0 )
{
// if ( pURL->m_bED2K && HostCache.eDonkey.GetNewest() != NULL )
// Settings.eDonkey.EnableToday = TRUE;
if ( ! Network.IsWellConnected() ) Network.Connect( TRUE );
}
if ( m_bMultiple == FALSE )
{
CMainWnd* pMainWnd = (CMainWnd*)AfxGetMainWnd();
pMainWnd->m_pWindows.Open( RUNTIME_CLASS(CDownloadsWnd) );
if ( Settings.Downloads.ShowMonitorURLs && m_pURLs.GetCount() == 1 )
{
CSingleLock pLock( &Transfers.m_pSection, TRUE );
if ( Downloads.Check( pDownload ) ) pDownload->ShowMonitor( &pLock );
}
}
}
else if ( pURL->m_nAction == CShareazaURL::uriHost )
{
Network.ConnectTo( pURL->m_sName, pURL->m_nPort );
}
else if ( pURL->m_nAction == CShareazaURL::uriDonkeyServer )
{
Network.ConnectTo( pURL->m_sName, pURL->m_nPort, PROTOCOL_ED2K );
}
else if ( pURL->m_nAction == CShareazaURL::uriBrowse )
{
SOCKADDR_IN pAddress;
if ( Network.Resolve( pURL->m_sName, pURL->m_nPort, &pAddress ) )
{
new CBrowseHostWnd( &pAddress );
}
}
else if ( pURL->m_nAction == CShareazaURL::uriDiscovery )
{
DiscoveryServices.Add( pURL->m_sURL, (int)pURL->m_nSize );
}
}
CSkinDialog::OnOK();
}
void CURLActionDlg::OnUrlSearch()
{
Settings.General.AlwaysOpenURLs = m_bAlwaysOpen;
for ( POSITION pos = m_pURLs.GetHeadPosition() ; pos ; )
{
CShareazaURL* pURL = (CShareazaURL*)m_pURLs.GetNext( pos );
if ( pURL->m_nAction == CShareazaURL::uriHost )
{
SOCKADDR_IN pAddress;
if ( Network.Resolve( pURL->m_sName, pURL->m_nPort, &pAddress ) )
{
new CBrowseHostWnd( &pAddress );
}
}
else if ( pURL->m_nAction == CShareazaURL::uriBrowse )
{
Network.ConnectTo( pURL->m_sName, pURL->m_nPort );
}
else if ( pURL->m_nAction == CShareazaURL::uriDownload ||
pURL->m_nAction == CShareazaURL::uriSearch )
{
if ( ! Network.IsWellConnected() ) Network.Connect( TRUE );
CQuerySearch* pSearch = pURL->ToQuery();
new CSearchWnd( pSearch );
}
}
CSkinDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -