home *** CD-ROM | disk | FTP | other *** search
- // BackupAddIn.cpp : Implementation of CBackupAddIn
- #include "stdafx.h"
- #include "AddIn.h"
- #include "BackupAddIn.h"
-
- /////////////////////////////////////////////////////////////////////////////
- // CBackupAddIn
-
- HRESULT CBackupAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwAddInID, VARIANT_BOOL* bOnConnection)
- {
- HRESULT hr = S_OK;
- m_spApplication = pApp;
- m_dwAddInID = dwAddInID;
-
- // Connect up to application event sink
- AtlAdvise(pApp, GetUnknown(), IID_IApplicationEvents, &m_dwAppEvents);
-
- hr = pApp->SetAddInInfo((long)_Module.GetModuleInstance(),
- static_cast<IBackupAddIn*>(this), -1, -1, dwAddInID);
-
- // Xceed:
- // When DevStudio connects to our addin, we instanciate an XceedBackup object
- // and connect our event sink to it.
-
- if( SUCCEEDED( hr ) )
- {
- try
- {
- HRESULT hr = m_piXceedBackup.CreateInstance( CLSID_XceedBackup );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- m_piXceedBackup->LogDetailLevel = bldNone;
-
- VARIANT_BOOL bSchedulerSuccess = m_piXceedBackup->StartScheduler();
-
- if( bSchedulerSuccess == VARIANT_FALSE ) throw;
-
- hr = m_xBackupEvents.DispEventAdvise( m_piXceedBackup );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- m_xBackupEvents.m_spApplication = m_spApplication;
- m_xBackupEvents.m_piXceedBackup = m_piXceedBackup;
- }
- catch( const _com_error& xErr )
- {
- m_piXceedBackup.Release();
- hr = xErr.Error();
- }
- catch( ... )
- {
- m_piXceedBackup.Release();
- hr = E_UNEXPECTED;
- }
- }
-
- *bOnConnection = SUCCEEDED(hr) ? VARIANT_TRUE :VARIANT_FALSE;
- return hr;
- }
-
- HRESULT CBackupAddIn::OnDisconnection(VARIANT_BOOL bLastTime)
- {
- // Xceed:
- // When DevStudio disconnects from our addin, we clean what we did on connection.
-
- if( m_piXceedBackup )
- {
- try
- {
- m_piXceedBackup->StopScheduler( VARIANT_FALSE );
- m_xBackupEvents.DispEventUnadvise( m_piXceedBackup );
- m_xBackupEvents.m_spApplication.Release();
- m_xBackupEvents.m_piXceedBackup.Release();
- m_piXceedBackup.Release();
- }
- catch( ... )
- {
- }
- }
-
- AtlUnadvise(m_spApplication, IID_IApplicationEvents, m_dwAppEvents);
- return S_OK;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // Application events
- HRESULT CBackupAddIn::BeforeBuildStart()
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::BuildFinish(long nNumErrors, long nNumWarnings)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::BeforeApplicationShutDown()
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::DocumentOpen(IDispatch* theDocument)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::BeforeDocumentClose(IDispatch* theDocument)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::DocumentSave(IDispatch* theDocument)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::NewDocument(IDispatch* theDocument)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::WindowActivate(IDispatch* theWindow)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::WindowDeactivate(IDispatch* theWindow)
- {
- return S_OK;
- }
-
- HRESULT CBackupAddIn::WorkspaceOpen()
- {
- return AddWorkspaceToScheduler();
- }
-
- HRESULT CBackupAddIn::WorkspaceClose()
- {
- return RemoveWorkspaceFromScheduler();
- }
-
- HRESULT CBackupAddIn::NewWorkspace()
- {
- return S_OK;
- }
-
- /*****************************************************************************************
- *
- * AddWorkspaceToScheduler
- *
- * Description:
- * This function adds a scheduled job to the main XceedBackup object for each project
- * found in the current DevStudio workspace.
- *
- ****************************************************************************************/
-
- HRESULT CBackupAddIn::AddWorkspaceToScheduler()
- {
- HRESULT hr = S_OK;
-
- try
- {
- IDispatchPtr pdispProjects;
-
- hr = m_spApplication->get_Projects( &pdispProjects );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- CComQIPtr< IProjects > piProjects = pdispProjects;
-
- if( !piProjects ) throw;
-
- long lProjectCount = 0;
-
- hr = piProjects->get_Count( &lProjectCount );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- for( long i = 1; i <= lProjectCount; i++ )
- {
- CComPtr< IGenericProject > piProject;
-
- hr = piProjects->Item( CComVariant( i ), &piProject );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- CComBSTR bstrProjectName;
-
- hr = piProject->get_Name( &bstrProjectName );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- CComBSTR bstrProjectFullName;
-
- hr = piProject->get_FullName( &bstrProjectFullName );
-
- if( FAILED( hr ) ) _com_issue_error( hr );
-
- WCHAR wszDrive[ _MAX_DRIVE + 1 ];
- WCHAR wszPath[ MAX_PATH + 1 ];
-
- _wsplitpath( bstrProjectFullName, wszDrive, wszPath, NULL, NULL );
-
- CComBSTR bstrFilesToProcess( wszDrive );
- bstrFilesToProcess += wszPath;
- bstrFilesToProcess += "*<R>";
-
- CComBSTR bstrBackupFolder( wszDrive );
- bstrBackupFolder += wszPath;
- bstrBackupFolder += "BACKUPS\\";
-
- IXceedFileSelectionPtr piFileSelection( CLSID_FileSelection );
-
- piFileSelection->FilesToProcess = bstrFilesToProcess;
- piFileSelection->FilesToExclude = CComBSTR( "*.obj<R>|*.ilk<R>|*.pch<R>|*.pdb<R>|*.exe<R>|*.dll<R>" );
-
- IXceedBackupJobPtr piBackupJob( CLSID_BackupJob );
-
- piBackupJob->BackupFolder = bstrBackupFolder;
- piBackupJob->BackupSetName = bstrProjectName;
- piBackupJob->BackupType = bbtCopy;
- piBackupJob->CompressionLevel = bclMedium;
- piBackupJob->RetentionPeriod = 0;
- piBackupJob->VerifyAfterBackup = VARIANT_FALSE;
- piBackupJob->PutSelection( piFileSelection );
-
- IXceedScheduledJobPtr piScheduledJob( CLSID_ScheduledJob );
-
- piScheduledJob->RecurrenceType = brtEveryNMinutes;
- piScheduledJob->RecurrenceInterval = 10;
- piScheduledJob->Required = VARIANT_FALSE;
- piScheduledJob->PutJob( piBackupJob );
-
- IXceedScheduledJobsPtr piScheduledJobs = m_piXceedBackup->ScheduledJobs;
-
- piScheduledJobs->Add( piScheduledJob );
-
- CComBSTR bstrOutputString( "Scheduled a backup job for the project " );
- bstrOutputString += bstrProjectName;
-
- m_spApplication->PrintToOutputWindow( bstrOutputString );
- }
- }
- catch( const _com_error& xErr )
- {
- hr = xErr.Error();
- }
- catch( ... )
- {
- hr = E_UNEXPECTED;
- }
-
- return hr;
- }
-
- /*****************************************************************************************
- *
- * AddWorkspaceToScheduler
- *
- * Description:
- * This function clears the scheduled jobs from the main XceedBackup object.
- *
- ****************************************************************************************/
-
- HRESULT CBackupAddIn::RemoveWorkspaceFromScheduler()
- {
- HRESULT hr = S_OK;
-
- try
- {
- IXceedScheduledJobsPtr piScheduledJobs = m_piXceedBackup->ScheduledJobs;
-
- piScheduledJobs->Clear();
-
- CComBSTR bstrOutputString( "\nRemoved all scheduled jobs." );
-
- m_spApplication->PrintToOutputWindow( bstrOutputString );
- }
- catch( const _com_error& xErr )
- {
- hr = xErr.Error();
- }
- catch( ... )
- {
- hr = E_UNEXPECTED;
- }
-
- return hr;
- }
-