forked from sim0n00ps/OF-DL
Improve help text on config page
This commit is contained in:
parent
bb04e0518a
commit
2a727c7121
@ -5,6 +5,12 @@ namespace OF_DL.Gui.ViewModels;
|
||||
|
||||
public sealed class ConfigCategoryViewModel : ViewModelBase
|
||||
{
|
||||
private const string SpecificDateFilterOptionHelpText =
|
||||
"Downloads posts (does not apply to messages) before or after the chosen date.";
|
||||
|
||||
private const string FolderStructureOptionHelpText =
|
||||
"Choose which content types get separate folders, including unlocked PPV posts and messages.";
|
||||
|
||||
public ConfigCategoryViewModel(string categoryName, IEnumerable<ConfigFieldViewModel> fields)
|
||||
{
|
||||
CategoryName = categoryName;
|
||||
@ -111,29 +117,7 @@ public sealed class ConfigCategoryViewModel : ViewModelBase
|
||||
FolderPerPaidMessageField != null &&
|
||||
FolderPerMessageField != null;
|
||||
|
||||
public string SpecificDateFilterHelpText
|
||||
{
|
||||
get
|
||||
{
|
||||
List<string> parts = [];
|
||||
if (!string.IsNullOrWhiteSpace(DownloadOnlySpecificDatesField?.HelpText))
|
||||
{
|
||||
parts.Add(DownloadOnlySpecificDatesField.HelpText);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(DownloadDateSelectionField?.HelpText))
|
||||
{
|
||||
parts.Add(DownloadDateSelectionField.HelpText);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(CustomDateField?.HelpText))
|
||||
{
|
||||
parts.Add(CustomDateField.HelpText);
|
||||
}
|
||||
|
||||
return string.Join(" ", parts.Distinct(StringComparer.Ordinal));
|
||||
}
|
||||
}
|
||||
public string SpecificDateFilterHelpText => SpecificDateFilterOptionHelpText;
|
||||
|
||||
public string RateLimitHelpText
|
||||
{
|
||||
@ -154,34 +138,7 @@ public sealed class ConfigCategoryViewModel : ViewModelBase
|
||||
}
|
||||
}
|
||||
|
||||
public string FolderStructureHelpText
|
||||
{
|
||||
get
|
||||
{
|
||||
List<string> parts = [];
|
||||
if (!string.IsNullOrWhiteSpace(FolderPerPaidPostField?.HelpText))
|
||||
{
|
||||
parts.Add(FolderPerPaidPostField.HelpText);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(FolderPerPostField?.HelpText))
|
||||
{
|
||||
parts.Add(FolderPerPostField.HelpText);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(FolderPerPaidMessageField?.HelpText))
|
||||
{
|
||||
parts.Add(FolderPerPaidMessageField.HelpText);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(FolderPerMessageField?.HelpText))
|
||||
{
|
||||
parts.Add(FolderPerMessageField.HelpText);
|
||||
}
|
||||
|
||||
return string.Join(" ", parts.Distinct(StringComparer.Ordinal));
|
||||
}
|
||||
}
|
||||
public string FolderStructureHelpText => FolderStructureOptionHelpText;
|
||||
|
||||
public bool HasSpecificDateFilterHelpText => !string.IsNullOrWhiteSpace(SpecificDateFilterHelpText);
|
||||
|
||||
|
||||
@ -99,10 +99,7 @@ public partial class ConfigFieldViewModel : ViewModelBase
|
||||
}
|
||||
|
||||
SelectedFileNameVariable = AvailableFileNameVariables.FirstOrDefault();
|
||||
string availableVariables =
|
||||
string.Join(", ", AvailableFileNameVariables.Select(variable => $"{{{variable}}}"));
|
||||
string fileNameHelpText =
|
||||
$"Available variables: {availableVariables}. Include {{mediaId}} or {{filename}} to avoid collisions.";
|
||||
const string fileNameHelpText = "Include {mediaId} or {filename} to avoid filename collisions.";
|
||||
HelpText = string.IsNullOrWhiteSpace(HelpText)
|
||||
? fileNameHelpText
|
||||
: $"{HelpText} {fileNameHelpText}";
|
||||
|
||||
@ -78,88 +78,88 @@ public partial class MainWindowViewModel(
|
||||
private static readonly Dictionary<string, string> s_configHelpTextByProperty = new(StringComparer.Ordinal)
|
||||
{
|
||||
[nameof(Config.FFmpegPath)] =
|
||||
"Path to the FFmpeg executable. If blank, OF-DL will try the app directory and PATH.",
|
||||
"Path to the FFmpeg executable. Leave blank to auto-detect from the app folder or PATH.",
|
||||
[nameof(Config.FFprobePath)] =
|
||||
"Path to the FFprobe executable. If blank, OF-DL will try FFmpeg's directory, the app directory, and PATH.",
|
||||
"Path to the FFprobe executable. Leave blank to auto-detect from FFmpeg's folder, the app folder, or PATH.",
|
||||
[nameof(Config.DownloadPath)] =
|
||||
"Base download folder. If blank, OF-DL uses __user_data__/sites/OnlyFans/{username}.",
|
||||
"Base download folder. Leave blank to use __user_data__/sites/OnlyFans/{username}.",
|
||||
[nameof(Config.DrmVideoDurationMatchThreshold)] =
|
||||
"Minimum DRM video duration match threshold. Higher values are stricter. 100% requires an exact duration match. 98% is the recommended value.",
|
||||
[nameof(Config.DownloadVideos)] = "Download video media when enabled.",
|
||||
[nameof(Config.DownloadImages)] = "Download image media when enabled.",
|
||||
[nameof(Config.DownloadAudios)] = "Download audio media when enabled.",
|
||||
"Minimum DRM duration match required. 98% is recommended; 100% requires an exact match.",
|
||||
[nameof(Config.DownloadVideos)] = "Include videos in downloads.",
|
||||
[nameof(Config.DownloadImages)] = "Include images in downloads.",
|
||||
[nameof(Config.DownloadAudios)] = "Include audio files in downloads.",
|
||||
[nameof(Config.DownloadAvatarHeaderPhoto)] =
|
||||
"Download creator avatar and header images when enabled.",
|
||||
[nameof(Config.DownloadPosts)] = "Download free posts when enabled.",
|
||||
[nameof(Config.DownloadPaidPosts)] = "Download paid posts when enabled.",
|
||||
[nameof(Config.DownloadArchived)] = "Download archived posts when enabled.",
|
||||
[nameof(Config.DownloadStreams)] = "Download posts from the Streams tab when enabled.",
|
||||
[nameof(Config.DownloadStories)] = "Download stories when enabled.",
|
||||
[nameof(Config.DownloadHighlights)] = "Download highlights when enabled.",
|
||||
"Include creator avatar and header images.",
|
||||
[nameof(Config.DownloadPosts)] = "Include free posts.",
|
||||
[nameof(Config.DownloadPaidPosts)] = "Include unlocked PPV posts.",
|
||||
[nameof(Config.DownloadArchived)] = "Include archived posts.",
|
||||
[nameof(Config.DownloadStreams)] = "Include stream posts from the Streams tab.",
|
||||
[nameof(Config.DownloadStories)] = "Include stories.",
|
||||
[nameof(Config.DownloadHighlights)] = "Include highlights.",
|
||||
[nameof(Config.DownloadMessages)] =
|
||||
"Download free media from messages (including paid-message previews) when enabled.",
|
||||
"Include free message media and paid-message preview media.",
|
||||
[nameof(Config.DownloadPaidMessages)] =
|
||||
"Download paid media from messages (excluding preview media) when enabled.",
|
||||
"Include unlocked PPV message media (excluding preview media).",
|
||||
[nameof(Config.IgnoreOwnMessages)] =
|
||||
"Ignore your own sent messages and do not download media sent by your account.",
|
||||
"Skip messages sent by your account and any media attached to them.",
|
||||
[nameof(Config.DownloadPostsIncrementally)] =
|
||||
"Only download new posts after the latest downloaded post in metadata DB.",
|
||||
"Only fetch posts newer than the latest saved post in metadata.",
|
||||
[nameof(Config.BypassContentForCreatorsWhoNoLongerExist)] =
|
||||
"Allow downloading accessible purchased content for deleted creators.",
|
||||
"Try downloading accessible purchased content even when a creator account no longer exists.",
|
||||
[nameof(Config.DownloadDuplicatedMedia)] =
|
||||
"When enabled, duplicate media can be downloaded instead of being skipped.",
|
||||
"Allow duplicate media to be downloaded instead of skipped.",
|
||||
[nameof(Config.SkipAds)] =
|
||||
"Skip posts/messages containing #ad or free-trial links when enabled.",
|
||||
"Skip posts and messages that contain #ad or free-trial links.",
|
||||
[nameof(Config.DownloadOnlySpecificDates)] =
|
||||
"Limit downloads by date using DownloadDateSelection and CustomDate.",
|
||||
"Enable post date filtering using Date Selection and Custom Date.",
|
||||
[nameof(Config.DownloadDateSelection)] =
|
||||
"Choose whether date filtering uses content before or after CustomDate.",
|
||||
"Choose whether post filtering uses content before or after Custom Date.",
|
||||
[nameof(Config.CustomDate)] =
|
||||
"Date used for date-filtered downloads (yyyy-MM-dd).",
|
||||
"Date used for post filtering (yyyy-MM-dd).",
|
||||
[nameof(Config.ShowScrapeSize)] =
|
||||
"Show total byte size instead of item counts during download progress.",
|
||||
"Show estimated total bytes instead of item counts while preparing downloads.",
|
||||
[nameof(Config.DisableTextSanitization)] =
|
||||
"Store post/message text as-is without XML stripping.",
|
||||
"Store post and message text as-is without XML stripping.",
|
||||
[nameof(Config.DownloadVideoResolution)] =
|
||||
"Choose preferred video resolution (source, 240, or 720 when available).",
|
||||
"Preferred video resolution when alternatives are available.",
|
||||
[nameof(Config.PaidPostFileNameFormat)] =
|
||||
"Custom filename format for paid posts. See custom filename formats docs.",
|
||||
"Filename pattern for unlocked PPV posts.",
|
||||
[nameof(Config.PostFileNameFormat)] =
|
||||
"Custom filename format for free posts/archived/streams. See custom filename formats docs.",
|
||||
"Filename pattern for free posts, archived posts, and streams.",
|
||||
[nameof(Config.PaidMessageFileNameFormat)] =
|
||||
"Custom filename format for paid messages. See custom filename formats docs.",
|
||||
"Filename pattern for unlocked PPV message media.",
|
||||
[nameof(Config.MessageFileNameFormat)] =
|
||||
"Custom filename format for free messages. See custom filename formats docs.",
|
||||
"Filename pattern for free message media.",
|
||||
[nameof(Config.RenameExistingFilesWhenCustomFormatIsSelected)] =
|
||||
"Rename previously downloaded files when custom filename format is enabled.",
|
||||
"Rename existing downloaded files to match current custom filename formats.",
|
||||
[nameof(Config.CreatorConfigs)] =
|
||||
"Per-creator filename format overrides. Values here override global filename formats.",
|
||||
"Per-creator filename format overrides in JSON. These override global formats.",
|
||||
[nameof(Config.FolderPerPaidPost)] =
|
||||
"Create a separate folder per paid post when enabled.",
|
||||
"Create a separate folder for each unlocked PPV post.",
|
||||
[nameof(Config.FolderPerPost)] =
|
||||
"Create a separate folder per free post when enabled.",
|
||||
"Create a separate folder for each free post.",
|
||||
[nameof(Config.FolderPerPaidMessage)] =
|
||||
"Create a separate folder per paid message when enabled.",
|
||||
"Create a separate folder for each unlocked PPV message.",
|
||||
[nameof(Config.FolderPerMessage)] =
|
||||
"Create a separate folder per free message when enabled.",
|
||||
"Create a separate folder for each free message.",
|
||||
[nameof(Config.IncludeExpiredSubscriptions)] =
|
||||
"Include expired subscriptions in user selection.",
|
||||
"Show expired subscriptions in creator selection.",
|
||||
[nameof(Config.IncludeRestrictedSubscriptions)] =
|
||||
"Include restricted creators in scraping and download flow.",
|
||||
"Include restricted creators during scraping and downloads.",
|
||||
[nameof(Config.IgnoredUsersListName)] =
|
||||
"Users in this list are ignored during scraping. Empty means no users are ignored.",
|
||||
"Skip creators that belong to this OnlyFans list.",
|
||||
[nameof(Config.Timeout)] =
|
||||
"HTTP timeout override in seconds (-1 uses default behavior).",
|
||||
"HTTP timeout in seconds. Use -1 for default behavior.",
|
||||
[nameof(Config.LimitDownloadRate)] =
|
||||
"Enable download speed limiting.",
|
||||
[nameof(Config.DownloadLimitInMbPerSec)] =
|
||||
"Download rate limit in MB/s when rate limiting is enabled.",
|
||||
"Maximum download speed in MB/s when rate limiting is enabled.",
|
||||
[nameof(Config.Theme)] =
|
||||
"GUI theme for the configuration and download screens.",
|
||||
"Choose the GUI theme.",
|
||||
[nameof(Config.HideMissingCdmKeysWarning)] =
|
||||
"Hide the missing CDM keys warning before downloads start.",
|
||||
"Skip the missing CDM keys confirmation before downloads start.",
|
||||
[nameof(Config.LoggingLevel)] =
|
||||
"Log verbosity written to logs/OFDL.txt."
|
||||
"Minimum log level written to logs/OFDL.txt."
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, string> s_lightThemeBrushes = new(StringComparer.Ordinal)
|
||||
|
||||
@ -761,14 +761,15 @@
|
||||
</Grid>
|
||||
<StackPanel Grid.Column="1" Spacing="4">
|
||||
<StackPanel IsVisible="{Binding IsBoolean}"
|
||||
Orientation="Horizontal"
|
||||
Spacing="8">
|
||||
Orientation="Horizontal"
|
||||
Spacing="8">
|
||||
<CheckBox IsChecked="{Binding BoolValue}"
|
||||
VerticalAlignment="Center" />
|
||||
<TextBlock IsVisible="{Binding IsHideMissingCdmKeysWarningField}"
|
||||
VerticalAlignment="Center"
|
||||
Text="{Binding ViewModel.HideMissingCdmKeysWarningStatusText, RelativeSource={RelativeSource AncestorType=views:MainWindow}, FallbackValue=''}"
|
||||
Foreground="{Binding ViewModel.HideMissingCdmKeysWarningStatusBrush, RelativeSource={RelativeSource AncestorType=views:MainWindow}}" />
|
||||
VerticalAlignment="Center" />
|
||||
<TextBlock
|
||||
IsVisible="{Binding IsHideMissingCdmKeysWarningField}"
|
||||
VerticalAlignment="Center"
|
||||
Text="{Binding ViewModel.HideMissingCdmKeysWarningStatusText, RelativeSource={RelativeSource AncestorType=views:MainWindow}, FallbackValue=''}"
|
||||
Foreground="{Binding ViewModel.HideMissingCdmKeysWarningStatusBrush, RelativeSource={RelativeSource AncestorType=views:MainWindow}}" />
|
||||
</StackPanel>
|
||||
|
||||
<ComboBox IsVisible="{Binding IsEnum}"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user