Skip to content

Commit 2a60ace

Browse files
committed
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'
1 parent f0014d2 commit 2a60ace

23 files changed

Lines changed: 245 additions & 142 deletions

Changelog.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
1+
# 2023.8.27.0
2+
3+
*2023-08-27*
4+
5+
- Added
6+
- **JustForFans**
7+
- Advanced download (`Download` - `Download (advanced)`)
8+
- Advanced filter (`View` - `Advanced filter`)
9+
- Auto downloader: cloning plans
10+
- Feed: add button to go to custom page
11+
- Special log for non-existent users
12+
- Twitter: group 'limit' notifications
13+
- Ability to set custom color for subscription users
14+
- Other improvements
15+
- Fixed
16+
- Auto downloader: new plan date display bug
17+
- Auto downloader: downloading stuck
18+
- Minor bugs
19+
120
# 2023.8.6.0
221

322
*2023-08-06*
-6.65 KB
Loading
16.1 KB
Loading
18.2 KB
Loading

README.md

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
:eu:
1212
:greece:
1313

14-
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).
14+
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).
1515

1616
**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)**
1717
<!---Do you like this program? Consider adding to my coffee fund by making a donation to show your support. :blush:
@@ -34,6 +34,7 @@ A program to download photo and video from [any site](#supported-sites) (e.g. Yo
3434
- Redgifs videos (https://www.redgifs.com/);
3535
- Twitter images and videos, saved (bookmarked) posts;
3636
- OnlyFans images and videos, saved (bookmarked) posts;
37+
- JustForFans images and videos, saved (bookmarked) posts;
3738
- Mastodon images and videos, saved (bookmarked) posts;
3839
- Instagram images and videos, tagged posts, stories, saved posts;
3940
- TikTok videos;
@@ -72,6 +73,7 @@ A program to download photo and video from [any site](#supported-sites) (e.g. Yo
7273
- **OnlyFans**
7374
- **Mastodon**
7475
- **Instagram**
76+
- JustForFans
7577
- TikTok
7678
- RedGifs
7779
- Pinterest
@@ -90,14 +92,6 @@ A program to download photo and video from [any site](#supported-sites) (e.g. Yo
9092

9193
First, the program downloads the full profile. After the program downloads only new posts. The program remembers downloaded posts.
9294

93-
## Reddit
94-
95-
The program parses user posts, obtain MD5 images hash and compares them with existing ones to remove duplicates. Then the media will be downloaded.
96-
97-
## Other sites
98-
99-
The program parses user posts and compares file names with existing ones to remove duplicates. Then the media will be downloaded.
100-
10195
## How to request a new site
10296

10397
<!---Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about--->
@@ -128,16 +122,17 @@ The program parses user posts and compares file names with existing ones to remo
128122
- [Reddit](https://github.com/AAndyProgram/SCrawler/wiki/Settings#reddit)
129123
- [Twitter](https://github.com/AAndyProgram/SCrawler/wiki/Settings#twitter)
130124
- [OnlyFans](https://github.com/AAndyProgram/SCrawler/wiki/Settings#onlyfans)
131-
- [Mastodon](https://github.com/AAndyProgram/SCrawler/wiki/Settings#Mastodon)
125+
- [Mastodon](https://github.com/AAndyProgram/SCrawler/wiki/Settings#mastodon)
132126
- [Instagram](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram)
127+
- [JustForFans](https://github.com/AAndyProgram/SCrawler/wiki/Settings#justforfans)
133128
- [TikTok](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok)
134129
- [RedGifs](https://github.com/AAndyProgram/SCrawler/wiki/Settings#redgifs)
135-
- [YouTube](https://github.com/AAndyProgram/SCrawler/wiki/Settings#YouTube)
130+
- [YouTube](https://github.com/AAndyProgram/SCrawler/wiki/Settings#youtube)
136131
- [Pinterest](https://github.com/AAndyProgram/SCrawler/wiki/Settings#Pinterest)
137132
- [PornHub](https://github.com/AAndyProgram/SCrawler/wiki/Settings#pornhub)
138133
- [XHamster](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xhamster)
139134
- [XVIDEOS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xvideos)
140-
- [ThisVid](https://github.com/AAndyProgram/SCrawler/wiki/Settings#ThisVid)
135+
- [ThisVid](https://github.com/AAndyProgram/SCrawler/wiki/Settings#thisvid)
141136
- [LPSG](https://github.com/AAndyProgram/SCrawler/wiki/Settings#lpsg)
142137

143138
**Full guide you can find [here](https://github.com/AAndyProgram/SCrawler/wiki)**

SCrawler.YouTube/My Project/AssemblyInfo.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
3232
' by using the '*' as shown below:
3333
' <Assembly: AssemblyVersion("1.0.*")>
3434

35-
<Assembly: AssemblyVersion("2023.8.17.0")>
36-
<Assembly: AssemblyFileVersion("2023.8.17.0")>
35+
<Assembly: AssemblyVersion("2023.8.27.0")>
36+
<Assembly: AssemblyFileVersion("2023.8.27.0")>
3737
<Assembly: NeutralResourcesLanguage("en")>

SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
3232
' by using the '*' as shown below:
3333
' <Assembly: AssemblyVersion("1.0.*")>
3434

35-
<Assembly: AssemblyVersion("2023.8.17.0")>
36-
<Assembly: AssemblyFileVersion("2023.8.17.0")>
35+
<Assembly: AssemblyVersion("2023.8.27.0")>
36+
<Assembly: AssemblyFileVersion("2023.8.27.0")>
3737
<Assembly: NeutralResourcesLanguage("en")>

SCrawler/API/Base/UserDataBase.vb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1448,7 +1448,7 @@ BlockNullPicture:
14481448
For i = 0 To _ContentList.Count - 1
14491449
data = _ContentList(i)
14501450
ProgressPre.Perform()
1451-
If (data.Type = UTypes.GIF Or data.Type = UTypes.Picture) Then
1451+
If data.Type = UTypes.GIF Or data.Type = UTypes.Picture Then
14521452
If data.MD5.IsEmptyString Then
14531453
ThrowAny(Token)
14541454
eIndx = existingFiles.FindIndex(eFinder)

SCrawler/API/JustForFans/SiteSettings.vb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,9 @@ Namespace API.JustForFans
3030
Friend ReadOnly Property UserID As PropertyValue
3131
<PropertyOption, PXML>
3232
Friend ReadOnly Property UserHash4 As PropertyValue
33-
<PropertyOption(ControlText:="Accept", ControlToolTip:="Header 'Accept'"), PXML>
33+
<PropertyOption(ControlText:="Accept", ControlToolTip:="Header 'Accept'")>
3434
Friend ReadOnly Property HeaderAccept As PropertyValue
35-
<PropertyOption, PXML>
36-
Friend ReadOnly Property UserAgent As PropertyValue
35+
<PropertyOption> Friend ReadOnly Property UserAgent As PropertyValue
3736
Private Sub UpdateHeader(ByVal HeaderName As String, ByVal HeaderValue As String)
3837
Select Case HeaderName
3938
Case NameOf(HeaderAccept) : If HeaderValue.IsEmptyString Then Responser.Accept = Nothing Else Responser.Accept = HeaderValue

SCrawler/API/Reddit/Channel.vb

Lines changed: 49 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -270,13 +270,14 @@ Namespace API.Reddit
270270
End With
271271
Dim b% = Posts.Count
272272
Posts.ListAddList(d.GetNewChannelPosts(), LNC)
273-
If Posts.Count - b > 0 Then CountOfLoadedPostsPerSession.Add(Posts.Count - b)
273+
If Posts.Count - b > 0 Then _Saved = False : CountOfLoadedPostsPerSession.Add(Posts.Count - b)
274274
Posts.Sort()
275275
LatestParsedDate = If(Posts.FirstOrDefault(Function(pp) pp.Date.HasValue).Date, LatestParsedDate)
276276
UpdateUsersStats()
277277
End Using
278278
Catch oex As OperationCanceledException When Token.IsCancellationRequested
279279
Finally
280+
SaveUnsaved()
280281
_Downloading = False
281282
End Try
282283
End Sub
@@ -344,68 +345,75 @@ Namespace API.Reddit
344345
Using x As New XmlFile(f, Protector.Modes.All, False) With {.XmlReadOnly = True, .AllowSameNames = True}
345346
x.LoadData()
346347
If x.Count > 0 Then
347-
Dim XMLDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
348348
Dim lc As New ListAddParams(LAP.ClearBeforeAdd)
349349
Name = x.Value(Name_Name)
350350
ID = x.Value(Name_ID)
351351
ViewMode = x.Value(Name_ViewMode).FromXML(Of Integer)(CInt(View.[New]))
352352
ViewPeriod = x.Value(Name_ViewPeriod).FromXML(Of Integer)(CInt(Period.All))
353353
If FilePosts.Exists Then PostsNames.ListAddList(FilePosts.GetText.StringToList(Of String)("|"), LNC)
354-
LatestParsedDate = AConvert(Of Date)(x.Value(Name_Date), XMLDateProvider, Nothing)
354+
LatestParsedDate = AConvert(Of Date)(x.Value(Name_Date), DateTimeDefaultProvider, Nothing)
355355
CountOfAddedUsers.ListAddList(x.Value(Name_UsersAdded).StringToList(Of Integer)("|"), lc)
356356
CountOfLoadedPostsPerSession.ListAddList(x.Value(Name_PostsDownloaded).StringToList(Of Integer)("|"), lc)
357357
ChannelExistentUserNames.ListAddList(x.Value(Name_UsersExistent).StringToList(Of String)("|"), LNC)
358358
If Not PartialLoad Then
359359
With x(Name_PostsNode).XmlIfNothing
360360
If .Count > 0 Then .ForEach(Sub(ee) PostsLatest.Add(New UserPost With {
361361
.ID = ee.Attribute(Name_ID),
362-
.[Date] = AConvert(Of Date)(ee.Attribute(Name_Date).Value, XMLDateProvider, Nothing)}))
362+
.[Date] = AConvert(Of Date)(ee.Attribute(Name_Date).Value, DateTimeDefaultProvider, Nothing)}))
363363
End With
364364
End If
365365
End If
366366
End Using
367367
End If
368368
Return True
369369
End Function
370+
Private _Saved As Boolean = True
371+
Friend Function SaveUnsaved() As Boolean
372+
Return _Saved OrElse Save()
373+
End Function
370374
Friend Overloads Function Save(Optional ByVal f As SFile = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean Implements ILoaderSaver.Save
371-
Dim XMLDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
372-
UpdateUsersStats()
373-
If Not ViewMode = View.New Then
374-
Dim l As New List(Of String)
375-
If Posts.Count > 0 Or PostsLatest.Count > 0 Then l.ListAddList((From p In PostsAll Where Not p.ID.IsEmptyString Select p.ID), LNC)
376-
l.ListAddList(PostsNames, LNC)
377-
If l.Count > 0 Then TextSaver.SaveTextToFile(l.ListToString("|"), FilePosts, True,, EDP.SendToLog)
378-
End If
379-
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Channel"}
380-
x.Add(Name_Name, Name)
381-
x.Add(Name_ID, ID)
382-
x.Add(Name_ViewMode, CInt(ViewMode))
383-
x.Add(Name_ViewPeriod, CInt(ViewPeriod))
384-
x.Add(Name_UsersAdded, CountOfAddedUsers.ListToString("|"))
385-
x.Add(Name_PostsDownloaded, CountOfLoadedPostsPerSession.ListToString("|"))
386-
x.Add(Name_UsersExistent, ChannelExistentUserNames.ListToString("|"))
387-
If Posts.Count > 0 Or PostsLatest.Count > 0 Then
388-
Dim tmpPostList As List(Of UserPost) = Nothing
389-
tmpPostList.ListAddList(Posts).ListAddList(PostsLatest)
390-
tmpPostList.Sort()
391-
LatestParsedDate = tmpPostList.FirstOrDefault(Function(pd) pd.Date.HasValue).Date
392-
x.Add(Name_Date, AConvert(Of String)(LatestParsedDate, XMLDateProvider, String.Empty))
393-
x.Add(Name_PostsNode, String.Empty)
394-
With x(Name_PostsNode)
395-
tmpPostList.Take(200).ToList.ForEach(Sub(p) .Add(New EContainer("Post",
396-
String.Empty,
397-
{
398-
New EAttribute(Name_ID, p.ID),
399-
New EAttribute(Name_Date, AConvert(Of String)(p.Date, XMLDateProvider, String.Empty))
400-
})
401-
)
402-
)
403-
End With
404-
tmpPostList.Clear()
375+
Try
376+
UpdateUsersStats()
377+
If Not ViewMode = View.New Then
378+
Dim l As New List(Of String)
379+
If Posts.Count > 0 Or PostsLatest.Count > 0 Then l.ListAddList((From p In PostsAll Where Not p.ID.IsEmptyString Select p.ID), LNC)
380+
l.ListAddList(PostsNames, LNC)
381+
If l.Count > 0 Then TextSaver.SaveTextToFile(l.ListToString("|"), FilePosts, True,, EDP.SendToLog)
405382
End If
406-
x.Save(File)
407-
End Using
408-
Return True
383+
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Channel"}
384+
x.Add(Name_Name, Name)
385+
x.Add(Name_ID, ID)
386+
x.Add(Name_ViewMode, CInt(ViewMode))
387+
x.Add(Name_ViewPeriod, CInt(ViewPeriod))
388+
x.Add(Name_UsersAdded, CountOfAddedUsers.ListToString("|"))
389+
x.Add(Name_PostsDownloaded, CountOfLoadedPostsPerSession.ListToString("|"))
390+
x.Add(Name_UsersExistent, ChannelExistentUserNames.ListToString("|"))
391+
If Posts.Count > 0 Or PostsLatest.Count > 0 Then
392+
Dim tmpPostList As List(Of UserPost) = Nothing
393+
tmpPostList.ListAddList(Posts).ListAddList(PostsLatest)
394+
tmpPostList.Sort()
395+
LatestParsedDate = tmpPostList.FirstOrDefault(Function(pd) pd.Date.HasValue).Date
396+
x.Add(Name_Date, AConvert(Of String)(LatestParsedDate, DateTimeDefaultProvider, String.Empty))
397+
x.Add(Name_PostsNode, String.Empty)
398+
With x(Name_PostsNode)
399+
tmpPostList.Take(200).ToList.ForEach(Sub(p) .Add(New EContainer("Post",
400+
String.Empty,
401+
{
402+
New EAttribute(Name_ID, p.ID),
403+
New EAttribute(Name_Date, AConvert(Of String)(p.Date, DateTimeDefaultProvider, String.Empty))
404+
})
405+
)
406+
)
407+
End With
408+
tmpPostList.Clear()
409+
End If
410+
_Saved = x.Save(File)
411+
End Using
412+
Return True
413+
Catch ex As Exception
414+
If Not e.Exists Then e = EDP.ReturnValue
415+
Return ErrorsDescriber.Execute(e, ex, "API.Reddit.Channel.Save", _Saved)
416+
End Try
409417
End Function
410418
#End Region
411419
#Region "IDisposable Support"

0 commit comments

Comments
 (0)