/// <summary>
        /// Creates a log that monitors pending deletions.
        /// </summary>
        /// <param name="settings">Optional settings for the log. If none are specified, the default will not load the settings.</param>
        public ArchiveListLog(ArchiveListLogSettings settings = null)
            : base(MessageClass.Framework)
        {
            if (settings == null)
            {
                settings = new ArchiveListLogSettings();
            }

            m_settings = settings.CloneReadonly();
            m_settings.Validate();

            m_syncRoot    = new object();
            m_pendingFile = new ArchiveListLogFile();

            if (m_settings.IsFileBacked)
            {
                foreach (var file in Directory.GetFiles(m_settings.LogPath, m_settings.SearchPattern))
                {
                    var logFile = new ArchiveListLogFile();
                    logFile.Load(file);
                    if (logFile.IsValid)
                    {
                        m_files.Add(logFile);
                    }
                }
            }

            m_allFilesToDelete = new HashSet <Guid>(GetAllFilesToDelete());
        }
 /// <summary>
 /// Creates a new instance of <see cref="ArchiveListSettings"/>
 /// </summary>
 public ArchiveListSettings()
 {
     m_importPaths = new ImmutableList <string>(x =>
     {
         PathHelpers.ValidatePathName(x);
         return(x);
     });
     m_importExtensions = new ImmutableList <string>(PathHelpers.FormatExtension);
     m_logSettings      = new ArchiveListLogSettings();
 }