diff --git a/Changelog.md b/Changelog.md index c7ba762..55073ee 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,13 @@ +# 2022.12.27.0 + +*2022-12-27* + +- Added + - XVideos: added downloading 'Quickies' + - Instagram: added more enable/disable options +- Fixed + - XVideos not downloading (sorry, I broke it in a previous release) + # 2022.12.26.0 *2022-12-26* diff --git a/ProgramScreenshots/SettingsSiteInstagram.png b/ProgramScreenshots/SettingsSiteInstagram.png index ee7e5fc..a532f69 100644 Binary files a/ProgramScreenshots/SettingsSiteInstagram.png and b/ProgramScreenshots/SettingsSiteInstagram.png differ diff --git a/SCrawler/API/Instagram/EditorExchangeOptions.vb b/SCrawler/API/Instagram/EditorExchangeOptions.vb index 16bb4bd..a41a067 100644 --- a/SCrawler/API/Instagram/EditorExchangeOptions.vb +++ b/SCrawler/API/Instagram/EditorExchangeOptions.vb @@ -9,10 +9,12 @@ Imports SCrawler.Plugin Namespace API.Instagram Friend Class EditorExchangeOptions + Friend Property GetTimeline As Boolean Friend Property GetStories As Boolean Friend Property GetTagged As Boolean Friend Sub New(ByVal h As ISiteSettings) With DirectCast(h, SiteSettings) + GetTimeline = CBool(.GetTimeline.Value) GetStories = CBool(.GetStories.Value) GetTagged = CBool(.GetTagged.Value) End With diff --git a/SCrawler/API/Instagram/OptionsForm.Designer.vb b/SCrawler/API/Instagram/OptionsForm.Designer.vb index e1418bd..6c59cb1 100644 --- a/SCrawler/API/Instagram/OptionsForm.Designer.vb +++ b/SCrawler/API/Instagram/OptionsForm.Designer.vb @@ -26,6 +26,7 @@ Namespace API.Instagram Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel Me.CH_GET_STORIES = New System.Windows.Forms.CheckBox() Me.CH_GET_TAGGED = New System.Windows.Forms.CheckBox() + Me.CH_GET_TIMELINE = New System.Windows.Forms.CheckBox() CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() TP_MAIN = New System.Windows.Forms.TableLayoutPanel() CONTAINER_MAIN.ContentPanel.SuspendLayout() @@ -39,13 +40,13 @@ Namespace API.Instagram 'CONTAINER_MAIN.ContentPanel ' CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(260, 53) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(260, 79) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) CONTAINER_MAIN.Name = "CONTAINER_MAIN" CONTAINER_MAIN.RightToolStripPanelVisible = False - CONTAINER_MAIN.Size = New System.Drawing.Size(260, 78) + CONTAINER_MAIN.Size = New System.Drawing.Size(260, 104) CONTAINER_MAIN.TabIndex = 0 CONTAINER_MAIN.TopToolStripPanelVisible = False ' @@ -54,26 +55,28 @@ Namespace API.Instagram TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] TP_MAIN.ColumnCount = 1 TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.Controls.Add(Me.CH_GET_STORIES, 0, 0) - TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 0, 1) + TP_MAIN.Controls.Add(Me.CH_GET_STORIES, 0, 1) + TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 0, 2) + TP_MAIN.Controls.Add(Me.CH_GET_TIMELINE, 0, 0) TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill TP_MAIN.Location = New System.Drawing.Point(0, 0) TP_MAIN.Name = "TP_MAIN" - TP_MAIN.RowCount = 3 + TP_MAIN.RowCount = 4 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_MAIN.Size = New System.Drawing.Size(260, 53) + TP_MAIN.Size = New System.Drawing.Size(260, 79) TP_MAIN.TabIndex = 0 ' 'CH_GET_STORIES ' Me.CH_GET_STORIES.AutoSize = True Me.CH_GET_STORIES.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_GET_STORIES.Location = New System.Drawing.Point(4, 4) + Me.CH_GET_STORIES.Location = New System.Drawing.Point(4, 30) Me.CH_GET_STORIES.Name = "CH_GET_STORIES" Me.CH_GET_STORIES.Size = New System.Drawing.Size(252, 19) - Me.CH_GET_STORIES.TabIndex = 0 + Me.CH_GET_STORIES.TabIndex = 1 Me.CH_GET_STORIES.Text = "Get stories" Me.CH_GET_STORIES.UseVisualStyleBackColor = True ' @@ -81,26 +84,37 @@ Namespace API.Instagram ' Me.CH_GET_TAGGED.AutoSize = True Me.CH_GET_TAGGED.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_GET_TAGGED.Location = New System.Drawing.Point(4, 30) + Me.CH_GET_TAGGED.Location = New System.Drawing.Point(4, 56) Me.CH_GET_TAGGED.Name = "CH_GET_TAGGED" Me.CH_GET_TAGGED.Size = New System.Drawing.Size(252, 19) - Me.CH_GET_TAGGED.TabIndex = 1 + Me.CH_GET_TAGGED.TabIndex = 2 Me.CH_GET_TAGGED.Text = "Get tagged data" Me.CH_GET_TAGGED.UseVisualStyleBackColor = True ' + 'CH_GET_TIMELINE + ' + Me.CH_GET_TIMELINE.AutoSize = True + Me.CH_GET_TIMELINE.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_GET_TIMELINE.Location = New System.Drawing.Point(4, 4) + Me.CH_GET_TIMELINE.Name = "CH_GET_TIMELINE" + Me.CH_GET_TIMELINE.Size = New System.Drawing.Size(252, 19) + Me.CH_GET_TIMELINE.TabIndex = 0 + Me.CH_GET_TIMELINE.Text = "Get Timeline" + Me.CH_GET_TIMELINE.UseVisualStyleBackColor = True + ' 'OptionsForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(260, 78) + Me.ClientSize = New System.Drawing.Size(260, 104) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32 Me.KeyPreview = True Me.MaximizeBox = False - Me.MaximumSize = New System.Drawing.Size(276, 117) + Me.MaximumSize = New System.Drawing.Size(276, 143) Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(276, 117) + Me.MinimumSize = New System.Drawing.Size(276, 143) Me.Name = "OptionsForm" Me.ShowInTaskbar = False Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide @@ -116,5 +130,6 @@ Namespace API.Instagram Private WithEvents CH_GET_STORIES As CheckBox Private WithEvents CH_GET_TAGGED As CheckBox + Private WithEvents CH_GET_TIMELINE As CheckBox End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Instagram/OptionsForm.vb b/SCrawler/API/Instagram/OptionsForm.vb index 7dee2ae..b220363 100644 --- a/SCrawler/API/Instagram/OptionsForm.vb +++ b/SCrawler/API/Instagram/OptionsForm.vb @@ -21,6 +21,7 @@ Namespace API.Instagram .MyViewInitialize(True) .AddOkCancelToolbar() With MyExchangeOptions + CH_GET_TIMELINE.Checked = .GetTimeline CH_GET_STORIES.Checked = .GetStories CH_GET_TAGGED.Checked = .GetTagged End With @@ -29,6 +30,7 @@ Namespace API.Instagram End Sub Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick With MyExchangeOptions + .GetTimeline = CH_GET_TIMELINE.Checked .GetStories = CH_GET_STORIES.Checked .GetTagged = CH_GET_TAGGED.Checked End With diff --git a/SCrawler/API/Instagram/SiteSettings.vb b/SCrawler/API/Instagram/SiteSettings.vb index c89a25b..798eab1 100644 --- a/SCrawler/API/Instagram/SiteSettings.vb +++ b/SCrawler/API/Instagram/SiteSettings.vb @@ -111,33 +111,37 @@ Namespace API.Instagram End Sub #End Region #Region "Download properties" - + Friend ReadOnly Property RequestsWaitTimer As PropertyValue Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider - + Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider - + Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider - + + Friend ReadOnly Property GetTimeline As PropertyValue + Friend ReadOnly Property GetStories As PropertyValue - + Friend ReadOnly Property GetTagged As PropertyValue + "-1 to disable"), PXML, ControlNumber(26)> Friend ReadOnly Property TaggedNotifyLimit As PropertyValue Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider #End Region #Region "Download ready" - + Friend ReadOnly Property DownloadTimeline As PropertyValue - + + Friend ReadOnly Property DownloadStories As PropertyValue + Friend ReadOnly Property DownloadTagged As PropertyValue #End Region #Region "429 bypass" @@ -207,10 +211,6 @@ Namespace API.Instagram .CookiesExtractMode = Responser.CookiesExtractModes.Response .CookiesUpdateMode = CookieKeeper.UpdateModes.ReplaceByNameAll .CookiesExtractedAutoSave = False - If Not .Cookies Is Nothing Then - .Cookies.ChangedAllowInternalDrop = False - .Cookies.Changed = False - End If End With Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString} @@ -221,6 +221,7 @@ Namespace API.Instagram IG_WWW_CLAIM = New PropertyValue(www_claim, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_WWW_CLAIM), v)) DownloadTimeline = New PropertyValue(True) + DownloadStories = New PropertyValue(True) DownloadTagged = New PropertyValue(False) RequestsWaitTimer = New PropertyValue(1000) @@ -230,6 +231,7 @@ Namespace API.Instagram SleepTimerOnPostsLimit = New PropertyValue(60000) SleepTimerOnPostsLimitProvider = New TimersChecker(10000) + GetTimeline = New PropertyValue(True) GetStories = New PropertyValue(False) GetTagged = New PropertyValue(False) TaggedNotifyLimit = New PropertyValue(200) @@ -246,48 +248,6 @@ Namespace API.Instagram UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1) ImageVideoContains = "instagram.com" End Sub - Private Structure LatestValues - Friend Hash As String - Friend Token As String - Friend AppID As String - Friend WwwClaim As String - Friend Exists As Boolean - Friend Sub New(ByVal Source As SiteSettings) - Exists = True - With Source - Hash = AConvert(Of String)(.HashTagged.Value, String.Empty) - With .Responser - Token = .Headers.Value(Header_CSRF_TOKEN) - AppID = .Headers.Value(Header_IG_APP_ID) - WwwClaim = .Headers.Value(Header_IG_WWW_CLAIM) - End With - End With - End Sub - End Structure - Private LV As LatestValues = Nothing - Friend Overrides Sub BeginEdit() - LV = New LatestValues(Me) - MyBase.BeginEdit() - End Sub - Friend Overrides Sub EndEdit() - LV = Nothing - MyBase.EndEdit() - End Sub - Friend Overloads Overrides Sub Update() - If LV.Exists Then - Dim __lv As New LatestValues(Me) - If If(Responser.Cookies?.Count, 0) > 0 Then - Dim _cookiesChanged As Boolean = If(Responser.Cookies?.Changed, False) And Responser.CookiesExists - Dim _tokensChanged As Boolean = (Not __lv.Token.IsEmptyString And Not __lv.WwwClaim.IsEmptyString And Not __lv.AppID.IsEmptyString) And - (Not LV.Token = __lv.Token Or Not LV.WwwClaim = __lv.WwwClaim Or Not LV.AppID = __lv.AppID) - If _cookiesChanged Or _tokensChanged Then DownloadTimeline.Value = True - If Not __lv.Hash.IsEmptyString And (_cookiesChanged Or _tokensChanged Or Not LV.Hash = __lv.Hash) Then DownloadTagged.Value = True - End If - End If - LV = Nothing - If Not Responser.Cookies Is Nothing Then Responser.Cookies.Changed = False - MyBase.Update() - End Sub #End Region #Region "PropertiesDataChecker" diff --git a/SCrawler/API/Instagram/UserData.vb b/SCrawler/API/Instagram/UserData.vb index a9a2f99..88ff2b5 100644 --- a/SCrawler/API/Instagram/UserData.vb +++ b/SCrawler/API/Instagram/UserData.vb @@ -21,6 +21,7 @@ Namespace API.Instagram #Region "XML Names" Private Const Name_LastCursor As String = "LastCursor" Private Const Name_FirstLoadingDone As String = "FirstLoadingDone" + Private Const Name_GetTimeline As String = "GetTimeline" Private Const Name_GetStories As String = "GetStories" Private Const Name_GetTagged As String = "GetTaggedData" Private Const Name_TaggedChecked As String = "TaggedChecked" @@ -70,16 +71,18 @@ Namespace API.Instagram Private ReadOnly PostsToReparse As List(Of PostKV) Private LastCursor As String = String.Empty Private FirstLoadingDone As Boolean = False + Friend Property GetTimeline As Boolean = True Friend Property GetStories As Boolean Friend Property GetTaggedData As Boolean #End Region #Region "Exchange options" Friend Overrides Function ExchangeOptionsGet() As Object - Return New EditorExchangeOptions(HOST.Source) With {.GetStories = GetStories, .GetTagged = GetTaggedData} + Return New EditorExchangeOptions(HOST.Source) With {.GetTimeline = GetTimeline, .GetStories = GetStories, .GetTagged = GetTaggedData} End Function Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object) If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then With DirectCast(Obj, EditorExchangeOptions) + GetTimeline = .GetTimeline GetStories = .GetStories GetTaggedData = .GetTagged End With @@ -197,21 +200,22 @@ Namespace API.Instagram AddHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived ThrowAny(Token) HasError = False - If CBool(MySiteSettings.DownloadTimeline.Value) And Not LastCursor.IsEmptyString Then + Dim dt As Boolean = (CBool(MySiteSettings.DownloadTimeline.Value) And GetTimeline) Or IsSavedPosts + If dt And Not LastCursor.IsEmptyString Then s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline) DownloadData(LastCursor, s, Token) ThrowAny(Token) If Not HasError Then FirstLoadingDone = True End If - If CBool(MySiteSettings.DownloadTimeline.Value) And Not HasError Then + If dt And Not HasError Then s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline) DownloadData(String.Empty, s, Token) ThrowAny(Token) If Not HasError Then FirstLoadingDone = True End If If FirstLoadingDone Then LastCursor = String.Empty - If MySiteSettings.BaseAuthExists() Then - If CBool(MySiteSettings.DownloadTimeline.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token) + If Not IsSavedPosts AndAlso MySiteSettings.BaseAuthExists() Then + If CBool(MySiteSettings.DownloadStories.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token) If CBool(MySiteSettings.DownloadTagged.Value) And ACheck(MySiteSettings.HashTagged.Value) And GetTaggedData Then s = Sections.Tagged : DownloadData(String.Empty, s, Token) End If If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify diff --git a/SCrawler/API/XVIDEOS/SiteSettings.vb b/SCrawler/API/XVIDEOS/SiteSettings.vb index 2bbc1ad..13c9c7c 100644 --- a/SCrawler/API/XVIDEOS/SiteSettings.vb +++ b/SCrawler/API/XVIDEOS/SiteSettings.vb @@ -104,10 +104,13 @@ Namespace API.XVIDEOS End Function #End Region #Region "User: get, check" - Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String + Friend Function GetUserUrlPart(ByVal User As UserData) As String Dim __user$ = User.Name.Split("_").FirstOrDefault __user &= $"/{User.Name.Replace($"{__user}_", String.Empty)}" - Return String.Format(UrlPatternUser, __user) + Return __user + End Function + Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String + Return String.Format(UrlPatternUser, GetUserUrlPart(User)) End Function Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)" Private Const URD As String = ".*?{0}{1}" diff --git a/SCrawler/API/XVIDEOS/UserData.vb b/SCrawler/API/XVIDEOS/UserData.vb index fb5f739..258a4b9 100644 --- a/SCrawler/API/XVIDEOS/UserData.vb +++ b/SCrawler/API/XVIDEOS/UserData.vb @@ -45,16 +45,7 @@ Namespace API.XVIDEOS UseInternalM3U8Function = True End Sub Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) - If Not Settings.UseM3U8 Then - 'TODELETE: XVideos m3u8 delete after debug ffmpeg x86 - 'If Not Settings.OS64 Then - ' MyMainLOG = $"XVIDEOS [{ToStringForLog()}]: The plugin only works with x64 OS." - 'Else - ' 'MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" - 'End If - MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" - Exit Sub - End If + If Not Settings.UseM3U8 Then MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" : Exit Sub If IsSavedPosts Then If Not ACheck(MySettings.SavedVideosPlaylist.Value) Then Throw New ArgumentNullException("SavedVideosPlaylist", "Playlist of saved videos cannot be null") DownloadSavedVideos(Token) @@ -65,49 +56,63 @@ Namespace API.XVIDEOS Private Sub DownloadUserVideo(ByVal Token As CancellationToken) Dim URL$ = String.Empty Try - Dim NextPage% = 0 - Dim r$ + Dim NextPage%, d% + Dim limit% = If(DownloadTopCount, -1) + Dim r$, n$ Dim j As EContainer = Nothing Dim jj As EContainer - Dim user$ = MySettings.GetUserUrl(Me, False) + Dim user$ = MySettings.GetUserUrlPart(Me) Dim p As UserMedia Dim EnvirSet As Boolean = False - Do - ThrowAny(Token) - URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}" - r = Responser.GetResponse(URL) - If Not r.IsEmptyString Then - If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True - j = JsonDocument.Parse(r).XmlIfNothing - With j - If .Contains("videos") Then - With .Item("videos") - If .Count > 0 Then - NextPage += 1 - For Each jj In .Self - p = New UserMedia With { - .Post = jj.Value("id"), - .URL = $"https://www.xvideos.com/{jj.Value("u").StringTrimStart("/")}" - } - If Not p.Post.ID.IsEmptyString And Not jj.Value("u").IsEmptyString Then - If Not _TempPostsList.Contains(p.Post.ID) Then - _TempPostsList.Add(p.Post.ID) - _TempMediaList.Add(p) - Else - Exit Do + If ID.IsEmptyString Then GetUserID() + For i% = 0 To 1 + If i = 1 And ID.IsEmptyString Then Exit For + NextPage = 0 + d = 0 + n = IIf(i = 0, "u", "url") + Do + ThrowAny(Token) + If i = 0 Then + URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}" + Else 'Quickies + URL = $"https://www.xvideos.com/quickies-api/profilevideos/all/none/N/{ID}/{NextPage}" + End If + r = Responser.GetResponse(URL,, EDP.ReturnValue) + If Not r.IsEmptyString Then + If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True + j = JsonDocument.Parse(r).XmlIfNothing + With j + If .Contains("videos") Then + With .Item("videos") + If .Count > 0 Then + NextPage += 1 + For Each jj In .Self + p = New UserMedia With { + .Post = jj.Value("id"), + .URL = $"https://www.xvideos.com/{jj.Value(n).StringTrimStart("/")}" + } + If Not p.Post.ID.IsEmptyString And Not jj.Value(n).IsEmptyString Then + If Not _TempPostsList.Contains(p.Post.ID) Then + _TempPostsList.Add(p.Post.ID) + _TempMediaList.Add(p) + d += 1 + If limit > 0 And d = limit Then Exit Do + Else + Exit Do + End If End If - End If - Next - Continue Do - End If - End With - End If - End With - End If - If Not j Is Nothing Then j.Dispose() - Exit Do - Loop While NextPage < 100 + Next + Continue Do + End If + End With + End If + End With + End If + If Not j Is Nothing Then j.Dispose() + Exit Do + Loop While NextPage < 100 + Next If Not j Is Nothing Then j.Dispose() @@ -130,6 +135,10 @@ Namespace API.XVIDEOS If _TempMediaList.ListExists Then _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString) End Try End Sub + Private Sub GetUserID() + Dim r$ = Responser.GetResponse($"https://www.xvideos.com/{MySettings.GetUserUrlPart(Me)}",, EDP.ReturnValue) + If Not r.IsEmptyString Then ID = RegexReplace(r, RParams.DMS("""id_user"":(\d+)", 1, EDP.ReturnValue)) + End Sub Private Sub DownloadSavedVideos(ByVal Token As CancellationToken) Dim URL$ = MySettings.SavedVideosPlaylist.Value Try diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index e8fc767..e6cd1ab 100644 --- a/SCrawler/My Project/AssemblyInfo.vb +++ b/SCrawler/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index d06b9e9..184f873 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -23,13 +23,10 @@ Friend Class SettingsCLS : Implements IDisposable Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword" Friend ReadOnly Design As XmlFile Private ReadOnly MyXML As XmlFile - Private ReadOnly OS64 As Boolean Private ReadOnly FfmpegExists As Boolean Friend ReadOnly FfmpegFile As SFile Friend ReadOnly Property UseM3U8 As Boolean Get - 'TODELETE: SETTINGS m3u8 delete after debug ffmpeg x86 - 'Return OS64 And FfmpegExists Return FfmpegExists End Get End Property @@ -69,7 +66,6 @@ Friend Class SettingsCLS : Implements IDisposable End Sub Friend Sub New() RemoveUnusedPlugins() - OS64 = Environment.Is64BitOperatingSystem FfmpegFile = "ffmpeg.exe" FfmpegExists = FfmpegFile.Exists @@ -83,7 +79,7 @@ Friend Class SettingsCLS : Implements IDisposable LastCollections = New List(Of String) FFMPEGNotification = New XMLValue(Of Boolean)("FFMPEGNotification", True, MyXML) - If OS64 And Not FfmpegExists Then + If Not FfmpegExists Then If FFMPEGNotification.Value AndAlso MsgBoxE(New MMessage("[ffmpeg.exe] is missing", "ffmpeg.exe", {"OK", New MsgBoxButton("Disable notification") With { .IsDialogResultButton = False, .ToolTip = "Disable ffmpeg missing notification"}}, vbExclamation) With {