Convert more tables to use DynamicTable and implement tracker page context menu

This commit is contained in:
ahjephson
2024-07-19 19:32:07 +01:00
parent ab548bb0e8
commit 2247a08eea
39 changed files with 535 additions and 400 deletions

View File

@@ -3,7 +3,7 @@
<table width="100%"> <table width="100%">
<tbody> <tbody>
<tr> <tr>
<td style="width: 100%"><MudTextField T="string" Label="Tag" Value="@Tag" ValueChanged="SetTag" ShrinkLabel Required Variant="Variant.Outlined" /></td> <td style="width: 100%"><MudTextField T="string" Label="Tag" Value="@Tag" ValueChanged="SetTag" Required Variant="Variant.Outlined" /></td>
<td><MudIconButton Icon="@Icons.Material.Filled.Add" OnClick="AddTag" /></td> <td><MudIconButton Icon="@Icons.Material.Filled.Add" OnClick="AddTag" /></td>
</tr> </tr>
@foreach (var tag in Tags) @foreach (var tag in Tags)
@@ -11,7 +11,7 @@
var tagRef = tag; var tagRef = tag;
<tr> <tr>
<td>@tag</td> <td>@tag</td>
<td><MudIconButton Icon="@Icons.Material.Filled.Delete" /></td> <td><MudIconButton Icon="@Icons.Material.Filled.Delete" OnClick="@(e => DeleteTag(tagRef))" /></td>
</tr> </tr>
} }
</tbody> </tbody>

View File

@@ -34,6 +34,11 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
Tag = tag; Tag = tag;
} }
protected void DeleteTag(string tag)
{
Tags.Remove(tag);
}
protected void Cancel() protected void Cancel()
{ {
MudDialog.Cancel(); MudDialog.Cancel();

View File

@@ -2,7 +2,7 @@
<DialogContent> <DialogContent>
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField Label="Urls" Lines="10" @bind-Value="Urls" Variant="Variant.Outlined" /> <MudTextField Label="Urls" Lines="10" @bind-Value="Urls" Variant="Variant.Outlined" AutoFocus="true" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
<AddTorrentOptions @ref="TorrentOptions" ShowCookieOption="false" /> <AddTorrentOptions @ref="TorrentOptions" ShowCookieOption="false" />

View File

@@ -0,0 +1,24 @@
<MudDialog>
<DialogContent>
<table width="100%">
<tbody>
<tr>
<td style="width: 100%"><MudTextField T="string" Label="Tag" Value="@Tracker" ValueChanged="SetTracker" Required Variant="Variant.Outlined" /></td>
<td><MudIconButton Icon="@Icons.Material.Filled.Add" OnClick="AddTracker" /></td>
</tr>
@foreach (var tracker in Trackers)
{
var trackerRef = tracker;
<tr>
<td>@tracker</td>
<td><MudIconButton Icon="@Icons.Material.Filled.Delete" OnClick="@(e => DeleteTracker(trackerRef))" /></td>
</tr>
}
</tbody>
</table>
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="Submit">Save</MudButton>
</DialogActions>
</MudDialog>

View File

@@ -0,0 +1,45 @@
using Microsoft.AspNetCore.Components;
using MudBlazor;
namespace Lantean.QBTMudBlade.Components.Dialogs
{
public partial class AddTrackerDialog
{
[CascadingParameter]
public MudDialogInstance MudDialog { get; set; } = default!;
protected HashSet<string> Trackers { get; } = [];
protected string? Tracker { get; set; }
protected void AddTracker()
{
if (string.IsNullOrEmpty(Tracker))
{
return;
}
Trackers.Add(Tracker);
Tracker = null;
}
protected void SetTracker(string tracker)
{
Tracker = tracker;
}
protected void DeleteTracker(string tracker)
{
Trackers.Remove(tracker);
}
protected void Cancel()
{
MudDialog.Cancel();
}
protected void Submit()
{
MudDialog.Close(Trackers);
}
}
}

View File

@@ -2,10 +2,10 @@
<DialogContent> <DialogContent>
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField Label="Category" @bind-Value="Category" Required ShrinkLabel Variant="Variant.Outlined" /> <MudTextField Label="Category" @bind-Value="Category" Required Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField Label="Save Path" @bind-Value="SavePath" Required ShrinkLabel Variant="Variant.Outlined" /> <MudTextField Label="Save Path" @bind-Value="SavePath" Required Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</DialogContent> </DialogContent>

View File

@@ -12,7 +12,7 @@
<MudCheckBox T="bool" ValueChanged="@(c => SetSelected(c, column.Id))" Label="@column.Header" LabelPosition="LabelPosition.End" Value="@(SelectedColumnsInternal.Contains(column.Id))" /> <MudCheckBox T="bool" ValueChanged="@(c => SetSelected(c, column.Id))" Label="@column.Header" LabelPosition="LabelPosition.End" Value="@(SelectedColumnsInternal.Contains(column.Id))" />
</MudItem> </MudItem>
<MudItem xs="3"> <MudItem xs="3">
<MudTextField T="string" Value="@(GetValue(column.Width, column.Id))" ValueChanged="@(c => SetWidth(c, column.Id))" Label="Width" Variant="Variant.Text" HelperText="px" Adornment="Adornment.End" AdornmentIcon="@Icons.Material.Outlined.WidthNormal" ShrinkLabel="true" OnAdornmentClick="@(c => SetWidth("auto", column.Id))" /> <MudTextField T="string" Value="@(GetValue(column.Width, column.Id))" ValueChanged="@(c => SetWidth(c, column.Id))" Label="Width" Variant="Variant.Text" HelperText="px" Adornment="Adornment.End" AdornmentIcon="@Icons.Material.Outlined.WidthNormal" OnAdornmentClick="@(c => SetWidth("auto", column.Id))" />
</MudItem> </MudItem>
<MudItem xs="1"> <MudItem xs="1">
<MudIconButton Icon="@Icons.Material.Outlined.KeyboardArrowUp" Disabled="@(index == 0)" OnClick="@(e => MoveUp(index))" /> <MudIconButton Icon="@Icons.Material.Outlined.KeyboardArrowUp" Disabled="@(index == 0)" OnClick="@(e => MoveUp(index))" />

View File

@@ -22,6 +22,8 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
protected HashSet<string> SelectedColumnsInternal { get; set; } = []; protected HashSet<string> SelectedColumnsInternal { get; set; } = [];
protected Dictionary<string, int?> WidthsInternal { get; set; } = [];
protected override void OnParametersSet() protected override void OnParametersSet()
{ {
if (SelectedColumnsInternal.Count == 0) if (SelectedColumnsInternal.Count == 0)
@@ -41,6 +43,14 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
} }
} }
} }
if (WidthsInternal.Count == 0)
{
foreach (var width in Widths)
{
WidthsInternal[width.Key] = width.Value;
}
}
} }
protected void SetSelected(bool selected, string id) protected void SetSelected(bool selected, string id)
@@ -64,22 +74,22 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
{ {
if (width == defaultWidth) if (width == defaultWidth)
{ {
Widths.Remove(id); WidthsInternal.Remove(id);
} }
else else
{ {
Widths[id] = width; WidthsInternal[id] = width;
} }
} }
else else
{ {
if (defaultWidth is null) if (defaultWidth is null)
{ {
Widths.Remove(id); WidthsInternal.Remove(id);
} }
else else
{ {
Widths[id] = null; WidthsInternal[id] = null;
} }
} }
} }
@@ -106,7 +116,7 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
protected string GetValue(int? value, string columnId) protected string GetValue(int? value, string columnId)
{ {
if (Widths.TryGetValue(columnId, out var newWidth)) if (WidthsInternal.TryGetValue(columnId, out var newWidth))
{ {
value = newWidth; value = newWidth;
} }
@@ -131,7 +141,7 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
protected void Submit(MouseEventArgs args) protected void Submit(MouseEventArgs args)
{ {
MudDialog.Close(DialogResult.Ok((SelectedColumnsInternal, Widths))); MudDialog.Close(DialogResult.Ok((SelectedColumnsInternal, WidthsInternal)));
} }
} }
} }

View File

@@ -101,7 +101,7 @@ namespace Lantean.QBTMudBlade.Components.Dialogs
protected async Task AddTag() protected async Task AddTag()
{ {
var addedTags = await DialogService.ShowAddTagsDialog(ApiClient); var addedTags = await DialogService.ShowAddTagsDialog();
if (addedTags is null || addedTags.Count == 0) if (addedTags is null || addedTags.Count == 0)
{ {

View File

@@ -4,7 +4,7 @@
<DialogContent> <DialogContent>
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="T" Label="@GetLabel()" Value="@Value" Disabled="Disabled" Variant="Variant.Outlined" ShrinkLabel="true" /> <MudTextField T="T" Label="@GetLabel()" Value="@Value" Disabled="Disabled" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</DialogContent> </DialogContent>

View File

@@ -4,7 +4,7 @@
<DialogContent> <DialogContent>
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="T" Label="@GetLabel()" Value="@Value" Min="@Min" Max="@Max" Disabled="Disabled" Variant="Variant.Outlined" ShrinkLabel="true" /> <MudNumericField T="T" Label="@GetLabel()" Value="@Value" Min="@Min" Max="@Max" Disabled="Disabled" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSlider T="T" ValueLabel="true" Value="@Value" Min="@Min" Max="@Max" Disabled="Disabled" /> <MudSlider T="T" ValueLabel="true" Value="@Value" Min="@Min" Max="@Max" Disabled="Disabled" />

View File

@@ -313,7 +313,13 @@ namespace Lantean.QBTMudBlade.Components
return; return;
} }
await DialogService.ShowAddTagsDialog(ApiClient); var tags = await DialogService.ShowAddTagsDialog();
if (tags is null || tags.Count == 0)
{
return;
}
await ApiClient.CreateTags(tags);
} }
protected async Task RemoveTag() protected async Task RemoveTag()

View File

@@ -9,16 +9,16 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="string" Label="Resume data storage type (requires restart)" Value="ResumeDataStorageType" ValueChanged="ResumeDataStorageTypeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Resume data storage type (requires restart)" Value="ResumeDataStorageType" ValueChanged="ResumeDataStorageTypeChanged" Variant="Variant.Outlined">
<MudSelectItem T="string" Value="@("Legacy")">Fastresume files</MudSelectItem> <MudSelectItem T="string" Value="@("Legacy")">Fastresume files</MudSelectItem>
<MudSelectItem T="string" Value="@("SQLite")">SQLite database (experimental)</MudSelectItem> <MudSelectItem T="string" Value="@("SQLite")">SQLite database (experimental)</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Physical memory (RAM) usage limit (applied if libtorrent &gt;= 2.0)" Value="MemoryWorkingSetLimit" ValueChanged="MemoryWorkingSetLimitChanged" Min="0" HelperText="This option is less effective on Linux" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" /> <MudNumericField T="int" Label="Physical memory (RAM) usage limit (applied if libtorrent &gt;= 2.0)" Value="MemoryWorkingSetLimit" ValueChanged="MemoryWorkingSetLimitChanged" Min="0" HelperText="This option is less effective on Linux" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="string" Label="Network interface" Value="CurrentNetworkInterface" ValueChanged="CurrentNetworkInterfaceChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Network interface" Value="CurrentNetworkInterface" ValueChanged="CurrentNetworkInterfaceChanged" Variant="Variant.Outlined">
<MudSelectItem T="string" Value="@("")">Any interface</MudSelectItem> <MudSelectItem T="string" Value="@("")">Any interface</MudSelectItem>
@foreach (var networkInterface in NetworkInterfaces) @foreach (var networkInterface in NetworkInterfaces)
{ {
@@ -27,7 +27,7 @@
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="string" Label="Optional IP address to bind to" Value="CurrentInterfaceAddress" ValueChanged="CurrentInterfaceAddressChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Optional IP address to bind to" Value="CurrentInterfaceAddress" ValueChanged="CurrentInterfaceAddressChanged" Variant="Variant.Outlined">
<MudSelectItem T="string" Value="@("")">All addresses</MudSelectItem> <MudSelectItem T="string" Value="@("")">All addresses</MudSelectItem>
<MudSelectItem T="string" Value="@("0.0.0.0")">All IPv4 addresses</MudSelectItem> <MudSelectItem T="string" Value="@("0.0.0.0")">All IPv4 addresses</MudSelectItem>
<MudSelectItem T="string" Value="@("::")">All IPv6 addresses</MudSelectItem> <MudSelectItem T="string" Value="@("::")">All IPv6 addresses</MudSelectItem>
@@ -38,16 +38,16 @@
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Save resume data interval" Value="SaveResumeDataInterval" ValueChanged="SaveResumeDataIntervalChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="min" /> <MudNumericField T="int" Label="Save resume data interval" Value="SaveResumeDataInterval" ValueChanged="SaveResumeDataIntervalChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="min" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label=".torrent file size limit" Value="TorrentFileSizeLimit" ValueChanged="TorrentFileSizeLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" /> <MudNumericField T="int" Label=".torrent file size limit" Value="TorrentFileSizeLimit" ValueChanged="TorrentFileSizeLimitChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Recheck torrents on completion" Value="RecheckCompletedTorrents" ValueChanged="RecheckCompletedTorrentsChanged" /> <MudFieldSwitch Label="Recheck torrents on completion" Value="RecheckCompletedTorrents" ValueChanged="RecheckCompletedTorrentsChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Refresh interval" Value="RefreshInterval" ValueChanged="RefreshIntervalChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="ms" /> <MudNumericField T="int" Label="Refresh interval" Value="RefreshInterval" ValueChanged="RefreshIntervalChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="ms" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Resolve peer countries" Value="ResolvePeerCountries" ValueChanged="ResolvePeerCountriesChanged" /> <MudFieldSwitch Label="Resolve peer countries" Value="ResolvePeerCountries" ValueChanged="ResolvePeerCountriesChanged" />
@@ -59,7 +59,7 @@
<MudFieldSwitch Label="Enable embedded tracker" Value="EnableEmbeddedTracker" ValueChanged="EnableEmbeddedTrackerChanged" /> <MudFieldSwitch Label="Enable embedded tracker" Value="EnableEmbeddedTracker" ValueChanged="EnableEmbeddedTrackerChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Embedded tracker port" Value="EmbeddedTrackerPort" ValueChanged="EmbeddedTrackerPortChanged" Min="@Options.MinPortValue" Max="@Options.MaxPortValue" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Embedded tracker port" Value="EmbeddedTrackerPort" ValueChanged="EmbeddedTrackerPortChanged" Min="@Options.MinPortValue" Max="@Options.MaxPortValue" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Enable port forwarding for embedded tracker" Value="EmbeddedTrackerPortForwarding" ValueChanged="EmbeddedTrackerPortForwardingChanged" /> <MudFieldSwitch Label="Enable port forwarding for embedded tracker" Value="EmbeddedTrackerPortForwarding" ValueChanged="EmbeddedTrackerPortForwardingChanged" />
@@ -77,47 +77,47 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Bdecode depth limit" Value="BdecodeDepthLimit" ValueChanged="BdecodeDepthLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Bdecode depth limit" Value="BdecodeDepthLimit" ValueChanged="BdecodeDepthLimitChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Bdecode token limit" Value="BdecodeTokenLimit" ValueChanged="BdecodeTokenLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Bdecode token limit" Value="BdecodeTokenLimit" ValueChanged="BdecodeTokenLimitChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Asynchronous I/O threads" Value="AsyncIoThreads" ValueChanged="AsyncIoThreadsChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Asynchronous I/O threads" Value="AsyncIoThreads" ValueChanged="AsyncIoThreadsChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Hashing threads (requires libtorrent &gt;= 2.0)" Value="HashingThreads" ValueChanged="HashingThreadsChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Hashing threads (requires libtorrent &gt;= 2.0)" Value="HashingThreads" ValueChanged="HashingThreadsChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="File pool size" Value="FilePoolSize" ValueChanged="FilePoolSizeChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="File pool size" Value="FilePoolSize" ValueChanged="FilePoolSizeChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Outstanding memory when checking torrents" Value="CheckingMemoryUse" ValueChanged="CheckingMemoryUseChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" /> <MudNumericField T="int" Label="Outstanding memory when checking torrents" Value="CheckingMemoryUse" ValueChanged="CheckingMemoryUseChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Disk cache (requires libtorrent &lt; 2.0)" Value="DiskCache" ValueChanged="DiskCacheChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" /> <MudNumericField T="int" Label="Disk cache (requires libtorrent &lt; 2.0)" Value="DiskCache" ValueChanged="DiskCacheChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="MiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Disk cache expiry interval (requires libtorrent &lt; 2.0)" Value="DiskCacheTtl" ValueChanged="DiskCacheTtlChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="s" /> <MudNumericField T="int" Label="Disk cache expiry interval (requires libtorrent &lt; 2.0)" Value="DiskCacheTtl" ValueChanged="DiskCacheTtlChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="s" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Disk queue size" Value="DiskQueueSize" ValueChanged="DiskQueueSizeChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" /> <MudNumericField T="int" Label="Disk queue size" Value="DiskQueueSize" ValueChanged="DiskQueueSizeChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Disk IO type (libtorrent &gt;= 2.0; requires restart)" Value="DiskIoType" ValueChanged="DiskIoTypeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Disk IO type (libtorrent &gt;= 2.0; requires restart)" Value="DiskIoType" ValueChanged="DiskIoTypeChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">Default</MudSelectItem> <MudSelectItem T="int" Value="0">Default</MudSelectItem>
<MudSelectItem T="int" Value="1">Memory mapped files</MudSelectItem> <MudSelectItem T="int" Value="1">Memory mapped files</MudSelectItem>
<MudSelectItem T="int" Value="2">POSIX-compliant</MudSelectItem> <MudSelectItem T="int" Value="2">POSIX-compliant</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Disk IO read mode" Value="DiskIoReadMode" ValueChanged="DiskIoReadModeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Disk IO read mode" Value="DiskIoReadMode" ValueChanged="DiskIoReadModeChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">Disable OS cache</MudSelectItem> <MudSelectItem T="int" Value="0">Disable OS cache</MudSelectItem>
<MudSelectItem T="int" Value="1">Enable OS cache</MudSelectItem> <MudSelectItem T="int" Value="1">Enable OS cache</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Disk IO write mode" Value="DiskIoWriteMode" ValueChanged="DiskIoWriteModeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Disk IO write mode" Value="DiskIoWriteMode" ValueChanged="DiskIoWriteModeChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">Disable OS cache</MudSelectItem> <MudSelectItem T="int" Value="0">Disable OS cache</MudSelectItem>
<MudSelectItem T="int" Value="1">Enable OS cache</MudSelectItem> <MudSelectItem T="int" Value="1">Enable OS cache</MudSelectItem>
<MudSelectItem T="int" Value="2">Write-through (requires libtorrent &gt;= 2.0.6)</MudSelectItem> <MudSelectItem T="int" Value="2">Write-through (requires libtorrent &gt;= 2.0.6)</MudSelectItem>
@@ -133,40 +133,40 @@
<MudFieldSwitch Label="Send upload piece suggestions" Value="EnableUploadSuggestions" ValueChanged="EnableUploadSuggestionsChanged" /> <MudFieldSwitch Label="Send upload piece suggestions" Value="EnableUploadSuggestions" ValueChanged="EnableUploadSuggestionsChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Send buffer watermark" Value="SendBufferWatermark" ValueChanged="SendBufferWatermarkChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" /> <MudNumericField T="int" Label="Send buffer watermark" Value="SendBufferWatermark" ValueChanged="SendBufferWatermarkChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Send buffer low watermark" Value="SendBufferLowWatermark" ValueChanged="SendBufferLowWatermarkChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" /> <MudNumericField T="int" Label="Send buffer low watermark" Value="SendBufferLowWatermark" ValueChanged="SendBufferLowWatermarkChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Send buffer watermark factor" Value="SendBufferWatermarkFactor" ValueChanged="SendBufferWatermarkFactorChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="%" /> <MudNumericField T="int" Label="Send buffer watermark factor" Value="SendBufferWatermarkFactor" ValueChanged="SendBufferWatermarkFactorChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="%" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Outgoing connections per second" Value="ConnectionSpeed" ValueChanged="ConnectionSpeedChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Outgoing connections per second" Value="ConnectionSpeed" ValueChanged="ConnectionSpeedChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Socket send buffer size [0: system default]" Value="SocketSendBufferSize" ValueChanged="SocketSendBufferSizeChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" /> <MudNumericField T="int" Label="Socket send buffer size [0: system default]" Value="SocketSendBufferSize" ValueChanged="SocketSendBufferSizeChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Socket receive buffer size [0: system default]" Value="SocketReceiveBufferSize" ValueChanged="SocketReceiveBufferSizeChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" /> <MudNumericField T="int" Label="Socket receive buffer size [0: system default]" Value="SocketReceiveBufferSize" ValueChanged="SocketReceiveBufferSizeChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Socket backlog size" Value="SocketBacklogSize" ValueChanged="SocketBacklogSizeChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Socket backlog size" Value="SocketBacklogSize" ValueChanged="SocketBacklogSizeChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Outgoing ports (Min) [0: disabled]" Value="OutgoingPortsMin" ValueChanged="OutgoingPortsMinChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Outgoing ports (Min) [0: disabled]" Value="OutgoingPortsMin" ValueChanged="OutgoingPortsMinChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Outgoing ports (Max) [0: disabled]" Value="OutgoingPortsMax" ValueChanged="OutgoingPortsMaxChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Outgoing ports (Max) [0: disabled]" Value="OutgoingPortsMax" ValueChanged="OutgoingPortsMaxChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="UPnP lease duration [0: permanent lease]" Value="UpnpLeaseDuration" ValueChanged="UpnpLeaseDurationChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="UPnP lease duration [0: permanent lease]" Value="UpnpLeaseDuration" ValueChanged="UpnpLeaseDurationChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Type of service (ToS) for connections to peers" Value="PeerTos" ValueChanged="PeerTosChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Type of service (ToS) for connections to peers" Value="PeerTos" ValueChanged="PeerTosChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="μTP-TCP mixed mode algorithm" Value="UtpTcpMixedMode" ValueChanged="UtpTcpMixedModeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="μTP-TCP mixed mode algorithm" Value="UtpTcpMixedMode" ValueChanged="UtpTcpMixedModeChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">Prefer TCP</MudSelectItem> <MudSelectItem T="int" Value="0">Prefer TCP</MudSelectItem>
<MudSelectItem T="int" Value="1">Peer proportional (throttles TCP)</MudSelectItem> <MudSelectItem T="int" Value="1">Peer proportional (throttles TCP)</MudSelectItem>
</MudSelect> </MudSelect>
@@ -187,13 +187,13 @@
<MudFieldSwitch Label="Disallow connection to peers on privileged ports" Value="BlockPeersOnPrivilegedPorts" ValueChanged="BlockPeersOnPrivilegedPortsChanged" /> <MudFieldSwitch Label="Disallow connection to peers on privileged ports" Value="BlockPeersOnPrivilegedPorts" ValueChanged="BlockPeersOnPrivilegedPortsChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Upload slots behavior" Value="UploadSlotsBehavior" ValueChanged="UploadSlotsBehaviorChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Upload slots behavior" Value="UploadSlotsBehavior" ValueChanged="UploadSlotsBehaviorChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">Fixed slots</MudSelectItem> <MudSelectItem T="int" Value="0">Fixed slots</MudSelectItem>
<MudSelectItem T="int" Value="1">Upload rate based</MudSelectItem> <MudSelectItem T="int" Value="1">Upload rate based</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Upload choking algorithm" Value="UploadChokingAlgorithm" ValueChanged="UploadChokingAlgorithmChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Upload choking algorithm" Value="UploadChokingAlgorithm" ValueChanged="UploadChokingAlgorithmChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">Round-robin</MudSelectItem> <MudSelectItem T="int" Value="0">Round-robin</MudSelectItem>
<MudSelectItem T="int" Value="1">Fastest upload</MudSelectItem> <MudSelectItem T="int" Value="1">Fastest upload</MudSelectItem>
<MudSelectItem T="int" Value="2">Anti-leech</MudSelectItem> <MudSelectItem T="int" Value="2">Anti-leech</MudSelectItem>
@@ -206,37 +206,37 @@
<MudFieldSwitch Label="Always announce to all tiers" Value="AnnounceToAllTiers" ValueChanged="AnnounceToAllTiersChanged" /> <MudFieldSwitch Label="Always announce to all tiers" Value="AnnounceToAllTiers" ValueChanged="AnnounceToAllTiersChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="IP address reported to trackers (requires restart)" Value="AnnounceIp" ValueChanged="AnnounceIpChanged" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="IP address reported to trackers (requires restart)" Value="AnnounceIp" ValueChanged="AnnounceIpChanged" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Max concurrent HTTP announces" Value="MaxConcurrentHttpAnnounces" ValueChanged="MaxConcurrentHttpAnnouncesChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Max concurrent HTTP announces" Value="MaxConcurrentHttpAnnounces" ValueChanged="MaxConcurrentHttpAnnouncesChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Stop tracker timeout [0: disabled]" Value="StopTrackerTimeout" ValueChanged="StopTrackerTimeoutChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Stop tracker timeout [0: disabled]" Value="StopTrackerTimeout" ValueChanged="StopTrackerTimeoutChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Peer turnover disconnect percentage:" Value="PeerTurnover" ValueChanged="PeerTurnoverChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="%" /> <MudNumericField T="int" Label="Peer turnover disconnect percentage:" Value="PeerTurnover" ValueChanged="PeerTurnoverChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="%" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Peer turnover threshold percentage" Value="PeerTurnoverCutoff" ValueChanged="PeerTurnoverCutoffChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="%" /> <MudNumericField T="int" Label="Peer turnover threshold percentage" Value="PeerTurnoverCutoff" ValueChanged="PeerTurnoverCutoffChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="%" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Peer turnover disconnect interval" Value="PeerTurnoverInterval" ValueChanged="PeerTurnoverIntervalChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="s" /> <MudNumericField T="int" Label="Peer turnover disconnect interval" Value="PeerTurnoverInterval" ValueChanged="PeerTurnoverIntervalChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="s" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Maximum outstanding requests to a single peer" Value="RequestQueueSize" ValueChanged="RequestQueueSizeChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Maximum outstanding requests to a single peer" Value="RequestQueueSize" ValueChanged="RequestQueueSizeChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="I2P inbound quantity (requires libtorrent &gt;= 2.0)" Value="I2pInboundQuantity" ValueChanged="I2pInboundQuantityChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="I2P inbound quantity (requires libtorrent &gt;= 2.0)" Value="I2pInboundQuantity" ValueChanged="I2pInboundQuantityChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="I2P outbound quantity (requires libtorrent &gt;= 2.0)" Value="I2pOutboundQuantity" ValueChanged="I2pOutboundQuantityChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="I2P outbound quantity (requires libtorrent &gt;= 2.0)" Value="I2pOutboundQuantity" ValueChanged="I2pOutboundQuantityChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="I2P inbound length (requires libtorrent &gt;= 2.0)" Value="I2pInboundLength" ValueChanged="I2pInboundLengthChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="I2P inbound length (requires libtorrent &gt;= 2.0)" Value="I2pInboundLength" ValueChanged="I2pInboundLengthChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="I2P outbound length (requires libtorrent &gt;= 2.0)" Value="I2pOutboundLength" ValueChanged="I2pOutboundLengthChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="I2P outbound length (requires libtorrent &gt;= 2.0)" Value="I2pOutboundLength" ValueChanged="I2pOutboundLengthChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>

View File

@@ -9,7 +9,7 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="string" Label="User Interface Language" Value="@("en-US")" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="User Interface Language" Value="@("en-US")" Variant="Variant.Outlined">
<MudSelectItem Value="@("en-US")">English</MudSelectItem> <MudSelectItem Value="@("en-US")">English</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
@@ -29,13 +29,13 @@
<MudFieldSwitch Label="Log file" Value="FileLogEnabled" ValueChanged="FileLogEnabledChanged" /> <MudFieldSwitch Label="Log file" Value="FileLogEnabled" ValueChanged="FileLogEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Save Path" Value="FileLogPath" ValueChanged="FileLogPathChanged" Disabled="@(!FileLogEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Save Path" Value="FileLogPath" ValueChanged="FileLogPathChanged" Disabled="@(!FileLogEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="3"> <MudItem xs="3">
<MudFieldSwitch Label="Backup the log after" Value="FileLogBackupEnabled" ValueChanged="FileLogBackupEnabledChanged" Disabled="@(!FileLogEnabled)" /> <MudFieldSwitch Label="Backup the log after" Value="FileLogBackupEnabled" ValueChanged="FileLogBackupEnabledChanged" Disabled="@(!FileLogEnabled)" />
</MudItem> </MudItem>
<MudItem xs="9"> <MudItem xs="9">
<MudNumericField T="int" Value="FileLogMaxSize" ValueChanged="FileLogMaxSizeChanged" Disabled="@(!FileLogEnabled)" Min="1" Max="1024000" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" /> <MudNumericField T="int" Value="FileLogMaxSize" ValueChanged="FileLogMaxSizeChanged" Disabled="@(!FileLogEnabled)" Min="1" Max="1024000" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB" />
</MudItem> </MudItem>
<MudItem xs="3"> <MudItem xs="3">
<MudFieldSwitch Label="Delete backups older than" Value="FileLogDeleteOld" ValueChanged="FileLogDeleteOldChanged" Disabled="@(!FileLogEnabled)" /> <MudFieldSwitch Label="Delete backups older than" Value="FileLogDeleteOld" ValueChanged="FileLogDeleteOldChanged" Disabled="@(!FileLogEnabled)" />
@@ -43,10 +43,10 @@
<MudItem xs="9"> <MudItem xs="9">
<MudGrid> <MudGrid>
<MudItem xs="9"> <MudItem xs="9">
<MudNumericField T="int" Value="FileLogAge" ValueChanged="FileLogAgeChanged" Disabled="@(!FileLogEnabled)" Min="1" Max="365" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Value="FileLogAge" ValueChanged="FileLogAgeChanged" Disabled="@(!FileLogEnabled)" Min="1" Max="365" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="3"> <MudItem xs="3">
<MudSelect T="int" Value="FileLogAgeType" ValueChanged="FileLogAgeTypeChanged" Disabled="@(!FileLogEnabled)" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Value="FileLogAgeType" ValueChanged="FileLogAgeTypeChanged" Disabled="@(!FileLogEnabled)" Variant="Variant.Outlined">
<MudSelectItem Value="0">days</MudSelectItem> <MudSelectItem Value="0">days</MudSelectItem>
<MudSelectItem Value="1">months</MudSelectItem> <MudSelectItem Value="1">months</MudSelectItem>
<MudSelectItem Value="2">years</MudSelectItem> <MudSelectItem Value="2">years</MudSelectItem>

View File

@@ -18,7 +18,7 @@
<MudFieldSwitch Label="Enable Local Peer Discovery to find more peers" Value="Lsd" ValueChanged="LsdChanged" /> <MudFieldSwitch Label="Enable Local Peer Discovery to find more peers" Value="Lsd" ValueChanged="LsdChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Encryption mode" Value="Encryption" ValueChanged="EncryptionChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Encryption mode" Value="Encryption" ValueChanged="EncryptionChanged" Variant="Variant.Outlined">
<MudSelectItem Value="0">Allow encryption</MudSelectItem> <MudSelectItem Value="0">Allow encryption</MudSelectItem>
<MudSelectItem Value="1">Require encryption</MudSelectItem> <MudSelectItem Value="1">Require encryption</MudSelectItem>
<MudSelectItem Value="2">Disable encryption</MudSelectItem> <MudSelectItem Value="2">Disable encryption</MudSelectItem>
@@ -38,7 +38,7 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Max active checking torrents" Value="MaxActiveCheckingTorrents" ValueChanged="MaxActiveCheckingTorrentsChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Max active checking torrents" Value="MaxActiveCheckingTorrents" ValueChanged="MaxActiveCheckingTorrentsChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -56,25 +56,25 @@
<MudFieldSwitch Label="Queueing enabled" Value="QueueingEnabled" ValueChanged="QueueingEnabledChanged" /> <MudFieldSwitch Label="Queueing enabled" Value="QueueingEnabled" ValueChanged="QueueingEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Maximum active downloads" Value="MaxActiveDownloads" ValueChanged="MaxActiveDownloadsChanged" Min="-1" Disabled="@(!QueueingEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxActiveDownloadsValidation" /> <MudNumericField T="int" Label="Maximum active downloads" Value="MaxActiveDownloads" ValueChanged="MaxActiveDownloadsChanged" Min="-1" Disabled="@(!QueueingEnabled)" Variant="Variant.Outlined" Validation="MaxActiveDownloadsValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Maximum active uploads" Value="MaxActiveUploads" ValueChanged="MaxActiveUploadsChanged" Min="-1" Disabled="@(!QueueingEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxActiveUploadsValidation" /> <MudNumericField T="int" Label="Maximum active uploads" Value="MaxActiveUploads" ValueChanged="MaxActiveUploadsChanged" Min="-1" Disabled="@(!QueueingEnabled)" Variant="Variant.Outlined" Validation="MaxActiveUploadsValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Maximum active torrents" Value="MaxActiveTorrents" ValueChanged="MaxActiveTorrentsChanged" Min="-1" Disabled="@(!QueueingEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxActiveTorrentsValidation" /> <MudNumericField T="int" Label="Maximum active torrents" Value="MaxActiveTorrents" ValueChanged="MaxActiveTorrentsChanged" Min="-1" Disabled="@(!QueueingEnabled)" Variant="Variant.Outlined" Validation="MaxActiveTorrentsValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Do not count slow torrents in these limits" Value="DontCountSlowTorrents" ValueChanged="DontCountSlowTorrentsChanged" Disabled="@(!QueueingEnabled)" /> <MudFieldSwitch Label="Do not count slow torrents in these limits" Value="DontCountSlowTorrents" ValueChanged="DontCountSlowTorrentsChanged" Disabled="@(!QueueingEnabled)" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Download rate threshold" Value="SlowTorrentDlRateThreshold" ValueChanged="SlowTorrentDlRateThresholdChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" Validation="SlowTorrentDlRateThresholdValidation" /> <MudNumericField T="int" Label="Download rate threshold" Value="SlowTorrentDlRateThreshold" ValueChanged="SlowTorrentDlRateThresholdChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" Validation="SlowTorrentDlRateThresholdValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Upload rate threshold" Value="SlowTorrentUlRateThreshold" ValueChanged="SlowTorrentUlRateThresholdChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" Validation="SlowTorrentUlRateThresholdValidation" /> <MudNumericField T="int" Label="Upload rate threshold" Value="SlowTorrentUlRateThreshold" ValueChanged="SlowTorrentUlRateThresholdChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" Validation="SlowTorrentUlRateThresholdValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Torrent inactivity timer" Value="SlowTorrentInactiveTimer" ValueChanged="SlowTorrentInactiveTimerChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" Validation="SlowTorrentInactiveTimerValidation" /> <MudNumericField T="int" Label="Torrent inactivity timer" Value="SlowTorrentInactiveTimer" ValueChanged="SlowTorrentInactiveTimerChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" Validation="SlowTorrentInactiveTimerValidation" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -92,22 +92,22 @@
<MudFieldSwitch Label="When ratio reaches" Value="MaxRatioEnabled" ValueChanged="MaxRatioEnabledChanged" /> <MudFieldSwitch Label="When ratio reaches" Value="MaxRatioEnabled" ValueChanged="MaxRatioEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="9"> <MudItem xs="9">
<MudNumericField T="int" Label="" Value="MaxRatio" ValueChanged="MaxRatioChanged" Disabled="@(!MaxRatioEnabled)" Min="0" Max="9998" ShrinkLabel Variant="Variant.Outlined" Validation="MaxRatioValidation" /> <MudNumericField T="int" Label="" Value="MaxRatio" ValueChanged="MaxRatioChanged" Disabled="@(!MaxRatioEnabled)" Min="0" Max="9998" Variant="Variant.Outlined" Validation="MaxRatioValidation" />
</MudItem> </MudItem>
<MudItem xs="3"> <MudItem xs="3">
<MudFieldSwitch Label="When total seeding time reaches" Value="MaxSeedingTimeEnabled" ValueChanged="MaxSeedingTimeEnabledChanged" /> <MudFieldSwitch Label="When total seeding time reaches" Value="MaxSeedingTimeEnabled" ValueChanged="MaxSeedingTimeEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="9"> <MudItem xs="9">
<MudNumericField T="int" Label="minutes" Value="MaxSeedingTime" ValueChanged="MaxSeedingTimeChanged" Disabled="@(!MaxSeedingTimeEnabled)" Min="0" Max="525600" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="minutes" Validation="MaxSeedingTimeValidation" /> <MudNumericField T="int" Label="minutes" Value="MaxSeedingTime" ValueChanged="MaxSeedingTimeChanged" Disabled="@(!MaxSeedingTimeEnabled)" Min="0" Max="525600" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="minutes" Validation="MaxSeedingTimeValidation" />
</MudItem> </MudItem>
<MudItem xs="3"> <MudItem xs="3">
<MudFieldSwitch Label="When inactive seeding time reaches" Value="MaxInactiveSeedingTimeEnabled" ValueChanged="MaxInactiveSeedingTimeEnabledChanged" /> <MudFieldSwitch Label="When inactive seeding time reaches" Value="MaxInactiveSeedingTimeEnabled" ValueChanged="MaxInactiveSeedingTimeEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="9"> <MudItem xs="9">
<MudNumericField T="int" Label="minutes" Value="MaxInactiveSeedingTime" ValueChanged="MaxInactiveSeedingTimeChanged" Disabled="@(!MaxInactiveSeedingTimeEnabled)" Min="0" Max="525600" ShrinkLabel Variant="Variant.Outlined" Validation="MaxInactiveSeedingTimeValidation" /> <MudNumericField T="int" Label="minutes" Value="MaxInactiveSeedingTime" ValueChanged="MaxInactiveSeedingTimeChanged" Disabled="@(!MaxInactiveSeedingTimeEnabled)" Min="0" Max="525600" Variant="Variant.Outlined" Validation="MaxInactiveSeedingTimeValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Value="MaxRatioAct" ValueChanged="MaxRatioActChanged" Disabled="@(!MaxRatioEnabled && !MaxSeedingTimeEnabled && !MaxInactiveSeedingTimeEnabled)" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Value="MaxRatioAct" ValueChanged="MaxRatioActChanged" Disabled="@(!MaxRatioEnabled && !MaxSeedingTimeEnabled && !MaxInactiveSeedingTimeEnabled)" Variant="Variant.Outlined">
<MudSelectItem Value="0">Stop torrent</MudSelectItem> <MudSelectItem Value="0">Stop torrent</MudSelectItem>
<MudSelectItem Value="1">Remove torrent</MudSelectItem> <MudSelectItem Value="1">Remove torrent</MudSelectItem>
<MudSelectItem Value="2">Remove torrent and its files</MudSelectItem> <MudSelectItem Value="2">Remove torrent and its files</MudSelectItem>
@@ -130,7 +130,7 @@
<MudFieldSwitch Label="Automatically add these trackers to new downloads" Value="AddTrackersEnabled" ValueChanged="AddTrackersEnabledChanged" /> <MudFieldSwitch Label="Automatically add these trackers to new downloads" Value="AddTrackersEnabled" ValueChanged="AddTrackersEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Trackers" Value="AddTrackers" ValueChanged="AddTrackersChanged" Lines="5" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Trackers" Value="AddTrackers" ValueChanged="AddTrackersChanged" Lines="5" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>

View File

@@ -4,7 +4,7 @@
<MudCardContent> <MudCardContent>
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Label="Peer connection protocol" Value="BittorrentProtocol" ValueChanged="BittorrentProtocolChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Label="Peer connection protocol" Value="BittorrentProtocol" ValueChanged="BittorrentProtocolChanged" Variant="Variant.Outlined">
<MudSelectItem T="int" Value="0">TCP and μTP</MudSelectItem> <MudSelectItem T="int" Value="0">TCP and μTP</MudSelectItem>
<MudSelectItem T="int" Value="1">TCP</MudSelectItem> <MudSelectItem T="int" Value="1">TCP</MudSelectItem>
<MudSelectItem T="int" Value="2">μTP</MudSelectItem> <MudSelectItem T="int" Value="2">μTP</MudSelectItem>
@@ -23,7 +23,7 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Port used for incoming connections" Value="ListenPort" ValueChanged="ListenPortChanged" Min="@MinNonNegativePortValue" Max="@MaxPortValue" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentIcon="@CustomIcons.Random" OnAdornmentClick="GenerateRandomPort" HelperText="Set to 0 to let your system pick an unused port" Validation="PortNonNegativeValidation" /> <MudNumericField T="int" Label="Port used for incoming connections" Value="ListenPort" ValueChanged="ListenPortChanged" Min="@MinNonNegativePortValue" Max="@MaxPortValue" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentIcon="@CustomIcons.Random" OnAdornmentClick="GenerateRandomPort" HelperText="Set to 0 to let your system pick an unused port" Validation="PortNonNegativeValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Use UPnp / NAT-PMP port forwarding from my router" Value="Upnp" ValueChanged="UpnpChanged" /> <MudFieldSwitch Label="Use UPnp / NAT-PMP port forwarding from my router" Value="Upnp" ValueChanged="UpnpChanged" />
@@ -44,25 +44,25 @@
<MudFieldSwitch T="bool" Label="Global maximum number of connections" Value="MaxConnecEnabled" ValueChanged="MaxConnecEnabledChanged" /> <MudFieldSwitch T="bool" Label="Global maximum number of connections" Value="MaxConnecEnabled" ValueChanged="MaxConnecEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudNumericField T="int" Label="Connections" Value="MaxConnec" ValueChanged="MaxConnecChanged" Min="0" Disabled="@(!MaxConnecEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxConnectValidation" /> <MudNumericField T="int" Label="Connections" Value="MaxConnec" ValueChanged="MaxConnecChanged" Min="0" Disabled="@(!MaxConnecEnabled)" Variant="Variant.Outlined" Validation="MaxConnectValidation" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudFieldSwitch Label="Maximum number of connections per torrent" Value="MaxConnecPerTorrentEnabled" ValueChanged="MaxConnecPerTorrentEnabledChanged" /> <MudFieldSwitch Label="Maximum number of connections per torrent" Value="MaxConnecPerTorrentEnabled" ValueChanged="MaxConnecPerTorrentEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudNumericField T="int" Label="Connections" Value="MaxConnecPerTorrent" ValueChanged="MaxConnecPerTorrentChanged" Min="0" Disabled="@(!MaxConnecPerTorrentEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxConnecPerTorrentValidation" /> <MudNumericField T="int" Label="Connections" Value="MaxConnecPerTorrent" ValueChanged="MaxConnecPerTorrentChanged" Min="0" Disabled="@(!MaxConnecPerTorrentEnabled)" Variant="Variant.Outlined" Validation="MaxConnecPerTorrentValidation" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudFieldSwitch Label="Global maximum number of upload slots" Value="MaxUploadsEnabled" ValueChanged="MaxUploadsEnabledChanged" /> <MudFieldSwitch Label="Global maximum number of upload slots" Value="MaxUploadsEnabled" ValueChanged="MaxUploadsEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudNumericField T="int" Label="Slots" Value="MaxUploads" ValueChanged="MaxUploadsChanged" Min="0" Disabled="@(!MaxUploadsEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxUploadsValidation" /> <MudNumericField T="int" Label="Slots" Value="MaxUploads" ValueChanged="MaxUploadsChanged" Min="0" Disabled="@(!MaxUploadsEnabled)" Variant="Variant.Outlined" Validation="MaxUploadsValidation" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudFieldSwitch Label="Maximum number of upload slots per torrent" Value="MaxUploadsPerTorrentEnabled" ValueChanged="MaxUploadsPerTorrentEnabledChanged" /> <MudFieldSwitch Label="Maximum number of upload slots per torrent" Value="MaxUploadsPerTorrentEnabled" ValueChanged="MaxUploadsPerTorrentEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudNumericField T="int" Label="Slots" Value="MaxUploadsPerTorrent" ValueChanged="MaxUploadsPerTorrentChanged" Min="0" Disabled="@(!MaxUploadsPerTorrentEnabled)" ShrinkLabel Variant="Variant.Outlined" Validation="MaxUploadsPerTorrentValidation" /> <MudNumericField T="int" Label="Slots" Value="MaxUploadsPerTorrent" ValueChanged="MaxUploadsPerTorrentChanged" Min="0" Disabled="@(!MaxUploadsPerTorrentEnabled)" Variant="Variant.Outlined" Validation="MaxUploadsPerTorrentValidation" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -75,10 +75,10 @@
<MudFieldSwitch Label="I2P (Experimental)" Value="I2pEnabled" ValueChanged="I2pEnabledChanged" /> <MudFieldSwitch Label="I2P (Experimental)" Value="I2pEnabled" ValueChanged="I2pEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudTextField T="string" Label="Host" Value="I2pAddress" ValueChanged="I2pAddressChanged" Disabled="@(!I2pEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Host" Value="I2pAddress" ValueChanged="I2pAddressChanged" Disabled="@(!I2pEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudNumericField T="int" Label="Slots" Value="I2pPort" ValueChanged="I2pPortChanged" Min="0" Max="65535" Disabled="@(!I2pEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Slots" Value="I2pPort" ValueChanged="I2pPortChanged" Min="0" Max="65535" Disabled="@(!I2pEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Mixed mode" Value="I2pMixedMode" ValueChanged="I2pMixedModeChanged" Disabled="@(!I2pEnabled)" HelperText="If &quot;mixed mode&quot; is enabled, I2P torrents are allowed to also get peers from other sources than the tracker, and connect to regular IPs, not providing any anonymization. This may be useful if the user is not interested in the anonymization of I2P, but still wants to be able to connect to I2P peers." /> <MudFieldSwitch Label="Mixed mode" Value="I2pMixedMode" ValueChanged="I2pMixedModeChanged" Disabled="@(!I2pEnabled)" HelperText="If &quot;mixed mode&quot; is enabled, I2P torrents are allowed to also get peers from other sources than the tracker, and connect to regular IPs, not providing any anonymization. This may be useful if the user is not interested in the anonymization of I2P, but still wants to be able to connect to I2P peers." />
@@ -96,7 +96,7 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12" md="4"> <MudItem xs="12" md="4">
<MudSelect T="string" Label="Type" Value="ProxyType" ValueChanged="ProxyTypeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Type" Value="ProxyType" ValueChanged="ProxyTypeChanged" Variant="Variant.Outlined">
<MudSelectItem T="string" Value="@("None")">None</MudSelectItem> <MudSelectItem T="string" Value="@("None")">None</MudSelectItem>
<MudSelectItem T="string" Value="@("SOCKS4")">SOCKS4</MudSelectItem> <MudSelectItem T="string" Value="@("SOCKS4")">SOCKS4</MudSelectItem>
<MudSelectItem T="string" Value="@("SOCKS5")">SOCKS5</MudSelectItem> <MudSelectItem T="string" Value="@("SOCKS5")">SOCKS5</MudSelectItem>
@@ -104,10 +104,10 @@
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12" md="4"> <MudItem xs="12" md="4">
<MudTextField T="string" Label="Host" Value="ProxyIp" ValueChanged="ProxyIpChanged" Disabled="ProxyDisabled" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Host" Value="ProxyIp" ValueChanged="ProxyIpChanged" Disabled="ProxyDisabled" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12" md="4"> <MudItem xs="12" md="4">
<MudNumericField T="int" Label="Port" Value="ProxyPort" ValueChanged="ProxyPortChanged" Min="1" Max="@ConnectionOptions.MaxPortValue" Disabled="ProxyDisabled" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Port" Value="ProxyPort" ValueChanged="ProxyPortChanged" Min="1" Max="@ConnectionOptions.MaxPortValue" Disabled="ProxyDisabled" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Perform hostname lookup via proxy" Value="ProxyHostnameLookup" ValueChanged="ProxyHostnameLookupChanged" HelperText="If checked, hostname lookups are done via the proxy." /> <MudFieldSwitch Label="Perform hostname lookup via proxy" Value="ProxyHostnameLookup" ValueChanged="ProxyHostnameLookupChanged" HelperText="If checked, hostname lookups are done via the proxy." />
@@ -116,10 +116,10 @@
<MudFieldSwitch Label="Authentication" Value="ProxyAuthEnabled" ValueChanged="ProxyAuthEnabledChanged" Disabled="@(ProxyDisabled || ProxySocks4)" /> <MudFieldSwitch Label="Authentication" Value="ProxyAuthEnabled" ValueChanged="ProxyAuthEnabledChanged" Disabled="@(ProxyDisabled || ProxySocks4)" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudTextField T="string" Label="Username" Value="ProxyUsername" ValueChanged="ProxyUsernameChanged" Disabled="@(ProxyDisabled || ProxySocks4)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Username" Value="ProxyUsername" ValueChanged="ProxyUsernameChanged" Disabled="@(ProxyDisabled || ProxySocks4)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
<MudTextField T="string" Label="Password" Value="ProxyPassword" ValueChanged="ProxyPasswordChanged" Disabled="@(ProxyDisabled || ProxySocks4)" ShrinkLabel Variant="Variant.Outlined " HelperText="Info: The password is saved unencrypted" /> <MudTextField T="string" Label="Password" Value="ProxyPassword" ValueChanged="ProxyPasswordChanged" Disabled="@(ProxyDisabled || ProxySocks4)" Variant="Variant.Outlined " HelperText="Info: The password is saved unencrypted" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
@@ -150,13 +150,13 @@
<MudFieldSwitch Label="IP Filter" Value="IpFilterEnabled" ValueChanged="IpFilterEnabledChanged" /> <MudFieldSwitch Label="IP Filter" Value="IpFilterEnabled" ValueChanged="IpFilterEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Filter path (.dat, .p2p, .p2b)" Value="IpFilterPath" ValueChanged="IpFilterPathChanged" Disabled="@(!IpFilterEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Filter path (.dat, .p2p, .p2b)" Value="IpFilterPath" ValueChanged="IpFilterPathChanged" Disabled="@(!IpFilterEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Apply to trackers" Value="IpFilterTrackers" ValueChanged="IpFilterTrackersChanged" /> <MudFieldSwitch Label="Apply to trackers" Value="IpFilterTrackers" ValueChanged="IpFilterTrackersChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Manually banned IP addresses" Value="BannedIPs" ValueChanged="BannedIPsChanged" Lines="5" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Manually banned IP addresses" Value="BannedIPs" ValueChanged="BannedIPsChanged" Lines="5" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>

View File

@@ -9,7 +9,7 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="string" Label="Torrent content layout" Value="TorrentContentLayout" ValueChanged="TorrentContentLayoutChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Torrent content layout" Value="TorrentContentLayout" ValueChanged="TorrentContentLayoutChanged" Variant="Variant.Outlined">
<MudSelectItem Value="@("Original")">Original</MudSelectItem> <MudSelectItem Value="@("Original")">Original</MudSelectItem>
<MudSelectItem Value="@("Subfolder")">Create subfolder</MudSelectItem> <MudSelectItem Value="@("Subfolder")">Create subfolder</MudSelectItem>
<MudSelectItem Value="@("NoSubfolder")">Don't create subfolder</MudSelectItem> <MudSelectItem Value="@("NoSubfolder")">Don't create subfolder</MudSelectItem>
@@ -22,7 +22,7 @@
<MudFieldSwitch Label="Do not start the download automatically" Value="StartPausedEnabled" ValueChanged="StartPausedEnabledChanged" /> <MudFieldSwitch Label="Do not start the download automatically" Value="StartPausedEnabled" ValueChanged="StartPausedEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="string" Label="Torrent stop condition" Value="TorrentStopCondition" ValueChanged="TorrentStopConditionChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Torrent stop condition" Value="TorrentStopCondition" ValueChanged="TorrentStopConditionChanged" Variant="Variant.Outlined">
<MudSelectItem Value="@("None")">None</MudSelectItem> <MudSelectItem Value="@("None")">None</MudSelectItem>
<MudSelectItem Value="@("MetadataReceived")">Metadata received</MudSelectItem> <MudSelectItem Value="@("MetadataReceived")">Metadata received</MudSelectItem>
<MudSelectItem Value="@("FilesChecked")">Files Checked</MudSelectItem> <MudSelectItem Value="@("FilesChecked")">Files Checked</MudSelectItem>
@@ -62,25 +62,25 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="bool" Label="Default Torrent Management Mode" Value="AutoTmmEnabled" ValueChanged="AutoDeleteModeChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="bool" Label="Default Torrent Management Mode" Value="AutoTmmEnabled" ValueChanged="AutoDeleteModeChanged" Variant="Variant.Outlined">
<MudSelectItem Value="false">Manual</MudSelectItem> <MudSelectItem Value="false">Manual</MudSelectItem>
<MudSelectItem Value="true">Automatic</MudSelectItem> <MudSelectItem Value="true">Automatic</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="bool" Label="When Torrent Category changed" Value="TorrentChangedTmmEnabled" ValueChanged="TorrentChangedTmmEnabledChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="bool" Label="When Torrent Category changed" Value="TorrentChangedTmmEnabled" ValueChanged="TorrentChangedTmmEnabledChanged" Variant="Variant.Outlined">
<MudSelectItem Value="true">Relocate torrent</MudSelectItem> <MudSelectItem Value="true">Relocate torrent</MudSelectItem>
<MudSelectItem Value="false">Switch torrent to Manual Mode</MudSelectItem> <MudSelectItem Value="false">Switch torrent to Manual Mode</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="bool" Label="When Default Save Path changed" Value="SavePathChangedTmmEnabled" ValueChanged="SavePathChangedTmmEnabledChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="bool" Label="When Default Save Path changed" Value="SavePathChangedTmmEnabled" ValueChanged="SavePathChangedTmmEnabledChanged" Variant="Variant.Outlined">
<MudSelectItem Value="true">Relocate affected torrents</MudSelectItem> <MudSelectItem Value="true">Relocate affected torrents</MudSelectItem>
<MudSelectItem Value="false">Switch affected torrents to Manual Mode</MudSelectItem> <MudSelectItem Value="false">Switch affected torrents to Manual Mode</MudSelectItem>
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="bool" Label="When Category Save Path changed" Value="CategoryChangedTmmEnabled" ValueChanged="CategoryChangedTmmEnabledChanged" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="bool" Label="When Category Save Path changed" Value="CategoryChangedTmmEnabled" ValueChanged="CategoryChangedTmmEnabledChanged" Variant="Variant.Outlined">
<MudSelectItem Value="true">Relocate affected torrents</MudSelectItem> <MudSelectItem Value="true">Relocate affected torrents</MudSelectItem>
<MudSelectItem Value="false">Switch affected torrents to Manual Mode</MudSelectItem> <MudSelectItem Value="false">Switch affected torrents to Manual Mode</MudSelectItem>
</MudSelect> </MudSelect>
@@ -89,7 +89,7 @@
<MudFieldSwitch Label="Use Subcategories" Value="UseSubcategories" ValueChanged="UseSubcategoriesChanged" /> <MudFieldSwitch Label="Use Subcategories" Value="UseSubcategories" ValueChanged="UseSubcategoriesChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Default Save Path" Value="SavePath" ValueChanged="SavePathChanged" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Default Save Path" Value="SavePath" ValueChanged="SavePathChanged" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudGrid> <MudGrid>
@@ -97,7 +97,7 @@
<MudFieldSwitch Label="Keep incomplete torrents in" Value="TempPathEnabled" ValueChanged="TempPathEnabledChanged" /> <MudFieldSwitch Label="Keep incomplete torrents in" Value="TempPathEnabled" ValueChanged="TempPathEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" sm="6" md="9"> <MudItem xs="12" sm="6" md="9">
<MudTextField T="string" Label="Path" Value="TempPath" ValueChanged="TempPathChanged" Disabled="@(!TempPathEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Path" Value="TempPath" ValueChanged="TempPathChanged" Disabled="@(!TempPathEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudItem> </MudItem>
@@ -107,7 +107,7 @@
<MudFieldSwitch Label="Copy .torrent files to" Value="ExportDirEnabled" ValueChanged="ExportDirEnabledChanged" /> <MudFieldSwitch Label="Copy .torrent files to" Value="ExportDirEnabled" ValueChanged="ExportDirEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" sm="6" md="9"> <MudItem xs="12" sm="6" md="9">
<MudTextField T="string" Label="Path" Value="ExportDir" ValueChanged="ExportDirChanged" Disabled="@(!TempPathEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Path" Value="ExportDir" ValueChanged="ExportDirChanged" Disabled="@(!TempPathEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudItem> </MudItem>
@@ -117,7 +117,7 @@
<MudFieldSwitch Label="Copy .torrent files for finished downloads to" Value="ExportDirFinEnabled" ValueChanged="ExportDirFinEnabledChanged" /> <MudFieldSwitch Label="Copy .torrent files for finished downloads to" Value="ExportDirFinEnabled" ValueChanged="ExportDirFinEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12" sm="6" md="9"> <MudItem xs="12" sm="6" md="9">
<MudTextField T="string" Label="Path" Value="ExportDirFin" ValueChanged="ExportDirFinChanged" Disabled="@(!TempPathEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Path" Value="ExportDirFin" ValueChanged="ExportDirFinChanged" Disabled="@(!TempPathEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudItem> </MudItem>
@@ -225,7 +225,7 @@
<MudFieldSwitch Label="Excluded file names" Value="ExcludedFileNamesEnabled" ValueChanged="ExcludedFileNamesEnabledChanged" /> <MudFieldSwitch Label="Excluded file names" Value="ExcludedFileNamesEnabled" ValueChanged="ExcludedFileNamesEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Excluded files names" Value="ExcludedFileNames" ValueChanged="ExcludedFileNamesChanged" Lines="5" Disabled="@(!ExcludedFileNamesEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Excluded files names" Value="ExcludedFileNames" ValueChanged="ExcludedFileNamesChanged" Lines="5" Disabled="@(!ExcludedFileNamesEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -243,13 +243,13 @@
<MudFieldSwitch Label="Email notification upon download completion" Value="MailNotificationEnabled" ValueChanged="MailNotificationEnabledChanged" /> <MudFieldSwitch Label="Email notification upon download completion" Value="MailNotificationEnabled" ValueChanged="MailNotificationEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="From" Value="MailNotificationSender" ValueChanged="MailNotificationSenderChanged" Disabled="@(!MailNotificationEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="From" Value="MailNotificationSender" ValueChanged="MailNotificationSenderChanged" Disabled="@(!MailNotificationEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="To" Value="MailNotificationEmail" ValueChanged="MailNotificationEmailChanged" Disabled="@(!MailNotificationEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="To" Value="MailNotificationEmail" ValueChanged="MailNotificationEmailChanged" Disabled="@(!MailNotificationEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="SMTP server" Value="MailNotificationSmtp" ValueChanged="MailNotificationSmtpChanged" Disabled="@(!MailNotificationEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="SMTP server" Value="MailNotificationSmtp" ValueChanged="MailNotificationSmtpChanged" Disabled="@(!MailNotificationEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="This server requires a secure connection (SSL)" Value="MailNotificationSslEnabled" ValueChanged="MailNotificationSslEnabledChanged" Disabled="@(!MailNotificationEnabled)" /> <MudFieldSwitch Label="This server requires a secure connection (SSL)" Value="MailNotificationSslEnabled" ValueChanged="MailNotificationSslEnabledChanged" Disabled="@(!MailNotificationEnabled)" />
@@ -258,10 +258,10 @@
<MudFieldSwitch Label="Authentication" Value="MailNotificationAuthEnabled" ValueChanged="MailNotificationAuthEnabledChanged" Disabled="@(!MailNotificationEnabled)" /> <MudFieldSwitch Label="Authentication" Value="MailNotificationAuthEnabled" ValueChanged="MailNotificationAuthEnabledChanged" Disabled="@(!MailNotificationEnabled)" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Username" Value="MailNotificationUsername" ValueChanged="MailNotificationUsernameChanged" Disabled="@(!(MailNotificationEnabled && MailNotificationAuthEnabled))" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Username" Value="MailNotificationUsername" ValueChanged="MailNotificationUsernameChanged" Disabled="@(!(MailNotificationEnabled && MailNotificationAuthEnabled))" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Password" Value="MailNotificationPassword" ValueChanged="MailNotificationPasswordChanged" Disabled="@(!(MailNotificationEnabled && MailNotificationAuthEnabled))" InputType="InputType.Password" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Password" Value="MailNotificationPassword" ValueChanged="MailNotificationPasswordChanged" Disabled="@(!(MailNotificationEnabled && MailNotificationAuthEnabled))" InputType="InputType.Password" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -279,13 +279,13 @@
<MudFieldSwitch Label="Run external program on torrent added" Value="AutorunOnTorrentAddedEnabled" ValueChanged="AutorunOnTorrentAddedEnabledChanged" /> <MudFieldSwitch Label="Run external program on torrent added" Value="AutorunOnTorrentAddedEnabled" ValueChanged="AutorunOnTorrentAddedEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="External program" Value="AutorunOnTorrentAddedProgram" ValueChanged="AutorunOnTorrentAddedProgramChanged" Disabled="@(!AutorunOnTorrentAddedEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="External program" Value="AutorunOnTorrentAddedProgram" ValueChanged="AutorunOnTorrentAddedProgramChanged" Disabled="@(!AutorunOnTorrentAddedEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Run external program on torrent finished" Value="AutorunEnabled" ValueChanged="AutorunEnabledChanged" /> <MudFieldSwitch Label="Run external program on torrent finished" Value="AutorunEnabled" ValueChanged="AutorunEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="External program" Value="AutorunProgram" ValueChanged="AutorunProgramChanged" Disabled="@(!AutorunEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="External program" Value="AutorunProgram" ValueChanged="AutorunProgramChanged" Disabled="@(!AutorunEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudText>Supported parameters (case sensitive):</MudText> <MudText>Supported parameters (case sensitive):</MudText>

View File

@@ -12,10 +12,10 @@
<MudFieldSwitch Label="Enable fetching RSS feeds" Value="RssProcessingEnabled" ValueChanged="RssProcessingEnabledChanged" /> <MudFieldSwitch Label="Enable fetching RSS feeds" Value="RssProcessingEnabled" ValueChanged="RssProcessingEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Feeds refresh interval" Value="RssRefreshInterval" ValueChanged="RssRefreshIntervalChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="min" /> <MudNumericField T="int" Label="Feeds refresh interval" Value="RssRefreshInterval" ValueChanged="RssRefreshIntervalChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="min" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Maximum number of articles per feed" Value="RssMaxArticlesPerFeed" ValueChanged="RssMaxArticlesPerFeedChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Maximum number of articles per feed" Value="RssMaxArticlesPerFeed" ValueChanged="RssMaxArticlesPerFeedChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -51,7 +51,7 @@
<MudFieldSwitch Label="Download REPACK/PROPER episodes" Value="RssDownloadRepackProperEpisodes" ValueChanged="RssDownloadRepackProperEpisodesChanged" /> <MudFieldSwitch Label="Download REPACK/PROPER episodes" Value="RssDownloadRepackProperEpisodes" ValueChanged="RssDownloadRepackProperEpisodesChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Filters" Value="RssSmartEpisodeFilters" ValueChanged="RssSmartEpisodeFiltersChanged" Lines="5" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Filters" Value="RssSmartEpisodeFilters" ValueChanged="RssSmartEpisodeFiltersChanged" Lines="5" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>

View File

@@ -9,10 +9,10 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Upload" Value="UpLimit" ValueChanged="UpLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="UpLimitValidation" /> <MudNumericField T="int" Label="Upload" Value="UpLimit" ValueChanged="UpLimitChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="UpLimitValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Download" Value="DlLimit" ValueChanged="DlLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="DlLimitValidation" /> <MudNumericField T="int" Label="Download" Value="DlLimit" ValueChanged="DlLimitChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="DlLimitValidation" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -27,10 +27,10 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Upload" Value="AltUpLimit" ValueChanged="AltUpLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="AltUpLimitValidation" /> <MudNumericField T="int" Label="Upload" Value="AltUpLimit" ValueChanged="AltUpLimitChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="AltUpLimitValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Download" Value="AltDlLimit" ValueChanged="AltDlLimitChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="AltDlLimitValidation" /> <MudNumericField T="int" Label="Download" Value="AltDlLimit" ValueChanged="AltDlLimitChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="KiB/s" HelperText="0 means unlimited" Validation="AltDlLimitValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Schedule the use of alternative rate limits" Value="SchedulerEnabled" ValueChanged="SchedulerEnabledChanged" /> <MudFieldSwitch Label="Schedule the use of alternative rate limits" Value="SchedulerEnabled" ValueChanged="SchedulerEnabledChanged" />
@@ -42,7 +42,7 @@
<MudTimePicker Label="To" Editable="true" Time="ScheduleTo" TimeChanged="ScheduleToChanged" Disabled="@(!SchedulerEnabled)" Variant="Variant.Outlined" /> <MudTimePicker Label="To" Editable="true" Time="ScheduleTo" TimeChanged="ScheduleToChanged" Disabled="@(!SchedulerEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudSelect T="int" Value="SchedulerDays" ValueChanged="SchedulerDaysChanged" Disabled="@(!SchedulerEnabled)" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Value="SchedulerDays" ValueChanged="SchedulerDaysChanged" Disabled="@(!SchedulerEnabled)" Variant="Variant.Outlined">
<MudSelectItem Value="0">Every day</MudSelectItem> <MudSelectItem Value="0">Every day</MudSelectItem>
<MudSelectItem Value="1">Weekdays</MudSelectItem> <MudSelectItem Value="1">Weekdays</MudSelectItem>
<MudSelectItem Value="2">Weekends</MudSelectItem> <MudSelectItem Value="2">Weekends</MudSelectItem>

View File

@@ -9,10 +9,10 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12" md="8"> <MudItem xs="12" md="8">
<MudTextField T="string" Label="Host" Value="WebUiAddress" ValueChanged="WebUiAddressChanged" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Host" Value="WebUiAddress" ValueChanged="WebUiAddressChanged" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12" md="4"> <MudItem xs="12" md="4">
<MudNumericField T="int" Label="Port" Value="WebUiPort" ValueChanged="WebUiPortChanged" Min="1" Max="@Options.MaxPortValue" ShrinkLabel Variant="Variant.Outlined" Validation="WebUiPortValidation" /> <MudNumericField T="int" Label="Port" Value="WebUiPort" ValueChanged="WebUiPortChanged" Min="1" Max="@Options.MaxPortValue" Variant="Variant.Outlined" Validation="WebUiPortValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Use UPnP / NAT-PMP to forward the port from my router" Value="WebUiUpnp" ValueChanged="WebUiUpnpChanged" /> <MudFieldSwitch Label="Use UPnP / NAT-PMP to forward the port from my router" Value="WebUiUpnp" ValueChanged="WebUiUpnpChanged" />
@@ -33,10 +33,10 @@
<MudFieldSwitch Label="Use HTTPS instead of HTTP" Value="UseHttps" ValueChanged="UseHttpsChanged" /> <MudFieldSwitch Label="Use HTTPS instead of HTTP" Value="UseHttps" ValueChanged="UseHttpsChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Certificate" Value="WebUiHttpsCertPath" ValueChanged="WebUiHttpsCertPathChanged" Disabled="@(!UseHttps)" ShrinkLabel Variant="Variant.Outlined" Validation="WebUiHttpsCertPathValidation" /> <MudTextField T="string" Label="Certificate" Value="WebUiHttpsCertPath" ValueChanged="WebUiHttpsCertPathChanged" Disabled="@(!UseHttps)" Variant="Variant.Outlined" Validation="WebUiHttpsCertPathValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Key" Value="WebUiHttpsKeyPath" ValueChanged="WebUiHttpsKeyPathChanged" Disabled="@(!UseHttps)" ShrinkLabel Variant="Variant.Outlined" Validation="WebUiHttpsKeyPathValidation" /> <MudTextField T="string" Label="Key" Value="WebUiHttpsKeyPath" ValueChanged="WebUiHttpsKeyPathChanged" Disabled="@(!UseHttps)" Variant="Variant.Outlined" Validation="WebUiHttpsKeyPathValidation" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -51,10 +51,10 @@
<MudCardContent Class="pt-0"> <MudCardContent Class="pt-0">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Username" Value="WebUiUsername" ValueChanged="WebUiUsernameChanged" ShrinkLabel Variant="Variant.Outlined" Validation="WebUiUsernameValidation" /> <MudTextField T="string" Label="Username" Value="WebUiUsername" ValueChanged="WebUiUsernameChanged" Variant="Variant.Outlined" Validation="WebUiUsernameValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Password" Value="WebUiPassword" ValueChanged="WebUiPasswordChanged" InputType="InputType.Password" ShrinkLabel Variant="Variant.Outlined" Validation="WebUiPasswordValidation" /> <MudTextField T="string" Label="Password" Value="WebUiPassword" ValueChanged="WebUiPasswordChanged" InputType="InputType.Password" Variant="Variant.Outlined" Validation="WebUiPasswordValidation" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudFieldSwitch Label="Bypass authentication for clients on localhost" Value="BypassLocalAuth" ValueChanged="BypassLocalAuthChanged" /> <MudFieldSwitch Label="Bypass authentication for clients on localhost" Value="BypassLocalAuth" ValueChanged="BypassLocalAuthChanged" />
@@ -63,16 +63,16 @@
<MudFieldSwitch Label="Bypass authentication for clients in whitelisted IP subnets" Value="BypassAuthSubnetWhitelistEnabled" ValueChanged="BypassAuthSubnetWhitelistEnabledChanged" /> <MudFieldSwitch Label="Bypass authentication for clients in whitelisted IP subnets" Value="BypassAuthSubnetWhitelistEnabled" ValueChanged="BypassAuthSubnetWhitelistEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Trackers" Value="BypassAuthSubnetWhitelist" ValueChanged="BypassAuthSubnetWhitelistChanged" Lines="5" Disabled="@(!BypassAuthSubnetWhitelistEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Trackers" Value="BypassAuthSubnetWhitelist" ValueChanged="BypassAuthSubnetWhitelistChanged" Lines="5" Disabled="@(!BypassAuthSubnetWhitelistEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Ban client after consecutive failures" Value="WebUiMaxAuthFailCount" ValueChanged="WebUiMaxAuthFailCountChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" /> <MudNumericField T="int" Label="Ban client after consecutive failures" Value="WebUiMaxAuthFailCount" ValueChanged="WebUiMaxAuthFailCountChanged" Min="0" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="ban for" Value="WebUiBanDuration" ValueChanged="WebUiBanDurationChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="seconds" /> <MudNumericField T="int" Label="ban for" Value="WebUiBanDuration" ValueChanged="WebUiBanDurationChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="seconds" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudNumericField T="int" Label="Session timeout" Value="WebUiSessionTimeout" ValueChanged="WebUiSessionTimeoutChanged" Min="0" ShrinkLabel Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="seconds" /> <MudNumericField T="int" Label="Session timeout" Value="WebUiSessionTimeout" ValueChanged="WebUiSessionTimeoutChanged" Min="0" Variant="Variant.Outlined" Adornment="Adornment.End" AdornmentText="seconds" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -90,7 +90,7 @@
<MudFieldSwitch Label="Use alternative Web UI" Value="AlternativeWebuiEnabled" ValueChanged="AlternativeWebuiEnabledChanged" /> <MudFieldSwitch Label="Use alternative Web UI" Value="AlternativeWebuiEnabled" ValueChanged="AlternativeWebuiEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Files location" Value="AlternativeWebuiPath" ValueChanged="AlternativeWebuiPathChanged" ShrinkLabel Variant="Variant.Outlined" Validation="AlternativeWebuiPathValidation" /> <MudTextField T="string" Label="Files location" Value="AlternativeWebuiPath" ValueChanged="AlternativeWebuiPathChanged" Variant="Variant.Outlined" Validation="AlternativeWebuiPathValidation" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -117,7 +117,7 @@
<MudFieldSwitch Label="Enable Host header validation" Value="WebUiHostHeaderValidationEnabled" ValueChanged="WebUiHostHeaderValidationEnabledChanged" /> <MudFieldSwitch Label="Enable Host header validation" Value="WebUiHostHeaderValidationEnabled" ValueChanged="WebUiHostHeaderValidationEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Server domains" Value="WebUiDomainList" ValueChanged="WebUiDomainListChanged" Lines="5" Disabled="@(!WebUiHostHeaderValidationEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Server domains" Value="WebUiDomainList" ValueChanged="WebUiDomainListChanged" Lines="5" Disabled="@(!WebUiHostHeaderValidationEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -144,7 +144,7 @@
<MudFieldSwitch Label="Enable Host header validation" Value="WebUiHostHeaderValidationEnabled" ValueChanged="WebUiHostHeaderValidationEnabledChanged" /> <MudFieldSwitch Label="Enable Host header validation" Value="WebUiHostHeaderValidationEnabled" ValueChanged="WebUiHostHeaderValidationEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Server domains" Value="WebUiDomainList" ValueChanged="WebUiDomainListChanged" Lines="5" Disabled="@(!WebUiHostHeaderValidationEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Server domains" Value="WebUiDomainList" ValueChanged="WebUiDomainListChanged" Lines="5" Disabled="@(!WebUiHostHeaderValidationEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -162,7 +162,7 @@
<MudFieldSwitch Label="Add custom HTTP headers" Value="WebUiUseCustomHttpHeadersEnabled" ValueChanged="WebUiUseCustomHttpHeadersEnabledChanged" /> <MudFieldSwitch Label="Add custom HTTP headers" Value="WebUiUseCustomHttpHeadersEnabled" ValueChanged="WebUiUseCustomHttpHeadersEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Server domains" Value="WebUiCustomHttpHeaders" ValueChanged="WebUiCustomHttpHeadersChanged" Lines="5" Disabled="@(!WebUiUseCustomHttpHeadersEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Server domains" Value="WebUiCustomHttpHeaders" ValueChanged="WebUiCustomHttpHeadersChanged" Lines="5" Disabled="@(!WebUiUseCustomHttpHeadersEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -180,7 +180,7 @@
<MudFieldSwitch Label="Enable reverse proxy support" Value="WebUiReverseProxyEnabled" ValueChanged="WebUiReverseProxyEnabledChanged" /> <MudFieldSwitch Label="Enable reverse proxy support" Value="WebUiReverseProxyEnabled" ValueChanged="WebUiReverseProxyEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Trusted proxies list" Value="WebUiReverseProxiesList" ValueChanged="WebUiReverseProxiesListChanged" Lines="5" Disabled="@(!WebUiReverseProxyEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Trusted proxies list" Value="WebUiReverseProxiesList" ValueChanged="WebUiReverseProxiesListChanged" Lines="5" Disabled="@(!WebUiReverseProxyEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>
@@ -198,7 +198,7 @@
<MudFieldSwitch Label="Update my dynamic domain name" Value="DyndnsEnabled" ValueChanged="DyndnsEnabledChanged" /> <MudFieldSwitch Label="Update my dynamic domain name" Value="DyndnsEnabled" ValueChanged="DyndnsEnabledChanged" />
</MudItem> </MudItem>
<MudItem xs="8"> <MudItem xs="8">
<MudSelect T="int" Value="DyndnsService" ValueChanged="DyndnsServiceChanged" Disabled="@(!DyndnsEnabled)" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="int" Value="DyndnsService" ValueChanged="DyndnsServiceChanged" Disabled="@(!DyndnsEnabled)" Variant="Variant.Outlined">
<MudSelectItem Value="0">DynDNS</MudSelectItem> <MudSelectItem Value="0">DynDNS</MudSelectItem>
<MudSelectItem Value="1">NO-IP</MudSelectItem> <MudSelectItem Value="1">NO-IP</MudSelectItem>
</MudSelect> </MudSelect>
@@ -207,13 +207,13 @@
<MudButton OnClick="RegisterDyndnsService" Disabled="@(!DyndnsEnabled)" Variant="Variant.Filled">Register</MudButton> <MudButton OnClick="RegisterDyndnsService" Disabled="@(!DyndnsEnabled)" Variant="Variant.Filled">Register</MudButton>
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Domain name" Value="DyndnsDomain" ValueChanged="DyndnsDomainChanged" Disabled="@(!DyndnsEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Domain name" Value="DyndnsDomain" ValueChanged="DyndnsDomainChanged" Disabled="@(!DyndnsEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Username" Value="DyndnsUsername" ValueChanged="DyndnsUsernameChanged" Disabled="@(!DyndnsEnabled)" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Username" Value="DyndnsUsername" ValueChanged="DyndnsUsernameChanged" Disabled="@(!DyndnsEnabled)" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="12"> <MudItem xs="12">
<MudTextField T="string" Label="Password" Value="DyndnsPassword" ValueChanged="DyndnsPasswordChanged" Disabled="@(!DyndnsEnabled)" InputType="InputType.Password" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Password" Value="DyndnsPassword" ValueChanged="DyndnsPasswordChanged" Disabled="@(!DyndnsEnabled)" InputType="InputType.Password" Variant="Variant.Outlined" />
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudCardContent> </MudCardContent>

View File

@@ -1,53 +1,5 @@
<MudTable <DynamicTable T="Peer"
Items="Peers" ColumnDefinitions="Columns"
T="Peer" Items="Peers"
Hover="true" MultiSelection="false"
FixedHeader="true" Class="details-list" />
HeaderClass="table-head-bordered"
Dense="true"
Breakpoint="Breakpoint.None"
Bordered="true"
Square="true"
LoadingProgressColor="Color.Info"
HorizontalScrollbar="true"
Virtualize="true"
AllowUnsorted="false"
SelectOnRowClick="false"
Class="details-list">
<HeaderContent>
@if (ShowFlags)
{
<MudTh>Country/Region</MudTh>
}
<MudTh>IP</MudTh>
<MudTh>Port</MudTh>
<MudTh>Connection</MudTh>
<MudTh>Flags</MudTh>
<MudTh>Client</MudTh>
<MudTh>Progress</MudTh>
<MudTh>Download Speed</MudTh>
<MudTh>Upload Speed</MudTh>
<MudTh>Downloaded</MudTh>
<MudTh>Uploaded</MudTh>
<MudTh>Relevance</MudTh>
<MudTh>Files</MudTh>
</HeaderContent>
<RowTemplate>
@if (ShowFlags)
{
<MudTd DataLabel="Country/Region"><MudImage ObjectFit="ObjectFit.Fill" Src="@($"https://flagcdn.com/20x15/{context.CountryCode}.png")"></MudImage></MudTd>
}
<MudTd DataLabel="IP">@context.IPAddress</MudTd>
<MudTd DataLabel="Port">@context.Port</MudTd>
<MudTd DataLabel="Connection">@context.Connection</MudTd>
<MudTd DataLabel="Flags">@context.Flags</MudTd>
<MudTd DataLabel="Client">@context.Client</MudTd>
<MudTd DataLabel="Progress">@DisplayHelpers.Percentage(context.Progress)</MudTd>
<MudTd DataLabel="Download Speed">@DisplayHelpers.Speed(context.DownloadSpeed)</MudTd>
<MudTd DataLabel="Upload Speed">@DisplayHelpers.Speed(context.UploadSpeed)</MudTd>
<MudTd DataLabel="Downloaded">@DisplayHelpers.Size(context.Downloaded)</MudTd>
<MudTd DataLabel="Uploaded">@DisplayHelpers.Size(context.Uploaded)</MudTd>
<MudTd DataLabel="Relevance">@DisplayHelpers.Percentage(context.Relevance)</MudTd>
<MudTd DataLabel="Files">@context.Files</MudTd>
</RowTemplate>
</MudTable>

View File

@@ -2,6 +2,8 @@
using Lantean.QBTMudBlade.Models; using Lantean.QBTMudBlade.Models;
using Lantean.QBTMudBlade.Services; using Lantean.QBTMudBlade.Services;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using MudBlazor;
using System.Data;
using System.Net; using System.Net;
namespace Lantean.QBTMudBlade.Components namespace Lantean.QBTMudBlade.Components
@@ -123,6 +125,26 @@ namespace Lantean.QBTMudBlade.Components
} }
} }
protected IEnumerable<ColumnDefinition<Peer>> Columns => ColumnsDefinitions.Where(c => c.Id != "country/region" || _showFlags == true);
public static List<ColumnDefinition<Peer>> ColumnsDefinitions { get; } =
[
new ColumnDefinition<Peer>("Country/Region", p => p.Country),
new ColumnDefinition<Peer>("IP", p => p.IPAddress),
new ColumnDefinition<Peer>("Port", p => p.Port),
new ColumnDefinition<Peer>("Connection", p => p.Connection),
new ColumnDefinition<Peer>("Flags", p => p.Flags),
new ColumnDefinition<Peer>("Client", p => p.Client),
new ColumnDefinition<Peer>("Progress", p => p.Progress, p => DisplayHelpers.Percentage(p.Progress)),
new ColumnDefinition<Peer>("Download Speed", p => p.DownloadSpeed, p => DisplayHelpers.Speed(p.DownloadSpeed)),
new ColumnDefinition<Peer>("Upload Speed", p => p.UploadSpeed, p => DisplayHelpers.Speed(p.UploadSpeed)),
new ColumnDefinition<Peer>("Downloaded", p => p.Downloaded, p => @DisplayHelpers.Size(p.Downloaded)),
new ColumnDefinition<Peer>("Uploaded", p => p.Uploaded, p => @DisplayHelpers.Size(p.Uploaded)),
new ColumnDefinition<Peer>("Relevance", p => p.Relevance, p => @DisplayHelpers.Percentage(p.Relevance)),
new ColumnDefinition<Peer>("Files", p => p.Files, p => p.Files),
];
protected virtual async Task DisposeAsync(bool disposing) protected virtual async Task DisposeAsync(bool disposing)
{ {
if (!_disposedValue) if (!_disposedValue)

View File

@@ -1,42 +1,20 @@
<MudTable <ContextMenu @ref="ContextMenu" Dense="true">
T="Lantean.QBitTorrentClient.Models.TorrentTrackers" <MudMenuItem Icon="@Icons.Material.Filled.AddCircle" IconColor="Color.Info" OnClick="AddTracker">Add trackers</MudMenuItem>
Items="Trackers" @if (ContextMenuItem is not null)
Hover="true" {
FixedHeader="true" <MudMenuItem Icon="@Icons.Material.Filled.Edit" IconColor="Color.Info" OnClick="EditTracker">Edit tracker URL</MudMenuItem>
HeaderClass="table-head-bordered" <MudMenuItem Icon="@Icons.Material.Filled.Delete" IconColor="Color.Error" OnClick="RemoveTracker">Remove tracker</MudMenuItem>
Dense="true" <MudMenuItem Icon="@Icons.Material.Filled.FolderCopy" IconColor="Color.Info" OnClick="CopyTrackerUrl">Copy tracker url</MudMenuItem>
Breakpoint="Breakpoint.None" }
Bordered="true" </ContextMenu>
Square="true"
LoadingProgressColor="Color.Info" <DynamicTable T="Lantean.QBitTorrentClient.Models.TorrentTracker"
HorizontalScrollbar="true" ColumnDefinitions="Columns"
Virtualize="true" Items="Trackers"
AllowUnsorted="false" MultiSelection="false"
SelectOnRowClick="false" PreSorted="true"
Class="details-list"> SortDirectionChanged="SortDirectionChanged"
<HeaderContent> SortColumnChanged="SortColumnChanged"
<MudTh>Tier</MudTh> OnTableDataLongPress="TableDataLongPress"
<MudTh>URL</MudTh> OnTableDataContextMenu="TableDataContextMenu"
<MudTh>Status</MudTh> Class="details-list" />
<MudTh>Peers</MudTh>
<MudTh>Seeds</MudTh>
<MudTh>Leeches</MudTh>
<MudTh>Times Downloaded</MudTh>
<MudTh>Message</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Tier">
@if (context.Tier >= 0)
{
<text>@context.Tier</text>
}
</MudTd>
<MudTd DataLabel="URL">@context.Url</MudTd>
<MudTd DataLabel="Status">@context.Status</MudTd>
<MudTd DataLabel="Peers">@context.Peers</MudTd>
<MudTd DataLabel="Seeds">@context.Seeds</MudTd>
<MudTd DataLabel="Leeches">@context.Leeches</MudTd>
<MudTd DataLabel="Times Downloaded">@context.Downloads</MudTd>
<MudTd DataLabel="Message">@context.Message</MudTd>
</RowTemplate>
</MudTable>

View File

@@ -1,7 +1,10 @@
using Lantean.QBitTorrentClient; using Lantean.QBitTorrentClient;
using Lantean.QBitTorrentClient.Models; using Lantean.QBitTorrentClient.Models;
using Lantean.QBTMudBlade.Interop;
using Lantean.QBTMudBlade.Services; using Lantean.QBTMudBlade.Services;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MudBlazor;
using System.Net; using System.Net;
namespace Lantean.QBTMudBlade.Components namespace Lantean.QBTMudBlade.Components
@@ -11,6 +14,9 @@ namespace Lantean.QBTMudBlade.Components
private readonly CancellationTokenSource _timerCancellationToken = new(); private readonly CancellationTokenSource _timerCancellationToken = new();
private bool _disposedValue; private bool _disposedValue;
private string? _sortColumn;
private SortDirection _sortDirection;
[Parameter, EditorRequired] [Parameter, EditorRequired]
public string? Hash { get; set; } public string? Hash { get; set; }
@@ -20,13 +26,25 @@ namespace Lantean.QBTMudBlade.Components
[CascadingParameter(Name = "RefreshInterval")] [CascadingParameter(Name = "RefreshInterval")]
public int RefreshInterval { get; set; } public int RefreshInterval { get; set; }
[Inject]
protected IDialogService DialogService { get; set; } = default!;
[Inject]
protected IJSRuntime JSRuntime { get; set; } = default!;
[Inject] [Inject]
protected IApiClient ApiClient { get; set; } = default!; protected IApiClient ApiClient { get; set; } = default!;
[Inject] [Inject]
protected IDataManager DataManager { get; set; } = default!; protected IDataManager DataManager { get; set; } = default!;
protected IReadOnlyList<TorrentTrackers>? Trackers { get; set; } protected IReadOnlyList<TorrentTracker>? TrackerList { get; set; }
protected IEnumerable<TorrentTracker>? Trackers => GetTrackers();
protected TorrentTracker? ContextMenuItem { get; set; }
protected ContextMenu? ContextMenu { get; set; }
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
{ {
@@ -40,11 +58,125 @@ namespace Lantean.QBTMudBlade.Components
return; return;
} }
Trackers = await ApiClient.GetTorrentTrackers(Hash); TrackerList = await ApiClient.GetTorrentTrackers(Hash);
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
} }
protected IEnumerable<TorrentTracker>? GetTrackers()
{
if (TrackerList is null)
{
return null;
}
var trackers = TrackerList.Where(t => !IsRealTracker(t)).ToList();
trackers.AddRange(TrackerList.Where(IsRealTracker).OrderByDirection(_sortDirection, GetSortSelector()));
return trackers.AsReadOnly();
}
private static bool IsRealTracker(TorrentTracker torrentTracker)
{
return !torrentTracker.Url.StartsWith("**");
}
private Func<TorrentTracker, object?> GetSortSelector()
{
var sortSelector = ColumnsDefinitions.Find(c => c.Id == _sortColumn)?.SortSelector;
return sortSelector ?? (i => i.Url);
}
protected void SortDirectionChanged(SortDirection sortDirection)
{
_sortDirection = sortDirection;
StateHasChanged();
}
protected void SortColumnChanged(string column)
{
_sortColumn = column;
StateHasChanged();
}
protected Task TableDataContextMenu(TableDataContextMenuEventArgs<TorrentTracker> eventArgs)
{
return ShowContextMenu(eventArgs.Item, eventArgs.MouseEventArgs);
}
protected Task TableDataLongPress(TableDataLongPressEventArgs<TorrentTracker> eventArgs)
{
return ShowContextMenu(eventArgs.Item, eventArgs.LongPressEventArgs);
}
protected async Task ShowContextMenu(TorrentTracker? tracker, EventArgs eventArgs)
{
if (tracker is not null && IsRealTracker(tracker))
{
ContextMenuItem = tracker;
}
else
{
ContextMenuItem = null;
}
if (ContextMenu is null)
{
return;
}
await ContextMenu.ToggleMenuAsync(eventArgs);
}
protected async Task AddTracker()
{
if (Hash is null)
{
return;
}
var trackers = await DialogService.ShowAddTrackersDialog();
if (trackers is null || trackers.Count == 0)
{
return;
}
await ApiClient.AddTrackersToTorrent(Hash, trackers);
}
protected async Task EditTracker()
{
if (Hash is null || ContextMenuItem is null)
{
return;
}
await DialogService.ShowSingleFieldDialog("Edit Tracker", "Tracker URL", ContextMenuItem.Url, async (value) => await ApiClient.EditTracker(Hash, ContextMenuItem.Url, value));
}
protected async Task RemoveTracker()
{
if (Hash is null || ContextMenuItem is null)
{
return;
}
await ApiClient.RemoveTrackers(Hash, [ContextMenuItem.Url]);
}
protected async Task CopyTrackerUrl()
{
if (Hash is null || ContextMenuItem is null)
{
return;
}
await JSRuntime.WriteToClipboard(ContextMenuItem.Url);
}
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
@@ -57,7 +189,7 @@ namespace Lantean.QBTMudBlade.Components
{ {
try try
{ {
Trackers = await ApiClient.GetTorrentTrackers(Hash); TrackerList = await ApiClient.GetTorrentTrackers(Hash);
} }
catch (HttpRequestException exception) when (exception.StatusCode == HttpStatusCode.Forbidden || exception.StatusCode == HttpStatusCode.NotFound) catch (HttpRequestException exception) when (exception.StatusCode == HttpStatusCode.Forbidden || exception.StatusCode == HttpStatusCode.NotFound)
{ {
@@ -72,6 +204,20 @@ namespace Lantean.QBTMudBlade.Components
} }
} }
protected IEnumerable<ColumnDefinition<TorrentTracker>> Columns => ColumnsDefinitions;
public static List<ColumnDefinition<TorrentTracker>> ColumnsDefinitions { get; } =
[
new ColumnDefinition<TorrentTracker>("Tier", w => w.Tier, w => w.Tier > 0 ? w.Tier.ToString() : ""),
new ColumnDefinition<TorrentTracker>("URL", w => w.Url),
new ColumnDefinition<TorrentTracker>("Status", w => w.Status),
new ColumnDefinition<TorrentTracker>("Peers", w => w.Peers),
new ColumnDefinition<TorrentTracker>("Seeds", w => w.Seeds),
new ColumnDefinition<TorrentTracker>("Leeches", w => w.Leeches),
new ColumnDefinition<TorrentTracker>("Times Downloaded", w => w.Downloads),
new ColumnDefinition<TorrentTracker>("Message", w => w.Message),
];
protected virtual async Task DisposeAsync(bool disposing) protected virtual async Task DisposeAsync(bool disposing)
{ {
if (!_disposedValue) if (!_disposedValue)

View File

@@ -1,23 +1,5 @@
<MudTable <DynamicTable T="Lantean.QBitTorrentClient.Models.WebSeed"
T="Lantean.QBitTorrentClient.Models.WebSeed" ColumnDefinitions="Columns"
Items="WebSeeds" Items="WebSeeds"
Hover="true" MultiSelection="false"
FixedHeader="true" Class="details-list" />
HeaderClass="table-head-bordered"
Dense="true"
Breakpoint="Breakpoint.None"
Bordered="true"
Square="true"
LoadingProgressColor="Color.Info"
HorizontalScrollbar="true"
Virtualize="true"
AllowUnsorted="false"
SelectOnRowClick="false"
Class="details-list">
<HeaderContent>
<MudTh>URL</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Files">@context.Url</MudTd>
</RowTemplate>
</MudTable>

View File

@@ -89,5 +89,12 @@ namespace Lantean.QBTMudBlade.Components
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
} }
protected IEnumerable<ColumnDefinition<WebSeed>> Columns => ColumnsDefinitions;
public static List<ColumnDefinition<WebSeed>> ColumnsDefinitions { get; } =
[
new ColumnDefinition<WebSeed>("URL", w => w.Url, w => w.Url),
];
} }
} }

View File

@@ -157,7 +157,7 @@ namespace Lantean.QBTMudBlade
return updatedCategory.Name; return updatedCategory.Name;
} }
public static async Task<HashSet<string>?> ShowAddTagsDialog(this IDialogService dialogService, IApiClient apiClient) public static async Task<HashSet<string>?> ShowAddTagsDialog(this IDialogService dialogService)
{ {
var reference = await dialogService.ShowAsync<AddTagDialog>("Add Tags", NonBlurFormDialogOptions); var reference = await dialogService.ShowAsync<AddTagDialog>("Add Tags", NonBlurFormDialogOptions);
var dialogResult = await reference.Result; var dialogResult = await reference.Result;
@@ -172,6 +172,21 @@ namespace Lantean.QBTMudBlade
return tags; return tags;
} }
public static async Task<HashSet<string>?> ShowAddTrackersDialog(this IDialogService dialogService)
{
var reference = await dialogService.ShowAsync<AddTrackerDialog>("Add Tags", NonBlurFormDialogOptions);
var dialogResult = await reference.Result;
if (dialogResult is null || dialogResult.Canceled || dialogResult.Data is null)
{
return null;
}
var tags = (HashSet<string>)dialogResult.Data;
return tags;
}
public static async Task<bool> ShowConfirmDialog(this IDialogService dialogService, string title, string content) public static async Task<bool> ShowConfirmDialog(this IDialogService dialogService, string title, string content)
{ {
var parameters = new DialogParameters var parameters = new DialogParameters

View File

@@ -16,7 +16,7 @@
<EditForm Model="Model" OnSubmit="Submit"> <EditForm Model="Model" OnSubmit="Submit">
<MudGrid> <MudGrid>
<MudItem md="10"> <MudItem md="10">
<MudTextField T="string" Label="Criteria" @bind-Value="Model.Criteria" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Criteria" @bind-Value="Model.Criteria" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem md="2"> <MudItem md="2">
<MudButton ButtonType="ButtonType.Submit" FullWidth="true" Color="Color.Primary" EndIcon="@Icons.Material.Filled.Search" Variant="Variant.Filled" Class="mt-6">Filter</MudButton> <MudButton ButtonType="ButtonType.Submit" FullWidth="true" Color="Color.Primary" EndIcon="@Icons.Material.Filled.Search" Variant="Variant.Filled" Class="mt-6">Filter</MudButton>

View File

@@ -16,10 +16,10 @@
<EditForm Model="Model" OnSubmit="Submit"> <EditForm Model="Model" OnSubmit="Submit">
<MudGrid> <MudGrid>
<MudItem md="7"> <MudItem md="7">
<MudTextField T="string" Label="Criteria" @bind-Value="Model.Criteria" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Criteria" @bind-Value="Model.Criteria" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem md="3"> <MudItem md="3">
<MudSelect @ref="CategoryMudSelect" T="string" Label="Categories" SelectedValues="Model.SelectedTypes" SelectedValuesChanged="SelectedValuesChanged" ShrinkLabel Variant="Variant.Outlined" MultiSelection="true" MultiSelectionTextFunc="GenerateSelectedText" SelectAll="true"> <MudSelect @ref="CategoryMudSelect" T="string" Label="Categories" SelectedValues="Model.SelectedTypes" SelectedValuesChanged="SelectedValuesChanged" Variant="Variant.Outlined" MultiSelection="true" MultiSelectionTextFunc="GenerateSelectedText" SelectAll="true">
<MudSelectItem Value="@("Normal")">Normal</MudSelectItem> <MudSelectItem Value="@("Normal")">Normal</MudSelectItem>
<MudSelectItem Value="@("Info")">Info</MudSelectItem> <MudSelectItem Value="@("Info")">Info</MudSelectItem>
<MudSelectItem Value="@("Warning")">Warning</MudSelectItem> <MudSelectItem Value="@("Warning")">Warning</MudSelectItem>

View File

@@ -16,10 +16,10 @@
<EditForm Model="Model" OnValidSubmit="DoSearch"> <EditForm Model="Model" OnValidSubmit="DoSearch">
<MudGrid> <MudGrid>
<MudItem xs="12" md="4"> <MudItem xs="12" md="4">
<MudTextField T="string" Label="Criteria" @bind-Value="Model.SearchText" ShrinkLabel Variant="Variant.Outlined" /> <MudTextField T="string" Label="Criteria" @bind-Value="Model.SearchText" Variant="Variant.Outlined" />
</MudItem> </MudItem>
<MudItem xs="2" md="3"> <MudItem xs="2" md="3">
<MudSelect T="string" Label="Categories" @bind-Value="Model.SelectedCategory" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Categories" @bind-Value="Model.SelectedCategory" Variant="Variant.Outlined">
@foreach (var (value, name) in Categories) @foreach (var (value, name) in Categories)
{ {
<MudSelectItem Value="value">@name</MudSelectItem> <MudSelectItem Value="value">@name</MudSelectItem>
@@ -31,7 +31,7 @@
</MudSelect> </MudSelect>
</MudItem> </MudItem>
<MudItem xs="2" md="3"> <MudItem xs="2" md="3">
<MudSelect T="string" Label="Plugins" @bind-Value="Model.SelectedPlugin" ShrinkLabel Variant="Variant.Outlined"> <MudSelect T="string" Label="Plugins" @bind-Value="Model.SelectedPlugin" Variant="Variant.Outlined">
<MudSelectItem Value="@("all")">All</MudSelectItem> <MudSelectItem Value="@("all")">All</MudSelectItem>
<MudDivider /> <MudDivider />
@foreach (var (value, name) in Plugins) @foreach (var (value, name) in Plugins)

View File

@@ -13,8 +13,6 @@
<MudTextField Value="SearchText" TextChanged="SearchTextChanged" Immediate="true" DebounceInterval="1000" Placeholder="Filter torrent list" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" Class="mt-0"></MudTextField> <MudTextField Value="SearchText" TextChanged="SearchTextChanged" Immediate="true" DebounceInterval="1000" Placeholder="Filter torrent list" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" Class="mt-0"></MudTextField>
</MudToolBar> </MudToolBar>
@* <TorrentActions @ref="ContextMenuActions" RenderType="RenderType.MenuWithoutActivator" Hashes="GetContextMenuTargetHashes()" PrimaryHash="@(ContextMenuItem?.Hash)" /> *@
<ContextMenu @ref="ContextMenu" Dense="true"> <ContextMenu @ref="ContextMenu" Dense="true">
<TorrentActions RenderType="RenderType.MenuItems" Hashes="GetContextMenuTargetHashes()" PrimaryHash="@(ContextMenuItem?.Hash)" Torrents="MainData.Torrents" Preferences="Preferences" /> <TorrentActions RenderType="RenderType.MenuItems" Hashes="GetContextMenuTargetHashes()" PrimaryHash="@(ContextMenuItem?.Hash)" Torrents="MainData.Torrents" Preferences="Preferences" />
</ContextMenu> </ContextMenu>

View File

@@ -49,8 +49,6 @@ namespace Lantean.QBTMudBlade.Pages
protected DynamicTable<Torrent>? Table { get; set; } protected DynamicTable<Torrent>? Table { get; set; }
protected TorrentActions? ContextMenuActions { get; set; }
protected Torrent? ContextMenuItem { get; set; } protected Torrent? ContextMenuItem { get; set; }
protected ContextMenu? ContextMenu { get; set; } protected ContextMenu? ContextMenu { get; set; }
@@ -137,62 +135,11 @@ namespace Lantean.QBTMudBlade.Pages
protected Task TableDataContextMenu(TableDataContextMenuEventArgs<Torrent> eventArgs) protected Task TableDataContextMenu(TableDataContextMenuEventArgs<Torrent> eventArgs)
{ {
return ShowContextMenu(eventArgs.Item, eventArgs.MouseEventArgs); return ShowContextMenu(eventArgs.Item, eventArgs.MouseEventArgs);
//return ShowContextMenu(eventArgs.Item, eventArgs.MouseEventArgs.ClientX, eventArgs.MouseEventArgs.ClientY);
} }
protected Task TableDataLongPress(TableDataLongPressEventArgs<Torrent> eventArgs) protected Task TableDataLongPress(TableDataLongPressEventArgs<Torrent> eventArgs)
{ {
return ShowContextMenu(eventArgs.Item, eventArgs.LongPressEventArgs); return ShowContextMenu(eventArgs.Item, eventArgs.LongPressEventArgs);
//return ShowContextMenu(eventArgs.Item, eventArgs.LongPressEventArgs.ClientX, eventArgs.LongPressEventArgs.ClientY);
}
protected async Task ShowContextMenu(Torrent? torrent, double x, double y)
{
if (torrent is not null)
{
ContextMenuItem = torrent;
}
await JSRuntime.ClearSelection();
if (ContextMenuActions is null || ContextMenuActions.ActionsMenu is null)
{
return;
}
int? maxHeight = null;
var mainContentSize = await JSRuntime.GetInnerDimensions(".mud-main-content");
var contextMenuHeight = ContextMenuActions.CalculateMenuHeight();
// the bottom position of the window will be rendered off screen
if ((y - 64 + contextMenuHeight) >= (mainContentSize.Height))
{
// adjust the top of the context menu
var overshoot = Math.Abs(mainContentSize.Height - (y + contextMenuHeight));
y -= overshoot;
if (y < 70)
{
y = 70;
}
if ((y - 64 + contextMenuHeight) >= mainContentSize.Height)
{
maxHeight = (int)mainContentSize.Height - (int)y + 64;
}
}
#pragma warning disable BL0005 // Component parameter should not be set outside of its component.
ContextMenuActions.ActionsMenu.MaxHeight = maxHeight;
#pragma warning restore BL0005 // Component parameter should not be set outside of its component.
// emulate mouseeventargs for MudBlazor
var mouseEventArgs = new MouseEventArgs
{
OffsetX = x,
OffsetY = y,
};
await ContextMenuActions.ActionsMenu.OpenMenuAsync(mouseEventArgs);
} }
protected async Task ShowContextMenu(Torrent? torrent, EventArgs eventArgs) protected async Task ShowContextMenu(Torrent? torrent, EventArgs eventArgs)

View File

@@ -3,6 +3,7 @@ using Lantean.QBitTorrentClient;
using Lantean.QBTMudBlade.Services; using Lantean.QBTMudBlade.Services;
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using MudBlazor;
using MudBlazor.Services; using MudBlazor.Services;
namespace Lantean.QBTMudBlade namespace Lantean.QBTMudBlade
@@ -48,6 +49,7 @@ namespace Lantean.QBTMudBlade
builder.Logging.SetMinimumLevel(LogLevel.Error); builder.Logging.SetMinimumLevel(LogLevel.Error);
#endif #endif
MudGlobal.InputDefaults.ShrinkLabel = true;
await builder.Build().RunAsync(); await builder.Build().RunAsync();
} }
} }

View File

@@ -110,31 +110,31 @@ namespace Lantean.QBTMudBlade.Services
return new ServerState(); return new ServerState();
} }
return new ServerState( return new ServerState(
serverState.AllTimeDownloaded!.Value, serverState.AllTimeDownloaded.GetValueOrDefault(),
serverState.AllTimeUploaded!.Value, serverState.AllTimeUploaded.GetValueOrDefault(),
serverState.AverageTimeQueue!.Value, serverState.AverageTimeQueue.GetValueOrDefault(),
serverState.ConnectionStatus!, serverState.ConnectionStatus!,
serverState.DHTNodes!.Value, serverState.DHTNodes.GetValueOrDefault(),
serverState.DownloadInfoData!.Value, serverState.DownloadInfoData.GetValueOrDefault(),
serverState.DownloadInfoSpeed!.Value, serverState.DownloadInfoSpeed.GetValueOrDefault(),
serverState.DownloadRateLimit!.Value, serverState.DownloadRateLimit.GetValueOrDefault(),
serverState.FreeSpaceOnDisk!.Value, serverState.FreeSpaceOnDisk.GetValueOrDefault(),
serverState.GlobalRatio!.Value, serverState.GlobalRatio.GetValueOrDefault(),
serverState.QueuedIOJobs!.Value, serverState.QueuedIOJobs.GetValueOrDefault(),
serverState.Queuing!.Value, serverState.Queuing.GetValueOrDefault(),
serverState.ReadCacheHits!.Value, serverState.ReadCacheHits.GetValueOrDefault(),
serverState.ReadCacheOverload!.Value, serverState.ReadCacheOverload.GetValueOrDefault(),
serverState.RefreshInterval!.Value, serverState.RefreshInterval.GetValueOrDefault(),
serverState.TotalBuffersSize!.Value, serverState.TotalBuffersSize.GetValueOrDefault(),
serverState.TotalPeerConnections!.Value, serverState.TotalPeerConnections.GetValueOrDefault(),
serverState.TotalQueuedSize!.Value, serverState.TotalQueuedSize.GetValueOrDefault(),
serverState.TotalWastedSession!.Value, serverState.TotalWastedSession.GetValueOrDefault(),
serverState.UploadInfoData!.Value, serverState.UploadInfoData.GetValueOrDefault(),
serverState.UploadInfoSpeed!.Value, serverState.UploadInfoSpeed.GetValueOrDefault(),
serverState.UploadRateLimit!.Value, serverState.UploadRateLimit.GetValueOrDefault(),
serverState.UseAltSpeedLimits!.Value, serverState.UseAltSpeedLimits.GetValueOrDefault(),
serverState.UseSubcategories!.Value, serverState.UseSubcategories.GetValueOrDefault(),
serverState.WriteCacheOverload!.Value); serverState.WriteCacheOverload.GetValueOrDefault());
} }
public void MergeMainData(QBitTorrentClient.Models.MainData mainData, MainData torrentList) public void MergeMainData(QBitTorrentClient.Models.MainData mainData, MainData torrentList)
@@ -469,69 +469,69 @@ namespace Lantean.QBTMudBlade.Services
peer.Connection!, peer.Connection!,
peer.Country, peer.Country,
peer.CountryCode, peer.CountryCode,
peer.Downloaded!.Value, peer.Downloaded.GetValueOrDefault(),
peer.DownloadSpeed!.Value, peer.DownloadSpeed.GetValueOrDefault(),
peer.Files!, peer.Files!,
peer.Flags!, peer.Flags!,
peer.FlagsDescription!, peer.FlagsDescription!,
peer.IPAddress!, peer.IPAddress!,
peer.Port!.Value, peer.Port.GetValueOrDefault(),
peer.Progress!.Value, peer.Progress.GetValueOrDefault(),
peer.Relevance!.Value, peer.Relevance.GetValueOrDefault(),
peer.Uploaded!.Value, peer.Uploaded.GetValueOrDefault(),
peer.UploadSpeed!.Value); peer.UploadSpeed.GetValueOrDefault());
} }
public Torrent CreateTorrent(string hash, QBitTorrentClient.Models.Torrent torrent) public Torrent CreateTorrent(string hash, QBitTorrentClient.Models.Torrent torrent)
{ {
return new Torrent( return new Torrent(
hash, hash,
torrent.AddedOn!.Value, torrent.AddedOn.GetValueOrDefault(),
torrent.AmountLeft!.Value, torrent.AmountLeft.GetValueOrDefault(),
torrent.AutomaticTorrentManagement!.Value, torrent.AutomaticTorrentManagement.GetValueOrDefault(),
torrent.Availability!.Value, torrent.Availability.GetValueOrDefault(),
torrent.Category!, torrent.Category!,
torrent.Completed!.Value, torrent.Completed.GetValueOrDefault(),
torrent.CompletionOn!.Value, torrent.CompletionOn.GetValueOrDefault(),
torrent.ContentPath!, torrent.ContentPath!,
torrent.DownloadLimit!.Value, torrent.DownloadLimit.GetValueOrDefault(),
torrent.DownloadSpeed!.Value, torrent.DownloadSpeed.GetValueOrDefault(),
torrent.Downloaded!.Value, torrent.Downloaded.GetValueOrDefault(),
torrent.DownloadedSession!.Value, torrent.DownloadedSession.GetValueOrDefault(),
torrent.EstimatedTimeOfArrival!.Value, torrent.EstimatedTimeOfArrival.GetValueOrDefault(),
torrent.FirstLastPiecePriority!.Value, torrent.FirstLastPiecePriority.GetValueOrDefault(),
torrent.ForceStart!.Value, torrent.ForceStart.GetValueOrDefault(),
torrent.InfoHashV1!, torrent.InfoHashV1!,
torrent.InfoHashV2!, torrent.InfoHashV2!,
torrent.LastActivity!.Value, torrent.LastActivity.GetValueOrDefault(),
torrent.MagnetUri!, torrent.MagnetUri!,
torrent.MaxRatio!.Value, torrent.MaxRatio.GetValueOrDefault(),
torrent.MaxSeedingTime!.Value, torrent.MaxSeedingTime.GetValueOrDefault(),
torrent.Name!, torrent.Name!,
torrent.NumberComplete!.Value, torrent.NumberComplete.GetValueOrDefault(),
torrent.NumberIncomplete!.Value, torrent.NumberIncomplete.GetValueOrDefault(),
torrent.NumberLeeches!.Value, torrent.NumberLeeches.GetValueOrDefault(),
torrent.NumberSeeds!.Value, torrent.NumberSeeds.GetValueOrDefault(),
torrent.Priority!.Value, torrent.Priority.GetValueOrDefault(),
torrent.Progress!.Value, torrent.Progress.GetValueOrDefault(),
torrent.Ratio!.Value, torrent.Ratio.GetValueOrDefault(),
torrent.RatioLimit!.Value, torrent.RatioLimit.GetValueOrDefault(),
torrent.SavePath!, torrent.SavePath!,
torrent.SeedingTime!.Value, torrent.SeedingTime.GetValueOrDefault(),
torrent.SeedingTimeLimit!.Value, torrent.SeedingTimeLimit.GetValueOrDefault(),
torrent.SeenComplete!.Value, torrent.SeenComplete.GetValueOrDefault(),
torrent.SequentialDownload!.Value, torrent.SequentialDownload.GetValueOrDefault(),
torrent.Size!.Value, torrent.Size.GetValueOrDefault(),
torrent.State!, torrent.State!,
torrent.SuperSeeding!.Value, torrent.SuperSeeding.GetValueOrDefault(),
torrent.Tags!, torrent.Tags!,
torrent.TimeActive!.Value, torrent.TimeActive.GetValueOrDefault(),
torrent.TotalSize!.Value, torrent.TotalSize.GetValueOrDefault(),
torrent.Tracker!, torrent.Tracker!,
torrent.UploadLimit!.Value, torrent.UploadLimit.GetValueOrDefault(),
torrent.Uploaded!.Value, torrent.Uploaded.GetValueOrDefault(),
torrent.UploadedSession!.Value, torrent.UploadedSession.GetValueOrDefault(),
torrent.UploadSpeed!.Value, torrent.UploadSpeed.GetValueOrDefault(),
torrent.Reannounce ?? 0); torrent.Reannounce ?? 0);
} }

View File

@@ -5,14 +5,10 @@
- Rename multiple files dialog - Rename multiple files dialog
- RSS feeds and dialogs - RSS feeds and dialogs
- About - About
- Context Menu component - Context menu for files list/trackers list/peers list
- Context menu for files list, filter (categories, tags & trackers)
- Tag management page - Tag management page
- Category management page - Category management page
- Update all tables to use DynamicTable - Update all tables to use DynamicTable
- WebSeeds
- Trackers
- Peers
- Log - Log
- Blocks - Blocks
- Search - Search

View File

@@ -357,13 +357,13 @@ namespace Lantean.QBitTorrentClient
return await GetJson<TorrentProperties>(response.Content); return await GetJson<TorrentProperties>(response.Content);
} }
public async Task<IReadOnlyList<TorrentTrackers>> GetTorrentTrackers(string hash) public async Task<IReadOnlyList<TorrentTracker>> GetTorrentTrackers(string hash)
{ {
var response = await _httpClient.GetAsync($"torrents/trackers?hash={hash}"); var response = await _httpClient.GetAsync($"torrents/trackers?hash={hash}");
response.EnsureSuccessStatusCode(); response.EnsureSuccessStatusCode();
return await GetJsonList<TorrentTrackers>(response.Content); return await GetJsonList<TorrentTracker>(response.Content);
} }
public async Task<IReadOnlyList<WebSeed>> GetTorrentWebSeeds(string hash) public async Task<IReadOnlyList<WebSeed>> GetTorrentWebSeeds(string hash)

View File

@@ -78,7 +78,7 @@ namespace Lantean.QBitTorrentClient
Task<TorrentProperties> GetTorrentProperties(string hash); Task<TorrentProperties> GetTorrentProperties(string hash);
Task<IReadOnlyList<TorrentTrackers>> GetTorrentTrackers(string hash); Task<IReadOnlyList<TorrentTracker>> GetTorrentTrackers(string hash);
Task<IReadOnlyList<WebSeed>> GetTorrentWebSeeds(string hash); Task<IReadOnlyList<WebSeed>> GetTorrentWebSeeds(string hash);

View File

@@ -209,7 +209,7 @@ namespace Lantean.QBitTorrentClient
return _apiClient.GetTorrentProperties(hash); return _apiClient.GetTorrentProperties(hash);
} }
public Task<IReadOnlyList<TorrentTrackers>> GetTorrentTrackers(string hash) public Task<IReadOnlyList<TorrentTracker>> GetTorrentTrackers(string hash)
{ {
return _apiClient.GetTorrentTrackers(hash); return _apiClient.GetTorrentTrackers(hash);
} }

View File

@@ -2,10 +2,10 @@
namespace Lantean.QBitTorrentClient.Models namespace Lantean.QBitTorrentClient.Models
{ {
public record TorrentTrackers public record TorrentTracker
{ {
[JsonConstructor] [JsonConstructor]
public TorrentTrackers( public TorrentTracker(
string url, string url,
TrackerStatus status, TrackerStatus status,
int tier, int tier,