From 290b5c4586ea83b1822323c5c3a90833984807e9 Mon Sep 17 00:00:00 2001 From: Andy <88590076+AAndyProgram@users.noreply.github.com> Date: Sun, 5 Feb 2023 20:58:02 +0300 Subject: [PATCH] 2023.2.5.0 Update to library environment GlobalSettings: add UserAgent Gfycat: fix RedGifs urls issue --- Changelog.md | 9 + ProgramScreenshots/SettingsGlobalBasis.png | Bin 19191 -> 20182 bytes .../My Project/AssemblyInfo.vb | 4 +- .../IPropertyProvider.vb | 0 .../SCrawler.PluginProvider.vbproj | 2 +- SCrawler/API/Base/SiteSettingsBase.vb | 2 +- SCrawler/API/Gfycat/Envir.vb | 13 +- SCrawler/API/LPSG/SiteSettings.vb | 2 +- SCrawler/API/Reddit/UserData.vb | 39 ++-- SCrawler/API/TikTok/SiteSettings.vb | 2 +- SCrawler/API/Twitter/OptionsForm.vb | 1 - SCrawler/API/Twitter/SiteSettings.vb | 6 +- SCrawler/API/XVIDEOS/SiteSettings.vb | 3 +- .../Editors/GlobalSettingsForm.Designer.vb | 179 ++++++++++-------- SCrawler/Editors/GlobalSettingsForm.resx | 83 +++++++- SCrawler/Editors/GlobalSettingsForm.vb | 6 + SCrawler/Editors/SiteEditorForm.vb | 11 +- SCrawler/EncryptCookies.vb | 9 +- SCrawler/MainFrame.vb | 2 +- SCrawler/MainMod.vb | 2 + SCrawler/My Project/AssemblyInfo.vb | 4 +- SCrawler/SettingsCLS.vb | 4 + SCrawler/UserFinder.vb | 2 +- 23 files changed, 252 insertions(+), 133 deletions(-) rename SCrawler.PluginProvider/{Interfaces => ObjectInterfaces}/IPropertyProvider.vb (100%) diff --git a/Changelog.md b/Changelog.md index 17f8973..3543ed6 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,12 @@ +# 2023.2.5.0 + +*2023-02-05* + +- Added + - The ability to configure UserAgent +- Fixed + - (Issue #101) Failed download Gfycat video in some cases + # 2023.1.27.0 *2023-01-27* diff --git a/ProgramScreenshots/SettingsGlobalBasis.png b/ProgramScreenshots/SettingsGlobalBasis.png index 348c031a6908119c51f5e4cea7145a2002601378..d8b6f12a289879bac1fbf0b125c5af666dd0b2d0 100644 GIT binary patch literal 20182 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 u^X&U3QmVb62HcDED=MmBIff;cG5_i%YA3sk9 - - + + diff --git a/SCrawler.PluginProvider/Interfaces/IPropertyProvider.vb b/SCrawler.PluginProvider/ObjectInterfaces/IPropertyProvider.vb similarity index 100% rename from SCrawler.PluginProvider/Interfaces/IPropertyProvider.vb rename to SCrawler.PluginProvider/ObjectInterfaces/IPropertyProvider.vb diff --git a/SCrawler.PluginProvider/SCrawler.PluginProvider.vbproj b/SCrawler.PluginProvider/SCrawler.PluginProvider.vbproj index c5a6ecd..6b5a7f6 100644 --- a/SCrawler.PluginProvider/SCrawler.PluginProvider.vbproj +++ b/SCrawler.PluginProvider/SCrawler.PluginProvider.vbproj @@ -102,7 +102,7 @@ - + diff --git a/SCrawler/API/Base/SiteSettingsBase.vb b/SCrawler/API/Base/SiteSettingsBase.vb index c03b703..6504616 100644 --- a/SCrawler/API/Base/SiteSettingsBase.vb +++ b/SCrawler/API/Base/SiteSettingsBase.vb @@ -37,7 +37,6 @@ Namespace API.Base .LoadSettings() Else .CookiesDomain = CookiesDomain - .Cookies = New CookieKeeper(.CookiesDomain) With {.EncryptKey = SettingsCLS.CookieEncryptKey} .CookiesEncryptKey = SettingsCLS.CookieEncryptKey .SaveSettings() End If @@ -53,6 +52,7 @@ Namespace API.Base End Sub Friend Overridable Sub EndInit() Implements ISiteSettings.EndInit EncryptCookies.ValidateCookiesEncrypt(Responser) + If Not DefaultUserAgent.IsEmptyString And Not Responser Is Nothing Then Responser.UserAgent = DefaultUserAgent End Sub Friend Overridable Sub BeginUpdate() Implements ISiteSettings.BeginUpdate End Sub diff --git a/SCrawler/API/Gfycat/Envir.vb b/SCrawler/API/Gfycat/Envir.vb index 11bcbd9..482a883 100644 --- a/SCrawler/API/Gfycat/Envir.vb +++ b/SCrawler/API/Gfycat/Envir.vb @@ -17,7 +17,18 @@ Namespace API.Gfycat Try Dim r$ Using w As New WebClient : r = w.DownloadString(URL) : End Using - If Not r.IsEmptyString Then Return RegexReplace(r, RParams.DMS("contentUrl.:.(http.?://[^""]+?\.mp4)", 1)) Else Return String.Empty + If Not r.IsEmptyString Then + Dim _url$ = RegexReplace(r, RParams.DMS("contentUrl.:.(http.?://[^""]+?\.mp4)", 1, EDP.ReturnValue)) + If Not _url.IsEmptyString Then + If _url.Contains("redgifs.com") Then + _url = RegexReplace(_url, RParams.DMS("([^/-]+)[-\w]*\.mp4", 1, EDP.ReturnValue)) + If Not _url.IsEmptyString Then Return $"https://www.redgifs.com/watch/{_url}" + Else + Return _url + End If + End If + End If + Return String.Empty Catch ex As Exception Dim e As EDP = EDP.ReturnValue If TypeOf ex Is WebException Then diff --git a/SCrawler/API/LPSG/SiteSettings.vb b/SCrawler/API/LPSG/SiteSettings.vb index f8ebf31..47d5449 100644 --- a/SCrawler/API/LPSG/SiteSettings.vb +++ b/SCrawler/API/LPSG/SiteSettings.vb @@ -31,7 +31,7 @@ Namespace API.LPSG Return New UserData End Function Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean - Return If(Responser.Cookies?.Count, 0) > 0 + Return Responser.CookiesExists End Function End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Reddit/UserData.vb b/SCrawler/API/Reddit/UserData.vb index 1043d5b..f83ed61 100644 --- a/SCrawler/API/Reddit/UserData.vb +++ b/SCrawler/API/Reddit/UserData.vb @@ -533,31 +533,36 @@ Namespace API.Reddit Dim e As New ErrorsDescriber(EDP.ReturnValue) Dim m As UserMedia, m2 As UserMedia Dim RedGifsHost As SettingsHost = Settings(RedGifs.RedGifsSiteKey) + Dim _repeatForRedgifs As Boolean RedGifsResponser = RedGifsHost.Responser.Copy For i% = _TempMediaList.Count - 1 To 0 Step -1 ThrowAny(Token) If _TempMediaList(i).Type = UTypes.VideoPre Or _TempMediaList(i).Type = v2 Then m = _TempMediaList(i) If _TempMediaList(i).Type = UTypes.VideoPre Then - If m.URL.Contains($"{SiteGfycatKey}.com") Then - r = Gfycat.Envir.GetVideo(m.URL) - ElseIf m.URL.Contains(SiteRedGifsKey) Then - m2 = RedGifs.UserData.GetDataFromUrlId(m.URL, False, RedGifsResponser, RedGifsHost) - If m2.State = UStates.Missing Then - m.State = UStates.Missing - _ContentList.Add(m) - _TempMediaList.RemoveAt(i) - ElseIf m2.State = RedGifs.UserData.DataGone Then - _TempMediaList.RemoveAt(i) + Do + _repeatForRedgifs = False + If m.URL.Contains($"{SiteGfycatKey}.com") Then + r = Gfycat.Envir.GetVideo(m.URL) + If Not r.IsEmptyString AndAlso r.Contains("redgifs.com") Then m.URL = r : _repeatForRedgifs = True + ElseIf m.URL.Contains(SiteRedGifsKey) Then + m2 = RedGifs.UserData.GetDataFromUrlId(m.URL, False, RedGifsResponser, RedGifsHost) + If m2.State = UStates.Missing Then + m.State = UStates.Missing + _ContentList.Add(m) + _TempMediaList.RemoveAt(i) + ElseIf m2.State = RedGifs.UserData.DataGone Then + _TempMediaList.RemoveAt(i) + Else + m2.URL_BASE = m.URL + m2.Post = m.Post + _TempMediaList(i) = m2 + End If + Continue For Else - m2.URL_BASE = m.URL - m2.Post = m.Post - _TempMediaList(i) = m2 + r = Responser.GetResponse(m.URL,, e) End If - Continue For - Else - r = Responser.GetResponse(m.URL,, e) - End If + Loop While _repeatForRedgifs Else r = m.URL End If diff --git a/SCrawler/API/TikTok/SiteSettings.vb b/SCrawler/API/TikTok/SiteSettings.vb index dfc958e..fd3574e 100644 --- a/SCrawler/API/TikTok/SiteSettings.vb +++ b/SCrawler/API/TikTok/SiteSettings.vb @@ -36,7 +36,7 @@ Namespace API.TikTok Return UserData.GetVideoInfo(URL, Responser) End Function Friend Overrides Function BaseAuthExists() As Boolean - Return If(Responser.Cookies?.Count, 0) > 0 + Return Responser.CookiesExists End Function End Class End Namespace \ No newline at end of file diff --git a/SCrawler/API/Twitter/OptionsForm.vb b/SCrawler/API/Twitter/OptionsForm.vb index e7f74be..970e6d5 100644 --- a/SCrawler/API/Twitter/OptionsForm.vb +++ b/SCrawler/API/Twitter/OptionsForm.vb @@ -6,7 +6,6 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY -Imports System.Reflection Imports SCrawler.Plugin.Attributes Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Controls diff --git a/SCrawler/API/Twitter/SiteSettings.vb b/SCrawler/API/Twitter/SiteSettings.vb index e34ca4b..004574a 100644 --- a/SCrawler/API/Twitter/SiteSettings.vb +++ b/SCrawler/API/Twitter/SiteSettings.vb @@ -81,15 +81,17 @@ Namespace API.Twitter With Responser If .File.Exists Then + Dim b As Boolean = .CookiesDomain.IsEmptyString If EncryptCookies.CookiesEncrypted Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey .LoadSettings() a = .Headers.Value(Header_Authorization) t = .Headers.Value(Header_Token) + .CookiesDomain = "twitter.com" + If b Then .SaveSettings() Else .ContentType = "application/json" .Accept = "*/*" .CookiesDomain = "twitter.com" - .Cookies = New CookieKeeper(.CookiesDomain) With {.EncryptKey = SettingsCLS.CookieEncryptKey} .CookiesEncryptKey = SettingsCLS.CookieEncryptKey .Decoders.Add(SymbolsConverter.Converters.Unicode) .Headers.Add("sec-ch-ua", " Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91""") @@ -146,7 +148,7 @@ Namespace API.Twitter Return $"https://twitter.com/{User.Name}/status/{Media.Post.ID}" End Function Friend Overrides Function BaseAuthExists() As Boolean - Return If(Responser.Cookies?.Count, 0) > 0 And ACheck(Token.Value) And ACheck(Auth.Value) + Return Responser.CookiesExists And ACheck(Token.Value) And ACheck(Auth.Value) End Function Friend Overrides Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) If Options Is Nothing OrElse Not TypeOf Options Is EditorExchangeOptions Then Options = New EditorExchangeOptions(Me) diff --git a/SCrawler/API/XVIDEOS/SiteSettings.vb b/SCrawler/API/XVIDEOS/SiteSettings.vb index 13c9c7c..63c6b37 100644 --- a/SCrawler/API/XVIDEOS/SiteSettings.vb +++ b/SCrawler/API/XVIDEOS/SiteSettings.vb @@ -63,6 +63,7 @@ Namespace API.XVIDEOS Initialized = True DomainContainer.EndInit(Me) DomainsTemp.ListAddList(Domains) + MyBase.EndInit() End Sub #End Region #Region "Edit" @@ -94,7 +95,7 @@ Namespace API.XVIDEOS Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean If Settings.UseM3U8 Then If What = ISiteSettings.Download.SavedPosts Then - Return ACheck(SavedVideosPlaylist.Value) And If(Responser.Cookies?.Count, 0) > 0 + Return ACheck(SavedVideosPlaylist.Value) And Responser.CookiesExists Else Return True End If diff --git a/SCrawler/Editors/GlobalSettingsForm.Designer.vb b/SCrawler/Editors/GlobalSettingsForm.Designer.vb index 773b016..84cf9e9 100644 --- a/SCrawler/Editors/GlobalSettingsForm.Designer.vb +++ b/SCrawler/Editors/GlobalSettingsForm.Designer.vb @@ -24,14 +24,16 @@ Namespace Editors Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim TP_BASIS As System.Windows.Forms.TableLayoutPanel - Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton13 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(GlobalSettingsForm)) - Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton14 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TP_IMAGES As System.Windows.Forms.TableLayoutPanel - Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton5 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton6 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton15 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton16 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton17 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton18 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton19 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton20 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TP_FILE_NAME As System.Windows.Forms.TableLayoutPanel Dim TP_FILE_PATTERNS As System.Windows.Forms.TableLayoutPanel Dim LBL_DATE_POS As System.Windows.Forms.Label @@ -44,14 +46,14 @@ Namespace Editors Dim TP_CHANNELS As System.Windows.Forms.TableLayoutPanel Dim TAB_BEHAVIOR As System.Windows.Forms.TabPage Dim TP_BEHAVIOR As System.Windows.Forms.TableLayoutPanel - Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton8 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton21 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton22 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TP_OPEN_INFO As System.Windows.Forms.TableLayoutPanel Dim TP_OPEN_PROGRESS As System.Windows.Forms.TableLayoutPanel Dim TAB_DOWN As System.Windows.Forms.TabPage Dim TP_DOWNLOADING As System.Windows.Forms.TableLayoutPanel - Dim ActionButton9 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton10 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton23 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton24 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TP_MISSING_DATA As System.Windows.Forms.TableLayoutPanel Dim TAB_FEED As System.Windows.Forms.TabPage Dim TP_FEED As System.Windows.Forms.TableLayoutPanel @@ -68,6 +70,7 @@ Namespace Editors Me.TXT_IMGUR_CLIENT_ID = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_SHOW_GROUPS = New System.Windows.Forms.CheckBox() Me.CH_USERS_GROUPING = New System.Windows.Forms.CheckBox() + Me.TXT_USER_AGENT = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.OPT_FILE_NAME_REPLACE = New System.Windows.Forms.RadioButton() Me.OPT_FILE_NAME_ADD_DATE = New System.Windows.Forms.RadioButton() Me.CH_FILE_NAME_CHANGE = New System.Windows.Forms.CheckBox() @@ -149,6 +152,7 @@ Namespace Editors CType(Me.TXT_MAX_JOBS_USERS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TXT_USER_AGENT, System.ComponentModel.ISupportInitialize).BeginInit() TP_FILE_NAME.SuspendLayout() TP_FILE_PATTERNS.SuspendLayout() TP_CHANNELS_IMGS.SuspendLayout() @@ -194,13 +198,14 @@ Namespace Editors TP_BASIS.Controls.Add(Me.TXT_MAX_JOBS_USERS, 0, 3) TP_BASIS.Controls.Add(Me.TXT_MAX_JOBS_CHANNELS, 0, 4) TP_BASIS.Controls.Add(Me.CH_CHECK_VER_START, 0, 5) - TP_BASIS.Controls.Add(Me.TXT_IMGUR_CLIENT_ID, 0, 6) - TP_BASIS.Controls.Add(Me.CH_SHOW_GROUPS, 0, 7) - TP_BASIS.Controls.Add(Me.CH_USERS_GROUPING, 0, 8) + TP_BASIS.Controls.Add(Me.TXT_IMGUR_CLIENT_ID, 0, 7) + TP_BASIS.Controls.Add(Me.CH_SHOW_GROUPS, 0, 8) + TP_BASIS.Controls.Add(Me.CH_USERS_GROUPING, 0, 9) + TP_BASIS.Controls.Add(Me.TXT_USER_AGENT, 0, 6) TP_BASIS.Dock = System.Windows.Forms.DockStyle.Fill TP_BASIS.Location = New System.Drawing.Point(3, 3) TP_BASIS.Name = "TP_BASIS" - TP_BASIS.RowCount = 10 + TP_BASIS.RowCount = 11 TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) @@ -208,20 +213,21 @@ Namespace Editors TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_BASIS.Size = New System.Drawing.Size(570, 278) + TP_BASIS.Size = New System.Drawing.Size(570, 279) TP_BASIS.TabIndex = 0 ' 'TXT_GLOBAL_PATH ' - ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image) - ActionButton1.Name = "Open" - ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image) - ActionButton2.Name = "Clear" - Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton1) - Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton2) + ActionButton13.BackgroundImage = CType(resources.GetObject("ActionButton13.BackgroundImage"), System.Drawing.Image) + ActionButton13.Name = "Open" + ActionButton14.BackgroundImage = CType(resources.GetObject("ActionButton14.BackgroundImage"), System.Drawing.Image) + ActionButton14.Name = "Clear" + Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton13) + Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton14) Me.TXT_GLOBAL_PATH.CaptionText = "Data Path" Me.TXT_GLOBAL_PATH.CaptionToolTipEnabled = True Me.TXT_GLOBAL_PATH.CaptionToolTipText = "Root path for storing users' data" @@ -282,9 +288,9 @@ Namespace Editors ' 'TXT_COLLECTIONS_PATH ' - ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image) - ActionButton3.Name = "Clear" - Me.TXT_COLLECTIONS_PATH.Buttons.Add(ActionButton3) + ActionButton15.BackgroundImage = CType(resources.GetObject("ActionButton15.BackgroundImage"), System.Drawing.Image) + ActionButton15.Name = "Clear" + Me.TXT_COLLECTIONS_PATH.Buttons.Add(ActionButton15) Me.TXT_COLLECTIONS_PATH.CaptionText = "Collections folder" Me.TXT_COLLECTIONS_PATH.CaptionToolTipEnabled = True Me.TXT_COLLECTIONS_PATH.CaptionToolTipText = "Set collections folder name (name only)" @@ -296,10 +302,10 @@ Namespace Editors ' 'TXT_MAX_JOBS_USERS ' - ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image) - ActionButton4.Name = "Refresh" - ActionButton4.ToolTipText = "Set to default" - Me.TXT_MAX_JOBS_USERS.Buttons.Add(ActionButton4) + ActionButton16.BackgroundImage = CType(resources.GetObject("ActionButton16.BackgroundImage"), System.Drawing.Image) + ActionButton16.Name = "Refresh" + ActionButton16.ToolTipText = "Set to default" + Me.TXT_MAX_JOBS_USERS.Buttons.Add(ActionButton16) Me.TXT_MAX_JOBS_USERS.CaptionSizeType = System.Windows.Forms.SizeType.Percent Me.TXT_MAX_JOBS_USERS.CaptionText = "Maximum downloading tasks of users" Me.TXT_MAX_JOBS_USERS.CaptionWidth = 50.0R @@ -315,10 +321,10 @@ Namespace Editors ' 'TXT_MAX_JOBS_CHANNELS ' - ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image) - ActionButton5.Name = "Refresh" - ActionButton5.ToolTipText = "Set to default" - Me.TXT_MAX_JOBS_CHANNELS.Buttons.Add(ActionButton5) + ActionButton17.BackgroundImage = CType(resources.GetObject("ActionButton17.BackgroundImage"), System.Drawing.Image) + ActionButton17.Name = "Refresh" + ActionButton17.ToolTipText = "Set to default" + Me.TXT_MAX_JOBS_CHANNELS.Buttons.Add(ActionButton17) Me.TXT_MAX_JOBS_CHANNELS.CaptionSizeType = System.Windows.Forms.SizeType.Percent Me.TXT_MAX_JOBS_CHANNELS.CaptionText = "Maximum downloading tasks of channels" Me.TXT_MAX_JOBS_CHANNELS.CaptionWidth = 50.0R @@ -345,24 +351,24 @@ Namespace Editors ' 'TXT_IMGUR_CLIENT_ID ' - ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image) - ActionButton6.Name = "Clear" - Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton6) + ActionButton18.BackgroundImage = CType(resources.GetObject("ActionButton18.BackgroundImage"), System.Drawing.Image) + ActionButton18.Name = "Clear" + Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton18) Me.TXT_IMGUR_CLIENT_ID.CaptionText = "Imgur Client ID" Me.TXT_IMGUR_CLIENT_ID.Dock = System.Windows.Forms.DockStyle.Fill - Me.TXT_IMGUR_CLIENT_ID.Location = New System.Drawing.Point(4, 175) + Me.TXT_IMGUR_CLIENT_ID.Location = New System.Drawing.Point(4, 204) Me.TXT_IMGUR_CLIENT_ID.Name = "TXT_IMGUR_CLIENT_ID" Me.TXT_IMGUR_CLIENT_ID.Size = New System.Drawing.Size(562, 22) - Me.TXT_IMGUR_CLIENT_ID.TabIndex = 6 + Me.TXT_IMGUR_CLIENT_ID.TabIndex = 7 ' 'CH_SHOW_GROUPS ' Me.CH_SHOW_GROUPS.AutoSize = True Me.CH_SHOW_GROUPS.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_SHOW_GROUPS.Location = New System.Drawing.Point(4, 204) + Me.CH_SHOW_GROUPS.Location = New System.Drawing.Point(4, 233) Me.CH_SHOW_GROUPS.Name = "CH_SHOW_GROUPS" Me.CH_SHOW_GROUPS.Size = New System.Drawing.Size(562, 19) - Me.CH_SHOW_GROUPS.TabIndex = 7 + Me.CH_SHOW_GROUPS.TabIndex = 8 Me.CH_SHOW_GROUPS.Text = "Show groups" TT_MAIN.SetToolTip(Me.CH_SHOW_GROUPS, "Grouping users by site") Me.CH_SHOW_GROUPS.UseVisualStyleBackColor = True @@ -371,14 +377,33 @@ Namespace Editors ' Me.CH_USERS_GROUPING.AutoSize = True Me.CH_USERS_GROUPING.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_USERS_GROUPING.Location = New System.Drawing.Point(4, 230) + Me.CH_USERS_GROUPING.Location = New System.Drawing.Point(4, 259) Me.CH_USERS_GROUPING.Name = "CH_USERS_GROUPING" Me.CH_USERS_GROUPING.Size = New System.Drawing.Size(562, 19) - Me.CH_USERS_GROUPING.TabIndex = 8 + Me.CH_USERS_GROUPING.TabIndex = 9 Me.CH_USERS_GROUPING.Text = "Use user grouping" TT_MAIN.SetToolTip(Me.CH_USERS_GROUPING, "Group users by groups and/or labels") Me.CH_USERS_GROUPING.UseVisualStyleBackColor = True ' + 'TXT_USER_AGENT + ' + ActionButton19.BackgroundImage = CType(resources.GetObject("ActionButton19.BackgroundImage"), System.Drawing.Image) + ActionButton19.Name = "Refresh" + ActionButton19.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton20.BackgroundImage = CType(resources.GetObject("ActionButton20.BackgroundImage"), System.Drawing.Image) + ActionButton20.Name = "Clear" + ActionButton20.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_USER_AGENT.Buttons.Add(ActionButton19) + Me.TXT_USER_AGENT.Buttons.Add(ActionButton20) + Me.TXT_USER_AGENT.CaptionText = "UserAgent" + Me.TXT_USER_AGENT.CaptionToolTipEnabled = True + Me.TXT_USER_AGENT.CaptionToolTipText = "Default user agent to use in requests" + Me.TXT_USER_AGENT.Dock = System.Windows.Forms.DockStyle.Fill + Me.TXT_USER_AGENT.Location = New System.Drawing.Point(4, 175) + Me.TXT_USER_AGENT.Name = "TXT_USER_AGENT" + Me.TXT_USER_AGENT.Size = New System.Drawing.Size(562, 22) + Me.TXT_USER_AGENT.TabIndex = 6 + ' 'TP_FILE_NAME ' TP_FILE_NAME.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] @@ -822,7 +847,7 @@ Namespace Editors TAB_BASIS.Location = New System.Drawing.Point(4, 22) TAB_BASIS.Name = "TAB_BASIS" TAB_BASIS.Padding = New System.Windows.Forms.Padding(3) - TAB_BASIS.Size = New System.Drawing.Size(576, 284) + TAB_BASIS.Size = New System.Drawing.Size(576, 285) TAB_BASIS.TabIndex = 0 TAB_BASIS.Text = "Basis" ' @@ -832,7 +857,7 @@ Namespace Editors TAB_DEFAULTS.Location = New System.Drawing.Point(4, 22) TAB_DEFAULTS.Name = "TAB_DEFAULTS" TAB_DEFAULTS.Padding = New System.Windows.Forms.Padding(3) - TAB_DEFAULTS.Size = New System.Drawing.Size(576, 284) + TAB_DEFAULTS.Size = New System.Drawing.Size(576, 338) TAB_DEFAULTS.TabIndex = 1 TAB_DEFAULTS.Text = "Defaults" ' @@ -856,7 +881,7 @@ Namespace Editors TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_DEFS.Size = New System.Drawing.Size(570, 278) + TP_DEFS.Size = New System.Drawing.Size(570, 332) TP_DEFS.TabIndex = 0 ' 'CH_DOWN_IMAGES_NATIVE @@ -876,7 +901,7 @@ Namespace Editors TAB_DEFS_CHANNELS.Location = New System.Drawing.Point(4, 22) TAB_DEFS_CHANNELS.Name = "TAB_DEFS_CHANNELS" TAB_DEFS_CHANNELS.Padding = New System.Windows.Forms.Padding(3) - TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(576, 284) + TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(576, 338) TAB_DEFS_CHANNELS.TabIndex = 4 TAB_DEFS_CHANNELS.Text = "Channels" ' @@ -900,7 +925,7 @@ Namespace Editors TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_CHANNELS.Size = New System.Drawing.Size(570, 278) + TP_CHANNELS.Size = New System.Drawing.Size(570, 332) TP_CHANNELS.TabIndex = 0 ' 'TXT_CHANNEL_USER_POST_LIMIT @@ -928,7 +953,7 @@ Namespace Editors TAB_BEHAVIOR.Controls.Add(TP_BEHAVIOR) TAB_BEHAVIOR.Location = New System.Drawing.Point(4, 22) TAB_BEHAVIOR.Name = "TAB_BEHAVIOR" - TAB_BEHAVIOR.Size = New System.Drawing.Size(576, 284) + TAB_BEHAVIOR.Size = New System.Drawing.Size(576, 338) TAB_BEHAVIOR.TabIndex = 5 TAB_BEHAVIOR.Text = "Behavior" ' @@ -959,17 +984,17 @@ Namespace Editors TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - TP_BEHAVIOR.Size = New System.Drawing.Size(576, 284) + TP_BEHAVIOR.Size = New System.Drawing.Size(576, 338) TP_BEHAVIOR.TabIndex = 0 ' 'TXT_FOLDER_CMD ' Me.TXT_FOLDER_CMD.AutoShowClearButton = True - ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image) - ActionButton7.Enabled = False - ActionButton7.Name = "Clear" - ActionButton7.Visible = False - Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton7) + ActionButton21.BackgroundImage = CType(resources.GetObject("ActionButton21.BackgroundImage"), System.Drawing.Image) + ActionButton21.Enabled = False + ActionButton21.Name = "Clear" + ActionButton21.Visible = False + Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton21) Me.TXT_FOLDER_CMD.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox Me.TXT_FOLDER_CMD.CaptionText = "Folder cmd" Me.TXT_FOLDER_CMD.CaptionToolTipEnabled = True @@ -1008,11 +1033,11 @@ Namespace Editors 'TXT_CLOSE_SCRIPT ' Me.TXT_CLOSE_SCRIPT.AutoShowClearButton = True - ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image) - ActionButton8.Enabled = False - ActionButton8.Name = "Clear" - ActionButton8.Visible = False - Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton8) + ActionButton22.BackgroundImage = CType(resources.GetObject("ActionButton22.BackgroundImage"), System.Drawing.Image) + ActionButton22.Enabled = False + ActionButton22.Name = "Clear" + ActionButton22.Visible = False + Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton22) Me.TXT_CLOSE_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox Me.TXT_CLOSE_SCRIPT.CaptionText = "Close cmd" Me.TXT_CLOSE_SCRIPT.CaptionToolTipEnabled = True @@ -1100,7 +1125,7 @@ Namespace Editors TAB_DOWN.Controls.Add(TP_DOWNLOADING) TAB_DOWN.Location = New System.Drawing.Point(4, 22) TAB_DOWN.Name = "TAB_DOWN" - TAB_DOWN.Size = New System.Drawing.Size(576, 284) + TAB_DOWN.Size = New System.Drawing.Size(576, 338) TAB_DOWN.TabIndex = 6 TAB_DOWN.Text = "Downloading" ' @@ -1128,17 +1153,17 @@ Namespace Editors TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_DOWNLOADING.Size = New System.Drawing.Size(576, 284) + TP_DOWNLOADING.Size = New System.Drawing.Size(576, 338) TP_DOWNLOADING.TabIndex = 0 ' 'TXT_SCRIPT ' - ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image) - ActionButton9.Name = "Open" - ActionButton10.BackgroundImage = CType(resources.GetObject("ActionButton10.BackgroundImage"), System.Drawing.Image) - ActionButton10.Name = "Clear" - Me.TXT_SCRIPT.Buttons.Add(ActionButton9) - Me.TXT_SCRIPT.Buttons.Add(ActionButton10) + ActionButton23.BackgroundImage = CType(resources.GetObject("ActionButton23.BackgroundImage"), System.Drawing.Image) + ActionButton23.Name = "Open" + ActionButton24.BackgroundImage = CType(resources.GetObject("ActionButton24.BackgroundImage"), System.Drawing.Image) + ActionButton24.Name = "Clear" + Me.TXT_SCRIPT.Buttons.Add(ActionButton23) + Me.TXT_SCRIPT.Buttons.Add(ActionButton24) Me.TXT_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox Me.TXT_SCRIPT.CaptionText = "Script" Me.TXT_SCRIPT.CaptionToolTipEnabled = True @@ -1191,7 +1216,7 @@ Namespace Editors TAB_FEED.Controls.Add(TP_FEED) TAB_FEED.Location = New System.Drawing.Point(4, 22) TAB_FEED.Name = "TAB_FEED" - TAB_FEED.Size = New System.Drawing.Size(576, 284) + TAB_FEED.Size = New System.Drawing.Size(576, 338) TAB_FEED.TabIndex = 7 TAB_FEED.Text = "Feed" ' @@ -1215,7 +1240,7 @@ Namespace Editors TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_FEED.Size = New System.Drawing.Size(576, 284) + TP_FEED.Size = New System.Drawing.Size(576, 338) TP_FEED.TabIndex = 0 ' 'TP_FEED_IMG_COUNT @@ -1305,7 +1330,7 @@ Namespace Editors TAB_NOTIFY.Controls.Add(TP_NOTIFY_MAIN) TAB_NOTIFY.Location = New System.Drawing.Point(4, 22) TAB_NOTIFY.Name = "TAB_NOTIFY" - TAB_NOTIFY.Size = New System.Drawing.Size(576, 284) + TAB_NOTIFY.Size = New System.Drawing.Size(576, 338) TAB_NOTIFY.TabIndex = 8 TAB_NOTIFY.Text = "Notifications" ' @@ -1332,7 +1357,7 @@ Namespace Editors TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_NOTIFY_MAIN.Size = New System.Drawing.Size(576, 284) + TP_NOTIFY_MAIN.Size = New System.Drawing.Size(576, 338) TP_NOTIFY_MAIN.TabIndex = 0 ' 'TAB_MAIN @@ -1348,7 +1373,7 @@ Namespace Editors Me.TAB_MAIN.Location = New System.Drawing.Point(0, 0) Me.TAB_MAIN.Name = "TAB_MAIN" Me.TAB_MAIN.SelectedIndex = 0 - Me.TAB_MAIN.Size = New System.Drawing.Size(584, 310) + Me.TAB_MAIN.Size = New System.Drawing.Size(584, 311) Me.TAB_MAIN.TabIndex = 1 ' 'CONTAINER_MAIN @@ -1357,13 +1382,13 @@ Namespace Editors 'CONTAINER_MAIN.ContentPanel ' Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TAB_MAIN) - Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 310) + Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 311) Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN" Me.CONTAINER_MAIN.RightToolStripPanelVisible = False - Me.CONTAINER_MAIN.Size = New System.Drawing.Size(584, 310) + Me.CONTAINER_MAIN.Size = New System.Drawing.Size(584, 336) Me.CONTAINER_MAIN.TabIndex = 0 Me.CONTAINER_MAIN.TopToolStripPanelVisible = False ' @@ -1371,15 +1396,15 @@ Namespace Editors ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(584, 310) + Me.ClientSize = New System.Drawing.Size(584, 336) Me.Controls.Add(Me.CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.Icon = Global.SCrawler.My.Resources.Resources.SettingsIcon_48 Me.KeyPreview = True Me.MaximizeBox = False - Me.MaximumSize = New System.Drawing.Size(600, 349) + Me.MaximumSize = New System.Drawing.Size(600, 375) Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(600, 349) + Me.MinimumSize = New System.Drawing.Size(600, 375) Me.Name = "GlobalSettingsForm" Me.ShowInTaskbar = False Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide @@ -1394,6 +1419,7 @@ Namespace Editors CType(Me.TXT_MAX_JOBS_USERS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TXT_USER_AGENT, System.ComponentModel.ISupportInitialize).EndInit() TP_FILE_NAME.ResumeLayout(False) TP_FILE_NAME.PerformLayout() TP_FILE_PATTERNS.ResumeLayout(False) @@ -1499,5 +1525,6 @@ Namespace Editors Private WithEvents CH_NOTIFY_AUTO_DOWN As CheckBox Private WithEvents CH_NOTIFY_CHANNELS As CheckBox Private WithEvents CH_DOWN_REPARSE_MISSING As CheckBox + Private WithEvents TXT_USER_AGENT As PersonalUtilities.Forms.Controls.TextBoxExtended End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/GlobalSettingsForm.resx b/SCrawler/Editors/GlobalSettingsForm.resx index a5c2e62..99f7914 100644 --- a/SCrawler/Editors/GlobalSettingsForm.resx +++ b/SCrawler/Editors/GlobalSettingsForm.resx @@ -121,7 +121,7 @@ False - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -132,7 +132,7 @@ cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -143,7 +143,7 @@ False - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -151,7 +151,7 @@ AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -167,7 +167,7 @@ VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -183,7 +183,7 @@ VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -197,6 +197,30 @@ 17, 17 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + False @@ -206,6 +230,15 @@ False + + False + + + False + + + 17, 17 + This is a global setting for newly added users only. This parameter specifies how the video will be stored in the users' download path. @@ -233,19 +266,34 @@ You can find more detailed information about the missing posts in the form that False + + False + False False + + False + False False - + + False + + + False + + + False + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -253,7 +301,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -273,7 +321,13 @@ You can find more detailed information about the missing posts in the form that False - + + False + + + False + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -284,7 +338,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -301,6 +355,12 @@ You can find more detailed information about the missing posts in the form that False + + False + + + False + False @@ -310,4 +370,7 @@ You can find more detailed information about the missing posts in the form that False + + False + \ No newline at end of file diff --git a/SCrawler/Editors/GlobalSettingsForm.vb b/SCrawler/Editors/GlobalSettingsForm.vb index 7d1e797..52edccf 100644 --- a/SCrawler/Editors/GlobalSettingsForm.vb +++ b/SCrawler/Editors/GlobalSettingsForm.vb @@ -31,6 +31,7 @@ Namespace Editors TXT_MAX_JOBS_USERS.Value = .MaxUsersJobsCount.Value TXT_MAX_JOBS_CHANNELS.Value = .ChannelsMaxJobsCount.Value CH_CHECK_VER_START.Checked = .CheckUpdatesAtStart + TXT_USER_AGENT.Text = .UserAgent TXT_IMGUR_CLIENT_ID.Text = .ImgurClientID CH_SHOW_GROUPS.Checked = .ShowGroups CH_USERS_GROUPING.Checked = .UseGrouping @@ -147,6 +148,8 @@ Namespace Editors .MaxUsersJobsCount.Value = CInt(TXT_MAX_JOBS_USERS.Value) .ChannelsMaxJobsCount.Value = TXT_MAX_JOBS_CHANNELS.Value .CheckUpdatesAtStart.Value = CH_CHECK_VER_START.Checked + .UserAgent.Value = TXT_USER_AGENT.Text + DefaultUserAgent = TXT_USER_AGENT.Text .ImgurClientID.Value = TXT_IMGUR_CLIENT_ID.Text .ShowGroups.Value = CH_SHOW_GROUPS.Checked .UseGrouping.Value = CH_USERS_GROUPING.Checked @@ -231,6 +234,9 @@ Namespace Editors Private Sub TXT_MAX_JOBS_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_MAX_JOBS_CHANNELS.ActionOnButtonClick If Sender.DefaultButton = ADB.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks End Sub + Private Sub TXT_USER_AGENT_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_USER_AGENT.ActionOnButtonClick + If Sender.DefaultButton = ADB.Refresh Then TXT_USER_AGENT.Text = Settings.UserAgent.Value + End Sub Private Sub ChangePositionControlsEnabling() Handles OPT_FILE_NAME_REPLACE.CheckedChanged, OPT_FILE_NAME_ADD_DATE.CheckedChanged Dim b As Boolean = OPT_FILE_NAME_ADD_DATE.Checked And OPT_FILE_NAME_ADD_DATE.Enabled OPT_FILE_DATE_START.Enabled = b diff --git a/SCrawler/Editors/SiteEditorForm.vb b/SCrawler/Editors/SiteEditorForm.vb index 514c984..28b5baa 100644 --- a/SCrawler/Editors/SiteEditorForm.vb +++ b/SCrawler/Editors/SiteEditorForm.vb @@ -212,7 +212,7 @@ Namespace Editors Select Case Sender.DefaultButton Case ADB.Edit If Not Host.Responser Is Nothing Then - Using f As New CookieListForm With {.DesignXML = Settings.Design, .UseGrid = False} + Using f As New CookieListForm With {.DesignXML = Settings.Design, .ShowGrid = False} f.SetCollection(Host.Responser.Cookies) f.ShowDialog() If f.DialogResult = DialogResult.OK Then @@ -224,17 +224,14 @@ Namespace Editors End If Case ADB.Clear If Not Host.Responser Is Nothing Then - With Host.Responser - If Not .Cookies Is Nothing Then .Cookies.Dispose() - .Cookies = New CookieKeeper(.CookiesDomain) - MyDefs.MyOkCancel.EnableOK = True - End With + Host.Responser.Cookies.Clear() + MyDefs.MyOkCancel.EnableOK = True SetCookieText() End If End Select End Sub Private Sub SetCookieText() - If Not Host.Responser Is Nothing Then TXT_COOKIES.Text = $"{If(Host.Responser.Cookies?.Count, 0)} cookies" + If Not Host.Responser Is Nothing Then TXT_COOKIES.Text = $"{Host.Responser.Cookies.Count} cookies" End Sub Private Sub SpecialButton_Click(sender As Object, e As EventArgs) Handles SpecialButton.Click MyDefs.Detector() diff --git a/SCrawler/EncryptCookies.vb b/SCrawler/EncryptCookies.vb index 8cb4c50..0126191 100644 --- a/SCrawler/EncryptCookies.vb +++ b/SCrawler/EncryptCookies.vb @@ -12,15 +12,8 @@ Namespace EncryptCookies Friend CookiesEncrypted As Boolean = False Friend Sub ValidateCookiesEncrypt(ByRef Responser As Responser) If Not Responser Is Nothing Then - Dim b As Boolean = False With Responser - If Not .Cookies Is Nothing Then - With .Cookies - If .EncryptKey.IsEmptyString Then .EncryptKey = SettingsCLS.CookieEncryptKey : b = .Count > 0 - End With - End If - If .CookiesEncryptKey.IsEmptyString Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey : b = True - If b Then .SaveSettings() + If .CookiesEncryptKey.IsEmptyString Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey : .SaveSettings() End With End If End Sub diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index 42d5f9f..6392492 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -1623,7 +1623,7 @@ ResumeDownloadingOperation: Private Sub Downloader_Downloading(ByVal Value As Boolean) Dim __isDownloading As Boolean = Value Or Downloader.Working ControlInvokeFast(Toolbar_TOP, BTT_DOWN_STOP, Sub() BTT_DOWN_STOP.Enabled = __isDownloading) - ControlInvokeFast(Me, Sub() TrayIcon.Icon = If(__isDownloading, My.Resources.ArrowDownIcon_Blue_24, My.Resources.RainbowIcon_48)) + TrayIcon.Icon = If(__isDownloading, My.Resources.ArrowDownIcon_Blue_24, My.Resources.RainbowIcon_48) End Sub #End Region End Class \ No newline at end of file diff --git a/SCrawler/MainMod.vb b/SCrawler/MainMod.vb index 1272ab1..3f0556b 100644 --- a/SCrawler/MainMod.vb +++ b/SCrawler/MainMod.vb @@ -108,6 +108,7 @@ Friend Module MainMod Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan} Friend ReadOnly UserExistsPredicate As New FPredicate(Of IUserData)(Function(u) u.Exists) Friend ReadOnly LogConnector As New LogHost + Friend DefaultUserAgent As String = String.Empty #Region "File name operations" Friend FileDateAppenderProvider As IFormatProvider ''' File, Date @@ -187,6 +188,7 @@ Friend Module MainMod If Not found Then If URL.Contains("gfycat") Then um = Gfycat.Envir.GetVideoInfo(URL) + If um.ListExists AndAlso um(0).URL.Contains("redgifs.com") Then Return DownloadVideoByURL(um(0).URL, AskForPath, Silent) ElseIf URL.Contains("imgur.com") Then um = Imgur.Envir.GetVideoInfo(URL) Else diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index 43195ea..4a27b16 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 fa66328..72ec4bf 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -100,6 +100,9 @@ Friend Class SettingsCLS : Implements IDisposable SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML) CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML) + UserAgent = New XMLValue(Of String)("UserAgent",, MyXML) + If Not UserAgent.IsEmptyString Then DefaultUserAgent = UserAgent + Dim n() As String = {"Search"} SearchInName = New XMLValue(Of Boolean)("SearchInName", True, MyXML, n) SearchInDescription = New XMLValue(Of Boolean)("SearchInDescription", False, MyXML, n) @@ -529,6 +532,7 @@ Friend Class SettingsCLS : Implements IDisposable Private ReadOnly Property CookiesEncrypted As XMLValue(Of Boolean) Friend ReadOnly Property AddMissingToLog As XMLValue(Of Boolean) Friend ReadOnly Property AddMissingErrorsToLog As XMLValue(Of Boolean) + Friend ReadOnly Property UserAgent As XMLValue(Of String) #Region "Search" Friend ReadOnly Property SearchInName As XMLValue(Of Boolean) Friend ReadOnly Property SearchInDescription As XMLValue(Of Boolean) diff --git a/SCrawler/UserFinder.vb b/SCrawler/UserFinder.vb index 1fb502a..968d280 100644 --- a/SCrawler/UserFinder.vb +++ b/SCrawler/UserFinder.vb @@ -183,7 +183,7 @@ Friend Class UserFinder : Implements IDisposable End If __added = {__added, __dup, __skipped}.ListToString(vbCr.StringDup(2)) If Not __added.IsEmptyString Then - Using t As New TextSaver("LOGs\ImportUsers.txt") With {.ForceAddDateTimeToFileName = True} + Using t As New TextSaver("LOGs\ImportUsers.txt") With {.FileForceAddDateTimeToName = True} t.Append(__added) If Added.Count > 0 Then t.AppendLine(vbNewLine.StringDup(2))