mirror of
https://github.com/hama3254/Crunchyroll-Downloader-v3.0.git
synced 2024-11-10 18:25:05 +01:00
2bf5ee0a4c
beta for Crunchyroll beta improved code for any network scan related tasks added simple adblock (via domain list) possible errorhandling certificate issues
1385 lines
59 KiB
VB.net
1385 lines
59 KiB
VB.net
Imports System.Net
|
|
Imports System.Text
|
|
Imports System.IO
|
|
Imports System.Threading
|
|
Imports Microsoft.Win32
|
|
Imports System.ComponentModel
|
|
Imports MetroFramework
|
|
Imports MetroFramework.Components
|
|
Imports MetroFramework.Forms
|
|
|
|
|
|
Public Class CRD_List_Item
|
|
Inherits Controls.MetroUserControl
|
|
|
|
|
|
|
|
|
|
Dim ZeitGesamtInteger As Integer = 0
|
|
Dim ListOfStreams As New List(Of String)
|
|
Dim proc As Process
|
|
Dim ThreadList As New List(Of Thread)
|
|
Dim Item_ErrorTolerance As Integer
|
|
Dim Canceld As Boolean = False
|
|
Dim Finished As Boolean = False
|
|
Dim Label_website_Text As String = Nothing
|
|
Dim StatusRunning As Boolean = True
|
|
Dim ffmpeg_command As String = Nothing
|
|
Dim Debug2 As Boolean = False
|
|
Dim MergeSubstoMP4 As Boolean = False
|
|
|
|
Dim DownloadPfad As String = Nothing
|
|
Dim ToDispose As Boolean = False
|
|
Dim Failed As Boolean = False
|
|
Dim FailedCount As Integer = 0
|
|
Dim HistoryDL_URL As String
|
|
Dim HistoryDL_Pfad As String
|
|
Dim HistoryFilename As String
|
|
Dim Retry As Boolean = False
|
|
Dim HybridMode As Boolean = False
|
|
Dim HybridModePath As String = Nothing
|
|
Dim HybridRunning As Boolean = False
|
|
Dim TargetReso As Integer = 1080
|
|
Dim HybrideLog As String = Nothing
|
|
Dim Service As String = "CR"
|
|
Dim ServiceSleep As Integer = 0
|
|
|
|
Dim LastDate As Date = Date.Now
|
|
Dim LastSize As Double = 0
|
|
Dim LastDataRate1 As Double = 0
|
|
Dim LastDataRate2 As Double = 0
|
|
Dim LastDataRate3 As Double = 0
|
|
|
|
Dim FailedSegments As New List(Of FailedSegemtsWithURL)
|
|
Dim LogText As New List(Of String)
|
|
#Region "Remove from list"
|
|
Public Sub DisposeItem(ByVal Dispose As Boolean)
|
|
If Dispose = True Then
|
|
Me.Dispose()
|
|
End If
|
|
End Sub
|
|
Public Function GetToDispose() As Boolean
|
|
Return ToDispose
|
|
End Function
|
|
#End Region
|
|
#Region "UI"
|
|
|
|
Private Sub CRD_List_Item_Resize(sender As Object, e As EventArgs) Handles Me.Resize
|
|
bt_del.SetBounds(775, 10, 35, 29)
|
|
bt_pause.SetBounds(740, 15, 25, 20)
|
|
PB_Thumbnail.SetBounds(11, 20, 168, 95)
|
|
PB_Thumbnail.BringToFront()
|
|
Label_website.Location = New Point(195, 12)
|
|
Label_Anime.Location = New Point(195, 40)
|
|
Label_Reso.Location = New Point(195, 97)
|
|
Label_Hardsub.Location = New Point(265, 97)
|
|
Label_percent.SetBounds(Me.Width - 400, 97, 378, 27)
|
|
Label_percent.AutoSize = False
|
|
ProgressBar1.SetBounds(195, 70, 601, 20)
|
|
PictureBox5.Location = New Point(0, 136)
|
|
PictureBox5.Height = 6
|
|
|
|
If Service = "AoD" Then
|
|
MetroStyleManager1.Style = MetroColorStyle.LightGreen
|
|
ServiceSleep = 1000
|
|
ElseIf Service = "FM" Then
|
|
MetroStyleManager1.Style = MetroColorStyle.DarkPurple
|
|
Else
|
|
MetroStyleManager1.Style = MetroColorStyle.Orange
|
|
End If
|
|
MetroStyleManager1.Theme = Main.Manager.Theme
|
|
MetroStyleManager1.Owner = Me
|
|
Me.StyleManager = MetroStyleManager1
|
|
|
|
|
|
PictureBox5.Width = Me.Width - 40
|
|
|
|
bt_del.Location = New Point(Me.Width - 63, 10)
|
|
bt_pause.Location = New Point(Me.Width - 98, 15)
|
|
|
|
ProgressBar1.Width = Me.Width - 223
|
|
|
|
End Sub
|
|
|
|
|
|
Public Sub SetLabelWebsite(ByVal Text As String)
|
|
Label_website.Text = Text
|
|
Label_website_Text = Text
|
|
End Sub
|
|
|
|
Public Sub SetTheme(ByVal Theme As MetroThemeStyle)
|
|
MetroStyleManager1.Theme = Theme
|
|
End Sub
|
|
|
|
Public Sub SetTolerance(ByVal value As Integer)
|
|
Item_ErrorTolerance = value
|
|
End Sub
|
|
Public Sub SetLabelAnimeTitel(ByVal Text As String)
|
|
Label_Anime.Text = Text
|
|
End Sub
|
|
Public Sub SetLabelResolution(ByVal Text As String)
|
|
Label_Reso.Text = Text
|
|
End Sub
|
|
Public Sub SetLabelHardsub(ByVal Text As String)
|
|
Label_Hardsub.Text = Text
|
|
End Sub
|
|
Public Sub SetLabelPercent(ByVal Text As String)
|
|
Label_percent.Text = Text
|
|
End Sub
|
|
Public Sub SetThumbnailImage(ByVal Thumbnail As Image)
|
|
PB_Thumbnail.BackgroundImage = Thumbnail
|
|
End Sub
|
|
#End Region
|
|
#Region "Get Variables"
|
|
Public Function GetPauseStatus() As Boolean
|
|
Return StatusRunning
|
|
End Function
|
|
Public Function GetIsStatusFinished() As Boolean
|
|
If Canceld = True Then
|
|
Return True
|
|
ElseIf HybridRunning = True Then
|
|
Return False
|
|
Else
|
|
If proc.HasExited = True Then
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
End If
|
|
|
|
End Function
|
|
Public Function GetLabelPercent()
|
|
Try
|
|
Return Label_percent.Text
|
|
Catch ex As Exception
|
|
Return 0
|
|
End Try
|
|
|
|
End Function
|
|
Public Function GetPercentValue()
|
|
Try
|
|
Return ProgressBar1.Value
|
|
Catch ex As Exception
|
|
|
|
Return 0
|
|
End Try
|
|
|
|
End Function
|
|
Public Function GetNameAnime()
|
|
Try
|
|
Return Label_Anime.Text
|
|
Catch ex As Exception
|
|
Return "error"
|
|
End Try
|
|
|
|
End Function
|
|
#End Region
|
|
#Region "Set Variables"
|
|
Public Sub Setffmpeg_command(ByVal Value As String)
|
|
ffmpeg_command = Value
|
|
End Sub
|
|
Public Sub SetMergeSubstoMP4(ByVal Value As Boolean)
|
|
MergeSubstoMP4 = Value
|
|
End Sub
|
|
Public Sub SetDebug2(ByVal Value As Boolean)
|
|
Debug2 = Value
|
|
End Sub
|
|
|
|
Public Sub SetTargetReso(ByVal Value As Integer)
|
|
TargetReso = Value
|
|
End Sub
|
|
Public Sub SetService(ByVal Value As String)
|
|
Service = Value
|
|
End Sub
|
|
#End Region
|
|
Public Sub KillRunningTask()
|
|
If HybridRunning = True Then
|
|
Canceld = True
|
|
Else
|
|
Try
|
|
If proc.HasExited Then
|
|
Else
|
|
proc.Kill()
|
|
proc.WaitForExit(500)
|
|
Label_percent.Text = "canceled -%"
|
|
End If
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub BT_del_MouseEnter(sender As Object, e As EventArgs) Handles bt_del.MouseEnter
|
|
Dim p As PictureBox = sender
|
|
p.BackgroundImage = My.Resources.main_del_hover
|
|
End Sub
|
|
|
|
Private Sub BT_del_MouseLeave(sender As Object, e As EventArgs) Handles bt_del.MouseLeave
|
|
Dim p As PictureBox = sender
|
|
p.BackgroundImage = My.Resources.main_del
|
|
End Sub
|
|
Private Sub BT_pause_MouseEnter(sender As Object, e As EventArgs) Handles bt_pause.MouseEnter
|
|
Dim p As PictureBox = sender
|
|
If StatusRunning = True Then
|
|
p.BackgroundImage = My.Resources.main_pause_hover
|
|
Else
|
|
p.BackgroundImage = My.Resources.main_pause_play_hover
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub BT_pause_MouseLeave(sender As Object, e As EventArgs) Handles bt_pause.MouseLeave
|
|
Dim p As PictureBox = sender
|
|
If StatusRunning = True Then
|
|
p.BackgroundImage = My.Resources.main_pause
|
|
Else
|
|
p.BackgroundImage = My.Resources.main_pause_play
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub BT_pause_Click(sender As Object, e As EventArgs) Handles bt_pause.Click
|
|
If Canceld = True And HybridRunning = True Then
|
|
|
|
If Main.RunningDownloads < Main.MaxDL Then
|
|
|
|
Else
|
|
If MessageBox.Show("You have currtenly on your set Download limit." + vbNewLine + " You can Press OK to ignore it.", "Download maximum reached", MessageBoxButtons.OKCancel) = DialogResult.Cancel Then
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
Canceld = False
|
|
'If My.Computer.FileSystem.FileExists(HistoryDL_Pfad.Replace(Chr(34), "")) Then 'Pfad = Kompeltter Pfad mit Dateinamen + ENdung
|
|
' Try
|
|
' My.Computer.FileSystem.DeleteFile(HistoryDL_Pfad.Replace(Chr(34), ""))
|
|
' Catch ex As Exception
|
|
' End Try
|
|
'End If
|
|
StartDownload(HistoryDL_URL, HistoryDL_Pfad, HistoryFilename, HybridMode)
|
|
StatusRunning = True
|
|
Label_website.Text = Label_website_Text
|
|
Exit Sub
|
|
ElseIf HybridRunning = True Then
|
|
If StatusRunning = True Then
|
|
StatusRunning = False
|
|
bt_pause.BackgroundImage = My.Resources.main_pause_play
|
|
|
|
ElseIf Failed = True Then
|
|
Dim Result As DialogResult = MessageBox.Show("The hybride mode has failed to download a fragment." + vbNewLine + "Press 'Retry' to retry the fragment or 'Ignore' to continue.", "Download Error", MessageBoxButtons.AbortRetryIgnore) '= DialogResult.Ignore Then
|
|
|
|
If Result = DialogResult.Ignore Then
|
|
Failed = False
|
|
StatusRunning = True
|
|
bt_pause.BackgroundImage = My.Resources.main_pause
|
|
FailedSegments.Clear()
|
|
ElseIf Result = DialogResult.Retry Then
|
|
If FailedSegments.Count > 0 Then
|
|
For i As Integer = 0 To FailedSegments.Count - 1
|
|
Dim ii As Integer = i
|
|
Dim Evaluator = New Thread(Sub() Me.TS_DownloadAsync(FailedSegments.Item(ii).url, FailedSegments.Item(ii).path))
|
|
FailedSegments.RemoveAt(i)
|
|
Evaluator.Start()
|
|
ThreadList.Add(Evaluator)
|
|
Next
|
|
Failed = False
|
|
StatusRunning = True
|
|
bt_pause.BackgroundImage = My.Resources.main_pause
|
|
End If
|
|
ElseIf Result = DialogResult.Abort Then
|
|
If MessageBox.Show("Are you sure you want to cancel the Download?", "Cancel Download!", MessageBoxButtons.YesNo) = DialogResult.No Then
|
|
Exit Sub
|
|
End If
|
|
Canceld = True
|
|
End If
|
|
|
|
Else
|
|
StatusRunning = True
|
|
bt_pause.BackgroundImage = My.Resources.main_pause
|
|
End If
|
|
|
|
Else
|
|
If proc.HasExited = True Then
|
|
If ProgressBar1.Value < 100 Then
|
|
If Retry = True Then
|
|
If Main.RunningDownloads < Main.MaxDL Then
|
|
|
|
Else
|
|
If MessageBox.Show("You have currtenly on your set Download limit." + vbNewLine + " You can Press OK to ignore it.", "Download maximum reached", MessageBoxButtons.OKCancel) = DialogResult.Cancel Then
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
If My.Computer.FileSystem.FileExists(HistoryDL_Pfad.Replace(Chr(34), "")) Then 'Pfad = Kompeltter Pfad mit Dateinamen + ENdung
|
|
Try
|
|
My.Computer.FileSystem.DeleteFile(HistoryDL_Pfad.Replace(Chr(34), ""))
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
StartDownload(HistoryDL_URL, HistoryDL_Pfad, HistoryFilename, HybridMode)
|
|
StatusRunning = True
|
|
Label_website.Text = Label_website_Text
|
|
Else
|
|
MsgBox("The download process seems to have crashed", MsgBoxStyle.Exclamation)
|
|
Label_percent.Text = "Press the play button again to retry."
|
|
ProgressBar1.Value = 0
|
|
Retry = True
|
|
StatusRunning = False
|
|
End If
|
|
|
|
Else
|
|
End If
|
|
Exit Sub
|
|
End If
|
|
If StatusRunning = True Then
|
|
StatusRunning = False
|
|
bt_pause.BackgroundImage = My.Resources.main_pause_play
|
|
SuspendProcess(proc)
|
|
Else
|
|
If Failed = True Then
|
|
'If HybridMode = True Then
|
|
|
|
'Else
|
|
Dim Result As DialogResult = MessageBox.Show("The download has " + FailedCount.ToString + " failded segments" + vbNewLine + "Press 'Ignore' to continue", "Download Error", MessageBoxButtons.AbortRetryIgnore) '= DialogResult.Ignore Then
|
|
|
|
If Result = DialogResult.Ignore Then
|
|
Failed = False
|
|
StatusRunning = True
|
|
bt_pause.BackgroundImage = My.Resources.main_pause
|
|
ResumeProcess(proc)
|
|
ElseIf Result = DialogResult.Retry Then
|
|
Try
|
|
proc.Kill()
|
|
proc.WaitForExit(500)
|
|
Label_percent.Text = "retrying -%"
|
|
Label_website.Text = Label_website_Text
|
|
Catch ex As Exception
|
|
End Try
|
|
|
|
If proc.HasExited Then
|
|
StartDownload(HistoryDL_URL, HistoryDL_Pfad, HistoryFilename, HybridMode)
|
|
StatusRunning = True
|
|
Label_website.Text = Label_website_Text
|
|
bt_pause.BackgroundImage = My.Resources.main_pause
|
|
End If
|
|
ElseIf Result = DialogResult.Abort Then
|
|
Try
|
|
proc.Kill()
|
|
proc.WaitForExit(500)
|
|
Label_percent.Text = "canceled -%"
|
|
Label_website.Text = Label_website_Text
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
' End If
|
|
Else
|
|
If StatusRunning = True Then
|
|
StatusRunning = False
|
|
bt_pause.BackgroundImage = My.Resources.main_pause_play
|
|
SuspendProcess(proc)
|
|
Else
|
|
StatusRunning = True
|
|
bt_pause.BackgroundImage = My.Resources.main_pause
|
|
ResumeProcess(proc)
|
|
End If
|
|
End If
|
|
|
|
End If
|
|
End If
|
|
|
|
End Sub
|
|
Public Sub SetToolTip(ByVal Text As String)
|
|
ToolTip1.SetToolTip(Me, Text)
|
|
End Sub
|
|
Private Sub Item_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Me.ContextMenuStrip = ContextMenuStrip1 '.ContextMenu
|
|
'bt_del.SetBounds(775, 10, 35, 29)
|
|
'bt_pause.SetBounds(740, 15, 25, 20)
|
|
'PB_Thumbnail.SetBounds(11, 20, 168, 95)
|
|
'PB_Thumbnail.BringToFront()
|
|
'Label_website.Location = New Point(195, 15)
|
|
'Label_Anime.Location = New Point(195, 37)
|
|
'Label_Reso.Location = New Point(195, 97)
|
|
'Label_Hardsub.Location = New Point(265, 97)
|
|
'Label_percent.SetBounds(432, 97, 378, 27)
|
|
'Label_percent.AutoSize = False
|
|
'ProgressBar1.SetBounds(195, 70, 601, 20)
|
|
'PictureBox5.Location = New Point(0, 136)
|
|
'PictureBox5.Height = 6
|
|
|
|
|
|
'MetroStyleManager1.Theme = Main.Manager.Theme
|
|
End Sub
|
|
|
|
Public Function GetTextBound()
|
|
'Return Label_website.Location.Y
|
|
Return bt_del.Size.Height
|
|
End Function
|
|
|
|
|
|
#Region "Download + Update UI"
|
|
|
|
Public Sub StartDownload(ByVal DL_URL As String, ByVal DL_Pfad As String, ByVal Filename As String, ByVal DownloadHybridMode As Boolean)
|
|
'MsgBox(DL_URL)
|
|
|
|
Me.StyleManager = MetroStyleManager1
|
|
|
|
DownloadPfad = DL_Pfad
|
|
HistoryDL_URL = DL_URL
|
|
HistoryDL_Pfad = DL_Pfad
|
|
HistoryFilename = Filename
|
|
If InStr(DL_URL, "-i [Subtitles only]") Then
|
|
Me.Invoke(New Action(Function()
|
|
|
|
ProgressBar1.Value = 100
|
|
Label_percent.Text = "selected subtiles have been dowloaded"
|
|
Canceld = True
|
|
PlaybackVideoFileToolStripMenuItem.Enabled = False
|
|
LogTocClipboard.Enabled = False
|
|
SaveToFile.Enabled = False
|
|
Return Nothing
|
|
End Function))
|
|
ElseIf DownloadHybridMode = True Then
|
|
Dim Evaluator = New Thread(Sub() DownloadHybrid(DL_URL, DL_Pfad, Filename))
|
|
Evaluator.Start()
|
|
HybridMode = True
|
|
HybridRunning = True
|
|
Else
|
|
DownloadFFMPEG(DL_URL, DL_Pfad, Filename)
|
|
End If
|
|
|
|
End Sub
|
|
|
|
#Region "Download Cache"
|
|
|
|
Public WithEvents WC_TS As WebClient
|
|
|
|
|
|
|
|
Private Sub TS_DownloadAsync(ByVal DL_URL As String, ByVal DL_Pfad As String)
|
|
HybrideLog = HybrideLog + vbNewLine + DL_Pfad + " - " + DL_URL
|
|
Try
|
|
'Dim wc_ts As New WebClient
|
|
WC_TS = New WebClient
|
|
|
|
WC_TS.DownloadFile(New Uri(DL_URL), DL_Pfad)
|
|
Catch ex As Exception
|
|
Debug.WriteLine("Download error #1: " + DL_Pfad)
|
|
Try
|
|
Dim wc_ts As New WebClient
|
|
wc_ts.DownloadFile(New Uri(DL_URL), DL_Pfad)
|
|
Catch ex2 As Exception
|
|
FailedCount = FailedCount + 1
|
|
If Item_ErrorTolerance = 0 Then
|
|
|
|
ElseIf FailedCount >= Item_ErrorTolerance Then
|
|
FailedSegments.Add(New FailedSegemtsWithURL(DL_Pfad, DL_URL))
|
|
Failed = True
|
|
StatusRunning = False
|
|
bt_pause.BackgroundImage = My.Resources.main_pause_play
|
|
Me.Invoke(New Action(Function()
|
|
|
|
Label_percent.Text = "Missing segment detected, retry or resume with the play button"
|
|
Return Nothing
|
|
End Function))
|
|
End If
|
|
|
|
|
|
Debug.WriteLine("Download error #2: " + DL_Pfad + vbNewLine + ex2.ToString + vbNewLine + DL_URL)
|
|
End Try
|
|
End Try
|
|
|
|
End Sub
|
|
Private Function TS_StatusAsync(ByVal prozent As Integer, ByVal di As IO.DirectoryInfo, ByVal Filename As String, ByVal pausetime As Integer)
|
|
'Dim Now As Date = Date.Now
|
|
|
|
Dim FinishedSize As Double = 0
|
|
Dim AproxFinalSize As Double = 0
|
|
|
|
Try
|
|
|
|
Dim aryFi As IO.FileInfo() = di.GetFiles("*.ts")
|
|
Dim fi As IO.FileInfo
|
|
For Each fi In aryFi
|
|
FinishedSize = FinishedSize + fi.Length 'Math.Round(fi.Length / 1048576, 2, MidpointRounding.AwayFromZero).ToString()
|
|
Next
|
|
Catch ex As Exception
|
|
End Try
|
|
''Thread.Sleep(1000)
|
|
''Pause(1)
|
|
|
|
If prozent > 0 Then
|
|
AproxFinalSize = Math.Round((FinishedSize / 1048576) * 100 / prozent, 2, MidpointRounding.AwayFromZero).ToString() ' Math.Round( / 1048576, 2, MidpointRounding.AwayFromZero).ToString()
|
|
End If
|
|
|
|
'Dim duration As TimeSpan = Date.Now - di.CreationTime
|
|
'Dim TimeinSeconds As Integer = duration.Hours * 3600 + duration.Minutes * 60 + duration.Seconds
|
|
'TimeinSeconds = TimeinSeconds - pausetime
|
|
'Dim DataRate As Double = FinishedSize / TimeinSeconds
|
|
'Dim DataRateString As String = Math.Round(DataRate, 2, MidpointRounding.AwayFromZero).ToString()
|
|
Dim duration As TimeSpan = Date.Now - LastDate
|
|
Dim TimeinMilliSeconds As Integer = duration.Seconds * 1000 + duration.Milliseconds
|
|
|
|
If FinishedSize = LastSize Then
|
|
ElseIf TimeinMilliSeconds < 250 Then
|
|
Else
|
|
|
|
|
|
LastDate = Date.Now
|
|
'TimeinSeconds = TimeinSeconds - pausetime
|
|
Dim SinceLast = FinishedSize - LastSize
|
|
LastSize = FinishedSize
|
|
|
|
Dim DataRate As Double = (SinceLast / 1048576) / (TimeinMilliSeconds / 1000)
|
|
Dim DataRateFinal As Double = (DataRate + LastDataRate1 + LastDataRate2 + LastDataRate3) / 4
|
|
LastDataRate3 = LastDataRate2
|
|
LastDataRate2 = LastDataRate1
|
|
LastDataRate1 = DataRate
|
|
Dim DataRateString As String = Math.Round(DataRateFinal, 2, MidpointRounding.AwayFromZero).ToString()
|
|
|
|
'Debug.WriteLine("----------------")
|
|
'Debug.WriteLine(SinceLast)
|
|
'Debug.WriteLine(TimeinMilliSeconds)
|
|
'Debug.WriteLine(DataRate)
|
|
If prozent > 100 Then
|
|
prozent = 100
|
|
ElseIf prozent < 0 Then
|
|
prozent = 0
|
|
End If
|
|
Try
|
|
Me.Invoke(New Action(Function()
|
|
|
|
ProgressBar1.Value = prozent 'ThreadList.Count.ToString + " " +
|
|
Label_percent.Text = DataRateString + "MB\s " + Math.Round(FinishedSize / 1048576, 2, MidpointRounding.AwayFromZero).ToString + "MB/" + Math.Round(AproxFinalSize, 2, MidpointRounding.AwayFromZero).ToString + "MB " + prozent.ToString + "%"
|
|
|
|
Return Nothing
|
|
End Function))
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
'RaiseEvent UpdateUI(Filename, prozent, FinishedSize, AproxFinalSize, Color.FromArgb(247, 140, 37), DataRateString + "MB\s")
|
|
|
|
Return Nothing
|
|
|
|
End Function
|
|
|
|
Public Function DownloadHybrid(ByVal DL_URL As String, ByVal DL_Pfad As String, ByVal Filename As String) As String
|
|
MsgBox(DL_URL)
|
|
Dim Folder As String = Einstellungen.GeräteID()
|
|
Dim Pfad2 As String = Path.GetDirectoryName(DL_Pfad.Replace(Chr(34), "")) + "\" + Folder + "\"
|
|
If Not Directory.Exists(Path.GetDirectoryName(Pfad2)) Then
|
|
' Nein! Jetzt erstellen...
|
|
Try
|
|
Directory.CreateDirectory(Path.GetDirectoryName(Pfad2))
|
|
Catch ex As Exception
|
|
MsgBox("Temp folder creation failed")
|
|
Return Nothing
|
|
Exit Function
|
|
' Ordner wurde nich erstellt
|
|
'Pfad2 = Pfad + "\" + CR_FilenName_Backup + ".mp4"
|
|
End Try
|
|
End If
|
|
Dim MergeSub As String() = DL_URL.Split(New String() {"-i " + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
If MergeSub.Count > 1 Then
|
|
Me.Invoke(New Action(Function()
|
|
Label_percent.Text = "Downloading Subtitles..."
|
|
Return Nothing
|
|
End Function))
|
|
|
|
For i As Integer = 1 To MergeSub.Count - 1
|
|
Dim SubsURL As String() = MergeSub(i).Split(New [Char]() {Chr(34)})
|
|
Dim SubsClient As New WebClient
|
|
SubsClient.Encoding = Encoding.UTF8
|
|
If Main.WebbrowserCookie = Nothing Then
|
|
Else
|
|
SubsClient.Headers.Add(HttpRequestHeader.Cookie, Main.WebbrowserCookie)
|
|
End If
|
|
Dim SubsFile As String = Einstellungen.GeräteID() + ".txt"
|
|
|
|
Dim retry As Boolean = True
|
|
Dim retryCount As Integer = 3
|
|
While retry
|
|
Try
|
|
SubsClient.DownloadFile(SubsURL(0), Pfad2 + "\" + SubsFile)
|
|
retry = False
|
|
Catch ex As Exception
|
|
If retryCount > 0 Then
|
|
retryCount = retryCount - 1
|
|
Me.Invoke(New Action(Function()
|
|
Label_percent.Text = "Error Downloading Subtitles - retrying"
|
|
Return Nothing
|
|
End Function))
|
|
|
|
Else
|
|
Dim utf8WithoutBom2 As New System.Text.UTF8Encoding(False)
|
|
Using sink As New StreamWriter(SubsFile, False, utf8WithoutBom2)
|
|
sink.WriteLine(My.Resources.ass_template)
|
|
End Using
|
|
retry = False
|
|
End If
|
|
End Try
|
|
End While
|
|
DL_URL = DL_URL.Replace(SubsURL(0), Pfad2 + "\" + SubsFile)
|
|
Next
|
|
|
|
End If
|
|
Dim m3u8_url As String() = DL_URL.Split(New [Char]() {Chr(34)})
|
|
Dim m3u8_url_1 As String = Nothing
|
|
Dim m3u8_url_3 As String = m3u8_url(1)
|
|
If Debug2 = True Then
|
|
MsgBox(m3u8_url(1) + vbNewLine + DL_Pfad + vbNewLine + Filename)
|
|
End If
|
|
'Dim client0 As New WebClient
|
|
'client0.Encoding = Encoding.UTF8
|
|
Dim text As String = Nothing
|
|
'Try
|
|
' text = client0.DownloadString(m3u8_url(1))
|
|
'Catch ex As Exception
|
|
' Me.Invoke(New Action(Function()
|
|
' Label_website.Text = "Hybrid mode error"
|
|
' Label_percent.Text = ex.ToString
|
|
' Return Nothing
|
|
' End Function))
|
|
' Return Nothing
|
|
' Exit Function
|
|
'End Try
|
|
|
|
|
|
Try
|
|
Using client As New WebClient()
|
|
client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), ""))
|
|
client.Headers.Add("ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
|
|
client.Headers.Add("ACCEPT-ENCODING: *")
|
|
'client.DownloadFile(TextBox1.Text, "test.m3u8")
|
|
|
|
'Dim archive As Zipfi = New ZipArchive(ms)
|
|
'Dim m3u8String As String = client.DownloadString(TextBox1.Text)
|
|
'MsgBox(DL_URL)
|
|
'MsgBox(m3u8_url(1))
|
|
Try
|
|
Dim m3u8 As String = DecompressString(client.DownloadData(m3u8_url(1)))
|
|
text = m3u8
|
|
Catch ex As Exception
|
|
Dim m3u8 As String = client.DownloadString(m3u8_url(1))
|
|
text = m3u8
|
|
End Try
|
|
|
|
'MsgBox(m3u8)
|
|
End Using
|
|
Catch ex As Exception
|
|
MsgBox(ex.ToString)
|
|
End Try
|
|
|
|
If InStr(text, "RESOLUTION=") Then 'master m3u8 no fragments
|
|
'My.Computer.FileSystem.WriteAllText(Application.StartupPath + "\log.txt", text, False)
|
|
Dim new_m3u8_2() As String = text.Split(New String() {vbLf}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
If TargetReso = 42 Then
|
|
TargetReso = 1080
|
|
End If
|
|
|
|
For i As Integer = 0 To new_m3u8_2.Count - 1
|
|
'MsgBox("x" + Main.Resu.ToString)
|
|
If CBool(InStr(new_m3u8_2(i), "x" + TargetReso.ToString)) = True Then
|
|
m3u8_url_1 = new_m3u8_2(i + 1)
|
|
Exit For
|
|
End If
|
|
Next
|
|
If InStr(m3u8_url_1, "https://") Then
|
|
Try
|
|
Using client As New WebClient()
|
|
client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), ""))
|
|
client.Headers.Add("ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
|
|
client.Headers.Add("ACCEPT-ENCODING: *")
|
|
'client.DownloadFile(TextBox1.Text, "test.m3u8")
|
|
|
|
'Dim archive As Zipfi = New ZipArchive(ms)
|
|
'Dim m3u8String As String = client.DownloadString(TextBox1.Text)
|
|
Try
|
|
Dim m3u8 As String = DecompressString(client.DownloadData(m3u8_url(1)))
|
|
text = m3u8
|
|
Catch ex As Exception
|
|
Dim m3u8 As String = client.DownloadString(m3u8_url(1))
|
|
text = m3u8
|
|
End Try
|
|
'Dim m3u8 As String = DecompressString(client.DownloadData(m3u8_url(1)))
|
|
'text = m3u8
|
|
'MsgBox(m3u8)
|
|
End Using
|
|
Catch ex As Exception
|
|
MsgBox(ex.ToString)
|
|
End Try
|
|
Else
|
|
'MsgBox("false postive")
|
|
Dim c() As String = New Uri(m3u8_url_3).Segments
|
|
Dim path As String = "https://" + New Uri(m3u8_url_3).Host
|
|
For i3 As Integer = 0 To c.Count - 2
|
|
path = path + c(i3)
|
|
Next
|
|
m3u8_url_3 = path + m3u8_url_1
|
|
'MsgBox(m3u8_url_3)
|
|
Try
|
|
Using client As New WebClient()
|
|
client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), ""))
|
|
client.Headers.Add("ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
|
|
client.Headers.Add("ACCEPT-ENCODING: *")
|
|
'client.DownloadFile(TextBox1.Text, "test.m3u8")
|
|
|
|
'Dim archive As Zipfi = New ZipArchive(ms)
|
|
'Dim m3u8String As String = client.DownloadString(TextBox1.Text)
|
|
Try
|
|
Dim m3u8 As String = DecompressString(client.DownloadData(m3u8_url(1)))
|
|
text = m3u8
|
|
Catch ex As Exception
|
|
Dim m3u8 As String = client.DownloadString(m3u8_url(1))
|
|
text = m3u8
|
|
End Try
|
|
'MsgBox(m3u8)
|
|
End Using
|
|
Catch ex As Exception
|
|
MsgBox(ex.ToString)
|
|
End Try
|
|
End If
|
|
|
|
|
|
|
|
End If
|
|
Dim LoadedKeys As New List(Of String)
|
|
LoadedKeys.Add("Nothing")
|
|
Dim KeyFileCache As String = Nothing
|
|
Dim textLenght() As String = text.Split(New String() {vbLf}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim Fragments() As String = text.Split(New String() {".ts"}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim FragmentsInt As Integer = Fragments.Count - 2
|
|
Dim nummerint As Integer = 0 '-1
|
|
Dim m3u8FFmpeg As String = Nothing
|
|
Dim ts_dl As String = Nothing
|
|
|
|
HybridModePath = Pfad2
|
|
If Debug2 = True Then
|
|
MsgBox(Pfad2)
|
|
End If
|
|
Dim PauseTime As Integer = 0
|
|
Dim Threads As Integer = Environment.ProcessorCount / 2 - 1
|
|
If Threads < 2 Then
|
|
Threads = 2
|
|
End If
|
|
'Threads = textLenght.Length / 20
|
|
Dim di As New IO.DirectoryInfo(Pfad2)
|
|
For i As Integer = 0 To textLenght.Length - 1
|
|
If InStr(textLenght(i), ".ts") Then
|
|
For w As Integer = 0 To Integer.MaxValue
|
|
|
|
If StatusRunning = False Then
|
|
'MsgBox(True.ToString)
|
|
Thread.Sleep(5000)
|
|
PauseTime = PauseTime + 5
|
|
ElseIf ThreadList.Count > Threads Then
|
|
Thread.Sleep(50)
|
|
ElseIf Canceld = True Then
|
|
For www As Integer = 0 To Integer.MaxValue
|
|
If ThreadList.Count > 0 Then
|
|
Thread.Sleep(250)
|
|
Else
|
|
Try
|
|
System.IO.Directory.Delete(HybridModePath, True)
|
|
Catch ex As Exception
|
|
End Try
|
|
Me.Invoke(New Action(Function()
|
|
ProgressBar1.Value = 0
|
|
Label_percent.Text = "canceled -%"
|
|
bt_pause.BackgroundImage = My.Resources.main_pause_play
|
|
Return Nothing
|
|
End Function))
|
|
Exit For
|
|
End If
|
|
Next
|
|
Return Nothing
|
|
Exit Function
|
|
'ElseIf nummerint < Threads Then
|
|
' Thread.Sleep(2000)
|
|
' Exit For
|
|
Else
|
|
Thread.Sleep(ServiceSleep)
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
nummerint = nummerint + 1
|
|
Dim nummer4D As String = String.Format("{0:0000}", nummerint)
|
|
Dim curi As String = textLenght(i)
|
|
If InStr(curi, "https://") Then
|
|
ElseIf InStr(curi, "../") Then
|
|
Dim countDot() As String = curi.Split(New String() {"./"}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
|
|
Dim c() As String = New Uri(m3u8_url_3).Segments
|
|
Dim path As String = "https://" + New Uri(m3u8_url_3).Host
|
|
For i3 As Integer = 0 To c.Count - (2 + countDot.Count - 1)
|
|
path = path + c(i3)
|
|
Next
|
|
curi = path + countDot(countDot.Count - 1)
|
|
Else
|
|
Dim c() As String = New Uri(m3u8_url_3).Segments
|
|
Dim path As String = "https://" + New Uri(m3u8_url_3).Host
|
|
For i3 As Integer = 0 To c.Count - 2
|
|
path = path + c(i3)
|
|
Next
|
|
curi = path + textLenght(i)
|
|
End If
|
|
|
|
Dim Evaluator = New Thread(Sub() Me.TS_DownloadAsync(curi, Pfad2 + nummer4D + ".ts"))
|
|
Evaluator.Start()
|
|
ThreadList.Add(Evaluator)
|
|
m3u8FFmpeg = m3u8FFmpeg + Pfad2 + nummer4D + ".ts" + vbLf '+ "#" + curi + vbLf
|
|
|
|
Dim FragmentsFinised = nummerint / FragmentsInt * 100 '(ThreadList.Count + nummerint) / FragmentsInt * 100
|
|
Dim Update = New Thread(Sub() Me.TS_StatusAsync(FragmentsFinised, di, Filename, PauseTime))
|
|
Update.Start()
|
|
|
|
|
|
|
|
ElseIf textLenght(i) = "#EXT-X-PLAYLIST-TYPE:VOD" Then
|
|
|
|
ElseIf InStr(textLenght(i), "URI=" + Chr(34)) Then
|
|
Dim KeyLine As String = textLenght(i)
|
|
If InStr(KeyLine, "https://") Then
|
|
|
|
Dim KeyFile() As String = KeyLine.Split(New String() {"URI=" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim KeyFile2() As String = KeyFile(1).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
If LoadedKeys.Item(LoadedKeys.Count - 1) = KeyFile2(0) Then
|
|
Else
|
|
Dim KeyClient As New WebClient
|
|
KeyClient.Encoding = Encoding.UTF8
|
|
If Main.WebbrowserCookie = Nothing Then
|
|
Else
|
|
KeyClient.Headers.Add(HttpRequestHeader.Cookie, Main.WebbrowserCookie)
|
|
End If
|
|
Dim KeyFile3 As String = Einstellungen.GeräteID() + ".key"
|
|
KeyFileCache = KeyFile3
|
|
|
|
Dim retry As Boolean = True
|
|
Dim retryCount As Integer = 3
|
|
While retry
|
|
Try
|
|
KeyClient.DownloadFile(KeyFile2(0), Application.StartupPath + "\" + KeyFile3)
|
|
retry = False
|
|
Catch ex As Exception
|
|
If retryCount > 0 Then
|
|
retryCount = retryCount - 1
|
|
Me.Invoke(New Action(Function()
|
|
Label_percent.Text = "Access Error - retrying"
|
|
Debug.WriteLine(ex.ToString)
|
|
Return Nothing
|
|
End Function))
|
|
|
|
Else
|
|
'retry = False
|
|
Me.Invoke(New Action(Function()
|
|
Label_percent.Text = "Access Error - download canceled"
|
|
Debug.WriteLine(ex.ToString)
|
|
Return Nothing
|
|
End Function))
|
|
Return Nothing
|
|
Exit Function
|
|
|
|
End If
|
|
End Try
|
|
|
|
End While
|
|
LoadedKeys.Add(KeyFile2(0))
|
|
End If
|
|
If KeyFile2.Count > 1 Then
|
|
KeyLine = KeyFile(0) + "URI=" + Chr(34) + KeyFileCache + Chr(34) + KeyFile2(1)
|
|
Else
|
|
KeyLine = KeyFile(0) + "URI=" + Chr(34) + KeyFileCache + Chr(34)
|
|
End If
|
|
'ElseIf InStr(KeyLine, "../") Then
|
|
' Dim countDot() As String = KeyLine.Split(New String() {"./"}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
|
|
' Dim c() As String = New Uri(m3u8_url_3).Segments
|
|
' Dim path As String = "https://" + New Uri(m3u8_url_3).Host
|
|
' For i3 As Integer = 0 To c.Count - (2 + countDot.Count - 1)
|
|
' path = path + c(i3)
|
|
' Next
|
|
' KeyLine = path + countDot(countDot.Count - 1)
|
|
|
|
Else
|
|
Dim c() As String = New Uri(m3u8_url_3).Segments
|
|
Dim path As String = "https://" + New Uri(m3u8_url_3).Host
|
|
For i3 As Integer = 0 To c.Count - 2
|
|
path = path + c(i3)
|
|
Next
|
|
KeyLine = KeyLine.Replace("URI=" + Chr(34), "URI=" + Chr(34) + path) 'path + textLenght(i)
|
|
Dim KeyFile() As String = KeyLine.Split(New String() {"URI=" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim KeyFile2() As String = KeyFile(1).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
If LoadedKeys.Item(LoadedKeys.Count - 1) = KeyFile2(0) Then
|
|
Else
|
|
Dim KeyClient As New WebClient
|
|
KeyClient.Encoding = Encoding.UTF8
|
|
If Main.WebbrowserCookie = Nothing Then
|
|
Else
|
|
KeyClient.Headers.Add(HttpRequestHeader.Cookie, Main.WebbrowserCookie)
|
|
End If
|
|
Dim KeyFile3 As String = Einstellungen.GeräteID() + ".key"
|
|
KeyFileCache = KeyFile3
|
|
|
|
Dim retry As Boolean = True
|
|
Dim retryCount As Integer = 3
|
|
|
|
Try
|
|
KeyClient.DownloadFile(KeyFile2(0), Application.StartupPath + "\" + KeyFile3)
|
|
retry = False
|
|
Catch ex As Exception
|
|
If retryCount > 0 Then
|
|
retryCount = retryCount - 1
|
|
Me.Invoke(New Action(Function()
|
|
Label_percent.Text = "Access Error - retrying"
|
|
Debug.WriteLine(ex.ToString)
|
|
Return Nothing
|
|
End Function))
|
|
|
|
Else
|
|
Me.Invoke(New Action(Function()
|
|
Label_percent.Text = "Access Error - download canceled"
|
|
Debug.WriteLine(ex.ToString)
|
|
Return Nothing
|
|
End Function))
|
|
Return Nothing
|
|
Exit Function
|
|
'Dim utf8WithoutBom2 As New System.Text.UTF8Encoding(False)
|
|
'Using sink As New StreamWriter(SubsFile, False, utf8WithoutBom2)
|
|
' sink.WriteLine(My.Resources.ass_template)
|
|
'End Using
|
|
'Retry = False
|
|
End If
|
|
End Try
|
|
'KeyClient.DownloadFile(KeyFile2(0), Application.StartupPath + "\" + KeyFile3)
|
|
LoadedKeys.Add(KeyFile2(0))
|
|
End If
|
|
If KeyFile2.Count > 1 Then
|
|
KeyLine = KeyFile(0) + "URI=" + Chr(34) + KeyFileCache + Chr(34) + KeyFile2(1)
|
|
Else
|
|
KeyLine = KeyFile(0) + "URI=" + Chr(34) + KeyFileCache + Chr(34)
|
|
End If
|
|
End If
|
|
m3u8FFmpeg = m3u8FFmpeg + KeyLine + vbLf
|
|
Else
|
|
m3u8FFmpeg = m3u8FFmpeg + textLenght(i) + vbLf
|
|
End If
|
|
Next
|
|
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
|
|
Using sink As New StreamWriter(Pfad2 + "\index" + Folder + ".m3u8", False, utf8WithoutBom)
|
|
sink.WriteLine(m3u8FFmpeg)
|
|
End Using
|
|
For w As Integer = 0 To Integer.MaxValue
|
|
If ThreadList.Count > 0 Then
|
|
Thread.Sleep(250)
|
|
Else
|
|
Thread.Sleep(250)
|
|
Exit For
|
|
End If
|
|
Next
|
|
TS_StatusAsync(100, di, Filename, PauseTime)
|
|
|
|
DL_URL = DL_URL.Replace(m3u8_url(1), Pfad2 + "index" + Folder + ".m3u8")
|
|
|
|
If InStr(DL_URL, "-headers " + My.Resources.ffmpeg_user_agend) Then
|
|
DL_URL = DL_URL.Replace("-headers " + My.Resources.ffmpeg_user_agend, "")
|
|
End If
|
|
|
|
'Using sink3 As New StreamWriter(Path.GetDirectoryName(DL_Pfad.Replace(Chr(34), "")) + "\hybridelog.log", False, utf8WithoutBom)
|
|
' sink3.WriteLine(HybrideLog)
|
|
'End Using
|
|
|
|
|
|
'MsgBox(DL_URL)
|
|
Dim exepath As String = Application.StartupPath + "\ffmpeg.exe"
|
|
Dim startinfo As New System.Diagnostics.ProcessStartInfo
|
|
|
|
Dim cmd As String = "-allowed_extensions ALL " + DL_URL + " " + DL_Pfad '+ " " + ffmpeg_command + " " + DL_Pfad 'start ffmpeg with command strFFCMD string
|
|
' MsgBox(cmd) -headers " + Chr(34) + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0" + Chr(34) +
|
|
If Debug2 = True Then
|
|
MsgBox(cmd)
|
|
End If
|
|
|
|
|
|
'all parameters required to run the process
|
|
startinfo.FileName = exepath
|
|
startinfo.Arguments = cmd
|
|
startinfo.UseShellExecute = False
|
|
startinfo.WindowStyle = ProcessWindowStyle.Normal
|
|
startinfo.RedirectStandardError = True
|
|
startinfo.RedirectStandardInput = True
|
|
startinfo.RedirectStandardOutput = True
|
|
startinfo.CreateNoWindow = True
|
|
proc = New Process
|
|
proc.EnableRaisingEvents = True
|
|
AddHandler proc.ErrorDataReceived, AddressOf FFMPEGOutput
|
|
AddHandler proc.OutputDataReceived, AddressOf FFMPEGOutput
|
|
AddHandler proc.Exited, AddressOf ProcessClosed
|
|
proc.StartInfo = startinfo
|
|
proc.Start() ' start the process
|
|
proc.BeginOutputReadLine()
|
|
proc.BeginErrorReadLine()
|
|
HybridRunning = False
|
|
Return Nothing
|
|
End Function
|
|
|
|
|
|
|
|
#End Region
|
|
|
|
|
|
|
|
Public Function DownloadFFMPEG(ByVal DLCommand As String, ByVal DL_Pfad As String, ByVal Filename As String) As String
|
|
|
|
|
|
Dim exepath As String = Application.StartupPath + "\ffmpeg.exe"
|
|
Dim startinfo As New System.Diagnostics.ProcessStartInfo
|
|
Dim cmd As String = "-user-agent " + My.Resources.ffmpeg_user_agend.Replace("User-Agent: ", "") + " -headers " + Chr(34) + "ACCEPT-ENCODING: *" + Chr(34) + " " + DLCommand + " " + DL_Pfad 'start ffmpeg with command strFFCMD string
|
|
LogText.Add(Date.Now + " " + cmd)
|
|
If Debug2 = True Then
|
|
MsgBox(cmd)
|
|
End If
|
|
'all parameters required to run the process
|
|
startinfo.FileName = exepath
|
|
startinfo.Arguments = cmd
|
|
startinfo.UseShellExecute = False
|
|
startinfo.WindowStyle = ProcessWindowStyle.Hidden
|
|
startinfo.RedirectStandardError = True
|
|
startinfo.RedirectStandardInput = True
|
|
startinfo.RedirectStandardOutput = True
|
|
startinfo.CreateNoWindow = True
|
|
proc = New Process
|
|
proc.EnableRaisingEvents = True
|
|
AddHandler proc.ErrorDataReceived, AddressOf FFMPEGOutput
|
|
AddHandler proc.OutputDataReceived, AddressOf FFMPEGOutput
|
|
AddHandler proc.Exited, AddressOf ProcessClosed
|
|
proc.StartInfo = startinfo
|
|
proc.Start() ' start the process
|
|
proc.BeginOutputReadLine()
|
|
proc.BeginErrorReadLine()
|
|
Return Nothing
|
|
End Function
|
|
|
|
Sub ProcessClosed(ByVal sender As Object, ByVal e As System.EventArgs)
|
|
Try
|
|
Pause(5)
|
|
If Finished = False Then
|
|
If Canceld = False Then
|
|
Label_website.Text = "The download process seems to have crashed"
|
|
Label_percent.Text = "Press the play button again to retry."
|
|
ProgressBar1.Value = 0
|
|
Retry = True
|
|
StatusRunning = False
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
'Me.Invoke(New Action(Function()
|
|
' Label_percent.Text = "Finished - event"
|
|
' Return Nothing
|
|
' End Function))
|
|
End Sub
|
|
|
|
Sub FFMPEGOutput(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
|
|
Try
|
|
LogText.Add(Date.Now + " " + e.Data)
|
|
Catch ex As Exception
|
|
End Try
|
|
|
|
#Region "Detect Auto resolution"
|
|
Try
|
|
|
|
|
|
If MergeSubstoMP4 = False Then
|
|
If CBool(InStr(e.Data, "Stream #")) And CBool(InStr(e.Data, "Video")) = True Then
|
|
'MsgBox(True.ToString + vbNewLine + e.Data)
|
|
'MsgBox(InStr(e.Data, "Stream #").ToString + vbNewLine + InStr(e.Data, "Video").ToString)
|
|
|
|
'MsgBox("with CBool" + vbNewLine + CBool(InStr(e.Data, "Stream #")).ToString + vbNewLine + CBool(InStr(e.Data, "Video")).ToString)
|
|
|
|
ListOfStreams.Add(e.Data)
|
|
End If
|
|
If InStr(e.Data, "Stream #") And InStr(e.Data, " -> ") Then
|
|
'UsesStreams.Add(e.Data)
|
|
'MsgBox(e.Data)
|
|
Dim StreamSearch() As String = e.Data.Split(New String() {" -> "}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim StreamSearch2 As String = StreamSearch(0) + ":"
|
|
For i As Integer = 0 To ListOfStreams.Count - 1
|
|
If CBool(InStr(ListOfStreams(i), StreamSearch2)) Then 'And CBool(InStr(ListOfStreams(i), " Video:")) Then
|
|
'MsgBox(ListOfStreams(i))
|
|
Dim ResoSearch() As String = ListOfStreams(i).Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
'MsgBox(ResoSearch(1))
|
|
If CBool(InStr(ResoSearch(2), " [")) = True Then
|
|
Dim ResoSearch2() As String = ResoSearch(2).Split(New String() {" ["}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Me.Invoke(New Action(Function()
|
|
If Label_Reso.Text = "1080p+" Then
|
|
Else
|
|
Label_Reso.Text = ResoSearch2(0) + "p"
|
|
End If
|
|
|
|
Return Nothing
|
|
End Function))
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
#End Region
|
|
|
|
If InStr(e.Data, "Duration: N/A, bitrate: N/A") Then
|
|
|
|
ElseIf InStr(e.Data, "Duration: ") Then
|
|
Dim ZeitGesamt As String() = e.Data.Split(New String() {"Duration: "}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim ZeitGesamt2 As String() = ZeitGesamt(1).Split(New [Char]() {System.Convert.ToChar(".")})
|
|
Dim ZeitGesamtSplit() As String = ZeitGesamt2(0).Split(New [Char]() {System.Convert.ToChar(":")})
|
|
'MsgBox(ZeitGesamt2(0))
|
|
ZeitGesamtInteger = CInt(ZeitGesamtSplit(0)) * 3600 + CInt(ZeitGesamtSplit(1)) * 60 + CInt(ZeitGesamtSplit(2))
|
|
|
|
|
|
|
|
ElseIf InStr(e.Data, " time=") Then
|
|
'MsgBox(e.Data)
|
|
Dim ZeitFertig As String() = e.Data.Split(New String() {" time="}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim ZeitFertig2 As String() = ZeitFertig(1).Split(New [Char]() {System.Convert.ToChar(".")})
|
|
Dim ZeitFertigSplit() As String = ZeitFertig2(0).Split(New [Char]() {System.Convert.ToChar(":")})
|
|
Dim ZeitFertigInteger As Integer = CInt(ZeitFertigSplit(0)) * 3600 + CInt(ZeitFertigSplit(1)) * 60 + CInt(ZeitFertigSplit(2))
|
|
Dim bitrate3 As String = 0
|
|
If InStr(e.Data, "bitrate=") Then
|
|
Dim bitrate As String() = e.Data.Split(New String() {"bitrate="}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Dim bitrate2 As String() = bitrate(1).Split(New String() {"kbits/s"}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
|
|
If InStr(bitrate2(0), ".") Then
|
|
Dim bitrateTemo As String() = bitrate2(0).Split(New String() {"."}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
bitrate3 = bitrateTemo(0)
|
|
ElseIf InStr(bitrate2(0), ",") Then
|
|
Dim bitrateTemo As String() = bitrate2(0).Split(New String() {","}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
bitrate3 = bitrateTemo(0)
|
|
End If
|
|
End If
|
|
Dim bitrateInt As Double = CInt(bitrate3) / 1024
|
|
Dim FileSize As Double = ZeitGesamtInteger * bitrateInt / 8
|
|
Dim DownloadFinished As Double = ZeitFertigInteger * bitrateInt / 8
|
|
Dim percent As Integer = ZeitFertigInteger / ZeitGesamtInteger * 100
|
|
Me.Invoke(New Action(Function()
|
|
If percent > 100 Then
|
|
percent = 100
|
|
End If
|
|
ProgressBar1.Value = percent
|
|
Label_percent.Text = Math.Round(DownloadFinished, 2, MidpointRounding.AwayFromZero).ToString + "MB/" + Math.Round(FileSize, 2, MidpointRounding.AwayFromZero).ToString + "MB " + percent.ToString + "%"
|
|
Return Nothing
|
|
End Function))
|
|
ElseIf InStr(e.Data, "Failed to open segment") Then
|
|
FailedCount = FailedCount + 1
|
|
If Item_ErrorTolerance = 0 Then
|
|
|
|
ElseIf FailedCount >= Item_ErrorTolerance Then
|
|
Failed = True
|
|
StatusRunning = False
|
|
bt_pause.BackgroundImage = My.Resources.main_pause_play
|
|
SuspendProcess(proc)
|
|
Me.Invoke(New Action(Function()
|
|
|
|
Label_percent.Text = "Missing segment detected, retry or resume with the play button"
|
|
Return Nothing
|
|
End Function))
|
|
End If
|
|
|
|
ElseIf InStr(e.Data, "muxing overhead:") Then
|
|
Finished = True
|
|
Me.Invoke(New Action(Function()
|
|
Dim Done As String() = Label_percent.Text.Split(New String() {"MB"}, System.StringSplitOptions.RemoveEmptyEntries)
|
|
Label_percent.Text = "Finished - " + Done(0) + "MB"
|
|
Return Nothing
|
|
End Function))
|
|
If HybridMode = True Then
|
|
Thread.Sleep(5000)
|
|
Try
|
|
System.IO.Directory.Delete(HybridModePath, True)
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
Debug.WriteLine(ex.ToString)
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
#Region "Manga DL"
|
|
|
|
|
|
Public Sub DownloadMangaPages(ByVal Pfad As String, ByVal BaseURL As String, ByVal SiteList As List(Of String), ByVal FolderName As String)
|
|
|
|
Dim Pfad_DL As String = Pfad + "\" + FolderName
|
|
If Debug2 = True Then
|
|
MsgBox(BaseURL + SiteList(0))
|
|
End If
|
|
|
|
|
|
Try
|
|
Directory.CreateDirectory(Pfad_DL)
|
|
'MsgBox(True.ToString)
|
|
Catch ex As Exception
|
|
End Try
|
|
|
|
For i As Integer = 0 To SiteList.Count - 1
|
|
'MsgBox(BaseURL + SiteList(i) + vbNewLine + Pfad_DL + "\" + SiteList(i))
|
|
Dim iWert As Integer = i
|
|
Using client As New WebClient()
|
|
client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), ""))
|
|
client.DownloadFile(BaseURL + SiteList(i), Pfad_DL + "\" + SiteList(i))
|
|
Pause(1)
|
|
End Using
|
|
Me.Invoke(New Action(Function()
|
|
iWert = iWert + 1
|
|
Dim Prozent As Integer = iWert / SiteList.Count * 100
|
|
Label_percent.Text = iWert.ToString + "/" + SiteList.Count.ToString + " " + Prozent.ToString + "%"
|
|
ProgressBar1.Value = Prozent
|
|
Return Nothing
|
|
End Function))
|
|
|
|
Next
|
|
|
|
End Sub
|
|
#End Region
|
|
|
|
Private Sub BT_del_Click(sender As Object, e As EventArgs) Handles bt_del.Click
|
|
If Canceld = True Then
|
|
If MessageBox.Show("The Download is not running anymore, press ok to remove it from the list.", "Remove from list!", MessageBoxButtons.OKCancel) = DialogResult.Cancel Then
|
|
Exit Sub
|
|
End If
|
|
ToDispose = True
|
|
ElseIf HybridRunning = True Then
|
|
If MessageBox.Show("Are you sure you want to cancel the Download?", "Cancel Download!", MessageBoxButtons.YesNo) = DialogResult.No Then
|
|
Exit Sub
|
|
End If
|
|
Canceld = True
|
|
'KillRunningTask()
|
|
|
|
Else
|
|
If proc.HasExited Then
|
|
If MessageBox.Show("The Download is not running anymore, press ok to remove it from the list.", "Remove from list!", MessageBoxButtons.OKCancel) = DialogResult.Cancel Then
|
|
Exit Sub
|
|
End If
|
|
ToDispose = True
|
|
Else
|
|
If MessageBox.Show("Are you sure you want to cancel the Download?", "Cancel Download!", MessageBoxButtons.YesNo) = DialogResult.No Then
|
|
Exit Sub
|
|
End If
|
|
Canceld = True
|
|
KillRunningTask()
|
|
End If
|
|
End If
|
|
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
|
|
Private Sub SuspendProcess(ByVal process As System.Diagnostics.Process)
|
|
For Each t As ProcessThread In process.Threads
|
|
Dim th As IntPtr
|
|
th = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)
|
|
If th <> IntPtr.Zero Then
|
|
SuspendThread(th)
|
|
CloseHandle(th)
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Private Sub ResumeProcess(ByVal process As System.Diagnostics.Process)
|
|
For Each t As ProcessThread In process.Threads
|
|
Dim th As IntPtr
|
|
th = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)
|
|
If th <> IntPtr.Zero Then
|
|
ResumeThread(th)
|
|
CloseHandle(th)
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
|
|
|
|
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
|
|
Try
|
|
For tlc As Integer = 0 To ThreadList.Count - 1
|
|
If ThreadList.Item(tlc).IsAlive Then
|
|
Else
|
|
ThreadList.Remove(ThreadList.Item(tlc))
|
|
End If
|
|
Next
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub Label_Anime_Click(sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label_Anime.Click, PB_Thumbnail.Click, Label_Reso.Click, Label_percent.Click, ProgressBar1.Click, Label_website.Click, Me.Click
|
|
If e.Button = MouseButtons.Right Then
|
|
' MsgBox("Right Button Clicked")
|
|
|
|
ContextMenuStrip1.ContextMenu.Show(Me, MousePosition)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ViewInExplorerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ViewInExplorerToolStripMenuItem.Click
|
|
Process.Start(Path.GetDirectoryName(DownloadPfad.Replace(Chr(34), "")))
|
|
End Sub
|
|
|
|
Private Sub PlaybackVideoFileToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PlaybackVideoFileToolStripMenuItem.Click
|
|
If GetIsStatusFinished() = True Then
|
|
PlaybackVideoFileToolStripMenuItem.Enabled = True
|
|
Else
|
|
PlaybackVideoFileToolStripMenuItem.Enabled = False
|
|
End If
|
|
Process.Start(DownloadPfad.Replace(Chr(34), ""))
|
|
End Sub
|
|
|
|
Private Sub SaveToFile_Click(sender As Object, e As EventArgs) Handles SaveToFile.Click
|
|
Try
|
|
|
|
Dim logfile As String = DownloadPfad.Replace(Main.VideoFormat, ".log").Replace(Chr(34), "")
|
|
'If File.Exists(logfile) Then
|
|
Using sw As StreamWriter = File.AppendText(logfile)
|
|
sw.Write(LogText.Item(0))
|
|
sw.Write(vbNewLine)
|
|
For i As Integer = 1 To LogText.Count - 1
|
|
sw.Write(vbNewLine)
|
|
sw.Write(LogText.Item(i))
|
|
Next
|
|
|
|
End Using
|
|
'Else
|
|
'File.WriteAllText(logfile, Date.Now + " " + e.Data)
|
|
'End If
|
|
Catch ex As Exception
|
|
MsgBox(ex.ToString)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub LogTocClipboard_Click(sender As Object, e As EventArgs) Handles LogTocClipboard.Click
|
|
Try
|
|
Dim Text As String = LogText.Item(0) + vbNewLine
|
|
For i As Integer = 1 To LogText.Count - 1
|
|
Text = Text + vbNewLine + LogText.Item(i)
|
|
Next
|
|
My.Computer.Clipboard.SetText(Text)
|
|
Catch ex As Exception
|
|
End Try
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
|
|
Public Class FailedSegemtsWithURL
|
|
Public path As String
|
|
Public url As String
|
|
|
|
Public Sub New(ByVal path As String, ByVal url As Integer)
|
|
Me.path = path
|
|
Me.url = url
|
|
End Sub
|
|
|
|
Public Overrides Function ToString() As String
|
|
Return String.Format("{0}, {1}", Me.path, Me.url)
|
|
End Function
|
|
|
|
|
|
End Class |