diff --git a/Changelog.md b/Changelog.md index 5484d6b..7724506 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,16 @@ +# 2024.4.26.0 + +*2024-04-26* + +- Added + - Site settings: the values that can be extracted from cookies immediately populate fields + - Feed: ability to load the last session of the current day (if it exists) as the current session after restarting SCrawler + - Users search: include friendly name matches in search result +- Updated + - gallery-dl up to version **1.26.9** +- Fixed + - xHamster: **saved posts aren't downloading** + # 2024.4.14.0 *2024-04-14* diff --git a/ProgramScreenshots/SettingsGlobalFeed.png b/ProgramScreenshots/SettingsGlobalFeed.png index e0f6686..db6b5b9 100644 Binary files a/ProgramScreenshots/SettingsGlobalFeed.png and b/ProgramScreenshots/SettingsGlobalFeed.png differ diff --git a/SCrawler/API/Base/Declarations.vb b/SCrawler/API/Base/Declarations.vb index af8c39d..24956b1 100644 --- a/SCrawler/API/Base/Declarations.vb +++ b/SCrawler/API/Base/Declarations.vb @@ -6,6 +6,7 @@ ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY +Imports System.Runtime.CompilerServices Imports PersonalUtilities.Forms Imports PersonalUtilities.Functions.RegularExpressions Namespace API.Base @@ -72,5 +73,12 @@ Namespace API.Base $"Current query: [{CurrentQuery}]{vbCr}New query: [{NewQuery}]", "Changing a query"}, vbExclamation,,, {"Process", "Cancel"}) = 0 End Function + Friend Function GetCookieValue(ByVal Cookies As IEnumerable(Of System.Net.Cookie), ByVal CookieName As String) As String + If Cookies.ListExists Then Return If(Cookies.FirstOrDefault(Function(c) c.Name.ToLower = CookieName.ToLower)?.Value, String.Empty) Else Return String.Empty + End Function + Friend Function GetCookieValue(ByVal Cookies As IEnumerable(Of System.Net.Cookie), ByVal CookieName As String, + ByVal PropName As String, ByVal PropNameComp As String) As String + Return If(PropName = PropNameComp, Cookies.GetCookieValue(CookieName), String.Empty) + End Function End Module End Namespace \ No newline at end of file diff --git a/SCrawler/API/Instagram/SiteSettings.vb b/SCrawler/API/Instagram/SiteSettings.vb index b94f456..eb02e4b 100644 --- a/SCrawler/API/Instagram/SiteSettings.vb +++ b/SCrawler/API/Instagram/SiteSettings.vb @@ -65,6 +65,10 @@ Namespace API.Instagram 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 @@ -557,7 +561,7 @@ Namespace API.Instagram If vals.Any(Function(v) Not v.ValueOld = v.ValueNew) OrElse Not Responser.Cookies.ListEquals(____Cookies) Then HH_IG_WWW_CLAIM.Value = 0 : credentialsUpdated = True If Responser.CookiesExists Then - Dim csrf$ = If(Responser.Cookies.FirstOrDefault(Function(c) c.Name.StringToLower = Header_CSRF_TOKEN_COOKIE)?.Value, String.Empty) + Dim csrf$ = GetValueFromCookies(NameOf(HH_CSRF_TOKEN), Responser.Cookies) If Not csrf.IsEmptyString Then If Not AEquals(Of String)(CStr(HH_CSRF_TOKEN.Value), csrf) Then credentialsUpdated = True HH_CSRF_TOKEN.Value = csrf diff --git a/SCrawler/API/JustForFans/SiteSettings.vb b/SCrawler/API/JustForFans/SiteSettings.vb index a0da6a0..db408cf 100644 --- a/SCrawler/API/JustForFans/SiteSettings.vb +++ b/SCrawler/API/JustForFans/SiteSettings.vb @@ -20,6 +20,10 @@ Namespace API.JustForFans Friend ReadOnly Property UserID As PropertyValue Friend ReadOnly Property UserHash4 As PropertyValue + + Private Function GetValueFromCookies(ByVal PropName As String, ByVal c As CookieKeeper) As String + Return c.GetCookieValue(UserHash4_CookieName, PropName, NameOf(UserHash4)) + End Function Friend ReadOnly Property HeaderAccept As PropertyValue @@ -61,7 +65,7 @@ Namespace API.JustForFans Private Sub UpdateUserHash4() If Responser.CookiesExists Then Dim hv_current$ = UserHash4.Value - Dim hv_cookie$ = If(Responser.Cookies.FirstOrDefault(Function(cc) cc.Name.ToLower = UserHash4_CookieName)?.Value, String.Empty) + Dim hv_cookie$ = GetValueFromCookies(NameOf(UserHash4), Responser.Cookies) If Not hv_cookie.IsEmptyString And Not hv_cookie = hv_current And Responser.Cookies.Changed Then UserHash4.Value = hv_cookie End If End Sub diff --git a/SCrawler/API/OnlyFans/SiteSettings.vb b/SCrawler/API/OnlyFans/SiteSettings.vb index 8bfe184..59f7991 100644 --- a/SCrawler/API/OnlyFans/SiteSettings.vb +++ b/SCrawler/API/OnlyFans/SiteSettings.vb @@ -59,6 +59,16 @@ Namespace API.OnlyFans Responser.UserAgent = Value End If End Sub + + Private Function GetValueFromCookies(ByVal PropName As String, ByVal c As CookieKeeper) As String + If c.ListExists Then + Select Case PropName + Case NameOf(HH_USER_ID) : Return c.GetCookieValue("auth_id") + Case NameOf(HH_X_BC) : Return c.GetCookieValue("fp") + End Select + End If + Return String.Empty + End Function #End Region #Region "Rules" Private ReadOnly Property LastDateUpdated_XML As PropertyValue diff --git a/SCrawler/API/Pinterest/UserData.vb b/SCrawler/API/Pinterest/UserData.vb index 6875020..0e64c1e 100644 --- a/SCrawler/API/Pinterest/UserData.vb +++ b/SCrawler/API/Pinterest/UserData.vb @@ -287,7 +287,7 @@ Namespace API.Pinterest End Function End Class Private Function GetDataFromGalleryDL(ByVal URL As String, ByVal IsBoardsRequested As Boolean, ByVal Token As CancellationToken) As List(Of String) - Dim command$ = $"gallery-dl --verbose --simulate " + Dim command$ = $"""{Settings.GalleryDLFile.File}"" --verbose --simulate " Try If Not URL.IsEmptyString Then If MySettings.CookiesNetscapeFile.Exists Then command &= $"--cookies ""{MySettings.CookiesNetscapeFile}"" " diff --git a/SCrawler/API/ThreadsNet/SiteSettings.vb b/SCrawler/API/ThreadsNet/SiteSettings.vb index 8bbfa18..a5df0db 100644 --- a/SCrawler/API/ThreadsNet/SiteSettings.vb +++ b/SCrawler/API/ThreadsNet/SiteSettings.vb @@ -25,6 +25,10 @@ Namespace API.ThreadsNet Return __HH_CSRF_TOKEN End Get End Property + + Private Function GetValueFromCookies(ByVal PropName As String, ByVal c As CookieKeeper) As String + Return c.GetCookieValue(IG.Header_CSRF_TOKEN_COOKIE, PropName, NameOf(HH_CSRF_TOKEN)) + End Function Protected ReadOnly __HH_IG_APP_ID As PropertyValue Friend Overridable ReadOnly Property HH_IG_APP_ID As PropertyValue @@ -195,7 +199,7 @@ Namespace API.ThreadsNet End Sub Friend Overrides Sub Update() If _SiteEditorFormOpened And Responser.CookiesExists Then - Dim csrf$ = If(Responser.Cookies.FirstOrDefault(Function(c) c.Name.StringToLower = IG.Header_CSRF_TOKEN_COOKIE)?.Value, String.Empty) + Dim csrf$ = GetValueFromCookies(NameOf(HH_CSRF_TOKEN), Responser.Cookies) If Not csrf.IsEmptyString Then HH_CSRF_TOKEN.Value = csrf If Not __Cookies Is Nothing AndAlso Not __Cookies.ListEquals(Responser.Cookies) Then DownloadData_Impl.Value = True End If diff --git a/SCrawler/API/Xhamster/UserData.vb b/SCrawler/API/Xhamster/UserData.vb index 8a210d0..77cb9e2 100644 --- a/SCrawler/API/Xhamster/UserData.vb +++ b/SCrawler/API/Xhamster/UserData.vb @@ -265,7 +265,12 @@ Namespace API.Xhamster Dim checkLimit As Func(Of Boolean) = Function() limit > 0 And SearchPostsCount >= limit And IsVideo If IsSavedPosts Then - containerNodes.Add(If(IsVideo, {"favoriteVideoListComponent", "models"}, {"favoritesGalleriesAndPhotosCollection"})) + If IsVideo Then + containerNodes.Add({"favoriteVideoListComponent", "models"}) + containerNodes.Add({"favoriteVideoListComponent", "videoThumbProps"}) + Else + containerNodes.Add({"favoritesGalleriesAndPhotosCollection"}) + End If ElseIf Not SiteMode = SiteModes.Search Then If IsVideo Then containerNodes.Add({"trendingVideoListComponent", "models"}) diff --git a/SCrawler/Download/Feed/DownloadFeedForm.vb b/SCrawler/Download/Feed/DownloadFeedForm.vb index 1c2e33b..7fc2ad1 100644 --- a/SCrawler/Download/Feed/DownloadFeedForm.vb +++ b/SCrawler/Download/Feed/DownloadFeedForm.vb @@ -173,6 +173,7 @@ Namespace DownloadObjects MENU_DOWN.Visible = OPT_SUBSCRIPTIONS.Checked UpdateSettings() FeedChangeMode(FeedModes.Current) + Downloader.FilesLoadLastSession() RefillList(True, False) .EndLoaderOperations(False) End With diff --git a/SCrawler/Download/TDownloader.vb b/SCrawler/Download/TDownloader.vb index d19fb60..372e749 100644 --- a/SCrawler/Download/TDownloader.vb +++ b/SCrawler/Download/TDownloader.vb @@ -116,8 +116,10 @@ Namespace DownloadObjects Friend Const SessionsPath As String = "Settings\Sessions\" Private _FilesSessionCleared As Boolean = False Private _FilesSessionActual As SFile = Nothing + Private _FilesSessionChecked As Boolean = False Friend ReadOnly Property FilesSessionActual(Optional ByVal GenerateFileName As Boolean = True) As SFile Get + FilesLoadLastSession() If _FilesSessionActual.IsEmptyString And GenerateFileName Then _ _FilesSessionActual = $"{SessionsPath}{AConvert(Of String)(Now, SessionDateTimeProvider)}.xml" Return _FilesSessionActual @@ -146,6 +148,47 @@ Namespace DownloadObjects _FilesSaving = False End Try End Function + Private _FilesSessionChecked_Impl As Boolean = False + Friend Sub FilesLoadLastSession() + Try + If Not _FilesSessionChecked And Not _FilesSessionChecked_Impl And _FilesSessionActual.IsEmptyString Then + _FilesSessionChecked = True + _FilesSessionChecked_Impl = True + Dim settingValue% = Settings.FeedCurrentTryLoadLastSession + If settingValue >= 0 Then + Dim startTime As Date = Process.GetCurrentProcess.StartTime + Dim files As List(Of SFile) = SFile.GetFiles(SessionsPath.CSFileP, "*.xml",, EDP.ReturnValue) + If files.ListExists Then files.RemoveAll(Settings.Feeds.FeedSpecialRemover) + If files.ListExists Then + Dim nd$ = Now.ToString("yyyyMMdd") + files.RemoveAll(Function(f) Not f.Name.StartsWith(nd)) + End If + If files.ListExists Then + files.Sort() + Dim lastDate As Date = AConvert(Of Date)(files.Last.Name, SessionDateTimeProvider) + If lastDate.Date = startTime.Date Then + Dim __files As New List(Of UserMediaD) + Using x As New XmlFile(files.Last, Protector.Modes.All, False) With {.AllowSameNames = True, .XmlReadOnly = True} + x.LoadData() + If x.Count > 0 Then __files.ListAddList(x, LAP.IgnoreICopier) + If __files.Count > 0 AndAlso (settingValue = 0 OrElse + (startTime - {lastDate, __files.Max(Function(f) f.Date)}.Max).TotalMinutes <= settingValue) Then + _Session = __files.Max(Function(f) f.Session) + Me.Files.AddRange(__files) + _FilesSessionActual = files.Last + End If + __files.Clear() + End Using + End If + End If + End If + _FilesSessionChecked_Impl = False + End If + Catch ex As Exception + _FilesSessionChecked_Impl = False + ErrorsDescriber.Execute(EDP.SendToLog, ex, "[TDownloader.FilesLoadLastSession]") + End Try + End Sub Private _FilesUpdating As Boolean = False Friend Sub FilesUpdatePendingUsers() _FilesUpdating = True @@ -444,7 +487,16 @@ Namespace DownloadObjects End If End Set End Property - Private Session As Integer = 0 + Private _Session As Integer = 0 + Private Property Session As Integer + Get + FilesLoadLastSession() + Return _Session + End Get + Set(ByVal _Session As Integer) + Me._Session = _Session + End Set + End Property Private Sub [Start]() If Not AutoDownloaderWorking AndAlso MyProgressForm.ReadyToOpen AndAlso Pool.LongCount(Function(p) p.Count > 0) > 1 Then MyProgressForm.Show() : MainFrameObj.Focus() If Not If(CheckerThread?.IsAlive, False) Then diff --git a/SCrawler/Editors/GlobalSettingsForm.Designer.vb b/SCrawler/Editors/GlobalSettingsForm.Designer.vb index 176d6fa..031d387 100644 --- a/SCrawler/Editors/GlobalSettingsForm.Designer.vb +++ b/SCrawler/Editors/GlobalSettingsForm.Designer.vb @@ -59,11 +59,12 @@ Namespace Editors 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 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 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 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 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() @@ -76,23 +77,25 @@ Namespace Editors 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 ActionButton27 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() + 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 ActionButton28 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() - Dim ActionButton29 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 TP_HEADERS_DEF As System.Windows.Forms.TableLayoutPanel 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 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 Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended() @@ -169,11 +172,12 @@ Namespace Editors Me.CH_FEED_ENDLESS = New System.Windows.Forms.CheckBox() Me.CH_FEED_ADD_SESSION = New System.Windows.Forms.CheckBox() Me.CH_FEED_ADD_DATE = New System.Windows.Forms.CheckBox() - Me.NUM_FEED_STORE_SESSION_DATA = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_FEED_CENTER_IMAGE = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.COLORS_FEED = New SCrawler.Editors.ColorPicker() Me.CH_FEED_SHOW_FRIENDLY = New System.Windows.Forms.CheckBox() Me.CH_FEED_SHOW_SPEC_MEDIAITEM = New System.Windows.Forms.CheckBox() + Me.NUM_FEED_STORE_SESSION_DATA = New PersonalUtilities.Forms.Controls.TextBoxExtended() + Me.NUM_FEED_SES_CURR_LOAD_LAST = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_YTDLP = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_FFMPEG = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_CURL = New PersonalUtilities.Forms.Controls.TextBoxExtended() @@ -222,6 +226,7 @@ Namespace Editors TAB_FEED = New System.Windows.Forms.TabPage() TP_FEED = New System.Windows.Forms.TableLayoutPanel() TP_FEED_IMG_COUNT = New System.Windows.Forms.TableLayoutPanel() + TP_FEED_SES = 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() @@ -269,8 +274,10 @@ Namespace Editors TP_FEED_IMG_COUNT.SuspendLayout() CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.NUM_FEED_STORE_SESSION_DATA, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_FEED_CENTER_IMAGE, System.ComponentModel.ISupportInitialize).BeginInit() + 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() TAB_NOTIFY.SuspendLayout() TP_NOTIFY_MAIN.SuspendLayout() TP_ENVIR.SuspendLayout() @@ -1595,13 +1602,13 @@ Namespace Editors TP_FEED.Controls.Add(Me.CH_FEED_ENDLESS, 0, 3) TP_FEED.Controls.Add(Me.CH_FEED_ADD_SESSION, 0, 4) TP_FEED.Controls.Add(Me.CH_FEED_ADD_DATE, 0, 5) - TP_FEED.Controls.Add(Me.NUM_FEED_STORE_SESSION_DATA, 0, 6) TP_FEED.Controls.Add(Me.TXT_FEED_CENTER_IMAGE, 0, 1) TP_FEED.Controls.Add(Me.COLORS_FEED, 0, 2) TP_FEED.Controls.Add(Me.CH_FEED_OPEN_LAST_MODE, 0, 7) TP_FEED.Controls.Add(Me.CH_FEED_SHOW_FRIENDLY, 0, 8) TP_FEED.Controls.Add(Me.CH_FEED_SHOW_SPEC_MEDIAITEM, 0, 9) TP_FEED.Controls.Add(Me.CH_FEED_UP_FILE_LOC_MOVE, 0, 10) + TP_FEED.Controls.Add(TP_FEED_SES, 0, 6) TP_FEED.Dock = System.Windows.Forms.DockStyle.Fill TP_FEED.Location = New System.Drawing.Point(0, 0) TP_FEED.Name = "TP_FEED" @@ -1618,6 +1625,7 @@ Namespace Editors TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_FEED.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.TabIndex = 0 ' @@ -1703,27 +1711,6 @@ Namespace Editors Me.CH_FEED_ADD_DATE.Text = "Add the date to the post title" Me.CH_FEED_ADD_DATE.UseVisualStyleBackColor = True ' - 'NUM_FEED_STORE_SESSION_DATA - ' - Me.NUM_FEED_STORE_SESSION_DATA.CaptionCheckAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.NUM_FEED_STORE_SESSION_DATA.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox - Me.NUM_FEED_STORE_SESSION_DATA.CaptionText = "Store session data" - Me.NUM_FEED_STORE_SESSION_DATA.CaptionTextAlign = System.Drawing.ContentAlignment.MiddleLeft - Me.NUM_FEED_STORE_SESSION_DATA.CaptionToolTipEnabled = True - Me.NUM_FEED_STORE_SESSION_DATA.CaptionToolTipText = "If checked, session data will be stored in an xml file." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "The number indicates the" & - " number of sessions to be saved." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "-1 to save all sessions" - Me.NUM_FEED_STORE_SESSION_DATA.CaptionWidth = 115.0R - Me.NUM_FEED_STORE_SESSION_DATA.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown - Me.NUM_FEED_STORE_SESSION_DATA.Dock = System.Windows.Forms.DockStyle.Fill - Me.NUM_FEED_STORE_SESSION_DATA.Location = New System.Drawing.Point(4, 166) - Me.NUM_FEED_STORE_SESSION_DATA.Name = "NUM_FEED_STORE_SESSION_DATA" - Me.NUM_FEED_STORE_SESSION_DATA.NumberMaximum = New Decimal(New Integer() {100000, 0, 0, 0}) - Me.NUM_FEED_STORE_SESSION_DATA.NumberMinimum = New Decimal(New Integer() {1, 0, 0, -2147483648}) - Me.NUM_FEED_STORE_SESSION_DATA.NumberUpDownAlign = System.Windows.Forms.LeftRightAlignment.Left - Me.NUM_FEED_STORE_SESSION_DATA.Size = New System.Drawing.Size(613, 22) - Me.NUM_FEED_STORE_SESSION_DATA.TabIndex = 6 - Me.NUM_FEED_STORE_SESSION_DATA.Text = "20" - ' 'TXT_FEED_CENTER_IMAGE ' Me.TXT_FEED_CENTER_IMAGE.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox @@ -1778,6 +1765,70 @@ Namespace Editors Me.CH_FEED_SHOW_SPEC_MEDIAITEM.Text = "Show special feeds in media items" Me.CH_FEED_SHOW_SPEC_MEDIAITEM.UseVisualStyleBackColor = True ' + 'TP_FEED_SES + ' + TP_FEED_SES.ColumnCount = 2 + TP_FEED_SES.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_FEED_SES.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_FEED_SES.Controls.Add(Me.NUM_FEED_STORE_SESSION_DATA, 0, 0) + TP_FEED_SES.Controls.Add(Me.NUM_FEED_SES_CURR_LOAD_LAST, 1, 0) + TP_FEED_SES.Dock = System.Windows.Forms.DockStyle.Fill + TP_FEED_SES.Location = New System.Drawing.Point(1, 163) + TP_FEED_SES.Margin = New System.Windows.Forms.Padding(0) + TP_FEED_SES.Name = "TP_FEED_SES" + TP_FEED_SES.RowCount = 1 + TP_FEED_SES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_FEED_SES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) + TP_FEED_SES.Size = New System.Drawing.Size(619, 28) + TP_FEED_SES.TabIndex = 6 + ' + 'NUM_FEED_STORE_SESSION_DATA + ' + Me.NUM_FEED_STORE_SESSION_DATA.CaptionCheckAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.NUM_FEED_STORE_SESSION_DATA.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox + Me.NUM_FEED_STORE_SESSION_DATA.CaptionText = "Store session data" + Me.NUM_FEED_STORE_SESSION_DATA.CaptionTextAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.NUM_FEED_STORE_SESSION_DATA.CaptionToolTipEnabled = True + Me.NUM_FEED_STORE_SESSION_DATA.CaptionToolTipText = "If checked, session data will be stored in an xml file." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "The number indicates the" & + " number of sessions to be saved." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "-1 to save all sessions" + Me.NUM_FEED_STORE_SESSION_DATA.CaptionWidth = 115.0R + Me.NUM_FEED_STORE_SESSION_DATA.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown + Me.NUM_FEED_STORE_SESSION_DATA.Dock = System.Windows.Forms.DockStyle.Fill + Me.NUM_FEED_STORE_SESSION_DATA.Location = New System.Drawing.Point(3, 3) + Me.NUM_FEED_STORE_SESSION_DATA.Name = "NUM_FEED_STORE_SESSION_DATA" + Me.NUM_FEED_STORE_SESSION_DATA.NumberMaximum = New Decimal(New Integer() {100000, 0, 0, 0}) + Me.NUM_FEED_STORE_SESSION_DATA.NumberMinimum = New Decimal(New Integer() {1, 0, 0, -2147483648}) + Me.NUM_FEED_STORE_SESSION_DATA.NumberUpDownAlign = System.Windows.Forms.LeftRightAlignment.Left + Me.NUM_FEED_STORE_SESSION_DATA.Size = New System.Drawing.Size(303, 22) + Me.NUM_FEED_STORE_SESSION_DATA.TabIndex = 0 + Me.NUM_FEED_STORE_SESSION_DATA.Text = "20" + ' + 'NUM_FEED_SES_CURR_LOAD_LAST + ' + 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") + Me.NUM_FEED_SES_CURR_LOAD_LAST.CaptionWidth = 115.0R + Me.NUM_FEED_SES_CURR_LOAD_LAST.ClearTextByButtonClear = False + Me.NUM_FEED_SES_CURR_LOAD_LAST.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown + Me.NUM_FEED_SES_CURR_LOAD_LAST.Dock = System.Windows.Forms.DockStyle.Fill + Me.NUM_FEED_SES_CURR_LOAD_LAST.Location = New System.Drawing.Point(312, 3) + Me.NUM_FEED_SES_CURR_LOAD_LAST.Name = "NUM_FEED_SES_CURR_LOAD_LAST" + Me.NUM_FEED_SES_CURR_LOAD_LAST.NumberMaximum = New Decimal(New Integer() {10080, 0, 0, 0}) + Me.NUM_FEED_SES_CURR_LOAD_LAST.NumberMinimum = New Decimal(New Integer() {1, 0, 0, -2147483648}) + Me.NUM_FEED_SES_CURR_LOAD_LAST.NumberUpDownAlign = System.Windows.Forms.LeftRightAlignment.Left + Me.NUM_FEED_SES_CURR_LOAD_LAST.Size = New System.Drawing.Size(304, 22) + Me.NUM_FEED_SES_CURR_LOAD_LAST.TabIndex = 1 + Me.NUM_FEED_SES_CURR_LOAD_LAST.Text = "0" + ' 'TAB_NOTIFY ' TAB_NOTIFY.Controls.Add(TP_NOTIFY_MAIN) @@ -1843,19 +1894,19 @@ Namespace Editors ' 'TXT_YTDLP ' - ActionButton13.BackgroundImage = CType(resources.GetObject("ActionButton13.BackgroundImage"), System.Drawing.Image) - ActionButton13.Name = "Open" - ActionButton13.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton14.BackgroundImage = CType(resources.GetObject("ActionButton14.BackgroundImage"), System.Drawing.Image) - ActionButton14.Name = "Refresh" - ActionButton14.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton14.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" ActionButton15.BackgroundImage = CType(resources.GetObject("ActionButton15.BackgroundImage"), System.Drawing.Image) - ActionButton15.Name = "Clear" - ActionButton15.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_YTDLP.Buttons.Add(ActionButton13) - Me.TXT_YTDLP.Buttons.Add(ActionButton14) + 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" @@ -1869,19 +1920,19 @@ Namespace Editors ' 'TXT_FFMPEG ' - ActionButton16.BackgroundImage = CType(resources.GetObject("ActionButton16.BackgroundImage"), System.Drawing.Image) - ActionButton16.Name = "Open" - ActionButton16.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton17.BackgroundImage = CType(resources.GetObject("ActionButton17.BackgroundImage"), System.Drawing.Image) - ActionButton17.Name = "Refresh" - ActionButton17.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton17.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" ActionButton18.BackgroundImage = CType(resources.GetObject("ActionButton18.BackgroundImage"), System.Drawing.Image) - ActionButton18.Name = "Clear" - ActionButton18.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_FFMPEG.Buttons.Add(ActionButton16) - Me.TXT_FFMPEG.Buttons.Add(ActionButton17) + 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" @@ -1895,19 +1946,19 @@ Namespace Editors ' 'TXT_CURL ' - ActionButton19.BackgroundImage = CType(resources.GetObject("ActionButton19.BackgroundImage"), System.Drawing.Image) - ActionButton19.Name = "Open" - ActionButton19.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton20.BackgroundImage = CType(resources.GetObject("ActionButton20.BackgroundImage"), System.Drawing.Image) - ActionButton20.Name = "Refresh" - ActionButton20.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton20.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" ActionButton21.BackgroundImage = CType(resources.GetObject("ActionButton21.BackgroundImage"), System.Drawing.Image) - ActionButton21.Name = "Clear" - ActionButton21.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_CURL.Buttons.Add(ActionButton19) - Me.TXT_CURL.Buttons.Add(ActionButton20) + 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" @@ -1921,19 +1972,19 @@ Namespace Editors ' 'TXT_GALLERYDL ' - ActionButton22.BackgroundImage = CType(resources.GetObject("ActionButton22.BackgroundImage"), System.Drawing.Image) - ActionButton22.Name = "Open" - ActionButton22.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton23.BackgroundImage = CType(resources.GetObject("ActionButton23.BackgroundImage"), System.Drawing.Image) - ActionButton23.Name = "Refresh" - ActionButton23.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton23.ToolTipText = "Try to find this program automatically (in SCrawler and/or system environment)" ActionButton24.BackgroundImage = CType(resources.GetObject("ActionButton24.BackgroundImage"), System.Drawing.Image) - ActionButton24.Name = "Clear" - ActionButton24.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_GALLERYDL.Buttons.Add(ActionButton22) - Me.TXT_GALLERYDL.Buttons.Add(ActionButton23) + 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 @@ -1946,14 +1997,14 @@ Namespace Editors ' 'TXT_CMD_ENCODING ' - ActionButton25.BackgroundImage = CType(resources.GetObject("ActionButton25.BackgroundImage"), System.Drawing.Image) - ActionButton25.Name = "Refresh" - ActionButton25.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh - ActionButton26.BackgroundImage = CType(resources.GetObject("ActionButton26.BackgroundImage"), System.Drawing.Image) - ActionButton26.Name = "Clear" - ActionButton26.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_CMD_ENCODING.Buttons.Add(ActionButton25) - Me.TXT_CMD_ENCODING.Buttons.Add(ActionButton26) + 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" @@ -2056,10 +2107,10 @@ Namespace Editors ' 'CMB_STD_OPEN_DBL ' - ActionButton27.BackgroundImage = CType(resources.GetObject("ActionButton27.BackgroundImage"), System.Drawing.Image) - ActionButton27.Name = "ArrowDown" - ActionButton27.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.ArrowDown - Me.CMB_STD_OPEN_DBL.Buttons.Add(ActionButton27) + 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 @@ -2141,10 +2192,10 @@ Namespace Editors ' 'TXT_PRG_TITLE ' - ActionButton28.BackgroundImage = CType(resources.GetObject("ActionButton28.BackgroundImage"), System.Drawing.Image) - ActionButton28.Name = "Clear" - ActionButton28.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_PRG_TITLE.Buttons.Add(ActionButton28) + 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" @@ -2156,10 +2207,10 @@ Namespace Editors ' 'TXT_PRG_DESCR ' - ActionButton29.BackgroundImage = CType(resources.GetObject("ActionButton29.BackgroundImage"), System.Drawing.Image) - ActionButton29.Name = "Clear" - ActionButton29.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_PRG_DESCR.Buttons.Add(ActionButton29) + 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" @@ -2171,14 +2222,14 @@ Namespace Editors ' 'TXT_USER_LIST_IMAGE ' - ActionButton30.BackgroundImage = CType(resources.GetObject("ActionButton30.BackgroundImage"), System.Drawing.Image) - ActionButton30.Name = "Open" - ActionButton30.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open - ActionButton31.BackgroundImage = CType(resources.GetObject("ActionButton31.BackgroundImage"), System.Drawing.Image) - ActionButton31.Name = "Clear" - ActionButton31.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton30) - Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton31) + 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" @@ -2252,10 +2303,10 @@ Namespace Editors ' 'TXT_H_DEF_UserAgent ' - ActionButton32.BackgroundImage = CType(resources.GetObject("ActionButton32.BackgroundImage"), System.Drawing.Image) - ActionButton32.Name = "Clear" - ActionButton32.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_UserAgent.Buttons.Add(ActionButton32) + 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 @@ -2266,10 +2317,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua ' - ActionButton33.BackgroundImage = CType(resources.GetObject("ActionButton33.BackgroundImage"), System.Drawing.Image) - ActionButton33.Name = "Clear" - ActionButton33.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear - Me.TXT_H_DEF_sec_ch_ua.Buttons.Add(ActionButton33) + 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 @@ -2280,10 +2331,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua_full_version_list ' - 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_sec_ch_ua_full_version_list.Buttons.Add(ActionButton34) + 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 @@ -2294,10 +2345,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua_platform ' - 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_platform.Buttons.Add(ActionButton35) + 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 @@ -2308,10 +2359,10 @@ Namespace Editors ' 'TXT_H_DEF_sec_ch_ua_platform_version ' - 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_platform_version.Buttons.Add(ActionButton36) + 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 @@ -2441,8 +2492,10 @@ Namespace Editors TP_FEED_IMG_COUNT.ResumeLayout(False) CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.NUM_FEED_STORE_SESSION_DATA, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_FEED_CENTER_IMAGE, System.ComponentModel.ISupportInitialize).EndInit() + 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() TAB_NOTIFY.ResumeLayout(False) TP_NOTIFY_MAIN.ResumeLayout(False) TP_NOTIFY_MAIN.PerformLayout() @@ -2582,5 +2635,6 @@ Namespace Editors Private WithEvents CH_DOWN_ALL_F6_NOTIFY As CheckBox Private WithEvents CH_DOWN_ALL_NOTIFY As CheckBox Private WithEvents CH_CHANNELS_USERS_READY_MARK As CheckBox + Private WithEvents NUM_FEED_SES_CURR_LOAD_LAST As PersonalUtilities.Forms.Controls.TextBoxExtended End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/GlobalSettingsForm.resx b/SCrawler/Editors/GlobalSettingsForm.resx index 0d2642f..44a620c 100644 --- a/SCrawler/Editors/GlobalSettingsForm.resx +++ b/SCrawler/Editors/GlobalSettingsForm.resx @@ -331,6 +331,39 @@ You can find more detailed information about the missing posts in the form that False + + False + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + + + Try loading the last session of the current day (if it exists) as the current session after restarting SCrawler. +-1 - disabled. +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 @@ -340,7 +373,7 @@ You can find more detailed information about the missing posts in the form that False - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -351,7 +384,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -367,50 +400,15 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP - WQwhyWIyJIUW5NqyPb7oCVtIlhVTwYf8nv7/t2zJagel9KmqKsIACYL9RjI8UHz5zshougZr/AEvbxEP - aZCDBY3VslixaJvX3wzkkDiOwbZtDRGA5vdNAg+TL27qgmt5XkBG/gTdAG7Gt+3PP9oOaEGFCVEC6rp+ - 5g9MfM/c5e4OsEZMZkQEtGL5H2DdZ5JRArDwPA+iKII0TfkC9vroC9j5vq8JTWw3WzWgLMtZGIaa0MR8 - vlAD8PYlSaIJTTiOowY0p0Bc19XEJo6HE59FAPuMzyAINKGJ1XLFZxHALtMrnkBXOIQIIIQ8YvF/KrgB - cMaRN0UdBBkAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 - JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE - QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb - ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb - +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv - qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN - v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA - prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ - qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY - HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 - qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG - VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go - tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX - AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -421,7 +419,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -435,17 +433,17 @@ You can find more detailed information about the missing posts in the form that HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go - tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX - AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP @@ -456,7 +454,7 @@ You can find more detailed information about the missing posts in the form that cMaRN0UdBBkAAAAASUVORK5CYII= - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE @@ -472,12 +470,23 @@ You can find more detailed information about the missing posts in the form that VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP + WQwhyWIyJIUW5NqyPb7oCVtIlhVTwYf8nv7/t2zJagel9KmqKsIACYL9RjI8UHz5zshougZr/AEvbxEP + aZCDBY3VslixaJvX3wzkkDiOwbZtDRGA5vdNAg+TL27qgmt5XkBG/gTdAG7Gt+3PP9oOaEGFCVEC6rp+ + 5g9MfM/c5e4OsEZMZkQEtGL5H2DdZ5JRArDwPA+iKII0TfkC9vroC9j5vq8JTWw3WzWgLMtZGIaa0MR8 + vlAD8PYlSaIJTTiOowY0p0Bc19XEJo6HE59FAPuMzyAINKGJ1XLFZxHALtMrnkBXOIQIIIQ8YvF/KrgB + cMaRN0UdBBkAAAAASUVORK5CYII= @@ -502,6 +511,30 @@ You can find more detailed information about the missing posts in the form that xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 + JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE + QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb + ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb + +eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv + qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN + v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA + prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ + qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY + HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74 + qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG + VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC @@ -510,7 +543,7 @@ You can find more detailed information about the missing posts in the form that False - + iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t 3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL @@ -606,31 +639,12 @@ You can find more detailed information about the missing posts in the form that False - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go - tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX - AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go - tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX - AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP - WQwhyWIyJIUW5NqyPb7oCVtIlhVTwYf8nv7/t2zJagel9KmqKsIACYL9RjI8UHz5zshougZr/AEvbxEP - aZCDBY3VslixaJvX3wzkkDiOwbZtDRGA5vdNAg+TL27qgmt5XkBG/gTdAG7Gt+3PP9oOaEGFCVEC6rp+ - 5g9MfM/c5e4OsEZMZkQEtGL5H2DdZ5JRArDwPA+iKII0TfkC9vroC9j5vq8JTWw3WzWgLMtZGIaa0MR8 - vlAD8PYlSaIJTTiOowY0p0Bc19XEJo6HE59FAPuMzyAINKGJ1XLFZxHALtMrnkBXOIQIIIQ8YvF/KrgB - cMaRN0UdBBkAAAAASUVORK5CYII= + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC @@ -641,15 +655,15 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - False - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go - tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX - AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP + WQwhyWIyJIUW5NqyPb7oCVtIlhVTwYf8nv7/t2zJagel9KmqKsIACYL9RjI8UHz5zshougZr/AEvbxEP + aZCDBY3VslixaJvX3wzkkDiOwbZtDRGA5vdNAg+TL27qgmt5XkBG/gTdAG7Gt+3PP9oOaEGFCVEC6rp+ + 5g9MfM/c5e4OsEZMZkQEtGL5H2DdZ5JRArDwPA+iKII0TfkC9vroC9j5vq8JTWw3WzWgLMtZGIaa0MR8 + vlAD8PYlSaIJTTiOowY0p0Bc19XEJo6HE59FAPuMzyAINKGJ1XLFZxHALtMrnkBXOIQIIIQ8YvF/KrgB + cMaRN0UdBBkAAAAASUVORK5CYII= @@ -660,6 +674,9 @@ You can find more detailed information about the missing posts in the form that AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + False + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -682,6 +699,22 @@ You can find more detailed information about the missing posts in the form that xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go + tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX + AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC diff --git a/SCrawler/Editors/GlobalSettingsForm.vb b/SCrawler/Editors/GlobalSettingsForm.vb index d32ce18..8369f70 100644 --- a/SCrawler/Editors/GlobalSettingsForm.vb +++ b/SCrawler/Editors/GlobalSettingsForm.vb @@ -152,6 +152,7 @@ Namespace Editors CH_FEED_ADD_DATE.Checked = .FeedAddDateToCaption NUM_FEED_STORE_SESSION_DATA.Checked = .FeedStoreSessionsData NUM_FEED_STORE_SESSION_DATA.Value = .FeedStoredSessionsNumber.Value + NUM_FEED_SES_CURR_LOAD_LAST.Value = .FeedCurrentTryLoadLastSession.Value CH_FEED_OPEN_LAST_MODE.Checked = .FeedOpenLastMode CH_FEED_SHOW_FRIENDLY.Checked = .FeedShowFriendlyNames CH_FEED_SHOW_SPEC_MEDIAITEM.Checked = .FeedShowSpecialFeedsMediaItem @@ -340,6 +341,7 @@ Namespace Editors .FeedAddDateToCaption.Value = CH_FEED_ADD_DATE.Checked .FeedStoreSessionsData.Value = NUM_FEED_STORE_SESSION_DATA.Checked .FeedStoredSessionsNumber.Value = NUM_FEED_STORE_SESSION_DATA.Value + .FeedCurrentTryLoadLastSession.Value = NUM_FEED_SES_CURR_LOAD_LAST.Value .FeedOpenLastMode.Value = CH_FEED_OPEN_LAST_MODE.Checked .FeedShowFriendlyNames.Value = CH_FEED_SHOW_FRIENDLY.Checked .FeedShowSpecialFeedsMediaItem.Value = CH_FEED_SHOW_SPEC_MEDIAITEM.Checked @@ -403,6 +405,12 @@ Namespace Editors Private Sub TXT_FEED_COLUMNS_ActionOnValueChanged(sender As Object, e As EventArgs) Handles TXT_FEED_COLUMNS.ActionOnValueChanged TXT_FEED_CENTER_IMAGE.Enabled = TXT_FEED_COLUMNS.Value = 1 End Sub + Private Sub NUM_FEED_SES_CURR_LOAD_LAST_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles NUM_FEED_SES_CURR_LOAD_LAST.ActionOnButtonClick + Select Case e.DefaultButton + Case ADB.Clear : NUM_FEED_SES_CURR_LOAD_LAST.Value = -1 + Case ADB.Refresh : NUM_FEED_SES_CURR_LOAD_LAST.Value = SettingsCLS.FeedCurrentLoadLastSessionDefault + End Select + End Sub Private Sub EnvirPrograms_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_FFMPEG.ActionOnButtonClick, TXT_CURL.ActionOnButtonClick, TXT_YTDLP.ActionOnButtonClick, diff --git a/SCrawler/Editors/SiteEditorForm.vb b/SCrawler/Editors/SiteEditorForm.vb index 93ca302..da467a3 100644 --- a/SCrawler/Editors/SiteEditorForm.vb +++ b/SCrawler/Editors/SiteEditorForm.vb @@ -20,6 +20,7 @@ Namespace Editors Private WithEvents MyDefs As DefaultFormOptions Private WithEvents SpecialButton As Button Private Property Cookies As CookieKeeper + Private ReadOnly CookiesControlsInteraction As List(Of PropertyValueHost) Private CookiesChanged As Boolean = False #Region "Providers" Private Class SavedPostsChecker : Inherits AccountsNameChecker @@ -145,6 +146,7 @@ Namespace Editors InitializeComponent() MyDefs = New DefaultFormOptions(Me, Settings.Design) Host = h + CookiesControlsInteraction = New List(Of PropertyValueHost) If Not Host.Responser Is Nothing Then Cookies = Host.Responser.Cookies.Copy LBL_AUTH = New Label With {.Text = "Authorization", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill} LBL_OTHER = New Label With {.Text = "Other Parameters", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill} @@ -221,6 +223,8 @@ Namespace Editors With prop If .Options.IsAuth = pAuth Then + If .CookieValueExtractorExists Then CookiesControlsInteraction.Add(prop) + If pArr.Length = 2 Then Select Case pAuth Case True @@ -285,6 +289,7 @@ Namespace Editors Private Sub SiteEditorForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed If Host.PropList.Count > 0 Then Host.PropList.ForEach(Sub(p) p.DisposeControl()) If Not SpecialButton Is Nothing Then SpecialButton.Dispose() + CookiesControlsInteraction.Clear() LBL_AUTH.Dispose() LBL_OTHER.Dispose() Host.EndEdit() @@ -378,6 +383,7 @@ Namespace Editors CookiesChanged = True f.GetCollection(Cookies) MyDefs.MyOkCancel.EnableOK = True + If Cookies.ListExists And CookiesControlsInteraction.Count > 0 Then CookiesControlsInteraction.ForEach(Sub(c) c.GetValueFromCookies(Cookies)) End If End Using SetCookieText() diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index d9f7fca..3912a5e 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/PluginsEnvironment/Attributes/Attributes.vb b/SCrawler/PluginsEnvironment/Attributes/Attributes.vb index 8e9737d..d5cc4e3 100644 --- a/SCrawler/PluginsEnvironment/Attributes/Attributes.vb +++ b/SCrawler/PluginsEnvironment/Attributes/Attributes.vb @@ -53,4 +53,11 @@ Namespace Plugin.Attributes IsHidden = _IsHidden End Sub End Class + + Public Class CookieValueExtractorAttribute : Inherits Attribute + Public ReadOnly PropertyName As String + Public Sub New(ByVal _PropertyName As String) + PropertyName = _PropertyName + End Sub + End Class End Namespace \ No newline at end of file diff --git a/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb b/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb index 07bb62c..24795d4 100644 --- a/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/PropertyValueHost.vb @@ -254,6 +254,14 @@ Namespace Plugin.Hosts Return Nothing End If End Function + Friend Sub GetValueFromCookies(ByVal Cookies As PersonalUtilities.Tools.Web.Cookies.CookieKeeper) + Try + Dim v$ = CookieValueExtractor.GetMemberValue(Source, {Name, Cookies}) + If Not v.IsEmptyString Then Control.Text = v + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendToLog, ex, "[PropertyValueHost.GetValueFromCookies]") + End Try + End Sub #End Region #Region "Providers" Friend Property ProviderFieldsChecker As IFormatProvider @@ -278,6 +286,22 @@ Namespace Plugin.Hosts Friend PropertiesCheckingMethod As MethodInfo Private UpdateMethod As MethodInfo Private UpdateMethodArguments As String() + Private _CookieValueExtractor As MethodInfo + Private _CookieValueExtractorExists As Boolean = False + Friend Property CookieValueExtractor As MethodInfo + Get + Return _CookieValueExtractor + End Get + Set(ByVal m As MethodInfo) + _CookieValueExtractor = m + _CookieValueExtractorExists = Not _CookieValueExtractor Is Nothing + End Set + End Property + Friend ReadOnly Property CookieValueExtractorExists As Boolean + Get + Return _CookieValueExtractorExists + End Get + End Property Friend Sub SetUpdateMethod(ByVal m As MethodInfo, ByVal _UpdateMethodArguments As String()) UpdateMethod = m UpdateMethodArguments = _UpdateMethodArguments diff --git a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb index 2de05a0..2517607 100644 --- a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb @@ -312,6 +312,7 @@ Namespace Plugin.Hosts Dim Updaters As New List(Of MemberInfo) Dim Providers As New List(Of MemberInfo) Dim PropCheckers As New List(Of MemberInfo) + Dim CookieValueExtractors As New List(Of MemberInfo) Dim m As MemberInfo For Each m In Members @@ -329,6 +330,8 @@ Namespace Plugin.Hosts Updaters.Add(m) ElseIf .ElementAt(i).GetType Is GetType(PropertiesDataChecker) Then PropCheckers.Add(m) + ElseIf .ElementAt(i).GetType Is GetType(CookieValueExtractorAttribute) Then + CookieValueExtractors.Add(m) End If Next ElseIf m.MemberType = MemberTypes.Property Then @@ -377,6 +380,20 @@ Namespace Plugin.Hosts Next PropCheckers.Clear() End If + If CookieValueExtractors.Count > 0 Then + Dim cve As IEnumerable(Of CookieValueExtractorAttribute) + Dim _cve As CookieValueExtractorAttribute + For Each m In CookieValueExtractors + cve = m.GetCustomAttributes(Of CookieValueExtractorAttribute)() + If cve.ListExists Then + For Each _cve In cve + i = PropList.FindIndex(Function(p) p.Name = _cve.PropertyName) + If i >= 0 Then PropList(i).CookieValueExtractor = m + Next + End If + Next + CookieValueExtractors.Clear() + End If PropList.ForEach(Sub(p) p.SetDependents(PropList)) End If diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index ed62480..11cc414 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -30,6 +30,7 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Friend Const CollectionsFolderName As String = "Collections" Private Const PermanentCacheSnapshotsPath As String = "_CacheSnapshots\" Friend Const DefaultCmdEncoding As Integer = BatchExecutor.UnicodeEncoding + Friend Const FeedCurrentLoadLastSessionDefault As Integer = 60 * 6 #End Region #Region "Constants: headers" Friend Const HEADER_DEF_sec_ch_ua As String = "sec-ch-ua" @@ -396,6 +397,7 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable FeedAddDateToCaption = New XMLValue(Of Boolean)("AddDateToCaption", True, MyXML, n) FeedStoreSessionsData = New XMLValue(Of Boolean)("StoreSessionsData", True, MyXML, n) FeedStoredSessionsNumber = New XMLValue(Of Integer)("StoredSessionsNumber", 20, MyXML, n) + FeedCurrentTryLoadLastSession = New XMLValue(Of Integer)("CurrentTryLoadLastSession", FeedCurrentLoadLastSessionDefault, MyXML, n) FeedOpenLastMode = New XMLValue(Of Boolean)("OpenLastMode", False, MyXML, n) FeedLastModeSubscriptions = New XMLValue(Of Boolean)("LastModeSubscriptions", False, MyXML, n) FeedShowFriendlyNames = New XMLValue(Of Boolean)("ShowFriendlyNames", True, MyXML, n) @@ -1250,6 +1252,7 @@ Friend Class SettingsCLS : Implements IDownloaderSettings, IDisposable Friend ReadOnly Property FeedAddDateToCaption As XMLValue(Of Boolean) Friend ReadOnly Property FeedStoreSessionsData As XMLValue(Of Boolean) Friend ReadOnly Property FeedStoredSessionsNumber As XMLValue(Of Integer) + Friend ReadOnly Property FeedCurrentTryLoadLastSession As XMLValue(Of Integer) Friend ReadOnly Property FeedOpenLastMode As XMLValue(Of Boolean) Friend ReadOnly Property FeedLastModeSubscriptions As XMLValue(Of Boolean) Friend ReadOnly Property FeedShowFriendlyNames As XMLValue(Of Boolean) diff --git a/SCrawler/UserSearchForm.vb b/SCrawler/UserSearchForm.vb index 6104785..ae80e63 100644 --- a/SCrawler/UserSearchForm.vb +++ b/SCrawler/UserSearchForm.vb @@ -109,6 +109,7 @@ Friend Class UserSearchForm Dim __urlFound As Boolean = False Dim _p_url As Predicate(Of IUserData) = Function(u) __urlFound AndAlso ((u.Site = s.SiteName Or u.HOST.Key = s.HostKey) And u.Name.ToLower = s.UserName.ToLower) Dim _p_descr As Predicate(Of IUserData) = Function(u) __descr AndAlso Not u.Description.IsEmptyString AndAlso u.Description.ToLower.Contains(t) + Dim _p_name_friendly As Predicate(Of IUserData) = Function(u) Not u.FriendlyName.IsEmptyString AndAlso u.FriendlyName.ToLower.Contains(t) Dim _p_labels_p As Predicate(Of String) = Function(l) l.ToLower.Contains(t) Dim _p_labels As Predicate(Of IUserData) = Function(u) __lbl AndAlso u.Labels.ListExists AndAlso u.Labels.Exists(_p_labels_p) Dim _addValue As Action(Of IUserData, SearchResult.Modes, Predicate(Of IUserData)) = Sub(u, m, p) If p.Invoke(u) Then Results.ListAddValue(New SearchResult(u, m), RLP) @@ -122,13 +123,14 @@ Friend Class UserSearchForm End If For Each user As IUserData In .Users - If Not __isUrl AndAlso __name AndAlso user.Name.ToLower.Contains(t) Then Results.ListAddValue(New SearchResult(user, SearchResult.Modes.Name), RLP) + If Not __isUrl AndAlso __name AndAlso (user.Name.ToLower.Contains(t) OrElse _p_name_friendly.Invoke(user)) Then Results.ListAddValue(New SearchResult(user, SearchResult.Modes.Name), RLP) If user.IsCollection Then With DirectCast(user, UserDataBind) If .Count > 0 Then For i = 0 To .Count - 1 With .Item(i) - If Not __isUrl AndAlso __name AndAlso .Self.Name.ToLower.Contains(t) Then Results.ListAddValue(New SearchResult(.Self, SearchResult.Modes.Name), RLP) + If Not __isUrl AndAlso __name AndAlso (.Self.Name.ToLower.Contains(t) OrElse _p_name_friendly.Invoke(.Self)) Then _ + Results.ListAddValue(New SearchResult(.Self, SearchResult.Modes.Name), RLP) _addValue(.Self, SearchResult.Modes.URL, _p_url) _addValue(.Self, SearchResult.Modes.Description, _p_descr) _addValue(.Self, SearchResult.Modes.Label, _p_labels)