Changeset 2451


Ignore:
Timestamp:
3/12/2012 7:47:48 AM (2 years ago)
Author:
lowjoel
Message:

Added the IDragAndDropConfigurer interface and allow target configurers to configure themselves, without knowledge of the underlying types.

Location:
branches/eraser6/pluginsRewrite
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/pluginsRewrite/Eraser.DefaultPlugins/ErasureTargets/FileSystemObjectErasureTarget.cs

    r2382 r2451  
    4242    /// </summary> 
    4343    [Serializable] 
    44     public abstract class FileSystemObjectErasureTarget : ErasureTarget 
     44    public abstract class FileSystemObjectErasureTarget : IErasureTarget 
    4545    { 
    4646        #region Serialization code 
     
    174174        public string Path { get; set; } 
    175175 
    176         public sealed override ErasureMethod EffectiveMethod 
     176        public sealed override IErasureMethod EffectiveMethod 
    177177        { 
    178178            get 
     
    241241 
    242242            //Get the filesystem provider to handle the secure file erasures 
    243             FileSystem fsManager = Host.Instance.FileSystems[ 
     243            IFileSystem fsManager = Host.Instance.FileSystems[ 
    244244                VolumeInfo.FromMountPoint(info.DirectoryName)]; 
    245245 
     
    249249            { 
    250250                //Update the task progress 
    251                 ErasureMethod method = EffectiveMethod; 
     251                IErasureMethod method = EffectiveMethod; 
    252252                OnProgressChanged(this, new ProgressChangedEventArgs(progress, 
    253253                    new TaskProgressChangedEventArgs(info.FullName, 0, method.Passes))); 
     
    258258 
    259259                //Define the callback function for progress reporting. 
    260                 ErasureMethod.ErasureMethodProgressFunction callback = 
     260                IErasureMethod.ErasureMethodProgressFunction callback = 
    261261                    delegate(long lastWritten, long totalData, int currentPass) 
    262262                    { 
     
    303303        /// <param name="info">The stream to erase.</param> 
    304304        /// <param name="callback">The erasure progress callback.</param> 
    305         private void TryEraseStream(FileSystem fsManager, ErasureMethod method, StreamInfo info, 
    306             ErasureMethod.ErasureMethodProgressFunction callback) 
     305        private void TryEraseStream(IFileSystem fsManager, IErasureMethod method, StreamInfo info, 
     306            IErasureMethod.ErasureMethodProgressFunction callback) 
    307307        { 
    308308            for (int i = 0; ; ++i) 
     
    384384                List<string> entries = new List<string>( 
    385385                    ManagerLibrary.Settings.PlausibleDeniabilityFiles); 
    386                 Prng prng = Host.Instance.Prngs.ActivePrng; 
     386                IPrng prng = Host.Instance.Prngs.ActivePrng; 
    387387                do 
    388388                { 
  • branches/eraser6/pluginsRewrite/Eraser.DefaultPlugins/ErasureTargets/FolderErasureTargetConfigurer.cs

    r2368 r2451  
    3333 
    3434using Eraser.Util; 
     35using Eraser.Plugins; 
    3536using Eraser.Plugins.ExtensionPoints; 
    3637 
    3738namespace Eraser.DefaultPlugins 
    3839{ 
    39     public partial class FolderErasureTargetConfigurer : UserControl, IErasureTargetConfigurer 
     40    public partial class FolderErasureTargetConfigurer : UserControl, 
     41        IErasureTargetConfigurer, IDragAndDropConfigurer<IErasureTarget> 
    4042    { 
    4143        public FolderErasureTargetConfigurer() 
     
    4749        #region IConfigurer<ErasureTarget> Members 
    4850 
    49         public void LoadFrom(ErasureTarget target) 
     51        public void LoadFrom(IErasureTarget target) 
    5052        { 
    5153            FolderErasureTarget folder = target as FolderErasureTarget; 
     
    6062        } 
    6163 
    62         public bool SaveTo(ErasureTarget target) 
     64        public bool SaveTo(IErasureTarget target) 
    6365        { 
    6466            FolderErasureTarget folder = target as FolderErasureTarget; 
     
    143145        #endregion 
    144146 
     147        #region IDragAndDropConfigurer<IErasureTarget> Members 
     148 
     149        public ICollection<IErasureTarget> ProcessArgument(DragEventArgs e) 
     150        { 
     151            List<string> files = e.Data.GetDataPresent(DataFormats.FileDrop) ? 
     152                new List<string>((string[])e.Data.GetData(DataFormats.FileDrop, false)) : 
     153                new List<string>(); 
     154 
     155            List<IErasureTarget> result = new List<IErasureTarget>(); 
     156            foreach (string file in files) 
     157            { 
     158                if (File.Exists(file)) 
     159                { 
     160                    FileErasureTarget target = new FileErasureTarget(); 
     161                    target.Path = file; 
     162                    result.Add(target); 
     163                } 
     164            } 
     165 
     166            return result; 
     167        } 
     168 
     169        #endregion 
     170 
    145171        private void folderBrowse_Click(object sender, EventArgs e) 
    146172        { 
  • branches/eraser6/pluginsRewrite/Eraser.DefaultPlugins/ErasureTargets/RecycleBinErasureTargetConfigurer.cs

    r2368 r2451  
    2525using System.Text; 
    2626using System.Text.RegularExpressions; 
     27using System.IO; 
    2728 
    2829using Eraser.Util; 
     
    3233namespace Eraser.DefaultPlugins 
    3334{ 
    34     class RecycleBinErasureTargetConfigurer : IErasureTargetConfigurer 
     35    class RecycleBinErasureTargetConfigurer : IErasureTargetConfigurer, 
     36        IDragAndDropConfigurer<IErasureTarget> 
    3537    { 
    3638        #region IConfigurer<ErasureTarget> Members 
    3739 
    38         public void LoadFrom(ErasureTarget target) 
     40        public void LoadFrom(IErasureTarget target) 
    3941        { 
    4042        } 
    4143 
    42         public bool SaveTo(ErasureTarget target) 
     44        public bool SaveTo(IErasureTarget target) 
    4345        { 
    4446            return true; 
     
    6971 
    7072        #endregion 
     73 
     74        #region IDragAndDropConfigurer<IErasureTarget> Members 
     75 
     76        public ICollection<IErasureTarget> ProcessArgument(System.Windows.Forms.DragEventArgs e) 
     77        { 
     78            //Then try to see if we have shell locations dropped on us. 
     79            if (e.Data.GetDataPresent("Shell IDList Array")) 
     80            { 
     81                MemoryStream stream = (MemoryStream)e.Data.GetData("Shell IDList Array"); 
     82                byte[] buffer = new byte[stream.Length]; 
     83                stream.Read(buffer, 0, buffer.Length); 
     84                ShellCIDA cida = new ShellCIDA(buffer); 
     85 
     86                if (cida.cidl > 0) 
     87                { 
     88                    for (int i = 1; i <= cida.cidl; ++i) 
     89                    { 
     90                        if (cida.aoffset[i].Guid == Shell.KnownFolderIDs.RecycleBin)                             
     91                        { 
     92                            return new IErasureTarget[] { new RecycleBinErasureTarget() }; 
     93                        } 
     94                    } 
     95                } 
     96            } 
     97 
     98            return new IErasureTarget[0]; 
     99        } 
     100 
     101        #endregion 
    71102    } 
    72103} 
  • branches/eraser6/pluginsRewrite/Eraser.Plugins/IConfigurer.cs

    r2356 r2451  
    2424using System.Linq; 
    2525using System.Text; 
     26 
     27using System.Windows.Forms; 
    2628 
    2729namespace Eraser.Plugins 
     
    6971        bool ProcessArgument(string argument); 
    7072    } 
     73 
     74    /// <summary> 
     75    /// Represents an object which is able to configure a given instance of 
     76    /// <typeparamref name="T"/> from a Drag-and-Drop operation. 
     77    /// </summary> 
     78    /// <typeparam name="T">The type to configure</typeparam> 
     79    public interface IDragAndDropConfigurer<T> : IConfigurer<T> 
     80    { 
     81        /// <summary> 
     82        /// Sets the configuration of the current configurer from the provided 
     83        /// Drag-and-Drop event argument. 
     84        /// </summary> 
     85        /// <param name="e">The event argument.</param> 
     86        /// <returns>A collection of T based on the drag-and-drop event.</returns> 
     87        ICollection<T> ProcessArgument(DragEventArgs e); 
     88    } 
    7189} 
  • branches/eraser6/pluginsRewrite/Eraser/TaskDragDropHelper.cs

    r2445 r2451  
    3131using Eraser.Util; 
    3232using Eraser.Manager; 
     33using Eraser.Plugins; 
    3334using Eraser.Plugins.ExtensionPoints; 
    3435 
     
    6465                    for (int i = 1; i <= cida.cidl; ++i) 
    6566                    { 
    66                         /*if (!string.IsNullOrEmpty(cida.aoffset[i].Path)) 
     67                        if (cida.aoffset[i].Guid == Shell.KnownFolderIDs.RecycleBin) 
    6768                        { 
    68                             files.Add(cida.aoffset[i].Path); 
    69                         } 
    70                         else */if (cida.aoffset[i].Guid != Guid.Empty) 
    71                         { 
    72                             if (cida.aoffset[i].Guid == Shell.KnownFolderIDs.RecycleBin) 
    73                             { 
    74                                 recycleBin = true; 
    75                             } 
     69                            recycleBin = true; 
    7670                        } 
    7771                    } 
     
    8276        } 
    8377 
    84         public static ICollection<IErasureTarget> GetTargets(ICollection<string> paths, bool recycleBin) 
     78        /// <summary> 
     79        /// Parses a list of locations dropped on the target, converting them to the appropriate 
     80        /// IErasureTarget instance. 
     81        /// </summary> 
     82        /// <param name="e">The event argument.</param> 
     83        /// <returns>A list of erasure targets which will erase all the files and directories 
     84        /// as described by the drag-and-drop operation.</returns> 
     85        public static ICollection<IErasureTarget> GetTargets(DragEventArgs e) 
    8586        { 
    8687            ICollection<IErasureTarget> result = new List<IErasureTarget>(); 
    87             foreach (string path in paths) 
     88            foreach (IErasureTarget target in Host.Instance.ErasureTargetFactories) 
    8889            { 
    89                 //If the path doesn't exist, skip the file 
    90                 if (!(File.Exists(path) || Directory.Exists(path))) 
     90                //Skip targets not supporting IDragAndDropConfigurer 
     91                if (!(target.Configurer is IDragAndDropConfigurer<IErasureTarget>)) 
    9192                    continue; 
    9293 
    93                 FileSystemObjectErasureTarget target; 
    94                 if ((File.GetAttributes(path) & FileAttributes.Directory) != 0) 
    95                     target = new FolderErasureTarget(); 
    96                 else 
    97                     target = new FileErasureTarget(); 
    98                 target.Path = path; 
    99  
    100                 result.Add(target); 
     94                IDragAndDropConfigurer<IErasureTarget> configurer = 
     95                    (IDragAndDropConfigurer<IErasureTarget>)target.Configurer; 
     96                foreach (IErasureTarget newTarget in configurer.ProcessArgument(e)) 
     97                    result.Add(newTarget); 
    10198            } 
    10299 
    103             //Add the recycle bin if it was specified 
    104             if (recycleBin) 
    105                 result.Add(new RecycleBinErasureTarget()); 
    106  
    107             //Return our result 
    108100            return result; 
    109101        } 
Note: See TracChangeset for help on using the changeset viewer.