diff --git a/Changelog.md b/Changelog.md index fd524a0..348f5d9 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,14 +1,37 @@ +# 2024.11.21.0 + +*2024-11-21* + +- Added + - Sites: + - Instagram: + - setting to skip errors without disabling download *(site settings)* + - settings to force update of username and/or user information *(user settings)* + - setting to continue downloading profile if error 560 occurs while downloading user stories *(site settings)* + - improve username update algorithm + - YouTube: 404 error handling (community) + - Main window: add extra buttons for special download (limited and dated) in collection + - Global settings: ability to change the feed opening shortcut (`Ctrl+F`/`Alt+F` *(Settings - Behavior)*) + - Minor improvements +- Updated + - yt-dlp up to version **2024.11.18** + - gallery-dl up to version **1.27.7** +- Fixed + - Users: network paths aren't working + - Main window: in some cases users are not updated in the list + - Minor bugs + # 2024.10.24.0 *2024-10-24* - Added - - YouTube (standalone app) + - YouTube (standalone app): - settings `Embed thumbnail (cover)` and `Allow webm formats` - changed cover selection for music downloads - - allow `webm` formats is there are no `mp4` formats via http protocol (issue #211) + - allow `webm` formats if there are no `mp4` formats via http protocol (issue #211) - Sites: - - Instagram + - Instagram: - **ability to manually change username** - **mark user as non-existent if user `ID` cannot be obtained** - Twitter: **ability to manually change username** diff --git a/FAQ.md b/FAQ.md index 929d977..5a9d053 100644 --- a/FAQ.md +++ b/FAQ.md @@ -33,15 +33,15 @@ I strongly recommend you to **regularly** create backup copies of the settings f ## General questions - **PROFILES** - I added a profile but **nothing downloaded** :arrow_forward: check your cookies and [site requirements](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements). If there are any optional fields that you don't fill in, do so. Still nothing works - [report it](#how-to-report-a-problem)! - - User downloading failed :arrow_forward: check your credentials and **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**. If all settings are set and nothing works, [report it](#how-to-report-a-problem). Don't forget to attach the LOG. + - User downloading failed :arrow_forward: check your credentials and **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**. If all settings are set and nothing works, [report it](#how-to-report-a-problem). **Don't forget to attach the LOG.** - [How to redownload user](https://github.com/AAndyProgram/SCrawler/wiki#redownload-user) - How to **add profile** to download :arrow_forward: copy the **[profile URL](https://github.com/AAndyProgram/SCrawler/wiki#add-user)** and press `Insert` or `Ctrl+Insert`. **ALWAYS PASTE THE USER PROFILE URL**. After that select this user and press `F5` or click the `Download selected` button. - How to download **[saved posts](https://github.com/AAndyProgram/SCrawler/wiki#saved-posts)** - **[HOW TO ADD COOKIES](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies)** - [How to report a problem](#how-to-report-a-problem) - I want you to **add the site** to SCrawler :arrow_forward: **I'm not currently accepting requests to add new sites**, but you can [create a plugin](https://github.com/AAndyProgram/SCrawler/wiki/Plugins) (for your site) for SCrawler. -- What language is SCrawler written in :arrow_forward: vb.net -- I don't know vb.net and I can't write a plugin :arrow_forward: you can write a plugin in `C#` +- What language is SCrawler written in :arrow_forward: `vb.net` +- I don't know `vb.net` and I can't write a plugin :arrow_forward: you can write a plugin in `C#` - I have a suggestion, will it be added :arrow_forward: maybe if it interested me. - How to name files using a pattern (e.g. `Site_PostID_Name.jpg`) :arrow_forward: **there is no such functionality and there are no such plans**. - **DON'T CHANGE THE DEFAULT SITE SETTINGS UNLESS YOU KNOW EXACTLY WHAT YOU'RE DOING!** SCrawler already has all the default settings to work. You only need to add credentials (where [required](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)). @@ -61,7 +61,7 @@ I strongly recommend you to **regularly** create backup copies of the settings f *How to use: find the site you need in the list and read the answer.* -- Reddit: don't use credentials at all or configure [OAuth](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-get-reddit-credentials). **Reddit profiles can be downloaded without any credentials at all. Subreddits require OAuth! If nothing downloads, use OAuth!** +- Reddit: don't use credentials at all or configure [OAuth](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-get-reddit-credentials). **Reddit profiles can be downloaded without any credentials at all. Subreddits require OAuth! If nothing downloads, use OAuth!** Don't use OAuth token to download saved posts (use cookies only). - **META** (**Instagram**, Threads, Facebook): you need **cookies** and fill in **all fields** - **Instagram saved posts**: I don't consider questions like "I have 10k saved posts and only 1000 were downloaded". Download posts, remove them from saved posts, delete the `Saved posts` **settings folder**, repeat. - TikTok: works via yt-dlp. If something doesn't download, we need to wait until yt-dlp fixes it. TikTok doesn't require cookies to download. diff --git a/SCrawler/API/Base/UserDataBase.vb b/SCrawler/API/Base/UserDataBase.vb index 06b85bd..f2545ba 100644 --- a/SCrawler/API/Base/UserDataBase.vb +++ b/SCrawler/API/Base/UserDataBase.vb @@ -80,6 +80,8 @@ Namespace API.Base Private _CollectionButtonsExists As Boolean = False Private _CollectionButtonsColorsSet As Boolean = False Friend WithEvents BTT_CONTEXT_DOWN As ToolStripKeyMenuItem + Friend WithEvents BTT_CONTEXT_DOWN_LIMIT As ToolStripKeyMenuItem + Friend WithEvents BTT_CONTEXT_DOWN_DATE As ToolStripKeyMenuItem Friend WithEvents BTT_CONTEXT_EDIT As ToolStripMenuItem Friend WithEvents BTT_CONTEXT_DELETE As ToolStripMenuItem Friend WithEvents BTT_CONTEXT_ERASE As ToolStripMenuItem @@ -98,6 +100,8 @@ Namespace API.Base End If End With BTT_CONTEXT_DOWN = New ToolStripKeyMenuItem(tn, i) With {.Name = tnn("DOWN"), .Tag = Me} + BTT_CONTEXT_DOWN_LIMIT = New ToolStripKeyMenuItem(tn, i) With {.Name = tnn("DOWN_LIMIT"), .Tag = Me} + BTT_CONTEXT_DOWN_DATE = New ToolStripKeyMenuItem(tn, i) With {.Name = tnn("DOWN_DATE"), .Tag = Me} BTT_CONTEXT_EDIT = New ToolStripMenuItem(tn, i) With {.Name = tnn("EDIT"), .Tag = Me} BTT_CONTEXT_DELETE = New ToolStripMenuItem(tn, i) With {.Name = tnn("DELETE"), .Tag = Me} BTT_CONTEXT_ERASE = New ToolStripMenuItem(tn, i) With {.Name = tnn("ERASE"), .Tag = Me} @@ -117,7 +121,8 @@ Namespace API.Base cb = MyColor.EditBack cf = MyColor.EditFore End If - For Each b As ToolStripMenuItem In {BTT_CONTEXT_DOWN, BTT_CONTEXT_EDIT, BTT_CONTEXT_DELETE, BTT_CONTEXT_ERASE, + For Each b As ToolStripMenuItem In {BTT_CONTEXT_DOWN, BTT_CONTEXT_DOWN_LIMIT, BTT_CONTEXT_DOWN_DATE, + BTT_CONTEXT_EDIT, BTT_CONTEXT_DELETE, BTT_CONTEXT_ERASE, BTT_CONTEXT_OPEN_PATH, BTT_CONTEXT_OPEN_SITE} If Not b Is Nothing Then b.BackColor = cb : b.ForeColor = cf Next @@ -1282,12 +1287,14 @@ BlockNullPicture: ErrorsDescriber.Execute(EDP.SendToLog, exit_ex, $"{ToStringForLog()}: downloading interrupted (exit)") End If End If + If _EnvirInvokeUserUpdated Then OnUserUpdated() Canceled = True Catch dex As ObjectDisposedException When Disposed Canceled = True Catch ex As Exception UpdateUserInformation_Ex() LogError(ex, "downloading data error") + If _EnvirInvokeUserUpdated Then OnUserUpdated() HasError = True Finally If Not UserExists Then AddNonExistingUserToLog($"User '{ToStringForLog()}' not found on the site") @@ -2191,6 +2198,12 @@ BlockNullPicture: Private Sub BTT_CONTEXT_DOWN_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN.KeyClick Downloader.Add(Me, e.IncludeInTheFeed) End Sub + Private Sub BTT_CONTEXT_DOWN_LIMIT_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN_LIMIT.KeyClick + ControlInvokeFast(MainFrameObj.MF, Sub() MainFrameObj.MF.DownloadSelectedUser(MainFrame.DownUserLimits.Number, e.IncludeInTheFeed, Me), EDP.SendToLog) + End Sub + Private Sub BTT_CONTEXT_DOWN_DATE_KeyClick(sender As Object, e As MyKeyEventArgs) Handles BTT_CONTEXT_DOWN_DATE.KeyClick + ControlInvokeFast(MainFrameObj.MF, Sub() MainFrameObj.MF.DownloadSelectedUser(MainFrame.DownUserLimits.Date, e.IncludeInTheFeed, Me), EDP.SendToLog) + End Sub Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click Using f As New Editors.UserCreatorForm(Me) f.ShowDialog() @@ -2271,6 +2284,8 @@ BlockNullPicture: If Not ProgressPre Is Nothing Then ProgressPre.Reset() : ProgressPre.Dispose() If Not Responser Is Nothing Then Responser.Dispose() If Not BTT_CONTEXT_DOWN Is Nothing Then BTT_CONTEXT_DOWN.Dispose() + If Not BTT_CONTEXT_DOWN_LIMIT Is Nothing Then BTT_CONTEXT_DOWN_LIMIT.Dispose() + If Not BTT_CONTEXT_DOWN_DATE Is Nothing Then BTT_CONTEXT_DOWN_DATE.Dispose() If Not BTT_CONTEXT_EDIT Is Nothing Then BTT_CONTEXT_EDIT.Dispose() If Not BTT_CONTEXT_DELETE Is Nothing Then BTT_CONTEXT_DELETE.Dispose() If Not BTT_CONTEXT_ERASE Is Nothing Then BTT_CONTEXT_ERASE.Dispose() diff --git a/SCrawler/API/Instagram/EditorExchangeOptions.vb b/SCrawler/API/Instagram/EditorExchangeOptions.vb index d092a63..08c8b7e 100644 --- a/SCrawler/API/Instagram/EditorExchangeOptions.vb +++ b/SCrawler/API/Instagram/EditorExchangeOptions.vb @@ -9,7 +9,7 @@ Imports SCrawler.Plugin.Attributes Imports DN = SCrawler.API.Base.DeclaredNames Namespace API.Instagram - Friend Class EditorExchangeOptions + Friend NotInheritable Class EditorExchangeOptions #Region "Download" Friend Property GetTimeline As Boolean @@ -37,7 +37,11 @@ Namespace API.Instagram Friend Property PutImageVideoFolder As Boolean - Friend Overridable Property UserName As String = String.Empty + Friend Property UserName As String = String.Empty + + Friend Property ForceUpdateUserName As Boolean = False + + Friend Property ForceUpdateUserInfo As Boolean = False Friend Sub New(ByVal u As UserData) With u GetTimeline = .GetTimeline @@ -55,6 +59,8 @@ Namespace API.Instagram PutImageVideoFolder = .PutImageVideoFolder UserName = .NameTrue(True) + ForceUpdateUserName = .ForceUpdateUserName + ForceUpdateUserInfo = .ForceUpdateUserInfo End With End Sub Friend Sub New(ByVal s As SiteSettings) diff --git a/SCrawler/API/Instagram/SiteSettings.vb b/SCrawler/API/Instagram/SiteSettings.vb index cebff7e..bb920e9 100644 --- a/SCrawler/API/Instagram/SiteSettings.vb +++ b/SCrawler/API/Instagram/SiteSettings.vb @@ -58,8 +58,10 @@ Namespace API.Instagram #Region "Categories" Private Const CAT_DOWN As String = "Download data" Private Const CAT_UserDefs_VIDEO As String = DN.CAT_UserDefs & ": extract image from video" + Private Const CAT_ERRORS As String = "Errors" #End Region -#Region "Authorization properties" +#Region "Properties" +#Region "Authorization" Friend Const Header_IG_APP_ID As String = "x-ig-app-id" Friend Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim" Friend Const Header_CSRF_TOKEN As String = "x-csrftoken" @@ -68,18 +70,18 @@ Namespace API.Instagram Friend Const Header_Browser As String = "Sec-Ch-Ua" Friend Const Header_BrowserExt As String = "Sec-Ch-Ua-Full-Version-List" Friend Const Header_Platform_Verion As String = "Sec-Ch-Ua-Platform-Version" - + Friend ReadOnly Property HH_CSRF_TOKEN As PropertyValue Private Function GetValueFromCookies(ByVal PropName As String, ByVal c As CookieKeeper) As String Return c.GetCookieValue(Header_CSRF_TOKEN_COOKIE, PropName, NameOf(HH_CSRF_TOKEN)) End Function - + Friend ReadOnly Property HH_IG_APP_ID As PropertyValue - + Friend ReadOnly Property HH_ASBD_ID As PropertyValue 'PropertyOption(ControlText:="x-ig-www-claim", IsAuth:=True, AllowNull:=True) - + Friend ReadOnly Property HH_IG_WWW_CLAIM As PropertyValue Private ReadOnly Property HH_IG_WWW_CLAIM_IS_ZERO As Boolean Get @@ -88,16 +90,16 @@ Namespace API.Instagram End Get End Property + InheritanceName:=SettingsCLS.HEADER_DEF_sec_ch_ua), PClonable, PXML(OnlyForChecked:=True)> Private ReadOnly Property HH_BROWSER As PropertyValue + InheritanceName:=SettingsCLS.HEADER_DEF_sec_ch_ua_full_version_list), PClonable, PXML(OnlyForChecked:=True)> Private ReadOnly Property HH_BROWSER_EXT As PropertyValue + InheritanceName:=SettingsCLS.HEADER_DEF_sec_ch_ua_platform_version), PClonable, PXML(OnlyForChecked:=True)> Private ReadOnly Property HH_PLATFORM As PropertyValue + InheritanceName:=SettingsCLS.HEADER_DEF_UserAgent), PClonable, PXML(OnlyForChecked:=True)> Private ReadOnly Property HH_USER_AGENT As PropertyValue Friend Overrides Function BaseAuthExists() As Boolean Return Responser.CookiesExists And ACheck(HH_IG_APP_ID.Value) And ACheck(HH_CSRF_TOKEN.Value) @@ -126,113 +128,147 @@ Namespace API.Instagram End If End Sub #Region "HH_IG_WWW_CLAIM" - + Private ReadOnly Property HH_IG_WWW_CLAIM_UPDATE_INTERVAL As PropertyValue + PXML, PClonable, HiddenControl> Friend ReadOnly Property HH_IG_WWW_CLAIM_ALWAYS_ZERO As PropertyValue + PXML, PClonable, HiddenControl> Friend ReadOnly Property HH_IG_WWW_CLAIM_RESET_EACH_SESSION As PropertyValue + PXML, PClonable, HiddenControl> Friend ReadOnly Property HH_IG_WWW_CLAIM_RESET_EACH_TARGET As PropertyValue - + Friend ReadOnly Property HH_IG_WWW_CLAIM_USE As PropertyValue - + Friend ReadOnly Property HH_IG_WWW_CLAIM_USE_DEFAULT_ALGO As PropertyValue Private ReadOnly Property TokenUpdateIntervalProvider As IFormatProvider #End Region - + Friend ReadOnly Property USE_GQL As PropertyValue #End Region -#Region "Download properties" - - Private ReadOnly Property DownDetectorValue As PropertyValue - - Private ReadOnly Property DownDetectorValueProvider As IFormatProvider - - Private ReadOnly Property DownDetectorValueAddToLog As PropertyValue +#Region "Download data" + + Friend ReadOnly Property DownloadTimeline As PropertyValue + Private ReadOnly Property DownloadTimeline_Def As PropertyValue + + Friend ReadOnly Property DownloadReels As PropertyValue + Private ReadOnly Property DownloadReels_Def As PropertyValue + + Friend ReadOnly Property DownloadStories As PropertyValue + Private ReadOnly Property DownloadStories_Def As PropertyValue + + Friend ReadOnly Property DownloadStoriesUser As PropertyValue + Private ReadOnly Property DownloadStoriesUser_Def As PropertyValue + + Friend ReadOnly Property DownloadTagged As PropertyValue + Private ReadOnly Property DownloadTagged_Def As PropertyValue +#End Region +#Region "Timers" Friend Const TimersUrgentTip As String = vbCr & "It is highly recommended not to change the default value." + PXML, PClonable> Friend ReadOnly Property RequestsWaitTimer_Any As PropertyValue Private ReadOnly Property RequestsWaitTimer_AnyProvider As IFormatProvider + AllowNull:=False, Category:=DN.CAT_Timers), PXML, PClonable> Friend ReadOnly Property RequestsWaitTimer As PropertyValue Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider + AllowNull:=False, LeftOffset:=120, Category:=DN.CAT_Timers), PXML, PClonable> Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider + AllowNull:=False, Category:=DN.CAT_Timers), PXML, PClonable> Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider - +#End Region +#Region "New user defaults" + Friend ReadOnly Property GetTimeline As PropertyValue - + Friend ReadOnly Property GetTimeline_VideoPic As PropertyValue - + Friend ReadOnly Property GetReels As PropertyValue - + Friend ReadOnly Property GetReels_VideoPic As PropertyValue - + Friend ReadOnly Property GetStories As PropertyValue - + Friend ReadOnly Property GetStories_VideoPic As PropertyValue - + Friend ReadOnly Property GetStoriesUser As PropertyValue - + Friend ReadOnly Property GetStoriesUser_VideoPic As PropertyValue - + Friend ReadOnly Property GetTagged As PropertyValue - + Friend ReadOnly Property GetTagged_VideoPic As PropertyValue - + Friend ReadOnly Property GetSavedPosts_VideoPic As PropertyValue - + Friend ReadOnly Property PutImageVideoFolder As PropertyValue +#End Region +#Region "Errors" + Private Const ErrorsDefault As String = "572" + + Private ReadOnly Property SkipErrors As PropertyValue + + Private ReadOnly Property SkipErrors_AddToLog As PropertyValue + + Private ReadOnly Property SkipErrors_AddToLog_Silent As PropertyValue + Friend ReadOnly Property ErrorSpecialHandling(ByVal ErrCode As Integer) As Boolean + Get + With CStr(SkipErrors.Value) : Return Not .IsEmptyString AndAlso .Contains(ErrCode) : End With + End Get + End Property + Friend ReadOnly Property ErrorSpecialHandling_AddToLog(ByVal ErrCode As Integer) As Boolean + Get + With CStr(SkipErrors_AddToLog_Silent.Value) + Return CBool(SkipErrors_AddToLog.Value) AndAlso (.IsEmptyString OrElse Not .Contains(ErrCode)) + End With + End Get + End Property + + Friend ReadOnly Property IgnoreStoriesDownloadingErrors As PropertyValue +#End Region +#Region "Other params" + + Private ReadOnly Property DownDetectorValue As PropertyValue + + Private ReadOnly Property DownDetectorValueProvider As IFormatProvider + + Private ReadOnly Property DownDetectorValueAddToLog As PropertyValue + "-1 to disable"), PXML, PClonable> Friend ReadOnly Property TaggedNotifyLimit As PropertyValue Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider #End Region -#Region "Download ready" - - Friend ReadOnly Property DownloadTimeline As PropertyValue - Private ReadOnly Property DownloadTimeline_Def As PropertyValue - - Friend ReadOnly Property DownloadReels As PropertyValue - Private ReadOnly Property DownloadReels_Def As PropertyValue - - Friend ReadOnly Property DownloadStories As PropertyValue - Private ReadOnly Property DownloadStories_Def As PropertyValue - - Friend ReadOnly Property DownloadStoriesUser As PropertyValue - Private ReadOnly Property DownloadStoriesUser_Def As PropertyValue - - Friend ReadOnly Property DownloadTagged As PropertyValue - Private ReadOnly Property DownloadTagged_Def As PropertyValue #End Region #Region "429 bypass" @@ -266,8 +302,40 @@ Namespace API.Instagram End Get End Property Private Const LastDownloadDateResetInterval As Integer = 60 + Private TooManyRequestsReadyForCatch As Boolean = True + Friend Function GetWaitDate() As Date + With DownloadingErrorDate + If ACheck(Of Date)(.Value) Then + Return CDate(.Value).AddMinutes(If(LastApplyingValue, 10)) + Else + Return Now + End If + End With + End Function + Friend Sub TooManyRequests(ByVal Catched As Boolean) + With DownloadingErrorDate + If Catched Then + If Not ACheck(Of Date)(.Value) Then + .Value = Now + If TooManyRequestsReadyForCatch Then + LastApplyingValue = If(LastApplyingValue, 0) + 10 + TooManyRequestsReadyForCatch = False + MyMainLOG = $"Instagram downloading error: too many requests. Try again after {If(LastApplyingValue, 10)} minutes..." + End If + End If + Else + .Value = Nothing + LastApplyingValue = Nothing + TooManyRequestsReadyForCatch = True + End If + End With + End Sub +#End Region +#Region "LastRequestsCount, Label" Private ReadOnly Property LastDownloadDate As PropertyValue Private ReadOnly Property LastRequestsCount As PropertyValue + + Private ReadOnly Property LastRequestsCountLabel As PropertyValue Private ReadOnly MyLastRequests As Dictionary(Of Date, Integer) Private ReadOnly Property MyLastRequestsDate As Date Get @@ -321,36 +389,6 @@ Namespace API.Instagram ErrorsDescriber.Execute(EDP.SendToLog, ex, "[SiteSettings.Instagram.RefreshMyLastRequests]") End Try End Sub - - Private ReadOnly Property LastRequestsCountLabel As PropertyValue - Private TooManyRequestsReadyForCatch As Boolean = True - Friend Function GetWaitDate() As Date - With DownloadingErrorDate - If ACheck(Of Date)(.Value) Then - Return CDate(.Value).AddMinutes(If(LastApplyingValue, 10)) - Else - Return Now - End If - End With - End Function - Friend Sub TooManyRequests(ByVal Catched As Boolean) - With DownloadingErrorDate - If Catched Then - If Not ACheck(Of Date)(.Value) Then - .Value = Now - If TooManyRequestsReadyForCatch Then - LastApplyingValue = If(LastApplyingValue, 0) + 10 - TooManyRequestsReadyForCatch = False - MyMainLOG = $"Instagram downloading error: too many requests. Try again after {If(LastApplyingValue, 10)} minutes..." - End If - End If - Else - .Value = Nothing - LastApplyingValue = Nothing - TooManyRequestsReadyForCatch = True - End If - End With - End Sub #End Region #End Region #Region "Initializer" @@ -427,9 +465,6 @@ Namespace API.Instagram DownloadTagged = New PropertyValue(False) DownloadTagged_Def = New PropertyValue(DownloadTagged.Value, GetType(Boolean)) - DownDetectorValue = New PropertyValue(20) - DownDetectorValueProvider = New TimersChecker(-1) - DownDetectorValueAddToLog = New PropertyValue(False) RequestsWaitTimer_Any = New PropertyValue(1000) RequestsWaitTimer_AnyProvider = New TimersChecker(0) RequestsWaitTimer = New PropertyValue(1000) @@ -451,6 +486,15 @@ Namespace API.Instagram GetTagged_VideoPic = New PropertyValue(True) GetSavedPosts_VideoPic = New PropertyValue(True) PutImageVideoFolder = New PropertyValue(False) + + SkipErrors = New PropertyValue(ErrorsDefault) + SkipErrors_AddToLog = New PropertyValue(True) + SkipErrors_AddToLog_Silent = New PropertyValue(String.Empty, GetType(String)) + IgnoreStoriesDownloadingErrors = New PropertyValue(False) + + DownDetectorValue = New PropertyValue(20) + DownDetectorValueProvider = New TimersChecker(-1) + DownDetectorValueAddToLog = New PropertyValue(False) TaggedNotifyLimit = New PropertyValue(200) TaggedNotifyLimitProvider = New TaggedNotifyLimitChecker diff --git a/SCrawler/API/Instagram/UserData.vb b/SCrawler/API/Instagram/UserData.vb index 145faa1..d9d8323 100644 --- a/SCrawler/API/Instagram/UserData.vb +++ b/SCrawler/API/Instagram/UserData.vb @@ -38,6 +38,8 @@ Namespace API.Instagram Private Const Name_PutImageVideoFolder As String = "PutImageVideoFolder" Private Const Name_TaggedChecked As String = "TaggedChecked" Private Const Name_NameTrue As String = "NameTrue" + Private Const Name_ForceUpdateUserName As String = "ForceUpdateUserName" + Private Const Name_ForceUpdateUserInfo As String = "ForceUpdateUserInfo" #End Region #Region "Declarations" Protected Structure PostKV : Implements IEContainerProvider @@ -118,6 +120,8 @@ Namespace API.Instagram End Get End Property Private UserNameRequested As Boolean = False + Friend Property ForceUpdateUserName As Boolean = False + Friend Property ForceUpdateUserInfo As Boolean = False #End Region #Region "Loader" Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean) @@ -138,6 +142,8 @@ Namespace API.Instagram GetTaggedData_VideoPic = .Value(Name_GetTagged_VideoPic).FromXML(Of Boolean)(CBool(MySiteSettings.GetTagged_VideoPic.Value)) TaggedChecked = .Value(Name_TaggedChecked).FromXML(Of Boolean)(False) _NameTrue = .Value(Name_NameTrue) + ForceUpdateUserName = .Value(Name_ForceUpdateUserName).FromXML(Of Boolean)(False) + ForceUpdateUserInfo = .Value(Name_ForceUpdateUserInfo).FromXML(Of Boolean)(False) Else .Add(Name_LastCursor, LastCursor) .Add(Name_FirstLoadingDone, FirstLoadingDone.BoolToInteger) @@ -154,6 +160,8 @@ Namespace API.Instagram .Add(Name_PutImageVideoFolder, PutImageVideoFolder.BoolToInteger) .Add(Name_TaggedChecked, TaggedChecked.BoolToInteger) .Add(Name_NameTrue, _NameTrue) + .Add(Name_ForceUpdateUserName, ForceUpdateUserName.BoolToInteger) + .Add(Name_ForceUpdateUserInfo, ForceUpdateUserInfo.BoolToInteger) End If End With End Sub @@ -180,6 +188,8 @@ Namespace API.Instagram PutImageVideoFolder = .PutImageVideoFolder _NameTrue = .UserName + ForceUpdateUserName = .ForceUpdateUserName + ForceUpdateUserInfo = .ForceUpdateUserInfo End With End If End Sub @@ -197,15 +207,32 @@ Namespace API.Instagram Private WwwClaimUse As Boolean = True Private E560Thrown As Boolean = False Friend Err5xx As Integer = -1 + Private _ErrHandling As Integer = -1 + Private Property ErrHandling As Integer + Get + Return _ErrHandling + End Get + Set(ByVal ErrCode As Integer) + _ErrHandling = ErrCode + Err5xx = ErrCode + End Set + End Property + Private ErrHandlingLog As Boolean = True + Private ErrHandlingSection As Sections = Sections.Timeline + Private Const ErrHandlingValue As Integer = 100 + Private Const ErrHandlingValueStories As Integer = 150 Private Class ExitException : Inherits Exception Friend Property Is560 As Boolean = False Friend Property IsTokens As Boolean = False Friend Property TokensData As String = String.Empty Friend Shared Sub Throw560(ByRef Source As UserData) - If Not Source.E560Thrown Then - MyMainLOG = $"{Source.ToStringForLog}: ({IIf(Source.Err5xx > 0, Source.Err5xx, 560)}) Download skipped until next session" - Source.E560Thrown = True - End If + With Source + If Not .E560Thrown Then + If .ErrHandling = -1 Or .ErrHandlingLog Then _ + MyMainLOG = $"{ .ToStringForLog}: ({IIf(.Err5xx > 0, .Err5xx, 560)}) Download skipped {If(.ErrHandling = -1, "until next session", $"({ .ErrHandlingSection})")}" + .E560Thrown = True + End If + End With Throw New ExitException With {.Is560 = True} End Sub Friend Shared Sub ThrowTokens(ByRef Source As UserData, ByVal Data As String) @@ -366,6 +393,9 @@ Namespace API.Instagram Dim errorFound As Boolean = False Try Err5xx = -1 + ErrHandling = -1 + ErrHandlingLog = True + ErrHandlingSection = Sections.Timeline _Limit = If(DownloadTopCount, -1) _TotalPostsParsed = 0 LoadSavePostsKV(True) @@ -638,6 +668,8 @@ Namespace API.Instagram If Not ValidateBaseTokens() Then GetPageTokens() If Not ValidateBaseTokens(TokensErrData) Then ValidateBaseTokens_Error(TokensErrData) End If + If ForceUpdateUserName Then GetUserNameById() + If ForceUpdateUserInfo Then GetUserData() End If 'Create query @@ -720,6 +752,14 @@ Namespace API.Instagram Select Case Section Case Sections.Timeline With n + If If(n("user")?.Count, 0) = 0 And Cursor.IsEmptyString Then + If Not UserNameRequested Then + ForceUpdateUserName = True + Continue Do + Else + UserExists = False + End If + End If HasNextPage = .Value("more_available").FromXML(Of Boolean)(False) EndCursor = .Value("next_max_id") If If(.Item("items")?.Count, 0) > 0 Then @@ -803,6 +843,11 @@ NextPageBlock: Throw eex Catch ex As Exception dValue = ProcessException(ex, Token, $"data downloading error [{URL}]",, Section, False) + If dValue = ErrHandlingValue Then + ExitException.Throw560(Me) + ElseIf dValue = ErrHandlingValueStories Then + Exit Sub + End If End Try Loop Catch jsonNull2 As JsonDocumentException When jsonNull2.State = WebDocumentEventArgs.States.Error And @@ -1143,6 +1188,7 @@ NextPageBlock: #Region "GetUserId, GetUserName" Private Sub GetUserData() Dim __idFound As Boolean = False + If ForceUpdateUserInfo Then ForceUpdateUserInfo = False : _ForceSaveUserInfo = True Try ChangeResponserMode(False) UpdateRequestNumber() @@ -1161,6 +1207,7 @@ NextPageBlock: If Not eUrl.IsEmptyString AndAlso (descr.IsEmptyString OrElse Not descr.Contains(eUrl)) Then descr.StringAppendLine(eUrl) UserDescriptionUpdate(descr) Dim f As New SFile With {.Path = DownloadContentDefault_GetRootDir(), .Name = "ProfilePicture", .Extension = "jpg"} + f = SFile.IndexReindex(f) If Not f.Exists Then Dim profilePicture$ = .Value("profile_pic_url_hd") If profilePicture.IsEmptyString OrElse Not GetWebFile(profilePicture, f, EDP.ReturnValue) Then @@ -1187,6 +1234,7 @@ NextPageBlock: End Sub Private Function GetUserNameById() As Boolean UserNameRequested = True + If ForceUpdateUserName Then ForceUpdateUserName = False : _ForceSaveUserInfo = True Try If Not ID.IsEmptyString Then UpdateRequestNumber() @@ -1203,7 +1251,7 @@ NextPageBlock: Dim descr$ = $"Username changed from '{oldName}' to '{newName}' ({Now.ToStringDate(ADateTime.Formats.BaseDateTime)})!" descr.StringAppendLine(UserDescription) UserDescription = descr - _ForceSaveUserData = True + _ForceSaveUserInfo = True End If Return True End If @@ -1282,20 +1330,15 @@ NextPageBlock: End If End Sub Private Function GetStoriesList() As List(Of String) - Try - UpdateRequestNumber() - Dim r$ = Responser.GetResponse($"https://i.instagram.com/api/v1/highlights/{ID}/highlights_tray/",, EDP.ThrowException) - If Not r.IsEmptyString Then - Dim ee As New ErrorsDescriber(EDP.ReturnValue) With {.DeclaredMessage = New MMessage($"{ToStringForLog()}:")} - Using j As EContainer = JsonDocument.Parse(r, ee).XmlIfNothing()("tray").XmlIfNothing - If j.Count > 0 Then Return j.Select(Function(jj) jj.Value("id").Replace("highlight:", String.Empty)).ListIfNothing - End Using - End If - Return Nothing - Catch ex As Exception - DownloadingException(ex, "API.Instagram.GetStoriesList", False, Sections.Stories) - Return Nothing - End Try + UpdateRequestNumber() + Dim r$ = Responser.GetResponse($"https://i.instagram.com/api/v1/highlights/{ID}/highlights_tray/",, EDP.ThrowException) + If Not r.IsEmptyString Then + Dim ee As New ErrorsDescriber(EDP.ReturnValue) With {.DeclaredMessage = New MMessage($"{ToStringForLog()}:")} + Using j As EContainer = JsonDocument.Parse(r, ee).XmlIfNothing()("tray").XmlIfNothing + If j.Count > 0 Then Return j.Select(Function(jj) jj.Value("id").Replace("highlight:", String.Empty)).ListIfNothing + End Using + End If + Return Nothing End Function #End Region #Region "Download content" @@ -1341,11 +1384,26 @@ NextPageBlock: MyMainLOG = $"Number of requests before error 429: {RequestsCount}" Return 1 ElseIf Responser.StatusCode = 560 Or Responser.StatusCode = HttpStatusCode.InternalServerError Then '560, 500 - MySiteSettings.SkipUntilNextSession = True - Err5xx = Responser.StatusCode + If Responser.StatusCode = 560 And s = Sections.Stories And MySiteSettings.IgnoreStoriesDownloadingErrors Then + MyMainLOG = $"{ToStringForLog()}: Stories downloading skipped (560)" + Return ErrHandlingValueStories + Else + MySiteSettings.SkipUntilNextSession = True + Err5xx = Responser.StatusCode + End If ElseIf Responser.StatusCode = -1 And Responser.Status = -1 Then MySiteSettings.SkipUntilNextSession = True Err5xx = Responser.StatusCode + ElseIf MySiteSettings.ErrorSpecialHandling(Responser.StatusCode) Then + ErrHandlingLog = MySiteSettings.ErrorSpecialHandling_AddToLog(Responser.StatusCode) + ErrHandling = Responser.StatusCode + ErrHandlingSection = s + Return ErrHandlingValue + ElseIf MySiteSettings.ErrorSpecialHandling(Responser.Status) Then + ErrHandlingLog = MySiteSettings.ErrorSpecialHandling_AddToLog(Responser.Status) + ErrHandling = Responser.Status + ErrHandlingSection = s + Return ErrHandlingValue Else MyMainLOG = $"Something is wrong. Your credentials may have expired [{CInt(Responser.StatusCode)}/{CInt(Responser.Status)}]: {ToString()} [{s}]" DisableSection(s) diff --git a/SCrawler/API/OnlyFans/SiteSettings.vb b/SCrawler/API/OnlyFans/SiteSettings.vb index a2ebed7..d26d37b 100644 --- a/SCrawler/API/OnlyFans/SiteSettings.vb +++ b/SCrawler/API/OnlyFans/SiteSettings.vb @@ -19,6 +19,7 @@ Namespace API.OnlyFans #Region "Declarations" #Region "Categories" Private Const CAT_OFS As String = "OF-Scraper support" + Private Const CAT_ERRORS As String = "Errors" #End Region #Region "Options" @@ -73,6 +74,19 @@ Namespace API.OnlyFans Return String.Empty End Function #End Region +#Region "Errors" + Private ReadOnly Property UpdateRules401_XML As PropertyValue + + Friend ReadOnly Property UpdateRules401 As PropertyValue + Get + If Not DefaultInstance Is Nothing Then + Return DirectCast(DefaultInstance, SiteSettings).UpdateRules401_XML + Else + Return UpdateRules401_XML + End If + End Get + End Property +#End Region #Region "OFScraper" Private ReadOnly Property OFScraperPath_XML As PropertyValue @@ -178,6 +192,8 @@ Namespace API.OnlyFans KeyModeDefault_XML = New PropertyValue(KeyModeDefault_Default) Keydb_Api_XML = New PropertyValue(String.Empty, GetType(String)) + UpdateRules401_XML = New PropertyValue(False) + UserRegex = RParams.DMS(String.Format(UserRegexDefaultPattern, "onlyfans.com/"), 1, EDP.ReturnValue) UrlPatternUser = "https://onlyfans.com/{0}" ImageVideoContains = "onlyfans.com" diff --git a/SCrawler/API/OnlyFans/UserData.vb b/SCrawler/API/OnlyFans/UserData.vb index 050641d..cbcd09b 100644 --- a/SCrawler/API/OnlyFans/UserData.vb +++ b/SCrawler/API/OnlyFans/UserData.vb @@ -760,14 +760,20 @@ Namespace API.OnlyFans Private _DownloadingException_AuthFileUpdate As Boolean = False Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False, Optional ByVal EObj As Object = Nothing) As Integer - If Responser.StatusCode = Net.HttpStatusCode.BadRequest Then '400 + If Responser.StatusCode = Net.HttpStatusCode.BadRequest Or + (Responser.StatusCode = Net.HttpStatusCode.Unauthorized And CBool(MySettings.UpdateRules401.Value)) Then '400, [401] If Not _DownloadingException_AuthFileUpdate AndAlso Rules.Update(True) Then _DownloadingException_AuthFileUpdate = True Return 2 Else MySettings.SessionAborted = True MyMainLOG = $"{ToStringForLog()} [{CInt(Responser.StatusCode)}]: OnlyFans credentials expired" - Return 1 + If Responser.StatusCode = Net.HttpStatusCode.BadRequest Then + Return 1 + Else + MyMainLOG = $"{ToStringForLog()}: Rules updated (401)" + Return 3 + End If End If ElseIf Responser.StatusCode = Net.HttpStatusCode.NotFound Then '404 UserExists = False diff --git a/SCrawler/API/UserDataBind.vb b/SCrawler/API/UserDataBind.vb index d8f4ef4..ce6a1ac 100644 --- a/SCrawler/API/UserDataBind.vb +++ b/SCrawler/API/UserDataBind.vb @@ -299,6 +299,24 @@ Namespace API End If End Get End Property + Friend ReadOnly Property ContextDownLimit As ToolStripMenuItem() + Get + If Count > 0 Then + Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_DOWN_LIMIT).ToArray + Else + Return New ToolStripMenuItem() {} + End If + End Get + End Property + Friend ReadOnly Property ContextDownDate As ToolStripMenuItem() + Get + If Count > 0 Then + Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_DOWN_DATE).ToArray + Else + Return New ToolStripMenuItem() {} + End If + End Get + End Property Friend ReadOnly Property ContextEdit As ToolStripMenuItem() Get If Count > 0 Then diff --git a/SCrawler/API/YouTube/UserData.vb b/SCrawler/API/YouTube/UserData.vb index 39b1d68..70492db 100644 --- a/SCrawler/API/YouTube/UserData.vb +++ b/SCrawler/API/YouTube/UserData.vb @@ -345,6 +345,8 @@ Namespace API.YouTube If resp.Status = Net.WebExceptionStatus.ConnectFailure And Round < 2 Then Thread.Sleep(1000) DownloadCommunity(Cursor, Token, Round + 1) + ElseIf resp.StatusCode = Net.HttpStatusCode.NotFound Then + MyMainLOG = $"{ToStringForLog()} {errMsg} (not found)" Else Throw resp.ErrorException End If diff --git a/SCrawler/Editors/GlobalSettingsForm.Designer.vb b/SCrawler/Editors/GlobalSettingsForm.Designer.vb index 74803f3..3bc8e6f 100644 --- a/SCrawler/Editors/GlobalSettingsForm.Designer.vb +++ b/SCrawler/Editors/GlobalSettingsForm.Designer.vb @@ -24,16 +24,16 @@ Namespace Editors Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim TP_BASIS As System.Windows.Forms.TableLayoutPanel - Dim ActionButton39 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton1 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 ActionButton40 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TP_IMAGES As System.Windows.Forms.TableLayoutPanel - Dim ActionButton41 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton42 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton43 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton44 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton45 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton46 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + 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 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 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 @@ -46,58 +46,58 @@ 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 ActionButton47 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton48 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + 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 TP_OPEN_INFO As System.Windows.Forms.TableLayoutPanel Dim TP_OPEN_PROGRESS As System.Windows.Forms.TableLayoutPanel Dim TP_BEHAVIOR_F6 As System.Windows.Forms.TableLayoutPanel Dim TAB_DOWN As System.Windows.Forms.TabPage Dim TP_DOWNLOADING As System.Windows.Forms.TableLayoutPanel - Dim ActionButton49 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton50 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton11 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton12 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 Dim TP_FEED_IMG_COUNT As System.Windows.Forms.TableLayoutPanel Dim TP_FEED_SES As System.Windows.Forms.TableLayoutPanel - Dim ActionButton51 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton52 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 ActionButton14 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim TP_FEED_SPEC_SEARCH As System.Windows.Forms.TableLayoutPanel Dim TAB_NOTIFY As System.Windows.Forms.TabPage Dim TP_NOTIFY_MAIN As System.Windows.Forms.TableLayoutPanel Dim TP_ENVIR As System.Windows.Forms.TableLayoutPanel - Dim ActionButton53 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton54 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton55 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton56 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton57 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton58 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton59 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton60 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton61 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton62 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton63 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton64 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton65 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton66 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 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 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 ActionButton25 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton26 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton27 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton28 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TAB_STD As System.Windows.Forms.TabPage Dim TP_STD As System.Windows.Forms.TableLayoutPanel - Dim ActionButton67 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ListColumn3 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() - Dim ListColumn4 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() + Dim ActionButton29 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ListColumn1 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() + Dim ListColumn2 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn() Dim TAB_DESIGN As System.Windows.Forms.TabPage Dim TP_DESIGN As System.Windows.Forms.TableLayoutPanel - Dim ActionButton68 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton69 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton70 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton71 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton30 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton31 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton32 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton33 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TP_HEADERS_DEF As System.Windows.Forms.TableLayoutPanel - Dim ActionButton72 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton73 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton74 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton75 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton76 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton34 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton35 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton36 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton37 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + Dim ActionButton38 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim TAB_HEADERS As System.Windows.Forms.TabPage - Dim TP_FEED_SPEC_SEARCH As System.Windows.Forms.TableLayoutPanel Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended() @@ -151,6 +151,8 @@ Namespace Editors Me.CH_FEED_UP_FILE_LOC_MOVE = New System.Windows.Forms.CheckBox() Me.CH_DOWN_ALL_F6_NOTIFY = New System.Windows.Forms.CheckBox() Me.CH_DOWN_ALL_NOTIFY = New System.Windows.Forms.CheckBox() + Me.CH_FEED_SPEC_SEARCH = New System.Windows.Forms.CheckBox() + Me.CH_FEED_SPEC_SEARCH_DEEP = New System.Windows.Forms.CheckBox() Me.TXT_CHANNELS_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_CHANNELS_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_DOWN_IMAGES_NATIVE = New System.Windows.Forms.CheckBox() @@ -210,8 +212,7 @@ Namespace Editors Me.TAB_MAIN = New System.Windows.Forms.TabControl() Me.TAB_ENVIR = New System.Windows.Forms.TabPage() Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() - Me.CH_FEED_SPEC_SEARCH = New System.Windows.Forms.CheckBox() - Me.CH_FEED_SPEC_SEARCH_DEEP = New System.Windows.Forms.CheckBox() + Me.CH_FEED_OPEN_CTRLF = New System.Windows.Forms.CheckBox() TP_BASIS = New System.Windows.Forms.TableLayoutPanel() TP_IMAGES = New System.Windows.Forms.TableLayoutPanel() TP_FILE_NAME = New System.Windows.Forms.TableLayoutPanel() @@ -236,6 +237,7 @@ Namespace Editors TP_FEED = New System.Windows.Forms.TableLayoutPanel() TP_FEED_IMG_COUNT = New System.Windows.Forms.TableLayoutPanel() TP_FEED_SES = New System.Windows.Forms.TableLayoutPanel() + TP_FEED_SPEC_SEARCH = New System.Windows.Forms.TableLayoutPanel() TAB_NOTIFY = New System.Windows.Forms.TabPage() TP_NOTIFY_MAIN = New System.Windows.Forms.TableLayoutPanel() TP_ENVIR = New System.Windows.Forms.TableLayoutPanel() @@ -245,7 +247,6 @@ Namespace Editors TP_DESIGN = New System.Windows.Forms.TableLayoutPanel() TP_HEADERS_DEF = New System.Windows.Forms.TableLayoutPanel() TAB_HEADERS = New System.Windows.Forms.TabPage() - TP_FEED_SPEC_SEARCH = New System.Windows.Forms.TableLayoutPanel() TP_BASIS.SuspendLayout() CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit() TP_IMAGES.SuspendLayout() @@ -290,6 +291,7 @@ Namespace Editors TP_FEED_SES.SuspendLayout() CType(Me.NUM_FEED_STORE_SESSION_DATA, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.NUM_FEED_SES_CURR_LOAD_LAST, System.ComponentModel.ISupportInitialize).BeginInit() + TP_FEED_SPEC_SEARCH.SuspendLayout() TAB_NOTIFY.SuspendLayout() TP_NOTIFY_MAIN.SuspendLayout() TP_ENVIR.SuspendLayout() @@ -318,7 +320,6 @@ Namespace Editors Me.TAB_ENVIR.SuspendLayout() Me.CONTAINER_MAIN.ContentPanel.SuspendLayout() Me.CONTAINER_MAIN.SuspendLayout() - TP_FEED_SPEC_SEARCH.SuspendLayout() Me.SuspendLayout() ' 'TP_BASIS @@ -349,17 +350,17 @@ Namespace Editors TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - TP_BASIS.Size = New System.Drawing.Size(615, 393) + TP_BASIS.Size = New System.Drawing.Size(615, 418) TP_BASIS.TabIndex = 0 ' 'TXT_GLOBAL_PATH ' - ActionButton39.BackgroundImage = CType(resources.GetObject("ActionButton39.BackgroundImage"), System.Drawing.Image) - ActionButton39.Name = "Open" - ActionButton40.BackgroundImage = CType(resources.GetObject("ActionButton40.BackgroundImage"), System.Drawing.Image) - ActionButton40.Name = "Clear" - Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton39) - Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton40) + 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) Me.TXT_GLOBAL_PATH.CaptionText = "Data Path" Me.TXT_GLOBAL_PATH.CaptionToolTipEnabled = True Me.TXT_GLOBAL_PATH.CaptionToolTipText = "Root path for storing users' data" @@ -420,9 +421,9 @@ Namespace Editors ' 'TXT_COLLECTIONS_PATH ' - ActionButton41.BackgroundImage = CType(resources.GetObject("ActionButton41.BackgroundImage"), System.Drawing.Image) - ActionButton41.Name = "Clear" - Me.TXT_COLLECTIONS_PATH.Buttons.Add(ActionButton41) + ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image) + ActionButton3.Name = "Clear" + Me.TXT_COLLECTIONS_PATH.Buttons.Add(ActionButton3) Me.TXT_COLLECTIONS_PATH.CaptionText = "Collections folder" Me.TXT_COLLECTIONS_PATH.CaptionToolTipEnabled = True Me.TXT_COLLECTIONS_PATH.CaptionToolTipText = "Set collections folder name (name only)" @@ -434,10 +435,10 @@ Namespace Editors ' 'TXT_MAX_JOBS_USERS ' - ActionButton42.BackgroundImage = CType(resources.GetObject("ActionButton42.BackgroundImage"), System.Drawing.Image) - ActionButton42.Name = "Refresh" - ActionButton42.ToolTipText = "Set to default" - Me.TXT_MAX_JOBS_USERS.Buttons.Add(ActionButton42) + 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) 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 @@ -453,10 +454,10 @@ Namespace Editors ' 'TXT_MAX_JOBS_CHANNELS ' - ActionButton43.BackgroundImage = CType(resources.GetObject("ActionButton43.BackgroundImage"), System.Drawing.Image) - ActionButton43.Name = "Refresh" - ActionButton43.ToolTipText = "Set to default" - Me.TXT_MAX_JOBS_CHANNELS.Buttons.Add(ActionButton43) + 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) 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 @@ -483,9 +484,9 @@ Namespace Editors ' 'TXT_IMGUR_CLIENT_ID ' - ActionButton44.BackgroundImage = CType(resources.GetObject("ActionButton44.BackgroundImage"), System.Drawing.Image) - ActionButton44.Name = "Clear" - Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton44) + ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image) + ActionButton6.Name = "Clear" + Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton6) 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, 204) @@ -495,14 +496,14 @@ Namespace Editors ' 'TXT_USER_AGENT ' - ActionButton45.BackgroundImage = CType(resources.GetObject("ActionButton45.BackgroundImage"), System.Drawing.Image) - ActionButton45.Name = "Refresh" - ActionButton45.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton46.BackgroundImage = CType(resources.GetObject("ActionButton46.BackgroundImage"), System.Drawing.Image) - ActionButton46.Name = "Clear" - ActionButton46.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_USER_AGENT.Buttons.Add(ActionButton45) - Me.TXT_USER_AGENT.Buttons.Add(ActionButton46) + ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image) + ActionButton7.Name = "Refresh" + ActionButton7.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image) + ActionButton8.Name = "Clear" + ActionButton8.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_USER_AGENT.Buttons.Add(ActionButton7) + Me.TXT_USER_AGENT.Buttons.Add(ActionButton8) Me.TXT_USER_AGENT.CaptionText = "UserAgent" Me.TXT_USER_AGENT.CaptionToolTipEnabled = True Me.TXT_USER_AGENT.CaptionToolTipText = "Default user agent to use in requests" @@ -1105,6 +1106,31 @@ Namespace Editors TT_MAIN.SetToolTip(Me.CH_DOWN_ALL_NOTIFY, "Request confirmation to download all users anyway") Me.CH_DOWN_ALL_NOTIFY.UseVisualStyleBackColor = True ' + 'CH_FEED_SPEC_SEARCH + ' + Me.CH_FEED_SPEC_SEARCH.AutoSize = True + Me.CH_FEED_SPEC_SEARCH.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_FEED_SPEC_SEARCH.Location = New System.Drawing.Point(3, 3) + Me.CH_FEED_SPEC_SEARCH.Name = "CH_FEED_SPEC_SEARCH" + Me.CH_FEED_SPEC_SEARCH.Size = New System.Drawing.Size(303, 19) + Me.CH_FEED_SPEC_SEARCH.TabIndex = 0 + Me.CH_FEED_SPEC_SEARCH.Text = "Search missing files (special feeds)" + TT_MAIN.SetToolTip(Me.CH_FEED_SPEC_SEARCH, "Search for missing file in the entire user folder") + Me.CH_FEED_SPEC_SEARCH.UseVisualStyleBackColor = True + ' + 'CH_FEED_SPEC_SEARCH_DEEP + ' + Me.CH_FEED_SPEC_SEARCH_DEEP.AutoSize = True + Me.CH_FEED_SPEC_SEARCH_DEEP.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_FEED_SPEC_SEARCH_DEEP.Location = New System.Drawing.Point(312, 3) + Me.CH_FEED_SPEC_SEARCH_DEEP.Name = "CH_FEED_SPEC_SEARCH_DEEP" + Me.CH_FEED_SPEC_SEARCH_DEEP.Size = New System.Drawing.Size(304, 19) + Me.CH_FEED_SPEC_SEARCH_DEEP.TabIndex = 1 + Me.CH_FEED_SPEC_SEARCH_DEEP.Text = "Search missing files (special feeds): deep search" + TT_MAIN.SetToolTip(Me.CH_FEED_SPEC_SEARCH_DEEP, "Deep search means that the missing file will be searched in other users' location" & + "s as well.") + Me.CH_FEED_SPEC_SEARCH_DEEP.UseVisualStyleBackColor = True + ' 'TP_CHANNELS_IMGS ' TP_CHANNELS_IMGS.ColumnCount = 2 @@ -1156,7 +1182,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(621, 399) + TAB_BASIS.Size = New System.Drawing.Size(621, 424) TAB_BASIS.TabIndex = 0 TAB_BASIS.Text = "Basis" ' @@ -1166,7 +1192,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(621, 399) + TAB_DEFAULTS.Size = New System.Drawing.Size(621, 424) TAB_DEFAULTS.TabIndex = 1 TAB_DEFAULTS.Text = "Defaults" ' @@ -1192,7 +1218,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(615, 393) + TP_DEFS.Size = New System.Drawing.Size(615, 418) TP_DEFS.TabIndex = 0 ' 'CH_DOWN_IMAGES_NATIVE @@ -1212,7 +1238,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(621, 399) + TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(621, 424) TAB_DEFS_CHANNELS.TabIndex = 4 TAB_DEFS_CHANNELS.Text = "Channels" ' @@ -1238,7 +1264,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(615, 393) + TP_CHANNELS.Size = New System.Drawing.Size(615, 418) TP_CHANNELS.TabIndex = 0 ' 'TXT_CHANNEL_USER_POST_LIMIT @@ -1277,7 +1303,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(621, 399) + TAB_BEHAVIOR.Size = New System.Drawing.Size(621, 424) TAB_BEHAVIOR.TabIndex = 5 TAB_BEHAVIOR.Text = "Behavior" ' @@ -1297,10 +1323,11 @@ Namespace Editors TP_BEHAVIOR.Controls.Add(TP_BEHAVIOR_F6, 0, 8) TP_BEHAVIOR.Controls.Add(Me.TXT_SCHEDULER_SCRIPT, 0, 9) TP_BEHAVIOR.Controls.Add(Me.CH_SCHEDULER_SCRIPT_EX_MANUAL, 0, 10) + TP_BEHAVIOR.Controls.Add(Me.CH_FEED_OPEN_CTRLF, 0, 11) TP_BEHAVIOR.Dock = System.Windows.Forms.DockStyle.Fill TP_BEHAVIOR.Location = New System.Drawing.Point(0, 0) TP_BEHAVIOR.Name = "TP_BEHAVIOR" - TP_BEHAVIOR.RowCount = 12 + TP_BEHAVIOR.RowCount = 13 TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) @@ -1312,18 +1339,19 @@ Namespace Editors TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) 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.Absolute, 25.0!)) + TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_BEHAVIOR.Size = New System.Drawing.Size(621, 399) + TP_BEHAVIOR.Size = New System.Drawing.Size(621, 424) TP_BEHAVIOR.TabIndex = 0 ' 'TXT_FOLDER_CMD ' Me.TXT_FOLDER_CMD.AutoShowClearButton = True - ActionButton47.BackgroundImage = CType(resources.GetObject("ActionButton47.BackgroundImage"), System.Drawing.Image) - ActionButton47.Enabled = False - ActionButton47.Name = "Clear" - ActionButton47.Visible = False - Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton47) + ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image) + ActionButton9.Enabled = False + ActionButton9.Name = "Clear" + ActionButton9.Visible = False + Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton9) 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 @@ -1362,11 +1390,11 @@ Namespace Editors 'TXT_CLOSE_SCRIPT ' Me.TXT_CLOSE_SCRIPT.AutoShowClearButton = True - ActionButton48.BackgroundImage = CType(resources.GetObject("ActionButton48.BackgroundImage"), System.Drawing.Image) - ActionButton48.Enabled = False - ActionButton48.Name = "Clear" - ActionButton48.Visible = False - Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton48) + ActionButton10.BackgroundImage = CType(resources.GetObject("ActionButton10.BackgroundImage"), System.Drawing.Image) + ActionButton10.Enabled = False + ActionButton10.Name = "Clear" + ActionButton10.Visible = False + Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton10) 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 @@ -1509,7 +1537,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(621, 399) + TAB_DOWN.Size = New System.Drawing.Size(621, 424) TAB_DOWN.TabIndex = 6 TAB_DOWN.Text = "Downloading" ' @@ -1545,17 +1573,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, 28.0!)) TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_DOWNLOADING.Size = New System.Drawing.Size(621, 399) + TP_DOWNLOADING.Size = New System.Drawing.Size(621, 424) TP_DOWNLOADING.TabIndex = 1 ' 'TXT_SCRIPT ' - ActionButton49.BackgroundImage = CType(resources.GetObject("ActionButton49.BackgroundImage"), System.Drawing.Image) - ActionButton49.Name = "Open" - ActionButton50.BackgroundImage = CType(resources.GetObject("ActionButton50.BackgroundImage"), System.Drawing.Image) - ActionButton50.Name = "Clear" - Me.TXT_SCRIPT.Buttons.Add(ActionButton49) - Me.TXT_SCRIPT.Buttons.Add(ActionButton50) + ActionButton11.BackgroundImage = CType(resources.GetObject("ActionButton11.BackgroundImage"), System.Drawing.Image) + ActionButton11.Name = "Open" + ActionButton12.BackgroundImage = CType(resources.GetObject("ActionButton12.BackgroundImage"), System.Drawing.Image) + ActionButton12.Name = "Clear" + Me.TXT_SCRIPT.Buttons.Add(ActionButton11) + Me.TXT_SCRIPT.Buttons.Add(ActionButton12) Me.TXT_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox Me.TXT_SCRIPT.CaptionText = "Script" Me.TXT_SCRIPT.CaptionToolTipEnabled = True @@ -1649,7 +1677,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(621, 399) + TAB_FEED.Size = New System.Drawing.Size(621, 424) TAB_FEED.TabIndex = 7 TAB_FEED.Text = "Feed" ' @@ -1694,7 +1722,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.Percent, 100.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - TP_FEED.Size = New System.Drawing.Size(621, 399) + TP_FEED.Size = New System.Drawing.Size(621, 424) TP_FEED.TabIndex = 0 ' 'TP_FEED_IMG_COUNT @@ -1873,14 +1901,14 @@ Namespace Editors ' 'NUM_FEED_SES_CURR_LOAD_LAST ' - ActionButton51.BackgroundImage = CType(resources.GetObject("ActionButton51.BackgroundImage"), System.Drawing.Image) - ActionButton51.Name = "Refresh" - ActionButton51.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton52.BackgroundImage = CType(resources.GetObject("ActionButton52.BackgroundImage"), System.Drawing.Image) - ActionButton52.Name = "Clear" - ActionButton52.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.NUM_FEED_SES_CURR_LOAD_LAST.Buttons.Add(ActionButton51) - Me.NUM_FEED_SES_CURR_LOAD_LAST.Buttons.Add(ActionButton52) + ActionButton13.BackgroundImage = CType(resources.GetObject("ActionButton13.BackgroundImage"), System.Drawing.Image) + ActionButton13.Name = "Refresh" + ActionButton13.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton14.BackgroundImage = CType(resources.GetObject("ActionButton14.BackgroundImage"), System.Drawing.Image) + ActionButton14.Name = "Clear" + ActionButton14.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.NUM_FEED_SES_CURR_LOAD_LAST.Buttons.Add(ActionButton13) + Me.NUM_FEED_SES_CURR_LOAD_LAST.Buttons.Add(ActionButton14) Me.NUM_FEED_SES_CURR_LOAD_LAST.CaptionText = "Load last session" Me.NUM_FEED_SES_CURR_LOAD_LAST.CaptionToolTipEnabled = True Me.NUM_FEED_SES_CURR_LOAD_LAST.CaptionToolTipText = resources.GetString("NUM_FEED_SES_CURR_LOAD_LAST.CaptionToolTipText") @@ -1930,12 +1958,29 @@ Namespace Editors Me.CH_FEED_ESC_TO_CLOSE.Text = "Use the 'Esc' key to close the form" Me.CH_FEED_ESC_TO_CLOSE.UseVisualStyleBackColor = True ' + 'TP_FEED_SPEC_SEARCH + ' + TP_FEED_SPEC_SEARCH.ColumnCount = 2 + TP_FEED_SPEC_SEARCH.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_FEED_SPEC_SEARCH.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_FEED_SPEC_SEARCH.Controls.Add(Me.CH_FEED_SPEC_SEARCH, 0, 0) + TP_FEED_SPEC_SEARCH.Controls.Add(Me.CH_FEED_SPEC_SEARCH_DEEP, 1, 0) + TP_FEED_SPEC_SEARCH.Dock = System.Windows.Forms.DockStyle.Fill + TP_FEED_SPEC_SEARCH.Location = New System.Drawing.Point(1, 374) + TP_FEED_SPEC_SEARCH.Margin = New System.Windows.Forms.Padding(0) + TP_FEED_SPEC_SEARCH.Name = "TP_FEED_SPEC_SEARCH" + TP_FEED_SPEC_SEARCH.RowCount = 1 + TP_FEED_SPEC_SEARCH.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_FEED_SPEC_SEARCH.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + TP_FEED_SPEC_SEARCH.Size = New System.Drawing.Size(619, 25) + TP_FEED_SPEC_SEARCH.TabIndex = 14 + ' 'TAB_NOTIFY ' 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(621, 399) + TAB_NOTIFY.Size = New System.Drawing.Size(621, 424) TAB_NOTIFY.TabIndex = 8 TAB_NOTIFY.Text = "Notifications" ' @@ -1967,7 +2012,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(621, 399) + TP_NOTIFY_MAIN.Size = New System.Drawing.Size(621, 424) TP_NOTIFY_MAIN.TabIndex = 0 ' 'TP_ENVIR @@ -1990,24 +2035,24 @@ Namespace Editors TP_ENVIR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_ENVIR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_ENVIR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_ENVIR.Size = New System.Drawing.Size(621, 399) + TP_ENVIR.Size = New System.Drawing.Size(621, 424) TP_ENVIR.TabIndex = 0 ' 'TXT_YTDLP ' - ActionButton53.BackgroundImage = CType(resources.GetObject("ActionButton53.BackgroundImage"), System.Drawing.Image) - ActionButton53.Name = "Open" - ActionButton53.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton54.BackgroundImage = CType(resources.GetObject("ActionButton54.BackgroundImage"), System.Drawing.Image) - ActionButton54.Name = "Refresh" - ActionButton54.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton54.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" - ActionButton55.BackgroundImage = CType(resources.GetObject("ActionButton55.BackgroundImage"), System.Drawing.Image) - ActionButton55.Name = "Clear" - ActionButton55.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_YTDLP.Buttons.Add(ActionButton53) - Me.TXT_YTDLP.Buttons.Add(ActionButton54) - Me.TXT_YTDLP.Buttons.Add(ActionButton55) + ActionButton15.BackgroundImage = CType(resources.GetObject("ActionButton15.BackgroundImage"), System.Drawing.Image) + ActionButton15.Name = "Open" + ActionButton15.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open + ActionButton16.BackgroundImage = CType(resources.GetObject("ActionButton16.BackgroundImage"), System.Drawing.Image) + ActionButton16.Name = "Refresh" + ActionButton16.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton16.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" + ActionButton17.BackgroundImage = CType(resources.GetObject("ActionButton17.BackgroundImage"), System.Drawing.Image) + ActionButton17.Name = "Clear" + ActionButton17.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_YTDLP.Buttons.Add(ActionButton15) + Me.TXT_YTDLP.Buttons.Add(ActionButton16) + Me.TXT_YTDLP.Buttons.Add(ActionButton17) Me.TXT_YTDLP.CaptionText = "yt-dlp" Me.TXT_YTDLP.CaptionToolTipEnabled = True Me.TXT_YTDLP.CaptionToolTipText = "Path to yt-dlp.exe file" @@ -2021,19 +2066,19 @@ Namespace Editors ' 'TXT_FFMPEG ' - ActionButton56.BackgroundImage = CType(resources.GetObject("ActionButton56.BackgroundImage"), System.Drawing.Image) - ActionButton56.Name = "Open" - ActionButton56.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton57.BackgroundImage = CType(resources.GetObject("ActionButton57.BackgroundImage"), System.Drawing.Image) - ActionButton57.Name = "Refresh" - ActionButton57.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton57.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" - ActionButton58.BackgroundImage = CType(resources.GetObject("ActionButton58.BackgroundImage"), System.Drawing.Image) - ActionButton58.Name = "Clear" - ActionButton58.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_FFMPEG.Buttons.Add(ActionButton56) - Me.TXT_FFMPEG.Buttons.Add(ActionButton57) - Me.TXT_FFMPEG.Buttons.Add(ActionButton58) + ActionButton18.BackgroundImage = CType(resources.GetObject("ActionButton18.BackgroundImage"), System.Drawing.Image) + ActionButton18.Name = "Open" + ActionButton18.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open + ActionButton19.BackgroundImage = CType(resources.GetObject("ActionButton19.BackgroundImage"), System.Drawing.Image) + ActionButton19.Name = "Refresh" + ActionButton19.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton19.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" + ActionButton20.BackgroundImage = CType(resources.GetObject("ActionButton20.BackgroundImage"), System.Drawing.Image) + ActionButton20.Name = "Clear" + ActionButton20.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_FFMPEG.Buttons.Add(ActionButton18) + Me.TXT_FFMPEG.Buttons.Add(ActionButton19) + Me.TXT_FFMPEG.Buttons.Add(ActionButton20) Me.TXT_FFMPEG.CaptionText = "ffmpeg" Me.TXT_FFMPEG.CaptionToolTipEnabled = True Me.TXT_FFMPEG.CaptionToolTipText = "Path to ffmpeg.exe file" @@ -2047,19 +2092,19 @@ Namespace Editors ' 'TXT_CURL ' - ActionButton59.BackgroundImage = CType(resources.GetObject("ActionButton59.BackgroundImage"), System.Drawing.Image) - ActionButton59.Name = "Open" - ActionButton59.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton60.BackgroundImage = CType(resources.GetObject("ActionButton60.BackgroundImage"), System.Drawing.Image) - ActionButton60.Name = "Refresh" - ActionButton60.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton60.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" - ActionButton61.BackgroundImage = CType(resources.GetObject("ActionButton61.BackgroundImage"), System.Drawing.Image) - ActionButton61.Name = "Clear" - ActionButton61.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_CURL.Buttons.Add(ActionButton59) - Me.TXT_CURL.Buttons.Add(ActionButton60) - Me.TXT_CURL.Buttons.Add(ActionButton61) + ActionButton21.BackgroundImage = CType(resources.GetObject("ActionButton21.BackgroundImage"), System.Drawing.Image) + ActionButton21.Name = "Open" + ActionButton21.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open + ActionButton22.BackgroundImage = CType(resources.GetObject("ActionButton22.BackgroundImage"), System.Drawing.Image) + ActionButton22.Name = "Refresh" + ActionButton22.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton22.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" + ActionButton23.BackgroundImage = CType(resources.GetObject("ActionButton23.BackgroundImage"), System.Drawing.Image) + ActionButton23.Name = "Clear" + ActionButton23.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_CURL.Buttons.Add(ActionButton21) + Me.TXT_CURL.Buttons.Add(ActionButton22) + Me.TXT_CURL.Buttons.Add(ActionButton23) Me.TXT_CURL.CaptionText = "cURL" Me.TXT_CURL.CaptionToolTipEnabled = True Me.TXT_CURL.CaptionToolTipText = "Path to curl.exe file" @@ -2073,19 +2118,19 @@ Namespace Editors ' 'TXT_GALLERYDL ' - ActionButton62.BackgroundImage = CType(resources.GetObject("ActionButton62.BackgroundImage"), System.Drawing.Image) - ActionButton62.Name = "Open" - ActionButton62.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton63.BackgroundImage = CType(resources.GetObject("ActionButton63.BackgroundImage"), System.Drawing.Image) - ActionButton63.Name = "Refresh" - ActionButton63.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton63.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" - ActionButton64.BackgroundImage = CType(resources.GetObject("ActionButton64.BackgroundImage"), System.Drawing.Image) - ActionButton64.Name = "Clear" - ActionButton64.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_GALLERYDL.Buttons.Add(ActionButton62) - Me.TXT_GALLERYDL.Buttons.Add(ActionButton63) - Me.TXT_GALLERYDL.Buttons.Add(ActionButton64) + ActionButton24.BackgroundImage = CType(resources.GetObject("ActionButton24.BackgroundImage"), System.Drawing.Image) + ActionButton24.Name = "Open" + ActionButton24.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open + ActionButton25.BackgroundImage = CType(resources.GetObject("ActionButton25.BackgroundImage"), System.Drawing.Image) + ActionButton25.Name = "Refresh" + ActionButton25.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton25.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" + ActionButton26.BackgroundImage = CType(resources.GetObject("ActionButton26.BackgroundImage"), System.Drawing.Image) + ActionButton26.Name = "Clear" + ActionButton26.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_GALLERYDL.Buttons.Add(ActionButton24) + Me.TXT_GALLERYDL.Buttons.Add(ActionButton25) + Me.TXT_GALLERYDL.Buttons.Add(ActionButton26) Me.TXT_GALLERYDL.CaptionText = "gallery-dl" Me.TXT_GALLERYDL.CaptionToolTipText = "Path to gallery-dl.exe file" Me.TXT_GALLERYDL.CaptionWidth = 80.0R @@ -2098,14 +2143,14 @@ Namespace Editors ' 'TXT_CMD_ENCODING ' - ActionButton65.BackgroundImage = CType(resources.GetObject("ActionButton65.BackgroundImage"), System.Drawing.Image) - ActionButton65.Name = "Refresh" - ActionButton65.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton66.BackgroundImage = CType(resources.GetObject("ActionButton66.BackgroundImage"), System.Drawing.Image) - ActionButton66.Name = "Clear" - ActionButton66.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_CMD_ENCODING.Buttons.Add(ActionButton65) - Me.TXT_CMD_ENCODING.Buttons.Add(ActionButton66) + ActionButton27.BackgroundImage = CType(resources.GetObject("ActionButton27.BackgroundImage"), System.Drawing.Image) + ActionButton27.Name = "Refresh" + ActionButton27.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh + ActionButton28.BackgroundImage = CType(resources.GetObject("ActionButton28.BackgroundImage"), System.Drawing.Image) + ActionButton28.Name = "Clear" + ActionButton28.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_CMD_ENCODING.Buttons.Add(ActionButton27) + Me.TXT_CMD_ENCODING.Buttons.Add(ActionButton28) Me.TXT_CMD_ENCODING.CaptionText = "CMD Encoding" Me.TXT_CMD_ENCODING.CaptionToolTipEnabled = True Me.TXT_CMD_ENCODING.CaptionToolTipText = "Command line encoding" @@ -2121,7 +2166,7 @@ Namespace Editors TAB_STD.Controls.Add(TP_STD) TAB_STD.Location = New System.Drawing.Point(4, 22) TAB_STD.Name = "TAB_STD" - TAB_STD.Size = New System.Drawing.Size(621, 399) + TAB_STD.Size = New System.Drawing.Size(621, 424) TAB_STD.TabIndex = 10 TAB_STD.Text = "Downloader" ' @@ -2163,7 +2208,7 @@ Namespace Editors TP_STD.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_STD.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_STD.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_STD.Size = New System.Drawing.Size(621, 399) + TP_STD.Size = New System.Drawing.Size(621, 424) TP_STD.TabIndex = 0 ' 'TXT_STD_MAX_JOBS_COUNT @@ -2208,24 +2253,24 @@ Namespace Editors ' 'CMB_STD_OPEN_DBL ' - ActionButton67.BackgroundImage = CType(resources.GetObject("ActionButton67.BackgroundImage"), System.Drawing.Image) - ActionButton67.Name = "ArrowDown" - ActionButton67.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.ArrowDown - Me.CMB_STD_OPEN_DBL.Buttons.Add(ActionButton67) + ActionButton29.BackgroundImage = CType(resources.GetObject("ActionButton29.BackgroundImage"), System.Drawing.Image) + ActionButton29.Name = "ArrowDown" + ActionButton29.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.ArrowDown + Me.CMB_STD_OPEN_DBL.Buttons.Add(ActionButton29) Me.CMB_STD_OPEN_DBL.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.Label Me.CMB_STD_OPEN_DBL.CaptionText = "DoubleClick opens" Me.CMB_STD_OPEN_DBL.CaptionToolTipEnabled = True Me.CMB_STD_OPEN_DBL.CaptionToolTipText = "What do you want to open when you double click on an item" Me.CMB_STD_OPEN_DBL.CaptionVisible = True - ListColumn3.DisplayMember = True - ListColumn3.Name = "STD_CMB_COL_TEXT" - ListColumn3.Text = "Text" - ListColumn4.Name = "STD_CMB_COL_VALUE" - ListColumn4.Text = "Value" - ListColumn4.ValueMember = True - ListColumn4.Visible = False - Me.CMB_STD_OPEN_DBL.Columns.Add(ListColumn3) - Me.CMB_STD_OPEN_DBL.Columns.Add(ListColumn4) + ListColumn1.DisplayMember = True + ListColumn1.Name = "STD_CMB_COL_TEXT" + ListColumn1.Text = "Text" + ListColumn2.Name = "STD_CMB_COL_VALUE" + ListColumn2.Text = "Value" + ListColumn2.ValueMember = True + ListColumn2.Visible = False + Me.CMB_STD_OPEN_DBL.Columns.Add(ListColumn1) + Me.CMB_STD_OPEN_DBL.Columns.Add(ListColumn2) Me.CMB_STD_OPEN_DBL.Dock = System.Windows.Forms.DockStyle.Fill Me.CMB_STD_OPEN_DBL.Location = New System.Drawing.Point(4, 85) Me.CMB_STD_OPEN_DBL.Name = "CMB_STD_OPEN_DBL" @@ -2262,7 +2307,7 @@ Namespace Editors TAB_DESIGN.Controls.Add(TP_DESIGN) TAB_DESIGN.Location = New System.Drawing.Point(4, 22) TAB_DESIGN.Name = "TAB_DESIGN" - TAB_DESIGN.Size = New System.Drawing.Size(621, 399) + TAB_DESIGN.Size = New System.Drawing.Size(621, 424) TAB_DESIGN.TabIndex = 11 TAB_DESIGN.Text = "Design" ' @@ -2288,15 +2333,15 @@ Namespace Editors TP_DESIGN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DESIGN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_DESIGN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_DESIGN.Size = New System.Drawing.Size(621, 399) + TP_DESIGN.Size = New System.Drawing.Size(621, 424) TP_DESIGN.TabIndex = 0 ' 'TXT_PRG_TITLE ' - ActionButton68.BackgroundImage = CType(resources.GetObject("ActionButton68.BackgroundImage"), System.Drawing.Image) - ActionButton68.Name = "Clear" - ActionButton68.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_PRG_TITLE.Buttons.Add(ActionButton68) + ActionButton30.BackgroundImage = CType(resources.GetObject("ActionButton30.BackgroundImage"), System.Drawing.Image) + ActionButton30.Name = "Clear" + ActionButton30.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_PRG_TITLE.Buttons.Add(ActionButton30) Me.TXT_PRG_TITLE.CaptionText = "Program title" Me.TXT_PRG_TITLE.CaptionToolTipEnabled = True Me.TXT_PRG_TITLE.CaptionToolTipText = "Change the title of the main window if you need to" @@ -2308,10 +2353,10 @@ Namespace Editors ' 'TXT_PRG_DESCR ' - ActionButton69.BackgroundImage = CType(resources.GetObject("ActionButton69.BackgroundImage"), System.Drawing.Image) - ActionButton69.Name = "Clear" - ActionButton69.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_PRG_DESCR.Buttons.Add(ActionButton69) + ActionButton31.BackgroundImage = CType(resources.GetObject("ActionButton31.BackgroundImage"), System.Drawing.Image) + ActionButton31.Name = "Clear" + ActionButton31.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_PRG_DESCR.Buttons.Add(ActionButton31) Me.TXT_PRG_DESCR.CaptionText = "Program description" Me.TXT_PRG_DESCR.CaptionToolTipEnabled = True Me.TXT_PRG_DESCR.CaptionToolTipText = "Add some additional info to the program info if you need" @@ -2323,14 +2368,14 @@ Namespace Editors ' 'TXT_USER_LIST_IMAGE ' - ActionButton70.BackgroundImage = CType(resources.GetObject("ActionButton70.BackgroundImage"), System.Drawing.Image) - ActionButton70.Name = "Open" - ActionButton70.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton71.BackgroundImage = CType(resources.GetObject("ActionButton71.BackgroundImage"), System.Drawing.Image) - ActionButton71.Name = "Clear" - ActionButton71.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton70) - Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton71) + ActionButton32.BackgroundImage = CType(resources.GetObject("ActionButton32.BackgroundImage"), System.Drawing.Image) + ActionButton32.Name = "Open" + ActionButton32.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open + ActionButton33.BackgroundImage = CType(resources.GetObject("ActionButton33.BackgroundImage"), System.Drawing.Image) + ActionButton33.Name = "Clear" + ActionButton33.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton32) + Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton33) Me.TXT_USER_LIST_IMAGE.CaptionText = "Userlist image" Me.TXT_USER_LIST_IMAGE.CaptionToolTipEnabled = True Me.TXT_USER_LIST_IMAGE.CaptionToolTipText = "Background image for user list" @@ -2399,15 +2444,15 @@ Namespace Editors TP_HEADERS_DEF.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_HEADERS_DEF.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_HEADERS_DEF.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - TP_HEADERS_DEF.Size = New System.Drawing.Size(621, 399) + TP_HEADERS_DEF.Size = New System.Drawing.Size(621, 424) TP_HEADERS_DEF.TabIndex = 0 ' 'TXT_H_DEF_UserAgent ' - ActionButton72.BackgroundImage = CType(resources.GetObject("ActionButton72.BackgroundImage"), System.Drawing.Image) - ActionButton72.Name = "Clear" - ActionButton72.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_UserAgent.Buttons.Add(ActionButton72) + ActionButton34.BackgroundImage = CType(resources.GetObject("ActionButton34.BackgroundImage"), System.Drawing.Image) + ActionButton34.Name = "Clear" + ActionButton34.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_H_DEF_UserAgent.Buttons.Add(ActionButton34) Me.TXT_H_DEF_UserAgent.CaptionText = "UserAgent" Me.TXT_H_DEF_UserAgent.CaptionWidth = 140.0R Me.TXT_H_DEF_UserAgent.Dock = System.Windows.Forms.DockStyle.Fill @@ -2418,10 +2463,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua ' - ActionButton73.BackgroundImage = CType(resources.GetObject("ActionButton73.BackgroundImage"), System.Drawing.Image) - ActionButton73.Name = "Clear" - ActionButton73.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_sec_ch_ua.Buttons.Add(ActionButton73) + ActionButton35.BackgroundImage = CType(resources.GetObject("ActionButton35.BackgroundImage"), System.Drawing.Image) + ActionButton35.Name = "Clear" + ActionButton35.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_H_DEF_sec_ch_ua.Buttons.Add(ActionButton35) Me.TXT_H_DEF_sec_ch_ua.CaptionText = "sec-ch-ua" Me.TXT_H_DEF_sec_ch_ua.CaptionWidth = 140.0R Me.TXT_H_DEF_sec_ch_ua.Dock = System.Windows.Forms.DockStyle.Fill @@ -2432,10 +2477,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua_full_version_list ' - ActionButton74.BackgroundImage = CType(resources.GetObject("ActionButton74.BackgroundImage"), System.Drawing.Image) - ActionButton74.Name = "Clear" - ActionButton74.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_sec_ch_ua_full_version_list.Buttons.Add(ActionButton74) + ActionButton36.BackgroundImage = CType(resources.GetObject("ActionButton36.BackgroundImage"), System.Drawing.Image) + ActionButton36.Name = "Clear" + ActionButton36.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_H_DEF_sec_ch_ua_full_version_list.Buttons.Add(ActionButton36) Me.TXT_H_DEF_sec_ch_ua_full_version_list.CaptionText = "sec-ch-ua-full-version-list" Me.TXT_H_DEF_sec_ch_ua_full_version_list.CaptionWidth = 140.0R Me.TXT_H_DEF_sec_ch_ua_full_version_list.Dock = System.Windows.Forms.DockStyle.Fill @@ -2446,10 +2491,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua_platform ' - ActionButton75.BackgroundImage = CType(resources.GetObject("ActionButton75.BackgroundImage"), System.Drawing.Image) - ActionButton75.Name = "Clear" - ActionButton75.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_sec_ch_ua_platform.Buttons.Add(ActionButton75) + ActionButton37.BackgroundImage = CType(resources.GetObject("ActionButton37.BackgroundImage"), System.Drawing.Image) + ActionButton37.Name = "Clear" + ActionButton37.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_H_DEF_sec_ch_ua_platform.Buttons.Add(ActionButton37) Me.TXT_H_DEF_sec_ch_ua_platform.CaptionText = "sec-ch-ua-platform" Me.TXT_H_DEF_sec_ch_ua_platform.CaptionWidth = 140.0R Me.TXT_H_DEF_sec_ch_ua_platform.Dock = System.Windows.Forms.DockStyle.Fill @@ -2460,10 +2505,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua_platform_version ' - ActionButton76.BackgroundImage = CType(resources.GetObject("ActionButton76.BackgroundImage"), System.Drawing.Image) - ActionButton76.Name = "Clear" - ActionButton76.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_sec_ch_ua_platform_version.Buttons.Add(ActionButton76) + ActionButton38.BackgroundImage = CType(resources.GetObject("ActionButton38.BackgroundImage"), System.Drawing.Image) + ActionButton38.Name = "Clear" + ActionButton38.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear + Me.TXT_H_DEF_sec_ch_ua_platform_version.Buttons.Add(ActionButton38) Me.TXT_H_DEF_sec_ch_ua_platform_version.CaptionText = "sec-ch-ua-platform-version" Me.TXT_H_DEF_sec_ch_ua_platform_version.CaptionWidth = 140.0R Me.TXT_H_DEF_sec_ch_ua_platform_version.Dock = System.Windows.Forms.DockStyle.Fill @@ -2477,7 +2522,7 @@ Namespace Editors TAB_HEADERS.Controls.Add(TP_HEADERS_DEF) TAB_HEADERS.Location = New System.Drawing.Point(4, 22) TAB_HEADERS.Name = "TAB_HEADERS" - TAB_HEADERS.Size = New System.Drawing.Size(621, 399) + TAB_HEADERS.Size = New System.Drawing.Size(621, 424) TAB_HEADERS.TabIndex = 12 TAB_HEADERS.Text = "Headers" ' @@ -2498,7 +2543,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(629, 425) + Me.TAB_MAIN.Size = New System.Drawing.Size(629, 450) Me.TAB_MAIN.TabIndex = 1 ' 'TAB_ENVIR @@ -2506,7 +2551,7 @@ Namespace Editors Me.TAB_ENVIR.Controls.Add(TP_ENVIR) Me.TAB_ENVIR.Location = New System.Drawing.Point(4, 22) Me.TAB_ENVIR.Name = "TAB_ENVIR" - Me.TAB_ENVIR.Size = New System.Drawing.Size(621, 399) + Me.TAB_ENVIR.Size = New System.Drawing.Size(621, 424) Me.TAB_ENVIR.TabIndex = 9 Me.TAB_ENVIR.Text = "Environment" ' @@ -2516,7 +2561,7 @@ Namespace Editors 'CONTAINER_MAIN.ContentPanel ' Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TAB_MAIN) - Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(629, 425) + Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(629, 450) Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) @@ -2526,47 +2571,18 @@ Namespace Editors Me.CONTAINER_MAIN.TabIndex = 0 Me.CONTAINER_MAIN.TopToolStripPanelVisible = False ' - 'TP_FEED_SPEC_SEARCH + 'CH_FEED_OPEN_CTRLF ' - TP_FEED_SPEC_SEARCH.ColumnCount = 2 - TP_FEED_SPEC_SEARCH.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - TP_FEED_SPEC_SEARCH.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) - TP_FEED_SPEC_SEARCH.Controls.Add(Me.CH_FEED_SPEC_SEARCH, 0, 0) - TP_FEED_SPEC_SEARCH.Controls.Add(Me.CH_FEED_SPEC_SEARCH_DEEP, 1, 0) - TP_FEED_SPEC_SEARCH.Dock = System.Windows.Forms.DockStyle.Fill - TP_FEED_SPEC_SEARCH.Location = New System.Drawing.Point(1, 374) - TP_FEED_SPEC_SEARCH.Margin = New System.Windows.Forms.Padding(0) - TP_FEED_SPEC_SEARCH.Name = "TP_FEED_SPEC_SEARCH" - TP_FEED_SPEC_SEARCH.RowCount = 1 - TP_FEED_SPEC_SEARCH.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - TP_FEED_SPEC_SEARCH.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) - TP_FEED_SPEC_SEARCH.Size = New System.Drawing.Size(619, 25) - TP_FEED_SPEC_SEARCH.TabIndex = 14 - ' - 'CH_FEED_SPEC_SEARCH - ' - Me.CH_FEED_SPEC_SEARCH.AutoSize = True - Me.CH_FEED_SPEC_SEARCH.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_FEED_SPEC_SEARCH.Location = New System.Drawing.Point(3, 3) - Me.CH_FEED_SPEC_SEARCH.Name = "CH_FEED_SPEC_SEARCH" - Me.CH_FEED_SPEC_SEARCH.Size = New System.Drawing.Size(303, 19) - Me.CH_FEED_SPEC_SEARCH.TabIndex = 0 - Me.CH_FEED_SPEC_SEARCH.Text = "Search missing files (special feeds)" - TT_MAIN.SetToolTip(Me.CH_FEED_SPEC_SEARCH, "Search for missing file in the entire user folder") - Me.CH_FEED_SPEC_SEARCH.UseVisualStyleBackColor = True - ' - 'CH_FEED_SPEC_SEARCH_DEEP - ' - Me.CH_FEED_SPEC_SEARCH_DEEP.AutoSize = True - Me.CH_FEED_SPEC_SEARCH_DEEP.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_FEED_SPEC_SEARCH_DEEP.Location = New System.Drawing.Point(312, 3) - Me.CH_FEED_SPEC_SEARCH_DEEP.Name = "CH_FEED_SPEC_SEARCH_DEEP" - Me.CH_FEED_SPEC_SEARCH_DEEP.Size = New System.Drawing.Size(304, 19) - Me.CH_FEED_SPEC_SEARCH_DEEP.TabIndex = 1 - Me.CH_FEED_SPEC_SEARCH_DEEP.Text = "Search missing files (special feeds): deep search" - TT_MAIN.SetToolTip(Me.CH_FEED_SPEC_SEARCH_DEEP, "Deep search means that the missing file will be searched in other users' location" & - "s as well.") - Me.CH_FEED_SPEC_SEARCH_DEEP.UseVisualStyleBackColor = True + Me.CH_FEED_OPEN_CTRLF.AutoSize = True + Me.CH_FEED_OPEN_CTRLF.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_FEED_OPEN_CTRLF.Location = New System.Drawing.Point(4, 299) + Me.CH_FEED_OPEN_CTRLF.Name = "CH_FEED_OPEN_CTRLF" + Me.CH_FEED_OPEN_CTRLF.Size = New System.Drawing.Size(613, 19) + Me.CH_FEED_OPEN_CTRLF.TabIndex = 11 + Me.CH_FEED_OPEN_CTRLF.Text = "Use 'Ctrl+F' to open the Feed" + TT_MAIN.SetToolTip(Me.CH_FEED_OPEN_CTRLF, "If checked, 'Ctrl+F' will be used to open the Feed. Otherwise, 'Alt+F' will be us" & + "ed.") + Me.CH_FEED_OPEN_CTRLF.UseVisualStyleBackColor = True ' 'GlobalSettingsForm ' @@ -2641,6 +2657,8 @@ Namespace Editors TP_FEED_SES.ResumeLayout(False) CType(Me.NUM_FEED_STORE_SESSION_DATA, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.NUM_FEED_SES_CURR_LOAD_LAST, System.ComponentModel.ISupportInitialize).EndInit() + TP_FEED_SPEC_SEARCH.ResumeLayout(False) + TP_FEED_SPEC_SEARCH.PerformLayout() TAB_NOTIFY.ResumeLayout(False) TP_NOTIFY_MAIN.ResumeLayout(False) TP_NOTIFY_MAIN.PerformLayout() @@ -2672,8 +2690,6 @@ Namespace Editors Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False) Me.CONTAINER_MAIN.ResumeLayout(False) Me.CONTAINER_MAIN.PerformLayout() - TP_FEED_SPEC_SEARCH.ResumeLayout(False) - TP_FEED_SPEC_SEARCH.PerformLayout() Me.ResumeLayout(False) End Sub @@ -2791,5 +2807,6 @@ Namespace Editors Private WithEvents CH_SCHEDULER_SCRIPT_EX_MANUAL As CheckBox Private WithEvents CH_FEED_SPEC_SEARCH As CheckBox Private WithEvents CH_FEED_SPEC_SEARCH_DEEP As CheckBox + Private WithEvents CH_FEED_OPEN_CTRLF As CheckBox End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/GlobalSettingsForm.resx b/SCrawler/Editors/GlobalSettingsForm.resx index ac756f2..0df8f05 100644 --- a/SCrawler/Editors/GlobalSettingsForm.resx +++ b/SCrawler/Editors/GlobalSettingsForm.resx @@ -120,11 +120,8 @@ False - - False - - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -135,7 +132,7 @@ cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -146,7 +143,7 @@ False - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -154,7 +151,7 @@ AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -170,7 +167,7 @@ VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -186,7 +183,7 @@ VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -194,7 +191,7 @@ AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -210,7 +207,7 @@ VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -227,9 +224,6 @@ False - - False - False @@ -263,37 +257,19 @@ You can find more detailed information about the missing posts in the form that False - - False - False False - - False - False False - - False - - - False - - - False - - - False - - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -301,7 +277,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -324,13 +300,7 @@ You can find more detailed information about the missing posts in the form that False - - False - - - False - - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -341,7 +311,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -364,10 +334,7 @@ You can find more detailed information about the missing posts in the form that False - - False - - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -383,7 +350,7 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -397,10 +364,10 @@ You can find more detailed information about the missing posts in the form that 0 - only the session of the current day. >0 - the value (in minutes) that must elapse since last file download in a session for that session to be considered current. - + False - + False @@ -409,7 +376,7 @@ You can find more detailed information about the missing posts in the form that False - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -420,7 +387,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -436,7 +403,7 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -444,7 +411,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -455,7 +422,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -471,7 +438,7 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -479,7 +446,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -490,7 +457,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -506,7 +473,7 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -514,7 +481,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -525,7 +492,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -541,7 +508,7 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -549,7 +516,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -565,7 +532,7 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -579,10 +546,7 @@ You can find more detailed information about the missing posts in the form that False - - False - - + iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t 3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL @@ -678,10 +642,7 @@ You can find more detailed information about the missing posts in the form that False - - False - - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -689,7 +650,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -697,7 +658,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -708,7 +669,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -719,7 +680,7 @@ You can find more detailed information about the missing posts in the form that False - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -727,7 +688,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -735,7 +696,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -743,7 +704,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go @@ -751,7 +712,7 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go diff --git a/SCrawler/Editors/GlobalSettingsForm.vb b/SCrawler/Editors/GlobalSettingsForm.vb index 7ad0be1..86013ba 100644 --- a/SCrawler/Editors/GlobalSettingsForm.vb +++ b/SCrawler/Editors/GlobalSettingsForm.vb @@ -80,6 +80,7 @@ Namespace Editors TXT_SCHEDULER_SCRIPT.Text = .AutomationScript TXT_SCHEDULER_SCRIPT.Checked = .AutomationScript.Use CH_SCHEDULER_SCRIPT_EX_MANUAL.Checked = .AutomationScript_ExcludeManual + CH_FEED_OPEN_CTRLF.Checked = .FeedOpenCtrlF 'Notifications CH_NOTIFY_SILENT.Checked = .NotificationsSilentMode CH_NOTIFY_SHOW_BASE.Checked = .ShowNotifications @@ -300,6 +301,7 @@ Namespace Editors .AutomationScript.Value = TXT_SCHEDULER_SCRIPT.Text .AutomationScript.Use = TXT_SCHEDULER_SCRIPT.Checked .AutomationScript_ExcludeManual.Value = CH_SCHEDULER_SCRIPT_EX_MANUAL.Checked + .FeedOpenCtrlF.Value = CH_FEED_OPEN_CTRLF.Checked 'Notifications .NotificationsSilentMode = CH_NOTIFY_SILENT.Checked .ShowNotifications.Value = CH_NOTIFY_SHOW_BASE.Checked diff --git a/SCrawler/Editors/UserCreatorForm.vb b/SCrawler/Editors/UserCreatorForm.vb index b3ded89..3e8be1f 100644 --- a/SCrawler/Editors/UserCreatorForm.vb +++ b/SCrawler/Editors/UserCreatorForm.vb @@ -103,7 +103,7 @@ Namespace Editors #End Region #Region "Exchange, Path, Labels" Friend Property MyExchangeOptions As Object = Nothing - Private ReadOnly _SpecPathPattern As RParams = RParams.DM("\w:\\.*", 0, EDP.ReturnValue) + Private ReadOnly _SpecPathPattern As RParams = RParams.DM("(\w:\\|\\\\).*", 0, EDP.ReturnValue) Private ReadOnly Property SpecialPath(ByVal s As SettingsHost) As SFile Get If TXT_SPEC_FOLDER.IsEmptyString Then diff --git a/SCrawler/MainFrame.Designer.vb b/SCrawler/MainFrame.Designer.vb index fbe31e9..9da8d5e 100644 --- a/SCrawler/MainFrame.Designer.vb +++ b/SCrawler/MainFrame.Designer.vb @@ -679,7 +679,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_CONTEXT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_CONTEXT_DOWN.Name = "BTT_CONTEXT_DOWN" Me.BTT_CONTEXT_DOWN.Size = New System.Drawing.Size(221, 22) - Me.BTT_CONTEXT_DOWN.Text = "Download data" + Me.BTT_CONTEXT_DOWN.Text = "Download" Me.BTT_CONTEXT_DOWN.ToolTipText = "" ' 'BTT_CONTEXT_DOWN_LIMITED @@ -688,7 +688,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_CONTEXT_DOWN_LIMITED.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_CONTEXT_DOWN_LIMITED.Name = "BTT_CONTEXT_DOWN_LIMITED" Me.BTT_CONTEXT_DOWN_LIMITED.Size = New System.Drawing.Size(221, 22) - Me.BTT_CONTEXT_DOWN_LIMITED.Text = "Download data limited" + Me.BTT_CONTEXT_DOWN_LIMITED.Text = "Download (limited)" Me.BTT_CONTEXT_DOWN_LIMITED.ToolTipText = "Download top ... posts" ' 'BTT_CONTEXT_DOWN_DATE_LIMIT @@ -696,7 +696,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Image = Global.SCrawler.My.Resources.Resources.StartPic_Green_16 Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Name = "BTT_CONTEXT_DOWN_DATE_LIMIT" Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Size = New System.Drawing.Size(221, 22) - Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Text = "Download data to the date" + Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Text = "Download (to the date)" Me.BTT_CONTEXT_DOWN_DATE_LIMIT.ToolTipText = "" ' 'BTT_CONTEXT_EDIT diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index 9d4d29c..3cda4f1 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -241,13 +241,13 @@ CloseResume: If Not b Then b = True - If e.Control And e.KeyCode = Keys.F Then + If Settings.ShortcutOpenFeed = e Then BTT_FEED.PerformClick() ElseIf e.Alt And e.KeyCode = Keys.A Then BTT_DOWN_AUTOMATION.PerformClick() ElseIf e.Alt And e.KeyCode = Keys.P Then BTT_PR_INFO.PerformClick() - ElseIf (e.Alt And (e.KeyCode = Keys.F Or e.KeyCode = Keys.U)) Or (e.Control And e.KeyCode = Keys.U) Then + ElseIf Settings.ShortcutOpenSearch = e Or (e.Alt And e.KeyCode = Keys.U) Or (e.Control And e.KeyCode = Keys.U) Then MySearch.FormShow() Else b = False @@ -1520,6 +1520,8 @@ CloseResume: If Not user Is Nothing AndAlso user.IsCollection Then With DirectCast(user, UserDataBind) BTT_CONTEXT_DOWN.DropDownItems.AddRange(.ContextDown) + BTT_CONTEXT_DOWN_LIMITED.DropDownItems.AddRange(.ContextDownLimit) + BTT_CONTEXT_DOWN_DATE_LIMIT.DropDownItems.AddRange(.ContextDownDate) BTT_CONTEXT_EDIT.DropDownItems.AddRange(.ContextEdit) BTT_CONTEXT_DELETE.DropDownItems.AddRange(.ContextDelete) BTT_CONTEXT_ERASE.DropDownItems.AddRange(.ContextErase) @@ -1529,6 +1531,8 @@ CloseResume: End If Else BTT_CONTEXT_DOWN.DropDownItems.Clear() + BTT_CONTEXT_DOWN_LIMITED.DropDownItems.Clear() + BTT_CONTEXT_DOWN_DATE_LIMIT.DropDownItems.Clear() BTT_CONTEXT_EDIT.DropDownItems.Clear() BTT_CONTEXT_DELETE.DropDownItems.Clear() BTT_CONTEXT_ERASE.DropDownItems.Clear() @@ -1634,10 +1638,11 @@ CloseResume: Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, "[MainFrame.GetSelectedUserArray]", New List(Of IUserData)) End Try End Function - Private Enum DownUserLimits : None : Number : [Date] : End Enum - Private Sub DownloadSelectedUser(ByVal UseLimits As DownUserLimits, Optional ByVal IncludeInTheFeed As Boolean = True) + Friend Enum DownUserLimits : None : Number : [Date] : End Enum + Friend Sub DownloadSelectedUser(ByVal UseLimits As DownUserLimits, Optional ByVal IncludeInTheFeed As Boolean = True, + Optional ByVal SUser As IUserData = Nothing) Const MsgTitle$ = "Download limit" - Dim users As List(Of IUserData) = GetSelectedUserArray() + Dim users As List(Of IUserData) = If(SUser Is Nothing, GetSelectedUserArray(), New List(Of IUserData) From {SUser}) If users.ListExists Then Dim limit%? = Nothing Dim _from As Date? = Nothing @@ -1704,7 +1709,7 @@ ResumeDownloadingOperation: $"Do you want to download them all{fStr}?{vbNewLine.StringDup(2)}" & $"Selected users:{vbNewLine}{uStr}", "Multiple users selected"}, MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - users.ForEach(Sub(u) + users.ForEach(Sub(ByVal u As IUserData) u.DownloadTopCount = limit u.DownloadDateFrom = _from u.DownloadDateTo = _to diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index 138c96b..0a11c73 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 672f8e9..106dc44 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -10,6 +10,7 @@ Imports PersonalUtilities.Functions.Messaging Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.XML.Base Imports PersonalUtilities.Functions.XML.Objects +Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Controls Imports PersonalUtilities.Forms.Controls.Base Imports PersonalUtilities.Tools @@ -193,6 +194,17 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Private ReadOnly UsersSettingsFile As SFile = $"{SettingsFolderName}\Users.xml" Private ReadOnly Property SettingsVersion As XMLValue(Of Integer) Private Const SettingsVersionCurrent As Integer = 1 + Friend ShortcutOpenFeed As New ButtonKey(Keys.F, True) + Friend ShortcutOpenSearch As New ButtonKey(Keys.F,, True) + Private Sub ChangeFeedOpenMode() + If FeedOpenCtrlF Then + ShortcutOpenFeed = New ButtonKey(Keys.F, True) + ShortcutOpenSearch = New ButtonKey(Keys.F,, True) + Else + ShortcutOpenFeed = New ButtonKey(Keys.F,, True) + ShortcutOpenSearch = New ButtonKey(Keys.F, True) + End If + End Sub #End Region #Region "Initializer" Friend Sub New() @@ -299,6 +311,9 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable DownloadAll_UseF6 = New XMLValue(Of Boolean)("DownloadAll_UseF6", True, MyXML, n) DownloadAll_UseF6_Confirm = New XMLValue(Of Boolean)("DownloadAll_UseF6_Confirm", False, MyXML, n) DownloadAll_Confirm = New XMLValue(Of Boolean)("DownloadAll_Confirm", False, MyXML, n) + FeedOpenCtrlF = New XMLValue(Of Boolean)("FeedOpenCtrlF", True, MyXML, n) + AddHandler FeedOpenCtrlF.ValueChanged, AddressOf ChangeFeedOpenMode + ChangeFeedOpenMode() 'Notifications n = {"Notifications"} @@ -925,6 +940,7 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Friend ReadOnly Property DownloadAll_UseF6 As XMLValue(Of Boolean) Friend ReadOnly Property DownloadAll_UseF6_Confirm As XMLValue(Of Boolean) Friend ReadOnly Property DownloadAll_Confirm As XMLValue(Of Boolean) + Friend ReadOnly Property FeedOpenCtrlF As XMLValue(Of Boolean) #End Region #Region "Notifications" Friend Enum NotificationObjects