예제 #1
0
        public static void BeginFileCopy(string fileFullName, string fileName, IProgress <double> progress, PluginConfiguration config, ISessionManager sessionManager)
        {
            Progress       = progress;
            SessionManager = sessionManager;

            var key         = Path.GetFileNameWithoutExtension(fileName);
            var extractPath = config.EmbyAutoOrganizeFolderPath + "\\" + (key);
            var Source      = new FileInfo(fileName: fileFullName);
            var Destination = new FileInfo(extractPath + "\\" + fileName);

            if (Destination.Exists)
            {
                Destination.Delete();
            }

            Directory.CreateDirectory(extractPath);

            CurrentObjective = new ExtractionInfo {
                Name = Path.GetFileNameWithoutExtension(fileName)
            };


            CopyFileCallbackAction MyCallback(FileInfo source, FileInfo destination, object state, long totalFileSize, long totalBytesTransferred)
            {
                CurrentObjective.Progress = Math.Round((totalBytesTransferred / (double)totalFileSize) * 100.0, 1);

                SessionManager.SendMessageToAdminSessions("ExtractionProgress", CurrentObjective, CancellationToken.None);

                Progress.Report(CurrentObjective.Progress);

                return(CopyFileCallbackAction.CONTINUE);
            }

            CopyFile(Source, Destination, CopyFileOptions.NONE, MyCallback);
        }
        public static void BeginCompressedFileExtraction(string fullFileName, string fileName, ILogger log, IProgress <double> prog, PluginConfiguration config, ISessionManager sessionManager)
        {
            Progress       = prog;
            SessionManager = sessionManager;

            log.Info("Found New RAR File to Decompress: " + fileName);

            CurrentObjective = new ExtractionInfo {
                Name = Path.GetFileNameWithoutExtension(fileName)
            };

            string extractPath = $"{config.EmbyAutoOrganizeFolderPath}\\{Path.GetFileNameWithoutExtension(fileName)}";

            log.Info("Creating Extraction Path: " + extractPath);

            Directory.CreateDirectory(extractPath);

            var archive = ArchiveFactory.Open(fullFileName);

            log.Info("Archive open: " + fullFileName);

            // Calculate the total extraction size.
            totalSize = archive.TotalSize;
            log.Info("Archive Total Size: " + totalSize);

            foreach (IArchiveEntry entry in archive.Entries.Where(entry => !entry.IsDirectory))
            {
                archive.EntryExtractionEnd  += FileMoveSuccess;
                archive.CompressedBytesRead += Archive_CompressedBytesRead;

                entry.WriteToDirectory(extractPath, new ExtractionOptions
                {
                    ExtractFullPath = true,
                    Overwrite       = true
                });
            }
        }