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)