Crunchyroll-Downloader-v3.0/Crunchyroll Downloader/network_scan.vb
hama3254 2bf5ee0a4c beta for Crunchyroll beta
beta for Crunchyroll beta
improved code for any network scan related tasks
added simple adblock (via domain list)
possible errorhandling certificate issues
2021-04-05 19:08:42 +02:00

399 lines
17 KiB
VB.net

Imports Microsoft.Win32
Imports System.Net
Imports Gecko
Imports System.IO
Imports System.Threading
Imports MetroFramework.Forms
Imports MetroFramework
Imports MetroFramework.Components
Imports System.Text
Public Class network_scan
Dim Manager As MetroStyleManager = Main.Manager
Dim SubtitleFormat As String = Nothing
Private Sub network_scan_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox2.Enabled = False
Manager.Owner = Me
Me.StyleManager = Manager
Btn_Close.Image = Main.CloseImg
Btn_min.Image = Main.MinImg
Try
Me.Icon = My.Resources.icon
Catch ex As Exception
End Try
Me.Location = New Point(Main.Location.X + Main.Width / 2 - Me.Width / 2, Main.Location.Y + Main.Height / 2 - Me.Height / 2)
pictureBox4.Enabled = False
pictureBox4.Image = My.Resources.main_button_download_deactivate
End Sub
Private Sub PictureBox4_MouseEnter(sender As Object, e As EventArgs) Handles pictureBox4.MouseEnter
If pictureBox4.Enabled = True Then
pictureBox4.Image = My.Resources.main_button_download_hovert
Else
pictureBox4.Image = My.Resources.main_button_download_deactivate
End If
End Sub
Private Sub PictureBox4_MouseLeave(sender As Object, e As EventArgs) Handles pictureBox4.MouseLeave
If pictureBox4.Enabled = True Then
pictureBox4.Image = My.Resources.main_button_download_default
Else
pictureBox4.Image = My.Resources.main_button_download_deactivate
End If
End Sub
Private Sub Btn_Close_Click(sender As Object, e As EventArgs) Handles Btn_Close.Click
Me.Close()
End Sub
Private Sub network_scan_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Btn_Close.Location = New Point(Me.Width - 40, 1)
Btn_min.Location = New Point(Me.Width - 68, 10)
End Sub
Private Sub Btn_min_Click(sender As Object, e As EventArgs) Handles Btn_min.Click
Me.WindowState = System.Windows.Forms.FormWindowState.Minimized
End Sub
Private Sub Btn_min_MouseEnter(sender As Object, e As EventArgs) Handles Btn_min.MouseEnter
Dim PB As PictureBox = sender
PB.Image = My.Resources.main_mini_red
End Sub
Private Sub Btn_min_MouseLeave(sender As Object, e As EventArgs) Handles Btn_min.MouseLeave
Dim PB As PictureBox = sender
PB.Image = Main.MinImg
End Sub
Private Sub Btn_Close_MouseEnter(sender As Object, e As EventArgs) Handles Btn_Close.MouseEnter
Dim PB As PictureBox = sender
PB.Image = My.Resources.main_del
End Sub
Private Sub Btn_Close_MouseLeave(sender As Object, e As EventArgs) Handles Btn_Close.MouseLeave
Dim PB As PictureBox = sender
PB.Image = Main.CloseImg
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
ComboBox3.Enabled = False
ComboBox3.Items.Clear()
ComboBox3.Text = Nothing
ComboBox2.Items.Clear()
ComboBox2.Text = Nothing
ComboBox2.Enabled = True
SubtitleFormat = Nothing
pictureBox4.Enabled = False
pictureBox4.Image = My.Resources.main_button_download_deactivate
If ComboBox1.SelectedItem.ToString = "Video Stream" Then
If Main.m3u8List.Count > 0 Then
For i As Integer = 0 To Main.m3u8List.Count - 1
ComboBox2.Items.Add(Main.m3u8List.Item(i))
Next
ElseIf Main.mpdList.Count > 0 Then
If Main.mpdList.Count > 0 Then
For i As Integer = 0 To Main.mpdList.Count - 1
ComboBox2.Items.Add(Main.mpdList.Item(i))
Next
End If
End If
ElseIf ComboBox1.SelectedItem.ToString = "Subtile" Then
If Main.txtList.Count > 0 Then
For i As Integer = 0 To Main.txtList.Count - 1
ComboBox2.Items.Add(Main.txtList.Item(i))
Next
End If
End If
End Sub
Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
SubtitleFormat = Nothing
pictureBox4.Enabled = False
pictureBox4.Image = My.Resources.main_button_download_deactivate
ComboBox3.Enabled = False
ComboBox3.Items.Clear()
ComboBox3.Text = Nothing
NetworkStatusLabel.Text = "Checking input..."
Pause(1)
'If InStr(ComboBox2.Text, ".mpd") Or InStr(ComboBox2.Text, ".m3u8") Then
Dim exepath As String = Application.StartupPath + "\ffmpeg.exe"
Dim startinfo As New System.Diagnostics.ProcessStartInfo
Dim sr As StreamReader
Dim cmd As String = "-headers " + My.Resources.ffmpeg_user_agend + " -i " + Chr(34) + ComboBox2.Text + Chr(34) 'start ffmpeg with command strFFCMD string
'MsgBox(cmd)
Dim ffmpegOutput As String = Nothing
Dim ffmpegOutputLine As String = Nothing
Dim ffmpegOutputLine2 As String = Nothing
Dim NetworkScanTime As String = Nothing
' all parameters required to run the process
startinfo.FileName = exepath
startinfo.Arguments = cmd
startinfo.UseShellExecute = False
startinfo.WindowStyle = ProcessWindowStyle.Hidden
startinfo.RedirectStandardError = True
startinfo.RedirectStandardOutput = True
startinfo.CreateNoWindow = True
Dim proc As New Process
proc.StartInfo = startinfo
proc.Start() ' start the process
sr = proc.StandardError 'standard error is used by ffmpeg
Do
ffmpegOutputLine = sr.ReadLine
ffmpegOutput = ffmpegOutput + vbNewLine + ffmpegOutputLine
Loop Until proc.HasExited 'And ffmpegOutputLine = Nothing Or ffmpegOutputLine = ""
Dim ffmpegOutput2() As String = ffmpegOutput.Split(New String() {vbNewLine}, System.StringSplitOptions.RemoveEmptyEntries)
For i As Integer = 0 To ffmpegOutput2.Count - 1
If InStr(ffmpegOutput2(i), ": Video:") Then
Dim ZeileReso() As String = ffmpegOutput2(i).Split(New String() {" ["}, System.StringSplitOptions.RemoveEmptyEntries)
Dim ZeileReso2() As String = ZeileReso(0).Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries)
Dim ZeileReso3() As String = ffmpegOutput2(i).Split(New String() {": Video:"}, System.StringSplitOptions.RemoveEmptyEntries)
Dim ZeileReso4() As String = ZeileReso3(0).Split(New String() {"Stream #"}, System.StringSplitOptions.RemoveEmptyEntries)
If InStr(ZeileReso2(ZeileReso2.Count - 1), ", ") Then
Dim ZeileReso5() As String = ZeileReso2(ZeileReso2.Count - 1).Split(New String() {", "}, System.StringSplitOptions.RemoveEmptyEntries)
ComboBox3.Items.Add(ZeileReso5(0).Trim + ":--:" + ZeileReso4(1))
Else
ComboBox3.Items.Add(ZeileReso2(ZeileReso2.Count - 1).Trim + ":--:" + ZeileReso4(1))
End If
ElseIf InStr(ffmpegOutput2(i), "Duration: N/A, bitrate: N/A") Then
ElseIf InStr(ffmpegOutput2(i), "Subtitle: ") Then
Dim Format As String() = ffmpegOutput2(i).Split(New String() {"Subtitle: "}, System.StringSplitOptions.RemoveEmptyEntries)
SubtitleFormat = Format(1)
ElseIf InStr(ffmpegOutput2(i), "Duration: ") Then
Dim ZeitGesamt As String() = ffmpegOutput2(i).Split(New String() {"Duration: "}, System.StringSplitOptions.RemoveEmptyEntries)
Dim ZeitGesamt2 As String() = ZeitGesamt(1).Split(New [Char]() {System.Convert.ToChar(".")})
NetworkScanTime = ZeitGesamt2(0)
ElseIf InStr(ffmpegOutput2(i), "At least one output file must be specified") Then
ElseIf InStr(ffmpegOutput2(i), "Invalid data found when processing input") Then
NetworkStatusLabel.Text = "Invalid data found when processing input"
Exit Sub
End If
Next
If SubtitleFormat IsNot Nothing Then
NetworkStatusLabel.Text = "Subtitle found with format: " + SubtitleFormat
pictureBox4.Enabled = True
pictureBox4.Image = My.Resources.main_button_download_default
ElseIf NetworkScanTime = Nothing Then
If ComboBox3.Items.Count > 0 Then
NetworkStatusLabel.Text = "Duration check failed but it found valid streams."
ComboBox3.Enabled = True
Else
NetworkStatusLabel.Text = "No video stream found in that url."
End If
Else
NetworkStatusLabel.Text = "Video found with a duration of: " + NetworkScanTime
ComboBox3.Enabled = True
End If
End Sub
Private Sub ComboBox3_SelectedIndexChanged_1(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged
pictureBox4.Enabled = True
pictureBox4.Image = My.Resources.main_button_download_default
End Sub
Private Sub pictureBox4_Click(sender As Object, e As EventArgs) Handles pictureBox4.Click
pictureBox4.Enabled = False
pictureBox4.Image = My.Resources.main_button_download_deactivate
Dim FileName As String = Main.WebbrowserTitle.Replace(" - Watch on VRV", "").Replace("Free Streaming", "").Replace("Tubi", "")
FileName = Main.RemoveExtraSpaces(String.Join(" ", FileName.Split(Main.invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c)) 'System.Text.RegularExpressions.Regex.Replace(FileName, "[^\w\\-]", " "))
Dim FilePfad As String = Main.Pfad + "\" + FileName
Dim client0 As New WebClient
client0.Encoding = Encoding.UTF8
If Main.WebbrowserCookie = Nothing Then
Else
client0.Headers.Add(HttpRequestHeader.Cookie, Main.WebbrowserCookie)
End If
Dim RequestURL As String = ComboBox2.Text
ComboBox2.Text = Nothing
Dim RequestReso As String = Nothing
Dim RequestMap As String = Nothing
If ComboBox3.Enabled = True Then
Dim ResoSplit() As String = ComboBox3.Text.Split(New String() {":--:"}, System.StringSplitOptions.RemoveEmptyEntries)
RequestReso = ResoSplit(0)
RequestMap = ResoSplit(1)
End If
If ComboBox1.SelectedItem.ToString = "Video Stream" Then
If InStr(RequestURL, ".m3u8") Then
Main.m3u8List.Remove(RequestURL)
ElseIf InStr(RequestURL, ".mpd") Then
Main.mpdList.Remove(RequestURL)
End If
'Me.Invoke(New Action(Function()
' MsgBox(m3u8_Master_url)
' Return Nothing
' End Function))
'My.Computer.FileSystem.WriteAllText(Application.StartupPath + "\Test.txt", text, False)
Dim thumbnail As String() = Nothing
Dim thumbnail2 As String() = Nothing
Dim thumbnail4 As String = "https://abload.de/img/main-delx4krg.png"
Try
If InStr(Main.WebbrowserText, "thumbnail") Then
thumbnail = Main.WebbrowserText.Split(New String() {"thumbnail"}, System.StringSplitOptions.RemoveEmptyEntries)
End If
Catch ex As Exception
End Try
Try
For i As Integer = 0 To thumbnail.Count - 1
If InStr(thumbnail(i), ".jpg") Then
If InStr(thumbnail(i), "https:") Then
thumbnail2 = thumbnail(i).Split(New String() {".jpg"}, System.StringSplitOptions.RemoveEmptyEntries)
Dim thumbnail3 As String() = thumbnail2(0).Split(New String() {"https:"}, System.StringSplitOptions.RemoveEmptyEntries)
thumbnail4 = "https:" + thumbnail3(thumbnail3.Count - 1).Replace("&", "&").Replace("/u0026", "&").Replace("\u002F", "/").Replace("\/", "/") + ".jpg"
Exit For
End If
End If
Next
Catch ex As Exception
End Try
Dim m3u8Final As String = "-i " + Chr(34) + RequestURL + Chr(34) + " -map " + RequestMap + " -map 0:a" + Main.ffmpeg_command
If Main.HybridMode = True Then
Dim client As New WebClient
client.Encoding = System.Text.Encoding.UTF8
Dim text As String = client.DownloadString(RequestURL)
If InStr(text, "RESOLUTION=") Then 'master m3u8 no fragments
Dim new_m3u8() As String = text.Split(New String() {vbLf}, System.StringSplitOptions.RemoveEmptyEntries)
For i2 As Integer = 0 To new_m3u8.Count - 1
'MsgBox("x" + Main.Resu.ToString)
If CBool(InStr(new_m3u8(i2), "x" + RequestReso.ToString)) = True Then
m3u8Final = "-i " + Chr(34) + new_m3u8(i2 + 1) + Chr(34) + Main.ffmpeg_command
Exit For
End If
Next
End If
End If
'MsgBox(m3u8Final)
Dim DisplayReso As String = RequestReso.ToString + "p"
Dim Pfad2 As String = Chr(34) + FilePfad + Main.VideoFormat + Chr(34)
Dim Title As String = FileName '+ ".mp4"
Dim L1Name_Split As String() = Main.WebbrowserURL.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries)
Dim L1Name As String = L1Name_Split(1)
Me.Invoke(New Action(Function()
Main.ListItemAdd(Main.Pfad, L1Name, Title, DisplayReso, "Unknown", "None", thumbnail4, m3u8Final, Pfad2)
Main.liList.Add(My.Resources.htmlvorThumbnail + thumbnail4 + My.Resources.htmlnachTumbnail + "<br>" + Title + My.Resources.htmlvorAufloesung + "[Auto]" + My.Resources.htmlvorSoftSubs + vbNewLine + "None" + My.Resources.htmlvorHardSubs + "null" + My.Resources.htmlnachHardSubs + "<!-- " + Title + "-->")
Return Nothing
End Function))
ElseIf ComboBox1.SelectedItem.ToString = "Subtile" Then
Dim CheckFile As String = Nothing
Main.txtList.Remove(RequestURL)
If SubtitleFormat IsNot Nothing Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + "." + SubtitleFormat)
CheckFile = FilePfad + "." + SubtitleFormat
ElseIf InStr(RequestURL, ".txt") Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".txt")
CheckFile = FilePfad + ".txt"
ElseIf InStr(RequestURL, ".vtt") Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".vtt")
CheckFile = FilePfad + ".vtt"
ElseIf InStr(RequestURL, ".srt") Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".srt")
CheckFile = FilePfad + ".srt"
ElseIf InStr(RequestURL, ".ass") Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".ass")
CheckFile = FilePfad + ".ass"
ElseIf InStr(RequestURL, ".ssa") Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".ssa")
CheckFile = FilePfad + ".ssa"
ElseIf InStr(RequestURL, ".dfxp") Then
client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".dfxp")
CheckFile = FilePfad + ".dfxp"
End If
Pause(5)
If File.Exists(CheckFile) Then
NetworkStatusLabel.Text = "Subtitles have been Downloaded"
Else
Pause(5)
If File.Exists(CheckFile) Then
NetworkStatusLabel.Text = "Subtitles have been Downloaded"
Else
'NetworkStatusLabel.Text = "Subtitles have been Downloaded"
End If
End If
End If
End Sub
Private Sub ComboBox2_Click(sender As Object, e As EventArgs) Handles ComboBox2.Click
ComboBox3.Enabled = False
ComboBox3.Items.Clear()
ComboBox3.Text = Nothing
ComboBox2.Items.Clear()
ComboBox2.Text = Nothing
SubtitleFormat = Nothing
pictureBox4.Enabled = False
pictureBox4.Image = My.Resources.main_button_download_deactivate
If ComboBox1.SelectedItem.ToString = "Video Stream" Then
If Main.m3u8List.Count > 0 Then
For i As Integer = 0 To Main.m3u8List.Count - 1
ComboBox2.Items.Add(Main.m3u8List.Item(i))
Next
ElseIf Main.mpdList.Count > 0 Then
If Main.mpdList.Count > 0 Then
For i As Integer = 0 To Main.mpdList.Count - 1
ComboBox2.Items.Add(Main.mpdList.Item(i))
Next
End If
End If
ElseIf ComboBox1.SelectedItem.ToString = "Subtile" Then
If Main.txtList.Count > 0 Then
For i As Integer = 0 To Main.txtList.Count - 1
ComboBox2.Items.Add(Main.txtList.Item(i))
Next
End If
End If
End Sub
End Class