diff --git a/.vs/Crunchyroll Downloader/v15/.suo b/.vs/Crunchyroll Downloader/v15/.suo index e9b9a11..930eef1 100644 Binary files a/.vs/Crunchyroll Downloader/v15/.suo and b/.vs/Crunchyroll Downloader/v15/.suo differ diff --git a/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide b/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide index dfda076..3084c40 100644 Binary files a/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide and b/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide differ diff --git a/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-shm b/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-shm index c42ff7a..2cb35a8 100644 Binary files a/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-shm and b/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-shm differ diff --git a/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-wal b/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-wal index 6c42b42..4ad9f0f 100644 Binary files a/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-wal and b/.vs/Crunchyroll Downloader/v15/Server/sqlite3/storage.ide-wal differ diff --git a/Crunchyroll Downloader/Anime_Add.vb b/Crunchyroll Downloader/Anime_Add.vb index 7ea6106..fa3a33a 100644 --- a/Crunchyroll Downloader/Anime_Add.vb +++ b/Crunchyroll Downloader/Anime_Add.vb @@ -186,7 +186,15 @@ Public Class Anime_Add If CBool(InStr(textBox1.Text, "crunchyroll.com")) Or CBool(InStr(textBox1.Text, "funimation.com")) Then 'Or CBool(InStr(textBox1.Text, "anime-on-demand.de")) Then #Region "Funimation url parameter" - If InStr(textBox1.Text, "funimation.com") Then + If CBool(InStr(textBox1.Text, "funimation.com")) Then + Main.WebbrowserURL = textBox1.Text + If CBool(InStr(Main.FunimationAPIRegion, "?region=")) And CBool(InStr(textBox1.Text, "/shows/")) Then + + ProcessFunimationJS(textBox1.Text) + + Exit Sub + End If + If Main.DubFunimation = "Disabled" Then Else If InStr(textBox1.Text, "?lang=") Then @@ -289,7 +297,7 @@ Public Class Anime_Add 'MsgBox(Main.URL_Invaild, MsgBoxStyle.OkOnly) End If Catch ex As Exception - 'MsgBox(ex.ToString) + MsgBox(ex.ToString) Main.b = True MsgBox(Main.URL_Invaild, MsgBoxStyle.OkOnly) End Try @@ -304,6 +312,19 @@ Public Class Anime_Add Main.b = True groupBox1.Visible = True pictureBox4.Image = My.Resources.main_button_download_default + ElseIf CBool(InStr(Main.WebbrowserURL, "funimation.com")) = True Then + + + StatusLabel.Text = "Status: idle" + pictureBox4.Image = My.Resources.add_mass_running_cancel + Mass_DL_Cancel = True + PictureBox1.Enabled = False + PictureBox1.Visible = False + Main.DownloadFunimationJS_Seasons() + comboBox4.Enabled = False + comboBox3.Enabled = False + ComboBox1.Enabled = False + ElseIf CBool(InStr(Main.WebbrowserURL, "beta.crunchyroll.com")) = True Then StatusLabel.Text = "Status: idle" @@ -364,7 +385,7 @@ Public Class Anime_Add End If ElseIf GroupBox3.Visible = True Then - GroupBox3.Visible = False + GroupBox3.Visible = False groupBox2.Visible = False groupBox1.Visible = True List_DL_Cancel = False @@ -374,6 +395,44 @@ Public Class Anime_Add pictureBox4.Enabled = True End Sub + Public Sub ProcessFunimationJS(ByVal InputURL As String) + + + Dim FunUri As String = Nothing + If InStr(InputURL, "?") Then + Dim ClearUri As String() = InputURL.Split(New String() {"?"}, System.StringSplitOptions.RemoveEmptyEntries) + FunUri = ClearUri(0) + Else + FunUri = InputURL + End If + Dim ShowPath As String = Nothing + Dim EpisodePath As String = Nothing + Dim ShowPath1 As String() = FunUri.Split(New String() {"/shows/"}, System.StringSplitOptions.RemoveEmptyEntries) + 'If InStr(ShowPath1(1), "/") Then + Dim ShowPath2 As String() = ShowPath1(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + + If ShowPath2.Count > 1 Then + + ShowPath = ShowPath2(0) + EpisodePath = ShowPath2(1) + Else + ShowPath = ShowPath1(1) + End If + Main.FunimationShowPath = ShowPath + If EpisodePath = Nothing Then 'overview site + Main.GetFunimationJS_Seasons("https://title-api.prd.funimationsvc.com/v2/shows/" + ShowPath + Main.FunimationAPIRegion) + + Else 'single episode + + + End If + + Dim FunimationCC As String() = ShowPath1(0).Split(New String() {"funimation.com"}, System.StringSplitOptions.RemoveEmptyEntries) + If FunimationCC.Count > 1 Then + Main.FunimationRegion = FunimationCC(1).Replace("/", "") + End If + End Sub + Public Sub ProcessAoD() AoD_DubList.Clear() @@ -531,11 +590,13 @@ Public Class Anime_Add comboBox4.Items.Clear() comboBox3.Enabled = True comboBox4.Enabled = True + comboBox3.Text = Nothing + comboBox4.Text = Nothing Dim SeasonSplit() As String = Main.CrBetaMass.Split(New String() {Chr(34) + "id" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) Dim SeasonSplit2() As String = SeasonSplit(ComboBox1.SelectedIndex + 1).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) - Dim EpisodeJsonURL As String = "https://beta-api.crunchyroll.com/cms/v2/DE/M3/crunchyroll/episodes?season_id=" + SeasonSplit2(0) + "&locale=" + Main.CrBetaMassParameters + Dim EpisodeJsonURL As String = Main.CrBetaMassBaseURL + "episodes?season_id=" + SeasonSplit2(0) + "&locale=" + Main.CrBetaMassParameters Dim EpisodeJson As String = Nothing Debug.WriteLine(EpisodeJsonURL) @@ -553,14 +614,70 @@ Public Class Anime_Add + Dim EpisodeNameSplit() As String = EpisodeJson.Split(New String() {Chr(34) + "title" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim EpisodeSplit() As String = EpisodeJson.Split(New String() {Chr(34) + "episode" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + For i As Integer = 1 To EpisodeSplit.Count - 1 + Dim EpisodeSplit2() As String = EpisodeSplit(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim EpisodeNameSplit2() As String = EpisodeNameSplit(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + If EpisodeSplit(i).Substring(0, 1) = Chr(34) Then + comboBox3.Items.Add(EpisodeNameSplit2(0)) + comboBox4.Items.Add(EpisodeNameSplit2(0)) + Else + comboBox3.Items.Add("Episode " + EpisodeSplit2(0)) + comboBox4.Items.Add("Episode " + EpisodeSplit2(0)) + End If + + Next + ElseIf main.WebbrowserURL = "funimation.com/js" Then + + 'MsgBox(Main.FunimtaionAPISeasonID.Item(ComboBox1.SelectedIndex)) + + comboBox3.Items.Clear() + comboBox4.Items.Clear() + comboBox3.Enabled = True + comboBox4.Enabled = True + comboBox3.Text = Nothing + comboBox4.Text = Nothing + + 'Dim SeasonSplit() As String = Main.CrBetaMass.Split(New String() {Chr(34) + "id" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + + 'Dim SeasonSplit2() As String = SeasonSplit(ComboBox1.SelectedIndex + 1).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + ' + 'https://title-api.prd.funimationsvc.com/v1/seasons/1007609?region=US&deviceType=web + + + Dim EpisodeJsonURL As String = "https://title-api.prd.funimationsvc.com/v1/seasons/" + Main.FunimtaionAPISeasonID.Item(ComboBox1.SelectedIndex) + Main.FunimationAPIRegion + Dim EpisodeJson As String = Nothing + Debug.WriteLine(EpisodeJsonURL) + + Try + Using client As New WebClient() + client.Encoding = System.Text.Encoding.UTF8 + client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) + EpisodeJson = client.DownloadString(EpisodeJsonURL) + End Using + Catch ex As Exception + Debug.WriteLine("error- getting EpisodeJson data") + Exit Sub + End Try + + Main.FunimationEpisodeJSON = EpisodeJson + + + + + Dim EpisodeSplit() As String = EpisodeJson.Split(New String() {Chr(34) + "episodeNumber" + Chr(34) + ": " + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) For i As Integer = 1 To EpisodeSplit.Count - 1 Dim EpisodeSplit2() As String = EpisodeSplit(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) comboBox3.Items.Add("Episode " + EpisodeSplit2(0)) comboBox4.Items.Add("Episode " + EpisodeSplit2(0)) Next + + + ElseIf AoD_Mode = False Then 'MsgBox(Main.WebbrowserURL) @@ -1406,4 +1523,6 @@ Public Class Anime_Add Main.SubsOnly = True End If End Sub + + End Class \ No newline at end of file diff --git a/Crunchyroll Downloader/ErrorDialog.vb b/Crunchyroll Downloader/ErrorDialog.vb index 63b0c2f..dee11bb 100644 --- a/Crunchyroll Downloader/ErrorDialog.vb +++ b/Crunchyroll Downloader/ErrorDialog.vb @@ -27,6 +27,21 @@ Public Class ErrorDialog ComboBox1.Items.Add(langsplit(0)) Next SurroundingSub() + ElseIf Main.DialogTaskString = "Language_CR_Beta" Then + 'CheckBox1.Visible = False + StatusLabel.Text = Main.LabelLangNotFoundText + + Dim lang_avalibe As String() = Main.ResoNotFoundString.Split(New String() {"hardsub_locale" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + + For i As Integer = 1 To lang_avalibe.Count - 1 + If lang_avalibe(i).Substring(0, 1) = Chr(34) Then + ComboBox1.Items.Add("No Hardsubs") + Continue For 'Chr(34) + + End If + Dim langsplit As String() = lang_avalibe(i).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) + ComboBox1.Items.Add(Main.HardSubValuesToDisplay(langsplit(0))) + Next + SurroundingSub() ElseIf Main.DialogTaskString = "Resolution" Then StatusLabel.Text = Main.LabelResoNotFoundText Dim Reso_avaible1 As String() = Main.ResoNotFoundString.Split(New String() {"RESOLUTION="}, System.StringSplitOptions.RemoveEmptyEntries) @@ -126,12 +141,49 @@ Public Class ErrorDialog Private Sub PictureBox9_Click(sender As Object, e As EventArgs) Handles PictureBox9.Click If ComboBox1.SelectedItem.ToString = Nothing Then Else - Main.ResoBackString = ComboBox1.SelectedItem.ToString - Main.UserCloseDialog = False - Me.Close() + If Main.DialogTaskString = "Language_CR_Beta" Then + Main.ResoBackString = DisplayToHardSubValues(ComboBox1.SelectedItem.ToString) + Main.UserCloseDialog = False + Me.Close() + Else + Main.ResoBackString = ComboBox1.SelectedItem.ToString + Main.UserCloseDialog = False + Me.Close() + End If End If End Sub + Public Function DisplayToHardSubValues(ByVal HardSub As String) As String + Try + If HardSub = "Deutsch" Then + Return "de-DE" + ElseIf HardSub = "English" Then + Return "en-US" + ElseIf HardSub = "Português (Brasil)" Then + Return "pt-BR" + ElseIf HardSub = "Español (LA)" Then + Return "es-LA" + ElseIf HardSub = "Français (France)" Then + Return "fr-FR" + ElseIf HardSub = "العربية (Arabic)" Then + Return "ar-ME" + ElseIf HardSub = "Русский (Russian)" Then + Return "ru-RU" + ElseIf HardSub = "Italiano (Italian)" Then + Return "it-IT" + ElseIf HardSub = "Español (España)" Then + Return "es-ES" + Else + + Return Nothing + End If + + Catch ex As Exception + Return Nothing + End Try + + End Function + Private Sub PictureBox9_MouseEnter(sender As Object, e As EventArgs) Handles PictureBox9.MouseEnter PictureBox9.Image = My.Resources.DialogNotFound_Submit_hover End Sub diff --git a/Crunchyroll Downloader/GeckoFX.vb b/Crunchyroll Downloader/GeckoFX.vb index 212da39..60d2065 100644 --- a/Crunchyroll Downloader/GeckoFX.vb +++ b/Crunchyroll Downloader/GeckoFX.vb @@ -67,7 +67,8 @@ Public Class GeckoFX End Try End If - ElseIf Main.LoginOnly = "US_UnBlock_Finsihed" And Main.UserBowser = False Then + ElseIf Main.LoginOnly = "US_UnBlock_Finsihed" Then + Main.LoginOnly = "ClosedAfterUS_UnBlock" Main.UserBowser = False Me.Close() Else @@ -438,7 +439,13 @@ Public Class GeckoFX Private Sub ObserveHttpModifyRequest(sender As Object, e As GeckoObserveHttpModifyRequestEventArgs) Handles WebBrowser1.ObserveHttpModifyRequest - Dim requesturl As String = e.Channel.Uri.ToString() + Dim requesturl As String = Nothing + Try + requesturl = e.Channel.Uri.ToString() + Catch ex As Exception + Exit Sub + End Try + Dim url As New Uri(requesturl) If Main.BlockList.Contains(url.Host) Then @@ -469,9 +476,22 @@ Public Class GeckoFX End If End If - 'If CBool(InStr(requesturl, "https://beta-api.crunchyroll.com/")) And CBool(InStr(requesturl, "episodes?")) Then - ' Debug.WriteLine(requesturl) - 'End If + + If CBool(InStr(requesturl, "https://title-api.prd.funimationsvc.com")) And CBool(InStr(requesturl, "?region=")) Then + Dim parms As String() = requesturl.Split(New String() {"?region="}, System.StringSplitOptions.RemoveEmptyEntries) + Main.FunimationAPIRegion = "?region=" + parms(1) + If Main.b = False Then + If CBool(InStr(requesturl, "https://title-api.prd.funimationsvc.com/v1/show")) And CBool(InStr(requesturl, "/episodes/")) Then + + Else + MsgBox(Main.WebbrowserURL) + Anime_Add.ProcessFunimationJS(Main.WebbrowserURL) + Main.b = True + End If + + + End If + End If If ScanTrue = True Then If InStr(requesturl, ".m3u8") Then diff --git a/Crunchyroll Downloader/Main.resx b/Crunchyroll Downloader/Main.resx index 3a05292..a7e4bab 100644 --- a/Crunchyroll Downloader/Main.resx +++ b/Crunchyroll Downloader/Main.resx @@ -231,12 +231,6 @@ 8 - - Link - - - 818 - Microsoft Sans Serif, 93pt @@ -267,6 +261,12 @@ 4 + + Link + + + 818 + Stretch @@ -378,31 +378,6 @@ 842, 630 - - None - - - - iVBORw0KGgoAAAANSUhEUgAAABoAAAAhCAYAAADH97ugAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAAd0SU1FB+QMDQ03N1b5UIAAAAApSURBVEhL7cyxCQAwDASx339pZ4EUcTC4keDa - CwDMqs/abpOXAGBZcgDKSBvlblfsRgAAAABJRU5ErkJggg== - - - - 764, 8 - - - 0, 0, 0, 0 - - - 25, 25 - - - Zoom - - - 71 - Btn_min @@ -481,6 +456,43 @@ MetroFramework.Forms.MetroForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + None + + + + iVBORw0KGgoAAAANSUhEUgAAABoAAAAhCAYAAADH97ugAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAAd0SU1FB+QMDQ03N1b5UIAAAAApSURBVEhL7cyxCQAwDASx339pZ4EUcTC4keDa + CwDMqs/abpOXAGBZcgDKSBvlblfsRgAAAABJRU5ErkJggg== + + + + 764, 8 + + + 0, 0, 0, 0 + + + 25, 25 + + + Zoom + + + 71 + + + Btn_min + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + 714, 17 diff --git a/Crunchyroll Downloader/Main.vb b/Crunchyroll Downloader/Main.vb index c7a150d..ee29ca1 100644 --- a/Crunchyroll Downloader/Main.vb +++ b/Crunchyroll Downloader/Main.vb @@ -19,15 +19,24 @@ Public Class Main Public CrBetaMass As String = Nothing Public CrBetaMassEpisodes As String = Nothing Public CrBetaMassParameters As String = Nothing + Public CrBetaMassBaseURL As String = Nothing Public BlockList As List(Of String) + + Public FunimationAPIRegion As String = Nothing + Public FunimationRegion As String = Nothing + Public FunimationShowPath As String = Nothing + Public FunimationEpisodeJSON As String = Nothing + Public FunimtaionAPISeasonID As New List(Of String) + + Public Manager As New MetroStyleManager Public DarkModeValue As Boolean = False Public invalids As Char() = System.IO.Path.GetInvalidFileNameChars() Dim ServerThread As Thread - + Public KodiNaming As Boolean = False Public ErrorTolerance As Integer = 0 Public liList As New List(Of String) Public HTMLString As String = My.Resources.Startuphtml @@ -120,7 +129,7 @@ Public Class Main Dim DL_Path_String As String = "Please choose download directory." Public No_Stream As String = "Please make sure that the URL is correct or check if the Anime is available in your country." Dim TaskNotCompleed As String = "Please wait until the current task is completed." - Dim Premium_Stream As String = "Please make sure that you logged in for this premium episode." + Dim Premium_Stream As String = "For Premium episodes you need a premium membership and be logged in the Downloader." Public LoginReminder As String = "Please make sure that you logged in." Dim Error_Mass_DL As String = "We run into a problem here." + vbNewLine + "You can try to download every episode individually." @@ -427,7 +436,13 @@ Public Class Main Catch ex As Exception End Try + Try + Dim rkg As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\CRDownloader") + KodiNaming = CBool(Integer.Parse(rkg.GetValue("KodiSupport").ToString)) + Catch ex As Exception + + End Try Try Dim rkg As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\CRDownloader") ffmpeg_command = rkg.GetValue("ffmpeg_command").ToString @@ -1089,25 +1104,25 @@ Public Class Main Public Function CCtoMP4CC(ByVal HardSub As String) As String Try - If HardSub = "deDE" Then + If HardSub = "deDE" Or HardSub = "de-DE" Then Return "ger" - ElseIf HardSub = "enUS" Or HardSub = "en" Then + ElseIf HardSub = "enUS" Or HardSub = "en-US" Or HardSub = "en" Then Return "eng" - ElseIf HardSub = "ptBR" Or HardSub = "pt" Then + ElseIf HardSub = "ptBR" Or HardSub = "pt-BR" Or HardSub = "pt" Then Return "por" - ElseIf HardSub = "esLA" Or HardSub = "es" Then + ElseIf HardSub = "esLA" Or HardSub = "es-LA" Or HardSub = "es" Then Return "spa" - ElseIf HardSub = "frFR" Then + ElseIf HardSub = "frFR" Or HardSub = "fr-FR" Then Return "fre" - ElseIf HardSub = "arME" Then + ElseIf HardSub = "arME" Or HardSub = "ar-ME" Then Return "ara" - ElseIf HardSub = "ruRU" Then + ElseIf HardSub = "ruRU" Or HardSub = "ru-RU" Then Return "rus" - ElseIf HardSub = "itIT" Then + ElseIf HardSub = "itIT" Or HardSub = "it-IT" Then Return "ita" - ElseIf HardSub = "esES" Then + ElseIf HardSub = "esES" Or HardSub = "es-ES" Then Return "spa" - ElseIf HardSub = "jaJP" Then + ElseIf HardSub = "jaJP" Or HardSub = "ja-JP" Then Return "jpn" Else Return "chi" @@ -1184,6 +1199,7 @@ Public Class Main Dim CR_Episode_1 As String() = WebbrowserText.Split(New String() {My.Resources.CR_Episode_Nr}, System.StringSplitOptions.RemoveEmptyEntries) Dim CR_Episode_2 As String() = CR_Episode_1(1).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) CR_Anime_Folge_int = String.Join(" ", CR_Episode_2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) 'System.Text.RegularExpressions.Regex.Replace(CR_Name_2(0), "[^\w\\-]", " ") + CR_Anime_Folge_int = RemoveExtraSpaces(CR_Anime_Folge_int) Dim CleanedNumber As String = Nothing @@ -1197,6 +1213,7 @@ Public Class Main CleanedNumber = CleanedNumber + "." End If Next + If CleanedNumber = Nothing Then ElseIf InStr(CleanedNumber, ".") Then @@ -1207,10 +1224,13 @@ Public Class Main End If ElseIf Integer.Parse(CleanedNumber) < 10 Then CR_Anime_Folge_int = "0" + CleanedNumber - End If End If - End If + If InStr(CR_Anime_Folge_int, ",") Then + CR_Anime_Folge_int = CR_Anime_Folge_int.Replace(",", ".") + End If + + End If If CBool(InStr(WebbrowserHeadText, My.Resources.CR_Season_Nr)) Then If CBool(InStr(WebbrowserHeadText, My.Resources.CR_Season_Nr + Chr(34))) Then @@ -1279,7 +1299,17 @@ Public Class Main End If End If - + If KodiNaming = True Then + Dim KodiString As String = "[S" + If CR_Anime_Staffel_int = "0" Then + CR_Anime_Staffel_int = "01" + Else + CR_Anime_Staffel_int = "0" + CR_Anime_Staffel_int + End If + KodiString = KodiString + CR_Anime_Staffel_int + " E" + CR_Anime_Folge_int + KodiString = KodiString + "] " + CR_FilenName = KodiString + CR_FilenName + End If 'MsgBox(CR_FilenName) @@ -1681,15 +1711,12 @@ Public Class Main Dim First As Integer = 0 Dim Last As Integer = 0 - If Anime_Add.comboBox4.SelectedIndex > Anime_Add.comboBox3.SelectedIndex Then + If Anime_Add.comboBox4.SelectedIndex > Anime_Add.comboBox3.SelectedIndex Or Anime_Add.comboBox4.SelectedIndex = Anime_Add.comboBox3.SelectedIndex Then First = Anime_Add.comboBox3.SelectedIndex Last = Anime_Add.comboBox4.SelectedIndex - ElseIf Anime_Add.comboBox4.SelectedIndex = Anime_Add.comboBox3.SelectedIndex Then - - Exit Sub - Else + ElseIf Anime_Add.comboBox3.SelectedIndex > Anime_Add.comboBox4.SelectedIndex Then First = Anime_Add.comboBox4.SelectedIndex - Last = Anime_Add.comboBox4.SelectedIndex + Last = Anime_Add.comboBox3.SelectedIndex End If @@ -1746,18 +1773,18 @@ Public Class Main Catch ex As Exception If Debug2 = True Then - MsgBox(ex.ToString) - End If - Anime_Add.comboBox4.Items.Clear() - Anime_Add.comboBox3.Items.Clear() - Aktuell = 0.ToString - Gesamt = 0.ToString + MsgBox(ex.ToString) + End If + Anime_Add.comboBox4.Items.Clear() + Anime_Add.comboBox3.Items.Clear() + Aktuell = 0.ToString + Gesamt = 0.ToString - Anime_Add.groupBox1.Visible = True - Anime_Add.groupBox2.Visible = False - Anime_Add.GroupBox3.Visible = False - Anime_Add.Mass_DL_Cancel = False - Anime_Add.pictureBox4.Image = My.Resources.main_button_download_default + Anime_Add.groupBox1.Visible = True + Anime_Add.groupBox2.Visible = False + Anime_Add.GroupBox3.Visible = False + Anime_Add.Mass_DL_Cancel = False + Anime_Add.pictureBox4.Image = My.Resources.main_button_download_default End Try Pause(5) Anime_Add.groupBox1.Visible = True @@ -1767,7 +1794,7 @@ Public Class Main Anime_Add.pictureBox4.Image = My.Resources.main_button_download_default End Sub Public Sub GetBetaSeasons(ByVal JsonUrl As String) - + 'MsgBox(JsonUrl) Anime_Add.groupBox2.Visible = True Anime_Add.PictureBox1.Enabled = True Anime_Add.PictureBox1.Visible = True @@ -1791,6 +1818,7 @@ Public Class Main SeasonJson = client.DownloadString(JsonUrl) End Using Catch ex As Exception + Debug.WriteLine("error- getting SeasonJson data") End Try Dim ParameterSplit() As String = JsonUrl.Split(New String() {"&locale="}, System.StringSplitOptions.RemoveEmptyEntries) @@ -1798,6 +1826,10 @@ Public Class Main CrBetaMassParameters = ParameterSplit(1) CrBetaMass = SeasonJson + Dim BaseURLBuilder() As String = JsonUrl.Split(New String() {"seasons?"}, System.StringSplitOptions.RemoveEmptyEntries) + CrBetaMassBaseURL = BaseURLBuilder(0) + + Dim SeasonSplit() As String = SeasonJson.Split(New String() {Chr(34) + "title" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) For i As Integer = 1 To SeasonSplit.Count - 1 Dim SeasonSplit2() As String = SeasonSplit(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) @@ -1832,28 +1864,32 @@ Public Class Main Return Nothing End Function)) #Region "Name von Crunchyroll" + + Dim ObjectsURLBuilder() As String = Streams.Split(New String() {"videos"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder2() As String = ObjectsURLBuilder(1).Split(New String() {"/streams"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder3() As String = WebsiteURL.Split(New String() {"watch/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder4() As String = ObjectsURLBuilder3(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + + Dim ObjectsURL As String = ObjectsURLBuilder(0) + "objects/" + ObjectsURLBuilder4(0) + ObjectsURLBuilder2(1) + + Debug.WriteLine(ObjectsURL) + + Try + Using client As New WebClient() + client.Encoding = System.Text.Encoding.UTF8 + client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) + ObjectJson = client.DownloadString(ObjectsURL) + End Using + Catch ex As Exception + Debug.WriteLine("error- getting name data") + Exit Sub + End Try + + If TextBox2_Text = Nothing Or TextBox2_Text = "Name of the Anime" Then - Dim ObjectsURLBuilder() As String = Streams.Split(New String() {"videos"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ObjectsURLBuilder2() As String = ObjectsURLBuilder(1).Split(New String() {"/streams"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ObjectsURLBuilder3() As String = WebsiteURL.Split(New String() {"watch/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ObjectsURLBuilder4() As String = ObjectsURLBuilder3(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ObjectsURL As String = ObjectsURLBuilder(0) + "objects/" + ObjectsURLBuilder4(0) + ObjectsURLBuilder2(1) - Debug.WriteLine(ObjectsURL) - - Try - Using client As New WebClient() - client.Encoding = System.Text.Encoding.UTF8 - client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) - ObjectJson = client.DownloadString(ObjectsURL) - End Using - Catch ex As Exception - Debug.WriteLine("error- getting name data") - Exit Sub - End Try - - My.Computer.Clipboard.SetText(ObjectJson) + 'My.Computer.Clipboard.SetText(ObjectJson) If CBool(InStr(ObjectJson, Chr(34) + "title")) Then ' false on movie true on series Dim CR_Name_1 As String() = ObjectJson.Split(New String() {Chr(34) + "title" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) @@ -1895,9 +1931,9 @@ Public Class Main CR_season_number = CR_season_title + "Season " + CR_season_number End If CR_season_number = CR_season_title - Else + Else - CR_season_number = Season_Prefix + CR_season_number + CR_season_number = Season_Prefix + CR_season_number End If @@ -1996,7 +2032,8 @@ Public Class Main MsgBox("No download stream avalible", MsgBoxStyle.Critical) Exit Sub End If - + 'My.Computer.Clipboard.SetText(VideoJson) + 'MsgBox(SubSprache) Dim LangNew As String = ConvertCC(SubSprache) @@ -2097,6 +2134,7 @@ Public Class Main Dim CR_VideoJsonHardSubs As String() = CR_VideoJson(1).Split(New String() {"hardsub_locale" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) Debug.WriteLine(LangNew) + Debug.WriteLine(CR_VideoJsonHardSubs.Count.ToString) Dim hls_List As New List(Of String) For i As Integer = 0 To CR_VideoJsonHardSubs.Count - 1 If InStr(CR_VideoJsonHardSubs(i), LangNew + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34)) Then @@ -2104,18 +2142,40 @@ Public Class Main Exit For End If Next + + If CR_URI_Master = Nothing Then + Me.Invoke(New Action(Function() + ResoNotFoundString = VideoJson + DialogTaskString = "Language_CR_Beta" + ErrorDialog.ShowDialog() + Return Nothing + End Function)) + If UserCloseDialog = True Then + Throw New System.Exception(Chr(34) + "UserAbort" + Chr(34)) + Else + LangNew = ResoBackString + ResoBackString = Nothing + For i As Integer = 0 To CR_VideoJsonHardSubs.Count - 1 + If InStr(CR_VideoJsonHardSubs(i), LangNew + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34)) Then + CR_URI_Master = CR_VideoJsonHardSubs(i).Replace(LangNew + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34), "").Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)(0) + Exit For + End If + Next + End If + End If + CR_URI_Master = CR_URI_Master.Replace("&", "&").Replace("/u0026", "&").Replace("\u002F", "/").Replace("\u0026", "&") If CBool(InStr(CR_URI_Master, "master.m3u8")) Then - Me.Invoke(New Action(Function() - Anime_Add.StatusLabel.Text = "Status: m3u8 found, looking for resolution" - Me.Text = "Status: m3u8 found, looking for resolution" - Me.Invalidate() - Return Nothing - End Function)) - Else - Throw New System.Exception("Premium Episode") - End If + Me.Invoke(New Action(Function() + Anime_Add.StatusLabel.Text = "Status: m3u8 found, looking for resolution" + Me.Text = "Status: m3u8 found, looking for resolution" + Me.Invalidate() + Return Nothing + End Function)) + Else + Throw New System.Exception("Premium Episode") + End If 'Else ' Me.Invoke(New Action(Function() ' Anime_Add.StatusLabel.Text = "Status: Substitles only mode - skipped video" @@ -2130,7 +2190,7 @@ Public Class Main #Region "lösche doppel download" Dim Pfad5 As String = Pfad2.Replace(Chr(34), "") - If My.Computer.FileSystem.FileExists(Pfad5) Then 'Pfad = Kompeltter Pfad mit Dateinamen + ENdung + If My.Computer.FileSystem.FileExists(Pfad5) And SubsOnly = False Then 'Pfad = Kompeltter Pfad mit Dateinamen + ENdung Me.Invoke(New Action(Function() Anime_Add.StatusLabel.Text = "Status: The file video already exists." @@ -2154,10 +2214,10 @@ Public Class Main If Reso = 42 And HybridMode = False Then If MergeSubs = True Then - URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(ConvertCC(CR_audio_locale)) - 'URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(ConvertCC(CR_audio_locale)) + " " + ffmpeg_command + URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + 'URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command Else - URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(ConvertCC(CR_audio_locale)) + " " + ffmpeg_command + URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command End If 'MsgBox(URL_DL) Else @@ -2199,14 +2259,15 @@ Public Class Main Dim ffmpeg_url_3 As String() = Nothing Dim ffmpeg_url_2 As String() = ffmpeg_url_1(1).Split(New [Char]() {Chr(34)}) ffmpeg_url_3 = ffmpeg_url_2(2).Split(New [Char]() {System.Convert.ToChar("#")}) - + Debug.WriteLine(CR_audio_locale) If MergeSubs = True Then + Debug.WriteLine(ConvertCC(CR_audio_locale)) - URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(ConvertCC(CR_audio_locale)) + URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) 'URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command Else - URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(ConvertCC(CR_audio_locale)) + " " + ffmpeg_command + URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command End If End If @@ -2295,8 +2356,8 @@ Public Class Main Try If CC = "deDE" Then Return "de-DE" - ElseIf CC = "en-US" Then - Return "enUS" + ElseIf CC = "enUS" Then + Return "en-US" ElseIf CC = "ptBR" Then Return "pt-BR" ElseIf CC = "esLA" Then @@ -2310,7 +2371,7 @@ Public Class Main ElseIf CC = "itIT" Then Return "it-IT" ElseIf CC = "esES" Then - Return "Español (España)" + Return "es-ES" ElseIf CC = "jaJP" Then Return "ja-JP" ElseIf CC = "None" Then @@ -3335,6 +3396,653 @@ Public Class Main Funimation_Grapp_RDY = True End Sub +#Region "Funimation JS " + + + Public Sub GetFunimationJS_Seasons(ByVal JsonUrl As String) + + Anime_Add.groupBox2.Visible = True + Anime_Add.PictureBox1.Enabled = True + Anime_Add.PictureBox1.Visible = True + Anime_Add.groupBox1.Visible = False + Anime_Add.ComboBox1.Items.Clear() + Anime_Add.comboBox3.Items.Clear() + Anime_Add.comboBox4.Items.Clear() + Anime_Add.ComboBox1.Text = Nothing + Anime_Add.comboBox3.Text = Nothing + Anime_Add.comboBox4.Text = Nothing + Anime_Add.ComboBox1.Enabled = True + Anime_Add.comboBox3.Enabled = True + Anime_Add.comboBox4.Enabled = True + + Dim SeasonJson As String = Nothing + + Try + Using client As New WebClient() + client.Encoding = System.Text.Encoding.UTF8 + client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) + SeasonJson = client.DownloadString(JsonUrl) + End Using + Catch ex As Exception + Debug.WriteLine("error- getting SeasonJson data") + End Try + + + + Dim SeasonSplit() As String = SeasonJson.Split(New String() {Chr(34) + "seasons" + Chr(34) + ":"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim SeasonSplit2() As String = SeasonSplit(1).Split(New String() {Chr(34) + "name" + Chr(34) + ": " + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + + For i As Integer = 1 To SeasonSplit2.Count - 1 + Dim SeasonSplit3() As String = SeasonSplit2(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Anime_Add.ComboBox1.Items.Add(SeasonSplit3(0)) + Next + + Dim SeasonIDSplit() As String = SeasonSplit(1).Split(New String() {Chr(34) + "id" + Chr(34) + ": "}, System.StringSplitOptions.RemoveEmptyEntries) + + For i As Integer = 1 To SeasonSplit2.Count - 1 + Dim SeasonIDSplit2() As String = SeasonIDSplit(i).Split(New String() {","}, System.StringSplitOptions.RemoveEmptyEntries) + 'Anime_Add.ComboBox1.Items.Add(SeasonIDSplit2(0)) + FunimtaionAPISeasonID.Add(SeasonIDSplit2(0)) + Next + + WebbrowserURL = "funimation.com/js" + + End Sub + + + Public Async Sub DownloadFunimationJS_Seasons() + Try + Dim ListOfEpisodes As New List(Of String) + Dim BaseURL As String = "https://www.funimation.com/shows/" + If FunimationRegion IsNot Nothing Then + + BaseURL = "https://www.funimation.com/" + FunimationRegion + "/shows/" + End If + Dim EpisodeSplit() As String = FunimationEpisodeJSON.Split(New String() {Chr(34) + "slug" + Chr(34) + ": " + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + + For i As Integer = 1 To EpisodeSplit.Count - 1 + Dim EpisodeSplit2() As String = EpisodeSplit(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + ' ListOfEpisodes.Add("https://title-api.prd.funimationsvc.com/v1/shows/" + FunimationShowPath + "/episodes/" + EpisodeSplit2(0) + FunimationAPIRegion) + ListOfEpisodes.Add(BaseURL + FunimationShowPath + EpisodeSplit2(0)) '+ FunimationAPIRegion) + + Next + 'https://title-api.prd.funimationsvc.com/v1/shows/aldnoahzero/episodes/princess-of-vers/?region=US&deviceType=web + 'https://www.funimation.com/shows/aldnoahzero/princess-of-vers + Dim First As Integer = 0 + Dim Last As Integer = 0 + + If Anime_Add.comboBox4.SelectedIndex > Anime_Add.comboBox3.SelectedIndex Then + First = Anime_Add.comboBox3.SelectedIndex + Last = Anime_Add.comboBox4.SelectedIndex + ElseIf Anime_Add.comboBox4.SelectedIndex = Anime_Add.comboBox3.SelectedIndex Then + + Exit Sub + Else + First = Anime_Add.comboBox4.SelectedIndex + Last = Anime_Add.comboBox4.SelectedIndex + End If + + + + Dim Anzahl As Integer = Anime_Add.comboBox4.SelectedIndex - Anime_Add.comboBox3.SelectedIndex + For i As Integer = First To Last + For e As Integer = 0 To Integer.MaxValue + If Funimation_Grapp_RDY = True Then + Try + Dim ItemFinshedCount As Integer = 0 + For i2 As Integer = 0 To ListView1.Items.Count - 1 + If ItemList(i2).GetIsStatusFinished() = True Then + ItemFinshedCount = ItemFinshedCount + 1 + End If + Next + RunningDownloads = ListView1.Items.Count - ItemFinshedCount + + Catch ex As Exception + RunningDownloads = ListView1.Items.Count + End Try + + If RunningDownloads < MaxDL Then + Exit For + Else + 'MsgBox(e) + Await Task.Delay(1000) + End If + Else + Await Task.Delay(5000) + End If + Next + If Anime_Add.Mass_DL_Cancel = False Then + b = True + Exit For + Grapp_Abord = True + 'MsgBox("dl_abourd") + End If + If UseQueue = True Then + Anime_Add.ListBox1.Items.Add(ListOfEpisodes(i)) + Anime_Add.Add_Display.ForeColor = Color.FromArgb(9248044) + Pause(1) + Anime_Add.Add_Display.ForeColor = Color.Black + + Else + Funimation_Grapp_RDY = False + b = False + GeckoFX.WebBrowser1.Navigate(ListOfEpisodes(i)) + End If + + + Anime_Add.Add_Display.Text = (i - First + 1).ToString + " / " + (Last - First + 1).ToString + Next + + + Catch ex As Exception + If Debug2 = True Then + MsgBox(ex.ToString) + End If + Anime_Add.comboBox4.Items.Clear() + Anime_Add.comboBox3.Items.Clear() + Aktuell = 0.ToString + Gesamt = 0.ToString + + Anime_Add.groupBox1.Visible = True + Anime_Add.groupBox2.Visible = False + Anime_Add.GroupBox3.Visible = False + Anime_Add.Mass_DL_Cancel = False + Anime_Add.pictureBox4.Image = My.Resources.main_button_download_default + End Try + Pause(5) + Anime_Add.groupBox1.Visible = True + Anime_Add.groupBox2.Visible = False + Anime_Add.GroupBox3.Visible = False + Anime_Add.Mass_DL_Cancel = False + Anime_Add.pictureBox4.Image = My.Resources.main_button_download_default + End Sub + + + Public Sub GetFunimationJS_Video(ByVal Streams As String, ByVal WebsiteURL As String) + + Try + Funimation_Grapp_RDY = False + + Dim CR_series_title As String = Nothing + Dim CR_season_number As String = Nothing + Dim CR_episode As String = Nothing + Dim CR_season_title As String = Nothing + Dim CR_title As String = Nothing + Dim CR_audio_locale As String = Nothing + +#Region "Name + Pfad" + Dim Pfad2 As String + Dim TextBox2_Text As String = Nothing + Dim CR_FilenName As String = Nothing + Dim ObjectJson As String = Nothing + + Me.Invoke(New Action(Function() + TextBox2_Text = Anime_Add.textBox2.Text + Return Nothing + End Function)) +#Region "Name von Funimation" + If TextBox2_Text = Nothing Or TextBox2_Text = "Name of the Anime" Then + Dim ObjectsURLBuilder() As String = Streams.Split(New String() {"videos"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder2() As String = ObjectsURLBuilder(1).Split(New String() {"/streams"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder3() As String = WebsiteURL.Split(New String() {"watch/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder4() As String = ObjectsURLBuilder3(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + + Dim ObjectsURL As String = ObjectsURLBuilder(0) + "objects/" + ObjectsURLBuilder4(0) + ObjectsURLBuilder2(1) + + Debug.WriteLine(ObjectsURL) + + Try + Using client As New WebClient() + client.Encoding = System.Text.Encoding.UTF8 + client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) + ObjectJson = client.DownloadString(ObjectsURL) + End Using + Catch ex As Exception + Debug.WriteLine("error- getting name data") + Exit Sub + End Try + + 'My.Computer.Clipboard.SetText(ObjectJson) + + If CBool(InStr(ObjectJson, Chr(34) + "title")) Then ' false on movie true on series + Dim CR_Name_1 As String() = ObjectJson.Split(New String() {Chr(34) + "title" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_Name_2 As String() = CR_Name_1(1).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + CR_title = String.Join(" ", CR_Name_2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) + + End If + If CBool(InStr(ObjectJson, "series_title")) Then ' false on movie true on series + Dim CR_Name_1 As String() = ObjectJson.Split(New String() {"series_title" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_Name_2 As String() = CR_Name_1(1).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + CR_series_title = String.Join(" ", CR_Name_2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) + + End If + If CBool(InStr(ObjectJson, "season_title")) Then ' false on movie true on series + Dim CR_Name_1 As String() = ObjectJson.Split(New String() {"season_title" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_Name_2 As String() = CR_Name_1(1).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + CR_season_title = String.Join(" ", CR_Name_2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) + + End If + If CBool(InStr(ObjectJson, "season_number")) Then ' false on movie true on series + Dim CR_Name_1 As String() = ObjectJson.Split(New String() {"season_number" + Chr(34) + ":"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_Name_2 As String() = CR_Name_1(1).Split(New String() {","}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + CR_season_number = String.Join(" ", CR_Name_2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) + + End If + + If CBool(InStr(ObjectJson, "episode")) Then ' false on movie true on series + Dim CR_Name_1 As String() = ObjectJson.Split(New String() {"episode" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_Name_2 As String() = CR_Name_1(1).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + CR_episode = String.Join(" ", CR_Name_2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) + + End If + + 'My.Computer.Clipboard.SetText(ObjectJson) + 'MsgBox(CR_season_title) + + If Season_Prefix = "[default season prefix]" Then + If CR_season_title = CR_series_title Then + CR_season_number = CR_season_title + "Season " + CR_season_number + End If + CR_season_number = CR_season_title + Else + + CR_season_number = Season_Prefix + CR_season_number + + End If + + If Episode_Prefix = "[default episode prefix]" Then + CR_episode = "Episode " + CR_episode + Else + CR_episode = Episode_Prefix + CR_episode + End If + + If CR_NameMethode = 0 Then 'nummer + If CR_season_number = Nothing Then + CR_FilenName = CR_series_title + " " + CR_episode + Else + CR_FilenName = CR_season_number + " " + CR_episode + End If + ElseIf CR_NameMethode = 1 Then 'name + If CR_season_number = Nothing Then + CR_FilenName = CR_series_title + " " + CR_title + Else + CR_FilenName = CR_season_number + " " + CR_title + End If + ElseIf CR_NameMethode = 2 Then ' nummer - name + If CR_season_number = Nothing Then + CR_FilenName = CR_series_title + " " + CR_episode + " " + CR_title + Else + CR_FilenName = CR_season_number + " " + CR_episode + " " + CR_title + End If + ElseIf CR_NameMethode = 3 Then ' name - nummer + If CR_season_number = Nothing Then + CR_FilenName = CR_series_title + " " + CR_title + " " + CR_episode + Else + CR_FilenName = CR_series_title + " " + CR_title + " " + CR_season_number + " " + CR_episode + End If + End If + + + Debug.WriteLine(CR_FilenName) +#End Region + + Else + CR_FilenName = RemoveExtraSpaces(String.Join(" ", TextBox2_Text.Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c)) 'System.Text.RegularExpressions.Regex.Replace(TextBox2_Text, "[^\w\\-]", " ")) + + + End If + + CR_FilenName = String.Join(" ", CR_FilenName.Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) 'System.Text.RegularExpressions.Regex.Replace(CR_FilenName, "[^\w\\-]", " ") + CR_FilenName = RemoveExtraSpaces(CR_FilenName) + + 'My.Computer.FileSystem.WriteAllText("log.log", WebbrowserText, False) + + Pfad2 = UseSubfolder(CR_series_title, CR_season_title, Pfad) + + If Not Directory.Exists(Path.GetDirectoryName(Pfad2)) Then + ' Nein! Jetzt erstellen... + Try + Directory.CreateDirectory(Path.GetDirectoryName(Pfad2)) + Pfad2 = Chr(34) + Pfad2 + CR_FilenName + VideoFormat + Chr(34) + + Catch ex As Exception + ' Ordner wurde nich erstellt + Pfad2 = Pfad + "\" + CR_FilenName + VideoFormat + End Try + Else + Pfad2 = Chr(34) + Pfad2 + CR_FilenName + VideoFormat + Chr(34) + End If + + + + +#End Region + +#Region "VideoJson" + + + Dim VideoJson As String = Nothing + Try + Using client As New WebClient() + client.Encoding = System.Text.Encoding.UTF8 + client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) + VideoJson = client.DownloadString(Streams) + End Using + Catch ex As Exception + Debug.WriteLine("error- getting stream data") + Exit Sub + End Try + + Dim hls_type As String = Nothing + + If CBool(InStr(VideoJson, Chr(34) + "adaptive_hls")) = True Then + hls_type = "adaptive_hls" + ElseIf CBool(InStr(VideoJson, Chr(34) + "multitrack_adaptive_hls_v2")) = True Then + hls_type = "multitrack_adaptive_hls_v2" + ElseIf CBool(InStr(VideoJson, Chr(34) + "vo_adaptive_hls")) = True Then + hls_type = "vo_adaptive_hls" + Else + MsgBox("No download stream avalible", MsgBoxStyle.Critical) + Exit Sub + End If + + Dim LangNew As String = ConvertCC(SubSprache) + + +#End Region + +#Region "Download softsub file or build ffmpeg cmd" + Dim SoftSubs2 As New List(Of String) + If SoftSubs.Count > 0 Then + For i As Integer = 0 To SoftSubs.Count - 1 + If CBool(InStr(VideoJson, Chr(34) + "locale" + Chr(34) + ":" + Chr(34) + ConvertCC(SoftSubs(i)) + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34))) Then + SoftSubs2.Add(SoftSubs(i)) + Else + 'MsgBox("Softsubtitle for " + SoftSubs(i) + " is not avalible.", MsgBoxStyle.Information) + End If + Next + + End If + + Dim SoftSubMergeURLs As String = Nothing + Dim SoftSubMergeMaps As String = " -map 0:v -map 0:a" + Dim SoftSubMergeMetatata As String = Nothing + + If SoftSubs2.Count > 0 Then + If MergeSubs = True And SubsOnly = False Then + Dim DispositionIndex As Integer + For i As Integer = 0 To SoftSubs2.Count - 1 + Debug.WriteLine(SoftSubs2(i)) + If SoftSubs2(i) = DefaultSubCR Then + DispositionIndex = i + End If + Dim SoftSub As String() = VideoJson.Split(New String() {Chr(34) + "locale" + Chr(34) + ":" + Chr(34) + ConvertCC(SoftSubs2(i)) + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim SoftSub_2 As String() = SoftSub(1).Split(New [Char]() {Chr(34)}) + Dim SoftSub_3 As String = SoftSub_2(0).Replace("&", "&").Replace("/u0026", "&").Replace("\u002F", "/").Replace("\u0026", "&") + If SoftSubMergeURLs = Nothing Then + SoftSubMergeURLs = " -i " + Chr(34) + SoftSub_3 + Chr(34) + Else + SoftSubMergeURLs = SoftSubMergeURLs + " -i " + Chr(34) + SoftSub_3 + Chr(34) + End If + SoftSubMergeMaps = SoftSubMergeMaps + " -map " + (i + 1).ToString + If SoftSubMergeMetatata = Nothing Then + SoftSubMergeMetatata = " -metadata:s:s:" + i.ToString + " language=" + CCtoMP4CC(SoftSubs2(i)) + " -metadata:s:s:" + i.ToString + " title=" + Chr(34) + HardSubValuesToDisplay(SoftSubs2(i)) + Chr(34) + " -metadata:s:s:" + i.ToString + " handler_name=" + Chr(34) + HardSubValuesToDisplay(SoftSubs2(i)) + Chr(34) + Else + SoftSubMergeMetatata = SoftSubMergeMetatata + " -metadata:s:s:" + i.ToString + " language=" + CCtoMP4CC(SoftSubs2(i)) + " -metadata:s:s:" + i.ToString + " title=" + Chr(34) + HardSubValuesToDisplay(SoftSubs2(i)) + Chr(34) + " -metadata:s:s:" + i.ToString + " handler_name=" + Chr(34) + HardSubValuesToDisplay(SoftSubs2(i)) + Chr(34) + End If + + Next + If DispositionIndex = Nothing Then + Else + SoftSubMergeMetatata = SoftSubMergeMetatata + " -disposition:s:" + DispositionIndex.ToString + " default" + End If + Else + For i As Integer = 0 To SoftSubs2.Count - 1 + Dim i2 As Integer = i + Me.Invoke(New Action(Function() + Anime_Add.StatusLabel.Text = "Status: downloading subtitle file " + HardSubValuesToDisplay(SoftSubs2(i2)) + Me.Text = "Status: downloading subtitle file " + HardSubValuesToDisplay(SoftSubs2(i2)) + Me.Invalidate() + Return Nothing + End Function)) + Dim SoftSub As String() = VideoJson.Split(New String() {Chr(34) + "locale" + Chr(34) + ":" + Chr(34) + ConvertCC(SoftSubs2(i)) + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim SoftSub_2 As String() = SoftSub(1).Split(New [Char]() {Chr(34)}) + Dim SoftSub_3 As String = SoftSub_2(0).Replace("&", "&").Replace("/u0026", "&").Replace("\u002F", "/").Replace("\u0026", "&") + 'MsgBox(SoftSub_3) + Dim client0 As New WebClient + client0.Encoding = Encoding.UTF8 + Dim str0 As String = client0.DownloadString(SoftSub_3) + Dim Pfad3 As String = Pfad2.Replace(Chr(34), "") + Dim FN As String = Path.ChangeExtension(Path.Combine(Path.GetFileNameWithoutExtension(Pfad3) + " " + SoftSubs2(i) + Path.GetExtension(Pfad3)), "ass") + 'MsgBox(FN) + If i = 0 Then + FN = Path.ChangeExtension(Path.GetFileName(Pfad3), "ass") + 'MsgBox(FN) + End If + Dim Pfad4 As String = Path.Combine(Path.GetDirectoryName(Pfad3), FN) + 'MsgBox(Pfad4) + File.WriteAllText(Pfad4, str0, Encoding.UTF8) + Pause(3) + Next + + End If + + End If +#End Region + +#Region "m3u8 suche" + + If CBool(InStr(VideoJson, "audio_locale")) Then + Dim CR_audio As String() = VideoJson.Split(New String() {"audio_locale" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_audio2 As String() = CR_audio(1).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + CR_audio_locale = String.Join(" ", CR_audio2(0).Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) + + End If + + Dim CR_URI_Master As String = Nothing + 'If SubsOnly = False Then + Dim ii As Integer = 0 + Dim CR_VideoJson As String() = VideoJson.Split(New String() {hls_type}, System.StringSplitOptions.RemoveEmptyEntries) + Dim CR_VideoJsonHardSubs As String() = CR_VideoJson(1).Split(New String() {"hardsub_locale" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) + + Debug.WriteLine(LangNew) + Dim hls_List As New List(Of String) + For i As Integer = 0 To CR_VideoJsonHardSubs.Count - 1 + If InStr(CR_VideoJsonHardSubs(i), LangNew + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34)) Then + CR_URI_Master = CR_VideoJsonHardSubs(i).Replace(LangNew + Chr(34) + "," + Chr(34) + "url" + Chr(34) + ":" + Chr(34), "").Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)(0) + Exit For + End If + Next + CR_URI_Master = CR_URI_Master.Replace("&", "&").Replace("/u0026", "&").Replace("\u002F", "/").Replace("\u0026", "&") + + If CBool(InStr(CR_URI_Master, "master.m3u8")) Then + Me.Invoke(New Action(Function() + Anime_Add.StatusLabel.Text = "Status: m3u8 found, looking for resolution" + Me.Text = "Status: m3u8 found, looking for resolution" + Me.Invalidate() + Return Nothing + End Function)) + Else + Throw New System.Exception("Premium Episode") + End If + 'Else + ' Me.Invoke(New Action(Function() + ' Anime_Add.StatusLabel.Text = "Status: Substitles only mode - skipped video" + ' Me.Text = "Status: Substitles only mode - skipped video" + ' Me.Invalidate() + ' Return Nothing + ' End Function)) + 'End If +#End Region + + +#Region "lösche doppel download" + + Dim Pfad5 As String = Pfad2.Replace(Chr(34), "") + If My.Computer.FileSystem.FileExists(Pfad5) Then 'Pfad = Kompeltter Pfad mit Dateinamen + ENdung + Me.Invoke(New Action(Function() + + Anime_Add.StatusLabel.Text = "Status: The file video already exists." + Me.Text = "Status: The file video already exists." + Me.Invalidate() + Return Nothing + End Function)) + If MessageBox.Show("The file " + Pfad5 + " already exists." + vbNewLine + "You want to override it?", "File exists!", MessageBoxButtons.OKCancel) = DialogResult.OK Then + Try + My.Computer.FileSystem.DeleteFile(Pfad5) + Catch ex As Exception + End Try + Else + Grapp_RDY = True + Exit Sub + End If + + End If +#End Region + If SubsOnly = False Then + + If Reso = 42 And HybridMode = False Then + If MergeSubs = True Then + URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + 'URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command + Else + URL_DL = "-i " + Chr(34) + CR_URI_Master + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command + End If + 'MsgBox(URL_DL) + Else + + + Dim client As New System.Net.WebClient + client.Encoding = Encoding.UTF8 + 'MsgBox(CR_URI_Master) + Dim str As String = client.DownloadString(CR_URI_Master) + 'MsgBox(str) + + If CBool(InStr(str, "x" + Reso.ToString + ",")) Then + Reso2 = "x" + Reso.ToString + Else + 'MsgBox(str) + If CBool(InStr(str, ResoSave + ",")) Then + Reso2 = Reso2 + Else + Me.Invoke(New Action(Function() + DialogTaskString = "Resolution" + ResoNotFoundString = str + ErrorDialog.ShowDialog() + Return Nothing + End Function)) + + + 'MsgBox(ResoBackString) + If UserCloseDialog = True Then + Throw New System.Exception(Chr(34) + "UserAbort" + Chr(34)) + Else + Reso2 = ResoBackString + ResoSave = ResoBackString + End If + End If + End If + + + Dim ffmpeg_url_1 As String() = str.Split(New String() {Reso2 + ","}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ffmpeg_url_3 As String() = Nothing + Dim ffmpeg_url_2 As String() = ffmpeg_url_1(1).Split(New [Char]() {Chr(34)}) + ffmpeg_url_3 = ffmpeg_url_2(2).Split(New [Char]() {System.Convert.ToChar("#")}) + + If MergeSubs = True Then + Debug.WriteLine(ConvertCC(CR_audio_locale)) + URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + 'URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command + + Else + URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command + End If + + End If + + End If +#Region "thumbnail" + Dim thumbnail As String() = ObjectJson.Split(New String() {"https://"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim thumbnail2 As String() = thumbnail(1).Split(New String() {Chr(34) + "}"}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) + Dim thumbnail3 As String = "https://" + thumbnail2(0).Replace("\/", "/") +#End Region +#Region "
  • constructor" + Dim Subsprache3 As String = "none" 'HardSubValuesToDisplay(SubSprache2.Replace(Chr(34), "")) + Dim ResoHTMLDisplay As String = Nothing + If ResoBackString = Nothing Then + ResoHTMLDisplay = Reso.ToString + "p" + ElseIf DialogTaskString = "Language" Then + ResoHTMLDisplay = Reso.ToString + "p" + Else + Dim ResoHTML As String() = ResoBackString.Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries) + If ResoHTML.Count > 1 Then + ResoHTMLDisplay = ResoHTML(1) + "p" + + Else + ResoHTMLDisplay = ResoHTML(0) + "p" + End If + End If + Dim L2Name As String = String.Join(" ", CR_FilenName.Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) 'System.Text.RegularExpressions.Regex.Replace(CR_FilenName_Backup, "[^\w\\-]", " ") + If Reso = 42 And HybridMode = False Then + ResoHTMLDisplay = "[Auto]" + ElseIf Reso = 42 And HybridMode = False Then + ResoHTMLDisplay = Reso2 + End If + Pfad_DL = Pfad2 + Dim L1Name_Split As String() = WebsiteURL.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim L1Name As String = L1Name_Split(1).Replace("www.", "") + " | Dub : " + HardSubValuesToDisplay(CR_audio_locale) + + If SubsOnly = True Then + URL_DL = "-i [Subtitles only]" + End If + Me.Invoke(New Action(Function() + ListItemAdd(Pfad_DL, L1Name, L2Name, ResoHTMLDisplay, Subsprache3, SubValuesToDisplay(), thumbnail3, URL_DL, Pfad_DL) + Return Nothing + End Function)) + liList.Add(My.Resources.htmlvorThumbnail + thumbnail3 + My.Resources.htmlnachTumbnail + CR_title + "
    " + CR_season_title + " " + CR_episode + My.Resources.htmlvorAufloesung + ResoHTMLDisplay + My.Resources.htmlvorSoftSubs + vbNewLine + SubValuesToDisplay() + My.Resources.htmlvorHardSubs + Subsprache3 + My.Resources.htmlnachHardSubs + "") + 'Form1.RichTextBox1.Text = My.Resources.htmlvorThumbnail + thumbnail3 + My.Resources.htmlnachTumbnail + CR_Anime_Titel + "
    " + CR_Anime_Staffel + " " + CR_Anime_Folge + My.Resources.htmlvorAufloesung + ResoHTMLDisplay + My.Resources.htmlvorSoftSubs + vbNewLine + SubValuesToDisplay() + My.Resources.htmlvorHardSubs + Subsprache3 + My.Resources.htmlnachHardSubs + "" +#End Region + + Grapp_RDY = True + Me.Invoke(New Action(Function() + + Anime_Add.StatusLabel.Text = "Status: idle" + Me.Text = "Crunchyroll Downloader" + Me.Invalidate() + Return Nothing + End Function)) + Catch ex As Exception + Me.Invoke(New Action(Function() + + Anime_Add.StatusLabel.Text = "Status: idle" + Me.Text = "Crunchyroll Downloader" + Me.Invalidate() + Return Nothing + End Function)) + Grapp_RDY = True + + If CBool(InStr(ex.ToString, "Could not find the sub language")) Then + MsgBox(Sub_language_NotFound + SubSprache) + ElseIf CBool(InStr(ex.ToString, "RESOLUTION Not Found")) Then + MsgBox(Resolution_NotFound) + ElseIf CBool(InStr(ex.ToString, "Premium Episode")) Then + MsgBox(Premium_Stream, MsgBoxStyle.Information) + ElseIf CBool(InStr(ex.ToString, "System.UnauthorizedAccessException")) Then + MsgBox(ErrorNoPermisson + vbNewLine + ex.ToString, MsgBoxStyle.Information) + ElseIf CBool(InStr(ex.ToString, Chr(34) + "UserAbort" + Chr(34))) Then + MsgBox(ex.ToString, MsgBoxStyle.Information) + Else + MsgBox(ex.ToString, MsgBoxStyle.Information) + + End If + + End Try + End Sub + + + +#End Region + Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick @@ -3395,12 +4103,12 @@ Public Class Main Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1") - server = New TcpListener(localAddr, Int32.Parse(port)) + server = New TcpListener(localAddr, Int32.Parse(Port)) ' Start listening for client requests. server.Start() - Debug.WriteLine("Web server started at: " & localAddr.ToString() & ":" & port) + Debug.WriteLine("Web server started at: " & localAddr.ToString() & ":" & Port) While True diff --git a/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.exe b/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.exe index f900af2..ad23f10 100644 Binary files a/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.exe and b/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.exe differ diff --git a/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.pdb b/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.pdb index e54f67c..563825f 100644 Binary files a/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.pdb and b/Crunchyroll Downloader/bin/x86/Debug/Crunchyroll Downloader.pdb differ diff --git a/Crunchyroll Downloader/einstellungen.Designer.vb b/Crunchyroll Downloader/einstellungen.Designer.vb index d774398..ad29484 100644 --- a/Crunchyroll Downloader/einstellungen.Designer.vb +++ b/Crunchyroll Downloader/einstellungen.Designer.vb @@ -44,6 +44,8 @@ Partial Class Einstellungen Me.ComboBox1 = New MetroFramework.Controls.MetroComboBox() Me.TabPage2 = New MetroFramework.Controls.MetroTabPage() Me.GroupBox12 = New System.Windows.Forms.GroupBox() + Me.KodiSupport = New MetroFramework.Controls.MetroToggle() + Me.MetroLink1 = New MetroFramework.Controls.MetroLink() Me.DD_Episode_Prefix = New MetroFramework.Controls.MetroComboBox() Me.DD_Season_Prefix = New MetroFramework.Controls.MetroComboBox() Me.CR_Filename = New MetroFramework.Controls.MetroComboBox() @@ -60,9 +62,12 @@ Partial Class Einstellungen Me.ListC3 = New System.Windows.Forms.ToolStripMenuItem() Me.ListC4 = New System.Windows.Forms.ToolStripMenuItem() Me.ListC5 = New System.Windows.Forms.ToolStripMenuItem() + Me.ListC6 = New System.Windows.Forms.ToolStripMenuItem() + Me.ListC7 = New System.Windows.Forms.ToolStripMenuItem() Me.FFMPEG_CommandP2 = New System.Windows.Forms.ToolStripMenuItem() Me.ListP1 = New System.Windows.Forms.ToolStripMenuItem() Me.ListP2 = New System.Windows.Forms.ToolStripMenuItem() + Me.ListP3 = New System.Windows.Forms.ToolStripMenuItem() Me.FFMPEG_CommandP3 = New System.Windows.Forms.ToolStripMenuItem() Me.ListBit1 = New System.Windows.Forms.ToolStripMenuItem() Me.ListBit2 = New System.Windows.Forms.ToolStripMenuItem() @@ -398,10 +403,10 @@ Partial Class Einstellungen Me.TabPage2.HorizontalScrollbarBarColor = True Me.TabPage2.HorizontalScrollbarHighlightOnWheel = False Me.TabPage2.HorizontalScrollbarSize = 10 - Me.TabPage2.Location = New System.Drawing.Point(4, 44) + Me.TabPage2.Location = New System.Drawing.Point(4, 35) Me.TabPage2.Name = "TabPage2" Me.TabPage2.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage2.Size = New System.Drawing.Size(501, 452) + Me.TabPage2.Size = New System.Drawing.Size(501, 461) Me.TabPage2.TabIndex = 1 Me.TabPage2.Text = "Output" Me.TabPage2.VerticalScrollbarBarColor = True @@ -412,6 +417,8 @@ Partial Class Einstellungen 'GroupBox12 ' Me.GroupBox12.BackColor = System.Drawing.Color.Transparent + Me.GroupBox12.Controls.Add(Me.KodiSupport) + Me.GroupBox12.Controls.Add(Me.MetroLink1) Me.GroupBox12.Controls.Add(Me.DD_Episode_Prefix) Me.GroupBox12.Controls.Add(Me.DD_Season_Prefix) Me.GroupBox12.Controls.Add(Me.CR_Filename) @@ -419,11 +426,34 @@ Partial Class Einstellungen Me.GroupBox12.ForeColor = System.Drawing.Color.Black Me.GroupBox12.Location = New System.Drawing.Point(5, 11) Me.GroupBox12.Name = "GroupBox12" - Me.GroupBox12.Size = New System.Drawing.Size(490, 126) + Me.GroupBox12.Size = New System.Drawing.Size(490, 150) Me.GroupBox12.TabIndex = 53 Me.GroupBox12.TabStop = False Me.GroupBox12.Text = "Filename" ' + 'KodiSupport + ' + Me.KodiSupport.AutoSize = True + Me.KodiSupport.Location = New System.Drawing.Point(259, 120) + Me.KodiSupport.Name = "KodiSupport" + Me.KodiSupport.Size = New System.Drawing.Size(80, 20) + Me.KodiSupport.TabIndex = 38 + Me.KodiSupport.Text = "Aus" + Me.KodiSupport.UseSelectable = True + ' + 'MetroLink1 + ' + Me.MetroLink1.FontSize = MetroFramework.MetroLinkSize.Medium + Me.MetroLink1.ForeColor = System.Drawing.Color.SteelBlue + Me.MetroLink1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.MetroLink1.Location = New System.Drawing.Point(97, 120) + Me.MetroLink1.Name = "MetroLink1" + Me.MetroLink1.Size = New System.Drawing.Size(145, 23) + Me.MetroLink1.TabIndex = 37 + Me.MetroLink1.Text = "enable Kodi naming" + Me.MetroLink1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.MetroLink1.UseSelectable = True + ' 'DD_Episode_Prefix ' Me.DD_Episode_Prefix.DropDownHeight = 250 @@ -433,7 +463,7 @@ Partial Class Einstellungen Me.DD_Episode_Prefix.IntegralHeight = False Me.DD_Episode_Prefix.ItemHeight = 23 Me.DD_Episode_Prefix.Items.AddRange(New Object() {"[default episode prefix]"}) - Me.DD_Episode_Prefix.Location = New System.Drawing.Point(248, 79) + Me.DD_Episode_Prefix.Location = New System.Drawing.Point(248, 70) Me.DD_Episode_Prefix.Name = "DD_Episode_Prefix" Me.DD_Episode_Prefix.Size = New System.Drawing.Size(225, 29) Me.DD_Episode_Prefix.TabIndex = 36 @@ -448,7 +478,7 @@ Partial Class Einstellungen Me.DD_Season_Prefix.IntegralHeight = False Me.DD_Season_Prefix.ItemHeight = 23 Me.DD_Season_Prefix.Items.AddRange(New Object() {"[default season prefix]"}) - Me.DD_Season_Prefix.Location = New System.Drawing.Point(6, 79) + Me.DD_Season_Prefix.Location = New System.Drawing.Point(6, 70) Me.DD_Season_Prefix.Name = "DD_Season_Prefix" Me.DD_Season_Prefix.Size = New System.Drawing.Size(225, 29) Me.DD_Season_Prefix.TabIndex = 35 @@ -462,7 +492,7 @@ Partial Class Einstellungen Me.CR_Filename.IntegralHeight = False Me.CR_Filename.ItemHeight = 23 Me.CR_Filename.Items.AddRange(New Object() {"[episode number]", "[episode name]", "[episode number] [episode name]", "[episode name] [episode number]"}) - Me.CR_Filename.Location = New System.Drawing.Point(6, 25) + Me.CR_Filename.Location = New System.Drawing.Point(6, 27) Me.CR_Filename.Name = "CR_Filename" Me.CR_Filename.Size = New System.Drawing.Size(467, 29) Me.CR_Filename.TabIndex = 34 @@ -475,7 +505,7 @@ Partial Class Einstellungen Me.GroupBox4.Controls.Add(Me.CB_Format) Me.GroupBox4.Font = New System.Drawing.Font("Arial", 9.75!) Me.GroupBox4.ForeColor = System.Drawing.Color.Black - Me.GroupBox4.Location = New System.Drawing.Point(5, 205) + Me.GroupBox4.Location = New System.Drawing.Point(5, 230) Me.GroupBox4.Name = "GroupBox4" Me.GroupBox4.Size = New System.Drawing.Size(490, 78) Me.GroupBox4.TabIndex = 42 @@ -512,7 +542,7 @@ Partial Class Einstellungen Me.CheckBox1.BackColor = System.Drawing.Color.Transparent Me.CheckBox1.FontSize = MetroFramework.MetroCheckBoxSize.Medium Me.CheckBox1.ForeColor = System.Drawing.Color.Black - Me.CheckBox1.Location = New System.Drawing.Point(67, 295) + Me.CheckBox1.Location = New System.Drawing.Point(67, 320) Me.CheckBox1.Name = "CheckBox1" Me.CheckBox1.Size = New System.Drawing.Size(369, 19) Me.CheckBox1.TabIndex = 6 @@ -526,7 +556,7 @@ Partial Class Einstellungen Me.GroupBox2.Enabled = False Me.GroupBox2.Font = New System.Drawing.Font("Arial", 9.75!) Me.GroupBox2.ForeColor = System.Drawing.Color.Black - Me.GroupBox2.Location = New System.Drawing.Point(5, 325) + Me.GroupBox2.Location = New System.Drawing.Point(5, 350) Me.GroupBox2.Name = "GroupBox2" Me.GroupBox2.Size = New System.Drawing.Size(490, 63) Me.GroupBox2.TabIndex = 40 @@ -554,7 +584,7 @@ Partial Class Einstellungen ' 'FFMPEG_CommandP1 ' - Me.FFMPEG_CommandP1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ListC1, Me.ListC2, Me.ListC3, Me.ListC4, Me.ListC5}) + Me.FFMPEG_CommandP1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ListC1, Me.ListC2, Me.ListC3, Me.ListC4, Me.ListC5, Me.ListC6, Me.ListC7}) Me.FFMPEG_CommandP1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.FFMPEG_CommandP1.Name = "FFMPEG_CommandP1" Me.FFMPEG_CommandP1.Size = New System.Drawing.Size(64, 20) @@ -590,9 +620,21 @@ Partial Class Einstellungen Me.ListC5.Size = New System.Drawing.Size(174, 22) Me.ListC5.Text = "-c:v libx265" ' + 'ListC6 + ' + Me.ListC6.Name = "ListC6" + Me.ListC6.Size = New System.Drawing.Size(174, 22) + Me.ListC6.Text = "-c:v h264_amf" + ' + 'ListC7 + ' + Me.ListC7.Name = "ListC7" + Me.ListC7.Size = New System.Drawing.Size(174, 22) + Me.ListC7.Text = "-c:v hevc_amf" + ' 'FFMPEG_CommandP2 ' - Me.FFMPEG_CommandP2.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ListP1, Me.ListP2}) + Me.FFMPEG_CommandP2.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ListP1, Me.ListP2, Me.ListP3}) Me.FFMPEG_CommandP2.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.FFMPEG_CommandP2.Name = "FFMPEG_CommandP2" Me.FFMPEG_CommandP2.Size = New System.Drawing.Size(86, 20) @@ -610,6 +652,12 @@ Partial Class Einstellungen Me.ListP2.Size = New System.Drawing.Size(148, 22) Me.ListP2.Text = "-preset slow" ' + 'ListP3 + ' + Me.ListP3.Name = "ListP3" + Me.ListP3.Size = New System.Drawing.Size(148, 22) + Me.ListP3.Text = "[no Preset]" + ' 'FFMPEG_CommandP3 ' Me.FFMPEG_CommandP3.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ListBit1, Me.ListBit2, Me.ListBit3, Me.ListBit4, Me.ListBit5, Me.ListBit6, Me.ListBit7}) @@ -678,7 +726,7 @@ Partial Class Einstellungen Me.GB_Resolution.Controls.Add(Me.A1080p) Me.GB_Resolution.Font = New System.Drawing.Font("Arial", 9.75!) Me.GB_Resolution.ForeColor = System.Drawing.Color.Black - Me.GB_Resolution.Location = New System.Drawing.Point(5, 140) + Me.GB_Resolution.Location = New System.Drawing.Point(5, 165) Me.GB_Resolution.Name = "GB_Resolution" Me.GB_Resolution.Size = New System.Drawing.Size(490, 59) Me.GB_Resolution.TabIndex = 38 @@ -763,10 +811,10 @@ Partial Class Einstellungen Me.TabPage1.HorizontalScrollbarBarColor = True Me.TabPage1.HorizontalScrollbarHighlightOnWheel = False Me.TabPage1.HorizontalScrollbarSize = 10 - Me.TabPage1.Location = New System.Drawing.Point(4, 44) + Me.TabPage1.Location = New System.Drawing.Point(4, 35) Me.TabPage1.Name = "TabPage1" Me.TabPage1.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage1.Size = New System.Drawing.Size(501, 452) + Me.TabPage1.Size = New System.Drawing.Size(501, 461) Me.TabPage1.TabIndex = 0 Me.TabPage1.Text = " Main" Me.TabPage1.VerticalScrollbar = True @@ -984,7 +1032,7 @@ Partial Class Einstellungen Me.TabControl1.FontWeight = MetroFramework.MetroTabControlWeight.Regular Me.TabControl1.Location = New System.Drawing.Point(22, 60) Me.TabControl1.Name = "TabControl1" - Me.TabControl1.SelectedIndex = 4 + Me.TabControl1.SelectedIndex = 5 Me.TabControl1.Size = New System.Drawing.Size(509, 500) Me.TabControl1.TabIndex = 38 Me.TabControl1.UseSelectable = True @@ -998,9 +1046,9 @@ Partial Class Einstellungen Me.MetroTabPage1.HorizontalScrollbarBarColor = True Me.MetroTabPage1.HorizontalScrollbarHighlightOnWheel = False Me.MetroTabPage1.HorizontalScrollbarSize = 10 - Me.MetroTabPage1.Location = New System.Drawing.Point(4, 44) + Me.MetroTabPage1.Location = New System.Drawing.Point(4, 35) Me.MetroTabPage1.Name = "MetroTabPage1" - Me.MetroTabPage1.Size = New System.Drawing.Size(501, 452) + Me.MetroTabPage1.Size = New System.Drawing.Size(501, 461) Me.MetroTabPage1.TabIndex = 7 Me.MetroTabPage1.Text = "Crunchyroll" Me.MetroTabPage1.VerticalScrollbarBarColor = True @@ -1018,10 +1066,10 @@ Partial Class Einstellungen Me.TabPage6.HorizontalScrollbarBarColor = True Me.TabPage6.HorizontalScrollbarHighlightOnWheel = False Me.TabPage6.HorizontalScrollbarSize = 10 - Me.TabPage6.Location = New System.Drawing.Point(4, 44) + Me.TabPage6.Location = New System.Drawing.Point(4, 35) Me.TabPage6.Name = "TabPage6" Me.TabPage6.Padding = New System.Windows.Forms.Padding(3) - Me.TabPage6.Size = New System.Drawing.Size(501, 452) + Me.TabPage6.Size = New System.Drawing.Size(501, 461) Me.TabPage6.TabIndex = 4 Me.TabPage6.Text = "Funimation" Me.TabPage6.VerticalScrollbarBarColor = True @@ -1217,9 +1265,9 @@ Partial Class Einstellungen ' Me.TabPage8.BackColor = System.Drawing.Color.Transparent Me.TabPage8.Controls.Add(Me.GroupBox8) - Me.TabPage8.Location = New System.Drawing.Point(4, 44) + Me.TabPage8.Location = New System.Drawing.Point(4, 35) Me.TabPage8.Name = "TabPage8" - Me.TabPage8.Size = New System.Drawing.Size(501, 452) + Me.TabPage8.Size = New System.Drawing.Size(501, 461) Me.TabPage8.TabIndex = 6 Me.TabPage8.Text = " AoD" ' @@ -1289,9 +1337,9 @@ Partial Class Einstellungen Me.TabPage7.Controls.Add(Me.Label4) Me.TabPage7.Controls.Add(Me.Label6) Me.TabPage7.Controls.Add(Me.Label5) - Me.TabPage7.Location = New System.Drawing.Point(4, 35) + Me.TabPage7.Location = New System.Drawing.Point(4, 44) Me.TabPage7.Name = "TabPage7" - Me.TabPage7.Size = New System.Drawing.Size(493, 461) + Me.TabPage7.Size = New System.Drawing.Size(501, 452) Me.TabPage7.TabIndex = 5 Me.TabPage7.Text = "About " ' @@ -1435,6 +1483,7 @@ Partial Class Einstellungen Me.TabPage2.ResumeLayout(False) Me.TabPage2.PerformLayout() Me.GroupBox12.ResumeLayout(False) + Me.GroupBox12.PerformLayout() Me.GroupBox4.ResumeLayout(False) Me.GroupBox4.PerformLayout() Me.GroupBox2.ResumeLayout(False) @@ -1578,4 +1627,9 @@ Partial Class Einstellungen Friend WithEvents CB_Format As MetroFramework.Controls.MetroComboBox Friend WithEvents HybridMode_CB As MetroFramework.Controls.MetroCheckBox Friend WithEvents MetroTabPage1 As MetroFramework.Controls.MetroTabPage + Friend WithEvents ListC6 As ToolStripMenuItem + Friend WithEvents ListC7 As ToolStripMenuItem + Friend WithEvents ListP3 As ToolStripMenuItem + Friend WithEvents KodiSupport As MetroFramework.Controls.MetroToggle + Friend WithEvents MetroLink1 As MetroFramework.Controls.MetroLink End Class diff --git a/Crunchyroll Downloader/einstellungen.resx b/Crunchyroll Downloader/einstellungen.resx index f49b9b4..e809bf5 100644 --- a/Crunchyroll Downloader/einstellungen.resx +++ b/Crunchyroll Downloader/einstellungen.resx @@ -126,9 +126,6 @@ 118, 20 - - 118, 20 - 332, 20 diff --git a/Crunchyroll Downloader/einstellungen.vb b/Crunchyroll Downloader/einstellungen.vb index cfb6af8..4b271ac 100644 --- a/Crunchyroll Downloader/einstellungen.vb +++ b/Crunchyroll Downloader/einstellungen.vb @@ -13,10 +13,11 @@ Public Class Einstellungen Inherits MetroForm Dim Manager As MetroStyleManager = Main.Manager + Dim LastVersionString As String = "v3.8-Beta" Private Sub Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Label6.Text = "You have: v" + Application.ProductVersion.ToString + " Beta-U3" + Label6.Text = "You have: v" + Application.ProductVersion.ToString + " Beta-U6" BackgroundWorker1.RunWorkerAsync() @@ -27,6 +28,9 @@ Public Class Einstellungen Manager.Owner = Me Me.StyleManager = Manager + If Main.KodiNaming = True Then + KodiSupport.Checked = True + End If If Main.DarkModeValue = True Then DarkMode.Checked = True @@ -230,7 +234,23 @@ Public Class Einstellungen If InStr(Main.ffmpeg_command, "-c copy") Then FFMPEG_CommandP1.Text = "-c copy" FFMPEG_CommandP4.Text = "-c:a copy -bsf:a aac_adtstoasc" + ElseIf InStr(Main.ffmpeg_command, "-c:a copy ") Then + Dim ffmpegDisplayCurrent As String() = Main.ffmpeg_command.Split(New String() {" "}, System.StringSplitOptions.RemoveEmptyEntries) + If ffmpegDisplayCurrent.Count > 8 Then + FFMPEG_CommandP1.Text = ffmpegDisplayCurrent(0) + " " + ffmpegDisplayCurrent(1) + FFMPEG_CommandP2.Text = ffmpegDisplayCurrent(2) + " " + ffmpegDisplayCurrent(3) + FFMPEG_CommandP3.Text = ffmpegDisplayCurrent(4) + " " + ffmpegDisplayCurrent(5) + FFMPEG_CommandP4.Text = "-c:a copy -bsf:a aac_adtstoasc" + Else + FFMPEG_CommandP1.Text = ffmpegDisplayCurrent(0) + " " + ffmpegDisplayCurrent(1) + FFMPEG_CommandP2.Text = "[no Preset]" + FFMPEG_CommandP3.Text = ffmpegDisplayCurrent(2) + " " + ffmpegDisplayCurrent(3) + FFMPEG_CommandP4.Text = "-c:a copy -bsf:a aac_adtstoasc" + End If + + Else + Dim ffmpegDisplayCurrent As String() = Main.ffmpeg_command.Split(New String() {" "}, System.StringSplitOptions.RemoveEmptyEntries) FFMPEG_CommandP1.Text = ffmpegDisplayCurrent(0) + " " + ffmpegDisplayCurrent(1) FFMPEG_CommandP2.Text = ffmpegDisplayCurrent(2) + " " + ffmpegDisplayCurrent(3) @@ -322,6 +342,13 @@ Public Class Einstellungen End If + If KodiSupport.Checked = True Then + Main.KodiNaming = True + rk.SetValue("KodiSupport", 1, RegistryValueKind.String) + Else + Main.KodiNaming = False + rk.SetValue("KodiSupport", 0, RegistryValueKind.String) + End If ' MsgBox(Name_season.Text) If InStr(TextBox1.Text, "https://") Then @@ -599,6 +626,9 @@ Public Class Einstellungen Dim ffpmeg_cmd As String = Nothing If FFMPEG_CommandP1.Text = "-c copy" Then ffpmeg_cmd = " " + FFMPEG_CommandP1.Text + " " + FFMPEG_CommandP4.Text + ElseIf FFMPEG_CommandP2.Text = "[no Preset]" Then + + ffpmeg_cmd = " " + FFMPEG_CommandP1.Text + " " + FFMPEG_CommandP3.Text + " " + FFMPEG_CommandP4.Text Else ffpmeg_cmd = " " + FFMPEG_CommandP1.Text + " " + FFMPEG_CommandP2.Text + " " + FFMPEG_CommandP3.Text + " " + FFMPEG_CommandP4.Text @@ -798,7 +828,7 @@ Public Class Einstellungen End If End Sub - Private Sub ListC1_Click(sender As Object, e As EventArgs) Handles ListC1.Click, ListC2.Click, ListC3.Click, ListC4.Click, ListC5.Click + Private Sub ListC1_Click(sender As Object, e As EventArgs) Handles ListC1.Click, ListC2.Click, ListC3.Click, ListC4.Click, ListC5.Click, ListC6.Click, ListC7.Click Dim Button As ToolStripMenuItem = sender If Button.Text = "-c copy" Then FFMPEG_CommandP1.Text = "-c copy" @@ -812,7 +842,7 @@ Public Class Einstellungen End Sub - Private Sub ListP1_Click(sender As Object, e As EventArgs) Handles ListP1.Click, ListP2.Click + Private Sub ListP1_Click(sender As Object, e As EventArgs) Handles ListP1.Click, ListP2.Click, ListP3.Click Dim Button As ToolStripMenuItem = sender FFMPEG_CommandP2.Text = Button.Text FFMPEG_CommandP2.Enabled = True @@ -932,10 +962,9 @@ Public Class Einstellungen Dim GitHubLastTag() As String = str0.Split(New String() {Chr(34) + "tag_name" + Chr(34) + ": " + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) Dim GitHubLastTag1() As String = GitHubLastTag(LastNonPreRelase).Split(New String() {Chr(34) + ","}, System.StringSplitOptions.RemoveEmptyEntries) - Me.Invoke(New Action(Function() - LastVersion.Text = "last release: " + GitHubLastTag1(0) - Return Nothing - End Function)) + LastVersionString = GitHubLastTag1(0) + + 'Debug.WriteLine(GitHubLastTag1(0)) Catch ex As Exception Debug.WriteLine(ex.ToString) @@ -1110,6 +1139,19 @@ Public Class Einstellungen End If End Sub + Private Sub MetroLink1_Click(sender As Object, e As EventArgs) Handles MetroLink1.Click + Process.Start("https://github.com/hama3254/Crunchyroll-Downloader-v3.0/discussions/276") + End Sub + + + Private Sub TabPage7_Enter(sender As Object, e As EventArgs) Handles TabPage7.Enter + LastVersion.Text = "last release: " + LastVersionString + End Sub + + + + + #End Region diff --git a/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.exe b/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.exe index f900af2..ad23f10 100644 Binary files a/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.exe and b/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.exe differ diff --git a/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.pdb b/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.pdb index e54f67c..563825f 100644 Binary files a/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.pdb and b/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.pdb differ diff --git a/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.vbproj.GenerateResource.cache b/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.vbproj.GenerateResource.cache index 359037e..f850daf 100644 Binary files a/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.vbproj.GenerateResource.cache and b/Crunchyroll Downloader/obj/x86/Debug/Crunchyroll Downloader.vbproj.GenerateResource.cache differ