From 2a60ace18f0bc565d7ff3f83aec6e314ceb84b1f Mon Sep 17 00:00:00 2001 From: Andy <88590076+AAndyProgram@users.noreply.github.com> Date: Sun, 27 Aug 2023 19:39:50 +0300 Subject: [PATCH] 2023.8.27.0 API.JFF: remove PXML attribute for some properties API.Reddit.Channels: save channel info right after download; replace date providers with default API.Reddit.SiteSettings: improve 'UpdateToken' function AutoDownloader: add 'Copy' function SchedulerEditorForm: add cloning plans DownloadedInfoForm: add 'Try...Catch' for some functions DownloadFeedForm: add button to go to custom page FeedMedia: color typo GroupParameters: add 'ICopier' --- Changelog.md | 19 ++++ ProgramScreenshots/SettingsGlobalBasis.png | Bin 27917 -> 21112 bytes ProgramScreenshots/SettingsGlobalDesign.png | Bin 0 -> 16537 bytes .../SettingsSiteJustForFans.png | Bin 0 -> 18635 bytes README.md | 19 ++-- SCrawler.YouTube/My Project/AssemblyInfo.vb | 4 +- .../My Project/AssemblyInfo.vb | 4 +- SCrawler/API/Base/UserDataBase.vb | 2 +- SCrawler/API/JustForFans/SiteSettings.vb | 5 +- SCrawler/API/Reddit/Channel.vb | 90 ++++++++++-------- SCrawler/API/Reddit/ChannelsCollection.vb | 2 +- SCrawler/API/Reddit/SiteSettings.vb | 60 ++++++++---- .../Download/Automation/AutoDownloader.vb | 18 ++++ .../Automation/SchedulerEditorForm.vb | 40 +++++--- SCrawler/Download/DownloadedInfoForm.vb | 62 +++++++----- SCrawler/Download/Feed/DownloadFeedForm.vb | 12 +-- SCrawler/Download/Feed/FeedMedia.vb | 2 +- SCrawler/Download/Groups/GroupParameters.vb | 24 ++++- SCrawler/Download/MissingPostsForm.vb | 2 +- SCrawler/Editors/UsersInfoForm.vb | 2 +- SCrawler/GlobalSuppressions.vb | 4 +- SCrawler/MainFrame.vb | 12 +-- SCrawler/My Project/AssemblyInfo.vb | 4 +- 23 files changed, 245 insertions(+), 142 deletions(-) create mode 100644 ProgramScreenshots/SettingsGlobalDesign.png create mode 100644 ProgramScreenshots/SettingsSiteJustForFans.png diff --git a/Changelog.md b/Changelog.md index 1d79ff8..9054f25 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,22 @@ +# 2023.8.27.0 + +*2023-08-27* + +- Added + - **JustForFans** + - Advanced download (`Download` - `Download (advanced)`) + - Advanced filter (`View` - `Advanced filter`) + - Auto downloader: cloning plans + - Feed: add button to go to custom page + - Special log for non-existent users + - Twitter: group 'limit' notifications + - Ability to set custom color for subscription users + - Other improvements +- Fixed + - Auto downloader: new plan date display bug + - Auto downloader: downloading stuck + - Minor bugs + # 2023.8.6.0 *2023-08-06* diff --git a/ProgramScreenshots/SettingsGlobalBasis.png b/ProgramScreenshots/SettingsGlobalBasis.png index a36abb97a337b1e8b52b2c0eaf18b64e96722444..04f57133372142d0792843d2a426d6b183ac84ca 100644 GIT binary patch literal 21112 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 uG(UWKFm=sHte> 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%0D)sM>U@Bq8oxCp*yqstlIcg%D-2nZGkfR%U! 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 EKbKlRYXATM literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 236f003..0f4c089 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ :eu: :greece: -A program to download photo and video from [any site](#supported-sites) (e.g. YouTube, YouTube Music, OnlyFans, Reddit, Twitter, Mastodon, Instagram, TikTok, RedGifs, PornHub, XHamster, XVIDEOS, ThisVid, LPSG, Pinterest). +A program to download photo and video from [any site](#supported-sites) (e.g. YouTube, YouTube Music, OnlyFans, Reddit, Twitter, Mastodon, Instagram, TikTok, RedGifs, JustForFans, PornHub, XHamster, XVIDEOS, ThisVid, LPSG, Pinterest). **If you like SCrawler, please like the program on [this site](https://alternativeto.net/software/scrawler/about/) and/or [this](https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml)** @@ -128,16 +122,17 @@ The program parses user posts and compares file names with existing ones to remo - [Reddit](https://github.com/AAndyProgram/SCrawler/wiki/Settings#reddit) - [Twitter](https://github.com/AAndyProgram/SCrawler/wiki/Settings#twitter) - [OnlyFans](https://github.com/AAndyProgram/SCrawler/wiki/Settings#onlyfans) - - [Mastodon](https://github.com/AAndyProgram/SCrawler/wiki/Settings#Mastodon) + - [Mastodon](https://github.com/AAndyProgram/SCrawler/wiki/Settings#mastodon) - [Instagram](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) + - [JustForFans](https://github.com/AAndyProgram/SCrawler/wiki/Settings#justforfans) - [TikTok](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok) - [RedGifs](https://github.com/AAndyProgram/SCrawler/wiki/Settings#redgifs) - - [YouTube](https://github.com/AAndyProgram/SCrawler/wiki/Settings#YouTube) + - [YouTube](https://github.com/AAndyProgram/SCrawler/wiki/Settings#youtube) - [Pinterest](https://github.com/AAndyProgram/SCrawler/wiki/Settings#Pinterest) - [PornHub](https://github.com/AAndyProgram/SCrawler/wiki/Settings#pornhub) - [XHamster](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xhamster) - [XVIDEOS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xvideos) - - [ThisVid](https://github.com/AAndyProgram/SCrawler/wiki/Settings#ThisVid) + - [ThisVid](https://github.com/AAndyProgram/SCrawler/wiki/Settings#thisvid) - [LPSG](https://github.com/AAndyProgram/SCrawler/wiki/Settings#lpsg) **Full guide you can find [here](https://github.com/AAndyProgram/SCrawler/wiki)** diff --git a/SCrawler.YouTube/My Project/AssemblyInfo.vb b/SCrawler.YouTube/My Project/AssemblyInfo.vb index 0b246d2..4c141e5 100644 --- a/SCrawler.YouTube/My Project/AssemblyInfo.vb +++ b/SCrawler.YouTube/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb b/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb index 9028021..494853d 100644 --- a/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb +++ b/SCrawler.YouTubeDownloader/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 b425cca..910ea83 100644 --- a/SCrawler/API/Base/UserDataBase.vb +++ b/SCrawler/API/Base/UserDataBase.vb @@ -1448,7 +1448,7 @@ BlockNullPicture: For i = 0 To _ContentList.Count - 1 data = _ContentList(i) ProgressPre.Perform() - If (data.Type = UTypes.GIF Or data.Type = UTypes.Picture) Then + If data.Type = UTypes.GIF Or data.Type = UTypes.Picture Then If data.MD5.IsEmptyString Then ThrowAny(Token) eIndx = existingFiles.FindIndex(eFinder) diff --git a/SCrawler/API/JustForFans/SiteSettings.vb b/SCrawler/API/JustForFans/SiteSettings.vb index 1c6dc84..8e5ac03 100644 --- a/SCrawler/API/JustForFans/SiteSettings.vb +++ b/SCrawler/API/JustForFans/SiteSettings.vb @@ -30,10 +30,9 @@ Namespace API.JustForFans Friend ReadOnly Property UserID As PropertyValue Friend ReadOnly Property UserHash4 As PropertyValue - + Friend ReadOnly Property HeaderAccept As PropertyValue - - Friend ReadOnly Property UserAgent As PropertyValue + Friend ReadOnly Property UserAgent As PropertyValue Private Sub UpdateHeader(ByVal HeaderName As String, ByVal HeaderValue As String) Select Case HeaderName Case NameOf(HeaderAccept) : If HeaderValue.IsEmptyString Then Responser.Accept = Nothing Else Responser.Accept = HeaderValue diff --git a/SCrawler/API/Reddit/Channel.vb b/SCrawler/API/Reddit/Channel.vb index 37cf9e7..3d40fe3 100644 --- a/SCrawler/API/Reddit/Channel.vb +++ b/SCrawler/API/Reddit/Channel.vb @@ -270,13 +270,14 @@ Namespace API.Reddit End With Dim b% = Posts.Count Posts.ListAddList(d.GetNewChannelPosts(), LNC) - If Posts.Count - b > 0 Then CountOfLoadedPostsPerSession.Add(Posts.Count - b) + If Posts.Count - b > 0 Then _Saved = False : CountOfLoadedPostsPerSession.Add(Posts.Count - b) Posts.Sort() LatestParsedDate = If(Posts.FirstOrDefault(Function(pp) pp.Date.HasValue).Date, LatestParsedDate) UpdateUsersStats() End Using Catch oex As OperationCanceledException When Token.IsCancellationRequested Finally + SaveUnsaved() _Downloading = False End Try End Sub @@ -344,14 +345,13 @@ Namespace API.Reddit Using x As New XmlFile(f, Protector.Modes.All, False) With {.XmlReadOnly = True, .AllowSameNames = True} x.LoadData() If x.Count > 0 Then - Dim XMLDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime) Dim lc As New ListAddParams(LAP.ClearBeforeAdd) Name = x.Value(Name_Name) ID = x.Value(Name_ID) ViewMode = x.Value(Name_ViewMode).FromXML(Of Integer)(CInt(View.[New])) ViewPeriod = x.Value(Name_ViewPeriod).FromXML(Of Integer)(CInt(Period.All)) If FilePosts.Exists Then PostsNames.ListAddList(FilePosts.GetText.StringToList(Of String)("|"), LNC) - LatestParsedDate = AConvert(Of Date)(x.Value(Name_Date), XMLDateProvider, Nothing) + LatestParsedDate = AConvert(Of Date)(x.Value(Name_Date), DateTimeDefaultProvider, Nothing) CountOfAddedUsers.ListAddList(x.Value(Name_UsersAdded).StringToList(Of Integer)("|"), lc) CountOfLoadedPostsPerSession.ListAddList(x.Value(Name_PostsDownloaded).StringToList(Of Integer)("|"), lc) ChannelExistentUserNames.ListAddList(x.Value(Name_UsersExistent).StringToList(Of String)("|"), LNC) @@ -359,7 +359,7 @@ Namespace API.Reddit With x(Name_PostsNode).XmlIfNothing If .Count > 0 Then .ForEach(Sub(ee) PostsLatest.Add(New UserPost With { .ID = ee.Attribute(Name_ID), - .[Date] = AConvert(Of Date)(ee.Attribute(Name_Date).Value, XMLDateProvider, Nothing)})) + .[Date] = AConvert(Of Date)(ee.Attribute(Name_Date).Value, DateTimeDefaultProvider, Nothing)})) End With End If End If @@ -367,45 +367,53 @@ Namespace API.Reddit End If Return True End Function + Private _Saved As Boolean = True + Friend Function SaveUnsaved() As Boolean + Return _Saved OrElse Save() + End Function Friend Overloads Function Save(Optional ByVal f As SFile = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean Implements ILoaderSaver.Save - Dim XMLDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime) - UpdateUsersStats() - If Not ViewMode = View.New Then - Dim l As New List(Of String) - If Posts.Count > 0 Or PostsLatest.Count > 0 Then l.ListAddList((From p In PostsAll Where Not p.ID.IsEmptyString Select p.ID), LNC) - l.ListAddList(PostsNames, LNC) - If l.Count > 0 Then TextSaver.SaveTextToFile(l.ListToString("|"), FilePosts, True,, EDP.SendToLog) - End If - Using x As New XmlFile With {.AllowSameNames = True, .Name = "Channel"} - x.Add(Name_Name, Name) - x.Add(Name_ID, ID) - x.Add(Name_ViewMode, CInt(ViewMode)) - x.Add(Name_ViewPeriod, CInt(ViewPeriod)) - x.Add(Name_UsersAdded, CountOfAddedUsers.ListToString("|")) - x.Add(Name_PostsDownloaded, CountOfLoadedPostsPerSession.ListToString("|")) - x.Add(Name_UsersExistent, ChannelExistentUserNames.ListToString("|")) - If Posts.Count > 0 Or PostsLatest.Count > 0 Then - Dim tmpPostList As List(Of UserPost) = Nothing - tmpPostList.ListAddList(Posts).ListAddList(PostsLatest) - tmpPostList.Sort() - LatestParsedDate = tmpPostList.FirstOrDefault(Function(pd) pd.Date.HasValue).Date - x.Add(Name_Date, AConvert(Of String)(LatestParsedDate, XMLDateProvider, String.Empty)) - x.Add(Name_PostsNode, String.Empty) - With x(Name_PostsNode) - tmpPostList.Take(200).ToList.ForEach(Sub(p) .Add(New EContainer("Post", - String.Empty, - { - New EAttribute(Name_ID, p.ID), - New EAttribute(Name_Date, AConvert(Of String)(p.Date, XMLDateProvider, String.Empty)) - }) - ) - ) - End With - tmpPostList.Clear() + Try + UpdateUsersStats() + If Not ViewMode = View.New Then + Dim l As New List(Of String) + If Posts.Count > 0 Or PostsLatest.Count > 0 Then l.ListAddList((From p In PostsAll Where Not p.ID.IsEmptyString Select p.ID), LNC) + l.ListAddList(PostsNames, LNC) + If l.Count > 0 Then TextSaver.SaveTextToFile(l.ListToString("|"), FilePosts, True,, EDP.SendToLog) End If - x.Save(File) - End Using - Return True + Using x As New XmlFile With {.AllowSameNames = True, .Name = "Channel"} + x.Add(Name_Name, Name) + x.Add(Name_ID, ID) + x.Add(Name_ViewMode, CInt(ViewMode)) + x.Add(Name_ViewPeriod, CInt(ViewPeriod)) + x.Add(Name_UsersAdded, CountOfAddedUsers.ListToString("|")) + x.Add(Name_PostsDownloaded, CountOfLoadedPostsPerSession.ListToString("|")) + x.Add(Name_UsersExistent, ChannelExistentUserNames.ListToString("|")) + If Posts.Count > 0 Or PostsLatest.Count > 0 Then + Dim tmpPostList As List(Of UserPost) = Nothing + tmpPostList.ListAddList(Posts).ListAddList(PostsLatest) + tmpPostList.Sort() + LatestParsedDate = tmpPostList.FirstOrDefault(Function(pd) pd.Date.HasValue).Date + x.Add(Name_Date, AConvert(Of String)(LatestParsedDate, DateTimeDefaultProvider, String.Empty)) + x.Add(Name_PostsNode, String.Empty) + With x(Name_PostsNode) + tmpPostList.Take(200).ToList.ForEach(Sub(p) .Add(New EContainer("Post", + String.Empty, + { + New EAttribute(Name_ID, p.ID), + New EAttribute(Name_Date, AConvert(Of String)(p.Date, DateTimeDefaultProvider, String.Empty)) + }) + ) + ) + End With + tmpPostList.Clear() + End If + _Saved = x.Save(File) + End Using + Return True + Catch ex As Exception + If Not e.Exists Then e = EDP.ReturnValue + Return ErrorsDescriber.Execute(e, ex, "API.Reddit.Channel.Save", _Saved) + End Try End Function #End Region #Region "IDisposable Support" diff --git a/SCrawler/API/Reddit/ChannelsCollection.vb b/SCrawler/API/Reddit/ChannelsCollection.vb index ddaa9f7..e38d3b8 100644 --- a/SCrawler/API/Reddit/ChannelsCollection.vb +++ b/SCrawler/API/Reddit/ChannelsCollection.vb @@ -90,7 +90,7 @@ Namespace API.Reddit End If End Sub Friend Sub Update() - If Count > 0 Then Channels.ForEach(Sub(c) c.Save()) + If Count > 0 Then Channels.ForEach(Sub(c) c.SaveUnsaved()) End Sub Friend ReadOnly Property Count As Integer Implements ICollection(Of Channel).Count, IMyEnumerator(Of Channel).MyEnumeratorCount Get diff --git a/SCrawler/API/Reddit/SiteSettings.vb b/SCrawler/API/Reddit/SiteSettings.vb index 0c38160..86c7d73 100644 --- a/SCrawler/API/Reddit/SiteSettings.vb +++ b/SCrawler/API/Reddit/SiteSettings.vb @@ -218,39 +218,57 @@ Namespace API.Reddit Return True End Function Private Overloads Function UpdateToken() As Boolean - Return UpdateToken(AuthUserName.Value, AuthPassword.Value, ApiClientID.Value, ApiClientSecret.Value) + Return UpdateToken(AuthUserName.Value, AuthPassword.Value, ApiClientID.Value, ApiClientSecret.Value, EDP.SendToLog + EDP.ReturnValue) End Function Private Overloads Function UpdateToken(ByVal UserName As String, ByVal Password As String, ByVal ClientID As String, ByVal ClientSecret As String) As Boolean + Return UpdateToken(UserName, Password, ClientID, ClientSecret, EDP.LogMessageValue) + End Function + Private Overloads Function UpdateToken(ByVal UserName As String, ByVal Password As String, ByVal ClientID As String, ByVal ClientSecret As String, ByVal e As ErrorsDescriber) As Boolean Try Dim result As Boolean = True If {UserName, Password, ClientID, ClientSecret}.All(Function(v) Not v.IsEmptyString) Then result = False Dim r$ = String.Empty - Using resp As New Responser With { - .Mode = Responser.Modes.Curl, - .Method = "POST", - .CurlArgumentsLeft = $"-d ""grant_type=password&username={UserName}&password={Password}"" --user ""{ClientID}:{ClientSecret}""" - } - r = resp.GetResponse("https://www.reddit.com/api/v1/access_token") - End Using - If Not r.IsEmptyString Then - Using j As EContainer = JsonDocument.Parse(r) - If j.ListExists Then - Dim newToken$ = j.Value("access_token") - If Not newToken.IsEmptyString Then - BearerToken.Value = $"Bearer {newToken}" - BearerTokenDateUpdate.Value = Now - Responser.SaveSettings() - result = True - End If - End If + Dim c% = 0 + Dim _found As Boolean + Do + c += 1 + Using resp As New Responser With { + .Method = "POST", + .ProcessExceptionDecision = Function(status, obj, ee) If(status.StatusCode = 429, EDP.ReturnValue, ee) + } + With resp + With .PayLoadValues + .Add("grant_type", "password") + .Add("username", UserName) + .Add("password", Password) + End With + .CredentialsUserName = ClientID + .CredentialsPassword = ClientSecret + .PreAuthenticate = True + End With + r = resp.GetResponse("https://www.reddit.com/api/v1/access_token",, EDP.ThrowException) End Using - End If + If Not r.IsEmptyString Then + Using j As EContainer = JsonDocument.Parse(r) + If j.ListExists Then + _found = True + Dim newToken$ = j.Value("access_token") + If Not newToken.IsEmptyString Then + BearerToken.Value = $"Bearer {newToken}" + BearerTokenDateUpdate.Value = Now + Responser.SaveSettings() + result = True + End If + End If + End Using + End If + Loop While c < 5 And Not _found End If Return result Catch ex As Exception - Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, "[Reddit.SiteSettings.UpdateToken]", False) + Return ErrorsDescriber.Execute(e, ex, "[Reddit.SiteSettings.UpdateToken]", False) End Try End Function #End Region diff --git a/SCrawler/Download/Automation/AutoDownloader.vb b/SCrawler/Download/Automation/AutoDownloader.vb index 1c17a7a..b11bee2 100644 --- a/SCrawler/Download/Automation/AutoDownloader.vb +++ b/SCrawler/Download/Automation/AutoDownloader.vb @@ -324,6 +324,24 @@ Namespace DownloadObjects Initialization = False End Sub #End Region +#Region "ICopier Support" + Friend Overrides Function Copy() As Object + Dim newObj As New AutoDownloader(True) + newObj.Copy(Me) + With newObj + .Name = String.Empty + ._Mode = _Mode + .Groups.ListAddList(Groups, LAP.ClearBeforeAdd) + .Timer = Timer + .StartupDelay = StartupDelay + .ShowNotifications = ShowNotifications + .ShowPictureDownloaded = ShowPictureDownloaded + .ShowPictureUser = ShowPictureUser + .ShowSimpleNotification = ShowSimpleNotification + End With + Return newObj + End Function +#End Region #Region "Groups Support" Friend Sub GROUPS_Updated(ByVal Sender As DownloadGroup) If Groups.Count > 0 Then diff --git a/SCrawler/Download/Automation/SchedulerEditorForm.vb b/SCrawler/Download/Automation/SchedulerEditorForm.vb index 55d79f4..be47944 100644 --- a/SCrawler/Download/Automation/SchedulerEditorForm.vb +++ b/SCrawler/Download/Automation/SchedulerEditorForm.vb @@ -8,10 +8,12 @@ ' but WITHOUT ANY WARRANTY Imports PersonalUtilities.Forms Imports PersonalUtilities.Forms.Toolbars +Imports ECI = PersonalUtilities.Forms.Toolbars.EditToolbar.ControlItem Namespace DownloadObjects Friend Class SchedulerEditorForm #Region "Declarations" Private WithEvents MyDefs As DefaultFormOptions + Private WithEvents BTT_CLONE As ToolStripButton Private ReadOnly MENU_SKIP As ToolStripDropDownButton Private WithEvents BTT_SKIP As ToolStripMenuItem Private WithEvents BTT_SKIP_MIN As ToolStripMenuItem @@ -26,6 +28,13 @@ Namespace DownloadObjects Friend Sub New() InitializeComponent() MyDefs = New DefaultFormOptions(Me, Settings.Design) + BTT_CLONE = New ToolStripButton With { + .Text = "Clone", + .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, + .Image = My.Resources.PlusPic_24, + .ToolTipText = "Create a copy of the selected plan", + .AutoToolTip = True + } MENU_SKIP = New ToolStripDropDownButton With { .Text = "Skip", .ToolTipText = String.Empty, @@ -86,7 +95,7 @@ Namespace DownloadObjects Private Sub SchedulerEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load With MyDefs .MyViewInitialize() - .AddEditToolbarPlus({New ToolStripSeparator, BTT_START, BTT_START_FORCE, MENU_SKIP, BTT_PAUSE}) + .AddEditToolbar({ECI.Add, BTT_CLONE, ECI.Edit, ECI.Delete, ECI.Update, ECI.Separator, BTT_START, BTT_START_FORCE, MENU_SKIP, BTT_PAUSE}) PauseArr.AddButtons(BTT_PAUSE, .MyEditToolbar.ToolStrip) Refill() .EndLoaderOperations(False) @@ -118,17 +127,24 @@ Namespace DownloadObjects End Try End Sub #Region "Add, Edit, Delete" - Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonAddClick - Dim a As New AutoDownloader(True) - Using f As New AutoDownloaderEditorForm(a) - f.ShowDialog() - If f.DialogResult = DialogResult.OK Then - Settings.Automation.Add(a) - Refill() - Else - a.Dispose() - End If - End Using + Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EventArgs) Handles MyDefs.ButtonAddClick, BTT_CLONE.Click + Dim a As AutoDownloader = Nothing + If Sender Is BTT_CLONE Then + If _LatestSelected.ValueBetween(0, Settings.Automation.Count - 1) Then a = Settings.Automation(_LatestSelected).Copy + Else + a = New AutoDownloader(True) + End If + If Not a Is Nothing Then + Using f As New AutoDownloaderEditorForm(a) + f.ShowDialog() + If f.DialogResult = DialogResult.OK Then + Settings.Automation.Add(a) + Refill() + Else + a.Dispose() + End If + End Using + End If End Sub Private Sub Edit() Handles MyDefs.ButtonEditClick If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then diff --git a/SCrawler/Download/DownloadedInfoForm.vb b/SCrawler/Download/DownloadedInfoForm.vb index d984459..c0bde9f 100644 --- a/SCrawler/Download/DownloadedInfoForm.vb +++ b/SCrawler/Download/DownloadedInfoForm.vb @@ -165,33 +165,45 @@ Namespace DownloadObjects #End Region #Region "Toolbar controls" Private Sub MENU_VIEW_Click(ByVal Sender As ToolStripMenuItem, ByVal e As EventArgs) Handles MENU_VIEW_SESSION.Click, MENU_VIEW_ALL.Click - Dim __refill As Boolean = False - Dim clicked As ToolStripMenuItem = Sender - Dim other As ToolStripMenuItem = If(Sender Is MENU_VIEW_SESSION, MENU_VIEW_ALL, MENU_VIEW_SESSION) - If other.Checked Then - clicked.Checked = True - other.Checked = False - __refill = True - Else - clicked.Checked = False - End If - ViewMode = IIf(MENU_VIEW_SESSION.Checked, ViewModes.Session, ViewModes.All) - ControlInvokeFast(ToolbarTOP, BTT_CLEAR, Sub() BTT_CLEAR.Visible = ViewMode = ViewModes.Session) - If __refill Then RefillList() + Try + Dim __refill As Boolean = False + Dim clicked As ToolStripMenuItem = Sender + Dim other As ToolStripMenuItem = If(Sender Is MENU_VIEW_SESSION, MENU_VIEW_ALL, MENU_VIEW_SESSION) + ControlInvokeFast(ToolbarTOP, clicked, Sub() + If other.Checked Then + clicked.Checked = True + other.Checked = False + __refill = True + Else + clicked.Checked = False + End If + ViewMode = IIf(MENU_VIEW_SESSION.Checked, ViewModes.Session, ViewModes.All) + BTT_CLEAR.Visible = ViewMode = ViewModes.Session + End Sub, EDP.SendToLog) + If __refill Then RefillList() + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendToLog, ex, "DownloadedInfoForm.ViewChange") + End Try End Sub Private Sub OPT_Click(ByVal Sender As ToolStripMenuItem, ByVal e As EventArgs) Handles OPT_DEFAULT.Click, OPT_SUBSCRIPTIONS.Click - Dim __refill As Boolean = False - Dim clicked As ToolStripMenuItem = Sender - Dim other As ToolStripMenuItem = If(Sender Is OPT_DEFAULT, OPT_SUBSCRIPTIONS, OPT_DEFAULT) - If other.Checked Then - clicked.Checked = True - other.Checked = False - __refill = True - Else - clicked.Checked = False - End If - Settings.InfoViewDefault.Value = OPT_DEFAULT.Checked - If __refill Then RefillList() + Try + Dim __refill As Boolean = False + Dim clicked As ToolStripMenuItem = Sender + Dim other As ToolStripMenuItem = If(Sender Is OPT_DEFAULT, OPT_SUBSCRIPTIONS, OPT_DEFAULT) + ControlInvokeFast(ToolbarTOP, clicked, Sub() + If other.Checked Then + clicked.Checked = True + other.Checked = False + __refill = True + Else + clicked.Checked = False + End If + End Sub, EDP.SendToLog) + Settings.InfoViewDefault.Value = OPT_DEFAULT.Checked + If __refill Then RefillList() + Catch ex As Exception + ErrorsDescriber.Execute(EDP.SendToLog, ex, "DownloadedInfoForm.SubscriptionChange") + End Try End Sub Private Sub BTT_FIND_Click(sender As Object, e As EventArgs) Handles BTT_FIND.Click Try : RaiseEvent UserFind(If(Settings.GetUser(SelectedUser, True)?.Key, String.Empty)) : Catch : End Try diff --git a/SCrawler/Download/Feed/DownloadFeedForm.vb b/SCrawler/Download/Feed/DownloadFeedForm.vb index 01a90bf..1a29a62 100644 --- a/SCrawler/Download/Feed/DownloadFeedForm.vb +++ b/SCrawler/Download/Feed/DownloadFeedForm.vb @@ -58,8 +58,10 @@ Namespace DownloadObjects LastWinState = WindowState With MyRange .AutoToolTip = True + .Buttons = {RCI.First, RCI.Previous, RCI.Label, RCI.Next, RCI.Last, RCI.Separator, RCI.GoTo} .ButtonKey(RCI.Previous) = Keys.F3 .ButtonKey(RCI.Next) = Keys.F4 + .ButtonKey(RCI.GoTo) = New ButtonKey(Keys.G, True) .AddThisToolbar() End With ToolbarTOP.Items.AddRange({New ToolStripSeparator, BTT_DELETE_SELECTED}) @@ -88,15 +90,7 @@ Namespace DownloadObjects DataList.Clear() End Sub Private Sub DownloadFeedForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown - Dim b As Boolean = True - If e.KeyCode = Keys.F5 Then - RefillList() - ElseIf e.Control And e.KeyCode = Keys.G Then - MyRange.GoToF() - Else - b = False - End If - If b Then e.Handled = True + If e.KeyCode = Keys.F5 Then RefillList() : e.Handled = True End Sub #End Region #Region "Settings" diff --git a/SCrawler/Download/Feed/FeedMedia.vb b/SCrawler/Download/Feed/FeedMedia.vb index 06bc98a..a076948 100644 --- a/SCrawler/Download/Feed/FeedMedia.vb +++ b/SCrawler/Download/Feed/FeedMedia.vb @@ -112,7 +112,7 @@ Namespace DownloadObjects If Media.User.ForeColor.HasValue Then f = Media.User.ForeColor If Media.User.IsSubscription And Media.User.IsUser Then If Not b.HasValue And Settings.MainFrameUsersSubscriptionsColorBack_USERS.Exists Then b = Settings.MainFrameUsersSubscriptionsColorBack_USERS.Value - If Not f.HasValue And Settings.MainFrameUsersSubscriptionsColorFore_USERS.Exists Then b = Settings.MainFrameUsersSubscriptionsColorFore_USERS.Value + If Not f.HasValue And Settings.MainFrameUsersSubscriptionsColorFore_USERS.Exists Then f = Settings.MainFrameUsersSubscriptionsColorFore_USERS.Value End If End If If Not b.HasValue And Settings.FeedBackColor.Exists Then b = Settings.FeedBackColor.Value diff --git a/SCrawler/Download/Groups/GroupParameters.vb b/SCrawler/Download/Groups/GroupParameters.vb index 6451ee9..0efa957 100644 --- a/SCrawler/Download/Groups/GroupParameters.vb +++ b/SCrawler/Download/Groups/GroupParameters.vb @@ -22,7 +22,7 @@ Namespace DownloadObjects.Groups Property SubscriptionsOnly As Boolean Property UsersCount As Integer End Interface - Friend Class GroupParameters : Implements IGroup, IDisposable + Friend Class GroupParameters : Implements IGroup, IDisposable, ICopier Protected Const Name_Name As String = "Name" Protected Const Name_Temporary As String = "Temporary" Protected Const Name_Favorite As String = "Favorite" @@ -53,6 +53,28 @@ Namespace DownloadObjects.Groups Sites = New List(Of String) SitesExcluded = New List(Of String) End Sub +#Region "ICopier Support" + Friend Overridable Overloads Function Copy() As Object Implements ICopier.Copy + Return (New GroupParameters).Copy(Me) + End Function + Friend Overridable Overloads Function Copy(ByVal Source As Object) As Object Implements ICopier.Copy + With DirectCast(Source, GroupParameters) + Name = .Name + Labels.ListAddList(.Labels, LAP.ClearBeforeAdd) + LabelsExcluded.ListAddList(.LabelsExcluded, LAP.ClearBeforeAdd) + Sites.ListAddList(.Sites, LAP.ClearBeforeAdd) + SitesExcluded.ListAddList(.SitesExcluded, LAP.ClearBeforeAdd) + Temporary = .Temporary + Favorite = .Favorite + ReadyForDownload = .ReadyForDownload + ReadyForDownloadIgnore = .ReadyForDownloadIgnore + Subscriptions = .Subscriptions + SubscriptionsOnly = .SubscriptionsOnly + UsersCount = .UsersCount + End With + Return Source + End Function +#End Region Protected Sub Import(ByVal e As EContainer) Name = e.Value(Name_Name) Temporary = e.Value(Name_Temporary).FromXML(Of Integer)(CInt(CheckState.Indeterminate)) diff --git a/SCrawler/Download/MissingPostsForm.vb b/SCrawler/Download/MissingPostsForm.vb index be0d017..5d84ee0 100644 --- a/SCrawler/Download/MissingPostsForm.vb +++ b/SCrawler/Download/MissingPostsForm.vb @@ -22,7 +22,7 @@ Namespace DownloadObjects Private WithEvents BTT_INFO As ToolStripButton #End Region #Region "Initializer" - Friend Sub New() + Public Sub New() InitializeComponent() MUsers = New List(Of IUserData) MyDefs = New DefaultFormOptions(Me, Settings.Design) diff --git a/SCrawler/Editors/UsersInfoForm.vb b/SCrawler/Editors/UsersInfoForm.vb index 2f26053..4632a80 100644 --- a/SCrawler/Editors/UsersInfoForm.vb +++ b/SCrawler/Editors/UsersInfoForm.vb @@ -225,7 +225,7 @@ Namespace Editors #End Region #End Region #Region "Initializer" - Friend Sub New() + Public Sub New() InitializeComponent() MyView = New FormView(Me, Settings.Design) MyProgress = New MyProgress(Toolbar_BOTTOM, PR_MAIN, LBL_STATUS) diff --git a/SCrawler/GlobalSuppressions.vb b/SCrawler/GlobalSuppressions.vb index 94960e5..760fd35 100644 --- a/SCrawler/GlobalSuppressions.vb +++ b/SCrawler/GlobalSuppressions.vb @@ -6,4 +6,6 @@ Imports System.Diagnostics.CodeAnalysis - \ No newline at end of file + + + \ No newline at end of file diff --git a/SCrawler/MainFrame.vb b/SCrawler/MainFrame.vb index 8bd9be7..61a24de 100644 --- a/SCrawler/MainFrame.vb +++ b/SCrawler/MainFrame.vb @@ -418,20 +418,20 @@ CloseResume: End Sub #End Region #Region "Info, Feed, Channels, Saved posts" +#Region "Info" Private Sub MENU_INFO_SHOW_INFO_Click(sender As Object, e As EventArgs) Handles MENU_INFO_SHOW_INFO.Click - InfoForm.FormShow() + InfoForm.FormShow(EDP.LogMessageValue) End Sub Private Sub MENU_INFO_SHOW_QUEUE_Click(sender As Object, e As EventArgs) Handles MENU_INFO_SHOW_QUEUE.Click - DownloadQueue.FormShow() + DownloadQueue.FormShow(EDP.LogMessageValue) End Sub Private Sub MENU_INFO_SHOW_MISSING_Click(sender As Object, e As EventArgs) Handles MENU_INFO_SHOW_MISSING.Click - If MyMissingPosts Is Nothing Then MyMissingPosts = New MissingPostsForm - If MyMissingPosts.Visible Then MyMissingPosts.BringToFront() Else MyMissingPosts.Show() + MyMissingPosts.FormShow(EDP.LogMessageValue) End Sub Private Sub MENU_INFO_SHOW_USER_METRICS_Click(sender As Object, e As EventArgs) Handles MENU_INFO_SHOW_USER_METRICS.Click - If MyUserMetrics Is Nothing Then MyUserMetrics = New UsersInfoForm - MyUserMetrics.FormShowS + MyUserMetrics.FormShow(EDP.LogMessageValue) End Sub +#End Region Private Sub ShowFeed() Handles BTT_FEED.Click, BTT_TRAY_FEED_SHOW.Click If MyFeed Is Nothing Then MyFeed = New DownloadFeedForm : AddHandler Downloader.FeedFilesChanged, AddressOf MyFeed.Downloader_FilesChanged If MyFeed.Visible Then MyFeed.BringToFront() Else MyFeed.Show() diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index 4c93362..ceb8707 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: ' - - + +