' Copyright (C) 2023 Andy https://github.com/AAndyProgram ' This program is free software: you can redistribute it and/or modify ' it under the terms of the GNU General Public License as published by ' the Free Software Foundation, either version 3 of the License, or ' (at your option) any later version. ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY Imports System.Drawing.Design Imports System.ComponentModel Imports PersonalUtilities.Tools.Grid.Attributes Imports PersonalUtilities.Tools.Grid.EnumObjects Namespace API.YouTube.Base Public Structure Thumbnail : Implements IIndexable, IComparable(Of Thumbnail) Public ID As String Public Width As Integer Public Height As Integer Public URL As String Public Property Index As Integer Implements IIndexable.Index Private Function SetIndex(ByVal Obj As Object, ByVal Index As Integer) As Object Implements IIndexable.SetIndex Dim t As Thumbnail = Obj t.Index = Index Return t End Function Private Function CompareTo(ByVal Other As Thumbnail) As Integer Implements IComparable(Of Thumbnail).CompareTo Return Width.CompareTo(Other.Width) * -1 End Function End Structure Public Structure Subtitles : Implements IIndexable, IComparable(Of Subtitles) Public ID As String Private _Name As String Public Property Name As String Get Dim n$ = _Name.IfNullOrEmpty(ID) If CC Then n &= " (CC)" Return n End Get Set(ByVal NewName As String) _Name = NewName End Set End Property Public Formats As String Public CC As Boolean Public ReadOnly Property FullID As String Get Return IIf(ID = "en", "en.*", ID) End Get End Property Public Property Index As Integer Implements IIndexable.Index Private Function SetIndex(ByVal Obj As Object, ByVal Index As Integer) As Object Implements IIndexable.SetIndex Dim s As Subtitles = Obj s.Index = Index Return s End Function Private Function CompareTo(ByVal Other As Subtitles) As Integer Implements IComparable(Of Subtitles).CompareTo Return Name.CompareTo(Other.Name) End Function End Structure Public Enum YouTubeMediaType As Integer Undefined = 0 [Single] = 1 Channel = 2 PlayList = 3 End Enum Public Enum YouTubeChannelTab As Integer All = 0 Videos = 1 Shorts = 3 Playlists = 10 End Enum Public Enum Protocols As Integer Undefined = -1 Any = 0 https = 1 m3u8 = 2 End Enum Public Enum FileDateMode As Integer None = 0 Before = 1 After = 2 End Enum Public Enum M3U8CreationMode As Integer Relative = 0 Absolute = 1 Both = 2 End Enum Public Structure MediaObject : Implements IIndexable, IComparable(Of MediaObject) Public Type As Plugin.UserMediaTypes Public ID As String Public ID_DRC As Boolean Public Extension As String Public Width As Integer Public Height As Integer Public FPS As Integer Public Bitrate As Integer ''' Kb Public Size As Double Public Codec As String Public Protocol As String Public ReadOnly Property ProtocolType As Protocols Get If Not Protocol.IsEmptyString Then Select Case Protocol.StringToLower.StringTrim Case "http", "https" : Return Protocols.https Case "m3u8" : Return Protocols.m3u8 End Select End If Return Protocols.Undefined End Get End Property Public URL As String Public Property Index As Integer Implements IIndexable.Index Private Function SetIndex(ByVal Obj As Object, ByVal Index As Integer) As Object Implements IIndexable.SetIndex Dim m As MediaObject = Obj m.Index = Index Return m End Function Private Function CompareTo(ByVal Other As MediaObject) As Integer Implements IComparable(Of MediaObject).CompareTo If Type = Other.Type Then If ID_DRC.CompareTo(Other.ID_DRC) = 0 Then If Width.CompareTo(Other.Width) = 0 Then Return Size.CompareTo(Other.Size) * -1 Else Return Width.CompareTo(Other.Width) * -1 End If Else Return ID_DRC.CompareTo(Other.ID_DRC) End If Else Return CInt(Type).CompareTo(CInt(Other.Type)) End If End Function End Structure Public Structure TrimOption : Implements IComparable(Of TrimOption) Public Name As String Public Start As Integer Public ReadOnly Property StartTime As TimeSpan Get Return TimeSpan.FromSeconds(Start) End Get End Property Public [End] As Integer Public ReadOnly Property EndTime As TimeSpan Get Return TimeSpan.FromSeconds([End]) End Get End Property Public Shared Widening Operator CType(ByVal t As TrimOption) As String Return t.ToString End Operator Public Overrides Function ToString() As String Dim v$ = $"{Start} - {[End]}" If Not Name.IsEmptyString Then v = $"[{v}] - {Name}" Return v End Function Public Overrides Function Equals(ByVal Obj As Object) As Boolean Try : With DirectCast(Obj, TrimOption) : Return Start = .Start And [End] = .End : End With : Catch : End Try Return False End Function Private Function CompareTo(ByVal Other As TrimOption) As Integer Implements IComparable(Of TrimOption).CompareTo Return Start.CompareTo(Other.Start) End Function End Structure End Namespace