From eb28255de3b968765e1ffe9c99b6e08acbe837e2 Mon Sep 17 00:00:00 2001 From: Andy <88590076+AAndyProgram@users.noreply.github.com> Date: Sat, 17 Sep 2022 19:59:55 +0300 Subject: [PATCH] 2022.9.17.0 Extended filters by date Added download by dates for multiple users Changed validation of dates ranges in UserDataBase Add user filters by dates Add disabling site downloading Fixed Twitter date validator --- Changelog.md | 16 +++ .../My Project/AssemblyInfo.vb | 4 +- SCrawler.Plugin.LPSG/UserData.vb | 3 +- .../My Project/AssemblyInfo.vb | 4 +- SCrawler.Plugin.XVIDEOS/UserData.vb | 3 +- .../Interfaces/IPluginContentProvider.vb | 3 +- .../My Project/AssemblyInfo.vb | 4 +- SCrawler/API/Base/UserDataBase.vb | 106 +++++++++++----- SCrawler/API/Instagram/UserData.vb | 5 +- SCrawler/API/Reddit/UserData.vb | 5 +- SCrawler/API/Redgifs/UserData.vb | 5 +- SCrawler/API/Twitter/UserData.vb | 5 +- SCrawler/Download/TDownloader.vb | 15 ++- SCrawler/Editors/SiteEditorForm.Designer.vb | 82 ++++++++----- SCrawler/Editors/SiteEditorForm.resx | 6 +- SCrawler/Editors/SiteEditorForm.vb | 12 +- SCrawler/FDatePickerForm.Designer.vb | 76 +++++++++--- SCrawler/FDatePickerForm.resx | 3 + SCrawler/FDatePickerForm.vb | 23 ++-- SCrawler/MainFrame.Designer.vb | 32 +++-- SCrawler/MainFrame.resx | 58 ++++----- SCrawler/MainFrame.vb | 113 +++++++++++------- SCrawler/MainMod.vb | 5 + SCrawler/My Project/AssemblyInfo.vb | 4 +- .../PluginsEnvironment/Hosts/SettingsHost.vb | 15 ++- .../PluginsEnvironment/Hosts/UserDataHost.vb | 3 +- SCrawler/SettingsCLS.vb | 31 +++-- 27 files changed, 425 insertions(+), 216 deletions(-) diff --git a/Changelog.md b/Changelog.md index a88fca2..8e202d6 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,19 @@ +# 2022.9.17.0 + +*2022-09-17* + +- Added + - Added two date filters to filter users (in range, not in range) + - (Request #71) Download data for a specific date range + - The ability to disable site downloading (in the site settings form) +- Updated + - Plugins +- Fixed + - (Issue #71) ```Download data to the date``` doesn't work for Twitter + - Download data for a specific date range doesn't work for multiple users + - Incorrect feed sorting algorithm + - Minor bugs + # 2022.9.16.0 *2022-09-16* diff --git a/SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb b/SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb index 06b36f3..43bdb8f 100644 --- a/SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb +++ b/SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.Plugin.LPSG/UserData.vb b/SCrawler.Plugin.LPSG/UserData.vb index 6aa6d84..bd63168 100644 --- a/SCrawler.Plugin.LPSG/UserData.vb +++ b/SCrawler.Plugin.LPSG/UserData.vb @@ -38,7 +38,8 @@ Public Class UserData : Implements IPluginContentProvider Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder Public Property DataPath As String Implements IPluginContentProvider.DataPath Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit - Public Property PostsDateLimit As Date? Implements IPluginContentProvider.PostsDateLimit + Public Property DownloadDateFrom As Date? Implements IPluginContentProvider.DownloadDateFrom + Public Property DownloadDateTo As Date? Implements IPluginContentProvider.DownloadDateTo #End Region #Region "Interface exchange options" Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet diff --git a/SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb b/SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb index 557a7a3..8cbd99a 100644 --- a/SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb +++ b/SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.Plugin.XVIDEOS/UserData.vb b/SCrawler.Plugin.XVIDEOS/UserData.vb index 3555653..49c5ad6 100644 --- a/SCrawler.Plugin.XVIDEOS/UserData.vb +++ b/SCrawler.Plugin.XVIDEOS/UserData.vb @@ -37,7 +37,8 @@ Public Class UserData : Implements IPluginContentProvider Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder Public Property DataPath As String Implements IPluginContentProvider.DataPath Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit - Public Property PostsDateLimit As Date? Implements IPluginContentProvider.PostsDateLimit + Public Property DownloadDateFrom As Date? Implements IPluginContentProvider.DownloadDateFrom + Public Property DownloadDateTo As Date? Implements IPluginContentProvider.DownloadDateTo #End Region #Region "Interface exchange options" Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet diff --git a/SCrawler.PluginProvider/Interfaces/IPluginContentProvider.vb b/SCrawler.PluginProvider/Interfaces/IPluginContentProvider.vb index 6d9bfdb..f14e54b 100644 --- a/SCrawler.PluginProvider/Interfaces/IPluginContentProvider.vb +++ b/SCrawler.PluginProvider/Interfaces/IPluginContentProvider.vb @@ -26,7 +26,8 @@ Namespace Plugin Property SeparateVideoFolder As Boolean Property DataPath As String Property PostsNumberLimit As Integer? - Property PostsDateLimit As Date? + Property DownloadDateFrom As Date? + Property DownloadDateTo As Date? Function ExchangeOptionsGet() As Object Sub ExchangeOptionsSet(ByVal Obj As Object) Sub XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String))) diff --git a/SCrawler.PluginProvider/My Project/AssemblyInfo.vb b/SCrawler.PluginProvider/My Project/AssemblyInfo.vb index 0c5f974..f70cc41 100644 --- a/SCrawler.PluginProvider/My Project/AssemblyInfo.vb +++ b/SCrawler.PluginProvider/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/API/Base/UserDataBase.vb b/SCrawler/API/Base/UserDataBase.vb index f6a9ebb..6cf0f85 100644 --- a/SCrawler/API/Base/UserDataBase.vb +++ b/SCrawler/API/Base/UserDataBase.vb @@ -550,23 +550,31 @@ BlockNullPicture: End Function Friend Overridable ReadOnly Property FitToAddParams As Boolean Implements IUserData.FitToAddParams Get - If Settings.LastUpdatedDate.HasValue AndAlso LastUpdated.HasValue AndAlso - LastUpdated.Value.Date > Settings.LastUpdatedDate.Value.Date Then Return False - If Not Settings.Labels.ExcludedIgnore AndAlso Settings.Labels.Excluded.ValuesList.ListContains(Labels) Then Return False - If Settings.SelectedSites.Count = 0 OrElse Settings.SelectedSites.Contains(Site) Then - Select Case Settings.ShowingMode.Value - Case ShowingModes.Regular : Return Not Temporary And Not Favorite - Case ShowingModes.Temporary : Return Temporary - Case ShowingModes.Favorite : Return Favorite - Case ShowingModes.Deleted : Return Not UserExists - Case ShowingModes.Suspended : Return UserSuspended - Case ShowingModes.Labels : Return Settings.Labels.Current.ValuesList.ListContains(Labels) - Case ShowingModes.NoLabels : Return Labels.Count = 0 - Case Else : Return True - End Select - Else - Return False - End If + With Settings + If LastUpdated.HasValue And Not .ViewDateMode.Value = ShowingDates.Off Then + Dim f As Date = If(.ViewDateFrom.HasValue, .ViewDateFrom.Value.Date, Date.MinValue.Date) + Dim t As Date = If(.ViewDateTo.HasValue, .ViewDateTo.Value.Date, Date.MaxValue.Date) + Select Case DirectCast(.ViewMode.Value, ShowingDates) + Case ShowingDates.In : If Not LastUpdated.Value.ValueBetween(f, t) Then Return False + Case ShowingDates.Not : If LastUpdated.Value.ValueBetween(f, t) Then Return False + End Select + End If + If Not .Labels.ExcludedIgnore AndAlso .Labels.Excluded.ValuesList.ListContains(Labels) Then Return False + If .SelectedSites.Count = 0 OrElse .SelectedSites.Contains(Site) Then + Select Case .ShowingMode.Value + Case ShowingModes.Regular : Return Not Temporary And Not Favorite + Case ShowingModes.Temporary : Return Temporary + Case ShowingModes.Favorite : Return Favorite + Case ShowingModes.Deleted : Return Not UserExists + Case ShowingModes.Suspended : Return UserSuspended + Case ShowingModes.Labels : Return Settings.Labels.Current.ValuesList.ListContains(Labels) + Case ShowingModes.NoLabels : Return Labels.Count = 0 + Case Else : Return True + End Select + Else + Return False + End If + End With End Get End Property Friend Function GetLVIGroup(ByVal Destination As ListView) As ListViewGroup Implements IUserData.GetLVIGroup @@ -792,9 +800,52 @@ BlockNullPicture: GlobalOpenPath(MyFile.CutPath) End Sub #End Region -#Region "Download functions and options" +#Region "Download limits" + Protected Enum DateResult : [Continue] : [Skip] : [Exit] : End Enum Friend Overridable Property DownloadTopCount As Integer? = Nothing Implements IUserData.DownloadTopCount, IPluginContentProvider.PostsNumberLimit - Friend Overridable Property DownloadToDate As Date? = Nothing Implements IUserData.DownloadToDate, IPluginContentProvider.PostsDateLimit + Private _DownloadDateFrom As Date? = Nothing + Private _DownloadDateFromF As Date + Friend Overridable Property DownloadDateFrom As Date? Implements IUserData.DownloadDateFrom, IPluginContentProvider.DownloadDateFrom + Get + Return _DownloadDateFrom + End Get + Set(ByVal d As Date?) + _DownloadDateFrom = d + If _DownloadDateFrom.HasValue Then _DownloadDateFromF = _DownloadDateFrom.Value.Date Else _DownloadDateFromF = Date.MinValue.Date + End Set + End Property + Private _DownloadDateTo As Date? = Nothing + Private _DownloadDateToF As Date + Friend Overridable Property DownloadDateTo As Date? Implements IUserData.DownloadDateTo, IPluginContentProvider.DownloadDateTo + Get + Return _DownloadDateTo + End Get + Set(ByVal d As Date?) + _DownloadDateTo = d + If _DownloadDateTo.HasValue Then _DownloadDateToF = _DownloadDateTo.Value Else _DownloadDateToF = Date.MaxValue.Date + End Set + End Property + Protected Function CheckDatesLimit(ByVal DateString As String, ByVal DateProvider As IFormatProvider) As DateResult + Try + If (DownloadDateFrom.HasValue Or DownloadDateTo.HasValue) And Not DateString.IsEmptyString Then + Dim td As Date? = AConvert(Of Date)(DateString, DateProvider, Nothing) + If td.HasValue Then + If td.Value.ValueBetween(_DownloadDateFromF, _DownloadDateToF) Then + Return DateResult.Continue + ElseIf td.Value > _DownloadDateToF Then + Return DateResult.Skip + Else + Return DateResult.Exit + End If + End If + End If + Return DateResult.Continue + Catch ex As Exception + Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[UserDataBase.CheckDatesLimit({DateString})]", DateResult.Continue) + End Try + End Function +#End Region +#Region "Download functions and options" Protected Responser As Response Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData Dim Canceled As Boolean = False @@ -883,21 +934,11 @@ BlockNullPicture: If Not Canceled Then _DataParsed = True _ContentNew.Clear() DownloadTopCount = Nothing - DownloadToDate = Nothing + DownloadDateFrom = Nothing + DownloadDateTo = Nothing DownloadMissingOnly = False End Try End Sub - Protected Function CheckDatesLimit(ByVal DateString As String, ByVal DateProvider As IFormatProvider) As Boolean - Try - If DownloadToDate.HasValue And Not DateString.IsEmptyString Then - Dim td As Date? = AConvert(Of Date)(DateString, DateProvider, Nothing) - If td.HasValue Then Return td.Value < DownloadToDate.Value - End If - Return True - Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[UserDataBase.CheckDatesLimit({DateString})]", True) - End Try - End Function Protected Sub UpdateDataFiles() If Not User.File.IsEmptyString Then MyFileData = User.File @@ -1360,7 +1401,8 @@ BlockNullPicture: Sub OpenFolder() ReadOnly Property Self As IUserData Property DownloadTopCount As Integer? - Property DownloadToDate As Date? + Property DownloadDateFrom As Date? + Property DownloadDateTo As Date? Sub SetEnvironment(ByRef h As SettingsHost, ByVal u As UserInfo, ByVal _LoadUserInformation As Boolean, Optional ByVal AttachUserInfo As Boolean = True) ReadOnly Property Disposed As Boolean diff --git a/SCrawler/API/Instagram/UserData.vb b/SCrawler/API/Instagram/UserData.vb index 42cd3f0..0bdddbe 100644 --- a/SCrawler/API/Instagram/UserData.vb +++ b/SCrawler/API/Instagram/UserData.vb @@ -329,7 +329,10 @@ Namespace API.Instagram If IsSavedPosts Then _SavedPostsIDs.Add(PostID) Else - If Not CheckDatesLimit(PostDate, DateProvider) And Not Pinned Then Throw New ExitException(_DownloadComplete) + Select Case CheckDatesLimit(PostDate, DateProvider) + Case DateResult.Skip : Continue For + Case DateResult.Exit : If Not Pinned Then Throw New ExitException(_DownloadComplete) + End Select ObtainMedia(node, PostID, PostDate, SpecFolder) End If Next diff --git a/SCrawler/API/Reddit/UserData.vb b/SCrawler/API/Reddit/UserData.vb index 50470dc..50ed61c 100644 --- a/SCrawler/API/Reddit/UserData.vb +++ b/SCrawler/API/Reddit/UserData.vb @@ -230,7 +230,10 @@ Namespace API.Reddit Continue For End If If nn.Contains("created") Then PostDate = nn("created").Value Else PostDate = String.Empty - If DownloadToDate.HasValue AndAlso Not CheckDatesLimit(PostDate, DateTrueProvider(IsChannel)) Then Exit Sub + Select Case CheckDatesLimit(PostDate, DateTrueProvider(IsChannel)) + Case DateResult.Skip : Continue For + Case DateResult.Exit : Exit Sub + End Select _ItemsBefore = _TempMediaList.Count added = True diff --git a/SCrawler/API/Redgifs/UserData.vb b/SCrawler/API/Redgifs/UserData.vb index 03c26e8..a447eaa 100644 --- a/SCrawler/API/Redgifs/UserData.vb +++ b/SCrawler/API/Redgifs/UserData.vb @@ -37,7 +37,10 @@ Namespace API.RedGifs pTotal = j.Value("pages").FromXML(Of Integer)(0) For Each g As EContainer In j("gifs") postDate = g.Value("createDate") - If Not CheckDatesLimit(postDate, DateProvider) Then Exit Sub + Select Case CheckDatesLimit(postDate, DateProvider) + Case DateResult.Skip : Continue For + Case DateResult.Exit : Exit Sub + End Select postID = g.Value("id") If Not _TempPostsList.Contains(postID) Then _TempPostsList.Add(postID) Else Exit For ObtainMedia(g, postID, postDate) diff --git a/SCrawler/API/Twitter/UserData.vb b/SCrawler/API/Twitter/UserData.vb index 54ceda7..d5db18d 100644 --- a/SCrawler/API/Twitter/UserData.vb +++ b/SCrawler/API/Twitter/UserData.vb @@ -86,7 +86,10 @@ Namespace API.Twitter 'Date Pattern: 'Sat Jan 01 01:10:15 +0000 2000 If nn.Contains("created_at") Then PostDate = nn("created_at").Value Else PostDate = String.Empty - If Not CheckDatesLimit(PostDate, Declarations.DateProvider) Then Exit Sub + Select Case CheckDatesLimit(PostDate, Declarations.DateProvider) + Case DateResult.Skip : Continue For + Case DateResult.Exit : Exit Sub + End Select If Not _TempPostsList.Contains(PostID) Then NewPostDetected = True diff --git a/SCrawler/Download/TDownloader.vb b/SCrawler/Download/TDownloader.vb index fc6e090..9e7f57b 100644 --- a/SCrawler/Download/TDownloader.vb +++ b/SCrawler/Download/TDownloader.vb @@ -35,14 +35,13 @@ Namespace DownloadObjects Me.Session = Session End Sub Private Function CompareTo(ByVal Other As UserMediaD) As Integer Implements IComparable(Of UserMediaD).CompareTo - 'Return [Date].Ticks.CompareTo(Other.Date.Ticks) * -1 - Return GetCompareValue(Me).CompareTo(GetCompareValue(Other)) * -1 - End Function - Private Function GetCompareValue(ByVal m As UserMediaD) As Double - Dim v# = m.Session * 10000 - If Not m.User Is Nothing Then v += m.User.GetHashCode - 'v += m.[Date].Ticks - Return v + If Not Session = Other.Session Then + Return Session.CompareTo(Other.Session) * -1 + ElseIf Not If(User?.GetHashCode, 0) = If(Other.User?.GetHashCode, 0) Then + Return If(User?.GetHashCode, 0).CompareTo(If(Other.User?.GetHashCode, 0)) + Else + Return [Date].Ticks.CompareTo(Other.Date.Ticks) * -1 + End If End Function Private Overloads Function Equals(ByVal Other As UserMediaD) As Boolean Implements IEquatable(Of UserMediaD).Equals Return Data.File = Other.Data.File diff --git a/SCrawler/Editors/SiteEditorForm.Designer.vb b/SCrawler/Editors/SiteEditorForm.Designer.vb index 2cc0ec4..2eeec22 100644 --- a/SCrawler/Editors/SiteEditorForm.Designer.vb +++ b/SCrawler/Editors/SiteEditorForm.Designer.vb @@ -15,6 +15,7 @@ Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() + Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer 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(SiteEditorForm)) Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() @@ -22,7 +23,6 @@ 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 CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer Me.TP_MAIN = New System.Windows.Forms.TableLayoutPanel() Me.TXT_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_COOKIES = New PersonalUtilities.Forms.Controls.TextBoxExtended() @@ -30,34 +30,53 @@ Me.TXT_PATH_SAVED_POSTS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.CH_GET_USER_MEDIA_ONLY = New System.Windows.Forms.CheckBox() Me.TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) + Me.CH_DOWNLOAD_SITE_DATA = New System.Windows.Forms.CheckBox() CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() + CONTAINER_MAIN.ContentPanel.SuspendLayout() + CONTAINER_MAIN.SuspendLayout() Me.TP_MAIN.SuspendLayout() CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_PATH_SAVED_POSTS, System.ComponentModel.ISupportInitialize).BeginInit() - CONTAINER_MAIN.ContentPanel.SuspendLayout() - CONTAINER_MAIN.SuspendLayout() Me.SuspendLayout() ' + 'CONTAINER_MAIN + ' + ' + 'CONTAINER_MAIN.ContentPanel + ' + CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TP_MAIN) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(544, 218) + CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + CONTAINER_MAIN.LeftToolStripPanelVisible = False + CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) + CONTAINER_MAIN.Name = "CONTAINER_MAIN" + CONTAINER_MAIN.RightToolStripPanelVisible = False + CONTAINER_MAIN.Size = New System.Drawing.Size(544, 243) + CONTAINER_MAIN.TabIndex = 0 + CONTAINER_MAIN.TopToolStripPanelVisible = False + ' 'TP_MAIN ' Me.TP_MAIN.ColumnCount = 1 Me.TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) Me.TP_MAIN.Controls.Add(Me.TXT_PATH, 0, 0) Me.TP_MAIN.Controls.Add(Me.TXT_COOKIES, 0, 2) - Me.TP_MAIN.Controls.Add(Me.TP_SITE_PROPS, 0, 4) + Me.TP_MAIN.Controls.Add(Me.TP_SITE_PROPS, 0, 5) Me.TP_MAIN.Controls.Add(Me.TXT_PATH_SAVED_POSTS, 0, 1) - Me.TP_MAIN.Controls.Add(Me.CH_GET_USER_MEDIA_ONLY, 0, 3) + Me.TP_MAIN.Controls.Add(Me.CH_GET_USER_MEDIA_ONLY, 0, 4) + Me.TP_MAIN.Controls.Add(Me.CH_DOWNLOAD_SITE_DATA, 0, 3) Me.TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill Me.TP_MAIN.Location = New System.Drawing.Point(0, 0) Me.TP_MAIN.Name = "TP_MAIN" - Me.TP_MAIN.RowCount = 5 + Me.TP_MAIN.RowCount = 6 Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) + Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.TP_MAIN.Size = New System.Drawing.Size(544, 219) + Me.TP_MAIN.Size = New System.Drawing.Size(544, 218) Me.TP_MAIN.TabIndex = 0 ' 'TXT_PATH @@ -101,15 +120,15 @@ Me.TP_SITE_PROPS.ColumnCount = 1 Me.TP_SITE_PROPS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) Me.TP_SITE_PROPS.Dock = System.Windows.Forms.DockStyle.Fill - Me.TP_SITE_PROPS.Location = New System.Drawing.Point(3, 112) + Me.TP_SITE_PROPS.Location = New System.Drawing.Point(3, 137) Me.TP_SITE_PROPS.Name = "TP_SITE_PROPS" Me.TP_SITE_PROPS.RowCount = 4 Me.TP_SITE_PROPS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) Me.TP_SITE_PROPS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) Me.TP_SITE_PROPS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!)) Me.TP_SITE_PROPS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) - Me.TP_SITE_PROPS.Size = New System.Drawing.Size(538, 104) - Me.TP_SITE_PROPS.TabIndex = 4 + Me.TP_SITE_PROPS.Size = New System.Drawing.Size(538, 78) + Me.TP_SITE_PROPS.TabIndex = 5 ' 'TXT_PATH_SAVED_POSTS ' @@ -130,54 +149,52 @@ ' Me.CH_GET_USER_MEDIA_ONLY.AutoSize = True Me.CH_GET_USER_MEDIA_ONLY.Dock = System.Windows.Forms.DockStyle.Fill - Me.CH_GET_USER_MEDIA_ONLY.Location = New System.Drawing.Point(3, 87) + Me.CH_GET_USER_MEDIA_ONLY.Location = New System.Drawing.Point(3, 112) Me.CH_GET_USER_MEDIA_ONLY.Name = "CH_GET_USER_MEDIA_ONLY" Me.CH_GET_USER_MEDIA_ONLY.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0) Me.CH_GET_USER_MEDIA_ONLY.Size = New System.Drawing.Size(538, 19) - Me.CH_GET_USER_MEDIA_ONLY.TabIndex = 3 + Me.CH_GET_USER_MEDIA_ONLY.TabIndex = 4 Me.CH_GET_USER_MEDIA_ONLY.Text = "Get user media only" Me.CH_GET_USER_MEDIA_ONLY.UseVisualStyleBackColor = True ' - 'CONTAINER_MAIN + 'CH_DOWNLOAD_SITE_DATA ' - ' - 'CONTAINER_MAIN.ContentPanel - ' - CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TP_MAIN) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(544, 219) - CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill - CONTAINER_MAIN.LeftToolStripPanelVisible = False - CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) - CONTAINER_MAIN.Name = "CONTAINER_MAIN" - CONTAINER_MAIN.RightToolStripPanelVisible = False - CONTAINER_MAIN.Size = New System.Drawing.Size(544, 219) - CONTAINER_MAIN.TabIndex = 0 - CONTAINER_MAIN.TopToolStripPanelVisible = False + Me.CH_DOWNLOAD_SITE_DATA.AutoSize = True + Me.CH_DOWNLOAD_SITE_DATA.Dock = System.Windows.Forms.DockStyle.Fill + Me.CH_DOWNLOAD_SITE_DATA.Location = New System.Drawing.Point(3, 87) + Me.CH_DOWNLOAD_SITE_DATA.Name = "CH_DOWNLOAD_SITE_DATA" + Me.CH_DOWNLOAD_SITE_DATA.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0) + Me.CH_DOWNLOAD_SITE_DATA.Size = New System.Drawing.Size(538, 19) + Me.CH_DOWNLOAD_SITE_DATA.TabIndex = 3 + Me.CH_DOWNLOAD_SITE_DATA.Text = "Download site data" + Me.TT_MAIN.SetToolTip(Me.CH_DOWNLOAD_SITE_DATA, "If disabled, this site's data will not be downloaded." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "You can disable downloadin" & + "g data from the site if you need it.") + Me.CH_DOWNLOAD_SITE_DATA.UseVisualStyleBackColor = True ' 'SiteEditorForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(544, 219) + Me.ClientSize = New System.Drawing.Size(544, 243) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.KeyPreview = True Me.MaximizeBox = False - Me.MaximumSize = New System.Drawing.Size(560, 258) + Me.MaximumSize = New System.Drawing.Size(560, 282) Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(560, 258) + Me.MinimumSize = New System.Drawing.Size(560, 282) Me.Name = "SiteEditorForm" Me.ShowInTaskbar = False Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide Me.Text = "Site" + CONTAINER_MAIN.ContentPanel.ResumeLayout(False) + CONTAINER_MAIN.ResumeLayout(False) + CONTAINER_MAIN.PerformLayout() Me.TP_MAIN.ResumeLayout(False) Me.TP_MAIN.PerformLayout() CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_PATH_SAVED_POSTS, System.ComponentModel.ISupportInitialize).EndInit() - CONTAINER_MAIN.ContentPanel.ResumeLayout(False) - CONTAINER_MAIN.ResumeLayout(False) - CONTAINER_MAIN.PerformLayout() Me.ResumeLayout(False) End Sub @@ -188,5 +205,6 @@ Private WithEvents TP_SITE_PROPS As SiteDefaults Private WithEvents CH_GET_USER_MEDIA_ONLY As CheckBox Private WithEvents TT_MAIN As ToolTip + Private WithEvents CH_DOWNLOAD_SITE_DATA As CheckBox End Class End Namespace \ No newline at end of file diff --git a/SCrawler/Editors/SiteEditorForm.resx b/SCrawler/Editors/SiteEditorForm.resx index 817b831..e2d09b7 100644 --- a/SCrawler/Editors/SiteEditorForm.resx +++ b/SCrawler/Editors/SiteEditorForm.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + False + @@ -222,9 +225,6 @@ AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC - - False - 17, 17 diff --git a/SCrawler/Editors/SiteEditorForm.vb b/SCrawler/Editors/SiteEditorForm.vb index 25627f4..dcc330e 100644 --- a/SCrawler/Editors/SiteEditorForm.vb +++ b/SCrawler/Editors/SiteEditorForm.vb @@ -11,6 +11,7 @@ Imports PersonalUtilities.Forms.Controls Imports PersonalUtilities.Forms.Controls.Base Imports PersonalUtilities.Tools.WEB Imports CookieControl = PersonalUtilities.Tools.WEB.CookieListForm.CookieControl +Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons Imports SCrawler.Plugin Imports SCrawler.Plugin.Hosts Namespace Editors @@ -63,7 +64,8 @@ Namespace Editors TXT_PATH.Text = .Path(False) TXT_PATH_SAVED_POSTS.Text = .SavedPostsPath(False) - CH_GET_USER_MEDIA_ONLY.Checked = .GetUserMediaOnly.Value + CH_DOWNLOAD_SITE_DATA.Checked = .DownloadSiteData + CH_GET_USER_MEDIA_ONLY.Checked = .GetUserMediaOnly SiteDefaultsFunctions.SetChecker(TP_SITE_PROPS, Host) @@ -131,6 +133,7 @@ Namespace Editors TXT_PATH.CaptionWidth = offset TXT_PATH_SAVED_POSTS.CaptionWidth = offset TXT_COOKIES.CaptionWidth = offset + CH_DOWNLOAD_SITE_DATA.Padding = New PaddingE(CH_DOWNLOAD_SITE_DATA.Padding) With {.Left = offset} CH_GET_USER_MEDIA_ONLY.Padding = New PaddingE(CH_GET_USER_MEDIA_ONLY.Padding) With {.Left = offset} If c > 0 Or Not Host.IsMyClass Then Dim ss As New Size(Size.Width, Size.Height + h + c) @@ -183,6 +186,7 @@ Namespace Editors SiteDefaultsFunctions.SetPropByChecker(TP_SITE_PROPS, Host) If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text .SavedPostsPath = TXT_PATH_SAVED_POSTS.Text + .DownloadSiteData.Value = CH_DOWNLOAD_SITE_DATA.Checked .GetUserMediaOnly.Value = CH_GET_USER_MEDIA_ONLY.Checked If .PropList.Count > 0 Then .PropList.ForEach(Sub(p) If Not p.Options Is Nothing Then p.UpdateValueByControl()) @@ -203,14 +207,14 @@ Namespace Editors ChangePath(Sender, Host.SavedPostsPath(False), TXT_PATH_SAVED_POSTS) End Sub Private Sub ChangePath(ByVal Sender As ActionButton, ByVal PathValue As SFile, ByRef CNT As TextBoxExtended) - If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then + If Sender.DefaultButton = ADB.Open Then Dim f As SFile = SFile.SelectPath(PathValue) If Not f.IsEmptyString Then CNT.Text = f End If End Sub Private Sub TXT_COOKIES_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_COOKIES.ActionOnButtonClick Select Case Sender.DefaultButton - Case ActionButton.DefaultButtons.Edit + Case ADB.Edit If Not Host.Responser Is Nothing Then Using f As New CookieListForm(Host.Responser) With { .MyDesignXML = Settings.Design, @@ -220,7 +224,7 @@ Namespace Editors End Using SetCookieText() End If - Case ActionButton.DefaultButtons.Clear + Case ADB.Clear If Not Host.Responser Is Nothing Then With Host.Responser If Not .Cookies Is Nothing Then .Cookies.Dispose() diff --git a/SCrawler/FDatePickerForm.Designer.vb b/SCrawler/FDatePickerForm.Designer.vb index 7b89d97..1e94946 100644 --- a/SCrawler/FDatePickerForm.Designer.vb +++ b/SCrawler/FDatePickerForm.Designer.vb @@ -22,10 +22,16 @@ Partial Friend Class FDatePickerForm : Inherits System.Windows.Forms.Form Private Sub InitializeComponent() Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer - Me.DT = New System.Windows.Forms.DateTimePicker() + Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel + Me.DT_FROM = New PersonalUtilities.Forms.Controls.TextBoxExtended() + Me.DT_TO = New PersonalUtilities.Forms.Controls.TextBoxExtended() CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() + TP_MAIN = New System.Windows.Forms.TableLayoutPanel() CONTAINER_MAIN.ContentPanel.SuspendLayout() CONTAINER_MAIN.SuspendLayout() + TP_MAIN.SuspendLayout() + CType(Me.DT_FROM, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.DT_TO, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'CONTAINER_MAIN @@ -33,38 +39,73 @@ Partial Friend Class FDatePickerForm : Inherits System.Windows.Forms.Form ' 'CONTAINER_MAIN.ContentPanel ' - CONTAINER_MAIN.ContentPanel.Controls.Add(Me.DT) - CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(209, 47) + CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) + CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(395, 28) CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill CONTAINER_MAIN.LeftToolStripPanelVisible = False CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) CONTAINER_MAIN.Name = "CONTAINER_MAIN" CONTAINER_MAIN.RightToolStripPanelVisible = False - CONTAINER_MAIN.Size = New System.Drawing.Size(209, 47) + CONTAINER_MAIN.Size = New System.Drawing.Size(395, 53) CONTAINER_MAIN.TabIndex = 0 CONTAINER_MAIN.TopToolStripPanelVisible = False ' - 'DT + 'TP_MAIN ' - Me.DT.Dock = System.Windows.Forms.DockStyle.Fill - Me.DT.Location = New System.Drawing.Point(0, 0) - Me.DT.Name = "DT" - Me.DT.ShowCheckBox = True - Me.DT.Size = New System.Drawing.Size(209, 20) - Me.DT.TabIndex = 0 + TP_MAIN.ColumnCount = 2 + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + TP_MAIN.Controls.Add(Me.DT_FROM, 0, 0) + TP_MAIN.Controls.Add(Me.DT_TO, 1, 0) + TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill + TP_MAIN.Location = New System.Drawing.Point(0, 0) + TP_MAIN.Name = "TP_MAIN" + TP_MAIN.RowCount = 1 + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 53.0!)) + TP_MAIN.Size = New System.Drawing.Size(395, 28) + TP_MAIN.TabIndex = 1 + ' + 'DT_FROM + ' + Me.DT_FROM.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox + Me.DT_FROM.CaptionText = "From" + Me.DT_FROM.CaptionWidth = 50.0R + Me.DT_FROM.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.DateTimePicker + Me.DT_FROM.Dock = System.Windows.Forms.DockStyle.Fill + Me.DT_FROM.Location = New System.Drawing.Point(3, 3) + Me.DT_FROM.Name = "DT_FROM" + Me.DT_FROM.Size = New System.Drawing.Size(191, 22) + Me.DT_FROM.TabIndex = 0 + Me.DT_FROM.Text = "17.09.2022 2:13:36" + Me.DT_FROM.TextBoxWidthMinimal = 50 + ' + 'DT_TO + ' + Me.DT_TO.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox + Me.DT_TO.CaptionText = "To" + Me.DT_TO.CaptionWidth = 50.0R + Me.DT_TO.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.DateTimePicker + Me.DT_TO.Dock = System.Windows.Forms.DockStyle.Fill + Me.DT_TO.Location = New System.Drawing.Point(200, 3) + Me.DT_TO.Name = "DT_TO" + Me.DT_TO.Size = New System.Drawing.Size(192, 22) + Me.DT_TO.TabIndex = 1 + Me.DT_TO.Text = "17.09.2022 2:13:40" + Me.DT_TO.TextBoxWidthMinimal = 50 ' 'FDatePickerForm ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(209, 47) + Me.ClientSize = New System.Drawing.Size(395, 53) Me.Controls.Add(CONTAINER_MAIN) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.KeyPreview = True Me.MaximizeBox = False - Me.MaximumSize = New System.Drawing.Size(225, 86) + Me.MaximumSize = New System.Drawing.Size(411, 92) Me.MinimizeBox = False - Me.MinimumSize = New System.Drawing.Size(225, 86) + Me.MinimumSize = New System.Drawing.Size(411, 92) Me.Name = "FDatePickerForm" Me.ShowIcon = False Me.ShowInTaskbar = False @@ -73,8 +114,13 @@ Partial Friend Class FDatePickerForm : Inherits System.Windows.Forms.Form CONTAINER_MAIN.ContentPanel.ResumeLayout(False) CONTAINER_MAIN.ResumeLayout(False) CONTAINER_MAIN.PerformLayout() + TP_MAIN.ResumeLayout(False) + CType(Me.DT_FROM, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.DT_TO, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) End Sub - Private WithEvents DT As DateTimePicker + + Private WithEvents DT_FROM As PersonalUtilities.Forms.Controls.TextBoxExtended + Private WithEvents DT_TO As PersonalUtilities.Forms.Controls.TextBoxExtended End Class \ No newline at end of file diff --git a/SCrawler/FDatePickerForm.resx b/SCrawler/FDatePickerForm.resx index 56d6ce4..be8e932 100644 --- a/SCrawler/FDatePickerForm.resx +++ b/SCrawler/FDatePickerForm.resx @@ -120,4 +120,7 @@ False + + False + \ No newline at end of file diff --git a/SCrawler/FDatePickerForm.vb b/SCrawler/FDatePickerForm.vb index e012fc7..cd896df 100644 --- a/SCrawler/FDatePickerForm.vb +++ b/SCrawler/FDatePickerForm.vb @@ -9,27 +9,28 @@ Imports PersonalUtilities.Forms Friend Class FDatePickerForm Private ReadOnly MyDefs As DefaultFormOptions - Friend ReadOnly Property SelectedDate As Date? + Friend ReadOnly Property DateFrom As Date? Get - If DT.Checked Then Return DT.Value.Date Else Return Nothing + If DT_FROM.Checked Then Return CDate(DT_FROM.Value).Date Else Return Nothing End Get End Property - Private ReadOnly _InitialValue As Date? - Friend Sub New(ByVal d As Date?) + Friend ReadOnly Property DateTo As Date? + Get + If DT_TO.Checked Then Return CDate(DT_TO.Value).Date Else Return Nothing + End Get + End Property + Friend Sub New(ByVal DateFrom As Date?, ByVal DateTo As Date?) InitializeComponent() - _InitialValue = d MyDefs = New DefaultFormOptions(Me, Settings.Design) + If DateFrom.HasValue Then DT_FROM.Value = DateFrom.Value + If DateTo.HasValue Then DT_TO.Value = DateTo.Value + DT_FROM.Checked = DateFrom.HasValue + DT_TO.Checked = DateTo.HasValue End Sub Private Sub FDatePickerForm_Load(sender As Object, e As EventArgs) Handles Me.Load With MyDefs .MyViewInitialize(True) .AddOkCancelToolbar(True) - If _InitialValue.HasValue Then - DT.Checked = True - DT.Value = _InitialValue.Value.Date - Else - DT.Checked = False - End If .DelegateClosingChecker = False .EndLoaderOperations() MyDefs.MyOkCancel.EnableOK = True diff --git a/SCrawler/MainFrame.Designer.vb b/SCrawler/MainFrame.Designer.vb index 6553d84..569bc07 100644 --- a/SCrawler/MainFrame.Designer.vb +++ b/SCrawler/MainFrame.Designer.vb @@ -72,7 +72,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_SHOW_EXCLUDED_LABELS = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_SHOW_EXCLUDED_LABELS_IGNORE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_SHOW_SHOW_GROUPS = New System.Windows.Forms.ToolStripMenuItem() - Me.BTT_SHOW_LIMIT_DATES = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_SHOW_LIMIT_DATES_NOT = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_LOG = New System.Windows.Forms.ToolStripButton() Me.BTT_VERSION_INFO = New System.Windows.Forms.ToolStripButton() Me.BTT_DONATE = New System.Windows.Forms.ToolStripButton() @@ -106,6 +106,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_TRAY_SHOW_HIDE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_TRAY_CLOSE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_TRAY_CLOSE_NO_SCRIPT = New System.Windows.Forms.ToolStripMenuItem() + Me.BTT_SHOW_LIMIT_DATES_IN = New System.Windows.Forms.ToolStripMenuItem() SEP_1 = New System.Windows.Forms.ToolStripSeparator() SEP_2 = New System.Windows.Forms.ToolStripSeparator() CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator() @@ -147,7 +148,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form 'MENU_SETTINGS_SEP_1 ' MENU_SETTINGS_SEP_1.Name = "MENU_SETTINGS_SEP_1" - MENU_SETTINGS_SEP_1.Size = New System.Drawing.Size(177, 6) + MENU_SETTINGS_SEP_1.Size = New System.Drawing.Size(113, 6) ' 'SEP_3 ' @@ -228,7 +229,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' Me.BTT_SETTINGS.Image = Global.SCrawler.My.Resources.Resources.SettingsPic_16 Me.BTT_SETTINGS.Name = "BTT_SETTINGS" - Me.BTT_SETTINGS.Size = New System.Drawing.Size(180, 22) + Me.BTT_SETTINGS.Size = New System.Drawing.Size(116, 22) Me.BTT_SETTINGS.Text = "Settings" ' 'Toolbar_TOP @@ -415,7 +416,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form ' Me.MENU_VIEW.AutoToolTip = False Me.MENU_VIEW.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text - Me.MENU_VIEW.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_VIEW_LARGE, Me.BTT_VIEW_SMALL, Me.BTT_VIEW_LIST, Me.BTT_VIEW_DETAILS, MENU_VIEW_SEP_1, Me.BTT_SITE_ALL, Me.BTT_SITE_SPECIFIC, MENU_VIEW_SEP_2, Me.BTT_SHOW_ALL, Me.BTT_SHOW_REGULAR, Me.BTT_SHOW_TEMP, Me.BTT_SHOW_FAV, Me.BTT_SHOW_DELETED, Me.BTT_SHOW_SUSPENDED, Me.BTT_SHOW_LABELS, Me.BTT_SHOW_NO_LABELS, Me.BTT_SHOW_EXCLUDED_LABELS, Me.BTT_SHOW_EXCLUDED_LABELS_IGNORE, Me.BTT_SHOW_SHOW_GROUPS, MENU_VIEW_SEP_3, Me.BTT_SHOW_LIMIT_DATES}) + Me.MENU_VIEW.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_VIEW_LARGE, Me.BTT_VIEW_SMALL, Me.BTT_VIEW_LIST, Me.BTT_VIEW_DETAILS, MENU_VIEW_SEP_1, Me.BTT_SITE_ALL, Me.BTT_SITE_SPECIFIC, MENU_VIEW_SEP_2, Me.BTT_SHOW_ALL, Me.BTT_SHOW_REGULAR, Me.BTT_SHOW_TEMP, Me.BTT_SHOW_FAV, Me.BTT_SHOW_DELETED, Me.BTT_SHOW_SUSPENDED, Me.BTT_SHOW_LABELS, Me.BTT_SHOW_NO_LABELS, Me.BTT_SHOW_EXCLUDED_LABELS, Me.BTT_SHOW_EXCLUDED_LABELS_IGNORE, Me.BTT_SHOW_SHOW_GROUPS, MENU_VIEW_SEP_3, Me.BTT_SHOW_LIMIT_DATES_NOT, Me.BTT_SHOW_LIMIT_DATES_IN}) Me.MENU_VIEW.Image = CType(resources.GetObject("MENU_VIEW.Image"), System.Drawing.Image) Me.MENU_VIEW.ImageTransparentColor = System.Drawing.Color.Magenta Me.MENU_VIEW.Name = "MENU_VIEW" @@ -528,13 +529,13 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_SHOW_SHOW_GROUPS.Size = New System.Drawing.Size(231, 22) Me.BTT_SHOW_SHOW_GROUPS.Text = "Show groups instead of labels" ' - 'BTT_SHOW_LIMIT_DATES + 'BTT_SHOW_LIMIT_DATES_NOT ' - Me.BTT_SHOW_LIMIT_DATES.AutoToolTip = True - Me.BTT_SHOW_LIMIT_DATES.Name = "BTT_SHOW_LIMIT_DATES" - Me.BTT_SHOW_LIMIT_DATES.Size = New System.Drawing.Size(231, 22) - Me.BTT_SHOW_LIMIT_DATES.Text = "Limit dates" - Me.BTT_SHOW_LIMIT_DATES.ToolTipText = "Show profiles that haven't downloaded new data since date..." + Me.BTT_SHOW_LIMIT_DATES_NOT.AutoToolTip = True + Me.BTT_SHOW_LIMIT_DATES_NOT.Name = "BTT_SHOW_LIMIT_DATES_NOT" + Me.BTT_SHOW_LIMIT_DATES_NOT.Size = New System.Drawing.Size(231, 22) + Me.BTT_SHOW_LIMIT_DATES_NOT.Text = "Limit dates (not in range)" + Me.BTT_SHOW_LIMIT_DATES_NOT.ToolTipText = "Filter users whose last download date is not in the selected date range" ' 'BTT_LOG ' @@ -785,6 +786,14 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Me.BTT_TRAY_CLOSE_NO_SCRIPT.ToolTipText = "Close the program without executing the script" Me.BTT_TRAY_CLOSE_NO_SCRIPT.Visible = False ' + 'BTT_SHOW_LIMIT_DATES_IN + ' + Me.BTT_SHOW_LIMIT_DATES_IN.AutoToolTip = True + Me.BTT_SHOW_LIMIT_DATES_IN.Name = "BTT_SHOW_LIMIT_DATES_IN" + Me.BTT_SHOW_LIMIT_DATES_IN.Size = New System.Drawing.Size(231, 22) + Me.BTT_SHOW_LIMIT_DATES_IN.Text = "Limit dates (in range)" + Me.BTT_SHOW_LIMIT_DATES_IN.ToolTipText = "Filter users whose last download date is in the selected date range" + ' 'MainFrame ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -860,7 +869,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Private WithEvents BTT_DONATE As ToolStripButton Private WithEvents BTT_SHOW_DELETED As ToolStripMenuItem Private WithEvents BTT_SHOW_SUSPENDED As ToolStripMenuItem - Private WithEvents BTT_SHOW_LIMIT_DATES As ToolStripMenuItem + Private WithEvents BTT_SHOW_LIMIT_DATES_NOT As ToolStripMenuItem Private WithEvents BTT_VIEW_DETAILS As ToolStripMenuItem Private WithEvents COL_DEF As ColumnHeader Private WithEvents MENU_SETTINGS As ToolStripDropDownButton @@ -882,4 +891,5 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form Friend WithEvents BTT_LOG As ToolStripButton Friend WithEvents Toolbar_TOP As ToolStrip Private WithEvents BTT_FEED As ToolStripButton + Private WithEvents BTT_SHOW_LIMIT_DATES_IN As ToolStripMenuItem End Class \ No newline at end of file diff --git a/SCrawler/MainFrame.resx b/SCrawler/MainFrame.resx index a12484e..d0c334c 100644 --- a/SCrawler/MainFrame.resx +++ b/SCrawler/MainFrame.resx @@ -312,35 +312,6 @@ 623, 17 - - - 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 @@ -505,6 +476,35 @@ AAAAAAAAH/8AAAAAAAA//wAAAAAAAH//AAAAAAAA//8AAAAAAAP//wAAAAAAB///AAAAAAAP//8AAAAA AB///wAAAAAAf///AAAAAAH///8AAAAAB////wAAAAAf////AAAAAP////8AAAAH/////wAAAH////// AAA= + + + + + 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 diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index 2d4417b..07f5d75 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -87,7 +87,10 @@ Public Class MainFrame CheckVersion(False) BTT_SITE_ALL.Checked = Settings.SelectedSites.Count = 0 BTT_SITE_SPECIFIC.Checked = Settings.SelectedSites.Count > 0 - BTT_SHOW_LIMIT_DATES.Checked = Settings.LastUpdatedDate.HasValue + BTT_SHOW_LIMIT_DATES_NOT.Tag = ShowingDates.Not + BTT_SHOW_LIMIT_DATES_NOT.Checked = Settings.ViewDateMode.Value = ShowingDates.Not + BTT_SHOW_LIMIT_DATES_IN.Tag = ShowingDates.In + BTT_SHOW_LIMIT_DATES_IN.Checked = Settings.ViewDateMode.Value = ShowingDates.In With Settings.Groups AddHandler .Added, AddressOf GROUPS_Added AddHandler .Deleted, AddressOf GROUPS_Deleted @@ -595,26 +598,40 @@ CloseResume: End If End Using End Function - Private Sub BTT_SHOW_LIMIT_DATES_Click(sender As Object, e As EventArgs) Handles BTT_SHOW_LIMIT_DATES.Click + Private Sub BTT_SHOW_LIMIT_DATES_NOT_IN_Click(ByVal Sender As ToolStripMenuItem, ByVal e As EventArgs) Handles BTT_SHOW_LIMIT_DATES_NOT.Click, + BTT_SHOW_LIMIT_DATES_IN.Click Dim r As Boolean = False - Dim snd As Action(Of Date?) = Sub(ByVal d As Date?) - With Settings.LastUpdatedDate - If .HasValue And d.HasValue Then - r = Not .Value.Date = d.Value.Date - Else - r = True - End If - End With - Settings.LastUpdatedDate = d - End Sub - Using f As New FDatePickerForm(Settings.LastUpdatedDate) + Dim UpSettings As Action(Of Date?, Date?, ShowingDates) = Sub(ByVal _from As Date?, ByVal _to As Date?, ByVal Mode As ShowingDates) + With Settings + .BeginUpdate() + If Not .ViewDateMode.Value = CInt(Mode) Then r = True + .ViewDateMode.Value = CInt(Mode) + If Not Mode = ShowingDates.Off Then + If .ViewDateFrom.HasValue And _from.HasValue Then + If Not .ViewDateFrom.Value.Date = _from.Value.Date Then r = True + Else + r = True + End If + .ViewDateFrom = _from + If .ViewDateTo.HasValue And _to.HasValue Then + If Not .ViewDateTo.Value.Date = _to.Value.Date Then r = True + Else + r = True + End If + .ViewDateTo = _to + End If + .EndUpdate() + End With + End Sub + Using f As New FDatePickerForm(Settings.ViewDateFrom, Settings.ViewDateTo) f.ShowDialog() Select Case f.DialogResult - Case DialogResult.Abort : snd(Nothing) - Case DialogResult.OK : snd(f.SelectedDate) + Case DialogResult.Abort : UpSettings(f.DateFrom, f.DateTo, ShowingDates.Off) + Case DialogResult.OK : UpSettings(f.DateFrom, f.DateTo, Sender.Tag) End Select End Using - BTT_SHOW_LIMIT_DATES.Checked = Settings.LastUpdatedDate.HasValue + BTT_SHOW_LIMIT_DATES_NOT.Checked = Settings.ViewDateMode.Value = ShowingDates.Not + BTT_SHOW_LIMIT_DATES_IN.Checked = Settings.ViewDateMode.Value = ShowingDates.In If r Then RefillList() End Sub #End Region @@ -1090,22 +1107,25 @@ CloseResume: End Sub Private Enum DownUserLimits : None : Number : [Date] : End Enum Private Sub DownloadSelectedUser(ByVal UseLimits As DownUserLimits) + Const MsgTitle$ = "Download limit" Dim users As List(Of IUserData) = GetSelectedUserArray() If users.ListExists Then - Dim l%? = Nothing - Dim d As Date? = Nothing + Dim limit%? = Nothing + Dim _from As Date? = Nothing + Dim _to As Date? = Nothing + Dim _fromStr$, _toStr$ If UseLimits = DownUserLimits.Number Then Do - l = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", "Download limit", 10), AModes.Var, Nothing) - If l.HasValue Then - Select Case MsgBoxE(New MMessage($"You are set up downloading top [{l.Value}] posts", "Download limit", + limit = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", MsgTitle, 10), AModes.Var, Nothing) + If limit.HasValue Then + Select Case MsgBoxE(New MMessage($"You are set up downloading top [{limit.Value}] posts", MsgTitle, {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index Case 0 : Exit Do - Case 2 : l = Nothing : Exit Do + Case 2 : limit = Nothing : Exit Do Case 3 : GoTo CancelDownloadingOperation End Select Else - Select Case MsgBoxE({"You are not set up downloading limit", "Download limit"},,,, {"Confirm", "Try again", "Cancel"}).Index + Select Case MsgBoxE({"You are not set up downloading limit", MsgTitle},,,, {"Confirm", "Try again", "Cancel"}).Index Case 0 : Exit Do Case 2 : GoTo CancelDownloadingOperation End Select @@ -1113,24 +1133,30 @@ CloseResume: Loop ElseIf UseLimits = DownUserLimits.Date Then Do - Using fd As New FDatePickerForm(Nothing) + Using fd As New FDatePickerForm(Nothing, Nothing) fd.ShowDialog() If fd.DialogResult = DialogResult.OK Then - d = fd.SelectedDate + _from = fd.DateFrom + _to = fd.DateTo ElseIf fd.DialogResult = DialogResult.Abort Then - d = Nothing + _from = Nothing + _to = Nothing End If End Using - If d.HasValue Then - Select Case MsgBoxE(New MMessage($"You are set up downloading posts until [{d.Value.Date.ToStringDate(ADateTime.Formats.BaseDate)}]", - "Download limit", - {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index + If _from.HasValue Or _to.HasValue Then + _fromStr = AConvert(Of String)(_from, ADateTime.Formats.BaseDate, String.Empty) + _toStr = AConvert(Of String)(_to, ADateTime.Formats.BaseDate, String.Empty) + If Not _fromStr.IsEmptyString Then _fromStr = $"FROM [{_fromStr}]" + If Not _toStr.IsEmptyString Then _toStr = $"TO [{_toStr}]" + If Not _toStr.IsEmptyString And Not _fromStr.IsEmptyString Then _fromStr &= " " + Select Case MsgBoxE(New MMessage($"You have set a date limit for downloading posts: {_fromStr}{_toStr}", MsgTitle, + {"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index Case 0 : Exit Do - Case 2 : d = Nothing : Exit Do + Case 2 : _from = Nothing : _to = Nothing : Exit Do Case 3 : GoTo CancelDownloadingOperation End Select Else - Select Case MsgBoxE({"You are not set up a date limit", "Download limit"},,,, {"Confirm", "Try again", "Cancel"}).Index + Select Case MsgBoxE({"You have not set a date limit", MsgTitle},,,, {"Confirm", "Try again", "Cancel"}).Index Case 0 : Exit Do Case 2 : GoTo CancelDownloadingOperation End Select @@ -1144,18 +1170,17 @@ CancelDownloadingOperation: MsgBoxE("Operation canceled") Exit Sub ResumeDownloadingOperation: - If users.Count = 1 Then - users(0).DownloadTopCount = l - users(0).DownloadToDate = d - Downloader.Add(users(0)) - Else - Dim uStr$ = users.Select(Function(u) u.ToString()).ListToString(vbNewLine) - If MsgBoxE({$"You are select {users.Count} users' profiles{vbNewLine}Do you want to download all of them?{vbNewLine.StringDup(2)}" & - $"Selected users:{vbNewLine}{uStr}", "A few users selected"}, - MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - users.ForEach(Sub(u) u.DownloadTopCount = l) - Downloader.AddRange(users) - End If + Dim uStr$ = If(users.Count = 1, String.Empty, users.Select(Function(u) u.ToString()).ListToString(vbNewLine)) + If users.Count = 1 OrElse MsgBoxE({$"You have selected {users.Count} user profiles" & vbCr & + $"Do you want to download them all?{vbNewLine.StringDup(2)}" & + $"Selected users:{vbNewLine}{uStr}", "Multiple users selected"}, + MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + users.ForEach(Sub(u) + u.DownloadTopCount = limit + u.DownloadDateFrom = _from + u.DownloadDateTo = _to + End Sub) + Downloader.AddRange(users) End If End If End Sub diff --git a/SCrawler/MainMod.vb b/SCrawler/MainMod.vb index ab3a2e1..321033a 100644 --- a/SCrawler/MainMod.vb +++ b/SCrawler/MainMod.vb @@ -83,6 +83,11 @@ Friend Module MainMod Deleted = 10000 Suspended = 12000 End Enum + Friend Enum ShowingDates As Integer + [Off] = 0 + [Not] = 1 + [In] = 2 + End Enum Friend Enum FileNameReplaceMode As Integer None = 0 Replace = 1 diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index ff2baa7..d7ad027 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/Hosts/SettingsHost.vb b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb index de767e0..99eb0c0 100644 --- a/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/SettingsHost.vb @@ -93,6 +93,7 @@ Namespace Plugin.Hosts End Property #End Region #Region "Base properties compatibility" + Friend ReadOnly Property DownloadSiteData As XMLValue(Of Boolean) Friend ReadOnly Property Temporary As XMLValue(Of Boolean) Friend ReadOnly Property DownloadImages As XMLValue(Of Boolean) Friend ReadOnly Property DownloadVideos As XMLValue(Of Boolean) @@ -263,6 +264,8 @@ Namespace Plugin.Hosts DownloadVideos.SetExtended("DownloadVideos", True, _XML, n) DownloadVideos.SetDefault(_Vids) + DownloadSiteData = New XMLValue(Of Boolean)("DownloadSiteData", True, _XML, n) + GetUserMediaOnly = New XMLValue(Of Boolean)("GetUserMediaOnly", True, _XML, n) If PropList.Count > 0 Then Dim MaxOffset% = Math.Max(PropList.Max(Function(pp) pp.LeftOffset), PropertyValueHost.LeftOffsetDefault) @@ -318,11 +321,15 @@ Namespace Plugin.Hosts Private _AvailableAsked As Boolean = False Private _ActiveTaskCount As Integer = 0 Friend Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean - If Not _AvailableAsked Then - _AvailableValue = Source.Available(What, Silent) - _AvailableAsked = True + If DownloadSiteData Then + If Not _AvailableAsked Then + _AvailableValue = Source.Available(What, Silent) + _AvailableAsked = True + End If + Return _AvailableValue + Else + Return False End If - Return _AvailableValue End Function Friend Sub DownloadStarted(ByVal What As Download) _ActiveTaskCount += 1 diff --git a/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb b/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb index f4f2844..8535e2a 100644 --- a/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb +++ b/SCrawler/PluginsEnvironment/Hosts/UserDataHost.vb @@ -53,7 +53,8 @@ Namespace Plugin.Hosts .SeparateVideoFolder = SeparateVideoFolderF .DataPath = MyFile.CutPath.PathNoSeparator .PostsNumberLimit = DownloadTopCount - .PostsDateLimit = DownloadToDate + .DownloadDateFrom = DownloadDateFrom + .DownloadDateTo = DownloadDateTo .ExistingContentList = New List(Of PluginUserMedia) .TempMediaList = New List(Of PluginUserMedia) diff --git a/SCrawler/SettingsCLS.vb b/SCrawler/SettingsCLS.vb index a565e7f..299838d 100644 --- a/SCrawler/SettingsCLS.vb +++ b/SCrawler/SettingsCLS.vb @@ -95,8 +95,13 @@ Friend Class SettingsCLS : Implements IDisposable LatestSavingPath = New XMLValue(Of SFile)("LatestSavingPath", Nothing, MyXML,, New XMLValueBase.ToFilePath) LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML) - LastUpdatedLimit = New XMLValue(Of Date) - LastUpdatedLimit.SetExtended("LastUpdatedLimit",, MyXML) + + _ViewDateFrom = New XMLValue(Of Date) + _ViewDateFrom.SetExtended("ViewDateFrom",, MyXML) + _ViewDateTo = New XMLValue(Of Date) + _ViewDateTo.SetExtended("ViewDateTo",, MyXML) + ViewDateMode = New XMLValue(Of Integer)("ViewDateMode", ShowingDates.Off, MyXML) + LatestDownloadedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "LatestDownloadedSites", MyXML) SelectedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "SelectedSites", MyXML, {Name_Node_Sites}) @@ -473,15 +478,27 @@ Friend Class SettingsCLS : Implements IDisposable Friend ReadOnly Property UseGrouping As XMLValue(Of Boolean) Friend ReadOnly Property ShowGroupsInsteadLabels As XMLValue(Of Boolean) Friend ReadOnly Property SelectedSites As XMLValuesCollection(Of String) - Private ReadOnly LastUpdatedLimit As XMLValue(Of Date) - Friend Property LastUpdatedDate As Date? +#Region "View dates" + Private ReadOnly _ViewDateFrom As XMLValue(Of Date) + Friend Property ViewDateFrom As Date? Get - If LastUpdatedLimit.ValueF.Exists Then Return LastUpdatedLimit.Value Else Return Nothing + If _ViewDateFrom.ValueF.Exists Then Return _ViewDateFrom.Value Else Return Nothing End Get - Set(ByVal NewDate As Date?) - If Not NewDate.HasValue Then LastUpdatedLimit.ValueF = Nothing Else LastUpdatedLimit.Value = NewDate.Value + Set(ByVal d As Date?) + If Not d.HasValue Then _ViewDateFrom.ValueF = Nothing Else _ViewDateFrom.Value = d.Value End Set End Property + Private ReadOnly _ViewDateTo As XMLValue(Of Date) + Friend Property ViewDateTo As Date? + Get + If _ViewDateTo.ValueF.Exists Then Return _ViewDateTo.Value Else Return Nothing + End Get + Set(ByVal d As Date?) + If Not d.HasValue Then _ViewDateTo.ValueF = Nothing Else _ViewDateTo.Value = d.Value + End Set + End Property + Friend ReadOnly Property ViewDateMode As XMLValue(Of Integer) +#End Region #End Region #Region "Latest values" Friend ReadOnly Property LatestSavingPath As XMLValue(Of SFile)