From b6622c4f9c2165bf88db54b1bffb1b3b3f7fc6ff Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Mon, 12 Jun 2023 23:17:09 -0400 Subject: [PATCH 1/9] Shared - Customizable Subtitle Langs --- .../Controllers/MainWindowController.cs | 2 +- .../Controllers/PreferencesViewController.cs | 10 ++++++++++ NickvisionTubeConverter.Shared/Models/Configuration.cs | 6 ++++++ NickvisionTubeConverter.Shared/Models/Download.cs | 2 +- .../Models/DownloadOptions.cs | 8 +++++++- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/NickvisionTubeConverter.Shared/Controllers/MainWindowController.cs b/NickvisionTubeConverter.Shared/Controllers/MainWindowController.cs index 7211008fa..810f03a99 100644 --- a/NickvisionTubeConverter.Shared/Controllers/MainWindowController.cs +++ b/NickvisionTubeConverter.Shared/Controllers/MainWindowController.cs @@ -51,7 +51,7 @@ public class MainWindowController : IDisposable /// /// The DownloadOptions for a download /// - public DownloadOptions DownloadOptions => new DownloadOptions(Configuration.Current.OverwriteExistingFiles, Configuration.Current.UseAria, Configuration.Current.CookiesPath, Configuration.Current.AriaMaxConnectionsPerServer, Configuration.Current.AriaMinSplitSize, Configuration.Current.EmbedMetadata, Configuration.Current.EmbedChapters); + public DownloadOptions DownloadOptions => new DownloadOptions(Configuration.Current.OverwriteExistingFiles, Configuration.Current.UseAria, Configuration.Current.CookiesPath, Configuration.Current.AriaMaxConnectionsPerServer, Configuration.Current.AriaMinSplitSize, Configuration.Current.SubtitleLangs, Configuration.Current.EmbedMetadata, Configuration.Current.EmbedChapters); /// /// Occurs when a notification is sent diff --git a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs index 9b30494c1..de2369348 100644 --- a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs @@ -110,6 +110,16 @@ public int AriaMinSplitSize set => Configuration.Current.AriaMinSplitSize = value; } + /// + /// A comma separated list of language codes for subtitle downloads + /// + public string SubtitleLangs + { + get => Configuration.Current.SubtitleLangs; + + set => Configuration.Current.SubtitleLangs = value; + } + /// /// The path of the cookies file to use for yt-dlp /// diff --git a/NickvisionTubeConverter.Shared/Models/Configuration.cs b/NickvisionTubeConverter.Shared/Models/Configuration.cs index 69f7be501..ac0a6b58a 100644 --- a/NickvisionTubeConverter.Shared/Models/Configuration.cs +++ b/NickvisionTubeConverter.Shared/Models/Configuration.cs @@ -1,4 +1,5 @@ using System; +using System.Globalization; using System.IO; using System.Runtime.InteropServices; using System.Text.Json; @@ -59,6 +60,10 @@ public class Configuration /// public int AriaMinSplitSize { get; set; } /// + /// A comma separated list of language codes for subtitle downloads + /// + public string SubtitleLangs { get; set; } + /// /// The path of the cookies file to use for yt-dlp /// public string CookiesPath { get; set; } @@ -118,6 +123,7 @@ public Configuration() UseAria = false; AriaMaxConnectionsPerServer = 16; AriaMinSplitSize = 20; + SubtitleLangs = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; CookiesPath = ""; DisallowConversions = false; EmbedMetadata = true; diff --git a/NickvisionTubeConverter.Shared/Models/Download.cs b/NickvisionTubeConverter.Shared/Models/Download.cs index 70530b857..fe44f0dda 100644 --- a/NickvisionTubeConverter.Shared/Models/Download.cs +++ b/NickvisionTubeConverter.Shared/Models/Download.cs @@ -257,7 +257,7 @@ public void Start(DownloadOptions options) { _ytOpt.Add("writesubtitles", true); _ytOpt.Add("writeautomaticsub", true); - _ytOpt.Add("subtitleslangs", new List { "en", CultureInfo.CurrentCulture.TwoLetterISOLanguageName }); + _ytOpt.Add("subtitleslangs", options.SubtitleLangs.Split(";").ToList()); postProcessors.Add(new Dictionary() { { "key", "FFmpegSubtitlesConvertor" }, { "format", Subtitle.ToString().ToLower() } }); postProcessors.Add(new Dictionary() { { "key", "FFmpegEmbedSubtitle" } }); } diff --git a/NickvisionTubeConverter.Shared/Models/DownloadOptions.cs b/NickvisionTubeConverter.Shared/Models/DownloadOptions.cs index b1b784ef6..d40e643eb 100644 --- a/NickvisionTubeConverter.Shared/Models/DownloadOptions.cs +++ b/NickvisionTubeConverter.Shared/Models/DownloadOptions.cs @@ -26,6 +26,10 @@ public class DownloadOptions /// public int AriaMinSplitSize { get; init; } /// + /// A comma separated list of language codes for subtitle downloads + /// + public string SubtitleLangs { get; init; } + /// /// Whether or not to embed media metadata in the downloaded file /// public bool EmbedMetadata { get; init; } @@ -42,15 +46,17 @@ public class DownloadOptions /// The path to the cookies file to use for yt-dlp /// The maximum number of connections to one server for each download (-x) /// The minimum size of which to split a file (-k) + /// A comma separated list of language codes for subtitle downloads /// Whether or not to embed media metadata in the downloaded file /// Whether or not to embed chapters in the downloaded file - public DownloadOptions(bool overwriteExistingFiles, bool useAria, string? cookiesPath, int ariaMaxConnectionsPerServer, int ariaMinSplitSize, bool embedMetadata, bool embedChapters) + public DownloadOptions(bool overwriteExistingFiles, bool useAria, string? cookiesPath, int ariaMaxConnectionsPerServer, int ariaMinSplitSize, string subtitleLangs, bool embedMetadata, bool embedChapters) { OverwriteExistingFiles = overwriteExistingFiles; UseAria = useAria; CookiesPath = cookiesPath; AriaMaxConnectionsPerServer = ariaMaxConnectionsPerServer; AriaMinSplitSize = ariaMinSplitSize; + SubtitleLangs = subtitleLangs; EmbedMetadata = embedMetadata; EmbedChapters = embedChapters; } From 2e6b71b7d7b50e66971a723408a3066ea81222a6 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Mon, 12 Jun 2023 23:38:03 -0400 Subject: [PATCH 2/9] All - Validate Subtitle Langs --- .../Blueprints/preferences_dialog.blp | 12 ++++- ...org.nickvision.tubeconverter.gresource.xml | 1 + .../Resources/subtitles-symbolic.svg | 2 + .../Views/PreferencesDialog.cs | 25 ++++++++++ .../Controllers/PreferencesViewController.cs | 49 +++++++++++++++++-- .../Models/Download.cs | 7 ++- 6 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 NickvisionTubeConverter.GNOME/Resources/subtitles-symbolic.svg diff --git a/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp b/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp index d938260ca..a7b985e45 100644 --- a/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp +++ b/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp @@ -187,7 +187,17 @@ Adw.PreferencesWindow _root { } } } - + + Adw.EntryRow _subtitleLangsRow { + title: _("Subtitle Languages (Comma-Separated)"); + show-apply-button: true; + + [prefix] + Gtk.Image { + icon-name: "subtitles-symbolic"; + } + } + Adw.ActionRow { title: _("Cookies File"); subtitle: _("A cookies file can be provided to yt-dlp to allow downloading media that requires a login."); diff --git a/NickvisionTubeConverter.GNOME/Resources/org.nickvision.tubeconverter.gresource.xml b/NickvisionTubeConverter.GNOME/Resources/org.nickvision.tubeconverter.gresource.xml index 59837ae24..671348c64 100644 --- a/NickvisionTubeConverter.GNOME/Resources/org.nickvision.tubeconverter.gresource.xml +++ b/NickvisionTubeConverter.GNOME/Resources/org.nickvision.tubeconverter.gresource.xml @@ -17,6 +17,7 @@ playlist-symbolic.svg settings-symbolic.svg speedometer-symbolic.svg + subtitles-symbolic.svg tag-outline-symbolic.svg wrench-wide-symbolic.svg diff --git a/NickvisionTubeConverter.GNOME/Resources/subtitles-symbolic.svg b/NickvisionTubeConverter.GNOME/Resources/subtitles-symbolic.svg new file mode 100644 index 000000000..6d6eabf85 --- /dev/null +++ b/NickvisionTubeConverter.GNOME/Resources/subtitles-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs b/NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs index da6b1fb96..0bc856930 100644 --- a/NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs +++ b/NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs @@ -47,6 +47,7 @@ public partial class PreferencesDialog : Adw.PreferencesWindow [Gtk.Connect] private readonly Gtk.Button _ariaMaxConnectionsPerServerResetButton; [Gtk.Connect] private readonly Gtk.SpinButton _ariaMinSplitSizeSpin; [Gtk.Connect] private readonly Gtk.Button _ariaMinSplitSizeResetButton; + [Gtk.Connect] private readonly Adw.EntryRow _subtitleLangsRow; [Gtk.Connect] private readonly Adw.ViewStack _cookiesViewStack; [Gtk.Connect] private readonly Gtk.Button _selectCookiesFileButton; [Gtk.Connect] private readonly Gtk.Button _cookiesFileButton; @@ -77,6 +78,7 @@ private PreferencesDialog(Gtk.Builder builder, PreferencesViewController control OnThemeChanged(); } }; + _subtitleLangsRow.OnApply += SubtitleLangsChanged; _selectCookiesFileButton.OnClicked += SelectCookiesFile; _cookiesFileButton.OnClicked += SelectCookiesFile; _unsetCookiesFileButton.OnClicked += UnsetCookiesFile; @@ -96,6 +98,7 @@ private PreferencesDialog(Gtk.Builder builder, PreferencesViewController control _ariaMaxConnectionsPerServerResetButton.OnClicked += (sender, e) => _ariaMaxConnectionsPerServerSpin.SetValue(16); _ariaMinSplitSizeSpin.SetValue(_controller.AriaMinSplitSize); _ariaMinSplitSizeResetButton.OnClicked += (sender, e) => _ariaMinSplitSizeSpin.SetValue(20); + _subtitleLangsRow.SetText(_controller.SubtitleLangs); if (File.Exists(_controller.CookiesPath)) { _cookiesViewStack.SetVisibleChildName("file-selected"); @@ -155,6 +158,28 @@ private void OnThemeChanged() }; } + /// + /// Occurs when the subtitle langs row is applied + /// + /// Adw.EntryRow + /// EventArgs + private void SubtitleLangsChanged(Adw.EntryRow sender, EventArgs e) + { + _subtitleLangsRow.SetTitle(_("Subtitle Languages (Comma-Separated)")); + _subtitleLangsRow.RemoveCssClass("error"); + var valid = _controller.ValidateSubtitleLangs(_subtitleLangsRow.GetText()); + if(valid) + { + _controller.SubtitleLangs = _subtitleLangsRow.GetText(); + _controller.SaveConfiguration(); + } + else + { + _subtitleLangsRow.SetTitle(_("Subtitle Languages (Invalid)")); + _subtitleLangsRow.AddCssClass("error"); + } + } + /// /// Occurs when a button to select cookies file is clicked /// diff --git a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs index de2369348..140513cd8 100644 --- a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs @@ -1,4 +1,8 @@ -using NickvisionTubeConverter.Shared.Models; +using System; +using NickvisionTubeConverter.Shared.Models; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; namespace NickvisionTubeConverter.Shared.Controllers; @@ -7,6 +11,8 @@ namespace NickvisionTubeConverter.Shared.Controllers; /// public class PreferencesViewController { + private readonly List _supportedLangCodes; + /// /// Gets the AppInfo object /// @@ -17,7 +23,11 @@ public class PreferencesViewController /// internal PreferencesViewController() { - + var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures).Where(x => !string.IsNullOrEmpty(x.Name)).ToArray(); + var codes = new HashSet(StringComparer.OrdinalIgnoreCase); + codes.UnionWith(cultures.Select(x => x.TwoLetterISOLanguageName)); + codes.UnionWith(cultures.Select(x => x.ThreeLetterISOLanguageName)); + _supportedLangCodes = codes.ToList(); } /// @@ -117,7 +127,14 @@ public string SubtitleLangs { get => Configuration.Current.SubtitleLangs; - set => Configuration.Current.SubtitleLangs = value; + set + { + if(value[value.Length - 1] == ';') + { + value = value.Remove(value.Length - 1); + } + Configuration.Current.SubtitleLangs = value; + } } /// @@ -170,6 +187,32 @@ public bool EmbedChapters set => Configuration.Current.EmbedChapters = value; } + /// + /// Validates a subtitles langs string + /// + /// The comma-separated list of lang codes + /// True if valid, else false + public bool ValidateSubtitleLangs(string s) + { + if(string.IsNullOrEmpty(s)) + { + return false; + } + if(s[s.Length - 1] == ';') + { + s = s.Remove(s.Length - 1); + } + var codes = s.Split(";"); + foreach(var code in codes) + { + if(!_supportedLangCodes.Contains(code)) + { + return false; + } + } + return true; + } + /// /// Saves the configuration to disk /// diff --git a/NickvisionTubeConverter.Shared/Models/Download.cs b/NickvisionTubeConverter.Shared/Models/Download.cs index fe44f0dda..fea20e6ac 100644 --- a/NickvisionTubeConverter.Shared/Models/Download.cs +++ b/NickvisionTubeConverter.Shared/Models/Download.cs @@ -255,9 +255,14 @@ public void Start(DownloadOptions options) } if (Subtitle != Subtitle.None) { + var subtitleLangs = options.SubtitleLangs; + if(subtitleLangs[subtitleLangs.Length - 1] == ';') + { + subtitleLangs = subtitleLangs.Remove(subtitleLangs.Length - 1); + } _ytOpt.Add("writesubtitles", true); _ytOpt.Add("writeautomaticsub", true); - _ytOpt.Add("subtitleslangs", options.SubtitleLangs.Split(";").ToList()); + _ytOpt.Add("subtitleslangs", subtitleLangs.Split(";").ToList()); postProcessors.Add(new Dictionary() { { "key", "FFmpegSubtitlesConvertor" }, { "format", Subtitle.ToString().ToLower() } }); postProcessors.Add(new Dictionary() { { "key", "FFmpegEmbedSubtitle" } }); } From 82d105db7a153e7a94ff47c8af6d48896b72c9dd Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Mon, 12 Jun 2023 23:40:19 -0400 Subject: [PATCH 3/9] All - Update Changelog --- NickvisionTubeConverter.GNOME/Program.cs | 2 +- .../Resources/po/tubeconverter.pot | 45 +++++++++++-------- ...g.nickvision.tubeconverter.metainfo.xml.in | 3 +- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/NickvisionTubeConverter.GNOME/Program.cs b/NickvisionTubeConverter.GNOME/Program.cs index 46cc08864..b149ea53a 100644 --- a/NickvisionTubeConverter.GNOME/Program.cs +++ b/NickvisionTubeConverter.GNOME/Program.cs @@ -49,7 +49,7 @@ public Program() _mainWindowController.AppInfo.ShortName = _("Tube Converter"); _mainWindowController.AppInfo.Description = $"{_("Download web video and audio")}."; _mainWindowController.AppInfo.Version = "2023.6.1-beta2"; - _mainWindowController.AppInfo.Changelog = "
  • Added authentication options when adding a download if needed
  • Added a Keyring to store credentials that can be used when authenticating
  • Added the advanced download option to specify a specific timeframe of a media to download
  • Added the ability to embed chapters in a download
  • Added the ability to turn on automatically cropping audio thumbnails
  • Playlist validation is a lot faster now
  • The \"Number Titles\" switch's state will now be remembered and used again for future downloads
  • The previous \"Video Resolution\" will be remembered and pre-selected if available for future downloads
  • Comment, Description, Synopsis, and Purl fields will no longer be embedded in metadata
  • If a download fails and was not stopped, Tube Converter will automatically retry it one more time
  • Fixed an issue where some websites were not validated
  • Fixed an issue where the incorrect file extension was sometimes shown for generic downloads
  • Updated translations (Thanks everyone on Weblate!)
"; + _mainWindowController.AppInfo.Changelog = "
  • Added authentication options when adding a download if needed
  • Added a Keyring to store credentials that can be used when authenticating
  • Added the advanced download option to specify a specific timeframe of a media to download
  • Added the ability to embed chapters in a download
  • Added the ability to turn on automatically cropping audio thumbnails
  • Added the ability to specify a comma-separated list of language codes for subtitle downloading
  • Improved the speed of playlist validation
  • The \"Number Titles\" switch's state will now be remembered and used again for future downloads
  • The previous \"Video Resolution\" will be remembered and pre-selected if available for future downloads
  • Comment, Description, Synopsis, and Purl fields will no longer be embedded in metadata
  • If a download fails and was not stopped, Tube Converter will automatically retry it one more time
  • Fixed an issue where some websites were not validated
  • Fixed an issue where the incorrect file extension was sometimes shown for generic downloads
  • Updated translations (Thanks everyone on Weblate!)
"; _mainWindowController.AppInfo.GitHubRepo = new Uri("https://github.com/NickvisionApps/TubeConverter"); _mainWindowController.AppInfo.IssueTracker = new Uri("https://github.com/NickvisionApps/TubeConverter/issues/new"); _mainWindowController.AppInfo.SupportUrl = new Uri("https://github.com/NickvisionApps/TubeConverter/discussions"); diff --git a/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot b/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot index 6bb087385..81888c556 100644 --- a/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot +++ b/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-12 22:51-0400\n" +"POT-Creation-Date: 2023-06-12 23:39-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -146,11 +146,11 @@ msgstr "" msgid "Download log was copied to clipboard." msgstr "" -#: ../../../Models/Download.cs:325 +#: ../../../Models/Download.cs:330 msgid "Download using aria2 has started" msgstr "" -#: ../../../Models/Download.cs:336 +#: ../../../Models/Download.cs:341 msgid "Download using ffmpeg has started" msgstr "" @@ -297,9 +297,9 @@ msgstr "" msgid "Save Folder (Invalid)" msgstr "" -#: ../../../../NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs:170 -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:264 -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:278 +#: ../../../../NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs:195 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:274 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:288 msgid "Select Cookies File" msgstr "" @@ -335,6 +335,15 @@ msgstr "" msgid "Stopped" msgstr "" +#: ../../../../NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs:168 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:192 +msgid "Subtitle Languages (Comma-Separated)" +msgstr "" + +#: ../../../../NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs:178 +msgid "Subtitle Languages (Invalid)" +msgstr "" + #: ../../../../NickvisionTubeConverter.GNOME/Controls/DownloadRow.cs:203 msgid "Success" msgstr "" @@ -681,60 +690,60 @@ msgstr "" msgid "The minimum size of which to split a file (in MiB)." msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:192 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:202 msgid "Cookies File" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:193 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:203 msgid "" "A cookies file can be provided to yt-dlp to allow downloading media that " "requires a login." msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:223 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:233 msgid "" "Cookies can be passed to yt-dlp in the form of TXT files. Export cookies " "from your browser using the following extensions (use at your own risk):" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:286 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:296 msgid "Clear Cookies File" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:298 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:308 msgid "Converter" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:299 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:309 msgid "Customize converter settings." msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:302 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:312 msgid "Disallow Conversions" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:303 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:313 msgid "" "If enabled, Tube Converter will download the appropriate video/audio format " "for the selected quality without converting to other formats. (You will be " "unable to select a file format)" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:318 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:328 msgid "Embed Metadata" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:327 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:337 msgid "Crop Audio Thumbnails" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:328 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:338 msgid "" "If enabled, Tube Converter will automatically turn on the crop thumbnail " "advanced option for audio downloads" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:344 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:354 msgid "Embed Chapters" msgstr "" diff --git a/NickvisionTubeConverter.Shared/org.nickvision.tubeconverter.metainfo.xml.in b/NickvisionTubeConverter.Shared/org.nickvision.tubeconverter.metainfo.xml.in index fd963bf00..3b54f786f 100644 --- a/NickvisionTubeConverter.Shared/org.nickvision.tubeconverter.metainfo.xml.in +++ b/NickvisionTubeConverter.Shared/org.nickvision.tubeconverter.metainfo.xml.in @@ -57,7 +57,8 @@

- Added the advanced download option to specify a specific timeframe of a media to download

- Added the ability to embed chapters in a download

- Added the ability to turn on automatically cropping audio thumbnails

-

- Playlist validation is a lot faster now

+

- Added the ability to specify a comma-separated list of language codes for subtitle downloading

+

- Improved the speed of playlist validation

- The "Number Titles" switch's state will now be remembered and used again for future downloads

- The previous "Video Resolution" will be remembered and pre-selected if available for future downloads

- Comment, Description, Synopsis, and Purl fields will no longer be embedded in metadata

From 3c6b43ab6d570f03b0e11d9302cde4fb9d2e2252 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Mon, 12 Jun 2023 23:45:49 -0400 Subject: [PATCH 4/9] Update PreferencesViewController.cs --- .../Controllers/PreferencesViewController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs index 140513cd8..119bb2279 100644 --- a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs @@ -1,5 +1,5 @@ -using System; -using NickvisionTubeConverter.Shared.Models; +using NickvisionTubeConverter.Shared.Models; +using System; using System.Collections.Generic; using System.Globalization; using System.Linq; From c209a44780c31c39057b6bd040cdbcd2ecddb5b5 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Mon, 12 Jun 2023 23:58:43 -0400 Subject: [PATCH 5/9] Shared - Comma-Separated Not Semicolon --- .../Controllers/PreferencesViewController.cs | 6 +++--- NickvisionTubeConverter.Shared/Models/Download.cs | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs index 119bb2279..da1a84748 100644 --- a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs @@ -129,7 +129,7 @@ public string SubtitleLangs set { - if(value[value.Length - 1] == ';') + if(value[value.Length - 1] == ',') { value = value.Remove(value.Length - 1); } @@ -198,11 +198,11 @@ public bool ValidateSubtitleLangs(string s) { return false; } - if(s[s.Length - 1] == ';') + if(s[s.Length - 1] == ',') { s = s.Remove(s.Length - 1); } - var codes = s.Split(";"); + var codes = s.Split(","); foreach(var code in codes) { if(!_supportedLangCodes.Contains(code)) diff --git a/NickvisionTubeConverter.Shared/Models/Download.cs b/NickvisionTubeConverter.Shared/Models/Download.cs index fea20e6ac..9eee411f7 100644 --- a/NickvisionTubeConverter.Shared/Models/Download.cs +++ b/NickvisionTubeConverter.Shared/Models/Download.cs @@ -2,7 +2,6 @@ using Python.Runtime; using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -256,13 +255,13 @@ public void Start(DownloadOptions options) if (Subtitle != Subtitle.None) { var subtitleLangs = options.SubtitleLangs; - if(subtitleLangs[subtitleLangs.Length - 1] == ';') + if(subtitleLangs[subtitleLangs.Length - 1] == ',') { subtitleLangs = subtitleLangs.Remove(subtitleLangs.Length - 1); } _ytOpt.Add("writesubtitles", true); _ytOpt.Add("writeautomaticsub", true); - _ytOpt.Add("subtitleslangs", subtitleLangs.Split(";").ToList()); + _ytOpt.Add("subtitleslangs", subtitleLangs.Split(",").ToList()); postProcessors.Add(new Dictionary() { { "key", "FFmpegSubtitlesConvertor" }, { "format", Subtitle.ToString().ToLower() } }); postProcessors.Add(new Dictionary() { { "key", "FFmpegEmbedSubtitle" } }); } From dfaca018731ac8d5cc4133595ee8af2c0fab0935 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Tue, 13 Jun 2023 00:01:11 -0400 Subject: [PATCH 6/9] Update Configuration.cs --- NickvisionTubeConverter.Shared/Models/Configuration.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NickvisionTubeConverter.Shared/Models/Configuration.cs b/NickvisionTubeConverter.Shared/Models/Configuration.cs index ac0a6b58a..21777ad0b 100644 --- a/NickvisionTubeConverter.Shared/Models/Configuration.cs +++ b/NickvisionTubeConverter.Shared/Models/Configuration.cs @@ -123,7 +123,7 @@ public Configuration() UseAria = false; AriaMaxConnectionsPerServer = 16; AriaMinSplitSize = 20; - SubtitleLangs = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; + SubtitleLangs = $"{CultureInfo.CurrentCulture.TwoLetterISOLanguageName},{CultureInfo.CurrentCulture.ThreeLetterISOLanguageName}"; CookiesPath = ""; DisallowConversions = false; EmbedMetadata = true; From 60d5a93078d14fb175e92c82ce3a857e832d50f6 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Tue, 13 Jun 2023 00:04:17 -0400 Subject: [PATCH 7/9] Cleanup Deps --- NickvisionTubeConverter.GNOME/nuget-sources.json | 14 -------------- .../Helpers/DependencyManager.cs | 3 +-- .../NickvisionTubeConverter.Shared.csproj | 1 - 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/NickvisionTubeConverter.GNOME/nuget-sources.json b/NickvisionTubeConverter.GNOME/nuget-sources.json index 57b87974a..53a07ce5a 100644 --- a/NickvisionTubeConverter.GNOME/nuget-sources.json +++ b/NickvisionTubeConverter.GNOME/nuget-sources.json @@ -174,20 +174,6 @@ "dest": "nuget-sources", "dest-filename": "nickvision.keyring.2023.6.3.nupkg" }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/python.deployment/2.0.0/python.deployment.2.0.0.nupkg", - "sha512": "b1fdba1a34f399baaad0360326ce6928bfee90f55a5f86c8b41c9639f099db7e7b3bba590c86a7cee043b298a00e7dc3a774f9bec355f58856f250683a937d6d", - "dest": "nuget-sources", - "dest-filename": "python.deployment.2.0.0.nupkg" - }, - { - "type": "file", - "url": "https://api.nuget.org/v3-flatcontainer/python.included/3.11.2/python.included.3.11.2.nupkg", - "sha512": "867632c3dd439384e97eddfae8fc3340e6c9dfc8296daf7935b21f6caa48ef05c02ee8bae97c4aab17a6cda3ca5faad27044b529690c187e00c871dad8979109", - "dest": "nuget-sources", - "dest-filename": "python.included.3.11.2.nupkg" - }, { "type": "file", "url": "https://api.nuget.org/v3-flatcontainer/pythonnet/3.0.1/pythonnet.3.0.1.nupkg", diff --git a/NickvisionTubeConverter.Shared/Helpers/DependencyManager.cs b/NickvisionTubeConverter.Shared/Helpers/DependencyManager.cs index 003b4be2d..0fbb150aa 100644 --- a/NickvisionTubeConverter.Shared/Helpers/DependencyManager.cs +++ b/NickvisionTubeConverter.Shared/Helpers/DependencyManager.cs @@ -1,5 +1,4 @@ -using NickvisionTubeConverter.Shared.Models; -using Python.Runtime; +using Python.Runtime; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/NickvisionTubeConverter.Shared/NickvisionTubeConverter.Shared.csproj b/NickvisionTubeConverter.Shared/NickvisionTubeConverter.Shared.csproj index 3be9731e1..f8d216f74 100644 --- a/NickvisionTubeConverter.Shared/NickvisionTubeConverter.Shared.csproj +++ b/NickvisionTubeConverter.Shared/NickvisionTubeConverter.Shared.csproj @@ -20,7 +20,6 @@ - From ae74148e5b336d58f08b916dad4417272458f4f4 Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Tue, 13 Jun 2023 00:11:08 -0400 Subject: [PATCH 8/9] Shared - Trim On Split --- .../Controllers/PreferencesViewController.cs | 2 +- NickvisionTubeConverter.Shared/Models/Download.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs index da1a84748..51b0ba312 100644 --- a/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs +++ b/NickvisionTubeConverter.Shared/Controllers/PreferencesViewController.cs @@ -202,7 +202,7 @@ public bool ValidateSubtitleLangs(string s) { s = s.Remove(s.Length - 1); } - var codes = s.Split(","); + var codes = s.Split(",").Select(x => x.Trim()); foreach(var code in codes) { if(!_supportedLangCodes.Contains(code)) diff --git a/NickvisionTubeConverter.Shared/Models/Download.cs b/NickvisionTubeConverter.Shared/Models/Download.cs index 9eee411f7..a35f9443a 100644 --- a/NickvisionTubeConverter.Shared/Models/Download.cs +++ b/NickvisionTubeConverter.Shared/Models/Download.cs @@ -261,7 +261,7 @@ public void Start(DownloadOptions options) } _ytOpt.Add("writesubtitles", true); _ytOpt.Add("writeautomaticsub", true); - _ytOpt.Add("subtitleslangs", subtitleLangs.Split(",").ToList()); + _ytOpt.Add("subtitleslangs", subtitleLangs.Split(",").Select(x => x.Trim()).ToList()); postProcessors.Add(new Dictionary() { { "key", "FFmpegSubtitlesConvertor" }, { "format", Subtitle.ToString().ToLower() } }); postProcessors.Add(new Dictionary() { { "key", "FFmpegEmbedSubtitle" } }); } From bfbd6172ef91ea0db9e1634875dc0a49f1ac2d0a Mon Sep 17 00:00:00 2001 From: Nick Logozzo Date: Tue, 13 Jun 2023 00:24:24 -0400 Subject: [PATCH 9/9] GNOME - Add help popover for subtitle langs --- .../Blueprints/preferences_dialog.blp | 28 ++++++++++++ .../Resources/po/tubeconverter.pot | 45 +++++++++++-------- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp b/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp index a7b985e45..f43cf2fd2 100644 --- a/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp +++ b/NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp @@ -196,6 +196,34 @@ Adw.PreferencesWindow _root { Gtk.Image { icon-name: "subtitles-symbolic"; } + + [suffix] + Gtk.MenuButton { + valign: center; + direction: none; + icon-name: "dialog-question-symbolic"; + + popover: Gtk.Popover { + child: Gtk.Box { + orientation: vertical; + spacing: 6; + margin-start: 6; + margin-top: 6; + margin-end: 6; + margin-bottom: 6; + + Adw.Clamp { + maximum-size: 300; + child: Gtk.Label { + wrap: true; + label: _("Some sites use two-letter language codes, whereas others use three-letter. For example, \"en\" and \"eng\" are both used for English.\n\nPlease specify both two-letter and three-letter codes for your languages for the best results."); + }; + } + }; + }; + + styles ["flat"] + } } Adw.ActionRow { diff --git a/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot b/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot index 81888c556..9b673b77a 100644 --- a/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot +++ b/NickvisionTubeConverter.Shared/Resources/po/tubeconverter.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-06-12 23:39-0400\n" +"POT-Creation-Date: 2023-06-13 00:23-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -146,11 +146,11 @@ msgstr "" msgid "Download log was copied to clipboard." msgstr "" -#: ../../../Models/Download.cs:330 +#: ../../../Models/Download.cs:329 msgid "Download using aria2 has started" msgstr "" -#: ../../../Models/Download.cs:341 +#: ../../../Models/Download.cs:340 msgid "Download using ffmpeg has started" msgstr "" @@ -191,7 +191,7 @@ msgstr "" msgid "Error" msgstr "" -#: ../../../Models/Download.cs:177 +#: ../../../Models/Download.cs:176 msgid "File already exists, and overwriting is disallowed" msgstr "" @@ -298,8 +298,8 @@ msgid "Save Folder (Invalid)" msgstr "" #: ../../../../NickvisionTubeConverter.GNOME/Views/PreferencesDialog.cs:195 -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:274 -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:288 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:302 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:316 msgid "Select Cookies File" msgstr "" @@ -690,60 +690,69 @@ msgstr "" msgid "The minimum size of which to split a file (in MiB)." msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:202 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:219 +msgid "" +"Some sites use two-letter language codes, whereas others use three-letter. " +"For example, \"en\" and \"eng\" are both used for English.\n" +"\n" +"Please specify both two-letter and three-letter codes for your languages for " +"the best results." +msgstr "" + +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:230 msgid "Cookies File" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:203 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:231 msgid "" "A cookies file can be provided to yt-dlp to allow downloading media that " "requires a login." msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:233 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:261 msgid "" "Cookies can be passed to yt-dlp in the form of TXT files. Export cookies " "from your browser using the following extensions (use at your own risk):" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:296 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:324 msgid "Clear Cookies File" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:308 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:336 msgid "Converter" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:309 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:337 msgid "Customize converter settings." msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:312 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:340 msgid "Disallow Conversions" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:313 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:341 msgid "" "If enabled, Tube Converter will download the appropriate video/audio format " "for the selected quality without converting to other formats. (You will be " "unable to select a file format)" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:328 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:356 msgid "Embed Metadata" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:337 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:365 msgid "Crop Audio Thumbnails" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:338 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:366 msgid "" "If enabled, Tube Converter will automatically turn on the crop thumbnail " "advanced option for audio downloads" msgstr "" -#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:354 +#: NickvisionTubeConverter.GNOME/Blueprints/preferences_dialog.blp:382 msgid "Embed Chapters" msgstr ""