Add option for user to choose custom temp folder

This commit is contained in:
Michael Bucari-Tovo 2022-12-17 11:42:55 -07:00
parent 44feab9eb2
commit b5519c4875
5 changed files with 35 additions and 45 deletions

View File

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Dinah.Core;

View File

@ -11,42 +11,30 @@ using System.Threading.Tasks;
namespace AaxDecrypter
{
/// <summary>
/// A resumable, simultaneous file downloader and reader.
/// </summary>
/// <summary>A resumable, simultaneous file downloader and reader. </summary>
public class NetworkFileStream : Stream, IUpdatable
{
public event EventHandler Updated;
#region Public Properties
/// <summary>
/// Location to save the downloaded data.
/// </summary>
/// <summary> Location to save the downloaded data. </summary>
[JsonProperty(Required = Required.Always)]
public string SaveFilePath { get; }
/// <summary>
/// Http(s) address of the file to download.
/// </summary>
/// <summary> Http(s) address of the file to download. </summary>
[JsonProperty(Required = Required.Always)]
public Uri Uri { get; private set; }
/// <summary>
/// Http headers to be sent to the server with the request.
/// </summary>
/// <summary> Http headers to be sent to the server with the request. </summary>
[JsonProperty(Required = Required.Always)]
public Dictionary<string, string> RequestHeaders { get; private set; }
/// <summary>
/// The position in <see cref="SaveFilePath"/> that has been written and flushed to disk.
/// </summary>
/// <summary> The position in <see cref="SaveFilePath"/> that has been written and flushed to disk. </summary>
[JsonProperty(Required = Required.Always)]
public long WritePosition { get; private set; }
/// <summary>
/// The total length of the <see cref="Uri"/> file to download.
/// </summary>
/// <summary> The total length of the <see cref="Uri"/> file to download. </summary>
[JsonProperty(Required = Required.Always)]
public long ContentLength { get; private set; }
@ -76,9 +64,7 @@ namespace AaxDecrypter
#region Constructor
/// <summary>
/// A resumable, simultaneous file downloader and reader.
/// </summary>
/// <summary> A resumable, simultaneous file downloader and reader. </summary>
/// <param name="saveFilePath">Path to a location on disk to save the downloaded data from <paramref name="uri"/></param>
/// <param name="uri">Http(s) address of the file to download.</param>
/// <param name="writePosition">The position in <paramref name="uri"/> to begin downloading.</param>
@ -111,9 +97,7 @@ namespace AaxDecrypter
#region Downloader
/// <summary>
/// Update the <see cref="JsonFilePersister"/>.
/// </summary>
/// <summary> Update the <see cref="JsonFilePersister"/>. </summary>
private void Update()
{
RequestHeaders["Range"] = $"bytes={WritePosition}-";
@ -127,9 +111,7 @@ namespace AaxDecrypter
}
}
/// <summary>
/// Set a different <see cref="System.Uri"/> to the same file targeted by this instance of <see cref="NetworkFileStream"/>
/// </summary>
/// <summary> Set a different <see cref="System.Uri"/> to the same file targeted by this instance of <see cref="NetworkFileStream"/> </summary>
/// <param name="uriToSameFile">New <see cref="System.Uri"/> host must match existing host.</param>
public void SetUriForSameFile(Uri uriToSameFile)
{
@ -295,9 +277,7 @@ namespace AaxDecrypter
return _readFile.Position = newPosition;
}
/// <summary>
/// Blocks until the file has downloaded to at least <paramref name="requiredPosition"/>, then returns.
/// </summary>
/// <summary>Blocks until the file has downloaded to at least <paramref name="requiredPosition"/>, then returns. </summary>
/// <param name="requiredPosition">The minimum required flished data length in <see cref="SaveFilePath"/>.</param>
private void WaitToPosition(long requiredPosition)
{

View File

@ -351,21 +351,27 @@
</Grid>
</controls:GroupBox>
<controls:GroupBox
Grid.Row="2"
Margin="5"
BorderWidth="1"
Label="Temporary Files Location">
<StackPanel
Grid.Row="2"
Margin="5" >
<TextBlock
Margin="0,0,0,10"
Text="{Binding DownloadDecryptSettings.InProgressDescriptionText}" />
<controls:DirectorySelectControl
SubDirectory="Libation\DecryptInProgress"
SelectedDirectory="{Binding DownloadDecryptSettings.InProgressDirectory, Mode=TwoWay}" />
<controls:DirectoryOrCustomSelectControl
SubDirectory="Libation"
Directory="{Binding DownloadDecryptSettings.InProgressDirectory, Mode=TwoWay}"
KnownDirectories="{Binding DownloadDecryptSettings.KnownDirectories}" />
</StackPanel>
</controls:GroupBox>
<CheckBox
Grid.Row="3"

View File

@ -9,6 +9,7 @@ using ReactiveUI;
using Dinah.Core;
using System.Linq;
using FileManager;
using System.IO;
namespace LibationAvalonia.Dialogs
{
@ -227,7 +228,6 @@ namespace LibationAvalonia.Dialogs
public class DownloadDecryptSettings : ViewModels.ViewModelBase, ISettingsDisplay
{
private bool _badBookAsk;
private bool _badBookAbort;
private bool _badBookRetry;
@ -242,7 +242,16 @@ namespace LibationAvalonia.Dialogs
LoadSettings(config);
}
public Configuration.KnownDirectories InProgressDirectory { get; set; }
public List<Configuration.KnownDirectories> KnownDirectories { get; } = new()
{
Configuration.KnownDirectories.WinTemp,
Configuration.KnownDirectories.UserProfile,
Configuration.KnownDirectories.AppDir,
Configuration.KnownDirectories.MyDocs,
Configuration.KnownDirectories.LibationFiles
};
public string InProgressDirectory { get; set; }
public void LoadSettings(Configuration config)
{
BadBookAsk = config.BadBook is Configuration.BadBookAction.Ask;
@ -252,9 +261,7 @@ namespace LibationAvalonia.Dialogs
FolderTemplate = config.FolderTemplate;
FileTemplate = config.FileTemplate;
ChapterFileTemplate = config.ChapterFileTemplate;
InProgressDirectory
= config.InProgress == Configuration.AppDir_Absolute ? Configuration.KnownDirectories.AppDir
: Configuration.GetKnownDirectory(config.InProgress);
InProgressDirectory = config.InProgress;
UseCoverAsFolderIcon = config.UseCoverAsFolderIcon;
}
@ -289,9 +296,7 @@ namespace LibationAvalonia.Dialogs
config.FolderTemplate = FolderTemplate;
config.FileTemplate = FileTemplate;
config.ChapterFileTemplate = ChapterFileTemplate;
config.InProgress
= InProgressDirectory is Configuration.KnownDirectories.AppDir ? Configuration.AppDir_Absolute
: Configuration.GetKnownDirectoryPath(InProgressDirectory);
config.InProgress = InProgressDirectory;
config.UseCoverAsFolderIcon = UseCoverAsFolderIcon;

View File

@ -25,7 +25,7 @@ namespace LibationFileManager
[Description("The same folder that Libation is running from")]
AppDir = 2,
[Description("Windows temporary folder")]
[Description("System temporary folder")]
WinTemp = 3,
[Description("My Documents")]