Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }