home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 53 / IOPROG_53.ISO / soft / c++ / xceedbkp.exe / Samples / Vc6 / AddIn / BackupAddIn.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-02  |  7.2 KB  |  291 lines

  1. // BackupAddIn.cpp : Implementation of CBackupAddIn
  2. #include "stdafx.h"
  3. #include "AddIn.h"
  4. #include "BackupAddIn.h"
  5.  
  6. /////////////////////////////////////////////////////////////////////////////
  7. // CBackupAddIn
  8.  
  9. HRESULT CBackupAddIn::OnConnection(IApplication* pApp, VARIANT_BOOL bFirstTime, long dwAddInID, VARIANT_BOOL* bOnConnection)
  10. {
  11.     HRESULT hr = S_OK;
  12.     m_spApplication = pApp;
  13.     m_dwAddInID = dwAddInID;
  14.  
  15.     // Connect up to application event sink
  16.     AtlAdvise(pApp, GetUnknown(), IID_IApplicationEvents, &m_dwAppEvents);
  17.  
  18.     hr = pApp->SetAddInInfo((long)_Module.GetModuleInstance(), 
  19.         static_cast<IBackupAddIn*>(this), -1, -1, dwAddInID);
  20.  
  21.   //  Xceed:
  22.   //    When DevStudio connects to our addin, we instanciate an XceedBackup object
  23.   //    and connect our event sink to it.
  24.  
  25.   if( SUCCEEDED( hr ) )
  26.   {
  27.     try
  28.     {
  29.       HRESULT hr = m_piXceedBackup.CreateInstance( CLSID_XceedBackup );
  30.       
  31.       if( FAILED( hr ) ) _com_issue_error( hr );
  32.       
  33.       m_piXceedBackup->LogDetailLevel = bldNone;
  34.  
  35.       VARIANT_BOOL bSchedulerSuccess = m_piXceedBackup->StartScheduler();
  36.       
  37.       if( bSchedulerSuccess == VARIANT_FALSE ) throw;
  38.  
  39.       hr = m_xBackupEvents.DispEventAdvise( m_piXceedBackup );
  40.       
  41.       if( FAILED( hr ) ) _com_issue_error( hr );
  42.  
  43.       m_xBackupEvents.m_spApplication = m_spApplication;
  44.       m_xBackupEvents.m_piXceedBackup = m_piXceedBackup;
  45.     }
  46.     catch( const _com_error& xErr )
  47.     {
  48.       m_piXceedBackup.Release();
  49.       hr = xErr.Error();
  50.     }
  51.     catch( ... )
  52.     {
  53.       m_piXceedBackup.Release();
  54.       hr = E_UNEXPECTED;
  55.     }
  56.   }
  57.  
  58.     *bOnConnection = SUCCEEDED(hr) ? VARIANT_TRUE :VARIANT_FALSE;
  59.     return hr;
  60. }
  61.  
  62. HRESULT CBackupAddIn::OnDisconnection(VARIANT_BOOL bLastTime)
  63. {
  64.   //  Xceed:
  65.   //    When DevStudio disconnects from our addin, we clean what we did on connection.
  66.  
  67.   if( m_piXceedBackup )
  68.   {
  69.     try
  70.     {
  71.       m_piXceedBackup->StopScheduler( VARIANT_FALSE );
  72.       m_xBackupEvents.DispEventUnadvise( m_piXceedBackup );
  73.       m_xBackupEvents.m_spApplication.Release();
  74.       m_xBackupEvents.m_piXceedBackup.Release();
  75.       m_piXceedBackup.Release();
  76.     }
  77.     catch( ... )
  78.     {
  79.     }
  80.   }
  81.  
  82.     AtlUnadvise(m_spApplication, IID_IApplicationEvents, m_dwAppEvents);
  83.     return S_OK;
  84. }
  85.  
  86. /////////////////////////////////////////////////////////////////////////////
  87. // Application events
  88. HRESULT CBackupAddIn::BeforeBuildStart()
  89. {
  90.     return S_OK;
  91. }
  92.  
  93. HRESULT CBackupAddIn::BuildFinish(long nNumErrors, long nNumWarnings)
  94. {
  95.     return S_OK;
  96. }
  97.  
  98. HRESULT CBackupAddIn::BeforeApplicationShutDown()
  99. {
  100.     return S_OK;
  101. }
  102.  
  103. HRESULT CBackupAddIn::DocumentOpen(IDispatch* theDocument)
  104. {
  105.     return S_OK;
  106. }
  107.  
  108. HRESULT CBackupAddIn::BeforeDocumentClose(IDispatch* theDocument)
  109. {
  110.     return S_OK;
  111. }
  112.  
  113. HRESULT CBackupAddIn::DocumentSave(IDispatch* theDocument)
  114. {
  115.     return S_OK;
  116. }
  117.  
  118. HRESULT CBackupAddIn::NewDocument(IDispatch* theDocument)
  119. {
  120.     return S_OK;
  121. }
  122.  
  123. HRESULT CBackupAddIn::WindowActivate(IDispatch* theWindow)
  124. {
  125.     return S_OK;
  126. }
  127.  
  128. HRESULT CBackupAddIn::WindowDeactivate(IDispatch* theWindow)
  129. {
  130.     return S_OK;
  131. }
  132.  
  133. HRESULT CBackupAddIn::WorkspaceOpen()
  134. {
  135.   return AddWorkspaceToScheduler();
  136. }
  137.  
  138. HRESULT CBackupAddIn::WorkspaceClose()
  139. {
  140.   return RemoveWorkspaceFromScheduler();
  141. }
  142.  
  143. HRESULT CBackupAddIn::NewWorkspace()
  144. {
  145.   return S_OK;
  146. }
  147.  
  148. /*****************************************************************************************
  149.  *
  150.  * AddWorkspaceToScheduler
  151.  *
  152.  * Description:
  153.  *    This function adds a scheduled job to the main XceedBackup object for each project
  154.  *    found in the current DevStudio workspace.
  155.  *
  156.  ****************************************************************************************/
  157.  
  158. HRESULT CBackupAddIn::AddWorkspaceToScheduler()
  159. {
  160.   HRESULT hr = S_OK;
  161.  
  162.   try
  163.   {
  164.     IDispatchPtr pdispProjects;
  165.  
  166.     hr = m_spApplication->get_Projects( &pdispProjects );
  167.  
  168.     if( FAILED( hr ) ) _com_issue_error( hr );
  169.  
  170.     CComQIPtr< IProjects > piProjects = pdispProjects;
  171.  
  172.     if( !piProjects ) throw;
  173.  
  174.     long lProjectCount = 0;
  175.  
  176.     hr = piProjects->get_Count( &lProjectCount );
  177.  
  178.     if( FAILED( hr ) ) _com_issue_error( hr );
  179.  
  180.     for( long i = 1; i <= lProjectCount; i++ )
  181.     {
  182.       CComPtr< IGenericProject > piProject;
  183.  
  184.       hr = piProjects->Item( CComVariant( i ), &piProject );
  185.  
  186.       if( FAILED( hr ) ) _com_issue_error( hr );
  187.  
  188.       CComBSTR bstrProjectName;
  189.  
  190.       hr = piProject->get_Name( &bstrProjectName );
  191.  
  192.       if( FAILED( hr ) ) _com_issue_error( hr );
  193.  
  194.       CComBSTR bstrProjectFullName;
  195.  
  196.       hr = piProject->get_FullName( &bstrProjectFullName );
  197.  
  198.       if( FAILED( hr ) ) _com_issue_error( hr );
  199.  
  200.       WCHAR wszDrive[ _MAX_DRIVE + 1 ];
  201.       WCHAR wszPath[ MAX_PATH + 1 ];
  202.  
  203.       _wsplitpath( bstrProjectFullName, wszDrive, wszPath, NULL, NULL );
  204.  
  205.       CComBSTR bstrFilesToProcess( wszDrive );
  206.       bstrFilesToProcess += wszPath;
  207.       bstrFilesToProcess += "*<R>";
  208.  
  209.       CComBSTR bstrBackupFolder( wszDrive );
  210.       bstrBackupFolder += wszPath;
  211.       bstrBackupFolder += "BACKUPS\\";
  212.  
  213.       IXceedFileSelectionPtr piFileSelection( CLSID_FileSelection );
  214.  
  215.       piFileSelection->FilesToProcess = bstrFilesToProcess;
  216.       piFileSelection->FilesToExclude = CComBSTR( "*.obj<R>|*.ilk<R>|*.pch<R>|*.pdb<R>|*.exe<R>|*.dll<R>" );
  217.  
  218.       IXceedBackupJobPtr piBackupJob( CLSID_BackupJob );
  219.  
  220.       piBackupJob->BackupFolder = bstrBackupFolder;
  221.       piBackupJob->BackupSetName = bstrProjectName;
  222.       piBackupJob->BackupType = bbtCopy;
  223.       piBackupJob->CompressionLevel = bclMedium;
  224.       piBackupJob->RetentionPeriod = 0;
  225.       piBackupJob->VerifyAfterBackup = VARIANT_FALSE;
  226.       piBackupJob->PutSelection( piFileSelection );
  227.  
  228.       IXceedScheduledJobPtr piScheduledJob( CLSID_ScheduledJob );
  229.  
  230.       piScheduledJob->RecurrenceType = brtEveryNMinutes;
  231.       piScheduledJob->RecurrenceInterval = 10;
  232.       piScheduledJob->Required = VARIANT_FALSE;
  233.       piScheduledJob->PutJob( piBackupJob );
  234.  
  235.       IXceedScheduledJobsPtr piScheduledJobs = m_piXceedBackup->ScheduledJobs;
  236.  
  237.       piScheduledJobs->Add( piScheduledJob );
  238.  
  239.       CComBSTR bstrOutputString( "Scheduled a backup job for the project " );
  240.       bstrOutputString += bstrProjectName;
  241.  
  242.       m_spApplication->PrintToOutputWindow( bstrOutputString );
  243.     }
  244.   }
  245.   catch( const _com_error& xErr )
  246.   {
  247.     hr = xErr.Error();
  248.   }
  249.   catch( ... )
  250.   {
  251.     hr = E_UNEXPECTED;
  252.   }
  253.  
  254.     return hr;
  255. }
  256.  
  257. /*****************************************************************************************
  258.  *
  259.  * AddWorkspaceToScheduler
  260.  *
  261.  * Description:
  262.  *    This function clears the scheduled jobs from the main XceedBackup object.
  263.  *
  264.  ****************************************************************************************/
  265.  
  266. HRESULT CBackupAddIn::RemoveWorkspaceFromScheduler()
  267. {
  268.   HRESULT hr = S_OK;
  269.  
  270.   try
  271.   {
  272.     IXceedScheduledJobsPtr piScheduledJobs = m_piXceedBackup->ScheduledJobs;
  273.     
  274.     piScheduledJobs->Clear();
  275.  
  276.     CComBSTR bstrOutputString( "\nRemoved all scheduled jobs." );
  277.  
  278.     m_spApplication->PrintToOutputWindow( bstrOutputString );
  279.   }
  280.   catch( const _com_error& xErr )
  281.   {
  282.     hr = xErr.Error();
  283.   }
  284.   catch( ... )
  285.   {
  286.     hr = E_UNEXPECTED;
  287.   }
  288.  
  289.     return hr;
  290. }
  291.