public async Task Execute(CancellationToken cancellationToken, IProgress <double> progress) { var config = Plugin.Instance.Configuration; if (Equals(config.MonitoredFolder, null) || Equals(config.EmbyAutoOrganizeFolderPath, null)) { return; } logger = LogManager.GetLogger(Plugin.Instance.Name); var directoryInfo = FileSystem.GetDirectories(path: config.MonitoredFolder); var directoryInfoList = directoryInfo.ToList(); logger.Info("Found: " + directoryInfoList.Count() + " folders in " + config.MonitoredFolder); foreach (var newMediaFolder in directoryInfoList) { if (FileSystem.FileExists(newMediaFolder.FullName + "\\####emby.extracted####")) { continue; } logger.Info("New media file: " + newMediaFolder.FullName); logger.Info("Creating compression marker " + newMediaFolder.FullName + "\\####emby.extracted####"); using (var sr = new StreamWriter(newMediaFolder.FullName + "\\####emby.extracted####")) { sr.Flush(); } var newMediaFiles = FileSystem.GetFiles(newMediaFolder.FullName); foreach (var file in newMediaFiles) { if (file.FullName.IndexOf("sample", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } logger.Info("File checked: " + file.Name); switch (file.Extension) { case ".rar": logger.Info("Found new compressed file to decompress: " + file.Name); await Task.Run( () => UnzipAndCopyFiles.BeginDecompressionAndCopy(file.FullName, file.Name, logger, progress, config), cancellationToken); config.CompletedItems.Add(new ExtractionInfo { Name = newMediaFolder.Name, completed = DateTime.Now.ToString("yyyy-M-dd--HH:mm-ss"), size = FileSizeConversions.SizeSuffix(file.Length), extention = file.Extension, CreationTimeUTC = file.CreationTimeUtc, CopyType = "Unpacked" }); break; // ReSharper disable RedundantCaseLabel case ".mkv": case ".avi": case ".mp4": logger.Info("Found New File to Copy: " + file.Name); await Task.Run( () => CopyFiles.BeginCopy(file.FullName, file.Name, progress, Plugin.Instance.Configuration), cancellationToken); config.CompletedItems.Add(new ExtractionInfo { Name = newMediaFolder.Name, completed = DateTime.Now.ToString("yyyy-M-dd--HH:mm-ss"), size = FileSizeConversions.SizeSuffix(file.Length), extention = file.Extension, CreationTimeUTC = file.CreationTimeUtc, CopyType = "Copied" }); break; } } Plugin.Instance.UpdateConfiguration(new PluginConfiguration { EmbyAutoOrganizeFolderPath = config.EmbyAutoOrganizeFolderPath, MonitoredFolder = config.MonitoredFolder, CompletedItems = config.CompletedItems }); } progress.Report(100); }
public async Task Execute(CancellationToken cancellationToken, IProgress <double> progress) { var config = Plugin.Instance.Configuration; if (config.MonitoredFolder is null || config.EmbyAutoOrganizeFolderPath is null) { return; } logger = LogManager.GetLogger(Plugin.Instance.Name); var monitoredDirectoryInfo = FileSystem.GetDirectories(path: config.MonitoredFolder); var monitoredDirectoryContents = monitoredDirectoryInfo.ToList(); logger.Info("Found: " + monitoredDirectoryContents.Count() + " folders in " + config.MonitoredFolder); foreach (var mediaFolder in monitoredDirectoryContents) { //Ignore this directory if there is an 'extraction marker' file present because we have already extracted the contents of this folder. if (FileSystem.FileExists(mediaFolder.FullName + "\\####emby.extracted####")) { continue; } logger.Info("New media folder: " + mediaFolder.FullName); CreateExtractionMarker(mediaFolder.FullName, logger); var newMediaFiles = FileSystem.GetFiles(mediaFolder.FullName); foreach (var file in newMediaFiles) { if (file.FullName.IndexOf("sample", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } logger.Info("File checked: " + file.Name); switch (file.Extension) { case ".rar": logger.Info("Found new compressed file to extract: " + file.Name); await Task.Run( () => UnzipAndCopyFiles.BeginCompressedFileExtraction(file.FullName, file.Name, logger, progress, config, SessionManager), cancellationToken); config.CompletedItems.Add(new ExtractionInfo { Name = mediaFolder.Name, completed = DateTime.Now, size = FileSizeConversions.SizeSuffix(file.Length), extension = file.Extension, CopyType = "Unpacked" }); break; case ".mkv": case ".avi": case ".mp4": logger.Info("Found new file to copy: " + file.Name); await Task.Run( () => CopyFiles.BeginFileCopy(file.FullName, file.Name, progress, Plugin.Instance.Configuration, SessionManager), cancellationToken); config.CompletedItems.Add(new ExtractionInfo { Name = mediaFolder.Name, completed = DateTime.Now, size = FileSizeConversions.SizeSuffix(file.Length), extension = file.Extension, CopyType = "Copied" }); break; } } Plugin.Instance.UpdateConfiguration(new PluginConfiguration { EmbyAutoOrganizeFolderPath = config.EmbyAutoOrganizeFolderPath, MonitoredFolder = config.MonitoredFolder, CompletedItems = config.CompletedItems.Where(i => i.completed > DateTime.Now.AddDays(-30)).ToList() //No need to keep a list of items that are 30 days old }); } progress.Report(100); }