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);
}