Bookmark Refactor (#893)
* Fixed a bug which didn't take sort direction when not changing sort field * Added foundation for Bookmark refactor * Code broken, need to take a break. Issue is Getting bookmark image needs authentication but UI doesn't send. * Implemented the ability to send bookmarked files to the web. Implemented ability to clear bookmarks on disk on a re-occuring basis. * Updated the bookmark design to have it's own card that is self contained. View bookmarks modal has been updated to better lay out the cards. * Refactored download bookmark codes to select files from bookmark directory directly rather than open underlying files. * Wrote the basic logic to kick start the bookmark migration. Added Installed Version into the DB to allow us to know more accurately when to run migrations * Implemented the ability to change the bookmarks directory * Updated all references to BookmarkDirectory to use setting from the DB. Updated Server Settings page to use 2 col for some rows. * Refactored some code to DirectoryService (hasWriteAccess) and fixed up some unit tests from a previous PR. * Treat folders that start with ._ as blacklisted. * Implemented Reset User preferences. Some extra code to prep for the migration. * Implemented a migration for existing bookmarks to using new filesystem based bookmarks
This commit is contained in:
parent
04ffd1ef6f
commit
a1a6333f09
45 changed files with 2006 additions and 103 deletions
|
@ -21,6 +21,10 @@ namespace API.Services
|
|||
string TempDirectory { get; }
|
||||
string ConfigDirectory { get; }
|
||||
/// <summary>
|
||||
/// Original BookmarkDirectory. Only used for resetting directory. Use <see cref="ServerSettings.BackupDirectory"/> for actual path.
|
||||
/// </summary>
|
||||
string BookmarkDirectory { get; }
|
||||
/// <summary>
|
||||
/// Lists out top-level folders for a given directory. Filters out System and Hidden folders.
|
||||
/// </summary>
|
||||
/// <param name="rootPath">Absolute path of directory to scan.</param>
|
||||
|
@ -50,7 +54,7 @@ namespace API.Services
|
|||
void DeleteFiles(IEnumerable<string> files);
|
||||
void RemoveNonImages(string directoryName);
|
||||
void Flatten(string directoryName);
|
||||
|
||||
Task<bool> CheckWriteAccess(string directoryName);
|
||||
}
|
||||
public class DirectoryService : IDirectoryService
|
||||
{
|
||||
|
@ -60,6 +64,7 @@ namespace API.Services
|
|||
public string LogDirectory { get; }
|
||||
public string TempDirectory { get; }
|
||||
public string ConfigDirectory { get; }
|
||||
public string BookmarkDirectory { get; }
|
||||
private readonly ILogger<DirectoryService> _logger;
|
||||
|
||||
private static readonly Regex ExcludeDirectories = new Regex(
|
||||
|
@ -76,6 +81,7 @@ namespace API.Services
|
|||
LogDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "config", "logs");
|
||||
TempDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "config", "temp");
|
||||
ConfigDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "config");
|
||||
BookmarkDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "config", "bookmarks");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -268,7 +274,7 @@ namespace API.Services
|
|||
/// <returns></returns>
|
||||
public bool IsDirectoryEmpty(string path)
|
||||
{
|
||||
return Directory.EnumerateFileSystemEntries(path).Any();
|
||||
return FileSystem.Directory.Exists(path) && !FileSystem.Directory.EnumerateFileSystemEntries(path).Any();
|
||||
}
|
||||
|
||||
public string[] GetFilesWithExtension(string path, string searchPatternExpression = "")
|
||||
|
@ -682,6 +688,30 @@ namespace API.Services
|
|||
FlattenDirectory(directory, directory, ref index);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether a directory has write permissions
|
||||
/// </summary>
|
||||
/// <param name="directoryName">Fully qualified path</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> CheckWriteAccess(string directoryName)
|
||||
{
|
||||
try
|
||||
{
|
||||
ExistOrCreate(directoryName);
|
||||
await FileSystem.File.WriteAllTextAsync(
|
||||
FileSystem.Path.Join(directoryName, "test.txt"),
|
||||
string.Empty);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ClearAndDeleteDirectory(directoryName);
|
||||
return false;
|
||||
}
|
||||
|
||||
ClearAndDeleteDirectory(directoryName);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private void FlattenDirectory(IDirectoryInfo root, IDirectoryInfo directory, ref int directoryIndex)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue