using System; using System.Collections.Generic; using System.IO; using System.IO.Abstractions; using System.Threading.Tasks; using Kavita.Common.Helpers; using Kavita.Models.DTOs.System; using Kavita.Models.Entities.Enums; using Microsoft.Extensions.Logging; namespace Kavita.API.Services; public interface IDirectoryService { IFileSystem FileSystem { get; } string CacheDirectory { get; } string CoverImageDirectory { get; } string LogDirectory { get; } string TempDirectory { get; } string ConfigDirectory { get; } string SiteThemeDirectory { get; } string FaviconDirectory { get; } string LocalizationDirectory { get; } string CustomizedTemplateDirectory { get; } string TemplateDirectory { get; } string PublisherDirectory { get; } /// /// Used for caching documents that may need to stay on disk for more than a day /// string LongTermCacheDirectory { get; } /// /// Original BookmarkDirectory. Only used for resetting directory. Use for actual path. /// string BookmarkDirectory { get; } /// /// Used for random files needed, like images to check against, list of countries, etc /// string AssetsDirectory { get; } string EpubFontDirectory { get; } string BackupDirectory { get; } /// /// Lists out top-level folders for a given directory. Filters out System and Hidden folders. /// /// Absolute path of directory to scan. /// List of folder names IEnumerable ListDirectory(string rootPath); Task ReadFileAsync(string path); bool CopyFilesToDirectory(IEnumerable filePaths, string directoryPath, string prepend = ""); bool CopyFilesToDirectory(IEnumerable filePaths, string directoryPath, IList newFilenames); bool Exists(string directory); void CopyFileToDirectory(string fullFilePath, string targetDirectory); int TraverseTreeParallelForEach(string root, Action action, string searchPattern, ILogger logger); bool IsDriveMounted(string path); bool IsDirectoryEmpty(string path); long GetTotalSize(IEnumerable paths); void ClearDirectory(string directoryPath); void ClearAndDeleteDirectory(string directoryPath); string[] GetFilesWithExtension(string path, string searchPatternExpression = ""); bool CopyDirectoryToDirectory(string? sourceDirName, string destDirName, string searchPattern = ""); Dictionary FindHighestDirectoriesFromFiles(IEnumerable libraryFolders, IList filePaths); string? FindLowestDirectoriesFromFiles(IList libraryFolders, IList filePaths); IEnumerable GetFoldersTillRoot(string rootPath, string fullPath); IEnumerable GetFiles(string path, string fileNameRegex = "", SearchOption searchOption = SearchOption.TopDirectoryOnly); bool ExistOrCreate(string directoryPath); void DeleteFiles(IEnumerable files); void CopyFile(string sourcePath, string destinationPath, bool overwrite = true); void RemoveNonImages(string directoryName); void Flatten(string directoryName); Task CheckWriteAccess(string directoryName); IEnumerable GetFilesWithCertainExtensions(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.TopDirectoryOnly); IEnumerable GetDirectories(string folderPath); IEnumerable GetDirectories(string folderPath, GlobMatcher? matcher); IEnumerable GetAllDirectories(string folderPath, GlobMatcher? matcher = null); string GetParentDirectoryName(string fileOrFolder); IList ScanFiles(string folderPath, string fileTypes, GlobMatcher? matcher = null, SearchOption searchOption = SearchOption.AllDirectories); DateTime GetLastWriteTime(string folderPath); }