コード例 #1
0
 public void DeleteSnapshotRevision( VolumeSnapshotRevision revision )
 {
     if ( mSnapshotXmlCache.ContainsKey( revision ) )
         mSnapshotXmlCache.Remove( revision );
     if ( mSnapshotDictionary.ContainsKey( revision ) )
         mSnapshotDictionary.Remove( revision );
 }
コード例 #2
0
            public RevisionListObject(VolumeSnapshotRevision revision)
            {
                mRevision = revision;
                DateTime dt = mRevision.CreationTime;

                mDateString  = dt.ToLongDateString() + " " + dt.ToLongTimeString();
                mFuzzyString = PWLib.Platform.Windows.Misc.FormatFuzzyDateString(dt);
            }
コード例 #3
0
        private VolumeSnapshot( VolumeSource source, XmlNode parentNode )
        {
            mRevision = VolumeSnapshotRevision.Create( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlRevisionElement, "" ) );
            if ( mRevision == null )
                throw new Exception( "Could not read revision from snapshot xml '" + parentNode.Name + "'" );

            mRoot = VolumeSnapshotDirectory.BuildFromXml( this, PWLib.XmlHelp.GetFirstChildWithName( parentNode, "directory" ) );
            mFileCount = mRoot.CountAllFiles( ref mTotalFileSize );
        }
コード例 #4
0
        public void DeleteSnapshotRevision( VolumeSnapshotRevision revision )
        {
            PWLib.Platform.Windows.File.Delete( GetRevisionFileName( revision ) );

            if ( mSnapshotsStored.Contains( revision ) )
                mSnapshotsStored.Remove( revision );
            if ( mSnapshotDictionary.ContainsKey( revision ) )
                mSnapshotDictionary.Remove( revision );
        }
コード例 #5
0
 private VolumeSnapshotFile( VolumeSnapshot snapshot, VolumeSource source, string relativePath )
 {
     mSnapshot = snapshot;
     mRevision = null;
     mRelativePath = relativePath;
     mFileName = PWLib.Platform.Windows.Path.GetFileName( relativePath );
     mLastModified = source.GetLastWriteTimeUtc( relativePath );
     mFileSize = source.GetFileSize( relativePath );
 }
コード例 #6
0
 public override void DeleteRevision( VolumeSnapshotRevision revision )
 {
     try
     {
         string revisionPath = RelativePathToOnDiskPath( revision, "" );
         PWLib.Platform.Windows.Path.DeletePath( revisionPath, true );
         PWLib.Platform.Windows.Directory.Remove( revisionPath, true );
     }
     catch ( Exception )
     { }
 }
コード例 #7
0
        private VolumeSnapshotFile( VolumeSnapshot snapshot, XmlNode node )
        {
            mSnapshot = snapshot;
            mFileName = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlFilenameElement, "" ) );
            mRelativePath = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlRelativePathElement, "" ) );
            mRevision = VolumeSnapshotRevision.Create( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlRevisionElement, "" ) );

            ulong.TryParse( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlSizeElement, "0" ), out mFileSize );

            long ticks;
            if ( long.TryParse( PWLib.XmlHelp.GetAttribute( node, VolumeSnapshotXml.XmlLastModifiedElement, "0" ), out ticks ) )
                mLastModified = new DateTime( ticks );
        }
コード例 #8
0
        public void RestoreVolume(VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath)
        {
            if (vid.ReadyForRestore)
            {
                Log.WriteLine(LogType.TextLogVerbose, "Adding QueuedRestore (" + vid.VolumeName + ")");

                QueuedRestoreInfo restoreInfo = new QueuedRestoreInfo();
                restoreInfo.mDescriptor     = vid;
                restoreInfo.mVolumeRevision = revision;
                restoreInfo.mDiskPath       = onDiskPath;
                mWorkerThread.RegisterOneShotTask(new PWLib.BackgroundWorkerThread.TaskPredicate(OnWorkerPredicate),
                                                  new PWLib.BackgroundWorkerThread.Task(OnWorkerRestore), new PWLib.BackgroundWorkerThread.TaskError(OnWorkerError), restoreInfo);
            }
        }
コード例 #9
0
ファイル: Volume.cs プロジェクト: peteward44/auto-usb-backup
 public void Restore(VolumeSnapshotRevision revision, string onDiskPath)
 {
     try
     {
         mBusy = true;
         mEventController.InvokeRestoreStarted(this, null);
         mBackupRestoreObject.Restore(revision, onDiskPath);
     }
     finally
     {
         mBusy = false;
         mEventController.InvokeRestoreFinished(this, null);
     }
 }
コード例 #10
0
        public VolumeSnapshot LoadSnapshotRevision( VolumeSource source, VolumeSnapshotRevision revision )
        {
            if ( mSnapshotDictionary.ContainsKey( revision ) )
                return mSnapshotDictionary[ revision ];
            else
            {
                if ( !mSnapshotXmlCache.ContainsKey( revision ) )
                    throw new Exception( "Could not locate snapshot revision '" + revision.ToString() + "' in database" );
                string xmlFragment = mSnapshotXmlCache[ revision ];

                XmlDocument doc = new XmlDocument();
                doc.LoadXml( xmlFragment );

                XmlNode snapshotXmlNode = PWLib.XmlHelp.GetFirstChildWithName( doc, VolumeSnapshotXml.XmlSnapshotElement );
                VolumeSnapshot snapshot = VolumeSnapshot.BuildFromXml( source, snapshotXmlNode );
                mSnapshotDictionary.Add( revision, snapshot );
                return snapshot;
            }
        }
コード例 #11
0
        private VolumeSnapshotDirectory( VolumeSnapshot snapshot, XmlNode parentNode )
        {
            mSnapshot = snapshot;
            mName = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlNameElement, "" ) );
            mRelativePath = PWLib.XmlHelp.DirtyString( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlRelativePathElement, "" ) );
            mRevision = VolumeSnapshotRevision.Create( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlRevisionElement, "" ) );

            long ticks;
            if ( long.TryParse( PWLib.XmlHelp.GetAttribute( parentNode, VolumeSnapshotXml.XmlLastModifiedElement, "0" ), out ticks ) )
                mLastModified = new DateTime( ticks );

            foreach ( XmlNode childNode in parentNode.ChildNodes )
            {
                string lowerName = childNode.Name.ToLower();
                if ( lowerName == VolumeSnapshotXml.XmlDirectoryElement ) // Sub directories
                {
                    try
                    {
                        VolumeSnapshotDirectory subDirEntry = new VolumeSnapshotDirectory( mSnapshot, childNode );
                        mDirectories.Add( subDirEntry );
                    }
                    catch ( System.Exception e )
                    {
                        FileSync.__LogError( this, "VolumeSnapshotDirectory.BuildFromXml failed in directory '" + mName + "' '" + mRelativePath + "'", e );
                    }
                }
                else if ( lowerName == VolumeSnapshotXml.XmlFileElement ) // Files
                {
                    try
                    {
                        VolumeSnapshotFile fileEntry = VolumeSnapshotFile.BuildFromXml( mSnapshot, childNode );
                        mFiles.Add( fileEntry );
                    }
                    catch ( System.Exception e )
                    {
                        FileSync.__LogError( this, "VolumeSnapshotDirectory.BuildFromXml failed in directory on a file '" + mName + "' '" + mRelativePath + "'", e );
                    }
                }
            }
        }
コード例 #12
0
 public abstract void CreateDirectory( VolumeSnapshotRevision revision, string relativePath );
コード例 #13
0
ファイル: Volume.cs プロジェクト: peteward44/auto-usb-backup
 public void Restore( VolumeSnapshotRevision revision, string onDiskPath )
 {
     try
     {
         mBusy = true;
         mEventController.InvokeRestoreStarted( this, null );
         mBackupRestoreObject.Restore( revision, onDiskPath );
     }
     finally
     {
         mBusy = false;
         mEventController.InvokeRestoreFinished( this, null );
     }
 }
コード例 #14
0
 public abstract void CopyFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath, ArchiveFileDelegate archiveFileDelegate, object userData );
コード例 #15
0
 public override void CopyFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath, ArchiveFileDelegate archiveFileDelegate, object userData )
 {
     CopyFile( RelativePathToOnDiskPath( sourceRevision, fileRelativePath ), RelativePathToOnDiskPath( targetRevision, fileRelativePath ), archiveFileDelegate, userData );
 }
コード例 #16
0
 public override void MoveFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath )
 {
     PWLib.Platform.Windows.File.Move( RelativePathToOnDiskPath( sourceRevision, fileRelativePath ), RelativePathToOnDiskPath( targetRevision, fileRelativePath ) );
 }
コード例 #17
0
        ulong mTotalStoredInThisRevision = 0; // Total unique file size stored in this revision's directory

        #endregion Fields

        #region Constructors

        private VolumeSnapshot( VolumeSource source )
        {
            mRevision = VolumeSnapshotRevision.CreateNew();
            mRoot = VolumeSnapshotDirectory.BuildFromSource( this, source, "" );
            mFileCount = mRoot.CountAllFiles( ref mTotalFileSize );
        }
コード例 #18
0
 public void RestoreVolume(VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath)
 {
     mSpineThread.RestoreVolume(vid, revision, onDiskPath);
 }
コード例 #19
0
 public abstract void DeleteRevision( VolumeSnapshotRevision revision );
コード例 #20
0
 public abstract void RestoreFile( VolumeSnapshotRevision revision, string fileRelativePath, string onDiskOutputPath, ArchiveFileDelegate archiveFileDelegate, object userData );
コード例 #21
0
        public VolumeSnapshot LoadSnapshotRevision( VolumeSource source, VolumeSnapshotRevision revision )
        {
            if ( mSnapshotDictionary.ContainsKey( revision ) )
                return mSnapshotDictionary[ revision ];
            else
            {
                XmlDocument doc = new XmlDocument();
                doc.Load( GetRevisionFileName( revision ) );

                XmlNode snapshotXmlNode = PWLib.XmlHelp.GetFirstChildWithName( doc, VolumeSnapshotXml.XmlSnapshotElement );
                VolumeSnapshot snapshot = VolumeSnapshot.BuildFromXml( source, snapshotXmlNode );
                mSnapshotDictionary.Add( revision, snapshot );
                return snapshot;
            }
        }
コード例 #22
0
 public override void StoreFile( VolumeSnapshotRevision revision, string relativePath, string onDiskPath, ArchiveFileDelegate archiveFileDelegate, object userData )
 {
     CopyFile( onDiskPath, RelativePathToOnDiskPath( revision, relativePath ), archiveFileDelegate, userData );
 }
コード例 #23
0
 string GetRevisionFileName( VolumeSnapshotRevision revision )
 {
     return mXmlRootDir + PWLib.Platform.Windows.Path.DirectorySeparatorChar + revision.Value.ToString() + ".xml";
 }
コード例 #24
0
        public void RestoreVolume( VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath )
        {
            if ( vid.ReadyForRestore )
            {
                Log.WriteLine( LogType.TextLogVerbose, "Adding QueuedRestore (" + vid.VolumeName + ")" );

                QueuedRestoreInfo restoreInfo = new QueuedRestoreInfo();
                restoreInfo.mDescriptor = vid;
                restoreInfo.mVolumeRevision = revision;
                restoreInfo.mDiskPath = onDiskPath;
                mWorkerThread.RegisterOneShotTask( new PWLib.BackgroundWorkerThread.TaskPredicate( OnWorkerPredicate ),
                    new PWLib.BackgroundWorkerThread.Task( OnWorkerRestore ), new PWLib.BackgroundWorkerThread.TaskError( OnWorkerError ), restoreInfo );
            }
        }
コード例 #25
0
 private string RelativePathToOnDiskPath( VolumeSnapshotRevision revision, string relativePath )
 {
     string path = mStoragePath + PWLib.Platform.Windows.Path.DirectorySeparatorChar + revision.ToString() + relativePath;
     return path;
 }
コード例 #26
0
 public abstract void MoveFileFromRevision( VolumeSnapshotRevision sourceRevision, VolumeSnapshotRevision targetRevision, string fileRelativePath );
コード例 #27
0
 public override void RestoreFile( VolumeSnapshotRevision revision, string fileRelativePath, string onDiskOutputPath, ArchiveFileDelegate archiveFileDelegate, object userData )
 {
     if ( onDiskOutputPath[ onDiskOutputPath.Length - 1 ] == PWLib.Platform.Windows.Path.DirectorySeparatorChar )
         onDiskOutputPath = onDiskOutputPath.Substring( 0, onDiskOutputPath.Length - 1 );
     CopyFile( RelativePathToOnDiskPath( revision, fileRelativePath ), onDiskOutputPath, archiveFileDelegate, userData );
 }
コード例 #28
0
 public abstract void StoreFile( VolumeSnapshotRevision revision, string relativePath, string onDiskPath, ArchiveFileDelegate archiveFileDelegate, object userData );
コード例 #29
0
        void UpdateSnapshotToReflectBaselineRevision( VolumeSnapshot incrementalSnapshot, VolumeSnapshotRevision newRevision )
        {
            UpdateSnapshotToReflectBaselineRevisionPrivate( incrementalSnapshot.Root, newRevision );

            // save out .xml
            mDatabase.SaveSnapshotRevision( incrementalSnapshot );
        }
コード例 #30
0
 public void RestoreVolume( VolumeDescriptor vid, VolumeSnapshotRevision revision, string onDiskPath )
 {
     mSpineThread.RestoreVolume( vid, revision, onDiskPath );
 }
コード例 #31
0
        void UpdateSnapshotToReflectBaselineRevisionPrivate( VolumeSnapshotDirectory parentDir, VolumeSnapshotRevision newRevision )
        {
            foreach ( VolumeSnapshotFile file in parentDir.Files )
            {
                if ( file.Revision.Value < newRevision.Value )
                    file.Revision = newRevision;
            }

            foreach ( VolumeSnapshotDirectory dir in parentDir.Directories )
            {
                if ( dir.Revision.Value < newRevision.Value )
                    dir.Revision = newRevision;
                UpdateSnapshotToReflectBaselineRevisionPrivate( dir, newRevision );
            }
        }
コード例 #32
0
 public RevisionListObject( VolumeSnapshotRevision revision )
 {
     mRevision = revision;
     DateTime dt = mRevision.CreationTime;
     mDateString = dt.ToLongDateString() + " " + dt.ToLongTimeString();
     mFuzzyString = PWLib.Platform.Windows.Misc.FormatFuzzyDateString( dt );
 }
コード例 #33
0
 public override void CreateDirectory( VolumeSnapshotRevision revision, string relativePath )
 {
     string absPath = RelativePathToOnDiskPath( revision, relativePath );
     if ( !PWLib.Platform.Windows.Directory.Exists( absPath ) )
         PWLib.Platform.Windows.Directory.CreateDirectory( absPath );
 }