/// <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> /// If the log is file backed /// </summary> public void SaveLogToDisk() { if (!m_settings.IsFileBacked) { return; } lock (m_syncRoot) { if (m_disposed) { throw new ObjectDisposedException(GetType().FullName); } if (m_pendingFile.FilesToDelete.Count > 0) { string file = m_settings.GenerateNewFileName(); m_pendingFile.Save(file); m_files.Add(m_pendingFile); m_pendingFile = new ArchiveListLogFile(); } } }