mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-15 08:12:17 +00:00
Compare commits
1 Commits
2022.9.13.
...
2022.9.16.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92be0994ae |
@@ -1,3 +1,12 @@
|
|||||||
|
# 2022.9.16.0
|
||||||
|
|
||||||
|
*2022-09-16*
|
||||||
|
|
||||||
|
- Fixed
|
||||||
|
- Failed to get video thumbnail for channel video post
|
||||||
|
- Incorrect rendering of the 'Feed' table when the number of columns is more than one
|
||||||
|
- Minor design bugs
|
||||||
|
|
||||||
# 2022.9.13.0
|
# 2022.9.13.0
|
||||||
|
|
||||||
*2022-09-13*
|
*2022-09-13*
|
||||||
|
|||||||
@@ -1213,6 +1213,16 @@ BlockNullPicture:
|
|||||||
Return IIf(FriendlyName.IsEmptyString, Name, FriendlyName)
|
Return IIf(FriendlyName.IsEmptyString, Name, FriendlyName)
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
Public Overrides Function GetHashCode() As Integer
|
||||||
|
Dim hcStr$
|
||||||
|
If Not CollectionName.IsEmptyString Then
|
||||||
|
hcStr = CollectionName
|
||||||
|
Else
|
||||||
|
hcStr = IIf(FriendlyName.IsEmptyString, Name, FriendlyName)
|
||||||
|
End If
|
||||||
|
If hcStr.IsEmptyString Then hcStr = LVIKey
|
||||||
|
Return hcStr.GetHashCode
|
||||||
|
End Function
|
||||||
#Region "Buttons actions"
|
#Region "Buttons actions"
|
||||||
Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click
|
Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click
|
||||||
Downloader.Add(Me)
|
Downloader.Add(Me)
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ Namespace API.Reddit
|
|||||||
End If
|
End If
|
||||||
If DownloadTopCount.HasValue Then DownloadLimitCount = DownloadTopCount
|
If DownloadTopCount.HasValue Then DownloadLimitCount = DownloadTopCount
|
||||||
End If
|
End If
|
||||||
|
If SaveToCache AndAlso Not Responser.Decoders.Contains(SymbolsConverter.Converters.HTML) Then _
|
||||||
|
Responser.Decoders.Add(SymbolsConverter.Converters.HTML)
|
||||||
DownloadDataChannel(String.Empty, Token)
|
DownloadDataChannel(String.Empty, Token)
|
||||||
If ChannelInfo Is Nothing Then _TempPostsList.ListAddList(_TempMediaList.Select(Function(m) m.Post.ID), LNC)
|
If ChannelInfo Is Nothing Then _TempPostsList.ListAddList(_TempMediaList.Select(Function(m) m.Post.ID), LNC)
|
||||||
Else
|
Else
|
||||||
@@ -371,9 +373,10 @@ Namespace API.Reddit
|
|||||||
ElseIf Not s.Value({"media", "reddit_video"}, "fallback_url").IsEmptyString Then
|
ElseIf Not s.Value({"media", "reddit_video"}, "fallback_url").IsEmptyString Then
|
||||||
tmpUrl = s.Value({"media", "reddit_video"}, "fallback_url")
|
tmpUrl = s.Value({"media", "reddit_video"}, "fallback_url")
|
||||||
If SaveToCache Then
|
If SaveToCache Then
|
||||||
tmpUrl = s.Value("thumbnail")
|
'tmpUrl = s.Value("thumbnail")
|
||||||
|
tmpUrl = GetVideoRedditPreview(s)
|
||||||
If Not tmpUrl.IsEmptyString Then
|
If Not tmpUrl.IsEmptyString Then
|
||||||
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel, False), LNC)
|
||||||
_TotalPostsDownloaded += 1
|
_TotalPostsDownloaded += 1
|
||||||
End If
|
End If
|
||||||
ElseIf UseM3U8 AndAlso Not s.Value({"media", "reddit_video"}, "hls_url").IsEmptyString Then
|
ElseIf UseM3U8 AndAlso Not s.Value({"media", "reddit_video"}, "hls_url").IsEmptyString Then
|
||||||
@@ -471,6 +474,38 @@ Namespace API.Reddit
|
|||||||
Return False
|
Return False
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
Private Function GetVideoRedditPreview(ByVal Node As EContainer) As String
|
||||||
|
Try
|
||||||
|
If Not Node Is Nothing Then
|
||||||
|
Dim n As EContainer = Node.ItemF({"preview", "images", 0})
|
||||||
|
Dim DestNode$() = Nothing
|
||||||
|
If If(n?.Count, 0) > 0 Then
|
||||||
|
If If(n("resolutions")?.Count, 0) > 0 Then
|
||||||
|
DestNode = {"resolutions"}
|
||||||
|
ElseIf If(n({"variants", "nsfw", "resolutions"})?.Count, 0) > 0 Then
|
||||||
|
DestNode = {"variants", "nsfw", "resolutions"}
|
||||||
|
End If
|
||||||
|
If Not DestNode Is Nothing Then
|
||||||
|
With n(DestNode)
|
||||||
|
Dim sl As List(Of Sizes) = .Select(Function(e) New Sizes(e.Value("width"), e.Value("url"))).
|
||||||
|
ListWithRemove(Function(ss) ss.HasError Or ss.Data.IsEmptyString)
|
||||||
|
If sl.ListExists Then
|
||||||
|
Dim s As Sizes
|
||||||
|
sl.Sort()
|
||||||
|
s = sl.First
|
||||||
|
sl.Clear()
|
||||||
|
Return s.Data
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return String.Empty
|
||||||
|
Catch ex As Exception
|
||||||
|
ProcessException(ex, Nothing, "reddit video preview parsing error", False)
|
||||||
|
Return String.Empty
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
||||||
Try
|
Try
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
@@ -593,12 +628,13 @@ Namespace API.Reddit
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "Structure creator"
|
#Region "Structure creator"
|
||||||
Protected Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
Protected Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
||||||
Optional ByVal _UserID As String = "", Optional ByVal IsChannel As Boolean = False) As UserMedia
|
Optional ByVal _UserID As String = "", Optional ByVal IsChannel As Boolean = False,
|
||||||
|
Optional ByVal ReplacePreview As Boolean = True) As UserMedia
|
||||||
If _URL.IsEmptyString And t = UTypes.Picture Then Return Nothing
|
If _URL.IsEmptyString And t = UTypes.Picture Then Return Nothing
|
||||||
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
||||||
Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}}
|
Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}}
|
||||||
If t = UTypes.Picture Or t = UTypes.GIF Then m.File = UrlToFile(m.URL) Else m.File = Nothing
|
If t = UTypes.Picture Or t = UTypes.GIF Then m.File = UrlToFile(m.URL) Else m.File = Nothing
|
||||||
If m.URL.Contains("preview") Then m.URL = $"https://i.redd.it/{m.File.File}"
|
If ReplacePreview And m.URL.Contains("preview") Then m.URL = $"https://i.redd.it/{m.File.File}"
|
||||||
If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, DateTrueProvider(IsChannel), Nothing) Else m.Post.Date = Nothing
|
If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, DateTrueProvider(IsChannel), Nothing) Else m.Post.Date = Nothing
|
||||||
Return m
|
Return m
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
BIN
SCrawler/Content/Pictures/StopPic32.png
Normal file
BIN
SCrawler/Content/Pictures/StopPic32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 652 B |
@@ -44,6 +44,7 @@ Namespace DownloadObjects
|
|||||||
Private Sub DownloadFeedForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub DownloadFeedForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize()
|
.MyViewInitialize()
|
||||||
|
LastWinState = WindowState
|
||||||
With MyRange
|
With MyRange
|
||||||
.AutoToolTip = True
|
.AutoToolTip = True
|
||||||
.ButtonKey(RCI.Previous) = Keys.F3
|
.ButtonKey(RCI.Previous) = Keys.F3
|
||||||
@@ -91,7 +92,7 @@ Namespace DownloadObjects
|
|||||||
Dim p% = IIf(DataColumns = 1, 100, 50)
|
Dim p% = IIf(DataColumns = 1, 100, 50)
|
||||||
For i = 0 To DataColumns - 1 : .ColumnStyles.Add(New ColumnStyle(SizeType.Percent, p)) : Next
|
For i = 0 To DataColumns - 1 : .ColumnStyles.Add(New ColumnStyle(SizeType.Percent, p)) : Next
|
||||||
.ColumnCount = .ColumnStyles.Count
|
.ColumnCount = .ColumnStyles.Count
|
||||||
For i = 0 To DataRows - 1 : .RowStyles.Add(New RowStyle(SizeType.Absolute, 0)) : Next
|
For i = 0 To DataRows : .RowStyles.Add(New RowStyle(SizeType.Absolute, 0)) : Next
|
||||||
.RowCount = .RowStyles.Count
|
.RowCount = .RowStyles.Count
|
||||||
.HorizontalScroll.Visible = False
|
.HorizontalScroll.Visible = False
|
||||||
End With
|
End With
|
||||||
@@ -177,8 +178,8 @@ Namespace DownloadObjects
|
|||||||
Friend ReadOnly Row As Integer
|
Friend ReadOnly Row As Integer
|
||||||
Friend ReadOnly Column As Integer
|
Friend ReadOnly Column As Integer
|
||||||
Friend Sub New(ByVal RowsCount As Integer, ByVal ColumnsCount As Integer)
|
Friend Sub New(ByVal RowsCount As Integer, ByVal ColumnsCount As Integer)
|
||||||
Me.RowsCount = RowsCount - 1
|
Me.RowsCount = RowsCount
|
||||||
Me.ColumnsCount = ColumnsCount - 1
|
Me.ColumnsCount = ColumnsCount
|
||||||
Row = 0
|
Row = 0
|
||||||
Column = 0
|
Column = 0
|
||||||
End Sub
|
End Sub
|
||||||
@@ -190,86 +191,71 @@ Namespace DownloadObjects
|
|||||||
Friend Function [Next]() As TPCELL
|
Friend Function [Next]() As TPCELL
|
||||||
Dim r% = Row
|
Dim r% = Row
|
||||||
Dim c% = Column + 1
|
Dim c% = Column + 1
|
||||||
If Not c.ValueBetween(0, ColumnsCount) Then c = 0 : r += 1
|
If Not c.ValueBetween(0, ColumnsCount - 1) Then c = 0 : r += 1
|
||||||
Return New TPCELL(RowsCount, ColumnsCount, r, c)
|
Return New TPCELL(RowsCount, ColumnsCount, r, c)
|
||||||
End Function
|
End Function
|
||||||
End Structure
|
End Structure
|
||||||
|
Private RefillInProgress As Boolean = False
|
||||||
Private Sub MyRange_IndexChanged(ByVal Sender As IRangeSwitcherProvider, ByVal e As EventArgs) Handles MyRange.IndexChanged
|
Private Sub MyRange_IndexChanged(ByVal Sender As IRangeSwitcherProvider, ByVal e As EventArgs) Handles MyRange.IndexChanged
|
||||||
Try
|
Try
|
||||||
If Sender.CurrentIndex >= 0 Then
|
If Not RefillInProgress AndAlso Sender.CurrentIndex >= 0 Then
|
||||||
|
RefillInProgress = True
|
||||||
AllowTopScroll = False
|
AllowTopScroll = False
|
||||||
ScrollSuspended = True
|
ScrollSuspended = True
|
||||||
Dim d As List(Of Integer) = MyRange.Indexes(Sender.CurrentIndex, EDP.ReturnValue).ListIfNothing
|
Dim d As List(Of UserMediaD) = MyRange.Current
|
||||||
|
Dim d2 As List(Of UserMediaD)
|
||||||
Dim i%
|
Dim i%
|
||||||
If d.Count > 0 Then
|
If d.ListExists Then
|
||||||
ClearTable()
|
ClearTable()
|
||||||
If Sender.CurrentIndex > 0 And FeedEndless Then
|
If Sender.CurrentIndex > 0 And FeedEndless Then
|
||||||
i = MyRange.Indexes(Sender.CurrentIndex - 1, EDP.ReturnValue).DefaultIfEmpty(-1).Last
|
d2 = DirectCast(MyRange.Switcher, RangeSwitcher(Of UserMediaD)).Item(Sender.CurrentIndex - 1).ListTake(-2, DataColumns, EDP.ReturnValue).ListIfNothing
|
||||||
If i.ValueBetween(0, DataList.Count - 1) Then
|
If d2.Count > 0 Then d.InsertRange(0, d2) : d2.Clear()
|
||||||
If d.Count = 0 Then d.Add(i) Else d.Insert(0, i)
|
|
||||||
End If
|
|
||||||
End If
|
End If
|
||||||
Dim w% = GetWidth()
|
Dim w% = GetWidth()
|
||||||
Dim hp% = PaddingE.GetOf({TP_DATA}).Vertical(2)
|
|
||||||
Dim p As New TPCELL(DataRows, DataColumns)
|
Dim p As New TPCELL(DataRows, DataColumns)
|
||||||
Dim fmList As New List(Of FeedMedia)
|
Dim fmList As New List(Of FeedMedia)
|
||||||
Dim rhd As New Dictionary(Of Integer, List(Of Integer))
|
d.ForEach(Sub(de) fmList.Add(New FeedMedia(de, w)))
|
||||||
For Each i In d
|
|
||||||
If i.ValueBetween(0, DataList.Count - 1) Then fmList.Add(New FeedMedia(DataList(i), w))
|
|
||||||
Next
|
|
||||||
If fmList.Count > 0 Then fmList.ListDisposeRemoveAll(Function(fm) fm Is Nothing OrElse fm.HasError)
|
If fmList.Count > 0 Then fmList.ListDisposeRemoveAll(Function(fm) fm Is Nothing OrElse fm.HasError)
|
||||||
If fmList.Count > 0 Then
|
If fmList.Count > 0 Then
|
||||||
For i = 0 To fmList.Count - 1
|
For i = 0 To fmList.Count - 1
|
||||||
If Not rhd.ContainsKey(p.Row) Then rhd.Add(p.Row, New List(Of Integer))
|
ControlInvoke(TP_DATA, Sub() TP_DATA.Controls.Add(fmList(i), p.Column, p.Row))
|
||||||
rhd(p.Row).Add(fmList(i).Height)
|
|
||||||
p = p.Next
|
|
||||||
Next
|
|
||||||
p = New TPCELL(DataRows, DataColumns)
|
|
||||||
ControlInvoke(TP_DATA, Sub()
|
|
||||||
With TP_DATA
|
|
||||||
With .RowStyles
|
|
||||||
For i = 0 To .Count - 1
|
|
||||||
With .Item(i) : .SizeType = SizeType.Absolute : .Height = 0 : End With
|
|
||||||
Next
|
|
||||||
End With
|
|
||||||
.AutoScroll = False
|
|
||||||
.AutoScroll = True
|
|
||||||
End With
|
|
||||||
End Sub)
|
|
||||||
For i = 0 To fmList.Count - 1
|
|
||||||
ControlInvoke(TP_DATA, Sub()
|
|
||||||
With TP_DATA
|
|
||||||
With .RowStyles(p.Row) : .SizeType = SizeType.Absolute : .Height = rhd(p.Row).Max : End With
|
|
||||||
.Controls.Add(fmList(i), p.Column, p.Row)
|
|
||||||
End With
|
|
||||||
End Sub)
|
|
||||||
p = p.Next
|
p = p.Next
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
ResizeGrid()
|
||||||
fmList.Clear()
|
fmList.Clear()
|
||||||
rhd.ListForEach(Sub(kv, ii) kv.Value.Clear())
|
|
||||||
rhd.Clear()
|
|
||||||
d.Clear()
|
d.Clear()
|
||||||
End If
|
End If
|
||||||
|
RefillInProgress = False
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[DownloadObjects.DownloadFeedForm.Range.IndexChanged({Sender.CurrentIndex})]")
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[DownloadObjects.DownloadFeedForm.Range.IndexChanged({Sender.CurrentIndex})]")
|
||||||
|
RefillInProgress = False
|
||||||
Finally
|
Finally
|
||||||
ControlInvoke(TP_DATA, Sub()
|
If Not RefillInProgress Then
|
||||||
With TP_DATA.VerticalScroll
|
ControlInvoke(TP_DATA, Sub()
|
||||||
If Offset = 1 Then .Value = 0 Else .Value = .Maximum
|
With TP_DATA.VerticalScroll
|
||||||
End With
|
If Offset = 1 Then .Value = 0 Else .Value = .Maximum
|
||||||
End Sub)
|
End With
|
||||||
ScrollSuspended = False
|
End Sub)
|
||||||
DataPopulated = True
|
ScrollSuspended = False
|
||||||
|
DataPopulated = True
|
||||||
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Size"
|
#Region "Size"
|
||||||
|
Private LastWinState As FormWindowState = FormWindowState.Normal
|
||||||
Private Function GetWidth() As Integer
|
Private Function GetWidth() As Integer
|
||||||
Return (TP_DATA.Width - PaddingE.GetOf({Me, TP_DATA}).Horizontal(2)) / DataColumns
|
Return (TP_DATA.Width - PaddingE.GetOf({Me, TP_DATA}).Horizontal(2)) / DataColumns
|
||||||
End Function
|
End Function
|
||||||
Private Sub DownloadFeedForm_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
|
Private Sub DownloadFeedForm_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
|
||||||
|
ResizeGrid()
|
||||||
|
End Sub
|
||||||
|
Private Sub DownloadFeedForm_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
|
||||||
|
If Not LastWinState = WindowState And Not If(MyDefs?.Initializing, True) Then LastWinState = WindowState : ResizeGrid()
|
||||||
|
End Sub
|
||||||
|
Private Sub ResizeGrid()
|
||||||
ControlInvoke(TP_DATA, Sub()
|
ControlInvoke(TP_DATA, Sub()
|
||||||
With TP_DATA
|
With TP_DATA
|
||||||
If .Controls.Count > 0 Then
|
If .Controls.Count > 0 Then
|
||||||
@@ -282,9 +268,10 @@ Namespace DownloadObjects
|
|||||||
If Not rh.ContainsKey(p.Row) Then rh.Add(p.Row, New List(Of Integer))
|
If Not rh.ContainsKey(p.Row) Then rh.Add(p.Row, New List(Of Integer))
|
||||||
rh(p.Row).Add(cnt.Height)
|
rh(p.Row).Add(cnt.Height)
|
||||||
Next
|
Next
|
||||||
|
For i% = 0 To .RowStyles.Count - 1 : .RowStyles(i).Height = 0 : Next
|
||||||
If rh.Count > 0 Then
|
If rh.Count > 0 Then
|
||||||
For Each kv In rh
|
For Each kv In rh
|
||||||
With .RowStyles(kv.Key) : .SizeType = SizeType.Absolute : .Height = kv.Value.Max : End With
|
.RowStyles(kv.Key).Height = kv.Value.Max
|
||||||
kv.Value.Clear()
|
kv.Value.Clear()
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -131,7 +131,6 @@ Namespace DownloadObjects
|
|||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Not MyVideo Is Nothing Then info &= $" ({MyVideo.VideoLength})"
|
|
||||||
LBL_INFO.Text = info
|
LBL_INFO.Text = info
|
||||||
'TT_MAIN.SetToolTip(LBL_INFO, Information)
|
'TT_MAIN.SetToolTip(LBL_INFO, Information)
|
||||||
s = New Size(Width, h + TP_MAIN.RowStyles(0).Height + PaddingE.GetOf({TP_MAIN}).Vertical(2))
|
s = New Size(Width, h + TP_MAIN.RowStyles(0).Height + PaddingE.GetOf({TP_MAIN}).Vertical(2))
|
||||||
@@ -219,6 +218,7 @@ Namespace DownloadObjects
|
|||||||
If Not Silent Then MsgBoxE({"File deleted", msgTitle})
|
If Not Silent Then MsgBoxE({"File deleted", msgTitle})
|
||||||
LBL_INFO.Height = 0
|
LBL_INFO.Height = 0
|
||||||
If Not MyPicture Is Nothing Then MyPicture.Size = New Size(0, 0)
|
If Not MyPicture Is Nothing Then MyPicture.Size = New Size(0, 0)
|
||||||
|
If Not MyVideo Is Nothing Then MyVideo.MinimumSize = New Size(0, 0) : MyVideo.Size = New Size(0, 0)
|
||||||
Height = 0
|
Height = 0
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
|
|||||||
43
SCrawler/Download/FeedVideo.Designer.vb
generated
43
SCrawler/Download/FeedVideo.Designer.vb
generated
@@ -24,13 +24,14 @@ Namespace DownloadObjects
|
|||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim TP_BUTTONS As System.Windows.Forms.TableLayoutPanel
|
Dim TP_BUTTONS As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(FeedVideo))
|
||||||
Me.MyVideo = New LibVLCSharp.WinForms.VideoView()
|
Me.MyVideo = New LibVLCSharp.WinForms.VideoView()
|
||||||
Me.TR_POSITION = New System.Windows.Forms.TrackBar()
|
Me.TR_POSITION = New System.Windows.Forms.TrackBar()
|
||||||
|
Me.TR_VOLUME = New System.Windows.Forms.TrackBar()
|
||||||
|
Me.LBL_TIME = New System.Windows.Forms.Label()
|
||||||
Me.BTT_PLAY = New System.Windows.Forms.Button()
|
Me.BTT_PLAY = New System.Windows.Forms.Button()
|
||||||
Me.BTT_PAUSE = New System.Windows.Forms.Button()
|
Me.BTT_PAUSE = New System.Windows.Forms.Button()
|
||||||
Me.BTT_STOP = New System.Windows.Forms.Button()
|
Me.BTT_STOP = New System.Windows.Forms.Button()
|
||||||
Me.TR_VOLUME = New System.Windows.Forms.TrackBar()
|
|
||||||
Me.LBL_TIME = New System.Windows.Forms.Label()
|
|
||||||
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TP_BUTTONS = New System.Windows.Forms.TableLayoutPanel()
|
TP_BUTTONS = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TP_MAIN.SuspendLayout()
|
TP_MAIN.SuspendLayout()
|
||||||
@@ -99,6 +100,24 @@ Namespace DownloadObjects
|
|||||||
TP_BUTTONS.Size = New System.Drawing.Size(178, 26)
|
TP_BUTTONS.Size = New System.Drawing.Size(178, 26)
|
||||||
TP_BUTTONS.TabIndex = 2
|
TP_BUTTONS.TabIndex = 2
|
||||||
'
|
'
|
||||||
|
'TR_VOLUME
|
||||||
|
'
|
||||||
|
Me.TR_VOLUME.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TR_VOLUME.Location = New System.Drawing.Point(81, 3)
|
||||||
|
Me.TR_VOLUME.Name = "TR_VOLUME"
|
||||||
|
Me.TR_VOLUME.Size = New System.Drawing.Size(94, 20)
|
||||||
|
Me.TR_VOLUME.TabIndex = 3
|
||||||
|
'
|
||||||
|
'LBL_TIME
|
||||||
|
'
|
||||||
|
Me.LBL_TIME.AutoSize = True
|
||||||
|
Me.LBL_TIME.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LBL_TIME.Location = New System.Drawing.Point(78, 0)
|
||||||
|
Me.LBL_TIME.Name = "LBL_TIME"
|
||||||
|
Me.LBL_TIME.Size = New System.Drawing.Size(1, 26)
|
||||||
|
Me.LBL_TIME.TabIndex = 4
|
||||||
|
Me.LBL_TIME.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
|
||||||
|
'
|
||||||
'BTT_PLAY
|
'BTT_PLAY
|
||||||
'
|
'
|
||||||
Me.BTT_PLAY.BackgroundImage = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
Me.BTT_PLAY.BackgroundImage = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
@@ -125,7 +144,7 @@ Namespace DownloadObjects
|
|||||||
'
|
'
|
||||||
'BTT_STOP
|
'BTT_STOP
|
||||||
'
|
'
|
||||||
Me.BTT_STOP.BackgroundImage = Global.SCrawler.My.Resources.Resources.Delete
|
Me.BTT_STOP.BackgroundImage = CType(resources.GetObject("BTT_STOP.BackgroundImage"), System.Drawing.Image)
|
||||||
Me.BTT_STOP.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom
|
Me.BTT_STOP.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom
|
||||||
Me.BTT_STOP.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.BTT_STOP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.BTT_STOP.Location = New System.Drawing.Point(51, 1)
|
Me.BTT_STOP.Location = New System.Drawing.Point(51, 1)
|
||||||
@@ -135,24 +154,6 @@ Namespace DownloadObjects
|
|||||||
Me.BTT_STOP.TabIndex = 2
|
Me.BTT_STOP.TabIndex = 2
|
||||||
Me.BTT_STOP.UseVisualStyleBackColor = True
|
Me.BTT_STOP.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
'TR_VOLUME
|
|
||||||
'
|
|
||||||
Me.TR_VOLUME.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.TR_VOLUME.Location = New System.Drawing.Point(81, 3)
|
|
||||||
Me.TR_VOLUME.Name = "TR_VOLUME"
|
|
||||||
Me.TR_VOLUME.Size = New System.Drawing.Size(94, 20)
|
|
||||||
Me.TR_VOLUME.TabIndex = 3
|
|
||||||
'
|
|
||||||
'LBL_TIME
|
|
||||||
'
|
|
||||||
Me.LBL_TIME.AutoSize = True
|
|
||||||
Me.LBL_TIME.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.LBL_TIME.Location = New System.Drawing.Point(78, 0)
|
|
||||||
Me.LBL_TIME.Name = "LBL_TIME"
|
|
||||||
Me.LBL_TIME.Size = New System.Drawing.Size(1, 26)
|
|
||||||
Me.LBL_TIME.TabIndex = 4
|
|
||||||
Me.LBL_TIME.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
|
|
||||||
'
|
|
||||||
'FeedVideo
|
'FeedVideo
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
|||||||
@@ -123,4 +123,18 @@
|
|||||||
<metadata name="TP_BUTTONS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="TP_BUTTONS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="BTT_STOP.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||||
|
YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAGLSURBVFhH7Vc7TsNAEPUNaDhAxAl8EaT0UKRFoqdNTcsp
|
||||||
|
qHIEHyGn4CNAiihwu7w3mTFrZeI466Ch4Emv8O7Mm9nd8X6qsWjbtgaXYAOmPWQfbWp1mw6ILcA16AUc
|
||||||
|
In0WKnM84DwDu9F+vb6kzcN9eru6TM8XZ+npvOqRbeyjDW3NTzVmKjsOcJiDGwpQ7P3meifgIdInS4Ra
|
||||||
|
c5UfBgw55eL4uXp0RzuW9KWG6VFbw/iAAUcuxh93t65oCalluoyh4fpAB9dcpv2UwY1ZEoyxWxNolILj
|
||||||
|
lHkCp2C2HI2G3QINsu4smilrfojUzgrzpx7wIf/5vmovhafFGJrA2oJzh5PMPAeyFJ4Wmc1CzQS4dcoG
|
||||||
|
4hmTpfC0SMbSBJZd8XEX84zJUnhaJGNpAg0TkI+h4iuFp0UylsXtEvAMjaXwtIz/Cfy9BCKLMPw3DN+I
|
||||||
|
YrdiPQ/iDiMCHxHHcf9mhIa4CwmBxtgrGYGOuEupAQZx13IDDOMeJgY4xD3NcsB5yuP0uFEPAWK/8Dyv
|
||||||
|
qm/Ki638CNApKAAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -10,6 +10,7 @@ Imports LibVLCSharp
|
|||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools
|
||||||
Imports PersonalUtilities.Tools.WEB
|
Imports PersonalUtilities.Tools.WEB
|
||||||
|
Imports VLCState = LibVLCSharp.Shared.VLCState
|
||||||
Namespace DownloadObjects
|
Namespace DownloadObjects
|
||||||
<ToolboxItem(False), DesignTimeVisible(False)>
|
<ToolboxItem(False), DesignTimeVisible(False)>
|
||||||
Public Class FeedVideo
|
Public Class FeedVideo
|
||||||
@@ -21,11 +22,16 @@ Namespace DownloadObjects
|
|||||||
Private ReadOnly TimeChangeLabel As Action = Sub()
|
Private ReadOnly TimeChangeLabel As Action = Sub()
|
||||||
If MediaPlayer.Time >= 0 Then
|
If MediaPlayer.Time >= 0 Then
|
||||||
Dim t As TimeSpan = TimeSpan.FromMilliseconds(MediaPlayer.Time)
|
Dim t As TimeSpan = TimeSpan.FromMilliseconds(MediaPlayer.Time)
|
||||||
LBL_TIME.Text = $"{VideoLength}/{t}"
|
If Not VideoLength.HasValue Then
|
||||||
|
VideoLength = TimeSpan.FromMilliseconds(MediaPlayer.Length)
|
||||||
|
VideoLengthStr = VideoLength.Value.ToStringTime(FeedVideoLengthProvider)
|
||||||
|
End If
|
||||||
|
LBL_TIME.Text = $"{t.ToStringTime(FeedVideoLengthProvider)}/{VideoLengthStr}"
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private ReadOnly MyImage As ImageRenderer
|
Private ReadOnly MyImage As ImageRenderer
|
||||||
Friend ReadOnly VideoLength As TimeSpan
|
Private VideoLength As TimeSpan?
|
||||||
|
Private VideoLengthStr As String
|
||||||
Public Sub New()
|
Public Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
End Sub
|
End Sub
|
||||||
@@ -38,7 +44,6 @@ Namespace DownloadObjects
|
|||||||
MediaPlayer = New [Shared].MediaPlayer(New [Shared].Media(New [Shared].LibVLC(enableDebugLogs:=debugLogs), New Uri(File.ToString)))
|
MediaPlayer = New [Shared].MediaPlayer(New [Shared].Media(New [Shared].LibVLC(enableDebugLogs:=debugLogs), New Uri(File.ToString)))
|
||||||
MyVideo.MediaPlayer = MediaPlayer
|
MyVideo.MediaPlayer = MediaPlayer
|
||||||
TR_VOLUME.Value = MediaPlayer.Volume / 10
|
TR_VOLUME.Value = MediaPlayer.Volume / 10
|
||||||
If MediaPlayer.Length >= 0 Then VideoLength = TimeSpan.FromMilliseconds(MediaPlayer.Length)
|
|
||||||
If Settings.UseM3U8 Then
|
If Settings.UseM3U8 Then
|
||||||
Dim f As SFile = $"{Settings.CachePath.PathWithSeparator}FeedSnapshots\{File.GetHashCode}.png"
|
Dim f As SFile = $"{Settings.CachePath.PathWithSeparator}FeedSnapshots\{File.GetHashCode}.png"
|
||||||
If Not f.Exists Then f = FFMPEG.TakeSnapshot(File, f, Settings.FfmpegFile, TimeSpan.FromSeconds(1))
|
If Not f.Exists Then f = FFMPEG.TakeSnapshot(File, f, Settings.FfmpegFile, TimeSpan.FromSeconds(1))
|
||||||
@@ -50,19 +55,30 @@ Namespace DownloadObjects
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
UpdateButtons()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub FeedVideo_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
Private Sub FeedVideo_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
If Not MediaPlayer Is Nothing Then MediaPlayer.Dispose()
|
If Not MediaPlayer Is Nothing Then MediaPlayer.Dispose()
|
||||||
If Not MyImage Is Nothing Then MyImage.Dispose()
|
If Not MyImage Is Nothing Then MyImage.Dispose()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_PLAY_Click(sender As Object, e As EventArgs) Handles BTT_PLAY.Click
|
Private Sub BTT_PLAY_Click(sender As Object, e As EventArgs) Handles BTT_PLAY.Click
|
||||||
Try : MediaPlayer.Play() : Catch : End Try
|
Try
|
||||||
|
Select Case MediaPlayer.State
|
||||||
|
Case VLCState.NothingSpecial, VLCState.Stopped, VLCState.Paused : MediaPlayer.Play()
|
||||||
|
Case VLCState.Ended : MediaPlayer.Stop() : MediaPlayer.Play()
|
||||||
|
End Select
|
||||||
|
Catch
|
||||||
|
Finally
|
||||||
|
UpdateButtons()
|
||||||
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_PAUSE_Click(sender As Object, e As EventArgs) Handles BTT_PAUSE.Click
|
Private Sub BTT_PAUSE_Click(sender As Object, e As EventArgs) Handles BTT_PAUSE.Click
|
||||||
Try : MediaPlayer.Pause() : Catch : End Try
|
Try : MediaPlayer.Pause() : Catch : End Try
|
||||||
|
UpdateButtons()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_STOP_Click(sender As Object, e As EventArgs) Handles BTT_STOP.Click
|
Private Sub BTT_STOP_Click(sender As Object, e As EventArgs) Handles BTT_STOP.Click
|
||||||
Try : MediaPlayer.Stop() : Catch : End Try
|
Try : MediaPlayer.Stop() : Catch : End Try
|
||||||
|
UpdateButtons()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub MediaPlayer_TimeChanged(sender As Object, e As [Shared].MediaPlayerTimeChangedEventArgs) Handles MediaPlayer.TimeChanged
|
Private Sub MediaPlayer_TimeChanged(sender As Object, e As [Shared].MediaPlayerTimeChangedEventArgs) Handles MediaPlayer.TimeChanged
|
||||||
If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(TimeChange) Else TimeChange.Invoke
|
If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(TimeChange) Else TimeChange.Invoke
|
||||||
@@ -77,6 +93,22 @@ Namespace DownloadObjects
|
|||||||
Private Sub MediaPlayer_Stopped(sender As Object, e As EventArgs) Handles MediaPlayer.Stopped
|
Private Sub MediaPlayer_Stopped(sender As Object, e As EventArgs) Handles MediaPlayer.Stopped
|
||||||
Dim a As Action = Sub() TR_POSITION.Value = TR_POSITION.Maximum
|
Dim a As Action = Sub() TR_POSITION.Value = TR_POSITION.Maximum
|
||||||
If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(a) Else a.Invoke
|
If TR_POSITION.InvokeRequired Then TR_POSITION.Invoke(a) Else a.Invoke
|
||||||
|
UpdateButtons()
|
||||||
|
End Sub
|
||||||
|
Private Sub UpdateButtons() Handles MediaPlayer.Playing, MediaPlayer.Paused, MediaPlayer.Opening
|
||||||
|
Try
|
||||||
|
Dim _play As Boolean = False, _pause As Boolean = False, _stop As Boolean = False
|
||||||
|
Select Case MediaPlayer.State
|
||||||
|
Case VLCState.NothingSpecial, VLCState.Stopped : _play = True
|
||||||
|
Case VLCState.Paused : _play = True : _stop = True
|
||||||
|
Case VLCState.Ended : _play = True
|
||||||
|
Case VLCState.Playing : _pause = True : _stop = True
|
||||||
|
End Select
|
||||||
|
ControlInvoke(BTT_PLAY, Sub() BTT_PLAY.Enabled = _play)
|
||||||
|
ControlInvoke(BTT_PAUSE, Sub() BTT_PAUSE.Enabled = _pause)
|
||||||
|
ControlInvoke(BTT_STOP, Sub() BTT_STOP.Enabled = _stop)
|
||||||
|
Catch
|
||||||
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -27,13 +27,22 @@ Namespace DownloadObjects
|
|||||||
Friend ReadOnly User As IUserData
|
Friend ReadOnly User As IUserData
|
||||||
Friend ReadOnly Data As UserMedia
|
Friend ReadOnly Data As UserMedia
|
||||||
Friend ReadOnly [Date] As Date
|
Friend ReadOnly [Date] As Date
|
||||||
Friend Sub New(ByVal Data As UserMedia, ByVal User As IUserData)
|
Private ReadOnly Session As Integer
|
||||||
|
Friend Sub New(ByVal Data As UserMedia, ByVal User As IUserData, ByVal Session As Integer)
|
||||||
Me.Data = Data
|
Me.Data = Data
|
||||||
Me.User = User
|
Me.User = User
|
||||||
[Date] = Now
|
[Date] = Now
|
||||||
|
Me.Session = Session
|
||||||
End Sub
|
End Sub
|
||||||
Private Function CompareTo(ByVal Other As UserMediaD) As Integer Implements IComparable(Of UserMediaD).CompareTo
|
Private Function CompareTo(ByVal Other As UserMediaD) As Integer Implements IComparable(Of UserMediaD).CompareTo
|
||||||
Return [Date].Ticks.CompareTo(Other.Date.Ticks) * -1
|
'Return [Date].Ticks.CompareTo(Other.Date.Ticks) * -1
|
||||||
|
Return GetCompareValue(Me).CompareTo(GetCompareValue(Other)) * -1
|
||||||
|
End Function
|
||||||
|
Private Function GetCompareValue(ByVal m As UserMediaD) As Double
|
||||||
|
Dim v# = m.Session * 10000
|
||||||
|
If Not m.User Is Nothing Then v += m.User.GetHashCode
|
||||||
|
'v += m.[Date].Ticks
|
||||||
|
Return v
|
||||||
End Function
|
End Function
|
||||||
Private Overloads Function Equals(ByVal Other As UserMediaD) As Boolean Implements IEquatable(Of UserMediaD).Equals
|
Private Overloads Function Equals(ByVal Other As UserMediaD) As Boolean Implements IEquatable(Of UserMediaD).Equals
|
||||||
Return Data.File = Other.Data.File
|
Return Data.File = Other.Data.File
|
||||||
@@ -214,12 +223,14 @@ Namespace DownloadObjects
|
|||||||
#Region "Thread"
|
#Region "Thread"
|
||||||
Private CheckerThread As Thread
|
Private CheckerThread As Thread
|
||||||
Private MissingPostsDetected As Boolean = False
|
Private MissingPostsDetected As Boolean = False
|
||||||
|
Private Session As Integer = 0
|
||||||
Private Sub [Start]()
|
Private Sub [Start]()
|
||||||
If Not AutoDownloaderWorking AndAlso MyProgressForm.ReadyToOpen AndAlso Pool.LongCount(Function(p) p.Count > 0) > 1 Then MyProgressForm.Show() : MainFrameObj.Focus()
|
If Not AutoDownloaderWorking AndAlso MyProgressForm.ReadyToOpen AndAlso Pool.LongCount(Function(p) p.Count > 0) > 1 Then MyProgressForm.Show() : MainFrameObj.Focus()
|
||||||
If Not If(CheckerThread?.IsAlive, False) Then
|
If Not If(CheckerThread?.IsAlive, False) Then
|
||||||
MainProgress.Visible = True
|
MainProgress.Visible = True
|
||||||
If Not AutoDownloaderWorking AndAlso InfoForm.ReadyToOpen Then InfoForm.Show() : MainFrameObj.Focus()
|
If Not AutoDownloaderWorking AndAlso InfoForm.ReadyToOpen Then InfoForm.Show() : MainFrameObj.Focus()
|
||||||
MissingPostsDetected = False
|
MissingPostsDetected = False
|
||||||
|
Session += 1
|
||||||
CheckerThread = New Thread(New ThreadStart(AddressOf JobsChecker))
|
CheckerThread = New Thread(New ThreadStart(AddressOf JobsChecker))
|
||||||
CheckerThread.SetApartmentState(ApartmentState.MTA)
|
CheckerThread.SetApartmentState(ApartmentState.MTA)
|
||||||
CheckerThread.Start()
|
CheckerThread.Start()
|
||||||
@@ -342,7 +353,7 @@ Namespace DownloadObjects
|
|||||||
If Not .Disposed AndAlso Not .IsCollection AndAlso .DownloadedTotal(False) > 0 Then
|
If Not .Disposed AndAlso Not .IsCollection AndAlso .DownloadedTotal(False) > 0 Then
|
||||||
If Not Downloaded.Contains(.Self) Then Downloaded.Add(Settings.GetUser(.Self))
|
If Not Downloaded.Contains(.Self) Then Downloaded.Add(Settings.GetUser(.Self))
|
||||||
With DirectCast(.Self, UserDataBase)
|
With DirectCast(.Self, UserDataBase)
|
||||||
If .LatestData.Count > 0 Then Files.ListAddList(.LatestData.Select(Function(d) New UserMediaD(d, .Self)), FilesLP)
|
If .LatestData.Count > 0 Then Files.ListAddList(.LatestData.Select(Function(d) New UserMediaD(d, .Self, Session)), FilesLP)
|
||||||
End With
|
End With
|
||||||
dcc = True
|
dcc = True
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ Friend Module MainMod
|
|||||||
Friend MyProgressForm As ActiveDownloadingProgress
|
Friend MyProgressForm As ActiveDownloadingProgress
|
||||||
Friend MainFrameObj As MainFrameObjects
|
Friend MainFrameObj As MainFrameObjects
|
||||||
Friend ReadOnly ParsersDataDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
|
Friend ReadOnly ParsersDataDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
|
||||||
|
Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan}
|
||||||
Friend ReadOnly LogConnector As New LogHost
|
Friend ReadOnly LogConnector As New LogHost
|
||||||
#Region "File name operations"
|
#Region "File name operations"
|
||||||
Friend FileDateAppenderProvider As IFormatProvider
|
Friend FileDateAppenderProvider As IFormatProvider
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2022.9.13.0")>
|
<Assembly: AssemblyVersion("2022.9.16.0")>
|
||||||
<Assembly: AssemblyFileVersion("2022.9.13.0")>
|
<Assembly: AssemblyFileVersion("2022.9.16.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
10
SCrawler/My Project/Resources.Designer.vb
generated
10
SCrawler/My Project/Resources.Designer.vb
generated
@@ -350,6 +350,16 @@ Namespace My.Resources
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property StopPic32() As System.Drawing.Bitmap
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("StopPic32", resourceCulture)
|
||||||
|
Return CType(obj,System.Drawing.Bitmap)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
'''<summary>
|
'''<summary>
|
||||||
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||||
'''</summary>
|
'''</summary>
|
||||||
|
|||||||
@@ -211,4 +211,7 @@
|
|||||||
<data name="RSSPic" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="RSSPic" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Content\Pictures\RSSPic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Content\Pictures\RSSPic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="StopPic32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Content\Pictures\StopPic32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -491,6 +491,7 @@
|
|||||||
<None Include="Content\Pictures\RSSPic.png" />
|
<None Include="Content\Pictures\RSSPic.png" />
|
||||||
<None Include="Content\Icons\RedGifsIcon.ico" />
|
<None Include="Content\Icons\RedGifsIcon.ico" />
|
||||||
<None Include="Content\Icons\RSSIcon.ico" />
|
<None Include="Content\Icons\RSSIcon.ico" />
|
||||||
|
<None Include="Content\Pictures\StopPic32.png" />
|
||||||
<Content Include="ffmpeg.exe">
|
<Content Include="ffmpeg.exe">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
|||||||
@@ -77,9 +77,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
|
|
||||||
FastProfilesLoading = New XMLValue(Of Boolean)("FastProfilesLoading", False, MyXML)
|
FastProfilesLoading = New XMLValue(Of Boolean)("FastProfilesLoading", False, MyXML)
|
||||||
MaxLargeImageHeight = New XMLValue(Of Integer)("MaxLargeImageHeight", 150, MyXML)
|
MaxLargeImageHeight = New XMLValue(Of Integer)("MaxLargeImageHeight", 150, MyXML)
|
||||||
MaxLargeImageHeight.ReplaceByValue("MaxLargeImageHeigh",, MyXML)
|
|
||||||
MaxSmallImageHeight = New XMLValue(Of Integer)("MaxSmallImageHeight", 15, MyXML)
|
MaxSmallImageHeight = New XMLValue(Of Integer)("MaxSmallImageHeight", 15, MyXML)
|
||||||
MaxSmallImageHeight.ReplaceByValue("MaxSmallImageHeigh",, MyXML)
|
|
||||||
DownloadOpenInfo = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenInfo", "OpenAgain", False, False, MyXML)
|
DownloadOpenInfo = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenInfo", "OpenAgain", False, False, MyXML)
|
||||||
DownloadOpenProgress = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenProgress", "OpenAgain", False, False, MyXML)
|
DownloadOpenProgress = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenProgress", "OpenAgain", False, False, MyXML)
|
||||||
DownloadsCompleteCommand = New XMLValueAttribute(Of String, Boolean)("DownloadsCompleteCommand", "Use",,, MyXML)
|
DownloadsCompleteCommand = New XMLValueAttribute(Of String, Boolean)("DownloadsCompleteCommand", "Use",,, MyXML)
|
||||||
@@ -344,46 +342,23 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overloads Function GetUser(ByVal User As IUserData, Optional ByVal GetCollection As Boolean = False) As IUserData
|
Friend Overloads Function GetUser(ByVal User As IUserData, Optional ByVal GetCollection As Boolean = False) As IUserData
|
||||||
If Users.Count > 0 Then
|
Return GetUser(If(User?.Key, String.Empty), GetCollection)
|
||||||
Dim uSimple As Predicate(Of IUserData) = Function(u) u.Equals(DirectCast(User, UserDataBase))
|
|
||||||
Dim uCol As Predicate(Of IUserData) = Function(ByVal u As IUserData) As Boolean
|
|
||||||
If u.IsCollection Then
|
|
||||||
Return DirectCast(u, UserDataBind).Collections.Exists(uSimple)
|
|
||||||
Else
|
|
||||||
Return False
|
|
||||||
End If
|
|
||||||
End Function
|
|
||||||
Dim uu As Predicate(Of IUserData)
|
|
||||||
If User.IncludedInCollection Then uu = uCol Else uu = uSimple
|
|
||||||
Dim i% = Users.FindIndex(uu)
|
|
||||||
If i >= 0 Then
|
|
||||||
If Users(i).IsCollection Then
|
|
||||||
With DirectCast(Users(i), UserDataBind)
|
|
||||||
i = .Collections.FindIndex(uSimple)
|
|
||||||
If i >= 0 Then Return If(GetCollection, Users(i), .Collections(i))
|
|
||||||
End With
|
|
||||||
Else
|
|
||||||
Return Users(i)
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
Return Nothing
|
|
||||||
End Function
|
End Function
|
||||||
Friend Overloads Function GetUser(ByVal UserKey As String, Optional ByVal GetCollection As Boolean = False) As IUserData
|
Friend Overloads Function GetUser(ByVal UserKey As String, Optional ByVal GetCollection As Boolean = False) As IUserData
|
||||||
If Users.Count > 0 Then
|
If Users.Count > 0 And Not UserKey.IsEmptyString Then
|
||||||
Dim finder As Predicate(Of IUserData) = Function(u) u.Key = UserKey
|
Dim finder As Predicate(Of IUserData) = Function(u) u.Key = UserKey
|
||||||
Dim i%, ii%
|
Dim i%, ii%
|
||||||
For i = 0 To Users.Count - 1
|
For i = 0 To Users.Count - 1
|
||||||
With Users(i)
|
With Users(i)
|
||||||
If .IsCollection Then
|
If finder.Invoke(.Self) Then
|
||||||
|
Return .Self
|
||||||
|
ElseIf .IsCollection Then
|
||||||
With DirectCast(.Self, UserDataBind)
|
With DirectCast(.Self, UserDataBind)
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
ii = .Collections.FindIndex(finder)
|
ii = .Collections.FindIndex(finder)
|
||||||
If ii >= 0 Then Return If(GetCollection, .Self, .Collections(ii))
|
If ii >= 0 Then Return If(GetCollection, .Self, .Collections(ii))
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
Else
|
|
||||||
If finder.Invoke(.Self) Then Return .Self
|
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
Next
|
Next
|
||||||
|
|||||||
Reference in New Issue
Block a user