-
-
Notifications
You must be signed in to change notification settings - Fork 102
/
Copy pathChannel.vb
98 lines (96 loc) · 4.98 KB
/
Channel.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
' 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 PersonalUtilities.Functions.XML
Imports PersonalUtilities.Forms.Toolbars
Namespace API.YouTube.Objects
Public Class Channel : Inherits YouTubeMediaContainerBase
Public Sub New()
ObjectType = Base.YouTubeMediaType.Channel
End Sub
Public Overrides Function ToString(ByVal ForMediaItem As Boolean) As String
Return UserTitle
End Function
Public Overrides Function Parse(ByVal Container As EContainer, ByVal Path As SFile, ByVal IsMusic As Boolean,
Optional ByVal Token As Threading.CancellationToken = Nothing, Optional ByVal Progress As IMyProgress = Nothing) As Boolean
_MediaType = IIf(IsMusic, Plugin.UserMediaTypes.Audio, Plugin.UserMediaTypes.Video)
_ObjectType = Base.YouTubeMediaType.Channel
Me.IsMusic = IsMusic
If ParseFiles(Path, IsMusic, Token, Progress) Then
PlaylistID = String.Empty
PlaylistIndex = 0
PlaylistTitle = String.Empty
ThrowAny(Token)
'Reconfiguration
If IsMusic AndAlso HasElements AndAlso Elements.Exists(Function(e) Not e.PlaylistID.IsEmptyString) Then
Dim elems As New List(Of IYouTubeMediaContainer)(Elements)
Dim elemsNew As New List(Of IYouTubeMediaContainer)
Dim playlistDic As New Dictionary(Of String, List(Of IYouTubeMediaContainer))
Elements.Clear()
For Each elem In elems
If Not elem.PlaylistTitle.IsEmptyString Then
If Not playlistDic.ContainsKey(elem.PlaylistTitle) Then playlistDic.Add(elem.PlaylistTitle, New List(Of IYouTubeMediaContainer))
playlistDic(elem.PlaylistTitle).Add(elem)
ElseIf elem.PlaylistID = elem.UserID Then
elem.PlaylistID = String.Empty
elem.PlaylistIndex = -1
elem.PlaylistTitle = String.Empty
elemsNew.Add(elem)
Else
elemsNew.Add(elem)
End If
Next
If playlistDic.Count > 0 Then
Dim i%, ii%
Dim v As YouTubeMediaContainerBase
For Each kv In playlistDic
i = -1
If elemsNew.Count > 0 Then i = elemsNew.FindIndex(Function(e) e.PlaylistID = kv.Key)
If i = -1 Then
elemsNew.Add(New PlayList)
v = kv.Value.First
With DirectCast(elemsNew.Last, YouTubeMediaContainerBase)
.ObjectType = Base.YouTubeMediaType.PlayList
.MediaType = v.MediaType
.IsMusic = v.IsMusic
.ID = v.PlaylistID
.Title = v.PlaylistTitle
.PlaylistID = .ID
.PlaylistTitle = .Title
.PlaylistIndex = -1
.UserID = v.UserID
.UserTitle = v.UserTitle
End With
i = elemsNew.Count - 1
End If
With elemsNew(i).Elements
.AddRange(kv.Value)
If .Count > 0 Then
For ii = 0 To .Count - 1
With DirectCast(.Item(ii), YouTubeMediaContainerBase)
.PlaylistIndex = ii + 1
.PlaylistCount = kv.Value.Count
End With
Next
End If
End With
Next
playlistDic.Clear()
End If
If elemsNew.Count > 0 Then Elements.AddRange(elemsNew)
elems.Clear()
elemsNew.Clear()
File = MyYouTubeSettings.OutputPath
End If
Return True
Else
Return False
End If
End Function
End Class
End Namespace