From 82ca89433b023722df1a8b8d6bac1cde664d8f91 Mon Sep 17 00:00:00 2001 From: Otiel Date: Sun, 20 Feb 2022 17:34:47 +0100 Subject: [PATCH 1/9] feat: use HTTP instead of HTTPS if setting is checked --- src/BandcampDownloader/BandcampDownloader.csproj | 1 + src/BandcampDownloader/Core/DownloadManager.cs | 16 +++++++++------- src/BandcampDownloader/Helpers/UrlHelper.cs | 10 ++++++++++ 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 src/BandcampDownloader/Helpers/UrlHelper.cs diff --git a/src/BandcampDownloader/BandcampDownloader.csproj b/src/BandcampDownloader/BandcampDownloader.csproj index 18a83da..981d8be 100644 --- a/src/BandcampDownloader/BandcampDownloader.csproj +++ b/src/BandcampDownloader/BandcampDownloader.csproj @@ -155,6 +155,7 @@ + diff --git a/src/BandcampDownloader/Core/DownloadManager.cs b/src/BandcampDownloader/Core/DownloadManager.cs index 94aca71..f96536e 100644 --- a/src/BandcampDownloader/Core/DownloadManager.cs +++ b/src/BandcampDownloader/Core/DownloadManager.cs @@ -193,7 +193,8 @@ private async Task DownloadAlbumAsync(Album album) /// The cover art. private async Task DownloadAndTagTrackAsync(Album album, Track track, TagLib.Picture artwork) { - LogAdded(this, new LogArgs($"Downloading track \"{track.Title}\" from url: {track.Mp3Url}", LogType.VerboseInfo)); + var trackMp3Url = UrlHelper.GetHttpUrlIfNeeded(track.Mp3Url); + LogAdded(this, new LogArgs($"Downloading track \"{track.Title}\" from url: {trackMp3Url}", LogType.VerboseInfo)); var tries = 0; var trackDownloaded = false; @@ -234,9 +235,9 @@ private async Task DownloadAndTagTrackAsync(Album album, Track track, TagL // Start download try { - await webClient.DownloadFileTaskAsync(track.Mp3Url, track.Path); + await webClient.DownloadFileTaskAsync(trackMp3Url, track.Path); trackDownloaded = true; - LogAdded(this, new LogArgs($"Downloaded track \"{track.Title}\" from url: {track.Mp3Url}", LogType.VerboseInfo)); + LogAdded(this, new LogArgs($"Downloaded track \"{track.Title}\" from url: {trackMp3Url}", LogType.VerboseInfo)); } catch (WebException ex) when (ex.Status == WebExceptionStatus.RequestCanceled) { @@ -339,9 +340,10 @@ private async Task DownloadAndTagTrackAsync(Album album, Track track, TagL _cancellationTokenSource.Token.Register(webClient.CancelAsync); // Start download + var albumArtworkUrl = UrlHelper.GetHttpUrlIfNeeded(album.ArtworkUrl); try { - await webClient.DownloadFileTaskAsync(album.ArtworkUrl, album.ArtworkTempPath); + await webClient.DownloadFileTaskAsync(albumArtworkUrl, album.ArtworkTempPath); artworkDownloaded = true; } catch (WebException ex) when (ex.Status == WebExceptionStatus.RequestCanceled) @@ -452,7 +454,7 @@ private async Task> GetAlbumsAsync(List urls) { var albums = new List(); - foreach (var url in urls) + foreach (var url in urls.Select(o => UrlHelper.GetHttpUrlIfNeeded(o))) { LogAdded(this, new LogArgs($"Retrieving album data for {url}", LogType.Info)); @@ -511,7 +513,7 @@ private async Task> GetArtistDiscographyAsync(List urls) { var albumsUrls = new List(); - foreach (var url in urls) + foreach (var url in urls.Select(o => UrlHelper.GetHttpUrlIfNeeded(o))) { LogAdded(this, new LogArgs($"Retrieving artist discography from {url}", LogType.Info)); @@ -542,7 +544,7 @@ private async Task> GetArtistDiscographyAsync(List urls) var regex = new Regex("https?://[^/]*"); var artistPage = regex.Match(url).ToString(); - var artistMusicPage = artistPage + "/music"; + var artistMusicPage = UrlHelper.GetHttpUrlIfNeeded(artistPage + "/music"); // Retrieve artist "music" page HTML source code using (var webClient = new WebClient() { Encoding = Encoding.UTF8 }) diff --git a/src/BandcampDownloader/Helpers/UrlHelper.cs b/src/BandcampDownloader/Helpers/UrlHelper.cs new file mode 100644 index 0000000..2a6c553 --- /dev/null +++ b/src/BandcampDownloader/Helpers/UrlHelper.cs @@ -0,0 +1,10 @@ +namespace BandcampDownloader +{ + public static class UrlHelper + { + public static string GetHttpUrlIfNeeded(string url) + { + return App.UserSettings.UseHttpInsteadOfHttps ? url.Replace("https", "http") : url; + } + } +} From a1f6b70f2b7795d1befd20eeb94f2918db4f480b Mon Sep 17 00:00:00 2001 From: Otiel Date: Sun, 20 Feb 2022 17:50:38 +0100 Subject: [PATCH 2/9] refactor: remove dead code --- .../Core/DownloadManager.cs | 25 +------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/src/BandcampDownloader/Core/DownloadManager.cs b/src/BandcampDownloader/Core/DownloadManager.cs index f96536e..1a2d4d1 100644 --- a/src/BandcampDownloader/Core/DownloadManager.cs +++ b/src/BandcampDownloader/Core/DownloadManager.cs @@ -517,36 +517,13 @@ private async Task> GetArtistDiscographyAsync(List urls) { LogAdded(this, new LogArgs($"Retrieving artist discography from {url}", LogType.Info)); - // Retrieve URL HTML source code - var htmlCode = ""; - using (var webClient = new WebClient() { Encoding = Encoding.UTF8 }) - { - ProxyHelper.SetProxy(webClient); - - if (_cancelDownloads) - { - // Abort - return new List(); - } - - try - { - htmlCode = await webClient.DownloadStringTaskAsync(url); - } - catch - { - LogAdded(this, new LogArgs($"Could not retrieve data for {url}", LogType.Error)); - continue; - } - } - // Get artist "music" bandcamp page (http://artist.bandcamp.com/music) - var regex = new Regex("https?://[^/]*"); var artistPage = regex.Match(url).ToString(); var artistMusicPage = UrlHelper.GetHttpUrlIfNeeded(artistPage + "/music"); // Retrieve artist "music" page HTML source code + var htmlCode = ""; using (var webClient = new WebClient() { Encoding = Encoding.UTF8 }) { ProxyHelper.SetProxy(webClient); From 71490361c46f6840e9f24ddcb08ed0ce1657b1e9 Mon Sep 17 00:00:00 2001 From: Otiel Date: Sun, 20 Feb 2022 17:51:18 +0100 Subject: [PATCH 3/9] feat: add logs --- src/BandcampDownloader/Core/DownloadManager.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/BandcampDownloader/Core/DownloadManager.cs b/src/BandcampDownloader/Core/DownloadManager.cs index 1a2d4d1..393c05c 100644 --- a/src/BandcampDownloader/Core/DownloadManager.cs +++ b/src/BandcampDownloader/Core/DownloadManager.cs @@ -235,6 +235,7 @@ private async Task DownloadAndTagTrackAsync(Album album, Track track, TagL // Start download try { + LogAdded(this, new LogArgs($"Downloading track \"{track.Title}\" from url: {trackMp3Url}", LogType.VerboseInfo)); await webClient.DownloadFileTaskAsync(trackMp3Url, track.Path); trackDownloaded = true; LogAdded(this, new LogArgs($"Downloaded track \"{track.Title}\" from url: {trackMp3Url}", LogType.VerboseInfo)); @@ -343,6 +344,7 @@ private async Task DownloadAndTagTrackAsync(Album album, Track track, TagL var albumArtworkUrl = UrlHelper.GetHttpUrlIfNeeded(album.ArtworkUrl); try { + LogAdded(this, new LogArgs($"Downloading artwork from url: {album.ArtworkUrl}", LogType.VerboseInfo)); await webClient.DownloadFileTaskAsync(albumArtworkUrl, album.ArtworkTempPath); artworkDownloaded = true; } @@ -472,6 +474,7 @@ private async Task> GetAlbumsAsync(List urls) try { + LogAdded(this, new LogArgs($"Downloading album info from url: {url}", LogType.VerboseInfo)); htmlCode = await webClient.DownloadStringTaskAsync(url); } catch @@ -536,6 +539,7 @@ private async Task> GetArtistDiscographyAsync(List urls) try { + LogAdded(this, new LogArgs($"Downloading album info from url: {url}", LogType.VerboseInfo)); htmlCode = await webClient.DownloadStringTaskAsync(artistMusicPage); } catch From 6e437f1ea7736cfb3e675204ae10a315e25b82b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smet=20=C3=87ak=C4=B1r?= Date: Sun, 20 Feb 2022 20:39:31 +0000 Subject: [PATCH 4/9] Translated using Weblate (Turkish) Currently translated at 100.0% (127 of 127 strings) Translation: BandcampDownloader/BandcampDownloader Translate-URL: https://hosted.weblate.org/projects/bandcampdownloader/bandcampdownloader/tr/ --- .../Properties/Resources.tr.resx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/BandcampDownloader/Properties/Resources.tr.resx b/src/BandcampDownloader/Properties/Resources.tr.resx index 3e973e1..8602ea5 100644 --- a/src/BandcampDownloader/Properties/Resources.tr.resx +++ b/src/BandcampDownloader/Properties/Resources.tr.resx @@ -1,4 +1,4 @@ - + @@ -367,13 +367,13 @@ Lütfen günlük dosyanızın içeriğinde yeni bir sorun açın. {0} - _Manuel proxy yapılandırması + _Manuel yapılandırma - Proxy _yok + Yok - _Sistemin kullandığı proxy + _Sistem Farklı kaydet @@ -474,4 +474,13 @@ Sanatçı sayfalarını yapıştırın: http://[sanatçı].bandcamp.com ve tüm Güncelleştirme + + HTTPS yerine HTTP kullanın + + + Vekil Sunucu + + + Bandcamp'e giden HTTPS trafiğiniz engellenmişse bu seçeneği kullanın. + \ No newline at end of file From 490ba9ab5453c3b794dab90991cfb6730989dcf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20R=C3=BCckert?= Date: Sun, 20 Feb 2022 19:48:46 +0000 Subject: [PATCH 5/9] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (127 of 127 strings) Translation: BandcampDownloader/BandcampDownloader Translate-URL: https://hosted.weblate.org/projects/bandcampdownloader/bandcampdownloader/pt_BR/ --- .../Properties/Resources.pt-BR.resx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/BandcampDownloader/Properties/Resources.pt-BR.resx b/src/BandcampDownloader/Properties/Resources.pt-BR.resx index 3f65f00..2d0a6f6 100644 --- a/src/BandcampDownloader/Properties/Resources.pt-BR.resx +++ b/src/BandcampDownloader/Properties/Resources.pt-BR.resx @@ -1,4 +1,4 @@ - + @@ -367,13 +367,13 @@ Abra um novo problema (issue) com o conteúdo do seu arquivo de log em {0} - Configuração _manual de proxy + Configuração _manual - _Sem proxy + _Nenhum - Proxy do s_istema + S_istema Salvar como @@ -474,4 +474,13 @@ Colar páginas de artistas: http://[artista]/.bandcamp.com e marque “☑ Baixa Atualizar + + Use esta opção se o tráfego HTTPS para o Bandcamp estiver bloqueado. + + + Proxy + + + Usar HTTP em vez de HTTPS + \ No newline at end of file From 19bcd6d2b51353ce3f3c6f093058d6e7211a35ba Mon Sep 17 00:00:00 2001 From: Otiel Date: Mon, 21 Feb 2022 21:53:31 +0100 Subject: [PATCH 6/9] fix: replace all illegal characters in paths Fixes #189 --- src/BandcampDownloader/Helpers/FileHelper.cs | 35 +++++++++----------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/BandcampDownloader/Helpers/FileHelper.cs b/src/BandcampDownloader/Helpers/FileHelper.cs index 1dc35ac..cfdf726 100644 --- a/src/BandcampDownloader/Helpers/FileHelper.cs +++ b/src/BandcampDownloader/Helpers/FileHelper.cs @@ -53,10 +53,6 @@ public static async Task GetFileSizeAsync(string url, string protocolMetho return fileSize; } - /// - /// Replaces the forbidden characters \ / : * ? " < > | from the System.String object by an underscore _ in - /// order to be used for a Windows file or folder. - /// public static string ToAllowedFileName(this string fileName) { if (fileName == null) @@ -64,21 +60,7 @@ public static string ToAllowedFileName(this string fileName) throw new ArgumentNullException(nameof(fileName)); } - // Rules are defined here: https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file - - // Replace reserved characters by '_' - fileName = fileName.Replace("\\", "_"); - fileName = fileName.Replace("/", "_"); - fileName = fileName.Replace(":", "_"); - fileName = fileName.Replace("*", "_"); - fileName = fileName.Replace("?", "_"); - fileName = fileName.Replace("\"", "_"); - fileName = fileName.Replace("<", "_"); - fileName = fileName.Replace(">", "_"); - fileName = fileName.Replace("|", "_"); - - // Replace newline by '_' - fileName = fileName.Replace(Environment.NewLine, "_"); + fileName = fileName.ReplaceInvalidPathCharacters('_'); // Remove trailing dot(s) fileName = Regex.Replace(fileName, @"\.+$", ""); @@ -91,5 +73,20 @@ public static string ToAllowedFileName(this string fileName) return fileName; } + + private static string ReplaceInvalidPathCharacters(this string path, char replaceBy) + { + foreach (var invalidCharacter in Path.GetInvalidPathChars()) + { + path = path.Replace(invalidCharacter, replaceBy); + } + + foreach (var invalidCharacter in Path.GetInvalidFileNameChars()) + { + path = path.Replace(invalidCharacter, replaceBy); + } + + return path; + } } } \ No newline at end of file From 018c724a2e5113098ceb9b0ab5249b72293f3d78 Mon Sep 17 00:00:00 2001 From: Adolf Roland Date: Sun, 27 Feb 2022 12:13:16 +0000 Subject: [PATCH 7/9] Translated using Weblate (Hungarian) Currently translated at 89.7% (114 of 127 strings) Translation: BandcampDownloader/BandcampDownloader Translate-URL: https://hosted.weblate.org/projects/bandcampdownloader/bandcampdownloader/hu/ --- .../Properties/Resources.hu.resx | 325 ++++++++++++++++-- 1 file changed, 301 insertions(+), 24 deletions(-) diff --git a/src/BandcampDownloader/Properties/Resources.hu.resx b/src/BandcampDownloader/Properties/Resources.hu.resx index 4367a44..9a1ee5a 100644 --- a/src/BandcampDownloader/Properties/Resources.hu.resx +++ b/src/BandcampDownloader/Properties/Resources.hu.resx @@ -1,4 +1,4 @@ - + @@ -59,73 +59,350 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Mappavalasztas + Mappaválasztás - _Visszavonas + _Mégse - Frissites + Frissítés - _Uj verzio letoltese + _Új verzió letöltése - _Beallitasok + _Beállítások - Beallitasok megnyitasa + Beállítások megnyitása - Alapertelmezett beallitasok alkalmazasa + Alapértelmezett beállítások alkalmazása - _Mentes + _Mentés - _Letoltes + _Letöltés - _Visszavonas + _Mégse - _Megjelenes/Tema + _Megjelenés - Kiadas + Verzió - Uj kiadas ellenorzese sikertelen + Nem sikerült az új verzió ellenőrzése. - Uj kiadas erheto el + Új verzió érhető el. - Album kiadasanak eve + Album kiadásának éve - _Visszavonas + _Mégse - Osszes letoltes visszavonasa? + Visszavonja az összes letöltést? - A frissitesek ellenorzese kozben hiba lepett fel. Kerjuk probalja ujra. + A frissítések ellenőrzése közben hiba lépett fel. Kérjük, próbálja újra később. - Aktiv letoltesek futnak a hatterben. Biztos vagy benne, hogy bezarod az alkalmazast es leallitod az osszes letoltest? + Aktív letöltések futnak a háttérben. Biztosan bezárja a programot és leállítja az összes letöltést? - Az alabbi link nem nyithato meg: + A következő link nem nyitható meg: {0} - A legfrissebb kiadast hasznalod ({0}). + Már legfrissebb verziót használja ({0}). - _Beallitasok visszaallitasa + _Beállítások visszaállítása - Beallitasok visszaallitasa alapertelmezett allapotba? + Biztosan visszaállít minden beállítást az alapértelmezett értékükre? + + + _Megtekint + + + Elnevezés és címkék + + + _Beállítások visszaállítása + + + Albumok mentése ide: + + + Szoftverhiba bejelentése + + + Névjegy + + + Letöltések + + + Segítsen a fordításban! (Help translate.) + + + _Nyelv (Language) + + + Haladó beállítások + + + (a jelentési fájl mindig részletes) + + + _Kézi beállítás + + + _Nincs + + + Használja ezt az opciót, ha blokkolt a HTTPS forgalma a Bandcamp felé. + + + Nem sikerült a changelog letöltése a következő webcímről: {0} + + + Illessze be ebbe a szövegdobozba a letölteni kívánt albumok URL-jét (webcímét). Több sorban több URL-t is megadhat. + +Egy Bandcamp-URL a következőképp néz ki: http://[előadó].bandcamp.com/album/[album] vagy http://[előadó].bandcamp.com/track/[zeneszám] + +Illesze be az előadók oldalát: http://[előadó].bandcamp.com és jelölje be a „☑ Előadó diszkográfiájának letöltése" jelölőnégyzetet, hogy az előadó összes albuma letöltésre kerüljön. + + + Készítsen lejátszási listát albumonként + + + _Nem + + + Címke törlése + + + Sötét + + + Világos + + + _Program bezárása + + + Rendszerbeállítás használata + + + Proxy + + + HTTP használata HTTPS helyett + + + Beállítások + + + Frissítés + + + Verziótörténet + + + Mentés címkébe + + + Ne módosítsa + + + Ne módosítsa + + + Címke törlése + + + Mentés másként + + + _OK + + + _Igen + + + Weboldal + + + Sorszám + + + _Cím + + + _Dalszöveg + + + Fájlnév formátuma: + + + Lejátszási lista _formátuma: + + + Néhány beállítás nem módosítható, míg a háttérben letöltés zajlik. + + + Hálózat + + + Lejátszási lista + + + Általános + + + Borítókép + + + Fájlnév formátuma: + + + _HTTP(S) proxy + + + _Port + + + Újrapróbálkozási idő (másodperc) + + + Újrapróbálkozási képviselő + + + Maximum méret (pixel) + + + Jelenlegi verzió: + + + _Maximális letöltési próbálkozások száma + + + Megjegyzések + + + Maximum méret (pixel) + + + Fájlnév formátuma: + + + _Előadó + + + Changelog + + + Changelog + + + Album _címe + + + Albumelőadó + + + Megengedett _különbség a fájlméretben (%) + + + Ezeket a beállításokat csak saját felelősségére módosítsa! + + + Jelölje ki az albumok mentési mappáját! + + + _Részletes állapotjelentés mutatása + + + Több információ mutatása a jelentésben. + + + Borítókép mentése a címkékbe. + + + Mentés mappába + + + Mentés _címkékbe + + + Borítókép letöltése az album mappájába. + + + _Fájlméret meghatározása a zeneszámok letöltése előtt + + + _Egyszerre csak egy album letöltése + + + _Zeneszámok címkéjének módosítása (ID3) + + + Bővített formátum használata (csak M3U esetében) + + + Értesítési hangok lejátszása + + + Az előadó teljes diszkográfiájának letöltése. + + + Értesítési hang lejátszása, ha elkészül egy letöltés. + + + Előadó diszkográfiájának letöltése + + + Minden letöltött albumhoz készít egy lejátszási lista-fájlt. + + + A borítóképet a meghatározott maximális szélességre/magasságra méretezi át. + + + Korlátozza a maximum szélességet/magasságot + + + A borítóképet JPG-formátumba konvertálja 90-es tömörítési szinten (tökéletes egyensúly a fájlméret és minőség között). + + + Konvertálás JPG-be + + + A borítóképet a meghatározott maximális szélességre/magasságra méretezi át. + + + Korlátozza a maximum szélességet/magasságot + + + A borítóképet JPG-formátumba konvertálja 90-es tömörítési szinten (tökéletes egyensúly a fájlméret és minőség között). + + + Konvertálás JPG-be + + + A program indításakor felkeresi a következő webcímet: + + + Frissítések ellenőrzése indításkor + + + \ No newline at end of file From 91251f2a5c40d8955ec16cff0ad8690aaa861259 Mon Sep 17 00:00:00 2001 From: Otiel Date: Mon, 28 Feb 2022 19:30:29 +0100 Subject: [PATCH 8/9] chore: add 1.4.1 to CHANGELOG --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b132b9..3adcd2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# 1.4.1 + +## Improvements + +* Added / updated translations thanks to contributors. [#203](https://github.com/Otiel/BandcampDownloader/pull/203) [#205](https://github.com/Otiel/BandcampDownloader/pull/205) + +## Bug fixes + +* Fixed an issue when trying to download tracks containing special characters in their title. [#189](https://github.com/Otiel/BandcampDownloader/issues/189) + # 1.4.0 ## New features From 04d413c906e151a5995027c4776cfd06910a9dbd Mon Sep 17 00:00:00 2001 From: Otiel Date: Mon, 28 Feb 2022 19:31:14 +0100 Subject: [PATCH 9/9] chore: bump assembly version to 1.4.1 --- src/BandcampDownloader/Properties/AssemblyInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BandcampDownloader/Properties/AssemblyInfo.cs b/src/BandcampDownloader/Properties/AssemblyInfo.cs index 965624a..39a822f 100644 --- a/src/BandcampDownloader/Properties/AssemblyInfo.cs +++ b/src/BandcampDownloader/Properties/AssemblyInfo.cs @@ -47,6 +47,6 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.4.0")] -[assembly: AssemblyFileVersion("1.4.0")] +[assembly: AssemblyVersion("1.4.1")] +[assembly: AssemblyFileVersion("1.4.1")] [assembly: GuidAttribute("8C171C7F-9BAC-4EC0-A287-59908B48953F")] \ No newline at end of file