Compare commits

...

8 Commits

Author SHA1 Message Date
Andy
67c4b25d22 1.0.0.4
Add full channel support, make ready for download prop available for collections and multiusers
Fixed imgur pics compatibility
Updated abstract classes and functions for channels compatibility
2021-12-12 14:47:34 +03:00
Andy
70e73c7d97 1.0.0.3
Fix typo in properties, re-enabling the "Download all" button after changing the mode, removed unused elements
2021-12-11 07:44:43 +03:00
Andy
4acef31c99 Update README.md 2021-12-10 14:33:38 +03:00
Andy
55a28a7d89 1.0.0.2
Add: downloading certain types of media, name files by date
Fix: Stop button is not activated after download start
2021-12-10 13:59:23 +03:00
Andy
c7dc0eca7d 1.0.0.1
Added: limited downloads, remove active downloads, simulation tasks management, copy channel image, x86
Removed reparse function
Fixed some errors, typo and Reddit parsing algo
2021-12-09 18:36:22 +03:00
Andy
6979ca018e Update README.md
Added links to download ffmpeg library
2021-12-07 15:30:31 +03:00
Andy
72f247be53 Update README.md 2021-12-07 10:14:18 +03:00
Andy
b2093396da Update README.md 2021-12-07 10:05:36 +03:00
28 changed files with 1728 additions and 474 deletions

47
Changelog.md Normal file
View File

@@ -0,0 +1,47 @@
# 1.0.0.4
- Added
- Full channels support (you can now add channel (subreddit) for standard download)
- ```Ready for download``` now available for collections and can be changed for multiple user
- Fixed
- Images hosted on Imgur won't download
# 1.0.0.3
- Fixed
- Custom "Download videos" option is not saved
- The "Download all" button is not activated after changing modes
# 1.0.0.2
- Added
- Ability to choose what types of media you want to download (images only, videos only, both)
- Ability to name files by date
- Fixed
- In some cases, the "Stop" button is not activated after download start
# 1.0.0.1
- Added
- Limited download if user added from the channel
- Forced limited download for any user
- x86 compatibility
- Coping user image posted in the channel (if user added from the channel)
- Check for new version at start setting
- Removing currently downloading user
- Change maximum count of along downloading tasks of users
- Change maximum count of along downloading tasks of channels
- Removed
- Reparse not downloaded content (left from the older versions)
- Fixed
- ```No Label``` and ```No Parsed``` labels does not shown in the labels list
- User list does not refresh by labels change in the main window
- Disabled collection editing
- Collection name does not show in some operations
- Error (in some cases) on add to collection
- Wrong some Reddit videos parsing
- Wrong some Reddit images parsing
# 1.0.0.0
Initial release

View File

@@ -7,7 +7,7 @@ Enjoying the tool? Considering adding to my coffee fund :)
[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/andyprogram) [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/andyprogram)
# What can program do: # What can program do:
- Download pictures and videos from users' profiles: - Download pictures and videos from users' profiles and subreddits:
- Reddit images; - Reddit images;
- Reddit galleries of images; - Reddit galleries of images;
- Redgifs hosted videos (https://www.redgifs.com/); - Redgifs hosted videos (https://www.redgifs.com/);
@@ -18,6 +18,7 @@ Enjoying the tool? Considering adding to my coffee fund :)
- Add users from parsed channel. - Add users from parsed channel.
- Labeling users. - Labeling users.
- Filter exists users by label or group. - Filter exists users by label or group.
- Selection of media types you want to download (images only, videos only, both)
# How does it works: # How does it works:
@@ -33,6 +34,7 @@ The program parsing all user's posts and compare file names with existing for re
- Windows 7, 8, 9, 10, 11 with NET Framework 4.6.1 or higher - Windows 7, 8, 9, 10, 11 with NET Framework 4.6.1 or higher
- Authorization cookies and tokens for Twitter (if you want to download data from Twitter) - Authorization cookies and tokens for Twitter (if you want to download data from Twitter)
- ffmpeg library for download Reddit hosted videos (you can download it from the [official repo](https://github.com/GyanD/codexffmpeg/releases/tag/2021-01-12-git-ca21cb1e36) or [from my first release](https://github.com/AAndyProgram/SCrawler/releases/download/1.0.0.0/ffmpeg.zip))
- Don't put program in the ```Program Files``` system folder (this is portable program and program settings are stored in the program folder) - Don't put program in the ```Program Files``` system folder (this is portable program and program settings are stored in the program folder)
- Just unpack program archive in any folder you want, copy ```ffmpeg.exe``` into and enjoy. :-) - Just unpack program archive in any folder you want, copy ```ffmpeg.exe``` into and enjoy. :-)
@@ -45,10 +47,15 @@ Just add user profile and press ```Start downloading``` button.
Users can be added by patterns: Users can be added by patterns:
- https://twitter.com/SomeUserName - https://twitter.com/SomeUserName
- https://reddit.com/user/SomeUserName - https://reddit.com/user/SomeUserName
- https://reddit.com/r/SomeSubredditName
- u/SomeUserName - u/SomeUserName
- r/SomeSubredditName
- SomeUserName (in this case you must to choose user site) - SomeUserName (in this case you must to choose user site)
- SomeSubredditName
More about users adding here More about users and subreddits adding [here](https://github.com/AAndyProgram/SCrawler/wiki/Users)
**Full guide you can find [here](https://github.com/AAndyProgram/SCrawler/wiki)**
## Using program as just video downloader ## Using program as just video downloader

View File

@@ -10,8 +10,10 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FE5CE5B9-DDBE-4399-A17C-880893635307}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FE5CE5B9-DDBE-4399-A17C-880893635307}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
.gitignore = .gitignore .gitignore = .gitignore
Changelog.md = Changelog.md
README.md = README.md README.md = README.md
Info\RedditUrlsInfo.txt = Info\RedditUrlsInfo.txt Info\RedditUrlsInfo.txt = Info\RedditUrlsInfo.txt
ToDo.txt = ToDo.txt
Info\TwitterNewAlgo.txt = Info\TwitterNewAlgo.txt Info\TwitterNewAlgo.txt = Info\TwitterNewAlgo.txt
Info\TwitterUrlsInfo.txt = Info\TwitterUrlsInfo.txt Info\TwitterUrlsInfo.txt = Info\TwitterUrlsInfo.txt
EndProjectSection EndProjectSection

View File

@@ -33,6 +33,7 @@ Namespace API.Base
#End Region #End Region
#Region "XML Declarations" #Region "XML Declarations"
Private Const Name_Site As String = "Site" Private Const Name_Site As String = "Site"
Private Const Name_IsChannel As String = "IsChannel"
Private Const Name_UserName As String = "UserName" Private Const Name_UserName As String = "UserName"
Private Const Name_FriendlyName As String = "FriendlyName" Private Const Name_FriendlyName As String = "FriendlyName"
Private Const Name_UserID As String = "UserID" Private Const Name_UserID As String = "UserID"
@@ -40,12 +41,15 @@ Namespace API.Base
Private Const Name_ParseUserMediaOnly As String = "ParseUserMediaOnly" Private Const Name_ParseUserMediaOnly As String = "ParseUserMediaOnly"
Private Const Name_Temporary As String = "Temporary" Private Const Name_Temporary As String = "Temporary"
Private Const Name_Favorite As String = "Favorite" Private Const Name_Favorite As String = "Favorite"
Private Const Name_CreatedByChannel As String = "CreatedByChannel"
Private Const Name_SeparateVideoFolder As String = "SeparateVideoFolder" Private Const Name_SeparateVideoFolder As String = "SeparateVideoFolder"
Private Const Name_CollectionName As String = "Collection" Private Const Name_CollectionName As String = "Collection"
Private Const Name_LabelsName As String = "Labels" Private Const Name_LabelsName As String = "Labels"
Private Const Name_ReadyForDownload As String = "ReadyForDownload" Private Const Name_ReadyForDownload As String = "ReadyForDownload"
Private Const Name_DownloadImages As String = "DownloadImages"
Private Const Name_DownloadVideos As String = "DownloadVideos"
Private Const Name_VideoCount As String = "VideoCount" Private Const Name_VideoCount As String = "VideoCount"
Private Const Name_PicturesCount As String = "PicturesCount" Private Const Name_PicturesCount As String = "PicturesCount"
@@ -103,6 +107,7 @@ Namespace API.Base
Return User.IsChannel Return User.IsChannel
End Get End Get
End Property End Property
Friend Property CreatedByChannel As Boolean = False
Friend ReadOnly Property Self As IUserData Implements IUserData.Self Friend ReadOnly Property Self As IUserData Implements IUserData.Self
Get Get
Return Me Return Me
@@ -127,7 +132,7 @@ Namespace API.Base
Protected Function GetNullPicture(ByVal MaxHeigh As XML.Base.XMLValue(Of Integer)) As Bitmap Protected Function GetNullPicture(ByVal MaxHeigh As XML.Base.XMLValue(Of Integer)) As Bitmap
Return New Bitmap(CInt(DivideWithZeroChecking(MaxHeigh.Value, 100) * 75), MaxHeigh.Value) Return New Bitmap(CInt(DivideWithZeroChecking(MaxHeigh.Value, 100) * 75), MaxHeigh.Value)
End Function End Function
Private Function GetPicture(Optional ByVal ReturnNullImageOnNothing As Boolean = True) As Image Protected Function GetPicture(Optional ByVal ReturnNullImageOnNothing As Boolean = True) As Image
Dim f As SFile = Nothing Dim f As SFile = Nothing
Dim p As UserImage = Nothing Dim p As UserImage = Nothing
Dim DelPath As Boolean = True Dim DelPath As Boolean = True
@@ -230,12 +235,13 @@ BlockNullPicture:
#Region "Downloading params" #Region "Downloading params"
Protected _DataLoaded As Boolean = False Protected _DataLoaded As Boolean = False
Protected _DataParsed As Boolean = False Protected _DataParsed As Boolean = False
Friend Property ReadyForDownload As Boolean = True Implements IUserData.ReadyForDownload Friend Overridable Property ReadyForDownload As Boolean = True Implements IUserData.ReadyForDownload
Friend Property DownloadImages As Boolean = True Implements IUserData.DownloadImages
Friend Property DownloadVideos As Boolean = True Implements IUserData.DownloadVideos
#End Region #End Region
#Region "Content" #Region "Content"
Protected ReadOnly _ContentList As List(Of UserMedia) Protected ReadOnly _ContentList As List(Of UserMedia)
Protected ReadOnly _ContentNew As List(Of UserMedia) Protected ReadOnly _ContentNew As List(Of UserMedia)
Protected ReadOnly _ContentForReparse As List(Of UserMedia)
Protected ReadOnly _TempMediaList As List(Of UserMedia) Protected ReadOnly _TempMediaList As List(Of UserMedia)
Protected ReadOnly _TempPostsList As List(Of String) Protected ReadOnly _TempPostsList As List(Of String)
#End Region #End Region
@@ -250,8 +256,6 @@ BlockNullPicture:
End Set End Set
End Property End Property
Protected MyFileData As SFile Protected MyFileData As SFile
Protected MyFileDataR As SFile
Protected MyFileDataRV As SFile
Protected MyFilePosts As SFile Protected MyFilePosts As SFile
Friend Overridable Property FileExists As Boolean = False Implements IUserData.FileExists Friend Overridable Property FileExists As Boolean = False Implements IUserData.FileExists
Friend Overridable Property DataMerging As Boolean Friend Overridable Property DataMerging As Boolean
@@ -398,7 +402,6 @@ BlockNullPicture:
_InvokeImageHandler = InvokeImageHandler _InvokeImageHandler = InvokeImageHandler
_ContentList = New List(Of UserMedia) _ContentList = New List(Of UserMedia)
_ContentNew = New List(Of UserMedia) _ContentNew = New List(Of UserMedia)
_ContentForReparse = New List(Of UserMedia)
_TempMediaList = New List(Of UserMedia) _TempMediaList = New List(Of UserMedia)
_TempPostsList = New List(Of String) _TempPostsList = New List(Of String)
Labels = New List(Of String) Labels = New List(Of String)
@@ -407,7 +410,12 @@ BlockNullPicture:
''' <exception cref="ArgumentOutOfRangeException"></exception> ''' <exception cref="ArgumentOutOfRangeException"></exception>
Friend Overloads Shared Function GetInstance(ByVal u As UserInfo, Optional ByVal _LoadUserInformation As Boolean = True) As IUserData Friend Overloads Shared Function GetInstance(ByVal u As UserInfo, Optional ByVal _LoadUserInformation As Boolean = True) As IUserData
Select Case u.Site Select Case u.Site
Case Sites.Reddit : Return New Reddit.UserData(u, _LoadUserInformation) Case Sites.Reddit
If u.IsChannel Then
Return New Reddit.Channel(u, _LoadUserInformation)
Else
Return New Reddit.UserData(u, _LoadUserInformation)
End If
Case Sites.Twitter : Return New Twitter.UserData(u, _LoadUserInformation) Case Sites.Twitter : Return New Twitter.UserData(u, _LoadUserInformation)
Case Else : Throw New ArgumentOutOfRangeException("Site", $"Site [{u.Site}] information does not recognized by loader") Case Else : Throw New ArgumentOutOfRangeException("Site", $"Site [{u.Site}] information does not recognized by loader")
End Select End Select
@@ -430,8 +438,11 @@ BlockNullPicture:
ParseUserMediaOnly = x.Value(Name_ParseUserMediaOnly).FromXML(Of Boolean)(False) ParseUserMediaOnly = x.Value(Name_ParseUserMediaOnly).FromXML(Of Boolean)(False)
Temporary = x.Value(Name_Temporary).FromXML(Of Boolean)(False) Temporary = x.Value(Name_Temporary).FromXML(Of Boolean)(False)
Favorite = x.Value(Name_Favorite).FromXML(Of Boolean)(False) Favorite = x.Value(Name_Favorite).FromXML(Of Boolean)(False)
CreatedByChannel = x.Value(Name_CreatedByChannel).FromXML(Of Boolean)(False)
SeparateVideoFolder = AConvert(Of Boolean)(x.Value(Name_SeparateVideoFolder), Nothing) SeparateVideoFolder = AConvert(Of Boolean)(x.Value(Name_SeparateVideoFolder), Nothing)
ReadyForDownload = x.Value(Name_ReadyForDownload).FromXML(Of Boolean)(True) ReadyForDownload = x.Value(Name_ReadyForDownload).FromXML(Of Boolean)(True)
DownloadImages = x.Value(Name_DownloadImages).FromXML(Of Boolean)(True)
DownloadVideos = x.Value(Name_DownloadVideos).FromXML(Of Boolean)(True)
_CountVideo = x.Value(Name_VideoCount).FromXML(Of Integer)(0) _CountVideo = x.Value(Name_VideoCount).FromXML(Of Integer)(0)
_CountPictures = x.Value(Name_PicturesCount).FromXML(Of Integer)(0) _CountPictures = x.Value(Name_PicturesCount).FromXML(Of Integer)(0)
LastUpdated = AConvert(Of Date)(x.Value(Name_LastUpdated), ADateTime.Formats.BaseDateTime, Nothing) LastUpdated = AConvert(Of Date)(x.Value(Name_LastUpdated), ADateTime.Formats.BaseDateTime, Nothing)
@@ -440,7 +451,6 @@ BlockNullPicture:
Labels.ListAddList(x.Value(Name_LabelsName).StringToList(Of String, List(Of String))("|", EDP.ReturnValue), LAP.NotContainsOnly, LAP.ClearBeforeAdd) Labels.ListAddList(x.Value(Name_LabelsName).StringToList(Of String, List(Of String))("|", EDP.ReturnValue), LAP.NotContainsOnly, LAP.ClearBeforeAdd)
End Using End Using
UpdateDataFiles() UpdateDataFiles()
_DataForReparseExists = MyFileDataR.Exists
End If End If
Catch ex As Exception Catch ex As Exception
LogError(ex, "user information loading error") LogError(ex, "user information loading error")
@@ -458,12 +468,15 @@ BlockNullPicture:
x.Add(Name_ParseUserMediaOnly, ParseUserMediaOnly.BoolToInteger) x.Add(Name_ParseUserMediaOnly, ParseUserMediaOnly.BoolToInteger)
x.Add(Name_Temporary, Temporary.BoolToInteger) x.Add(Name_Temporary, Temporary.BoolToInteger)
x.Add(Name_Favorite, Favorite.BoolToInteger) x.Add(Name_Favorite, Favorite.BoolToInteger)
x.Add(Name_CreatedByChannel, CreatedByChannel.BoolToInteger)
If SeparateVideoFolder.HasValue Then If SeparateVideoFolder.HasValue Then
x.Add(Name_SeparateVideoFolder, SeparateVideoFolder.Value.BoolToInteger) x.Add(Name_SeparateVideoFolder, SeparateVideoFolder.Value.BoolToInteger)
Else Else
x.Add(Name_SeparateVideoFolder, String.Empty) x.Add(Name_SeparateVideoFolder, String.Empty)
End If End If
x.Add(Name_ReadyForDownload, ReadyForDownload.BoolToInteger) x.Add(Name_ReadyForDownload, ReadyForDownload.BoolToInteger)
x.Add(Name_DownloadImages, DownloadImages.BoolToInteger)
x.Add(Name_DownloadVideos, DownloadVideos.BoolToInteger)
x.Add(Name_VideoCount, _CountVideo) x.Add(Name_VideoCount, _CountVideo)
x.Add(Name_PicturesCount, _CountPictures) x.Add(Name_PicturesCount, _CountPictures)
x.Add(Name_LastUpdated, AConvert(Of String)(LastUpdated, ADateTime.Formats.BaseDateTime, String.Empty)) x.Add(Name_LastUpdated, AConvert(Of String)(LastUpdated, ADateTime.Formats.BaseDateTime, String.Empty))
@@ -483,9 +496,6 @@ BlockNullPicture:
Friend Overridable Overloads Sub LoadContentInformation() Friend Overridable Overloads Sub LoadContentInformation()
UpdateDataFiles() UpdateDataFiles()
LoadContentInformation(_ContentList, MyFileData) LoadContentInformation(_ContentList, MyFileData)
LoadContentInformation(_ContentForReparse, MyFileDataR)
LoadContentInformation(_TempMediaList, MyFileDataRV)
_DataForReparseExists = False
End Sub End Sub
Private Overloads Sub LoadContentInformation(ByRef _CLIST As List(Of UserMedia), ByVal f As SFile) Private Overloads Sub LoadContentInformation(ByRef _CLIST As List(Of UserMedia), ByVal f As SFile)
Try Try
@@ -556,7 +566,7 @@ BlockNullPicture:
Try Try
Dim URL$ = String.Empty Dim URL$ = String.Empty
Select Case Site Select Case Site
Case Sites.Reddit : URL = $"https://www.reddit.com/user/{Name}/" Case Sites.Reddit : URL = $"https://www.reddit.com/{IIf(IsChannel, "r", "user")}/{Name}/"
Case Sites.Twitter : URL = $"https://twitter.com/{Name}" Case Sites.Twitter : URL = $"https://twitter.com/{Name}"
Case Else : MsgBoxE($"Site [{Site}] opening does not implemented", MsgBoxStyle.Exclamation) Case Else : MsgBoxE($"Site [{Site}] opening does not implemented", MsgBoxStyle.Exclamation)
End Select End Select
@@ -570,13 +580,7 @@ BlockNullPicture:
End Sub End Sub
#End Region #End Region
#Region "Download functions and options" #Region "Download functions and options"
Friend Overridable Property DownloadReparseOnly As Boolean = False Implements IUserData.DownloadReparseOnly Friend Overridable Property DownloadTopCount As Integer? = Nothing Implements IUserData.DownloadTopCount
Private _DataForReparseExists As Boolean = False
Friend Overridable ReadOnly Property DataForReparseExists As Boolean Implements IUserData.DataForReparseExists
Get
Return _ContentForReparse.Count > 0 Or _DataForReparseExists
End Get
End Property
Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData
Dim Canceled As Boolean = False Dim Canceled As Boolean = False
Try Try
@@ -586,79 +590,66 @@ BlockNullPicture:
_DownloadedVideosSession = 0 _DownloadedVideosSession = 0
_TempMediaList.Clear() _TempMediaList.Clear()
_TempPostsList.Clear() _TempPostsList.Clear()
Dim __SaveData As Boolean = Not CreatedByChannel Or Not Settings.FromChannelDownloadTopUse
If Not _DataLoaded Then LoadContentInformation() If Not _DataLoaded Then LoadContentInformation()
If Not DownloadReparseOnly Then
If MyFilePosts.Exists Then _TempPostsList.ListAddList(File.ReadAllLines(MyFilePosts)) If MyFilePosts.Exists Then _TempPostsList.ListAddList(File.ReadAllLines(MyFilePosts))
If _ContentList.Count > 0 Then _TempPostsList.ListAddList(_ContentList.Select(Function(u) u.Post.ID), LNC) If _ContentList.Count > 0 Then _TempPostsList.ListAddList(_ContentList.Select(Function(u) u.Post.ID), LNC)
Token.ThrowIfCancellationRequested() ThrowAny(Token)
DownloadDataF(Token) DownloadDataF(Token)
Token.ThrowIfCancellationRequested() ThrowAny(Token)
If _TempMediaList.Count > 0 Then
If Not DownloadImages Then _TempMediaList.RemoveAll(Function(m) m.Type = UserMedia.Types.GIF Or m.Type = UserMedia.Types.Picture)
If Not DownloadVideos Then _TempMediaList.RemoveAll(Function(m) m.Type = UserMedia.Types.Video Or
m.Type = UserMedia.Types.VideoPre Or m.Type = UserMedia.Types.m3u8)
End If End If
ReparseVideo(Token) ReparseVideo(Token)
If Token.IsCancellationRequested Then ThrowAny(Token)
If Not DownloadReparseOnly Then If _TempPostsList.Count > 0 And __SaveData Then TextSaver.SaveTextToFile(_TempPostsList.ListToString(, Environment.NewLine), MyFilePosts, True,, EDP.None)
If _TempMediaList.Count > 0 AndAlso _TempMediaList.Exists(Function(c) c.Type = UserMedia.Types.VideoPre) Then
TextSaver.SaveTextToFile((From c As UserMedia In _TempMediaList
Where c.Type = UserMedia.Types.VideoPre
Select c.URL).ListToString(, Environment.NewLine), MyFileDataRV, True,, EDP.SendInLog)
Else
If MyFileDataRV.Exists Then MyFileDataRV.Delete(,,, EDP.SendInLog)
End If
End If
Else
If Not DownloadReparseOnly And _TempPostsList.Count > 0 Then TextSaver.SaveTextToFile(_TempPostsList.ListToString(, Environment.NewLine), MyFilePosts, True,, EDP.None)
_ContentNew.ListAddList(_TempMediaList, LAP.ClearBeforeAdd) _ContentNew.ListAddList(_TempMediaList, LAP.ClearBeforeAdd)
End If
Dim r% = 0
Do While r <= 2 And (_ContentNew.Count > 0 Or _ContentForReparse.Count > 0) And Not Token.IsCancellationRequested
DownloadContent(Token) DownloadContent(Token)
If _ContentNew.Count > 0 Then ThrowIfDisposed()
_ContentForReparse.ListAddList(_ContentNew.Where(Function(c) c.State = UState.Tried Or c.State = UState.Unknown), LNC)
_ContentList.ListAddList(_ContentNew.Where(Function(c) c.State = UState.Downloaded), LNC) _ContentList.ListAddList(_ContentNew.Where(Function(c) c.State = UState.Downloaded), LNC)
End If
If _ContentForReparse.Count > 0 Then _ContentForReparse.RemoveAll(Function(c) _ContentList.Contains(c))
_ContentNew.Clear()
If _ContentForReparse.Count > 0 Then _ContentNew.ListAddList(_ContentForReparse, LNC)
r += 1
Loop
_CountPictures = _ContentList.LongCount(Function(c) c.Type = UserMedia.Types.Picture) _CountPictures = _ContentList.LongCount(Function(c) c.Type = UserMedia.Types.Picture)
_CountVideo = _ContentList.LongCount(Function(c) c.Type = UserMedia.Types.Video) _CountVideo = _ContentList.LongCount(Function(c) c.Type = UserMedia.Types.Video)
If DownloadedPictures + DownloadedVideos > 0 Then If DownloadedPictures + DownloadedVideos > 0 Then
If __SaveData Then
LastUpdated = Now LastUpdated = Now
If Labels.Contains(LabelsKeeper.NoParsedUser) Then Labels.Remove(LabelsKeeper.NoParsedUser) If Labels.Contains(LabelsKeeper.NoParsedUser) Then Labels.Remove(LabelsKeeper.NoParsedUser)
UpdateContentInformation(_ContentList, MyFileData) UpdateContentInformation(_ContentList, MyFileData)
Else
_CountVideo = 0
_CountPictures = 0
_ContentList.Clear()
CreatedByChannel = False
End If
UpdateUserInformation() UpdateUserInformation()
End If End If
If _ContentForReparse.Count > 0 Then UpdateContentInformation(_ContentForReparse, MyFileDataR) ThrowIfDisposed()
_DownloadedPicturesTotal += _DownloadedPicturesSession _DownloadedPicturesTotal += _DownloadedPicturesSession
_DownloadedVideosTotal += _DownloadedVideosSession _DownloadedVideosTotal += _DownloadedVideosSession
If UpPic Then Raise_OnPictureUpdated() If UpPic Then Raise_OnPictureUpdated()
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
MyMainLOG = $"{Site} - {Name}: downloading canceled" MyMainLOG = $"{Site} - {Name}: downloading canceled"
Canceled = True Canceled = True
Catch dex As ObjectDisposedException When Disposed
Canceled = True
Catch ex As Exception Catch ex As Exception
LogError(ex, "downloading data error") LogError(ex, "downloading data error")
HasError = True HasError = True
Finally Finally
If Not Canceled Then _DataParsed = True ': LastUpdated = Now If Not Canceled Then _DataParsed = True ': LastUpdated = Now
_ContentNew.Clear() _ContentNew.Clear()
DownloadReparseOnly = False DownloadTopCount = Nothing
If _ContentForReparse.Count = 0 And MyFileDataR.Exists Then MyFileDataR.Delete(,,, EDP.SendInLog)
End Try End Try
End Sub End Sub
Private Sub UpdateDataFiles() Protected Sub UpdateDataFiles()
If Not User.File.IsEmptyString Then If Not User.File.IsEmptyString Then
MyFileData = User.File MyFileData = User.File
MyFileData.Name &= "_Data" MyFileData.Name &= "_Data"
MyFileDataR = MyFileData
MyFileDataR.Name &= "_REPARSE"
MyFileDataRV = MyFileData
MyFileDataRV.Name &= "_RVideo"
MyFilePosts = User.File MyFilePosts = User.File
MyFilePosts.Name &= "_Posts" MyFilePosts.Name &= "_Posts"
MyFilePosts.Extension = "txt" MyFilePosts.Extension = "txt"
@@ -669,38 +660,69 @@ BlockNullPicture:
Protected MustOverride Sub DownloadDataF(ByVal Token As CancellationToken) Protected MustOverride Sub DownloadDataF(ByVal Token As CancellationToken)
Protected MustOverride Sub ReparseVideo(ByVal Token As CancellationToken) Protected MustOverride Sub ReparseVideo(ByVal Token As CancellationToken)
Protected MustOverride Sub DownloadContent(ByVal Token As CancellationToken) Protected MustOverride Sub DownloadContent(ByVal Token As CancellationToken)
Protected Function ChangeFileNameByProvider(ByVal f As SFile, ByVal m As UserMedia) As SFile
Dim ff As SFile = Nothing
Try
If Not f.IsEmptyString AndAlso f.Exists Then
Dim d As Date? = m.Post.Date
If Settings.FileReplaceNameByDate Then
Dim dd$ = AConvert(Of String)(If(d, Now), FileDateAppenderProvider, String.Empty)
ff = f
ff.Name = dd
ff = SFile.Indexed_IndexFile(ff,, New NumberedFile(ff))
ElseIf d.HasValue AndAlso (Settings.FileAddDateToFileName Or Settings.FileAddTimeToFileName) AndAlso
(Not FileDateAppenderProvider Is Nothing And Not FileDateAppenderPattern.IsEmptyString) Then
ff = f
ff.Name = String.Format(FileDateAppenderPattern, f.Name, CStr(AConvert(Of String)(d.Value, FileDateAppenderProvider, String.Empty)))
End If
If Not ff.Name.IsEmptyString Then My.Computer.FileSystem.RenameFile(f, ff.File) : Return ff
End If
Return f
Catch ex As Exception
LogError(ex, $"change file name from [{f}] to [{ff}]")
Return f
End Try
End Function
#End Region #End Region
#Region "Delete, Move, Merge" #Region "Delete, Move, Merge"
Friend Overridable Function Delete() As Integer Implements IUserData.Delete Friend Overridable Function Delete() As Integer Implements IUserData.Delete
Return DeleteF(Me)
End Function
Friend Function DeleteF(ByVal Instance As IUserData) As Integer
Dim f As SFile = SFile.GetPath(MyFile.CutPath.Path) Dim f As SFile = SFile.GetPath(MyFile.CutPath.Path)
If f.Exists(SFO.Path, False) AndAlso f.Delete(SFO.Path, False, False) Then If f.Exists(SFO.Path, False) AndAlso f.Delete(SFO.Path, False, False) Then
ImageHandler(Me, False) ImageHandler(Me, False)
Settings.UsersList.Remove(User) Settings.UsersList.Remove(User)
Settings.UpdateUsersList() Settings.UpdateUsersList()
Settings.Users.Remove(Me) Settings.Users.Remove(Instance)
Downloader.UserRemove(Me) Downloader.UserRemove(Instance)
Dispose(True) Dispose(True)
Return 1 Return 1
Else Else
Return 0 Return 0
End If End If
End Function End Function
Friend Overridable Function MoveFiles(ByVal __CollectionName As String, ByVal _MergeData As Boolean) As Boolean Implements IUserData.MoveFiles Friend Overridable Function MoveFiles(ByVal __CollectionName As String) As Boolean Implements IUserData.MoveFiles
Return MoveFilesF(Me, __CollectionName)
End Function
Friend Function MoveFilesF(ByRef Instance As IUserData, ByVal __CollectionName As String) As Boolean
Dim UserBefore As UserInfo = User Dim UserBefore As UserInfo = User
Dim Removed As Boolean = True
Dim _TurnBack As Boolean = False
Try Try
Dim f As SFile Dim f As SFile
Dim Removed As Boolean
If IncludedInCollection Then If IncludedInCollection Then
Settings.Users.Add(Me) Settings.Users.Add(Instance)
Removed = False Removed = False
User.CollectionName = String.Empty User.CollectionName = String.Empty
User.IncludedInCollection = False User.IncludedInCollection = False
Else Else
Settings.Users.Remove(Me) Settings.Users.Remove(Instance)
Removed = True Removed = True
User.CollectionName = __CollectionName User.CollectionName = __CollectionName
User.IncludedInCollection = True User.IncludedInCollection = True
End If End If
_TurnBack = True
User.UpdateUserFile() User.UpdateUserFile()
f = User.File.CutPath(, EDP.ThrowException) f = User.File.CutPath(, EDP.ThrowException)
If f.Exists(SFO.Path, False) Then If f.Exists(SFO.Path, False) Then
@@ -710,7 +732,8 @@ BlockNullPicture:
"Destination directory is not empty!"}, MsgBoxStyle.Exclamation,,, {"Delete", "Cancel"}) = 1 Then "Destination directory is not empty!"}, MsgBoxStyle.Exclamation,,, {"Delete", "Cancel"}) = 1 Then
MsgBoxE("Operation canceled", MsgBoxStyle.Exclamation) MsgBoxE("Operation canceled", MsgBoxStyle.Exclamation)
User = UserBefore User = UserBefore
If Removed Then Settings.Users.Add(Me) Else Settings.Users.Remove(Me) If Removed Then Settings.Users.Add(Instance) Else Settings.Users.Remove(Instance)
_TurnBack = False
Return False Return False
End If End If
f.Delete(SFO.Path, False, False, EDP.ThrowException) f.Delete(SFO.Path, False, False, EDP.ThrowException)
@@ -724,6 +747,9 @@ BlockNullPicture:
Catch ex As Exception Catch ex As Exception
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Files moving error") ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Files moving error")
User = UserBefore User = UserBefore
If _TurnBack Then
If Removed Then Settings.Users.Add(Instance) Else Settings.Users.Remove(Instance)
End If
Return False Return False
End Try End Try
End Function End Function
@@ -769,6 +795,8 @@ BlockNullPicture:
End If End If
UpdateUserInformation() UpdateUserInformation()
End If End If
Catch ioex As InvalidOperationException When ioex.HelpLink = 1
MsgBoxE(ioex.Message, vbCritical)
Catch ex As Exception Catch ex As Exception
LogError(ex, "[UserDataBase.MergeData]") LogError(ex, "[UserDataBase.MergeData]")
End Try End Try
@@ -789,6 +817,16 @@ BlockNullPicture:
Protected Sub ErrorDownloading(ByVal f As SFile, ByVal URL As String) Protected Sub ErrorDownloading(ByVal f As SFile, ByVal URL As String)
If Not f.Exists Then MyMainLOG = $"Error downloading from [{URL}] to [{f}]" If Not f.Exists Then MyMainLOG = $"Error downloading from [{URL}] to [{f}]"
End Sub End Sub
''' <exception cref="ObjectDisposedException"></exception>
Protected Sub ThrowIfDisposed()
If Disposed Then Throw New ObjectDisposedException(ToString(), "Object disposed")
End Sub
''' <exception cref="OperationCanceledException"></exception>
''' <exception cref="ObjectDisposedException"></exception>
Protected Sub ThrowAny(ByVal Token As CancellationToken)
Token.ThrowIfCancellationRequested()
ThrowIfDisposed()
End Sub
#End Region #End Region
Public Overrides Function ToString() As String Public Overrides Function ToString() As String
If Settings.ViewModeIsPicture Then If Settings.ViewModeIsPicture Then
@@ -848,7 +886,11 @@ BlockNullPicture:
Return OutValue Return OutValue
End Function End Function
Friend Overridable Function CompareTo(ByVal Obj As Object) As Integer Implements IComparable.CompareTo Friend Overridable Function CompareTo(ByVal Obj As Object) As Integer Implements IComparable.CompareTo
If TypeOf Obj Is Reddit.Channel Then
Return CompareTo(DirectCast(DirectCast(Obj, Reddit.Channel).Instance, UserDataBase))
Else
Return CompareTo(DirectCast(Obj, UserDataBase)) Return CompareTo(DirectCast(Obj, UserDataBase))
End If
End Function End Function
#End Region #End Region
#Region "IEquatable Support" #Region "IEquatable Support"
@@ -856,12 +898,16 @@ BlockNullPicture:
Return Site = Other.Site And Name = Other.Name Return Site = Other.Site And Name = Other.Name
End Function End Function
Public Overrides Function Equals(ByVal Obj As Object) As Boolean Public Overrides Function Equals(ByVal Obj As Object) As Boolean
If TypeOf Obj Is Reddit.Channel Then
Return Equals(DirectCast(DirectCast(Obj, Reddit.Channel).Instance, UserDataBase))
Else
Return Equals(DirectCast(Obj, UserDataBase)) Return Equals(DirectCast(Obj, UserDataBase))
End If
End Function End Function
#End Region #End Region
#Region "IDisposable Support" #Region "IDisposable Support"
Protected disposedValue As Boolean = False Protected disposedValue As Boolean = False
Friend ReadOnly Property Disposed As Boolean Friend ReadOnly Property Disposed As Boolean Implements IUserData.Disposed
Get Get
Return disposedValue Return disposedValue
End Get End Get
@@ -929,6 +975,8 @@ BlockNullPicture:
ReadOnly Property FitToAddParams As Boolean ReadOnly Property FitToAddParams As Boolean
ReadOnly Property LVIKey As String ReadOnly Property LVIKey As String
ReadOnly Property LVIIndex As Integer ReadOnly Property LVIIndex As Integer
Property DownloadImages As Boolean
Property DownloadVideos As Boolean
Function GetLVI(ByVal Destination As ListView) As ListViewItem Function GetLVI(ByVal Destination As ListView) As ListViewItem
Function GetLVIGroup(ByVal Destination As ListView) As ListViewGroup Function GetLVIGroup(ByVal Destination As ListView) As ListViewGroup
Sub LoadUserInformation() Sub LoadUserInformation()
@@ -940,11 +988,11 @@ BlockNullPicture:
''' 3 - Collection splitted ''' 3 - Collection splitted
''' </summary> ''' </summary>
Function Delete() As Integer Function Delete() As Integer
Function MoveFiles(ByVal CollectionName As String, ByVal MergeData As Boolean) As Boolean Function MoveFiles(ByVal CollectionName As String) As Boolean
Sub OpenFolder() Sub OpenFolder()
Property DownloadReparseOnly As Boolean
ReadOnly Property DataForReparseExists As Boolean
ReadOnly Property Self As IUserData ReadOnly Property Self As IUserData
Property DownloadTopCount As Integer?
ReadOnly Property Disposed As Boolean
End Interface End Interface
Friend Interface IChannelLimits Friend Interface IChannelLimits
Property AutoGetLimits As Boolean Property AutoGetLimits As Boolean

View File

@@ -2,9 +2,10 @@
Imports PersonalUtilities.Forms.Toolbars Imports PersonalUtilities.Forms.Toolbars
Imports PersonalUtilities.Functions.XML Imports PersonalUtilities.Functions.XML
Imports SCrawler.API.Base Imports SCrawler.API.Base
Imports System.Threading
Namespace API.Reddit Namespace API.Reddit
Friend Class Channel : Implements ICollection(Of UserPost), IEquatable(Of Channel), IComparable(Of Channel), Friend Class Channel : Implements ICollection(Of UserPost), IEquatable(Of Channel), IComparable(Of Channel),
IRangeSwitcherContainer(Of UserPost), ILoaderSaver, IMyEnumerator(Of UserPost), IChannelLimits, IDisposable IRangeSwitcherContainer(Of UserPost), ILoaderSaver, IMyEnumerator(Of UserPost), IChannelLimits, IUserData, IDisposable
#Region "XML Nodes' Names" #Region "XML Nodes' Names"
Private Const Name_Name As String = "Name" Private Const Name_Name As String = "Name"
Private Const Name_ID As String = "ID" Private Const Name_ID As String = "ID"
@@ -12,8 +13,237 @@ Namespace API.Reddit
Private Const Name_PostsNode As String = "Posts" Private Const Name_PostsNode As String = "Posts"
#End Region #End Region
Friend Const DefaultDownloadLimitCount As Integer = 1000 Friend Const DefaultDownloadLimitCount As Integer = 1000
Friend Property Name As String = String.Empty #Region "IUserData Support"
Friend Property ID As String = String.Empty Private Event OnPictureUpdated(User As IUserData) Implements IUserData.OnPictureUpdated
Friend Property Instance As IUserData
Private Property IUserData_ParseUserMediaOnly As Boolean = False Implements IUserData.ParseUserMediaOnly
Private ReadOnly Property IUserData_IsCollection As Boolean Implements IUserData.IsCollection
Get
Return Instance.IsCollection
End Get
End Property
Private Property IUserData_CollectionName As String Implements IUserData.CollectionName
Get
Return Instance.CollectionName
End Get
Set(ByVal NewName As String)
Instance.CollectionName = NewName
End Set
End Property
Private ReadOnly Property IUserData_IncludedInCollection As Boolean Implements IUserData.IncludedInCollection
Get
Return Instance.IncludedInCollection
End Get
End Property
Private ReadOnly Property IUserData_Labels As List(Of String) Implements IUserData.Labels
Get
Return Instance.Labels
End Get
End Property
Private ReadOnly Property IUserData_IsChannel As Boolean = True Implements IUserData.IsChannel
Private Property IUserData_ReadyForDownload As Boolean Implements IUserData.ReadyForDownload
Get
Return Instance.ReadyForDownload
End Get
Set(ByVal IsReady As Boolean)
Instance.ReadyForDownload = IsReady
End Set
End Property
Private Property IUserData_File As SFile Implements IUserData.File
Get
Return Instance.File
End Get
Set(ByVal NewFile As SFile)
Instance.File = NewFile
End Set
End Property
Private Property IUserData_FileExists As Boolean Implements IUserData.FileExists
Get
Return Instance.FileExists
End Get
Set(ByVal IsExists As Boolean)
Instance.FileExists = IsExists
End Set
End Property
Private Property IUserData_DownloadedPictures As Integer Implements IUserData.DownloadedPictures
Get
Return Instance.DownloadedPictures
End Get
Set(ByVal c As Integer)
Instance.DownloadedPictures = c
End Set
End Property
Private Property IUserData_DownloadedVideos As Integer Implements IUserData.DownloadedVideos
Get
Return Instance.DownloadedVideos
End Get
Set(ByVal c As Integer)
Instance.DownloadedVideos = c
End Set
End Property
Private ReadOnly Property IUserData_DownloadedTotal(Optional Total As Boolean = True) As Integer Implements IUserData.DownloadedTotal
Get
Return Instance.DownloadedTotal
End Get
End Property
Private ReadOnly Property IUserData_DownloadedInformation As String Implements IUserData.DownloadedInformation
Get
Return Instance.DownloadedInformation
End Get
End Property
Private Property IUserData_HasError As Boolean Implements IUserData.HasError
Get
Return Instance.HasError
End Get
Set(ByVal e As Boolean)
Instance.HasError = e
End Set
End Property
Private ReadOnly Property IUserData_FitToAddParams As Boolean Implements IUserData.FitToAddParams
Get
Return Instance.FitToAddParams
End Get
End Property
Private ReadOnly Property IUserData_LVIKey As String Implements IUserData.LVIKey
Get
Return Instance.LVIKey
End Get
End Property
Private ReadOnly Property IUserData_LVIIndex As Integer Implements IUserData.LVIIndex
Get
Return Instance.LVIIndex
End Get
End Property
Private Property IUserData_DownloadImages As Boolean Implements IUserData.DownloadImages
Get
Return Instance.DownloadImages
End Get
Set(ByVal d As Boolean)
Instance.DownloadImages = d
End Set
End Property
Private Property IUserData_DownloadVideos As Boolean Implements IUserData.DownloadVideos
Get
Return Instance.DownloadVideos
End Get
Set(ByVal d As Boolean)
Instance.DownloadVideos = d
End Set
End Property
Private ReadOnly Property IUserData_Self As IUserData Implements IUserData.Self
Get
Return Instance
End Get
End Property
Private Property IUserData_DownloadTopCount As Integer? Implements IUserData.DownloadTopCount
Get
Return Instance.DownloadTopCount
End Get
Set(ByVal c As Integer?)
Instance.DownloadTopCount = c
End Set
End Property
Friend Property Site As Sites = Sites.Reddit Implements IContentProvider.Site
Private Property IUserData_FriendlyName As String Implements IContentProvider.FriendlyName
Get
Return Instance.FriendlyName
End Get
Set(ByVal NewName As String)
Instance.FriendlyName = NewName
End Set
End Property
Private Property IUserData_Description As String Implements IContentProvider.Description
Get
Return Instance.Description
End Get
Set(ByVal d As String)
Instance.Description = d
End Set
End Property
Private Property IUserData_Favorite As Boolean Implements IContentProvider.Favorite
Get
Return Instance.Favorite
End Get
Set(ByVal f As Boolean)
Instance.Favorite = f
End Set
End Property
Private Property IUserData_Temporary As Boolean Implements IContentProvider.Temporary
Get
Return Instance.Temporary
End Get
Set(ByVal t As Boolean)
Instance.Temporary = t
End Set
End Property
Private Sub IUserData_SetPicture(ByVal f As SFile) Implements IUserData.SetPicture
Instance.SetPicture(f)
End Sub
Private Sub IUserData_LoadUserInformation() Implements IUserData.LoadUserInformation
Instance.LoadUserInformation()
End Sub
Private Sub IUserData_UpdateUserInformation() Implements IUserData.UpdateUserInformation
Instance.UpdateUserInformation()
End Sub
Private Sub IUserData_OpenFolder() Implements IUserData.OpenFolder
Instance.OpenFolder()
End Sub
Private Sub IUserData_OpenSite() Implements IContentProvider.OpenSite
Instance.OpenSite()
End Sub
Private Sub IUserData_DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData
DownloadData(Token, False, Nothing)
End Sub
Private Function IUserData_GetPicture() As Image Implements IUserData.GetPicture
Return Instance.GetPicture()
End Function
Private Function IUserData_GetLVI(ByVal Destination As ListView) As ListViewItem Implements IUserData.GetLVI
Return Instance.GetLVI(Destination)
End Function
Private Function IUserData_GetLVIGroup(ByVal Destination As ListView) As ListViewGroup Implements IUserData.GetLVIGroup
Return Instance.GetLVIGroup(Destination)
End Function
Private Function IUserData_Delete() As Integer Implements IUserData.Delete
Return DirectCast(Instance, UserDataBase).DeleteF(Me)
End Function
Private Function IUserData_MoveFiles(ByVal CollectionName As String) As Boolean Implements IUserData.MoveFiles
Return DirectCast(Instance, UserDataBase).MoveFilesF(Me, CollectionName)
End Function
#End Region
Private _Name As String = String.Empty
Friend Property Name As String Implements IUserData.Name
Get
If IsRegularChannel Then
Return Instance.Name
Else
Return _Name
End If
End Get
Set(ByVal NewName As String)
If IsRegularChannel Then
Instance.Name = NewName
Else
_Name = NewName
End If
End Set
End Property
Private _ID As String = String.Empty
Friend Property ID As String Implements IUserData.ID
Get
If IsRegularChannel Then
Return Instance.ID
Else
Return _ID
End If
End Get
Set(ByVal NewID As String)
If IsRegularChannel Then
Instance.ID = NewID
Else
_ID = NewID
End If
End Set
End Property
Friend ReadOnly Property CUser As UserInfo Friend ReadOnly Property CUser As UserInfo
Get Get
Return New UserInfo(Me) Return New UserInfo(Me)
@@ -122,6 +352,7 @@ Namespace API.Reddit
End Sub End Sub
Friend Property AutoGetLimits As Boolean = True Implements IChannelLimits.AutoGetLimits Friend Property AutoGetLimits As Boolean = True Implements IChannelLimits.AutoGetLimits
#End Region #End Region
Friend ReadOnly IsRegularChannel As Boolean = False
Friend Sub New() Friend Sub New()
Posts = New List(Of UserPost) Posts = New List(Of UserPost)
PostsLatest = New List(Of UserPost) PostsLatest = New List(Of UserPost)
@@ -131,9 +362,19 @@ Namespace API.Reddit
Me.New Me.New
LoadData(f, False) LoadData(f, False)
End Sub End Sub
Friend Sub New(ByVal u As UserInfo, Optional ByVal _LoadUserInformation As Boolean = True)
Me.New
Instance = New UserData(u, _LoadUserInformation) With {.SaveToCache = False, .SkipExistsUsers = False, .ChannelInfo = Me}
AutoGetLimits = True
DirectCast(Instance, UserData).SetLimit(Me)
IsRegularChannel = True
End Sub
Public Shared Widening Operator CType(ByVal f As SFile) As Channel Public Shared Widening Operator CType(ByVal f As SFile) As Channel
Return New Channel(f) Return New Channel(f)
End Operator End Operator
Public Shared Widening Operator CType(ByVal c As Channel) As UserDataBase
Return DirectCast(c.Instance, UserDataBase)
End Operator
Public Overrides Function ToString() As String Public Overrides Function ToString() As String
If Not Name.IsEmptyString Then If Not Name.IsEmptyString Then
Return Name Return Name
@@ -144,10 +385,13 @@ Namespace API.Reddit
Friend Sub Delete() Friend Sub Delete()
If File.Exists Then File.Delete() If File.Exists Then File.Delete()
End Sub End Sub
Friend Sub DownloadData(ByVal Token As Threading.CancellationToken, Optional ByVal SkipExists As Boolean = True, Friend Sub DownloadData(ByVal Token As CancellationToken, Optional ByVal SkipExists As Boolean = True,
Optional ByVal p As MyProgress = Nothing) Optional ByVal p As MyProgress = Nothing)
Try Try
_Downloading = True _Downloading = True
If Not Instance Is Nothing Then
Instance.DownloadData(Token)
Else
Using d As New UserData(CUser, False, False) With { Using d As New UserData(CUser, False, False) With {
.Progress = p, .Progress = p,
.SaveToCache = True, .SaveToCache = True,
@@ -159,8 +403,8 @@ Namespace API.Reddit
Posts.ListAddList(d.GetNewChannelPosts(), LAP.NotContainsOnly) Posts.ListAddList(d.GetNewChannelPosts(), LAP.NotContainsOnly)
Posts.Sort() Posts.Sort()
LatestParsedDate = If(Posts.FirstOrDefault(Function(pp) pp.Date.HasValue).Date, LatestParsedDate) LatestParsedDate = If(Posts.FirstOrDefault(Function(pp) pp.Date.HasValue).Date, LatestParsedDate)
Token.ThrowIfCancellationRequested()
End Using End Using
End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Finally Finally
_Downloading = False _Downloading = False
@@ -201,28 +445,52 @@ Namespace API.Reddit
Friend Overloads Function Equals(ByVal Other As Channel) As Boolean Implements IEquatable(Of Channel).Equals Friend Overloads Function Equals(ByVal Other As Channel) As Boolean Implements IEquatable(Of Channel).Equals
Return ID = Other.ID Return ID = Other.ID
End Function End Function
Public Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean Private Overloads Function Equals(ByVal Other As UserDataBase) As Boolean Implements IEquatable(Of UserDataBase).Equals
If Not Obj Is Nothing Then If Not Instance Is Nothing Then
If TypeOf Obj Is String Then Return Instance.Equals(Other)
Return ID = CStr(Obj)
Else
Return Equals(DirectCast(Obj, Channel))
End If
Else Else
Return False Return False
End If End If
End Function End Function
Public Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean
If Not Obj Is Nothing Then
If TypeOf Obj Is String Then
Return ID = CStr(Obj)
ElseIf TypeOf Obj Is Channel Then
Return Equals(DirectCast(Obj, Channel))
ElseIf TypeOf Obj Is UserDataBase Then
Return Equals(DirectCast(Obj, UserDataBase))
End If
End If
Return False
End Function
#End Region #End Region
#Region "IComparable Support" #Region "IComparable Support"
Friend Function CompareTo(ByVal Other As Channel) As Integer Implements IComparable(Of Channel).CompareTo Friend Overloads Function CompareTo(ByVal Other As Channel) As Integer Implements IComparable(Of Channel).CompareTo
If Not Name.IsEmptyString And Not Other.Name.IsEmptyString Then If Not Name.IsEmptyString And Not Other.Name.IsEmptyString Then
Return Name.CompareTo(Other.Name) Return Name.CompareTo(Other.Name)
Else Else
Return ID.CompareTo(Other.ID) Return ID.CompareTo(Other.ID)
End If End If
End Function End Function
Private Overloads Function CompareTo(ByVal Other As UserDataBase) As Integer Implements IComparable(Of UserDataBase).CompareTo
If Not Instance Is Nothing Then
Return Instance.CompareTo(Other)
Else
Return 0
End If
End Function
Private Overloads Function CompareTo(ByVal Obj As Object) As Integer Implements IComparable.CompareTo
If TypeOf Obj Is Channel Then
Return CompareTo(DirectCast(Obj, Channel))
ElseIf TypeOf Obj Is UserDataBase And Not Instance Is Nothing Then
Return Instance.CompareTo(Obj)
Else
Return 0
End If
End Function
#End Region #End Region
#Region "IXMLContainer Support" #Region "ILoaderSaver Support"
Friend Overloads Function LoadData(Optional ByVal f As SFile = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean Implements ILoaderSaver.Load Friend Overloads Function LoadData(Optional ByVal f As SFile = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean Implements ILoaderSaver.Load
Return LoadData(File, False, e) Return LoadData(File, False, e)
End Function End Function
@@ -280,12 +548,18 @@ Namespace API.Reddit
#End Region #End Region
#Region "IDisposable Support" #Region "IDisposable Support"
Private disposedValue As Boolean = False Private disposedValue As Boolean = False
Friend ReadOnly Property Disposed As Boolean Implements IUserData.Disposed
Get
Return disposedValue
End Get
End Property
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean) Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
If Not disposedValue Then If Not disposedValue Then
If disposing Then If disposing Then
Posts.Clear() Posts.Clear()
PostsLatest.Clear() PostsLatest.Clear()
Range.Dispose() Range.Dispose()
If Not Instance Is Nothing Then Instance.Dispose()
If CachePath.Exists(SFO.Path, False) Then CachePath.Delete(SFO.Path, False, False, EDP.SendInLog) If CachePath.Exists(SFO.Path, False) Then CachePath.Delete(SFO.Path, False, False, EDP.SendInLog)
End If End If
disposedValue = True disposedValue = True

View File

@@ -72,16 +72,18 @@ Namespace API.Reddit
Friend Sub DownloadData(ByVal Token As CancellationToken, Optional ByVal SkipExists As Boolean = True, Friend Sub DownloadData(ByVal Token As CancellationToken, Optional ByVal SkipExists As Boolean = True,
Optional ByVal p As MyProgress = Nothing) Optional ByVal p As MyProgress = Nothing)
Try Try
Dim m% = Settings.ChannelsMaxJobsCount
If Count > 0 Then If Count > 0 Then
Dim t As New List(Of Task) Dim t As New List(Of Task)
Dim i% = 0
For Each c As Channel In Channels For Each c As Channel In Channels
If Not c.Downloading Then t.Add(Task.Run(Sub() If Not c.Downloading Then t.Add(Task.Run(Sub()
c.SetLimit(Me) c.SetLimit(Me)
c.DownloadData(Token, SkipExists, p) c.DownloadData(Token, SkipExists, p)
End Sub)) End Sub)) : i += 1
If t.Count > 0 And i >= m Then Task.WaitAll(t.ToArray, Token) : t.Clear() : i = 0
Next Next
If t.Count > 0 Then Task.WaitAll(t.ToArray) If t.Count > 0 Then Task.WaitAll(t.ToArray, Token) : t.Clear()
Token.ThrowIfCancellationRequested()
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
End Try End Try

View File

@@ -80,7 +80,7 @@ Namespace API.Reddit
eFiles.Add(dFile) eFiles.Add(dFile)
Next Next
End Using End Using
f = FFMPEG.ConcatenateFiles(eFiles, "ffmpeg.exe", ConcatFile, p, DPED) f = FFMPEG.ConcatenateFiles(eFiles, Settings.FfmpegFile, ConcatFile, p, DPED)
eFiles.Clear() eFiles.Clear()
Return f Return f
End If End If

View File

@@ -66,7 +66,7 @@ Namespace API.Reddit
#End Region #End Region
#Region "Download Overrides" #Region "Download Overrides"
Friend Overrides Sub DownloadData(ByVal Token As CancellationToken) Friend Overrides Sub DownloadData(ByVal Token As CancellationToken)
If IsChannel Then If IsChannel AndAlso Not ChannelInfo.IsRegularChannel Then
ChannelPostsNames.ListAddList(ChannelInfo.PostsAll.Select(Function(p) p.ID), LNC) ChannelPostsNames.ListAddList(ChannelInfo.PostsAll.Select(Function(p) p.ID), LNC)
If SkipExistsUsers Then _ExistsUsersNames.ListAddList(Settings.UsersList.Select(Function(p) p.Name), LNC) If SkipExistsUsers Then _ExistsUsersNames.ListAddList(Settings.UsersList.Select(Function(p) p.Name), LNC)
DownloadDataF(Token) DownloadDataF(Token)
@@ -78,15 +78,27 @@ Namespace API.Reddit
End If End If
End Sub End Sub
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken) Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
_TotalPostsDownloaded = 0
If IsChannel Then If IsChannel Then
_DownloadedChannelPosts = 0 If ChannelInfo.IsRegularChannel Then
ChannelPostsNames.ListAddList(_TempPostsList, LNC)
If ChannelPostsNames.Count > 0 Then
DownloadLimitCount = Nothing
With _ContentList.Where(Function(c) c.Post.Date.HasValue)
If .Count > 0 Then DownloadLimitDate = .Max(Function(p) p.Post.Date.Value).AddMinutes(-10)
End With
End If
If DownloadTopCount.HasValue Then DownloadLimitCount = DownloadTopCount
End If
DownloadDataChannel(String.Empty, Token) DownloadDataChannel(String.Empty, Token)
If ChannelInfo.IsRegularChannel Then _TempPostsList.ListAddList(_TempMediaList.Select(Function(m) m.Post.ID), LNC)
Else Else
DownloadDataUser(String.Empty, Token) DownloadDataUser(String.Empty, Token)
End If End If
End Sub End Sub
#End Region #End Region
#Region "Download Functions (User, Channel)" #Region "Download Functions (User, Channel)"
Private _TotalPostsDownloaded As Integer = 0
Private Sub DownloadDataUser(ByVal POST As String, ByVal Token As CancellationToken) Private Sub DownloadDataUser(ByVal POST As String, ByVal Token As CancellationToken)
Dim URL$ = String.Empty Dim URL$ = String.Empty
Try Try
@@ -103,15 +115,15 @@ Namespace API.Reddit
Dim UPicType As Func(Of String, UTypes) = Function(input) IIf(input = "image", UTypes.Picture, UTypes.GIF) Dim UPicType As Func(Of String, UTypes) = Function(input) IIf(input = "image", UTypes.Picture, UTypes.GIF)
URL = $"https://gateway.reddit.com/desktopapi/v1/user/{Name}/posts?rtj=only&allow_quarantined=true&allow_over18=1&include=identity&after={POST}&dist=25&sort=new&t=all&layout=classic" URL = $"https://gateway.reddit.com/desktopapi/v1/user/{Name}/posts?rtj=only&allow_quarantined=true&allow_over18=1&include=identity&after={POST}&dist=25&sort=new&t=all&layout=classic"
Token.ThrowIfCancellationRequested() ThrowAny(Token)
Dim r$ = GetSiteResponse(URL) Dim r$ = GetSiteResponse(URL)
If Not r.IsEmptyString Then If Not r.IsEmptyString Then
Using w As EContainer = JsonDocument.Parse(r) Using w As EContainer = JsonDocument.Parse(r).XmlIfNothing
If w.Count > 0 Then If w.Count > 0 Then
n = w.GetNode(JsonNodesJson) n = w.GetNode(JsonNodesJson)
If Not n Is Nothing AndAlso n.Count > 0 Then If Not n Is Nothing AndAlso n.Count > 0 Then
For Each nn In n For Each nn In n
Token.ThrowIfCancellationRequested() ThrowAny(Token)
If nn.Count > 0 Then If nn.Count > 0 Then
PostID = nn.Name PostID = nn.Name
If PostID.IsEmptyString AndAlso nn.Contains("id") Then PostID = nn("id").Value If PostID.IsEmptyString AndAlso nn.Contains("id") Then PostID = nn("id").Value
@@ -123,25 +135,32 @@ Namespace API.Reddit
ExistsDetected = True ExistsDetected = True
Continue For Continue For
End If End If
If CheckNode(nn) Then If CheckNode(nn) Then
_ItemsBefore = _TempMediaList.Count _ItemsBefore = _TempMediaList.Count
added = True added = True
s = nn.ItemF({"source", "url"}) s = nn.ItemF({"source", "url"})
If s.XmlIfNothingValue("/").Contains("redgifs.com") Then If s.XmlIfNothingValue("/").Contains("redgifs.com") Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, s.Value, PostID, PostDate,, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, s.Value, PostID, PostDate,, IsChannel), LNC)
Else ElseIf Not CreateImgurMedia(s.XmlIfNothingValue, PostID, PostDate,, IsChannel) Then
s = nn.ItemF({"media"}).XmlIfNothing s = nn.ItemF({"media"}).XmlIfNothing
__ItemType = s("type").XmlIfNothingValue __ItemType = s("type").XmlIfNothingValue
Select Case __ItemType Select Case __ItemType
Case "gallery" : DownloadGallery(s, PostID, PostDate) Case "gallery" : If Not DownloadGallery(s, PostID, PostDate) Then added = False
Case "image", "gifvideo" Case "image", "gifvideo"
If s.Contains("content") Then _ If s.Contains("content") Then
_TempMediaList.ListAddValue(MediaFromData(UPicType(__ItemType), s.Value("content"), _TempMediaList.ListAddValue(MediaFromData(UPicType(__ItemType), s.Value("content"),
PostID, PostDate,, IsChannel), LNC) PostID, PostDate,, IsChannel), LNC)
Else
added = False
End If
Case "video" Case "video"
If s("hlsUrl").XmlIfNothingValue("/").ToLower.Contains("m3u8") Then _ If Settings.UseM3U8 AndAlso s("hlsUrl").XmlIfNothingValue("/").ToLower.Contains("m3u8") Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, s.Value("hlsUrl"), _TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, s.Value("hlsUrl"),
PostID, PostDate,, IsChannel), LNC) PostID, PostDate,, IsChannel), LNC)
Else
added = False
End If
Case Else : added = False Case Else : added = False
End Select End Select
End If End If
@@ -151,18 +170,19 @@ Namespace API.Reddit
With s.Value.ToLower With s.Value.ToLower
Select Case True Select Case True
Case .Contains("redgifs") : tmpType = UTypes.VideoPre Case .Contains("redgifs") : tmpType = UTypes.VideoPre
Case .Contains("m3u8") : tmpType = UTypes.m3u8 Case .Contains("m3u8") : If Settings.UseM3U8 Then tmpType = UTypes.m3u8
Case .Contains(".gif") And TryFile(s.Value) : tmpType = UTypes.GIF Case .Contains(".gif") And TryFile(s.Value) : tmpType = UTypes.GIF
Case TryFile(s.Value) : tmpType = UTypes.Picture Case TryFile(s.Value) : tmpType = UTypes.Picture
Case Else : tmpType = UTypes.Undefined Case Else : tmpType = UTypes.Undefined
End Select End Select
End With End With
If Not tmpType = UTypes.Undefined Then _ If Not tmpType = UTypes.Undefined Then
_TempMediaList.ListAddValue(MediaFromData(tmpType, s.Value, PostID, PostDate,, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(tmpType, s.Value, PostID, PostDate,, IsChannel), LNC)
End If End If
End If End If
End If End If
End If End If
End If
Next Next
End If End If
End If End If
@@ -171,12 +191,12 @@ Namespace API.Reddit
If Not PostID.IsEmptyString And NewPostDetected Then DownloadDataUser(PostID, Token) If Not PostID.IsEmptyString And NewPostDetected Then DownloadDataUser(PostID, Token)
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Catch dex As ObjectDisposedException When Disposed
Catch ex As Exception Catch ex As Exception
LogError(ex, $"data downloading error [{URL}]") LogError(ex, $"data downloading error [{URL}]")
HasError = True HasError = True
End Try End Try
End Sub End Sub
Private _DownloadedChannelPosts As Integer = 0
Private Sub DownloadDataChannel(ByVal POST As String, ByVal Token As CancellationToken) Private Sub DownloadDataChannel(ByVal POST As String, ByVal Token As CancellationToken)
Dim URL$ = String.Empty Dim URL$ = String.Empty
Try Try
@@ -189,7 +209,7 @@ Namespace API.Reddit
Dim lDate As Date? Dim lDate As Date?
URL = $"https://reddit.com/r/{Name}/new.json?allow_quarantined=true&allow_over18=1&include=identity&after={POST}&dist=25&sort=new&t=all&layout=classic" URL = $"https://reddit.com/r/{Name}/new.json?allow_quarantined=true&allow_over18=1&include=identity&after={POST}&dist=25&sort=new&t=all&layout=classic"
Token.ThrowIfCancellationRequested() ThrowAny(Token)
Dim r$ = GetSiteResponse(URL) Dim r$ = GetSiteResponse(URL)
If Not r.IsEmptyString Then If Not r.IsEmptyString Then
Using w As EContainer = JsonDocument.Parse(r).XmlIfNothing Using w As EContainer = JsonDocument.Parse(r).XmlIfNothing
@@ -197,14 +217,14 @@ Namespace API.Reddit
n = w.GetNode(ChannelJsonNodes) n = w.GetNode(ChannelJsonNodes)
If Not n Is Nothing AndAlso n.Count > 0 Then If Not n Is Nothing AndAlso n.Count > 0 Then
For Each nn In n For Each nn In n
Token.ThrowIfCancellationRequested() ThrowAny(Token)
s = nn.ItemF({eCount}) s = nn.ItemF({eCount})
If Not s Is Nothing AndAlso s.Count > 0 Then If Not s Is Nothing AndAlso s.Count > 0 Then
PostID = s.Value("name") PostID = s.Value("name")
If PostID.IsEmptyString AndAlso s.Contains("id") Then PostID = s("id").Value If PostID.IsEmptyString AndAlso s.Contains("id") Then PostID = s("id").Value
If ChannelPostsNames.Contains(PostID) Then ExistsDetected = True : Continue For 'Exit Sub If ChannelPostsNames.Contains(PostID) Then ExistsDetected = True : Continue For 'Exit Sub
If DownloadLimitCount.HasValue AndAlso _DownloadedChannelPosts >= DownloadLimitCount.Value Then Exit Sub If DownloadLimitCount.HasValue AndAlso _TotalPostsDownloaded >= DownloadLimitCount.Value Then Exit Sub
If Not DownloadLimitPost.IsEmptyString AndAlso DownloadLimitPost = PostID Then Exit Sub If Not DownloadLimitPost.IsEmptyString AndAlso DownloadLimitPost = PostID Then Exit Sub
If DownloadLimitDate.HasValue AndAlso _TempMediaList.Count > 0 Then If DownloadLimitDate.HasValue AndAlso _TempMediaList.Count > 0 Then
With (From __u In _TempMediaList Where __u.Post.Date.HasValue Select __u.Post.Date.Value) With (From __u In _TempMediaList Where __u.Post.Date.HasValue Select __u.Post.Date.Value)
@@ -226,20 +246,22 @@ Namespace API.Reddit
tmpUrl = s.Value({"media", "oembed"}, "thumbnail_url") tmpUrl = s.Value({"media", "oembed"}, "thumbnail_url")
If Not tmpUrl.IsEmptyString Then If Not tmpUrl.IsEmptyString Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
_DownloadedChannelPosts += 1 _TotalPostsDownloaded += 1
End If End If
Else Else
_TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
_DownloadedChannelPosts += 1 _TotalPostsDownloaded += 1
End If End If
ElseIf CreateImgurMedia(tmpUrl, PostID, PostDate, _UserID, IsChannel) Then
_TotalPostsDownloaded += 1
ElseIf s.Item("media_metadata").XmlIfNothing.Count > 0 Then ElseIf s.Item("media_metadata").XmlIfNothing.Count > 0 Then
DownloadGallery(s, PostID, PostDate, _UserID, SaveToCache) DownloadGallery(s, PostID, PostDate, _UserID, SaveToCache)
_DownloadedChannelPosts += 1 _TotalPostsDownloaded += 1
ElseIf s.Contains("preview") Then ElseIf s.Contains("preview") Then
ss = s.ItemF({"preview", "images", eCount, "source", "url"}).XmlIfNothing ss = s.ItemF({"preview", "images", eCount, "source", "url"}).XmlIfNothing
If Not ss.Value.IsEmptyString Then If Not ss.Value.IsEmptyString Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, ss.Value, PostID, PostDate, _UserID, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, ss.Value, PostID, PostDate, _UserID, IsChannel), LNC)
_DownloadedChannelPosts += 1 _TotalPostsDownloaded += 1
End If End If
End If End If
End If End If
@@ -251,6 +273,7 @@ Namespace API.Reddit
If Not PostID.IsEmptyString And NewPostDetected Then DownloadDataChannel(PostID, Token) If Not PostID.IsEmptyString And NewPostDetected Then DownloadDataChannel(PostID, Token)
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Catch dex As ObjectDisposedException When Disposed
Catch ex As Exception Catch ex As Exception
LogError(ex, $"channel data downloading error [{URL}]") LogError(ex, $"channel data downloading error [{URL}]")
HasError = True HasError = True
@@ -258,9 +281,47 @@ Namespace API.Reddit
End Sub End Sub
#End Region #End Region
#Region "Download Base Functions" #Region "Download Base Functions"
Private Sub DownloadGallery(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String, Private Function ImgurPicture(ByVal Source As EContainer, ByVal Value As String) As String
Optional ByVal _UserID As String = Nothing, Optional ByVal FirstOnly As Boolean = False)
Try Try
Dim e As EContainer = Source({"source", "url"}).XmlIfNothing
If Not e.IsEmptyString AndAlso e.Value.ToLower.Contains("imgur") Then
Return e.Value
Else
Return Value
End If
Catch ex As Exception
LogError(ex, "[ImgurPicture]")
Return Value
End Try
End Function
Private Function CreateImgurMedia(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
Optional ByVal _UserID As String = "", Optional ByVal IsChannel As Boolean = False) As Boolean
If Not _URL.IsEmptyString AndAlso _URL.Contains("imgur") Then
If _URL.StringContains({".jpg", ".png", ".jpeg"}) Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, _URL, PostID, PostDate, _UserID, IsChannel), LNC)
ElseIf _URL.Contains(".gifv") Then
If SaveToCache Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, _URL.Replace(".gifv", ".gif"),
PostID, PostDate, _UserID, IsChannel), LNC)
Else
_TempMediaList.ListAddValue(MediaFromData(UTypes.Video, _URL.Replace(".gifv", ".mp4"),
PostID, PostDate, _UserID, IsChannel), LNC)
End If
ElseIf _URL.Contains(".gif") Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.GIF, _URL, PostID, PostDate, _UserID, IsChannel), LNC)
Else
If Not TryFile(_URL) Then _URL &= ".jpg"
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, _URL, PostID, PostDate, _UserID, IsChannel), LNC)
End If
Return True
Else
Return False
End If
End Function
Private Function DownloadGallery(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String,
Optional ByVal _UserID As String = Nothing, Optional ByVal FirstOnly As Boolean = False) As Boolean
Try
Dim added As Boolean = False
Dim cn$ = IIf(IsChannel, "media_metadata", "mediaMetadata") Dim cn$ = IIf(IsChannel, "media_metadata", "mediaMetadata")
If Not w Is Nothing AndAlso w(cn).XmlIfNothing.Count > 0 Then If Not w Is Nothing AndAlso w(cn).XmlIfNothing.Count > 0 Then
Dim t As EContainer Dim t As EContainer
@@ -268,26 +329,30 @@ Namespace API.Reddit
t = n.ItemF({"s", "u"}) t = n.ItemF({"s", "u"})
If Not t Is Nothing AndAlso Not t.Value.IsEmptyString Then If Not t Is Nothing AndAlso Not t.Value.IsEmptyString Then
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, t.Value, PostID, PostDate, _UserID, IsChannel), LNC) _TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, t.Value, PostID, PostDate, _UserID, IsChannel), LNC)
added = True
If FirstOnly Then Exit For If FirstOnly Then Exit For
End If End If
Next Next
End If End If
Return added
Catch ex As Exception Catch ex As Exception
LogError(ex, "gallery parsing error") LogError(ex, "gallery parsing error")
HasError = True HasError = True
Return False
End Try End Try
End Sub End Function
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken) Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
Try Try
Token.ThrowIfCancellationRequested() ThrowAny(Token)
If _TempMediaList.Count > 0 AndAlso _TempMediaList.Exists(Function(p) p.Type = UTypes.VideoPre) Then If _TempMediaList.Count > 0 AndAlso _TempMediaList.Exists(Function(p) p.Type = UTypes.VideoPre) Then
Dim r$, v$ Dim r$, v$
Dim e As New ErrorsDescriber(EDP.ReturnValue)
Dim m As UserMedia Dim m As UserMedia
For i% = _TempMediaList.Count - 1 To 0 Step -1 For i% = _TempMediaList.Count - 1 To 0 Step -1
Token.ThrowIfCancellationRequested() ThrowAny(Token)
If _TempMediaList(i).Type = UTypes.VideoPre Then If _TempMediaList(i).Type = UTypes.VideoPre Then
m = _TempMediaList(i) m = _TempMediaList(i)
r = GetSiteResponse(m.URL) r = GetSiteResponse(m.URL, e)
_TempMediaList(i) = New UserMedia _TempMediaList(i) = New UserMedia
If Not r.IsEmptyString Then If Not r.IsEmptyString Then
v = RegexReplace(r, VideoRegEx) v = RegexReplace(r, VideoRegEx)
@@ -301,6 +366,7 @@ Namespace API.Reddit
Next Next
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Catch dex As ObjectDisposedException When Disposed
Catch ex As Exception Catch ex As Exception
LogError(ex, "video reparsing error") LogError(ex, "video reparsing error")
End Try End Try
@@ -326,14 +392,14 @@ Namespace API.Reddit
If _URL.IsEmptyString And t = UTypes.Picture Then Return Nothing If _URL.IsEmptyString And t = UTypes.Picture Then Return Nothing
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern)) _URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}} Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}}
If t = UTypes.Picture Or t = UTypes.GIF Then m.File = CStr(RegexReplace(m.URL, FilesPattern)) Else m.File = Nothing If t = UTypes.Picture Or t = UTypes.GIF Then m.File = UrlToFile(m.URL) Else m.File = Nothing
If m.URL.Contains("preview") Then m.URL = $"https://i.redd.it/{m.File.File}" If m.URL.Contains("preview") Then m.URL = $"https://i.redd.it/{m.File.File}"
If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, If(IsChannel, DateProviderChannel, DateProvider), Nothing) Else m.Post.Date = Nothing If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, If(IsChannel, DateProviderChannel, DateProvider), Nothing) Else m.Post.Date = Nothing
Return m Return m
End Function End Function
Private Function TryFile(ByVal URL As String) As Boolean Private Function TryFile(ByVal URL As String) As Boolean
Try Try
If Not URL.IsEmptyString AndAlso URL.Contains(".jpg") Then If Not URL.IsEmptyString AndAlso URL.StringContains({".jpg", ".png", ".jpeg"}) Then
Dim f As SFile = CStr(RegexReplace(URL, FilesPattern)) Dim f As SFile = CStr(RegexReplace(URL, FilesPattern))
Return Not f.IsEmptyString And Not f.File.IsEmptyString Return Not f.IsEmptyString And Not f.File.IsEmptyString
End If End If
@@ -342,11 +408,15 @@ Namespace API.Reddit
Return False Return False
End Try End Try
End Function End Function
Private Shared Function UrlToFile(ByVal URL As String) As SFile
Return CStr(RegexReplace(URL, FilesPattern))
End Function
#End Region #End Region
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
Try Try
Dim i% Dim i%
Token.ThrowIfCancellationRequested() Dim dCount% = 0, dTotal% = 0
ThrowAny(Token)
If _ContentNew.Count > 0 Then If _ContentNew.Count > 0 Then
_ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString) _ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString)
If _ContentNew.Count > 0 Then If _ContentNew.Count > 0 Then
@@ -386,12 +456,11 @@ Namespace API.Reddit
If vsf Then SFileShares.SFileExists($"{MyDir}\Video\", SFO.Path) If vsf Then SFileShares.SFileExists($"{MyDir}\Video\", SFO.Path)
Progress.TotalCount += _ContentNew.Count Progress.TotalCount += _ContentNew.Count
For i = 0 To _ContentNew.Count - 1 For i = 0 To _ContentNew.Count - 1
Token.ThrowIfCancellationRequested() ThrowAny(Token)
v = _ContentNew(i) v = _ContentNew(i)
v.State = UStates.Tried v.State = UStates.Tried
If v.Type = UTypes.Picture Then v.File = v.URL
If v.File.IsEmptyString Then If v.File.IsEmptyString Then
f = v.URL f = UrlToFile(v.URL)
Else Else
f = v.File f = v.File
End If End If
@@ -422,9 +491,14 @@ Namespace API.Reddit
Case UTypes.Picture : DownloadedPictures += 1 : _CountPictures += 1 Case UTypes.Picture : DownloadedPictures += 1 : _CountPictures += 1
Case UTypes.Video, UTypes.m3u8 : DownloadedVideos += 1 : _CountVideo += 1 Case UTypes.Video, UTypes.m3u8 : DownloadedVideos += 1 : _CountVideo += 1
End Select End Select
If Not IsChannel Or Not SaveToCache Then
v.File = ChangeFileNameByProvider(f, v)
Else
v.File = f v.File = f
End If
v.Post.CachedFile = f v.Post.CachedFile = f
v.State = UStates.Downloaded v.State = UStates.Downloaded
dCount += 1
End If End If
Catch wex As Exception Catch wex As Exception
If Not IsChannel Then ErrorDownloading(f, v.URL) If Not IsChannel Then ErrorDownloading(f, v.URL)
@@ -433,29 +507,40 @@ Namespace API.Reddit
v.State = UStates.Skipped v.State = UStates.Skipped
End If End If
_ContentNew(i) = v _ContentNew(i) = v
If (CreatedByChannel And Settings.FromChannelDownloadTopUse And dCount >= Settings.FromChannelDownloadTop) Or
(DownloadTopCount.HasValue AndAlso dCount >= DownloadTopCount.Value) Then
Progress.Perform(_ContentNew.Count - dTotal)
Exit Sub
Else
dTotal += 1
Progress.Perform() Progress.Perform()
End If
Next Next
End Using End Using
End If End If
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Catch dex As ObjectDisposedException When Disposed
Catch ex As Exception Catch ex As Exception
LogError(ex, "content downloading error") LogError(ex, "content downloading error")
HasError = True HasError = True
End Try End Try
End Sub End Sub
Protected Function GetSiteResponse(ByVal URL As String) As String Protected Function GetSiteResponse(ByVal URL As String, Optional ByVal e As ErrorsDescriber = Nothing) As String
Try Try
Return Settings.Site(Sites.Reddit).Responser.GetResponse(URL,, EDP.ThrowException) Return Settings.Site(Sites.Reddit).Responser.GetResponse(URL,, EDP.ThrowException)
Catch ex As Exception Catch ex As Exception
HasError = True HasError = True
Dim e As EDP = EDP.SendInLog
Dim OptText$ = String.Empty Dim OptText$ = String.Empty
If Not e.Exists Then
Dim ee As EDP = EDP.SendInLog
If Settings.Site(Sites.Reddit).Responser.StatusCode = HttpStatusCode.NotFound Then If Settings.Site(Sites.Reddit).Responser.StatusCode = HttpStatusCode.NotFound Then
e += EDP.ThrowException ee += EDP.ThrowException
OptText = ": USER NOT FOUND" OptText = ": USER NOT FOUND"
Else Else
e += EDP.ReturnValue ee += EDP.ReturnValue
End If
e = New ErrorsDescriber(ee)
End If End If
Return ErrorsDescriber.Execute(e, ex, $"[{Site} - {Name}: GetSiteResponse([{URL}])]{OptText}", String.Empty) Return ErrorsDescriber.Execute(e, ex, $"[{Site} - {Name}: GetSiteResponse([{URL}])]{OptText}", String.Empty)
End Try End Try

View File

@@ -58,13 +58,13 @@ Namespace API.Twitter
URL = $"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={Name}&count=200&exclude_replies=false&include_rts=1&tweet_mode=extended" URL = $"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={Name}&count=200&exclude_replies=false&include_rts=1&tweet_mode=extended"
If Not POST.IsEmptyString Then URL &= $"&max_id={POST}" If Not POST.IsEmptyString Then URL &= $"&max_id={POST}"
Token.ThrowIfCancellationRequested() ThrowAny(Token)
Dim r$ = Settings.Site(Sites.Twitter).Responser.GetResponse(URL,, EDP.ThrowException) Dim r$ = Settings.Site(Sites.Twitter).Responser.GetResponse(URL,, EDP.ThrowException)
If Not r.IsEmptyString Then If Not r.IsEmptyString Then
Using w As EContainer = JsonDocument.Parse(r) Using w As EContainer = JsonDocument.Parse(r)
If Not w Is Nothing AndAlso w.Count > 0 Then If Not w Is Nothing AndAlso w.Count > 0 Then
For Each nn In w For Each nn In w
Token.ThrowIfCancellationRequested() ThrowAny(Token)
If nn.Count > 0 Then If nn.Count > 0 Then
PostID = nn.Value("id") PostID = nn.Value("id")
If ID.IsEmptyString Then If ID.IsEmptyString Then
@@ -107,6 +107,7 @@ Namespace API.Twitter
If Not PostID.IsEmptyString And NewPostDetected Then DownloadData(PostID, Token) If Not PostID.IsEmptyString And NewPostDetected Then DownloadData(PostID, Token)
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Catch dex As ObjectDisposedException When Disposed
Catch ex As Exception Catch ex As Exception
LogError(ex, $"data downloading error [{URL}]") LogError(ex, $"data downloading error [{URL}]")
HasError = True HasError = True
@@ -206,7 +207,7 @@ Namespace API.Twitter
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken) Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
Try Try
Dim i% Dim i%
Token.ThrowIfCancellationRequested() ThrowAny(Token)
If _ContentNew.Count > 0 Then If _ContentNew.Count > 0 Then
_ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString) _ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString)
If _ContentNew.Count > 0 Then If _ContentNew.Count > 0 Then
@@ -219,7 +220,7 @@ Namespace API.Twitter
If vsf Then SFileShares.SFileExists($"{MyDir}\Video\", SFO.Path) If vsf Then SFileShares.SFileExists($"{MyDir}\Video\", SFO.Path)
MainProgress.TotalCount += _ContentNew.Count MainProgress.TotalCount += _ContentNew.Count
For i = 0 To _ContentNew.Count - 1 For i = 0 To _ContentNew.Count - 1
Token.ThrowIfCancellationRequested() ThrowAny(Token)
v = _ContentNew(i) v = _ContentNew(i)
v.State = UStates.Tried v.State = UStates.Tried
If v.File.IsEmptyString Then If v.File.IsEmptyString Then
@@ -240,7 +241,7 @@ Namespace API.Twitter
Case "mp4" : v.Type = UserMedia.Types.Video : DownloadedVideos += 1 : _CountVideo += 1 Case "mp4" : v.Type = UserMedia.Types.Video : DownloadedVideos += 1 : _CountVideo += 1
Case Else : v.Type = UserMedia.Types.Picture : DownloadedPictures += 1 : _CountPictures += 1 Case Else : v.Type = UserMedia.Types.Picture : DownloadedPictures += 1 : _CountPictures += 1
End Select End Select
v.File = f v.File = ChangeFileNameByProvider(f, v)
v.State = UStates.Downloaded v.State = UStates.Downloaded
Catch wex As Exception Catch wex As Exception
ErrorDownloading(f, v.URL_BASE) ErrorDownloading(f, v.URL_BASE)
@@ -255,6 +256,7 @@ Namespace API.Twitter
End If End If
End If End If
Catch oex As OperationCanceledException When Token.IsCancellationRequested Catch oex As OperationCanceledException When Token.IsCancellationRequested
Catch dex As ObjectDisposedException When Disposed
Catch ex As Exception Catch ex As Exception
LogError(ex, "content downloading error") LogError(ex, "content downloading error")
HasError = True HasError = True

View File

@@ -20,6 +20,14 @@ Namespace API
ChangeCollectionName(NewName, True) ChangeCollectionName(NewName, True)
End Set End Set
End Property End Property
Friend Overrides Property Name As String
Get
Return CollectionName
End Get
Set(ByVal NewCollectionName As String)
CollectionName = NewCollectionName
End Set
End Property
Friend Overrides Sub ChangeCollectionName(ByVal NewName As String, ByVal UpdateSettings As Boolean) Friend Overrides Sub ChangeCollectionName(ByVal NewName As String, ByVal UpdateSettings As Boolean)
_CollectionName = NewName _CollectionName = NewName
If Count > 0 Then Collections.ForEach(Sub(c) c.CollectionName = NewName) If Count > 0 Then Collections.ForEach(Sub(c) c.CollectionName = NewName)
@@ -90,7 +98,7 @@ Namespace API
Friend Overrides Property DataMerging As Boolean Friend Overrides Property DataMerging As Boolean
Get Get
If Count > 0 Then If Count > 0 Then
Return DirectCast(Collections(0), UserDataBase).DataMerging Return DirectCast(Collections(0).Self, UserDataBase).DataMerging
Else Else
Return False Return False
End If End If
@@ -134,6 +142,14 @@ Namespace API
UpdateUserInformation() UpdateUserInformation()
End Set End Set
End Property End Property
Friend Overrides Property ReadyForDownload As Boolean
Get
Return Count > 0 AndAlso Collections(0).ReadyForDownload
End Get
Set(ByVal IsReady As Boolean)
If Count > 0 Then Collections.ForEach(Sub(c) c.ReadyForDownload = IsReady)
End Set
End Property
Friend Overrides ReadOnly Property Labels As List(Of String) Friend Overrides ReadOnly Property Labels As List(Of String)
Get Get
If Count > 0 Then If Count > 0 Then
@@ -145,15 +161,15 @@ Namespace API
End Property End Property
Friend Overrides Function GetUserInformation() As String Friend Overrides Function GetUserInformation() As String
Dim OutStr$ = String.Empty Dim OutStr$ = String.Empty
If Count > 0 Then Collections.ForEach(Sub(c) OutStr.StringAppendLine(DirectCast(c, UserDataBase).GetUserInformation(), $"{vbCrLf}{vbCrLf}")) If Count > 0 Then Collections.ForEach(Sub(c) OutStr.StringAppendLine(DirectCast(c.Self, UserDataBase).GetUserInformation(), $"{vbCrLf}{vbCrLf}"))
Return OutStr Return OutStr
End Function End Function
Friend Overrides Property LastUpdated As Date? Friend Overrides Property LastUpdated As Date?
Get Get
If Count > 0 Then If Count > 0 Then
With If((From c In Collections With If((From c In Collections
Where DirectCast(c, UserDataBase).LastUpdated.HasValue Where DirectCast(c.Self, UserDataBase).LastUpdated.HasValue
Select DirectCast(c, UserDataBase).LastUpdated.Value).ToList, New List(Of Date)) Select DirectCast(c.Self, UserDataBase).LastUpdated.Value).ToList, New List(Of Date))
If .Count > 0 Then Return .Max If .Count > 0 Then Return .Max
End With End With
End If End If
@@ -171,7 +187,7 @@ Namespace API
Friend ReadOnly Property ContextDown As ToolStripMenuItem() Friend ReadOnly Property ContextDown As ToolStripMenuItem()
Get Get
If Count > 0 Then If Count > 0 Then
Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_DOWN).ToArray Return Collections.Select(Function(c) DirectCast(c.Self, UserDataBase).BTT_CONTEXT_DOWN).ToArray
Else Else
Return New ToolStripMenuItem() {} Return New ToolStripMenuItem() {}
End If End If
@@ -180,7 +196,7 @@ Namespace API
Friend ReadOnly Property ContextEdit As ToolStripMenuItem() Friend ReadOnly Property ContextEdit As ToolStripMenuItem()
Get Get
If Count > 0 Then If Count > 0 Then
Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_EDIT).ToArray Return Collections.Select(Function(c) DirectCast(c.Self, UserDataBase).BTT_CONTEXT_EDIT).ToArray
Else Else
Return New ToolStripMenuItem() {} Return New ToolStripMenuItem() {}
End If End If
@@ -189,7 +205,7 @@ Namespace API
Friend ReadOnly Property ContextDelete As ToolStripMenuItem() Friend ReadOnly Property ContextDelete As ToolStripMenuItem()
Get Get
If Count > 0 Then If Count > 0 Then
Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_DELETE).ToArray Return Collections.Select(Function(c) DirectCast(c.Self, UserDataBase).BTT_CONTEXT_DELETE).ToArray
Else Else
Return New ToolStripMenuItem() {} Return New ToolStripMenuItem() {}
End If End If
@@ -198,7 +214,7 @@ Namespace API
Friend ReadOnly Property ContextPath As ToolStripMenuItem() Friend ReadOnly Property ContextPath As ToolStripMenuItem()
Get Get
If Count > 0 Then If Count > 0 Then
Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_OPEN_PATH).ToArray Return Collections.Select(Function(c) DirectCast(c.Self, UserDataBase).BTT_CONTEXT_OPEN_PATH).ToArray
Else Else
Return New ToolStripMenuItem() {} Return New ToolStripMenuItem() {}
End If End If
@@ -207,7 +223,7 @@ Namespace API
Friend ReadOnly Property ContextSite As ToolStripMenuItem() Friend ReadOnly Property ContextSite As ToolStripMenuItem()
Get Get
If Count > 0 Then If Count > 0 Then
Return Collections.Select(Function(c) DirectCast(c, UserDataBase).BTT_CONTEXT_OPEN_SITE).ToArray Return Collections.Select(Function(c) DirectCast(c.Self, UserDataBase).BTT_CONTEXT_OPEN_SITE).ToArray
Else Else
Return New ToolStripMenuItem() {} Return New ToolStripMenuItem() {}
End If End If
@@ -231,24 +247,19 @@ Namespace API
If Count > 0 Then Collections.ForEach(Sub(c) c.UpdateUserInformation()) If Count > 0 Then Collections.ForEach(Sub(c) c.UpdateUserInformation())
End Sub End Sub
Friend Overrides Sub LoadContentInformation() Friend Overrides Sub LoadContentInformation()
If Count > 0 Then Collections.ForEach(Sub(c) DirectCast(c, UserDataBase).LoadContentInformation()) If Count > 0 Then Collections.ForEach(Sub(c) DirectCast(c.Self, UserDataBase).LoadContentInformation())
End Sub End Sub
Friend Overrides Property DownloadReparseOnly As Boolean Friend Overrides Property DownloadTopCount As Integer?
Get
If Count > 0 Then Return Collections(0).DownloadReparseOnly Else Return False
End Get
Set(ByVal DRO As Boolean)
If Count > 0 Then Collections.ForEach(Sub(u) u.DownloadReparseOnly = DRO)
End Set
End Property
Friend Overrides ReadOnly Property DataForReparseExists As Boolean
Get Get
If Count > 0 Then If Count > 0 Then
Return Collections.Exists(Function(u) u.DataForReparseExists) Return Collections(0).DownloadTopCount
Else Else
Return False Return Nothing
End If End If
End Get End Get
Set(ByVal NewLimit As Integer?)
If Count > 0 Then Collections.ForEach(Sub(c) c.DownloadTopCount = NewLimit)
End Set
End Property End Property
Friend Overrides Sub DownloadData(ByVal Token As CancellationToken) Friend Overrides Sub DownloadData(ByVal Token As CancellationToken)
If Count > 0 Then Downloader.AddRange(Collections) If Count > 0 Then Downloader.AddRange(Collections)
@@ -282,16 +293,24 @@ Namespace API
Return False Return False
End Get End Get
End Property End Property
''' <exception cref="InvalidOperationException"></exception>
Friend Overloads Sub Add(ByVal _Item As IUserData) Implements ICollection(Of IUserData).Add Friend Overloads Sub Add(ByVal _Item As IUserData) Implements ICollection(Of IUserData).Add
With _Item With _Item
If .MoveFiles(CollectionName) Then
If DataMerging Then DirectCast(.Self, UserDataBase).MergeData()
Collections.Add(_Item)
With Collections.Last
If Collections.Count - 1 > 0 Then
.Temporary = Temporary .Temporary = Temporary
.Favorite = Favorite .Favorite = Favorite
.UpdateUserInformation()
End If
ImageHandler(_Item, False) ImageHandler(_Item, False)
AddHandler _Item.OnPictureUpdated, AddressOf User_OnPictureUpdated AddHandler .Self.OnPictureUpdated, AddressOf User_OnPictureUpdated
Dim m As Boolean = DataMerging DirectCast(.Self, UserDataBase).CreateButtons(Count - 1)
If .MoveFiles(CollectionName, m) Then End With
Collections.Add(_Item) Else
DirectCast(_Item, UserDataBase).CreateButtons(Count - 1) Throw New InvalidOperationException("User data doe not move to the collection folder")
End If End If
End With End With
End Sub End Sub
@@ -302,7 +321,7 @@ Namespace API
Case Sites.Twitter : Collections.Add(New Twitter.UserData(u, _LoadData)) Case Sites.Twitter : Collections.Add(New Twitter.UserData(u, _LoadData))
Case Else : Exit Sub Case Else : Exit Sub
End Select End Select
With DirectCast(Collections(Count - 1), UserDataBase) With DirectCast(Collections.Last.Self, UserDataBase)
.CreateButtons(Count - 1) .CreateButtons(Count - 1)
AddHandler .BTT_CONTEXT_DELETE.Click, AddressOf BTT_CONTEXT_DELETE_Click AddHandler .BTT_CONTEXT_DELETE.Click, AddressOf BTT_CONTEXT_DELETE_Click
End With End With
@@ -313,7 +332,7 @@ Namespace API
For i% = 0 To _Items.Count - 1 : Add(_Items(i)) : Next For i% = 0 To _Items.Count - 1 : Add(_Items(i)) : Next
End If End If
End Sub End Sub
Friend Overrides Function MoveFiles(ByVal __CollectionName As String, ByVal _MergeData As Boolean) As Boolean Friend Overrides Function MoveFiles(ByVal __CollectionName As String) As Boolean
Throw New NotImplementedException("Files moving does not available if collection context") Throw New NotImplementedException("Files moving does not available if collection context")
End Function End Function
Friend Overloads Sub MergeData(ByVal Merging As Boolean) Friend Overloads Sub MergeData(ByVal Merging As Boolean)
@@ -323,7 +342,7 @@ Namespace API
MsgBoxE($"Collection [{CollectionName}] data already merged") MsgBoxE($"Collection [{CollectionName}] data already merged")
Else Else
If Collections.Count > 1 Then If Collections.Count > 1 Then
Collections.ForEach(Sub(c) DirectCast(c, UserDataBase).MergeData()) Collections.ForEach(Sub(c) DirectCast(c.Self, UserDataBase).MergeData())
MsgBoxE($"Collection [{CollectionName}] data merged") MsgBoxE($"Collection [{CollectionName}] data merged")
Else Else
MsgBoxE($"Collection [{CollectionName}] contains only one user profile" & vbCr & MsgBoxE($"Collection [{CollectionName}] contains only one user profile" & vbCr &
@@ -356,21 +375,24 @@ Namespace API
"Operation canceled", MsgBoxStyle.Critical) "Operation canceled", MsgBoxStyle.Critical)
Return False Return False
Else Else
DirectCast(_Item, UserDataBase).MoveFiles(String.Empty, False) DirectCast(_Item.Self, UserDataBase).MoveFiles(String.Empty)
ImageHandler(_Item) ImageHandler(_Item)
Return Collections.Remove(_Item) Return Collections.Remove(_Item)
End If End If
End Function End Function
Friend Overrides Function Delete() As Integer Friend Overrides Function Delete() As Integer
If Count > 0 Then If Count > 0 Then
Dim f As SFile
If MsgBoxE({$"Collection may contain data{vbCr}Do you really want to delete collection and all of it files?", "Collection deleting"}, If MsgBoxE({$"Collection may contain data{vbCr}Do you really want to delete collection and all of it files?", "Collection deleting"},
MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
f = Collections(0).File.CutPath(2).PathWithSeparator
Settings.Users.Remove(Me) Settings.Users.Remove(Me)
Collections.ForEach(Sub(c) c.Delete()) Collections.ForEach(Sub(c) c.Delete())
Downloader.UserRemove(Me) Downloader.UserRemove(Me)
ImageHandler(Me, False) ImageHandler(Me, False)
Collections.ListClearDispose Collections.ListClearDispose
Dispose(False) Dispose(False)
If f.Exists(SFO.Path, False) Then f.Delete(SFO.Path, True, False, EDP.SendInLog)
Return 2 Return 2
Else Else
If DataMerging Then If DataMerging Then
@@ -379,10 +401,10 @@ Namespace API
End If End If
If MsgBoxE({$"Do you want to delete collection only?{vbCr}Users will not be deleted", "Collection deleting"}, If MsgBoxE({$"Do you want to delete collection only?{vbCr}Users will not be deleted", "Collection deleting"},
MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Dim f As SFile = Collections(0).File.CutPath(2) f = Collections(0).File.CutPath(2)
Settings.Users.Remove(Me) Settings.Users.Remove(Me)
Collections.ForEach(Sub(c) Collections.ForEach(Sub(c)
c.MoveFiles(String.Empty, False) c.MoveFiles(String.Empty)
ImageHandler(c) ImageHandler(c)
End Sub) End Sub)
Collections.Clear() Collections.Clear()

View File

@@ -11,6 +11,28 @@ Imports CmbDefaultButtons = PersonalUtilities.Forms.Controls.Base.ActionButton.D
Imports RButton = PersonalUtilities.Tools.RangeSwitcherButton.Types Imports RButton = PersonalUtilities.Tools.RangeSwitcherButton.Types
Friend Class ChannelViewForm : Implements IChannelLimits Friend Class ChannelViewForm : Implements IChannelLimits
Friend Event OnUsersAdded(ByVal StartIndex As Integer) Friend Event OnUsersAdded(ByVal StartIndex As Integer)
#Region "Appended user structure"
Private Structure PendingUser
Friend ID As String
Friend File As SFile
Friend Sub New(ByVal _ID As String, Optional ByVal _File As SFile = Nothing)
ID = _ID
If Settings.FromChannelCopyImageToUser Then File = _File
End Sub
Public Shared Widening Operator CType(ByVal _ID As String) As PendingUser
Return New PendingUser(_ID, False)
End Operator
Public Shared Widening Operator CType(ByVal u As PendingUser) As String
Return u.ToString
End Operator
Public Overrides Function ToString() As String
Return ID
End Function
Public Overrides Function Equals(ByVal Obj As Object) As Boolean
Return Obj.ToString = ID
End Function
End Structure
#End Region
#Region "Declarations" #Region "Declarations"
Private ReadOnly MyDefs As DefaultFormProps Private ReadOnly MyDefs As DefaultFormProps
#Region "Controls" #Region "Controls"
@@ -84,7 +106,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
Private Sub SetLimit(ByVal Source As IChannelLimits) Implements IChannelLimits.SetLimit Private Sub SetLimit(ByVal Source As IChannelLimits) Implements IChannelLimits.SetLimit
End Sub End Sub
#End Region #End Region
Friend ReadOnly PendingUsers As List(Of String) Private ReadOnly PendingUsers As List(Of PendingUser)
Private ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly) Private ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
Private WithEvents MyRange As RangeSwitcher(Of UserPost) Private WithEvents MyRange As RangeSwitcher(Of UserPost)
Private ReadOnly SelectorExpression As Predicate(Of UserPost) = Function(ByVal Post As UserPost) As Boolean Private ReadOnly SelectorExpression As Predicate(Of UserPost) = Function(ByVal Post As UserPost) As Boolean
@@ -106,7 +128,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
CProgress = New MyProgress(ToolbarBOTTOM, PR_CN, LBL_STATUS, "Downloading data") With {.PerformMod = 10, .DropCurrentProgressOnTotalChange = False} CProgress = New MyProgress(ToolbarBOTTOM, PR_CN, LBL_STATUS, "Downloading data") With {.PerformMod = 10, .DropCurrentProgressOnTotalChange = False}
CProvider = New ANumbers(ANumbers.Modes.USA) With {.GroupSize = 3, .DecimalDigits = 0} CProvider = New ANumbers(ANumbers.Modes.USA) With {.GroupSize = 3, .DecimalDigits = 0}
LimitProvider = New ADateTime("dd.MM.yyyy HH:mm") LimitProvider = New ADateTime("dd.MM.yyyy HH:mm")
PendingUsers = New List(Of String) PendingUsers = New List(Of PendingUser)
CMB_CHANNELS = New ComboBoxExtended With { CMB_CHANNELS = New ComboBoxExtended With {
.CaptionMode = ICaptionControl.Modes.CheckBox, .CaptionMode = ICaptionControl.Modes.CheckBox,
@@ -179,6 +201,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
End With End With
CMB_CHANNELS.Enabled(False) = Not CMB_CHANNELS.Checked CMB_CHANNELS.Enabled(False) = Not CMB_CHANNELS.Checked
MyDefs.EndLoaderOperations() MyDefs.EndLoaderOperations()
SetLimitsByChannel(, False)
End Sub End Sub
Private Sub ChannelViewForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing Private Sub ChannelViewForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
AppendPendingUsers() AppendPendingUsers()
@@ -235,7 +258,9 @@ Friend Class ChannelViewForm : Implements IChannelLimits
#Region "Images refill methods" #Region "Images refill methods"
Private Sub AppendPendingUsers() Private Sub AppendPendingUsers()
If LIST_POSTS.CheckedIndices.Count > 0 Then If LIST_POSTS.CheckedIndices.Count > 0 Then
PendingUsers.ListAddList((From p As ListViewItem In LIST_POSTS.Items Where p.Checked Select p.Text), LNC) PendingUsers.ListAddList((From p As ListViewItem In LIST_POSTS.Items
Where p.Checked
Select New PendingUser(p.Text, GetPostBySelected(CStr(p.Tag)).CachedFile)), LNC)
Dim a As Action = Sub() BTT_ADD_USERS.Text = $"Add ({PendingUsers.Count.ToString(CProvider)})" Dim a As Action = Sub() BTT_ADD_USERS.Text = $"Add ({PendingUsers.Count.ToString(CProvider)})"
If ToolbarTOP.InvokeRequired Then ToolbarTOP.Invoke(a) Else a.Invoke If ToolbarTOP.InvokeRequired Then ToolbarTOP.Invoke(a) Else a.Invoke
End If End If
@@ -352,12 +377,12 @@ Friend Class ChannelViewForm : Implements IChannelLimits
End If End If
End Try End Try
End Sub End Sub
Private Function GetCurrentChannel() As Channel Private Function GetCurrentChannel(Optional ByVal ShowExclamation As Boolean = True) As Channel
If CMB_CHANNELS.SelectedIndex >= 0 Then If CMB_CHANNELS.SelectedIndex >= 0 Then
Dim ChannelID$ = CMB_CHANNELS.Value Dim ChannelID$ = CMB_CHANNELS.Value
If Not ChannelID.IsEmptyString Then Return Settings.Channels.Find(ChannelID) If Not ChannelID.IsEmptyString Then Return Settings.Channels.Find(ChannelID)
Else Else
MsgBoxE("No one channel selected", MsgBoxStyle.Exclamation) If ShowExclamation Then MsgBoxE("No one channel selected", MsgBoxStyle.Exclamation)
End If End If
Return Nothing Return Nothing
End Function End Function
@@ -380,19 +405,22 @@ Friend Class ChannelViewForm : Implements IChannelLimits
If PendingUsers.Count > 0 Then If PendingUsers.Count > 0 Then
Dim Added% = 0, Skipped% = 0 Dim Added% = 0, Skipped% = 0
Dim StartIndex% = Settings.Users.Count Dim StartIndex% = Settings.Users.Count
Dim f As SFile
Settings.Labels.Add(CannelsLabelName) Settings.Labels.Add(CannelsLabelName)
Settings.Labels.Add(LabelsKeeper.NoParsedUser) Settings.Labels.Add(LabelsKeeper.NoParsedUser)
Dim rUsers$() = UserBanned(PendingUsers.ToArray) Dim rUsers$() = UserBanned(PendingUsers.Select(Function(u) u.ID).ToArray)
If rUsers.ListExists Then PendingUsers.RemoveAll(Function(u) rUsers.Contains(u)) If rUsers.ListExists Then PendingUsers.RemoveAll(Function(u) rUsers.Contains(u))
If PendingUsers.Count > 0 Then If PendingUsers.Count > 0 Then
With PendingUsers.Select(Function(u) New UserInfo(u, Sites.Reddit)) With PendingUsers.Select(Function(u) New UserInfo(u, Sites.Reddit))
For i = 0 To .Count - 1 For i = 0 To .Count - 1
If Not Settings.UsersList.Contains(.ElementAt(i)) Then If Not Settings.UsersList.Contains(.ElementAt(i)) Then
f = PendingUsers(i).File
Settings.UpdateUsersList(.ElementAt(i)) Settings.UpdateUsersList(.ElementAt(i))
Settings.Users.Add(New UserData(.ElementAt(i), False) With {.Temporary = True}) Settings.Users.Add(New UserData(.ElementAt(i), False) With {.Temporary = True, .CreatedByChannel = True})
With Settings.Users.Last With Settings.Users.Last
.Labels.Add(CannelsLabelName) .Labels.Add(CannelsLabelName)
.UpdateUserInformation() .UpdateUserInformation()
If Settings.FromChannelCopyImageToUser And Not f.IsEmptyString And Not .File.IsEmptyString Then CopyFile(f, .File)
End With End With
Added += 1 Added += 1
Else Else
@@ -409,6 +437,17 @@ Friend Class ChannelViewForm : Implements IChannelLimits
MsgBoxE("No one users selected for add to collection") MsgBoxE("No one users selected for add to collection")
End If End If
End Sub End Sub
Private Sub CopyFile(ByVal Source As SFile, ByVal Destination As SFile)
Try
If Not Source.IsEmptyString And Not Destination.IsEmptyString Then
Destination = Destination.CutPath.PathWithSeparator & "ChannelImage\"
Destination.Name = Source.Name
Destination.Extension = Source.Extension
If Source.Exists AndAlso Destination.Exists(SFO.Path) Then IO.File.Copy(Source, Destination)
End If
Catch ex As Exception
End Try
End Sub
#Region "Limits changer" #Region "Limits changer"
Private Sub OPT_LIMITS_DEFAULT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_LIMITS_DEFAULT.CheckedChanged Private Sub OPT_LIMITS_DEFAULT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_LIMITS_DEFAULT.CheckedChanged
If OPT_LIMITS_DEFAULT.Checked Then If OPT_LIMITS_DEFAULT.Checked Then
@@ -444,9 +483,9 @@ Friend Class ChannelViewForm : Implements IChannelLimits
End Sub End Sub
#End Region #End Region
#Region "CMB_CHANNELS" #Region "CMB_CHANNELS"
Private Sub SetLimitsByChannel(Optional ByVal SelectedChannel As Channel = Nothing) Private Sub SetLimitsByChannel(Optional ByVal SelectedChannel As Channel = Nothing, Optional ByVal ShowExclamation As Boolean = True)
LBL_STATUS.Text = String.Empty LBL_STATUS.Text = String.Empty
Dim c As Channel = If(SelectedChannel, GetCurrentChannel()) Dim c As Channel = If(SelectedChannel, GetCurrentChannel(ShowExclamation))
LBL_LIMIT_TEXT.Text = String.Empty LBL_LIMIT_TEXT.Text = String.Empty
If Not c Is Nothing Then If Not c Is Nothing Then
Settings.LatestSelectedChannel.Value = c.ID Settings.LatestSelectedChannel.Value = c.ID
@@ -500,6 +539,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
Else Else
CMB_CHANNELS.Button(ActionButton.BTT_UP_NAME).Enabled = False CMB_CHANNELS.Button(ActionButton.BTT_UP_NAME).Enabled = False
CMB_CHANNELS.Button(ActionButton.BTT_DOWN_NAME).Enabled = False CMB_CHANNELS.Button(ActionButton.BTT_DOWN_NAME).Enabled = False
SetLimitsByChannel()
End If End If
End Sub End Sub
Private Sub AddNewChannel() Private Sub AddNewChannel()
@@ -642,11 +682,11 @@ Friend Class ChannelViewForm : Implements IChannelLimits
Dim f As SFile = GetPostBySelected().CachedFile Dim f As SFile = GetPostBySelected().CachedFile
If f.Exists Then f.Open() Else MsgBoxE($"Picture file [{f}] does not found", MsgBoxStyle.Critical) If f.Exists Then f.Open() Else MsgBoxE($"Picture file [{f}] does not found", MsgBoxStyle.Critical)
End Sub End Sub
Private Function GetPostBySelected() As UserPost Private Function GetPostBySelected(Optional ByVal SpecificTag As String = Nothing) As UserPost
Dim p As UserPost = Nothing Dim p As UserPost = Nothing
Try Try
If LIST_POSTS.SelectedItems.Count > 0 Then If LIST_POSTS.SelectedItems.Count > 0 Or Not SpecificTag.IsEmptyString Then
Dim t$ = LIST_POSTS.SelectedItems(0).Tag Dim t$ = If(SpecificTag.IsEmptyString, LIST_POSTS.SelectedItems(0).Tag, SpecificTag)
With Settings.Channels.Find(CMB_CHANNELS.Value) With Settings.Channels.Find(CMB_CHANNELS.Value)
If .Count > 0 Then p = .Posts.Find(Function(pp) pp.ID = t) If .Count > 0 Then p = .Posts.Find(Function(pp) pp.ID = t)
End With End With

View File

@@ -54,8 +54,8 @@ Friend Class DownloadedInfoForm
End Sub End Sub
Private Class UsersDateOrder : Implements IComparer(Of IUserData) Private Class UsersDateOrder : Implements IComparer(Of IUserData)
Friend Function Compare(ByVal x As IUserData, ByVal y As IUserData) As Integer Implements IComparer(Of IUserData).Compare Friend Function Compare(ByVal x As IUserData, ByVal y As IUserData) As Integer Implements IComparer(Of IUserData).Compare
Dim xv& = If(DirectCast(x, UserDataBase).LastUpdated.HasValue, DirectCast(x, UserDataBase).LastUpdated.Value.Ticks, 0) Dim xv& = If(DirectCast(x.Self, UserDataBase).LastUpdated.HasValue, DirectCast(x.Self, UserDataBase).LastUpdated.Value.Ticks, 0)
Dim yv& = If(DirectCast(y, UserDataBase).LastUpdated.HasValue, DirectCast(y, UserDataBase).LastUpdated.Value.Ticks, 0) Dim yv& = If(DirectCast(y.Self, UserDataBase).LastUpdated.HasValue, DirectCast(y.Self, UserDataBase).LastUpdated.Value.Ticks, 0)
Return xv.CompareTo(yv) * -1 Return xv.CompareTo(yv) * -1
End Function End Function
End Class End Class
@@ -114,7 +114,7 @@ Friend Class DownloadedInfoForm
Private Sub LIST_DOWN_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_DOWN.MouseDoubleClick Private Sub LIST_DOWN_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_DOWN.MouseDoubleClick
Try Try
If _LatestSelected >= 0 AndAlso _LatestSelected <= _TempUsersList.Count - 1 AndAlso If _LatestSelected >= 0 AndAlso _LatestSelected <= _TempUsersList.Count - 1 AndAlso
Not DirectCast(_TempUsersList(_LatestSelected), UserDataBase).Disposed Then _TempUsersList(_LatestSelected).OpenFolder() Not DirectCast(_TempUsersList(_LatestSelected).Self, UserDataBase).Disposed Then _TempUsersList(_LatestSelected).OpenFolder()
Catch ex As Exception Catch ex As Exception
End Try End Try
End Sub End Sub

View File

@@ -22,19 +22,43 @@
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
Dim TP_IMAGES As System.Windows.Forms.TableLayoutPanel Dim TP_IMAGES As System.Windows.Forms.TableLayoutPanel
Dim TP_CHANNELS_IMGS As System.Windows.Forms.TableLayoutPanel Dim TP_CHANNELS_IMGS As System.Windows.Forms.TableLayoutPanel
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 TP_DEFAULTS As System.Windows.Forms.TableLayoutPanel
Dim TP_FILE_NAME As System.Windows.Forms.TableLayoutPanel
Dim TP_FILE_PATTERNS As System.Windows.Forms.TableLayoutPanel
Dim LBL_DATE_POS As System.Windows.Forms.Label
Dim TT_MAIN As System.Windows.Forms.ToolTip Dim TT_MAIN As System.Windows.Forms.ToolTip
Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.CH_SEPARATE_VIDEO_FOLDER = New System.Windows.Forms.CheckBox() Me.CH_SEPARATE_VIDEO_FOLDER = New System.Windows.Forms.CheckBox()
Me.TXT_COLLECTIONS_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_COLLECTIONS_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.CH_DEF_TEMP = New System.Windows.Forms.CheckBox()
Me.TXT_CHANNELS_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_CHANNELS_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.TXT_CHANNELS_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_CHANNELS_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.TXT_CHANNEL_USER_POST_LIMIT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.CH_COPY_CHANNEL_USER_IMAGE = New System.Windows.Forms.CheckBox()
Me.CH_CHECK_VER_START = New System.Windows.Forms.CheckBox()
Me.TXT_MAX_JOBS_USERS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.TXT_MAX_JOBS_CHANNELS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.CH_DEF_TEMP = New System.Windows.Forms.CheckBox()
Me.CH_DOWN_IMAGES = New System.Windows.Forms.CheckBox()
Me.CH_DOWN_VIDEOS = New System.Windows.Forms.CheckBox()
Me.OPT_FILE_NAME_REPLACE = New System.Windows.Forms.RadioButton()
Me.OPT_FILE_NAME_ADD_DATE = New System.Windows.Forms.RadioButton()
Me.CH_FILE_NAME_CHANGE = New System.Windows.Forms.CheckBox()
Me.CH_FILE_DATE = New System.Windows.Forms.CheckBox()
Me.CH_FILE_TIME = New System.Windows.Forms.CheckBox()
Me.OPT_FILE_DATE_START = New System.Windows.Forms.RadioButton()
Me.OPT_FILE_DATE_END = New System.Windows.Forms.RadioButton()
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
TP_MAIN = New System.Windows.Forms.TableLayoutPanel() TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
TP_IMAGES = New System.Windows.Forms.TableLayoutPanel() TP_IMAGES = New System.Windows.Forms.TableLayoutPanel()
TP_CHANNELS_IMGS = New System.Windows.Forms.TableLayoutPanel() TP_CHANNELS_IMGS = New System.Windows.Forms.TableLayoutPanel()
TP_DEFAULTS = New System.Windows.Forms.TableLayoutPanel()
TP_FILE_NAME = New System.Windows.Forms.TableLayoutPanel()
TP_FILE_PATTERNS = New System.Windows.Forms.TableLayoutPanel()
LBL_DATE_POS = New System.Windows.Forms.Label()
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
TP_MAIN.SuspendLayout() TP_MAIN.SuspendLayout()
CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -45,6 +69,12 @@
TP_CHANNELS_IMGS.SuspendLayout() TP_CHANNELS_IMGS.SuspendLayout()
CType(Me.TXT_CHANNELS_ROWS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_CHANNELS_ROWS, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TXT_CHANNELS_COLUMNS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_CHANNELS_COLUMNS, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TXT_CHANNEL_USER_POST_LIMIT, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TXT_MAX_JOBS_USERS, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TXT_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).BeginInit()
TP_DEFAULTS.SuspendLayout()
TP_FILE_NAME.SuspendLayout()
TP_FILE_PATTERNS.SuspendLayout()
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout() Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
Me.CONTAINER_MAIN.SuspendLayout() Me.CONTAINER_MAIN.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
@@ -58,19 +88,34 @@
TP_MAIN.Controls.Add(Me.CH_SEPARATE_VIDEO_FOLDER, 0, 2) TP_MAIN.Controls.Add(Me.CH_SEPARATE_VIDEO_FOLDER, 0, 2)
TP_MAIN.Controls.Add(Me.TXT_COLLECTIONS_PATH, 0, 4) TP_MAIN.Controls.Add(Me.TXT_COLLECTIONS_PATH, 0, 4)
TP_MAIN.Controls.Add(TP_IMAGES, 0, 1) TP_MAIN.Controls.Add(TP_IMAGES, 0, 1)
TP_MAIN.Controls.Add(Me.CH_DEF_TEMP, 0, 3)
TP_MAIN.Controls.Add(TP_CHANNELS_IMGS, 0, 5) TP_MAIN.Controls.Add(TP_CHANNELS_IMGS, 0, 5)
TP_MAIN.Controls.Add(Me.TXT_CHANNEL_USER_POST_LIMIT, 0, 6)
TP_MAIN.Controls.Add(Me.CH_COPY_CHANNEL_USER_IMAGE, 0, 7)
TP_MAIN.Controls.Add(Me.CH_CHECK_VER_START, 0, 8)
TP_MAIN.Controls.Add(Me.TXT_MAX_JOBS_USERS, 0, 9)
TP_MAIN.Controls.Add(Me.TXT_MAX_JOBS_CHANNELS, 0, 10)
TP_MAIN.Controls.Add(TP_DEFAULTS, 0, 3)
TP_MAIN.Controls.Add(TP_FILE_NAME, 0, 11)
TP_MAIN.Controls.Add(TP_FILE_PATTERNS, 0, 12)
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
TP_MAIN.Location = New System.Drawing.Point(0, 0) TP_MAIN.Location = New System.Drawing.Point(0, 0)
TP_MAIN.Name = "TP_MAIN" TP_MAIN.Name = "TP_MAIN"
TP_MAIN.RowCount = 6 TP_MAIN.RowCount = 13
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692121!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692121!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692121!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692121!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692121!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692121!))
TP_MAIN.Size = New System.Drawing.Size(584, 191) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.693649!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.693649!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692503!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.691732!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.692427!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.691657!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.691657!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
TP_MAIN.Size = New System.Drawing.Size(584, 359)
TP_MAIN.TabIndex = 0 TP_MAIN.TabIndex = 0
' '
'TXT_GLOBAL_PATH 'TXT_GLOBAL_PATH
@@ -96,10 +141,10 @@
' '
Me.CH_SEPARATE_VIDEO_FOLDER.AutoSize = True Me.CH_SEPARATE_VIDEO_FOLDER.AutoSize = True
Me.CH_SEPARATE_VIDEO_FOLDER.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_SEPARATE_VIDEO_FOLDER.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_SEPARATE_VIDEO_FOLDER.Location = New System.Drawing.Point(4, 66) Me.CH_SEPARATE_VIDEO_FOLDER.Location = New System.Drawing.Point(4, 58)
Me.CH_SEPARATE_VIDEO_FOLDER.Name = "CH_SEPARATE_VIDEO_FOLDER" Me.CH_SEPARATE_VIDEO_FOLDER.Name = "CH_SEPARATE_VIDEO_FOLDER"
Me.CH_SEPARATE_VIDEO_FOLDER.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0) Me.CH_SEPARATE_VIDEO_FOLDER.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
Me.CH_SEPARATE_VIDEO_FOLDER.Size = New System.Drawing.Size(576, 24) Me.CH_SEPARATE_VIDEO_FOLDER.Size = New System.Drawing.Size(576, 20)
Me.CH_SEPARATE_VIDEO_FOLDER.TabIndex = 2 Me.CH_SEPARATE_VIDEO_FOLDER.TabIndex = 2
Me.CH_SEPARATE_VIDEO_FOLDER.Text = "Separate video folders" Me.CH_SEPARATE_VIDEO_FOLDER.Text = "Separate video folders"
TT_MAIN.SetToolTip(Me.CH_SEPARATE_VIDEO_FOLDER, resources.GetString("CH_SEPARATE_VIDEO_FOLDER.ToolTip")) TT_MAIN.SetToolTip(Me.CH_SEPARATE_VIDEO_FOLDER, resources.GetString("CH_SEPARATE_VIDEO_FOLDER.ToolTip"))
@@ -115,7 +160,7 @@
Me.TXT_COLLECTIONS_PATH.CaptionToolTipEnabled = True Me.TXT_COLLECTIONS_PATH.CaptionToolTipEnabled = True
Me.TXT_COLLECTIONS_PATH.CaptionToolTipText = "Set collections folder name (name only)" Me.TXT_COLLECTIONS_PATH.CaptionToolTipText = "Set collections folder name (name only)"
Me.TXT_COLLECTIONS_PATH.Dock = System.Windows.Forms.DockStyle.Fill Me.TXT_COLLECTIONS_PATH.Dock = System.Windows.Forms.DockStyle.Fill
Me.TXT_COLLECTIONS_PATH.Location = New System.Drawing.Point(4, 128) Me.TXT_COLLECTIONS_PATH.Location = New System.Drawing.Point(4, 112)
Me.TXT_COLLECTIONS_PATH.Name = "TXT_COLLECTIONS_PATH" Me.TXT_COLLECTIONS_PATH.Name = "TXT_COLLECTIONS_PATH"
Me.TXT_COLLECTIONS_PATH.Size = New System.Drawing.Size(576, 22) Me.TXT_COLLECTIONS_PATH.Size = New System.Drawing.Size(576, 22)
Me.TXT_COLLECTIONS_PATH.TabIndex = 4 Me.TXT_COLLECTIONS_PATH.TabIndex = 4
@@ -128,13 +173,13 @@
TP_IMAGES.Controls.Add(Me.TXT_IMAGE_LARGE, 0, 0) TP_IMAGES.Controls.Add(Me.TXT_IMAGE_LARGE, 0, 0)
TP_IMAGES.Controls.Add(Me.TXT_IMAGE_SMALL, 1, 0) TP_IMAGES.Controls.Add(Me.TXT_IMAGE_SMALL, 1, 0)
TP_IMAGES.Dock = System.Windows.Forms.DockStyle.Fill TP_IMAGES.Dock = System.Windows.Forms.DockStyle.Fill
TP_IMAGES.Location = New System.Drawing.Point(1, 32) TP_IMAGES.Location = New System.Drawing.Point(1, 28)
TP_IMAGES.Margin = New System.Windows.Forms.Padding(0) TP_IMAGES.Margin = New System.Windows.Forms.Padding(0)
TP_IMAGES.Name = "TP_IMAGES" TP_IMAGES.Name = "TP_IMAGES"
TP_IMAGES.RowCount = 1 TP_IMAGES.RowCount = 1
TP_IMAGES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_IMAGES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_IMAGES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!)) TP_IMAGES.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
TP_IMAGES.Size = New System.Drawing.Size(582, 30) TP_IMAGES.Size = New System.Drawing.Size(582, 26)
TP_IMAGES.TabIndex = 1 TP_IMAGES.TabIndex = 1
' '
'TXT_IMAGE_LARGE 'TXT_IMAGE_LARGE
@@ -169,19 +214,6 @@
Me.TXT_IMAGE_SMALL.Text = "10" Me.TXT_IMAGE_SMALL.Text = "10"
Me.TXT_IMAGE_SMALL.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center Me.TXT_IMAGE_SMALL.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
' '
'CH_DEF_TEMP
'
Me.CH_DEF_TEMP.AutoSize = True
Me.CH_DEF_TEMP.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_DEF_TEMP.Location = New System.Drawing.Point(4, 97)
Me.CH_DEF_TEMP.Name = "CH_DEF_TEMP"
Me.CH_DEF_TEMP.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
Me.CH_DEF_TEMP.Size = New System.Drawing.Size(576, 24)
Me.CH_DEF_TEMP.TabIndex = 3
Me.CH_DEF_TEMP.Text = "Temporary default"
TT_MAIN.SetToolTip(Me.CH_DEF_TEMP, "Default value on user creating")
Me.CH_DEF_TEMP.UseVisualStyleBackColor = True
'
'TP_CHANNELS_IMGS 'TP_CHANNELS_IMGS
' '
TP_CHANNELS_IMGS.ColumnCount = 2 TP_CHANNELS_IMGS.ColumnCount = 2
@@ -190,13 +222,13 @@
TP_CHANNELS_IMGS.Controls.Add(Me.TXT_CHANNELS_ROWS, 0, 0) TP_CHANNELS_IMGS.Controls.Add(Me.TXT_CHANNELS_ROWS, 0, 0)
TP_CHANNELS_IMGS.Controls.Add(Me.TXT_CHANNELS_COLUMNS, 1, 0) TP_CHANNELS_IMGS.Controls.Add(Me.TXT_CHANNELS_COLUMNS, 1, 0)
TP_CHANNELS_IMGS.Dock = System.Windows.Forms.DockStyle.Fill TP_CHANNELS_IMGS.Dock = System.Windows.Forms.DockStyle.Fill
TP_CHANNELS_IMGS.Location = New System.Drawing.Point(1, 156) TP_CHANNELS_IMGS.Location = New System.Drawing.Point(1, 136)
TP_CHANNELS_IMGS.Margin = New System.Windows.Forms.Padding(0) TP_CHANNELS_IMGS.Margin = New System.Windows.Forms.Padding(0)
TP_CHANNELS_IMGS.Name = "TP_CHANNELS_IMGS" TP_CHANNELS_IMGS.Name = "TP_CHANNELS_IMGS"
TP_CHANNELS_IMGS.RowCount = 1 TP_CHANNELS_IMGS.RowCount = 1
TP_CHANNELS_IMGS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_CHANNELS_IMGS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_CHANNELS_IMGS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 34.0!)) TP_CHANNELS_IMGS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
TP_CHANNELS_IMGS.Size = New System.Drawing.Size(582, 34) TP_CHANNELS_IMGS.Size = New System.Drawing.Size(582, 26)
TP_CHANNELS_IMGS.TabIndex = 5 TP_CHANNELS_IMGS.TabIndex = 5
' '
'TXT_CHANNELS_ROWS 'TXT_CHANNELS_ROWS
@@ -227,19 +259,294 @@
Me.TXT_CHANNELS_COLUMNS.Text = "0" Me.TXT_CHANNELS_COLUMNS.Text = "0"
Me.TXT_CHANNELS_COLUMNS.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center Me.TXT_CHANNELS_COLUMNS.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
' '
'TXT_CHANNEL_USER_POST_LIMIT
'
Me.TXT_CHANNEL_USER_POST_LIMIT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
Me.TXT_CHANNEL_USER_POST_LIMIT.CaptionSizeType = System.Windows.Forms.SizeType.Percent
Me.TXT_CHANNEL_USER_POST_LIMIT.CaptionText = "Download limit for channel user"
Me.TXT_CHANNEL_USER_POST_LIMIT.CaptionToolTipText = "Set count of downloading posts limit if user added from channel"
Me.TXT_CHANNEL_USER_POST_LIMIT.CaptionWidth = 50.0R
Me.TXT_CHANNEL_USER_POST_LIMIT.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown
Me.TXT_CHANNEL_USER_POST_LIMIT.Dock = System.Windows.Forms.DockStyle.Fill
Me.TXT_CHANNEL_USER_POST_LIMIT.Location = New System.Drawing.Point(4, 166)
Me.TXT_CHANNEL_USER_POST_LIMIT.Name = "TXT_CHANNEL_USER_POST_LIMIT"
Me.TXT_CHANNEL_USER_POST_LIMIT.NumberMaximum = New Decimal(New Integer() {1000, 0, 0, 0})
Me.TXT_CHANNEL_USER_POST_LIMIT.NumberMinimum = New Decimal(New Integer() {1, 0, 0, 0})
Me.TXT_CHANNEL_USER_POST_LIMIT.Size = New System.Drawing.Size(576, 22)
Me.TXT_CHANNEL_USER_POST_LIMIT.TabIndex = 6
Me.TXT_CHANNEL_USER_POST_LIMIT.Text = "1"
Me.TXT_CHANNEL_USER_POST_LIMIT.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'CH_COPY_CHANNEL_USER_IMAGE
'
Me.CH_COPY_CHANNEL_USER_IMAGE.AutoSize = True
Me.CH_COPY_CHANNEL_USER_IMAGE.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_COPY_CHANNEL_USER_IMAGE.Location = New System.Drawing.Point(4, 193)
Me.CH_COPY_CHANNEL_USER_IMAGE.Name = "CH_COPY_CHANNEL_USER_IMAGE"
Me.CH_COPY_CHANNEL_USER_IMAGE.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
Me.CH_COPY_CHANNEL_USER_IMAGE.Size = New System.Drawing.Size(576, 20)
Me.CH_COPY_CHANNEL_USER_IMAGE.TabIndex = 7
Me.CH_COPY_CHANNEL_USER_IMAGE.Text = "Copy channel user image"
TT_MAIN.SetToolTip(Me.CH_COPY_CHANNEL_USER_IMAGE, "Copy image posted by user (in the channel you added from) to the user destination" &
" folder.")
Me.CH_COPY_CHANNEL_USER_IMAGE.UseVisualStyleBackColor = True
'
'CH_CHECK_VER_START
'
Me.CH_CHECK_VER_START.AutoSize = True
Me.CH_CHECK_VER_START.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_CHECK_VER_START.Location = New System.Drawing.Point(4, 220)
Me.CH_CHECK_VER_START.Name = "CH_CHECK_VER_START"
Me.CH_CHECK_VER_START.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
Me.CH_CHECK_VER_START.Size = New System.Drawing.Size(576, 20)
Me.CH_CHECK_VER_START.TabIndex = 8
Me.CH_CHECK_VER_START.Text = "Check new version at start"
Me.CH_CHECK_VER_START.UseVisualStyleBackColor = True
'
'TXT_MAX_JOBS_USERS
'
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
ActionButton4.Index = 0
ActionButton4.Name = "BTT_REFRESH"
ActionButton4.ToolTipText = "Set to default"
Me.TXT_MAX_JOBS_USERS.Buttons.Add(ActionButton4)
Me.TXT_MAX_JOBS_USERS.CaptionSizeType = System.Windows.Forms.SizeType.Percent
Me.TXT_MAX_JOBS_USERS.CaptionText = "Maximum downloading tasks of users"
Me.TXT_MAX_JOBS_USERS.CaptionWidth = 50.0R
Me.TXT_MAX_JOBS_USERS.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown
Me.TXT_MAX_JOBS_USERS.Dock = System.Windows.Forms.DockStyle.Fill
Me.TXT_MAX_JOBS_USERS.Location = New System.Drawing.Point(4, 247)
Me.TXT_MAX_JOBS_USERS.Name = "TXT_MAX_JOBS_USERS"
Me.TXT_MAX_JOBS_USERS.NumberMinimum = New Decimal(New Integer() {1, 0, 0, 0})
Me.TXT_MAX_JOBS_USERS.Size = New System.Drawing.Size(576, 22)
Me.TXT_MAX_JOBS_USERS.TabIndex = 9
Me.TXT_MAX_JOBS_USERS.Text = "1"
Me.TXT_MAX_JOBS_USERS.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'TXT_MAX_JOBS_CHANNELS
'
ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
ActionButton5.Index = 0
ActionButton5.Name = "BTT_REFRESH"
ActionButton5.ToolTipText = "Set to default"
Me.TXT_MAX_JOBS_CHANNELS.Buttons.Add(ActionButton5)
Me.TXT_MAX_JOBS_CHANNELS.CaptionSizeType = System.Windows.Forms.SizeType.Percent
Me.TXT_MAX_JOBS_CHANNELS.CaptionText = "Maximum downloading tasks of channels"
Me.TXT_MAX_JOBS_CHANNELS.CaptionWidth = 50.0R
Me.TXT_MAX_JOBS_CHANNELS.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown
Me.TXT_MAX_JOBS_CHANNELS.Dock = System.Windows.Forms.DockStyle.Fill
Me.TXT_MAX_JOBS_CHANNELS.Location = New System.Drawing.Point(4, 274)
Me.TXT_MAX_JOBS_CHANNELS.Name = "TXT_MAX_JOBS_CHANNELS"
Me.TXT_MAX_JOBS_CHANNELS.NumberMinimum = New Decimal(New Integer() {1, 0, 0, 0})
Me.TXT_MAX_JOBS_CHANNELS.Size = New System.Drawing.Size(576, 22)
Me.TXT_MAX_JOBS_CHANNELS.TabIndex = 10
Me.TXT_MAX_JOBS_CHANNELS.Text = "1"
Me.TXT_MAX_JOBS_CHANNELS.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'TP_DEFAULTS
'
TP_DEFAULTS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
TP_DEFAULTS.ColumnCount = 3
TP_DEFAULTS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_DEFAULTS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_DEFAULTS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_DEFAULTS.Controls.Add(Me.CH_DEF_TEMP, 0, 0)
TP_DEFAULTS.Controls.Add(Me.CH_DOWN_IMAGES, 1, 0)
TP_DEFAULTS.Controls.Add(Me.CH_DOWN_VIDEOS, 2, 0)
TP_DEFAULTS.Dock = System.Windows.Forms.DockStyle.Fill
TP_DEFAULTS.Location = New System.Drawing.Point(1, 82)
TP_DEFAULTS.Margin = New System.Windows.Forms.Padding(0)
TP_DEFAULTS.Name = "TP_DEFAULTS"
TP_DEFAULTS.RowCount = 1
TP_DEFAULTS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_DEFAULTS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27.0!))
TP_DEFAULTS.Size = New System.Drawing.Size(582, 26)
TP_DEFAULTS.TabIndex = 3
'
'CH_DEF_TEMP
'
Me.CH_DEF_TEMP.AutoSize = True
Me.CH_DEF_TEMP.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_DEF_TEMP.Location = New System.Drawing.Point(4, 4)
Me.CH_DEF_TEMP.Name = "CH_DEF_TEMP"
Me.CH_DEF_TEMP.Size = New System.Drawing.Size(186, 18)
Me.CH_DEF_TEMP.TabIndex = 0
Me.CH_DEF_TEMP.Text = "Temporary default"
TT_MAIN.SetToolTip(Me.CH_DEF_TEMP, "Default value on user creating (can be changed in the new user form)")
Me.CH_DEF_TEMP.UseVisualStyleBackColor = True
'
'CH_DOWN_IMAGES
'
Me.CH_DOWN_IMAGES.AutoSize = True
Me.CH_DOWN_IMAGES.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_DOWN_IMAGES.Location = New System.Drawing.Point(197, 4)
Me.CH_DOWN_IMAGES.Name = "CH_DOWN_IMAGES"
Me.CH_DOWN_IMAGES.Size = New System.Drawing.Size(186, 18)
Me.CH_DOWN_IMAGES.TabIndex = 1
Me.CH_DOWN_IMAGES.Text = "Download images"
TT_MAIN.SetToolTip(Me.CH_DOWN_IMAGES, "By default, download images for new users (can be changed in the new user form)")
Me.CH_DOWN_IMAGES.UseVisualStyleBackColor = True
'
'CH_DOWN_VIDEOS
'
Me.CH_DOWN_VIDEOS.AutoSize = True
Me.CH_DOWN_VIDEOS.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_DOWN_VIDEOS.Location = New System.Drawing.Point(390, 4)
Me.CH_DOWN_VIDEOS.Name = "CH_DOWN_VIDEOS"
Me.CH_DOWN_VIDEOS.Size = New System.Drawing.Size(188, 18)
Me.CH_DOWN_VIDEOS.TabIndex = 2
Me.CH_DOWN_VIDEOS.Text = "Download videos"
TT_MAIN.SetToolTip(Me.CH_DOWN_VIDEOS, "By default, download videos for new users (can be changed in the new user form)")
Me.CH_DOWN_VIDEOS.UseVisualStyleBackColor = True
'
'TP_FILE_NAME
'
TP_FILE_NAME.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
TP_FILE_NAME.ColumnCount = 3
TP_FILE_NAME.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_FILE_NAME.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_FILE_NAME.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_FILE_NAME.Controls.Add(Me.OPT_FILE_NAME_REPLACE, 1, 0)
TP_FILE_NAME.Controls.Add(Me.OPT_FILE_NAME_ADD_DATE, 2, 0)
TP_FILE_NAME.Controls.Add(Me.CH_FILE_NAME_CHANGE, 0, 0)
TP_FILE_NAME.Dock = System.Windows.Forms.DockStyle.Fill
TP_FILE_NAME.Location = New System.Drawing.Point(1, 298)
TP_FILE_NAME.Margin = New System.Windows.Forms.Padding(0)
TP_FILE_NAME.Name = "TP_FILE_NAME"
TP_FILE_NAME.RowCount = 1
TP_FILE_NAME.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_FILE_NAME.Size = New System.Drawing.Size(582, 26)
TP_FILE_NAME.TabIndex = 12
'
'OPT_FILE_NAME_REPLACE
'
Me.OPT_FILE_NAME_REPLACE.AutoSize = True
Me.OPT_FILE_NAME_REPLACE.Dock = System.Windows.Forms.DockStyle.Fill
Me.OPT_FILE_NAME_REPLACE.Location = New System.Drawing.Point(197, 4)
Me.OPT_FILE_NAME_REPLACE.Name = "OPT_FILE_NAME_REPLACE"
Me.OPT_FILE_NAME_REPLACE.Size = New System.Drawing.Size(186, 18)
Me.OPT_FILE_NAME_REPLACE.TabIndex = 1
Me.OPT_FILE_NAME_REPLACE.TabStop = True
Me.OPT_FILE_NAME_REPLACE.Text = "Replace file name by date"
Me.OPT_FILE_NAME_REPLACE.UseVisualStyleBackColor = True
'
'OPT_FILE_NAME_ADD_DATE
'
Me.OPT_FILE_NAME_ADD_DATE.AutoSize = True
Me.OPT_FILE_NAME_ADD_DATE.Dock = System.Windows.Forms.DockStyle.Fill
Me.OPT_FILE_NAME_ADD_DATE.Location = New System.Drawing.Point(390, 4)
Me.OPT_FILE_NAME_ADD_DATE.Name = "OPT_FILE_NAME_ADD_DATE"
Me.OPT_FILE_NAME_ADD_DATE.Size = New System.Drawing.Size(188, 18)
Me.OPT_FILE_NAME_ADD_DATE.TabIndex = 2
Me.OPT_FILE_NAME_ADD_DATE.TabStop = True
Me.OPT_FILE_NAME_ADD_DATE.Text = "Add date/time to file name"
Me.OPT_FILE_NAME_ADD_DATE.UseVisualStyleBackColor = True
'
'CH_FILE_NAME_CHANGE
'
Me.CH_FILE_NAME_CHANGE.AutoSize = True
Me.CH_FILE_NAME_CHANGE.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_FILE_NAME_CHANGE.Location = New System.Drawing.Point(4, 4)
Me.CH_FILE_NAME_CHANGE.Name = "CH_FILE_NAME_CHANGE"
Me.CH_FILE_NAME_CHANGE.Size = New System.Drawing.Size(186, 18)
Me.CH_FILE_NAME_CHANGE.TabIndex = 0
Me.CH_FILE_NAME_CHANGE.Text = "Change file names"
Me.CH_FILE_NAME_CHANGE.UseVisualStyleBackColor = True
'
'TP_FILE_PATTERNS
'
TP_FILE_PATTERNS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
TP_FILE_PATTERNS.ColumnCount = 5
TP_FILE_PATTERNS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
TP_FILE_PATTERNS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
TP_FILE_PATTERNS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
TP_FILE_PATTERNS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
TP_FILE_PATTERNS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
TP_FILE_PATTERNS.Controls.Add(Me.CH_FILE_DATE, 0, 0)
TP_FILE_PATTERNS.Controls.Add(Me.CH_FILE_TIME, 1, 0)
TP_FILE_PATTERNS.Controls.Add(LBL_DATE_POS, 2, 0)
TP_FILE_PATTERNS.Controls.Add(Me.OPT_FILE_DATE_START, 3, 0)
TP_FILE_PATTERNS.Controls.Add(Me.OPT_FILE_DATE_END, 4, 0)
TP_FILE_PATTERNS.Dock = System.Windows.Forms.DockStyle.Fill
TP_FILE_PATTERNS.Location = New System.Drawing.Point(1, 325)
TP_FILE_PATTERNS.Margin = New System.Windows.Forms.Padding(0)
TP_FILE_PATTERNS.Name = "TP_FILE_PATTERNS"
TP_FILE_PATTERNS.RowCount = 1
TP_FILE_PATTERNS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_FILE_PATTERNS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40.0!))
TP_FILE_PATTERNS.Size = New System.Drawing.Size(582, 33)
TP_FILE_PATTERNS.TabIndex = 13
'
'CH_FILE_DATE
'
Me.CH_FILE_DATE.AutoSize = True
Me.CH_FILE_DATE.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_FILE_DATE.Location = New System.Drawing.Point(4, 4)
Me.CH_FILE_DATE.Name = "CH_FILE_DATE"
Me.CH_FILE_DATE.Size = New System.Drawing.Size(109, 25)
Me.CH_FILE_DATE.TabIndex = 0
Me.CH_FILE_DATE.Text = "Date"
Me.CH_FILE_DATE.UseVisualStyleBackColor = True
'
'CH_FILE_TIME
'
Me.CH_FILE_TIME.AutoSize = True
Me.CH_FILE_TIME.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_FILE_TIME.Location = New System.Drawing.Point(120, 4)
Me.CH_FILE_TIME.Name = "CH_FILE_TIME"
Me.CH_FILE_TIME.Size = New System.Drawing.Size(109, 25)
Me.CH_FILE_TIME.TabIndex = 1
Me.CH_FILE_TIME.Text = "Time"
Me.CH_FILE_TIME.UseVisualStyleBackColor = True
'
'LBL_DATE_POS
'
LBL_DATE_POS.AutoSize = True
LBL_DATE_POS.Dock = System.Windows.Forms.DockStyle.Fill
LBL_DATE_POS.Location = New System.Drawing.Point(236, 1)
LBL_DATE_POS.Name = "LBL_DATE_POS"
LBL_DATE_POS.Size = New System.Drawing.Size(109, 31)
LBL_DATE_POS.TabIndex = 2
LBL_DATE_POS.Text = "Date position:"
LBL_DATE_POS.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'OPT_FILE_DATE_START
'
Me.OPT_FILE_DATE_START.AutoSize = True
Me.OPT_FILE_DATE_START.Dock = System.Windows.Forms.DockStyle.Fill
Me.OPT_FILE_DATE_START.Location = New System.Drawing.Point(352, 4)
Me.OPT_FILE_DATE_START.Name = "OPT_FILE_DATE_START"
Me.OPT_FILE_DATE_START.Size = New System.Drawing.Size(109, 25)
Me.OPT_FILE_DATE_START.TabIndex = 3
Me.OPT_FILE_DATE_START.TabStop = True
Me.OPT_FILE_DATE_START.Text = "Start"
Me.OPT_FILE_DATE_START.UseVisualStyleBackColor = True
'
'OPT_FILE_DATE_END
'
Me.OPT_FILE_DATE_END.AutoSize = True
Me.OPT_FILE_DATE_END.Dock = System.Windows.Forms.DockStyle.Fill
Me.OPT_FILE_DATE_END.Location = New System.Drawing.Point(468, 4)
Me.OPT_FILE_DATE_END.Name = "OPT_FILE_DATE_END"
Me.OPT_FILE_DATE_END.Size = New System.Drawing.Size(110, 25)
Me.OPT_FILE_DATE_END.TabIndex = 4
Me.OPT_FILE_DATE_END.TabStop = True
Me.OPT_FILE_DATE_END.Text = "End"
Me.OPT_FILE_DATE_END.UseVisualStyleBackColor = True
'
'CONTAINER_MAIN 'CONTAINER_MAIN
' '
' '
'CONTAINER_MAIN.ContentPanel 'CONTAINER_MAIN.ContentPanel
' '
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 191) Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 359)
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN" Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(584, 191) Me.CONTAINER_MAIN.Size = New System.Drawing.Size(584, 384)
Me.CONTAINER_MAIN.TabIndex = 0 Me.CONTAINER_MAIN.TabIndex = 0
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
' '
@@ -247,14 +554,14 @@
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(584, 191) Me.ClientSize = New System.Drawing.Size(584, 384)
Me.Controls.Add(Me.CONTAINER_MAIN) Me.Controls.Add(Me.CONTAINER_MAIN)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.KeyPreview = True Me.KeyPreview = True
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MaximumSize = New System.Drawing.Size(600, 230) Me.MaximumSize = New System.Drawing.Size(600, 423)
Me.MinimizeBox = False Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(600, 230) Me.MinimumSize = New System.Drawing.Size(600, 423)
Me.Name = "GlobalSettingsForm" Me.Name = "GlobalSettingsForm"
Me.ShowIcon = False Me.ShowIcon = False
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
@@ -270,6 +577,15 @@
TP_CHANNELS_IMGS.ResumeLayout(False) TP_CHANNELS_IMGS.ResumeLayout(False)
CType(Me.TXT_CHANNELS_ROWS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_CHANNELS_ROWS, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TXT_CHANNELS_COLUMNS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_CHANNELS_COLUMNS, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TXT_CHANNEL_USER_POST_LIMIT, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TXT_MAX_JOBS_USERS, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TXT_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).EndInit()
TP_DEFAULTS.ResumeLayout(False)
TP_DEFAULTS.PerformLayout()
TP_FILE_NAME.ResumeLayout(False)
TP_FILE_NAME.PerformLayout()
TP_FILE_PATTERNS.ResumeLayout(False)
TP_FILE_PATTERNS.PerformLayout()
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False) Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
Me.CONTAINER_MAIN.ResumeLayout(False) Me.CONTAINER_MAIN.ResumeLayout(False)
Me.CONTAINER_MAIN.PerformLayout() Me.CONTAINER_MAIN.PerformLayout()
@@ -283,8 +599,22 @@
Private WithEvents TXT_COLLECTIONS_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_COLLECTIONS_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents TXT_IMAGE_LARGE As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_IMAGE_LARGE As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents TXT_IMAGE_SMALL As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_IMAGE_SMALL As PersonalUtilities.Forms.Controls.TextBoxExtended
Friend WithEvents CH_DEF_TEMP As CheckBox
Private WithEvents TXT_CHANNELS_ROWS As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_CHANNELS_ROWS As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents TXT_CHANNELS_COLUMNS As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_CHANNELS_COLUMNS As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents TXT_CHANNEL_USER_POST_LIMIT As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents CH_COPY_CHANNEL_USER_IMAGE As CheckBox
Private WithEvents CH_CHECK_VER_START As CheckBox
Private WithEvents TXT_MAX_JOBS_USERS As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents TXT_MAX_JOBS_CHANNELS As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents CH_DEF_TEMP As CheckBox
Private WithEvents CH_DOWN_IMAGES As CheckBox
Private WithEvents CH_DOWN_VIDEOS As CheckBox
Private WithEvents OPT_FILE_NAME_REPLACE As RadioButton
Private WithEvents OPT_FILE_NAME_ADD_DATE As RadioButton
Private WithEvents CH_FILE_DATE As CheckBox
Private WithEvents CH_FILE_TIME As CheckBox
Private WithEvents OPT_FILE_DATE_START As RadioButton
Private WithEvents OPT_FILE_DATE_END As RadioButton
Private WithEvents CH_FILE_NAME_CHANGE As CheckBox
End Class End Class
End Namespace End Namespace

View File

@@ -165,4 +165,48 @@ If checked then videos will be stored in separated folder; otherwise, videos wil
<metadata name="TP_CHANNELS_IMGS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="TP_CHANNELS_IMGS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value> <value>False</value>
</metadata> </metadata>
<data name="ActionButton4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE
QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb
ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb
+eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv
qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN
v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA
prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ
qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY
HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74
qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG
VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg==
</value>
</data>
<data name="ActionButton5.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE
QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb
ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb
+eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv
qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN
v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA
prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ
qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY
HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74
qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG
VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="TP_DEFAULTS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="TP_FILE_NAME.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="TP_FILE_PATTERNS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="LBL_DATE_POS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root> </root>

View File

@@ -20,9 +20,25 @@ Namespace Editors
TXT_IMAGE_SMALL.Value = .MaxSmallImageHeigh.Value TXT_IMAGE_SMALL.Value = .MaxSmallImageHeigh.Value
TXT_COLLECTIONS_PATH.Text = .CollectionsPath TXT_COLLECTIONS_PATH.Text = .CollectionsPath
CH_SEPARATE_VIDEO_FOLDER.Checked = .SeparateVideoFolder.Value CH_SEPARATE_VIDEO_FOLDER.Checked = .SeparateVideoFolder.Value
CH_DEF_TEMP.Checked = .DefaultTemporary.Value CH_DEF_TEMP.Checked = .DefaultTemporary
CH_DOWN_IMAGES.Checked = .DefaultDownloadImages
CH_DOWN_VIDEOS.Checked = .DefaultDownloadVideos
TXT_CHANNELS_COLUMNS.Value = .ChannelsImagesColumns.Value TXT_CHANNELS_COLUMNS.Value = .ChannelsImagesColumns.Value
TXT_CHANNELS_ROWS.Value = .ChannelsImagesRows.Value TXT_CHANNELS_ROWS.Value = .ChannelsImagesRows.Value
TXT_CHANNEL_USER_POST_LIMIT.Value = .FromChannelDownloadTop.Value
TXT_CHANNEL_USER_POST_LIMIT.Checked = .FromChannelDownloadTopUse.Value
CH_COPY_CHANNEL_USER_IMAGE.Checked = .FromChannelCopyImageToUser
CH_CHECK_VER_START.Checked = .CheckUpdatesAtStart
TXT_MAX_JOBS_USERS.Value = .MaxUsersJobsCount.Value
TXT_MAX_JOBS_CHANNELS.Value = .ChannelsMaxJobsCount.Value
CH_FILE_NAME_CHANGE.Checked = .FileReplaceNameByDate Or .FileAddDateToFileName Or .FileAddTimeToFileName
OPT_FILE_NAME_REPLACE.Checked = .FileReplaceNameByDate
OPT_FILE_NAME_ADD_DATE.Checked = Not .FileReplaceNameByDate
CH_FILE_DATE.Checked = .FileAddDateToFileName
CH_FILE_TIME.Checked = .FileAddTimeToFileName
OPT_FILE_DATE_START.Checked = Not .FileDateTimePositionEnd
OPT_FILE_DATE_END.Checked = .FileDateTimePositionEnd
End With End With
.MyFieldsChecker = New FieldsChecker .MyFieldsChecker = New FieldsChecker
With .MyFieldsChecker With .MyFieldsChecker
@@ -32,6 +48,7 @@ Namespace Editors
End With End With
.AppendDetectors() .AppendDetectors()
.EndLoaderOperations() .EndLoaderOperations()
ChangeFileNameChangersEnabling()
End With End With
Catch ex As Exception Catch ex As Exception
MyDefs.InvokeLoaderError(ex) MyDefs.InvokeLoaderError(ex)
@@ -40,14 +57,62 @@ Namespace Editors
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
If MyDefs.MyFieldsChecker.AllParamsOK Then If MyDefs.MyFieldsChecker.AllParamsOK Then
With Settings With Settings
Dim a As Func(Of String, Object, Integer) =
Function(t, v) MsgBoxE({$"You are set up higher than default count of along {t} downloading tasks." & vbNewLine &
$"Default: {SettingsCLS.DefaultMaxDownloadingTasks}" & vbNewLine &
$"Your value: {CInt(v)}" & vbNewLine &
"Increasing this value may lead to higher CPU usage." & vbNewLine &
"Do you really want to continue?",
"Increasing download tasks"},
vbExclamation,,, {"Confirm", $"Set to default ({SettingsCLS.DefaultMaxDownloadingTasks})", "Cancel"})
If CInt(TXT_MAX_JOBS_USERS.Value) > SettingsCLS.DefaultMaxDownloadingTasks Then
Select Case a.Invoke("users", TXT_MAX_JOBS_USERS.Value)
Case 1 : TXT_MAX_JOBS_USERS.Value = SettingsCLS.DefaultMaxDownloadingTasks
Case 2 : Exit Sub
End Select
End If
If CInt(TXT_MAX_JOBS_CHANNELS.Value) > SettingsCLS.DefaultMaxDownloadingTasks Then
Select Case a.Invoke("channels", TXT_MAX_JOBS_CHANNELS.Value)
Case 1 : TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks
Case 2 : Exit Sub
End Select
End If
If CH_FILE_NAME_CHANGE.Checked And (Not CH_FILE_DATE.Checked Or Not CH_FILE_TIME.Checked) Then
MsgBoxE({"You must select at least one option (Date and/or Time) if you want to change file names by date or disable file names changes",
"File name options"}, vbCritical)
Exit Sub
End If
.BeginUpdate()
.GlobalPath.Value = TXT_GLOBAL_PATH.Text .GlobalPath.Value = TXT_GLOBAL_PATH.Text
.MaxLargeImageHeigh.Value = CInt(TXT_IMAGE_LARGE.Value) .MaxLargeImageHeigh.Value = CInt(TXT_IMAGE_LARGE.Value)
.MaxSmallImageHeigh.Value = CInt(TXT_IMAGE_SMALL.Value) .MaxSmallImageHeigh.Value = CInt(TXT_IMAGE_SMALL.Value)
.SeparateVideoFolder.Value = CH_SEPARATE_VIDEO_FOLDER.Checked .SeparateVideoFolder.Value = CH_SEPARATE_VIDEO_FOLDER.Checked
.CollectionsPath.Value = TXT_COLLECTIONS_PATH.Text .CollectionsPath.Value = TXT_COLLECTIONS_PATH.Text
.DefaultTemporary.Value = CH_DEF_TEMP.Checked .DefaultTemporary.Value = CH_DEF_TEMP.Checked
.DefaultDownloadImages.Value = CH_DOWN_IMAGES.Checked
.DefaultDownloadVideos.Value = CH_DOWN_VIDEOS.Checked
.ChannelsImagesRows.Value = CInt(TXT_CHANNELS_ROWS.Value) .ChannelsImagesRows.Value = CInt(TXT_CHANNELS_ROWS.Value)
.ChannelsImagesColumns.Value = CInt(TXT_CHANNELS_COLUMNS.Value) .ChannelsImagesColumns.Value = CInt(TXT_CHANNELS_COLUMNS.Value)
.FromChannelDownloadTopUse.Value = TXT_CHANNEL_USER_POST_LIMIT.Checked
.FromChannelDownloadTop.Value = CInt(TXT_CHANNEL_USER_POST_LIMIT.Value)
.FromChannelCopyImageToUser.Value = CH_COPY_CHANNEL_USER_IMAGE.Checked
.CheckUpdatesAtStart.Value = CH_CHECK_VER_START.Checked
.MaxUsersJobsCount.Value = CInt(TXT_MAX_JOBS_USERS.Value)
If CH_FILE_NAME_CHANGE.Checked Then
.FileReplaceNameByDate.Value = OPT_FILE_NAME_REPLACE.Checked
.FileAddDateToFileName.Value = CH_FILE_DATE.Checked
.FileAddTimeToFileName.Value = CH_FILE_TIME.Checked
.FileDateTimePositionEnd.Value = OPT_FILE_DATE_END.Checked
Else
.FileAddDateToFileName.Value = False
.FileAddTimeToFileName.Value = False
.FileReplaceNameByDate.Value = False
End If
.EndUpdate()
End With End With
MyDefs.CloseForm() MyDefs.CloseForm()
End If End If
@@ -61,5 +126,33 @@ Namespace Editors
If Not f.IsEmptyString Then TXT_GLOBAL_PATH.Text = f If Not f.IsEmptyString Then TXT_GLOBAL_PATH.Text = f
End If End If
End Sub End Sub
Private Sub TXT_MAX_JOBS_USERS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_MAX_JOBS_USERS.ActionOnButtonClick
If Sender.DefaultButton = ActionButton.DefaultButtons.Refresh Then TXT_MAX_JOBS_USERS.Value = SettingsCLS.DefaultMaxDownloadingTasks
End Sub
Private Sub TXT_MAX_JOBS_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_MAX_JOBS_CHANNELS.ActionOnButtonClick
If Sender.DefaultButton = ActionButton.DefaultButtons.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks
End Sub
Private Sub CH_FILE_NAME_CHANGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_FILE_NAME_CHANGE.CheckedChanged
ChangeFileNameChangersEnabling()
End Sub
Private Sub OPT_FILE_NAME_REPLACE_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_FILE_NAME_REPLACE.CheckedChanged
ChangePositionControlsEnabling()
End Sub
Private Sub OPT_FILE_NAME_ADD_DATE_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_FILE_NAME_ADD_DATE.CheckedChanged
ChangePositionControlsEnabling()
End Sub
Private Sub ChangePositionControlsEnabling()
Dim b As Boolean = OPT_FILE_NAME_ADD_DATE.Checked And OPT_FILE_NAME_ADD_DATE.Enabled
OPT_FILE_DATE_START.Enabled = b
OPT_FILE_DATE_END.Enabled = b
End Sub
Private Sub ChangeFileNameChangersEnabling()
Dim b As Boolean = CH_FILE_NAME_CHANGE.Checked
OPT_FILE_NAME_REPLACE.Enabled = b
OPT_FILE_NAME_ADD_DATE.Enabled = b
CH_FILE_DATE.Enabled = b
CH_FILE_TIME.Enabled = b
ChangePositionControlsEnabling()
End Sub
End Class End Class
End Namespace End Namespace

View File

@@ -13,10 +13,10 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
Private components As System.ComponentModel.IContainer Private components As System.ComponentModel.IContainer
<System.Diagnostics.DebuggerStepThrough()> <System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent() Private Sub InitializeComponent()
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LabelsForm)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LabelsForm))
Dim ActionButton2 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 ActionButton3 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()
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
Me.CMB_LABELS = New PersonalUtilities.Forms.Controls.ComboBoxExtended() Me.CMB_LABELS = New PersonalUtilities.Forms.Controls.ComboBoxExtended()
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout() Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
@@ -42,21 +42,21 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
' '
'CMB_LABELS 'CMB_LABELS
' '
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image) ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
ActionButton1.Index = 0 ActionButton4.Index = 0
ActionButton1.Name = "BTT_COMBOBOX_ARROW" ActionButton4.Name = "BTT_COMBOBOX_ARROW"
ActionButton1.Visible = False ActionButton4.Visible = False
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image) ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
ActionButton2.Index = 1 ActionButton5.Index = 1
ActionButton2.Name = "BTT_ADD" ActionButton5.Name = "BTT_ADD"
ActionButton2.ToolTipText = "Add new label (Insert)" ActionButton5.ToolTipText = "Add new label (Insert)"
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image) ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image)
ActionButton3.Index = 2 ActionButton6.Index = 2
ActionButton3.Name = "BTT_CLEAR" ActionButton6.Name = "BTT_CLEAR"
ActionButton3.ToolTipText = "Clear checked labels" ActionButton6.ToolTipText = "Clear checked labels"
Me.CMB_LABELS.Buttons.Add(ActionButton1) Me.CMB_LABELS.Buttons.Add(ActionButton4)
Me.CMB_LABELS.Buttons.Add(ActionButton2) Me.CMB_LABELS.Buttons.Add(ActionButton5)
Me.CMB_LABELS.Buttons.Add(ActionButton3) Me.CMB_LABELS.Buttons.Add(ActionButton6)
Me.CMB_LABELS.Dock = System.Windows.Forms.DockStyle.Fill Me.CMB_LABELS.Dock = System.Windows.Forms.DockStyle.Fill
Me.CMB_LABELS.ListCheckBoxes = True Me.CMB_LABELS.ListCheckBoxes = True
Me.CMB_LABELS.ListDropDownStyle = PersonalUtilities.Forms.Controls.ComboBoxExtended.ListMode.Simple Me.CMB_LABELS.ListDropDownStyle = PersonalUtilities.Forms.Controls.ComboBoxExtended.ListMode.Simple
@@ -64,7 +64,7 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
Me.CMB_LABELS.ListMultiSelect = True Me.CMB_LABELS.ListMultiSelect = True
Me.CMB_LABELS.Location = New System.Drawing.Point(0, 0) Me.CMB_LABELS.Location = New System.Drawing.Point(0, 0)
Me.CMB_LABELS.Name = "CMB_LABELS" Me.CMB_LABELS.Name = "CMB_LABELS"
Me.CMB_LABELS.Size = New System.Drawing.Size(374, 421) Me.CMB_LABELS.Size = New System.Drawing.Size(376, 422)
Me.CMB_LABELS.TabIndex = 0 Me.CMB_LABELS.TabIndex = 0
' '
'LabelsForm 'LabelsForm
@@ -73,6 +73,7 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(374, 421) Me.ClientSize = New System.Drawing.Size(374, 421)
Me.Controls.Add(Me.CONTAINER_MAIN) Me.Controls.Add(Me.CONTAINER_MAIN)
Me.KeyPreview = True
Me.MinimizeBox = False Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(390, 460) Me.MinimumSize = New System.Drawing.Size(390, 460)
Me.Name = "LabelsForm" Me.Name = "LabelsForm"

View File

@@ -118,7 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="ActionButton4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL 3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
@@ -208,7 +208,7 @@
AAAASUVORK5CYII= AAAASUVORK5CYII=
</value> </value>
</data> </data>
<data name="ActionButton2.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="ActionButton5.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6 iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlE JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlE
@@ -230,7 +230,7 @@
0AUyNxOP1DOwcaG/8I+/LRB+At7psBnyDBG0AAAAAElFTkSuQmCC 0AUyNxOP1DOwcaG/8I+/LRB+At7psBnyDBG0AAAAAElFTkSuQmCC
</value> </value>
</data> </data>
<data name="ActionButton3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="ActionButton6.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go

View File

@@ -23,10 +23,12 @@
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(UserCreatorForm)) Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(UserCreatorForm))
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton() Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
Dim TP_DOWN_OPTIONS As System.Windows.Forms.TableLayoutPanel
Dim TT_MAIN As System.Windows.Forms.ToolTip Dim TT_MAIN As System.Windows.Forms.ToolTip
Me.TXT_USER = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_USER = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.OPT_REDDIT = New System.Windows.Forms.RadioButton() Me.OPT_REDDIT = New System.Windows.Forms.RadioButton()
Me.OPT_TWITTER = New System.Windows.Forms.RadioButton() Me.OPT_TWITTER = New System.Windows.Forms.RadioButton()
Me.CH_IS_CHANNEL = New System.Windows.Forms.CheckBox()
Me.CH_TEMP = New System.Windows.Forms.CheckBox() Me.CH_TEMP = New System.Windows.Forms.CheckBox()
Me.CH_FAV = New System.Windows.Forms.CheckBox() Me.CH_FAV = New System.Windows.Forms.CheckBox()
Me.CH_PARSE_USER_MEDIA = New System.Windows.Forms.CheckBox() Me.CH_PARSE_USER_MEDIA = New System.Windows.Forms.CheckBox()
@@ -37,11 +39,14 @@
Me.CH_ADD_BY_LIST = New System.Windows.Forms.CheckBox() Me.CH_ADD_BY_LIST = New System.Windows.Forms.CheckBox()
Me.CH_AUTO_DETECT_SITE = New System.Windows.Forms.CheckBox() Me.CH_AUTO_DETECT_SITE = New System.Windows.Forms.CheckBox()
Me.TXT_LABELS = New PersonalUtilities.Forms.Controls.TextBoxExtended() Me.TXT_LABELS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
Me.CH_DOWN_IMAGES = New System.Windows.Forms.CheckBox()
Me.CH_DOWN_VIDEOS = New System.Windows.Forms.CheckBox()
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer() Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
TP_MAIN = New System.Windows.Forms.TableLayoutPanel() TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
TP_SITE = New System.Windows.Forms.TableLayoutPanel() TP_SITE = New System.Windows.Forms.TableLayoutPanel()
TP_PARAMS = New System.Windows.Forms.TableLayoutPanel() TP_PARAMS = New System.Windows.Forms.TableLayoutPanel()
TP_OTHER = New System.Windows.Forms.TableLayoutPanel() TP_OTHER = New System.Windows.Forms.TableLayoutPanel()
TP_DOWN_OPTIONS = New System.Windows.Forms.TableLayoutPanel()
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components) TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
TP_MAIN.SuspendLayout() TP_MAIN.SuspendLayout()
CType(Me.TXT_USER, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_USER, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -52,6 +57,7 @@
CType(Me.TXT_USER_FRIENDLY, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_USER_FRIENDLY, System.ComponentModel.ISupportInitialize).BeginInit()
Me.TP_ADD_BY_LIST.SuspendLayout() Me.TP_ADD_BY_LIST.SuspendLayout()
CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).BeginInit()
TP_DOWN_OPTIONS.SuspendLayout()
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout() Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
Me.CONTAINER_MAIN.SuspendLayout() Me.CONTAINER_MAIN.SuspendLayout()
Me.SuspendLayout() Me.SuspendLayout()
@@ -64,24 +70,26 @@
TP_MAIN.Controls.Add(Me.TXT_USER, 0, 0) TP_MAIN.Controls.Add(Me.TXT_USER, 0, 0)
TP_MAIN.Controls.Add(TP_SITE, 0, 2) TP_MAIN.Controls.Add(TP_SITE, 0, 2)
TP_MAIN.Controls.Add(TP_PARAMS, 0, 3) TP_MAIN.Controls.Add(TP_PARAMS, 0, 3)
TP_MAIN.Controls.Add(TP_OTHER, 0, 4) TP_MAIN.Controls.Add(TP_OTHER, 0, 5)
TP_MAIN.Controls.Add(Me.TXT_DESCR, 0, 7) TP_MAIN.Controls.Add(Me.TXT_DESCR, 0, 8)
TP_MAIN.Controls.Add(Me.TXT_USER_FRIENDLY, 0, 1) TP_MAIN.Controls.Add(Me.TXT_USER_FRIENDLY, 0, 1)
TP_MAIN.Controls.Add(Me.TP_ADD_BY_LIST, 0, 5) TP_MAIN.Controls.Add(Me.TP_ADD_BY_LIST, 0, 6)
TP_MAIN.Controls.Add(Me.TXT_LABELS, 0, 6) TP_MAIN.Controls.Add(Me.TXT_LABELS, 0, 7)
TP_MAIN.Controls.Add(TP_DOWN_OPTIONS, 0, 4)
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
TP_MAIN.Location = New System.Drawing.Point(0, 0) TP_MAIN.Location = New System.Drawing.Point(0, 0)
TP_MAIN.Name = "TP_MAIN" TP_MAIN.Name = "TP_MAIN"
TP_MAIN.RowCount = 8 TP_MAIN.RowCount = 9
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0005!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66708!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0005!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66708!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0005!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 19.99851!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66708!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66542!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667!))
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 150.0!)) TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 150.0!))
TP_MAIN.Size = New System.Drawing.Size(454, 366) TP_MAIN.Size = New System.Drawing.Size(454, 403)
TP_MAIN.TabIndex = 0 TP_MAIN.TabIndex = 0
' '
'TXT_USER 'TXT_USER
@@ -98,19 +106,20 @@
'TP_SITE 'TP_SITE
' '
TP_SITE.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] TP_SITE.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
TP_SITE.ColumnCount = 2 TP_SITE.ColumnCount = 3
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
TP_SITE.Controls.Add(Me.OPT_REDDIT, 0, 0) TP_SITE.Controls.Add(Me.OPT_REDDIT, 0, 0)
TP_SITE.Controls.Add(Me.OPT_TWITTER, 1, 0) TP_SITE.Controls.Add(Me.OPT_TWITTER, 2, 0)
TP_SITE.Controls.Add(Me.CH_IS_CHANNEL, 1, 0)
TP_SITE.Dock = System.Windows.Forms.DockStyle.Fill TP_SITE.Dock = System.Windows.Forms.DockStyle.Fill
TP_SITE.Location = New System.Drawing.Point(1, 59) TP_SITE.Location = New System.Drawing.Point(1, 59)
TP_SITE.Margin = New System.Windows.Forms.Padding(0) TP_SITE.Margin = New System.Windows.Forms.Padding(0)
TP_SITE.Name = "TP_SITE" TP_SITE.Name = "TP_SITE"
TP_SITE.RowCount = 1 TP_SITE.RowCount = 1
TP_SITE.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_SITE.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_SITE.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29.0!)) TP_SITE.Size = New System.Drawing.Size(452, 31)
TP_SITE.Size = New System.Drawing.Size(452, 30)
TP_SITE.TabIndex = 2 TP_SITE.TabIndex = 2
' '
'OPT_REDDIT 'OPT_REDDIT
@@ -119,7 +128,7 @@
Me.OPT_REDDIT.Dock = System.Windows.Forms.DockStyle.Fill Me.OPT_REDDIT.Dock = System.Windows.Forms.DockStyle.Fill
Me.OPT_REDDIT.Location = New System.Drawing.Point(4, 4) Me.OPT_REDDIT.Location = New System.Drawing.Point(4, 4)
Me.OPT_REDDIT.Name = "OPT_REDDIT" Me.OPT_REDDIT.Name = "OPT_REDDIT"
Me.OPT_REDDIT.Size = New System.Drawing.Size(218, 22) Me.OPT_REDDIT.Size = New System.Drawing.Size(143, 23)
Me.OPT_REDDIT.TabIndex = 0 Me.OPT_REDDIT.TabIndex = 0
Me.OPT_REDDIT.TabStop = True Me.OPT_REDDIT.TabStop = True
Me.OPT_REDDIT.Text = "Reddit" Me.OPT_REDDIT.Text = "Reddit"
@@ -129,14 +138,25 @@
' '
Me.OPT_TWITTER.AutoSize = True Me.OPT_TWITTER.AutoSize = True
Me.OPT_TWITTER.Dock = System.Windows.Forms.DockStyle.Fill Me.OPT_TWITTER.Dock = System.Windows.Forms.DockStyle.Fill
Me.OPT_TWITTER.Location = New System.Drawing.Point(229, 4) Me.OPT_TWITTER.Location = New System.Drawing.Point(304, 4)
Me.OPT_TWITTER.Name = "OPT_TWITTER" Me.OPT_TWITTER.Name = "OPT_TWITTER"
Me.OPT_TWITTER.Size = New System.Drawing.Size(219, 22) Me.OPT_TWITTER.Size = New System.Drawing.Size(144, 23)
Me.OPT_TWITTER.TabIndex = 1 Me.OPT_TWITTER.TabIndex = 1
Me.OPT_TWITTER.TabStop = True Me.OPT_TWITTER.TabStop = True
Me.OPT_TWITTER.Text = "Twitter" Me.OPT_TWITTER.Text = "Twitter"
Me.OPT_TWITTER.UseVisualStyleBackColor = True Me.OPT_TWITTER.UseVisualStyleBackColor = True
' '
'CH_IS_CHANNEL
'
Me.CH_IS_CHANNEL.AutoSize = True
Me.CH_IS_CHANNEL.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_IS_CHANNEL.Location = New System.Drawing.Point(154, 4)
Me.CH_IS_CHANNEL.Name = "CH_IS_CHANNEL"
Me.CH_IS_CHANNEL.Size = New System.Drawing.Size(143, 23)
Me.CH_IS_CHANNEL.TabIndex = 2
Me.CH_IS_CHANNEL.Text = "Channel"
Me.CH_IS_CHANNEL.UseVisualStyleBackColor = True
'
'TP_PARAMS 'TP_PARAMS
' '
TP_PARAMS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single] TP_PARAMS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
@@ -146,13 +166,13 @@
TP_PARAMS.Controls.Add(Me.CH_TEMP, 0, 0) TP_PARAMS.Controls.Add(Me.CH_TEMP, 0, 0)
TP_PARAMS.Controls.Add(Me.CH_FAV, 1, 0) TP_PARAMS.Controls.Add(Me.CH_FAV, 1, 0)
TP_PARAMS.Dock = System.Windows.Forms.DockStyle.Fill TP_PARAMS.Dock = System.Windows.Forms.DockStyle.Fill
TP_PARAMS.Location = New System.Drawing.Point(1, 90) TP_PARAMS.Location = New System.Drawing.Point(1, 91)
TP_PARAMS.Margin = New System.Windows.Forms.Padding(0) TP_PARAMS.Margin = New System.Windows.Forms.Padding(0)
TP_PARAMS.Name = "TP_PARAMS" TP_PARAMS.Name = "TP_PARAMS"
TP_PARAMS.RowCount = 1 TP_PARAMS.RowCount = 1
TP_PARAMS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_PARAMS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_PARAMS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29.0!)) TP_PARAMS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
TP_PARAMS.Size = New System.Drawing.Size(452, 30) TP_PARAMS.Size = New System.Drawing.Size(452, 31)
TP_PARAMS.TabIndex = 3 TP_PARAMS.TabIndex = 3
' '
'CH_TEMP 'CH_TEMP
@@ -161,7 +181,7 @@
Me.CH_TEMP.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_TEMP.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_TEMP.Location = New System.Drawing.Point(4, 4) Me.CH_TEMP.Location = New System.Drawing.Point(4, 4)
Me.CH_TEMP.Name = "CH_TEMP" Me.CH_TEMP.Name = "CH_TEMP"
Me.CH_TEMP.Size = New System.Drawing.Size(218, 22) Me.CH_TEMP.Size = New System.Drawing.Size(218, 23)
Me.CH_TEMP.TabIndex = 0 Me.CH_TEMP.TabIndex = 0
Me.CH_TEMP.Text = "Temporary" Me.CH_TEMP.Text = "Temporary"
Me.CH_TEMP.UseVisualStyleBackColor = True Me.CH_TEMP.UseVisualStyleBackColor = True
@@ -172,7 +192,7 @@
Me.CH_FAV.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_FAV.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_FAV.Location = New System.Drawing.Point(229, 4) Me.CH_FAV.Location = New System.Drawing.Point(229, 4)
Me.CH_FAV.Name = "CH_FAV" Me.CH_FAV.Name = "CH_FAV"
Me.CH_FAV.Size = New System.Drawing.Size(219, 22) Me.CH_FAV.Size = New System.Drawing.Size(219, 23)
Me.CH_FAV.TabIndex = 1 Me.CH_FAV.TabIndex = 1
Me.CH_FAV.Text = "Favorite" Me.CH_FAV.Text = "Favorite"
Me.CH_FAV.UseVisualStyleBackColor = True Me.CH_FAV.UseVisualStyleBackColor = True
@@ -186,14 +206,14 @@
TP_OTHER.Controls.Add(Me.CH_PARSE_USER_MEDIA, 1, 0) TP_OTHER.Controls.Add(Me.CH_PARSE_USER_MEDIA, 1, 0)
TP_OTHER.Controls.Add(Me.CH_READY_FOR_DOWN, 0, 0) TP_OTHER.Controls.Add(Me.CH_READY_FOR_DOWN, 0, 0)
TP_OTHER.Dock = System.Windows.Forms.DockStyle.Fill TP_OTHER.Dock = System.Windows.Forms.DockStyle.Fill
TP_OTHER.Location = New System.Drawing.Point(1, 121) TP_OTHER.Location = New System.Drawing.Point(1, 155)
TP_OTHER.Margin = New System.Windows.Forms.Padding(0) TP_OTHER.Margin = New System.Windows.Forms.Padding(0)
TP_OTHER.Name = "TP_OTHER" TP_OTHER.Name = "TP_OTHER"
TP_OTHER.RowCount = 1 TP_OTHER.RowCount = 1
TP_OTHER.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) TP_OTHER.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_OTHER.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29.0!)) TP_OTHER.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
TP_OTHER.Size = New System.Drawing.Size(452, 30) TP_OTHER.Size = New System.Drawing.Size(452, 31)
TP_OTHER.TabIndex = 4 TP_OTHER.TabIndex = 5
' '
'CH_PARSE_USER_MEDIA 'CH_PARSE_USER_MEDIA
' '
@@ -201,7 +221,7 @@
Me.CH_PARSE_USER_MEDIA.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_PARSE_USER_MEDIA.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_PARSE_USER_MEDIA.Location = New System.Drawing.Point(229, 4) Me.CH_PARSE_USER_MEDIA.Location = New System.Drawing.Point(229, 4)
Me.CH_PARSE_USER_MEDIA.Name = "CH_PARSE_USER_MEDIA" Me.CH_PARSE_USER_MEDIA.Name = "CH_PARSE_USER_MEDIA"
Me.CH_PARSE_USER_MEDIA.Size = New System.Drawing.Size(219, 22) Me.CH_PARSE_USER_MEDIA.Size = New System.Drawing.Size(219, 23)
Me.CH_PARSE_USER_MEDIA.TabIndex = 0 Me.CH_PARSE_USER_MEDIA.TabIndex = 0
Me.CH_PARSE_USER_MEDIA.Text = "Get user media only" Me.CH_PARSE_USER_MEDIA.Text = "Get user media only"
TT_MAIN.SetToolTip(Me.CH_PARSE_USER_MEDIA, "For twitter only!" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "If checked then user media only will be downloaded." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Otherwise" & TT_MAIN.SetToolTip(Me.CH_PARSE_USER_MEDIA, "For twitter only!" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "If checked then user media only will be downloaded." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Otherwise" &
@@ -214,10 +234,10 @@
Me.CH_READY_FOR_DOWN.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_READY_FOR_DOWN.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_READY_FOR_DOWN.Location = New System.Drawing.Point(4, 4) Me.CH_READY_FOR_DOWN.Location = New System.Drawing.Point(4, 4)
Me.CH_READY_FOR_DOWN.Name = "CH_READY_FOR_DOWN" Me.CH_READY_FOR_DOWN.Name = "CH_READY_FOR_DOWN"
Me.CH_READY_FOR_DOWN.Size = New System.Drawing.Size(218, 22) Me.CH_READY_FOR_DOWN.Size = New System.Drawing.Size(218, 23)
Me.CH_READY_FOR_DOWN.TabIndex = 1 Me.CH_READY_FOR_DOWN.TabIndex = 1
Me.CH_READY_FOR_DOWN.Text = "Ready for download" Me.CH_READY_FOR_DOWN.Text = "Ready for download"
TT_MAIN.SetToolTip(Me.CH_READY_FOR_DOWN, "If checked then this user can be downloaded by [Download All]") TT_MAIN.SetToolTip(Me.CH_READY_FOR_DOWN, "Can be downloaded by [Download All]")
Me.CH_READY_FOR_DOWN.UseVisualStyleBackColor = True Me.CH_READY_FOR_DOWN.UseVisualStyleBackColor = True
' '
'TXT_DESCR 'TXT_DESCR
@@ -233,11 +253,11 @@
Me.TXT_DESCR.Dock = System.Windows.Forms.DockStyle.Fill Me.TXT_DESCR.Dock = System.Windows.Forms.DockStyle.Fill
Me.TXT_DESCR.GroupBoxed = True Me.TXT_DESCR.GroupBoxed = True
Me.TXT_DESCR.GroupBoxText = "Description" Me.TXT_DESCR.GroupBoxText = "Description"
Me.TXT_DESCR.Location = New System.Drawing.Point(4, 217) Me.TXT_DESCR.Location = New System.Drawing.Point(4, 254)
Me.TXT_DESCR.Multiline = True Me.TXT_DESCR.Multiline = True
Me.TXT_DESCR.Name = "TXT_DESCR" Me.TXT_DESCR.Name = "TXT_DESCR"
Me.TXT_DESCR.Size = New System.Drawing.Size(446, 145) Me.TXT_DESCR.Size = New System.Drawing.Size(446, 145)
Me.TXT_DESCR.TabIndex = 5 Me.TXT_DESCR.TabIndex = 8
' '
'TXT_USER_FRIENDLY 'TXT_USER_FRIENDLY
' '
@@ -258,12 +278,12 @@
Me.TP_ADD_BY_LIST.Controls.Add(Me.CH_ADD_BY_LIST, 0, 0) Me.TP_ADD_BY_LIST.Controls.Add(Me.CH_ADD_BY_LIST, 0, 0)
Me.TP_ADD_BY_LIST.Controls.Add(Me.CH_AUTO_DETECT_SITE, 1, 0) Me.TP_ADD_BY_LIST.Controls.Add(Me.CH_AUTO_DETECT_SITE, 1, 0)
Me.TP_ADD_BY_LIST.Dock = System.Windows.Forms.DockStyle.Fill Me.TP_ADD_BY_LIST.Dock = System.Windows.Forms.DockStyle.Fill
Me.TP_ADD_BY_LIST.Location = New System.Drawing.Point(1, 152) Me.TP_ADD_BY_LIST.Location = New System.Drawing.Point(1, 187)
Me.TP_ADD_BY_LIST.Margin = New System.Windows.Forms.Padding(0) Me.TP_ADD_BY_LIST.Margin = New System.Windows.Forms.Padding(0)
Me.TP_ADD_BY_LIST.Name = "TP_ADD_BY_LIST" Me.TP_ADD_BY_LIST.Name = "TP_ADD_BY_LIST"
Me.TP_ADD_BY_LIST.RowCount = 1 Me.TP_ADD_BY_LIST.RowCount = 1
Me.TP_ADD_BY_LIST.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) Me.TP_ADD_BY_LIST.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
Me.TP_ADD_BY_LIST.Size = New System.Drawing.Size(452, 30) Me.TP_ADD_BY_LIST.Size = New System.Drawing.Size(452, 31)
Me.TP_ADD_BY_LIST.TabIndex = 6 Me.TP_ADD_BY_LIST.TabIndex = 6
' '
'CH_ADD_BY_LIST 'CH_ADD_BY_LIST
@@ -272,7 +292,7 @@
Me.CH_ADD_BY_LIST.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_ADD_BY_LIST.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_ADD_BY_LIST.Location = New System.Drawing.Point(4, 4) Me.CH_ADD_BY_LIST.Location = New System.Drawing.Point(4, 4)
Me.CH_ADD_BY_LIST.Name = "CH_ADD_BY_LIST" Me.CH_ADD_BY_LIST.Name = "CH_ADD_BY_LIST"
Me.CH_ADD_BY_LIST.Size = New System.Drawing.Size(218, 22) Me.CH_ADD_BY_LIST.Size = New System.Drawing.Size(218, 23)
Me.CH_ADD_BY_LIST.TabIndex = 0 Me.CH_ADD_BY_LIST.TabIndex = 0
Me.CH_ADD_BY_LIST.Text = "Add by list" Me.CH_ADD_BY_LIST.Text = "Add by list"
Me.CH_ADD_BY_LIST.UseVisualStyleBackColor = True Me.CH_ADD_BY_LIST.UseVisualStyleBackColor = True
@@ -283,7 +303,7 @@
Me.CH_AUTO_DETECT_SITE.Dock = System.Windows.Forms.DockStyle.Fill Me.CH_AUTO_DETECT_SITE.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_AUTO_DETECT_SITE.Location = New System.Drawing.Point(229, 4) Me.CH_AUTO_DETECT_SITE.Location = New System.Drawing.Point(229, 4)
Me.CH_AUTO_DETECT_SITE.Name = "CH_AUTO_DETECT_SITE" Me.CH_AUTO_DETECT_SITE.Name = "CH_AUTO_DETECT_SITE"
Me.CH_AUTO_DETECT_SITE.Size = New System.Drawing.Size(219, 22) Me.CH_AUTO_DETECT_SITE.Size = New System.Drawing.Size(219, 23)
Me.CH_AUTO_DETECT_SITE.TabIndex = 1 Me.CH_AUTO_DETECT_SITE.TabIndex = 1
Me.CH_AUTO_DETECT_SITE.Text = "Auto detect site" Me.CH_AUTO_DETECT_SITE.Text = "Auto detect site"
Me.CH_AUTO_DETECT_SITE.UseVisualStyleBackColor = True Me.CH_AUTO_DETECT_SITE.UseVisualStyleBackColor = True
@@ -301,25 +321,65 @@
Me.TXT_LABELS.CaptionText = "Labels" Me.TXT_LABELS.CaptionText = "Labels"
Me.TXT_LABELS.CaptionWidth = 50.0R Me.TXT_LABELS.CaptionWidth = 50.0R
Me.TXT_LABELS.Dock = System.Windows.Forms.DockStyle.Fill Me.TXT_LABELS.Dock = System.Windows.Forms.DockStyle.Fill
Me.TXT_LABELS.Location = New System.Drawing.Point(4, 186) Me.TXT_LABELS.Location = New System.Drawing.Point(4, 222)
Me.TXT_LABELS.Name = "TXT_LABELS" Me.TXT_LABELS.Name = "TXT_LABELS"
Me.TXT_LABELS.Size = New System.Drawing.Size(446, 22) Me.TXT_LABELS.Size = New System.Drawing.Size(446, 22)
Me.TXT_LABELS.TabIndex = 7 Me.TXT_LABELS.TabIndex = 7
Me.TXT_LABELS.TextBoxReadOnly = True Me.TXT_LABELS.TextBoxReadOnly = True
' '
'TP_DOWN_OPTIONS
'
TP_DOWN_OPTIONS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
TP_DOWN_OPTIONS.ColumnCount = 2
TP_DOWN_OPTIONS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
TP_DOWN_OPTIONS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
TP_DOWN_OPTIONS.Controls.Add(Me.CH_DOWN_IMAGES, 0, 0)
TP_DOWN_OPTIONS.Controls.Add(Me.CH_DOWN_VIDEOS, 1, 0)
TP_DOWN_OPTIONS.Dock = System.Windows.Forms.DockStyle.Fill
TP_DOWN_OPTIONS.Location = New System.Drawing.Point(1, 123)
TP_DOWN_OPTIONS.Margin = New System.Windows.Forms.Padding(0)
TP_DOWN_OPTIONS.Name = "TP_DOWN_OPTIONS"
TP_DOWN_OPTIONS.RowCount = 1
TP_DOWN_OPTIONS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
TP_DOWN_OPTIONS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
TP_DOWN_OPTIONS.Size = New System.Drawing.Size(452, 31)
TP_DOWN_OPTIONS.TabIndex = 4
'
'CH_DOWN_IMAGES
'
Me.CH_DOWN_IMAGES.AutoSize = True
Me.CH_DOWN_IMAGES.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_DOWN_IMAGES.Location = New System.Drawing.Point(4, 4)
Me.CH_DOWN_IMAGES.Name = "CH_DOWN_IMAGES"
Me.CH_DOWN_IMAGES.Size = New System.Drawing.Size(218, 23)
Me.CH_DOWN_IMAGES.TabIndex = 0
Me.CH_DOWN_IMAGES.Text = "Download Images"
Me.CH_DOWN_IMAGES.UseVisualStyleBackColor = True
'
'CH_DOWN_VIDEOS
'
Me.CH_DOWN_VIDEOS.AutoSize = True
Me.CH_DOWN_VIDEOS.Dock = System.Windows.Forms.DockStyle.Fill
Me.CH_DOWN_VIDEOS.Location = New System.Drawing.Point(229, 4)
Me.CH_DOWN_VIDEOS.Name = "CH_DOWN_VIDEOS"
Me.CH_DOWN_VIDEOS.Size = New System.Drawing.Size(219, 23)
Me.CH_DOWN_VIDEOS.TabIndex = 1
Me.CH_DOWN_VIDEOS.Text = "Download videos"
Me.CH_DOWN_VIDEOS.UseVisualStyleBackColor = True
'
'CONTAINER_MAIN 'CONTAINER_MAIN
' '
' '
'CONTAINER_MAIN.ContentPanel 'CONTAINER_MAIN.ContentPanel
' '
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN) Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(454, 366) Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(454, 403)
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0) Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN" Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(454, 366) Me.CONTAINER_MAIN.Size = New System.Drawing.Size(454, 403)
Me.CONTAINER_MAIN.TabIndex = 0 Me.CONTAINER_MAIN.TabIndex = 0
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
' '
@@ -327,15 +387,15 @@
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(454, 366) Me.ClientSize = New System.Drawing.Size(454, 403)
Me.Controls.Add(Me.CONTAINER_MAIN) Me.Controls.Add(Me.CONTAINER_MAIN)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.KeyPreview = True Me.KeyPreview = True
Me.MaximizeBox = False Me.MaximizeBox = False
Me.MaximumSize = New System.Drawing.Size(470, 405) Me.MaximumSize = New System.Drawing.Size(470, 442)
Me.MinimizeBox = False Me.MinimizeBox = False
Me.MinimumSize = New System.Drawing.Size(470, 405) Me.MinimumSize = New System.Drawing.Size(470, 442)
Me.Name = "UserCreatorForm" Me.Name = "UserCreatorForm"
Me.ShowInTaskbar = False Me.ShowInTaskbar = False
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
@@ -353,6 +413,8 @@
Me.TP_ADD_BY_LIST.ResumeLayout(False) Me.TP_ADD_BY_LIST.ResumeLayout(False)
Me.TP_ADD_BY_LIST.PerformLayout() Me.TP_ADD_BY_LIST.PerformLayout()
CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).EndInit()
TP_DOWN_OPTIONS.ResumeLayout(False)
TP_DOWN_OPTIONS.PerformLayout()
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False) Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
Me.CONTAINER_MAIN.ResumeLayout(False) Me.CONTAINER_MAIN.ResumeLayout(False)
Me.CONTAINER_MAIN.PerformLayout() Me.CONTAINER_MAIN.PerformLayout()
@@ -374,5 +436,8 @@
Private WithEvents CH_ADD_BY_LIST As CheckBox Private WithEvents CH_ADD_BY_LIST As CheckBox
Private WithEvents CH_AUTO_DETECT_SITE As CheckBox Private WithEvents CH_AUTO_DETECT_SITE As CheckBox
Private WithEvents TXT_LABELS As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_LABELS As PersonalUtilities.Forms.Controls.TextBoxExtended
Private WithEvents CH_DOWN_IMAGES As CheckBox
Private WithEvents CH_DOWN_VIDEOS As CheckBox
Private WithEvents CH_IS_CHANNEL As CheckBox
End Class End Class
End Namespace End Namespace

View File

@@ -163,6 +163,9 @@
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
</value> </value>
</data> </data>
<metadata name="TP_DOWN_OPTIONS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAABAAkAMDAQAAAAAABoBgAAlgAAACAgEAAAAAAA6AIAAP4GAAAQEBAAAAAAACgBAADmCQAAMDAAAAEA AAABAAkAMDAQAAAAAABoBgAAlgAAACAgEAAAAAAA6AIAAP4GAAAQEBAAAAAAACgBAADmCQAAMDAAAAEA

View File

@@ -38,6 +38,16 @@ Namespace Editors
Return CH_READY_FOR_DOWN.Checked Return CH_READY_FOR_DOWN.Checked
End Get End Get
End Property End Property
Friend ReadOnly Property DownloadImages As Boolean
Get
Return CH_DOWN_IMAGES.Checked
End Get
End Property
Friend ReadOnly Property DownloadVideos As Boolean
Get
Return CH_DOWN_VIDEOS.Checked
End Get
End Property
Friend ReadOnly Property UserDescr As String Friend ReadOnly Property UserDescr As String
Get Get
Return TXT_DESCR.Text Return TXT_DESCR.Text
@@ -62,7 +72,7 @@ Namespace Editors
Me.New Me.New
If Not _Instance Is Nothing Then If Not _Instance Is Nothing Then
UserInstance = _Instance UserInstance = _Instance
User = DirectCast(UserInstance, UserDataBase).User User = DirectCast(UserInstance.Self, UserDataBase).User
End If End If
End Sub End Sub
Private Sub UserCreatorForm_Load(sender As Object, e As EventArgs) Handles Me.Load Private Sub UserCreatorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
@@ -70,12 +80,15 @@ Namespace Editors
With MyDef With MyDef
.MyViewInitialize(Me, Settings.Design, True) .MyViewInitialize(Me, Settings.Design, True)
.AddOkCancelToolbar() .AddOkCancelToolbar()
CH_AUTO_DETECT_SITE.Enabled = False
If User.Name.IsEmptyString Then If User.Name.IsEmptyString Then
OPT_REDDIT.Checked = False OPT_REDDIT.Checked = False
OPT_TWITTER.Checked = False OPT_TWITTER.Checked = False
CH_PARSE_USER_MEDIA.Enabled = False CH_PARSE_USER_MEDIA.Enabled = False
CH_READY_FOR_DOWN.Checked = True CH_READY_FOR_DOWN.Checked = True
CH_TEMP.Checked = Settings.DefaultTemporary.Value CH_TEMP.Checked = Settings.DefaultTemporary
CH_DOWN_IMAGES.Checked = Settings.DefaultDownloadImages
CH_DOWN_VIDEOS.Checked = Settings.DefaultDownloadVideos
Else Else
TP_ADD_BY_LIST.Enabled = False TP_ADD_BY_LIST.Enabled = False
TXT_USER.Text = User.Name TXT_USER.Text = User.Name
@@ -85,6 +98,8 @@ Namespace Editors
End Select End Select
OPT_REDDIT.Enabled = False OPT_REDDIT.Enabled = False
OPT_TWITTER.Enabled = False OPT_TWITTER.Enabled = False
CH_IS_CHANNEL.Checked = User.IsChannel
CH_IS_CHANNEL.Enabled = False
If Not UserInstance Is Nothing Then If Not UserInstance Is Nothing Then
TXT_USER.Enabled = False TXT_USER.Enabled = False
With UserInstance With UserInstance
@@ -93,16 +108,22 @@ Namespace Editors
CH_TEMP.Checked = .Temporary CH_TEMP.Checked = .Temporary
CH_PARSE_USER_MEDIA.Checked = .ParseUserMediaOnly CH_PARSE_USER_MEDIA.Checked = .ParseUserMediaOnly
CH_READY_FOR_DOWN.Checked = .ReadyForDownload CH_READY_FOR_DOWN.Checked = .ReadyForDownload
CH_DOWN_IMAGES.Checked = .DownloadImages
CH_DOWN_VIDEOS.Checked = .DownloadVideos
TXT_DESCR.Text = .Description TXT_DESCR.Text = .Description
UserLabels.ListAddList(.Labels) UserLabels.ListAddList(.Labels)
If UserLabels.ListExists Then TXT_LABELS.Text = UserLabels.ListToString If UserLabels.ListExists Then TXT_LABELS.Text = UserLabels.ListToString
End With End With
Else
CH_READY_FOR_DOWN.Checked = Settings.DefaultTemporary
CH_DOWN_IMAGES.Checked = Settings.DefaultDownloadImages
CH_DOWN_VIDEOS.Checked = Settings.DefaultDownloadVideos
End If End If
End If End If
.MyFieldsChecker = New FieldsChecker .MyFieldsChecker = New FieldsChecker
.MyFieldsChecker.AddControl(Of String)(TXT_USER, TXT_USER.CaptionText) .MyFieldsChecker.AddControl(Of String)(TXT_USER, TXT_USER.CaptionText)
.MyFieldsChecker.EndLoaderOperations() .MyFieldsChecker.EndLoaderOperations()
TextBoxExtended.SetFalseDetector(Me, True, AddressOf .Detector) .AppendDetectors()
.EndLoaderOperations() .EndLoaderOperations()
End With End With
Catch ex As Exception Catch ex As Exception
@@ -131,16 +152,19 @@ Namespace Editors
With tmpUser With tmpUser
.Name = TXT_USER.Text .Name = TXT_USER.Text
.Site = IIf(OPT_REDDIT.Checked, Sites.Reddit, Sites.Twitter) .Site = IIf(OPT_REDDIT.Checked, Sites.Reddit, Sites.Twitter)
.IsChannel = CH_IS_CHANNEL.Checked
.UpdateUserFile() .UpdateUserFile()
End With End With
User = tmpUser User = tmpUser
If Not UserInstance Is Nothing Then If Not UserInstance Is Nothing Then
With DirectCast(UserInstance, UserDataBase) With DirectCast(UserInstance.Self, UserDataBase)
.User = User .User = User
.FriendlyName = TXT_USER_FRIENDLY.Text .FriendlyName = TXT_USER_FRIENDLY.Text
.Favorite = CH_FAV.Checked .Favorite = CH_FAV.Checked
.Temporary = CH_TEMP.Checked .Temporary = CH_TEMP.Checked
.ReadyForDownload = CH_READY_FOR_DOWN.Checked .ReadyForDownload = CH_READY_FOR_DOWN.Checked
.DownloadImages = CH_DOWN_IMAGES.Checked
.DownloadVideos = CH_DOWN_VIDEOS.Checked
.UserDescription = TXT_DESCR.Text .UserDescription = TXT_DESCR.Text
Dim l As New ListAddParams(LAP.NotContainsOnly + LAP.ClearBeforeAdd) Dim l As New ListAddParams(LAP.NotContainsOnly + LAP.ClearBeforeAdd)
If .IsCollection Then If .IsCollection Then
@@ -172,72 +196,64 @@ CloseForm:
Private ReadOnly TwitterRegEx As New RegexStructure("[htps:/]{7,8}.*?twitter.com/([^/]+)", 1) Private ReadOnly TwitterRegEx As New RegexStructure("[htps:/]{7,8}.*?twitter.com/([^/]+)", 1)
Private ReadOnly RedditRegEx1 As New RegexStructure("[htps:/]{7,8}.*?reddit.com/user/([^/]+)", 1) Private ReadOnly RedditRegEx1 As New RegexStructure("[htps:/]{7,8}.*?reddit.com/user/([^/]+)", 1)
Private ReadOnly RedditRegEx2 As New RegexStructure(".?u/([^/]+)", 1) Private ReadOnly RedditRegEx2 As New RegexStructure(".?u/([^/]+)", 1)
Private ReadOnly RedditChannelRegEx1 As New RegexStructure("[htps:/]{7,8}.*?reddit.com/r/([^/]+)", 1)
Private ReadOnly RedditChannelRegEx2 As New RegexStructure(".?r/([^/]+)", 1)
Private _TextChangeInvoked As Boolean = False Private _TextChangeInvoked As Boolean = False
Private Sub TXT_USER_ActionOnTextChange() Handles TXT_USER.ActionOnTextChange Private Sub TXT_USER_ActionOnTextChange() Handles TXT_USER.ActionOnTextChange
Try Try
If Not _TextChangeInvoked Then If Not _TextChangeInvoked Then
_TextChangeInvoked = True _TextChangeInvoked = True
If Not CH_ADD_BY_LIST.Checked Then If Not CH_ADD_BY_LIST.Checked Then
Select Case GetSiteByText(TXT_USER.Text) Dim s() As Object = GetSiteByText(TXT_USER.Text)
Select Case s(0)
Case Sites.Twitter : OPT_TWITTER.Checked = True Case Sites.Twitter : OPT_TWITTER.Checked = True
Case Sites.Reddit : OPT_REDDIT.Checked = True Case Sites.Reddit : OPT_REDDIT.Checked = True
Case Else : OPT_TWITTER.Checked = False : OPT_REDDIT.Checked = False Case Else : OPT_TWITTER.Checked = False : OPT_REDDIT.Checked = False
End Select End Select
CH_IS_CHANNEL.Checked = CBool(s(1))
End If End If
MyDef.Detector()
_TextChangeInvoked = False _TextChangeInvoked = False
End If End If
Catch ex As Exception Catch ex As Exception
End Try End Try
End Sub End Sub
Private Function GetSiteByText(ByRef TXT As String) As Sites Private Function GetSiteByText(ByRef TXT As String) As Object()
If Not TXT.IsEmptyString AndAlso TXT.Length > 8 Then If Not TXT.IsEmptyString AndAlso TXT.Length > 8 Then
Dim s$ = RegexReplace(TXT, TwitterRegEx) If CheckRegex(TXT, TwitterRegEx) Then
If Not s.IsEmptyString Then Return {Sites.Twitter, False}
TXT = s ElseIf CheckRegex(TXT, RedditRegEx1) OrElse CheckRegex(TXT, RedditRegEx2) Then
Return Sites.Twitter Return {Sites.Reddit, False}
Else ElseIf CheckRegex(TXT, RedditChannelRegEx1) OrElse CheckRegex(TXT, RedditChannelRegEx2) Then
s = RegexReplace(TXT, RedditRegEx1) Return {Sites.Reddit, True}
If Not s.IsEmptyString Then
TXT = s
Return Sites.Reddit
Else
s = RegexReplace(TXT, RedditRegEx2)
If Not s.IsEmptyString Then
TXT = s
Return Sites.Reddit
End If End If
End If End If
End If Return {Sites.Undefined, False}
End If End Function
Return Sites.Undefined Private Function CheckRegex(ByRef TXT As String, ByVal r As RegexStructure) As Boolean
Dim s$ = RegexReplace(TXT, r)
If Not s.IsEmptyString Then TXT = s : Return True Else Return False
End Function End Function
Private Sub OPT_REDDIT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_REDDIT.CheckedChanged Private Sub OPT_REDDIT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_REDDIT.CheckedChanged
MyDef.Detector() If OPT_REDDIT.Checked Then CH_IS_CHANNEL.Enabled = True
End Sub End Sub
Private Sub OPT_TWITTER_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_TWITTER.CheckedChanged Private Sub OPT_TWITTER_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_TWITTER.CheckedChanged
MyDef.Detector()
CH_PARSE_USER_MEDIA.Enabled = OPT_TWITTER.Checked CH_PARSE_USER_MEDIA.Enabled = OPT_TWITTER.Checked
If OPT_TWITTER.Checked Then CH_IS_CHANNEL.Checked = False : CH_IS_CHANNEL.Enabled = False
End Sub End Sub
Private Sub CH_TEMP_CheckedChanged(sender As Object, e As EventArgs) Handles CH_TEMP.CheckedChanged Private Sub CH_TEMP_CheckedChanged(sender As Object, e As EventArgs) Handles CH_TEMP.CheckedChanged
If CH_TEMP.Checked Then CH_FAV.Checked = False If CH_TEMP.Checked Then CH_FAV.Checked = False
MyDef.Detector()
End Sub End Sub
Private Sub CH_FAV_CheckedChanged(sender As Object, e As EventArgs) Handles CH_FAV.CheckedChanged Private Sub CH_FAV_CheckedChanged(sender As Object, e As EventArgs) Handles CH_FAV.CheckedChanged
If CH_FAV.Checked Then CH_TEMP.Checked = False If CH_FAV.Checked Then CH_TEMP.Checked = False
MyDef.Detector()
End Sub
Private Sub CH_READY_FOR_DOWN_CheckedChanged(sender As Object, e As EventArgs) Handles CH_READY_FOR_DOWN.CheckedChanged
MyDef.Detector()
End Sub
Private Sub CH_PARSE_USER_MADIA_CheckedChanged(sender As Object, e As EventArgs) Handles CH_PARSE_USER_MEDIA.CheckedChanged
MyDef.Detector()
End Sub End Sub
Private Sub CH_ADD_BY_LIST_CheckedChanged(sender As Object, e As EventArgs) Handles CH_ADD_BY_LIST.CheckedChanged Private Sub CH_ADD_BY_LIST_CheckedChanged(sender As Object, e As EventArgs) Handles CH_ADD_BY_LIST.CheckedChanged
If CH_ADD_BY_LIST.Checked Then If CH_ADD_BY_LIST.Checked Then
TXT_DESCR.GroupBoxText = "Users list" TXT_DESCR.GroupBoxText = "Users list"
CH_AUTO_DETECT_SITE.Enabled = True
Else Else
TXT_DESCR.GroupBoxText = "Description" TXT_DESCR.GroupBoxText = "Description"
CH_AUTO_DETECT_SITE.Checked = False
CH_AUTO_DETECT_SITE.Enabled = False
End If End If
TXT_USER.Enabled = Not CH_ADD_BY_LIST.Checked TXT_USER.Enabled = Not CH_ADD_BY_LIST.Checked
TXT_USER_FRIENDLY.Enabled = Not CH_ADD_BY_LIST.Checked TXT_USER_FRIENDLY.Enabled = Not CH_ADD_BY_LIST.Checked
@@ -245,6 +261,7 @@ CloseForm:
Private Sub CH_AUTO_DETECT_SITE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_AUTO_DETECT_SITE.CheckedChanged Private Sub CH_AUTO_DETECT_SITE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_AUTO_DETECT_SITE.CheckedChanged
OPT_REDDIT.Enabled = Not CH_AUTO_DETECT_SITE.Checked OPT_REDDIT.Enabled = Not CH_AUTO_DETECT_SITE.Checked
OPT_TWITTER.Enabled = Not CH_AUTO_DETECT_SITE.Checked OPT_TWITTER.Enabled = Not CH_AUTO_DETECT_SITE.Checked
CH_IS_CHANNEL.Enabled = Not CH_AUTO_DETECT_SITE.Checked
End Sub End Sub
Private Function CreateUsersByList() As Boolean Private Function CreateUsersByList() As Boolean
Try Try
@@ -258,6 +275,8 @@ CloseForm:
Dim uu$ Dim uu$
Dim tmpUser As UserInfo Dim tmpUser As UserInfo
Dim s As Sites Dim s As Sites
Dim sObj() As Object
Dim _IsChannel As Boolean = CH_IS_CHANNEL.Checked
Dim Added% = 0 Dim Added% = 0
Dim Skipped% = 0 Dim Skipped% = 0
Dim uid% Dim uid%
@@ -270,10 +289,14 @@ CloseForm:
For i% = 0 To u.Count - 1 For i% = 0 To u.Count - 1
uu = u(i) uu = u(i)
If CH_AUTO_DETECT_SITE.Checked Then s = GetSiteByText(uu) If CH_AUTO_DETECT_SITE.Checked Then
sObj = GetSiteByText(uu)
s = sObj(0)
_IsChannel = CBool(sObj(1))
End If
If Not s = Sites.Undefined Then If Not s = Sites.Undefined Then
tmpUser = New UserInfo(uu, s) tmpUser = New UserInfo(uu, s) With {.IsChannel = _IsChannel}
uid = -1 uid = -1
If Settings.UsersList.Count > 0 Then uid = Settings.UsersList.IndexOf(tmpUser) If Settings.UsersList.Count > 0 Then uid = Settings.UsersList.IndexOf(tmpUser)
If uid < 0 And Not UsersForCreate.Contains(tmpUser) Then If uid < 0 And Not UsersForCreate.Contains(tmpUser) Then
@@ -299,6 +322,8 @@ CloseForm:
.Favorite = CH_FAV.Checked .Favorite = CH_FAV.Checked
.Temporary = CH_TEMP.Checked .Temporary = CH_TEMP.Checked
.ReadyForDownload = CH_READY_FOR_DOWN.Checked .ReadyForDownload = CH_READY_FOR_DOWN.Checked
.DownloadImages = CH_DOWN_IMAGES.Checked
.DownloadVideos = CH_DOWN_VIDEOS.Checked
.Labels.ListAddList(UserLabels) .Labels.ListAddList(UserLabels)
If s = Sites.Twitter Then .ParseUserMediaOnly = CH_PARSE_USER_MEDIA.Checked If s = Sites.Twitter Then .ParseUserMediaOnly = CH_PARSE_USER_MEDIA.Checked
.UpdateUserInformation() .UpdateUserInformation()

View File

@@ -18,6 +18,7 @@ Friend Class LabelsKeeper : Implements ICollection(Of String), IMyEnumerator(Of
NewLabels = New List(Of String) NewLabels = New List(Of String)
CurrentSelection = New List(Of String) CurrentSelection = New List(Of String)
If LabelsFile.Exists Then LabelsList.ListAddList(IO.File.ReadAllLines(LabelsFile), LAP.NotContainsOnly) If LabelsFile.Exists Then LabelsList.ListAddList(IO.File.ReadAllLines(LabelsFile), LAP.NotContainsOnly)
LabelsList.ListAddList({NoLabeledName, NoParsedUser}, LAP.NotContainsOnly)
End Sub End Sub
Friend ReadOnly Property ToList As List(Of String) Friend ReadOnly Property ToList As List(Of String)
Get Get

View File

@@ -71,6 +71,7 @@ Partial Class MainFrame
Me.LIST_PROFILES = New System.Windows.Forms.ListView() Me.LIST_PROFILES = New System.Windows.Forms.ListView()
Me.USER_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.USER_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.BTT_CONTEXT_DOWN = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_DOWN = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_DOWN_LIMITED = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_EDIT = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_EDIT = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_DELETE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_DELETE = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_FAV = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_FAV = New System.Windows.Forms.ToolStripMenuItem()
@@ -82,6 +83,7 @@ Partial Class MainFrame
Me.BTT_CONTEXT_OPEN_PATH = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_OPEN_PATH = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_OPEN_SITE = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_OPEN_SITE = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_INFO = New System.Windows.Forms.ToolStripMenuItem() Me.BTT_CONTEXT_INFO = New System.Windows.Forms.ToolStripMenuItem()
Me.BTT_CONTEXT_READY = New System.Windows.Forms.ToolStripMenuItem()
SEP_1 = New System.Windows.Forms.ToolStripSeparator() SEP_1 = New System.Windows.Forms.ToolStripSeparator()
SEP_2 = New System.Windows.Forms.ToolStripSeparator() SEP_2 = New System.Windows.Forms.ToolStripSeparator()
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator() CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
@@ -113,7 +115,7 @@ Partial Class MainFrame
'CONTEXT_SEP_1 'CONTEXT_SEP_1
' '
CONTEXT_SEP_1.Name = "CONTEXT_SEP_1" CONTEXT_SEP_1.Name = "CONTEXT_SEP_1"
CONTEXT_SEP_1.Size = New System.Drawing.Size(192, 6) CONTEXT_SEP_1.Size = New System.Drawing.Size(218, 6)
' '
'MENU_SETTINGS 'MENU_SETTINGS
' '
@@ -157,22 +159,22 @@ Partial Class MainFrame
'CONTEXT_SEP_2 'CONTEXT_SEP_2
' '
CONTEXT_SEP_2.Name = "CONTEXT_SEP_2" CONTEXT_SEP_2.Name = "CONTEXT_SEP_2"
CONTEXT_SEP_2.Size = New System.Drawing.Size(192, 6) CONTEXT_SEP_2.Size = New System.Drawing.Size(218, 6)
' '
'CONTEXT_SEP_3 'CONTEXT_SEP_3
' '
CONTEXT_SEP_3.Name = "CONTEXT_SEP_3" CONTEXT_SEP_3.Name = "CONTEXT_SEP_3"
CONTEXT_SEP_3.Size = New System.Drawing.Size(192, 6) CONTEXT_SEP_3.Size = New System.Drawing.Size(218, 6)
' '
'CONTEXT_SEP_4 'CONTEXT_SEP_4
' '
CONTEXT_SEP_4.Name = "CONTEXT_SEP_4" CONTEXT_SEP_4.Name = "CONTEXT_SEP_4"
CONTEXT_SEP_4.Size = New System.Drawing.Size(192, 6) CONTEXT_SEP_4.Size = New System.Drawing.Size(218, 6)
' '
'CONTEXT_SEP_5 'CONTEXT_SEP_5
' '
CONTEXT_SEP_5.Name = "CONTEXT_SEP_5" CONTEXT_SEP_5.Name = "CONTEXT_SEP_5"
CONTEXT_SEP_5.Size = New System.Drawing.Size(192, 6) CONTEXT_SEP_5.Size = New System.Drawing.Size(218, 6)
' '
'SEP_4 'SEP_4
' '
@@ -421,92 +423,107 @@ Partial Class MainFrame
' '
'USER_CONTEXT 'USER_CONTEXT
' '
Me.USER_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_CONTEXT_DOWN, Me.BTT_CONTEXT_EDIT, Me.BTT_CONTEXT_DELETE, CONTEXT_SEP_1, Me.BTT_CONTEXT_FAV, Me.BTT_CONTEXT_TEMP, Me.BTT_CONTEXT_GROUPS, Me.BTT_CONTEXT_ADD_TO_COL, Me.BTT_CONTEXT_COL_MERGE, CONTEXT_SEP_2, Me.BTT_CHANGE_IMAGE, CONTEXT_SEP_3, Me.BTT_CONTEXT_OPEN_PATH, CONTEXT_SEP_4, Me.BTT_CONTEXT_OPEN_SITE, CONTEXT_SEP_5, Me.BTT_CONTEXT_INFO}) Me.USER_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_CONTEXT_DOWN, Me.BTT_CONTEXT_DOWN_LIMITED, Me.BTT_CONTEXT_EDIT, Me.BTT_CONTEXT_DELETE, CONTEXT_SEP_1, Me.BTT_CONTEXT_FAV, Me.BTT_CONTEXT_TEMP, Me.BTT_CONTEXT_READY, Me.BTT_CONTEXT_GROUPS, Me.BTT_CONTEXT_ADD_TO_COL, Me.BTT_CONTEXT_COL_MERGE, CONTEXT_SEP_2, Me.BTT_CHANGE_IMAGE, CONTEXT_SEP_3, Me.BTT_CONTEXT_OPEN_PATH, CONTEXT_SEP_4, Me.BTT_CONTEXT_OPEN_SITE, CONTEXT_SEP_5, Me.BTT_CONTEXT_INFO})
Me.USER_CONTEXT.Name = "USER_CONTEXT" Me.USER_CONTEXT.Name = "USER_CONTEXT"
Me.USER_CONTEXT.Size = New System.Drawing.Size(196, 298) Me.USER_CONTEXT.Size = New System.Drawing.Size(222, 364)
' '
'BTT_CONTEXT_DOWN 'BTT_CONTEXT_DOWN
' '
Me.BTT_CONTEXT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16 Me.BTT_CONTEXT_DOWN.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
Me.BTT_CONTEXT_DOWN.Name = "BTT_CONTEXT_DOWN" Me.BTT_CONTEXT_DOWN.Name = "BTT_CONTEXT_DOWN"
Me.BTT_CONTEXT_DOWN.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_DOWN.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_DOWN.Text = "Download data" Me.BTT_CONTEXT_DOWN.Text = "Download data"
' '
'BTT_CONTEXT_DOWN_LIMITED
'
Me.BTT_CONTEXT_DOWN_LIMITED.AutoToolTip = True
Me.BTT_CONTEXT_DOWN_LIMITED.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
Me.BTT_CONTEXT_DOWN_LIMITED.Name = "BTT_CONTEXT_DOWN_LIMITED"
Me.BTT_CONTEXT_DOWN_LIMITED.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_DOWN_LIMITED.Text = "Download data limited"
Me.BTT_CONTEXT_DOWN_LIMITED.ToolTipText = "Download top ... posts"
'
'BTT_CONTEXT_EDIT 'BTT_CONTEXT_EDIT
' '
Me.BTT_CONTEXT_EDIT.Image = Global.SCrawler.My.Resources.Resources.PencilPic_01_16 Me.BTT_CONTEXT_EDIT.Image = Global.SCrawler.My.Resources.Resources.PencilPic_01_16
Me.BTT_CONTEXT_EDIT.Name = "BTT_CONTEXT_EDIT" Me.BTT_CONTEXT_EDIT.Name = "BTT_CONTEXT_EDIT"
Me.BTT_CONTEXT_EDIT.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_EDIT.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_EDIT.Text = "Edit user information" Me.BTT_CONTEXT_EDIT.Text = "Edit user information"
' '
'BTT_CONTEXT_DELETE 'BTT_CONTEXT_DELETE
' '
Me.BTT_CONTEXT_DELETE.Image = Global.SCrawler.My.Resources.Resources.Delete Me.BTT_CONTEXT_DELETE.Image = Global.SCrawler.My.Resources.Resources.Delete
Me.BTT_CONTEXT_DELETE.Name = "BTT_CONTEXT_DELETE" Me.BTT_CONTEXT_DELETE.Name = "BTT_CONTEXT_DELETE"
Me.BTT_CONTEXT_DELETE.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_DELETE.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_DELETE.Text = "Delete user / collection" Me.BTT_CONTEXT_DELETE.Text = "Delete user / collection"
' '
'BTT_CONTEXT_FAV 'BTT_CONTEXT_FAV
' '
Me.BTT_CONTEXT_FAV.Image = Global.SCrawler.My.Resources.Resources.StarPic_24 Me.BTT_CONTEXT_FAV.Image = Global.SCrawler.My.Resources.Resources.StarPic_24
Me.BTT_CONTEXT_FAV.Name = "BTT_CONTEXT_FAV" Me.BTT_CONTEXT_FAV.Name = "BTT_CONTEXT_FAV"
Me.BTT_CONTEXT_FAV.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_FAV.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_FAV.Text = "Change favorite" Me.BTT_CONTEXT_FAV.Text = "Change favorite"
' '
'BTT_CONTEXT_TEMP 'BTT_CONTEXT_TEMP
' '
Me.BTT_CONTEXT_TEMP.Image = CType(resources.GetObject("BTT_CONTEXT_TEMP.Image"), System.Drawing.Image) Me.BTT_CONTEXT_TEMP.Image = CType(resources.GetObject("BTT_CONTEXT_TEMP.Image"), System.Drawing.Image)
Me.BTT_CONTEXT_TEMP.Name = "BTT_CONTEXT_TEMP" Me.BTT_CONTEXT_TEMP.Name = "BTT_CONTEXT_TEMP"
Me.BTT_CONTEXT_TEMP.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_TEMP.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_TEMP.Text = "Change temporary" Me.BTT_CONTEXT_TEMP.Text = "Change temporary"
' '
'BTT_CONTEXT_GROUPS 'BTT_CONTEXT_GROUPS
' '
Me.BTT_CONTEXT_GROUPS.Name = "BTT_CONTEXT_GROUPS" Me.BTT_CONTEXT_GROUPS.Name = "BTT_CONTEXT_GROUPS"
Me.BTT_CONTEXT_GROUPS.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_GROUPS.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_GROUPS.Text = "Change labels" Me.BTT_CONTEXT_GROUPS.Text = "Change labels"
' '
'BTT_CONTEXT_ADD_TO_COL 'BTT_CONTEXT_ADD_TO_COL
' '
Me.BTT_CONTEXT_ADD_TO_COL.Image = Global.SCrawler.My.Resources.Resources.DBPic_32 Me.BTT_CONTEXT_ADD_TO_COL.Image = Global.SCrawler.My.Resources.Resources.DBPic_32
Me.BTT_CONTEXT_ADD_TO_COL.Name = "BTT_CONTEXT_ADD_TO_COL" Me.BTT_CONTEXT_ADD_TO_COL.Name = "BTT_CONTEXT_ADD_TO_COL"
Me.BTT_CONTEXT_ADD_TO_COL.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_ADD_TO_COL.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_ADD_TO_COL.Text = "Add to collection" Me.BTT_CONTEXT_ADD_TO_COL.Text = "Add to collection"
' '
'BTT_CONTEXT_COL_MERGE 'BTT_CONTEXT_COL_MERGE
' '
Me.BTT_CONTEXT_COL_MERGE.Name = "BTT_CONTEXT_COL_MERGE" Me.BTT_CONTEXT_COL_MERGE.Name = "BTT_CONTEXT_COL_MERGE"
Me.BTT_CONTEXT_COL_MERGE.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_COL_MERGE.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_COL_MERGE.Text = "Merge collection files" Me.BTT_CONTEXT_COL_MERGE.Text = "Merge collection files"
' '
'BTT_CHANGE_IMAGE 'BTT_CHANGE_IMAGE
' '
Me.BTT_CHANGE_IMAGE.Image = Global.SCrawler.My.Resources.Resources.PicturePic_32 Me.BTT_CHANGE_IMAGE.Image = Global.SCrawler.My.Resources.Resources.PicturePic_32
Me.BTT_CHANGE_IMAGE.Name = "BTT_CHANGE_IMAGE" Me.BTT_CHANGE_IMAGE.Name = "BTT_CHANGE_IMAGE"
Me.BTT_CHANGE_IMAGE.Size = New System.Drawing.Size(195, 22) Me.BTT_CHANGE_IMAGE.Size = New System.Drawing.Size(221, 22)
Me.BTT_CHANGE_IMAGE.Text = "Change image" Me.BTT_CHANGE_IMAGE.Text = "Change image"
' '
'BTT_CONTEXT_OPEN_PATH 'BTT_CONTEXT_OPEN_PATH
' '
Me.BTT_CONTEXT_OPEN_PATH.Image = Global.SCrawler.My.Resources.Resources.Folder_32 Me.BTT_CONTEXT_OPEN_PATH.Image = Global.SCrawler.My.Resources.Resources.Folder_32
Me.BTT_CONTEXT_OPEN_PATH.Name = "BTT_CONTEXT_OPEN_PATH" Me.BTT_CONTEXT_OPEN_PATH.Name = "BTT_CONTEXT_OPEN_PATH"
Me.BTT_CONTEXT_OPEN_PATH.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_OPEN_PATH.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_OPEN_PATH.Text = "Open contains folder" Me.BTT_CONTEXT_OPEN_PATH.Text = "Open contains folder"
' '
'BTT_CONTEXT_OPEN_SITE 'BTT_CONTEXT_OPEN_SITE
' '
Me.BTT_CONTEXT_OPEN_SITE.Image = Global.SCrawler.My.Resources.Resources.GlobeBlue_32 Me.BTT_CONTEXT_OPEN_SITE.Image = Global.SCrawler.My.Resources.Resources.GlobeBlue_32
Me.BTT_CONTEXT_OPEN_SITE.Name = "BTT_CONTEXT_OPEN_SITE" Me.BTT_CONTEXT_OPEN_SITE.Name = "BTT_CONTEXT_OPEN_SITE"
Me.BTT_CONTEXT_OPEN_SITE.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_OPEN_SITE.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_OPEN_SITE.Text = "Open site" Me.BTT_CONTEXT_OPEN_SITE.Text = "Open site"
' '
'BTT_CONTEXT_INFO 'BTT_CONTEXT_INFO
' '
Me.BTT_CONTEXT_INFO.Image = Global.SCrawler.My.Resources.Resources.InfoPic_32 Me.BTT_CONTEXT_INFO.Image = Global.SCrawler.My.Resources.Resources.InfoPic_32
Me.BTT_CONTEXT_INFO.Name = "BTT_CONTEXT_INFO" Me.BTT_CONTEXT_INFO.Name = "BTT_CONTEXT_INFO"
Me.BTT_CONTEXT_INFO.Size = New System.Drawing.Size(195, 22) Me.BTT_CONTEXT_INFO.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_INFO.Text = "Information" Me.BTT_CONTEXT_INFO.Text = "Information"
' '
'BTT_CONTEXT_READY
'
Me.BTT_CONTEXT_READY.Name = "BTT_CONTEXT_READY"
Me.BTT_CONTEXT_READY.Size = New System.Drawing.Size(221, 22)
Me.BTT_CONTEXT_READY.Text = "Change ready for download"
'
'MainFrame 'MainFrame
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -575,4 +592,6 @@ Partial Class MainFrame
Private WithEvents BTT_EDIT_USER As ToolStripButton Private WithEvents BTT_EDIT_USER As ToolStripButton
Private WithEvents BTT_CONTEXT_GROUPS As ToolStripMenuItem Private WithEvents BTT_CONTEXT_GROUPS As ToolStripMenuItem
Private WithEvents BTT_VERSION_INFO As ToolStripButton Private WithEvents BTT_VERSION_INFO As ToolStripButton
Private WithEvents BTT_CONTEXT_DOWN_LIMITED As ToolStripMenuItem
Private WithEvents BTT_CONTEXT_READY As ToolStripMenuItem
End Class End Class

View File

@@ -63,7 +63,6 @@ Public Class MainFrame
RefillList() RefillList()
UpdateLabelsGroups() UpdateLabelsGroups()
SetShowButtonsCheckers(Settings.ShowingMode.Value) SetShowButtonsCheckers(Settings.ShowingMode.Value)
CheckForReparse()
CheckVersion(False) CheckVersion(False)
_UFinit = False _UFinit = False
GoTo EndFunction GoTo EndFunction
@@ -247,9 +246,11 @@ CloseResume:
.Temporary = f.UserTemporary .Temporary = f.UserTemporary
.ParseUserMediaOnly = f.UserMediaOnly .ParseUserMediaOnly = f.UserMediaOnly
.ReadyForDownload = f.UserReady .ReadyForDownload = f.UserReady
.DownloadImages = f.DownloadImages
.DownloadVideos = f.DownloadVideos
.FriendlyName = f.UserFriendly .FriendlyName = f.UserFriendly
.Description = f.UserDescr .Description = f.UserDescr
.Labels.ListAddList(f.UserLabels, LAP.ClearBeforeAdd, LAP.NotContainsOnly) .Self.Labels.ListAddList(f.UserLabels, LAP.ClearBeforeAdd, LAP.NotContainsOnly)
.UpdateUserInformation() .UpdateUserInformation()
End With End With
UserListUpdate(Settings.Users(Settings.Users.Count - 1), True) UserListUpdate(Settings.Users(Settings.Users.Count - 1), True)
@@ -313,7 +314,7 @@ CloseResume:
#End Region #End Region
#Region "Download" #Region "Download"
Private Sub BTT_DOWN_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SELECTED.Click Private Sub BTT_DOWN_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SELECTED.Click
DownloadSelectedUser() DownloadSelectedUser(False)
End Sub End Sub
Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click
Downloader.AddRange(Settings.Users.Where(Function(u) u.ReadyForDownload)) Downloader.AddRange(Settings.Users.Where(Function(u) u.ReadyForDownload))
@@ -404,7 +405,7 @@ CloseResume:
End If End If
End If End If
Settings.ShowingMode.Value = m Settings.ShowingMode.Value = m
If Not m = ShowingModes.All Then BTT_DOWN_ALL.Enabled = False BTT_DOWN_ALL.Enabled = m = ShowingModes.All
End Sub End Sub
Private Sub BTT_SELECT_LABELS_Click(sender As Object, e As EventArgs) Handles BTT_SELECT_LABELS.Click Private Sub BTT_SELECT_LABELS_Click(sender As Object, e As EventArgs) Handles BTT_SELECT_LABELS.Click
OpenLabelsForm() OpenLabelsForm()
@@ -414,11 +415,20 @@ CloseResume:
f.ShowDialog() f.ShowDialog()
If f.DialogResult = DialogResult.OK Then If f.DialogResult = DialogResult.OK Then
If f.LabelsList.Count > 0 Then If f.LabelsList.Count > 0 Then
Dim b As Boolean = False
If Settings.Labels.CurrentSelection.Count = 0 Then
b = True
Else
If Settings.Labels.CurrentSelection.Exists(Function(l) Not f.LabelsList.Contains(l)) Then b = True
If Not b AndAlso f.LabelsList.Exists(Function(l) Not Settings.Labels.CurrentSelection.Contains(l)) Then b = True
End If
Settings.Labels.CurrentSelection.ListAddList(f.LabelsList, LAP.ClearBeforeAdd, LAP.NotContainsOnly) Settings.Labels.CurrentSelection.ListAddList(f.LabelsList, LAP.ClearBeforeAdd, LAP.NotContainsOnly)
Settings.LatestSelectedLabels.Value = Settings.Labels.CurrentSelection.ListToString(, "|") Settings.LatestSelectedLabels.Value = Settings.Labels.CurrentSelection.ListToString(, "|")
If b Then RefillList()
Else Else
Settings.Labels.CurrentSelection.Clear() Settings.Labels.CurrentSelection.Clear()
Settings.LatestSelectedLabels.Value = String.Empty Settings.LatestSelectedLabels.Value = String.Empty
SetShowButtonsCheckers(ShowingModes.All)
End If End If
End If End If
End Using End Using
@@ -444,7 +454,10 @@ CloseResume:
End Sub End Sub
#Region "Context" #Region "Context"
Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click
DownloadSelectedUser() DownloadSelectedUser(False)
End Sub
Private Sub BTT_CONTEXT_DOWN_LIMITED_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN_LIMITED.Click
DownloadSelectedUser(True)
End Sub End Sub
Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click
EditSelectedUser() EditSelectedUser()
@@ -472,12 +485,21 @@ CloseResume:
End Sub) End Sub)
End If End If
End Sub End Sub
Private Sub BTT_CONTEXT_READY_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_READY.Click
Dim users As List(Of IUserData) = GetSelectedUserArray()
If AskForMassReplace(users, "Ready for download") Then
Dim r As Boolean = MsgBoxE({"What state do you want to set for selected users", "Select ready state"}, vbQuestion,,, {"Not Ready", "Ready"}).Index
users.ForEach(Sub(u)
u.ReadyForDownload = r
u.UpdateUserInformation()
End Sub)
End If
End Sub
Private Sub BTT_CONTEXT_GROUPS_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_GROUPS.Click Private Sub BTT_CONTEXT_GROUPS_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_GROUPS.Click
Try Try
Dim users As List(Of IUserData) = GetSelectedUserArray() Dim users As List(Of IUserData) = GetSelectedUserArray()
If users.ListExists Then If users.ListExists Then
Dim l As List(Of String) = ListAddList(Nothing, users.SelectMany(Function(u) u.Labels), LAP.NotContainsOnly) Dim l As List(Of String) = ListAddList(Nothing, users.SelectMany(Function(u) u.Labels), LAP.NotContainsOnly)
If l.ListExists Then
Using f As New LabelsForm(l) With {.MultiUser = True} Using f As New LabelsForm(l) With {.MultiUser = True}
f.ShowDialog() f.ShowDialog()
If f.DialogResult = DialogResult.OK Then If f.DialogResult = DialogResult.OK Then
@@ -490,13 +512,14 @@ CloseResume:
If .Count > 0 Then .Collections.ForEach(Sub(uu) uu.Labels.ListAddList(f.LabelsList, lp)) If .Count > 0 Then .Collections.ForEach(Sub(uu) uu.Labels.ListAddList(f.LabelsList, lp))
End With End With
Else Else
u.Labels.ListAddList(f.LabelsList, lp) u.Self.Labels.ListAddList(f.LabelsList, lp)
End If End If
u.UpdateUserInformation() u.UpdateUserInformation()
End Sub) End Sub)
End If End If
End Using End Using
End If Else
MsgBoxE("No one user does not detected", vbExclamation)
End If End If
Catch ex As Exception Catch ex As Exception
ErrorsDescriber.Execute(EDP.ShowAllMsg, ex, "[ChangeUserGroups]") ErrorsDescriber.Execute(EDP.ShowAllMsg, ex, "[ChangeUserGroups]")
@@ -505,9 +528,9 @@ CloseResume:
Private Function AskForMassReplace(ByVal users As List(Of IUserData), ByVal param As String) As Boolean Private Function AskForMassReplace(ByVal users As List(Of IUserData), ByVal param As String) As Boolean
Dim u$ = users.ListIfNothing.Take(20).Select(Function(uu) uu.Name).ListToString(, vbCr) Dim u$ = users.ListIfNothing.Take(20).Select(Function(uu) uu.Name).ListToString(, vbCr)
If Not u.IsEmptyString And users.ListExists(21) Then u &= vbCr & "..." If Not u.IsEmptyString And users.ListExists(21) Then u &= vbCr & "..."
Return users.ListExists AndAlso (users.Count = 1 OrElse MsgBox($"Do you really want to change [{param}] for {users.Count} users?{vbCr}{vbCr}{u}", Return users.ListExists AndAlso (users.Count = 1 OrElse MsgBoxE({$"Do you really want to change [{param}] for {users.Count} users?{vbCr}{vbCr}{u}",
MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton1, "Users' parameters change"},
"Users' change parameter") = MsgBoxResult.Yes) MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes)
End Function End Function
Private Sub BTT_CHANGE_IMAGE_Click(sender As Object, e As EventArgs) Handles BTT_CHANGE_IMAGE.Click Private Sub BTT_CHANGE_IMAGE_Click(sender As Object, e As EventArgs) Handles BTT_CHANGE_IMAGE.Click
Dim user As IUserData = GetSelectedUser() Dim user As IUserData = GetSelectedUser()
@@ -539,12 +562,22 @@ CloseResume:
.Users.Add(New UserDataBind(f.Collection)) .Users.Add(New UserDataBind(f.Collection))
i = .Users.Count - 1 i = .Users.Count - 1
End If End If
Try
DirectCast(.Users(i), UserDataBind).Add(user) DirectCast(.Users(i), UserDataBind).Add(user)
RemoveUserFromList(user) RemoveUserFromList(user)
i = .Users.FindIndex(fCol) i = .Users.FindIndex(fCol)
If i >= 0 Then UserListUpdate(.Users(i), Added) Else RefillList() If i >= 0 Then UserListUpdate(.Users(i), Added) Else RefillList()
End With
MsgBoxE($"[{user.Name}] was added to collection [{f.Collection}]") MsgBoxE($"[{user.Name}] was added to collection [{f.Collection}]")
Catch ex As InvalidOperationException
i = .Users.FindIndex(fCol)
If i >= 0 Then
If DirectCast(.Users(i), UserDataBind).Count = 0 Then
.Users(i).Dispose()
.Users.RemoveAt(i)
End If
End If
End Try
End With
End If End If
End Using End Using
End If End If
@@ -578,7 +611,7 @@ CloseResume:
End Sub End Sub
Private Sub BTT_CONTEXT_INFO_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_INFO.Click Private Sub BTT_CONTEXT_INFO_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_INFO.Click
Dim user As IUserData = GetSelectedUser() Dim user As IUserData = GetSelectedUser()
If Not user Is Nothing Then MsgBoxE(DirectCast(user, UserDataBase).GetUserInformation()) If Not user Is Nothing Then MsgBoxE(DirectCast(user.Self, UserDataBase).GetUserInformation())
End Sub End Sub
Private Sub USER_CONTEXT_VisibleChanged(sender As Object, e As EventArgs) Handles USER_CONTEXT.VisibleChanged Private Sub USER_CONTEXT_VisibleChanged(sender As Object, e As EventArgs) Handles USER_CONTEXT.VisibleChanged
Try Try
@@ -667,13 +700,7 @@ CloseResume:
On Error Resume Next On Error Resume Next
If user.IsCollection Then If user.IsCollection Then
If USER_CONTEXT.Visible Then USER_CONTEXT.Hide() If USER_CONTEXT.Visible Then USER_CONTEXT.Hide()
Using f As New CollectionEditorForm(user.CollectionName) MsgBoxE($"This is collection!{vbNewLine}Edit collections does not allowed!", vbExclamation)
f.ShowDialog()
If f.DialogResult = DialogResult.OK Then
user.CollectionName = f.Collection
UserListUpdate(user, False)
End If
End Using
Else Else
Using f As New UserCreatorForm(user) Using f As New UserCreatorForm(user)
f.ShowDialog() f.ShowDialog()
@@ -736,17 +763,43 @@ CloseResume:
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on trying to delete user / collection") ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on trying to delete user / collection")
End Try End Try
End Sub End Sub
Private Sub DownloadSelectedUser() Private Sub DownloadSelectedUser(ByVal UseLimits As Boolean)
Dim users As List(Of IUserData) = GetSelectedUserArray() Dim users As List(Of IUserData) = GetSelectedUserArray()
If users.ListExists Then If users.ListExists Then
Dim l%? = Nothing
If UseLimits Then
Do
l = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", "Download limit", 10), Nothing)
If l.HasValue Then
Select Case MsgBoxE(New MMessage($"You are set up downloading top [{l.Value}] posts", "Download limit",
{"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index
Case 0 : Exit Do
Case 2 : l = Nothing
Case 3 : GoTo CancelDownloadingOperation
End Select
Else
Select Case MsgBoxE({"You are not set up downloading limit", "Download limit"},,,, {"Confirm", "Try again", "Cancel"}).Index
Case 0 : Exit Do
Case 2 : GoTo CancelDownloadingOperation
End Select
End If
Loop
End If
If USER_CONTEXT.Visible Then USER_CONTEXT.Hide() If USER_CONTEXT.Visible Then USER_CONTEXT.Hide()
GoTo ResumeDownloadingOperation
CancelDownloadingOperation:
MsgBoxE("Operation canceled")
Exit Sub
ResumeDownloadingOperation:
If users.Count = 1 Then If users.Count = 1 Then
users(0).DownloadTopCount = l
Downloader.Add(users(0)) Downloader.Add(users(0))
Else Else
Dim uStr$ = users.Select(Function(u) u.ToString()).ListToString(, vbNewLine) 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)}" & 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"}, $"Selected users:{vbNewLine}{uStr}", "A few users selected"},
MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
users.ForEach(Sub(u) u.DownloadTopCount = l)
Downloader.AddRange(users) Downloader.AddRange(users)
End If End If
End If End If
@@ -771,7 +824,7 @@ CloseResume:
End If End If
End Sub End Sub
Private Sub Downloader_OnDownloading(ByVal Value As Boolean) Private Sub Downloader_OnDownloading(ByVal Value As Boolean)
Dim a As Action = Sub() BTT_DOWN_STOP.Enabled = Not Value Dim a As Action = Sub() BTT_DOWN_STOP.Enabled = Value
If Toolbar_TOP.InvokeRequired Then Toolbar_TOP.Invoke(a) Else a.Invoke If Toolbar_TOP.InvokeRequired Then Toolbar_TOP.Invoke(a) Else a.Invoke
End Sub End Sub
End Class End Class

View File

@@ -27,6 +27,17 @@ Friend Module MainMod
Friend InfoForm As DownloadedInfoForm Friend InfoForm As DownloadedInfoForm
Friend VideoDownloader As VideosDownloaderForm Friend VideoDownloader As VideosDownloaderForm
Friend ReadOnly ParsersDataDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime) Friend ReadOnly ParsersDataDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
#Region "File name operations"
Friend FileDateAppenderProvider As IFormatProvider
''' <summary>File, Date</summary>
Friend FileDateAppenderPattern As String
Friend Class NumberedFile : Inherits SFileNumbers
Friend Sub New(ByVal f As SFile)
FileName = f.Name
NumberProvider = New ANumbers With {.FormatMode = ANumbers.Formats.NumberGroup, .GroupSize = 5}
End Sub
End Class
#End Region
Friend Property MainProgress As PersonalUtilities.Forms.Toolbars.MyProgress Friend Property MainProgress As PersonalUtilities.Forms.Toolbars.MyProgress
Friend Function GetLviGroupName(ByVal Site As Sites, ByVal Temp As Boolean, ByVal Fav As Boolean, ByVal IsCollection As Boolean) As String Friend Function GetLviGroupName(ByVal Site As Sites, ByVal Temp As Boolean, ByVal Fav As Boolean, ByVal IsCollection As Boolean) As String
Dim Opt$ = String.Empty Dim Opt$ = String.Empty
@@ -74,7 +85,7 @@ Friend Module MainMod
x.Attribute(Name_Collection).Value, x.Attribute(Name_Merged).Value.FromXML(Of Boolean)(False)) x.Attribute(Name_Collection).Value, x.Attribute(Name_Merged).Value.FromXML(Of Boolean)(False))
IsChannel = x.Attribute(Name_IsChannel).Value.FromXML(Of Boolean)(False) IsChannel = x.Attribute(Name_IsChannel).Value.FromXML(Of Boolean)(False)
End Sub End Sub
Friend Sub New(ByVal c As API.Reddit.Channel) Friend Sub New(ByVal c As Reddit.Channel)
Name = c.Name Name = c.Name
Site = Sites.Reddit Site = Sites.Reddit
File = c.File File = c.File
@@ -144,6 +155,7 @@ Friend Module MainMod
} }
End Function End Function
End Structure End Structure
#Region "Image Handlers management"
Friend Sub ImageHandler(ByVal User As IUserData) Friend Sub ImageHandler(ByVal User As IUserData)
ImageHandler(User, False) ImageHandler(User, False)
ImageHandler(User, True) ImageHandler(User, True)
@@ -151,9 +163,9 @@ Friend Module MainMod
Friend Sub ImageHandler(ByVal User As IUserData, ByVal Add As Boolean) Friend Sub ImageHandler(ByVal User As IUserData, ByVal Add As Boolean)
Try Try
If Add Then If Add Then
AddHandler User.OnPictureUpdated, AddressOf MainFrame.User_OnPictureUpdated AddHandler User.Self.OnPictureUpdated, AddressOf MainFrame.User_OnPictureUpdated
Else Else
RemoveHandler User.OnPictureUpdated, AddressOf MainFrame.User_OnPictureUpdated RemoveHandler User.Self.OnPictureUpdated, AddressOf MainFrame.User_OnPictureUpdated
End If End If
Catch ex As Exception Catch ex As Exception
End Try End Try
@@ -164,6 +176,8 @@ Friend Module MainMod
Catch ex As Exception Catch ex As Exception
End Try End Try
End Sub End Sub
#End Region
#Region "Standalone video download functions"
Friend Function GetCurrentBuffer() As String Friend Function GetCurrentBuffer() As String
Dim b$ = BufferText Dim b$ = BufferText
If Not (Not b.IsEmptyString AndAlso b.Length > 4 AndAlso b.StartsWith("http")) Then b = String.Empty If Not (Not b.IsEmptyString AndAlso b.Length > 4 AndAlso b.StartsWith("http")) Then b = String.Empty
@@ -245,23 +259,8 @@ Friend Module MainMod
Return ErrorsDescriber.Execute(e, ex, "Downloading video by URL error", False) Return ErrorsDescriber.Execute(e, ex, "Downloading video by URL error", False)
End Try End Try
End Function End Function
Friend Sub CheckForReparse() #End Region
Try #Region "Blacklist Support"
Dim p As Func(Of IUserData, Boolean) = Function(u) u.DataForReparseExists
With Settings.Users
If .Count > 0 AndAlso .Exists(Function(u) p.Invoke(u)) Then
If MsgBox("Some users contain not parsed data" & vbCr &
"Do you want to start trying to download?",
MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton1,
"Not parsed data found") = MsgBoxResult.Yes Then
Downloader.AddRange(.Where(p).SelectMany(Function(u) If(u.IsCollection, DirectCast(u, UserDataBind).Collections.Where(p), {u})), True)
End If
End If
End With
Catch ex As Exception
ErrorsDescriber.Execute(EDP.SendInLog, ex, "CheckForReparse")
End Try
End Sub
Friend Structure UserBan Friend Structure UserBan
Friend ReadOnly Name As String Friend ReadOnly Name As String
Friend ReadOnly Reason As String Friend ReadOnly Reason As String
@@ -347,4 +346,5 @@ Friend Module MainMod
Friend Function UserBanned(ByVal UserName As String) As Boolean Friend Function UserBanned(ByVal UserName As String) As Boolean
Return UserBanned({UserName}).ListExists Return UserBanned({UserName}).ListExists
End Function End Function
#End Region
End Module End Module

View File

@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")> <Assembly: AssemblyVersion("1.0.0.4")>
<Assembly: AssemblyFileVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.4")>
<Assembly: NeutralResourcesLanguage("en")> <Assembly: NeutralResourcesLanguage("en")>

View File

@@ -14,6 +14,7 @@
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl> <PublishUrl>publish\</PublishUrl>
<Install>true</Install> <Install>true</Install>
<InstallFrom>Disk</InstallFrom> <InstallFrom>Disk</InstallFrom>
@@ -26,7 +27,6 @@
<MapFileExtensions>true</MapFileExtensions> <MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision> <ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>

View File

@@ -3,8 +3,17 @@ Imports PersonalUtilities.Functions.XML.Base
Imports SCrawler.API Imports SCrawler.API
Imports SCrawler.API.Base Imports SCrawler.API.Base
Friend Class SettingsCLS : Implements IDisposable Friend Class SettingsCLS : Implements IDisposable
Friend Const DefaultMaxDownloadingTasks As Integer = 5
Friend ReadOnly Design As XmlFile Friend ReadOnly Design As XmlFile
Private ReadOnly MyXML As XmlFile Private ReadOnly MyXML As XmlFile
Friend ReadOnly OS64 As Boolean
Friend ReadOnly FfmpegExists As Boolean
Friend ReadOnly FfmpegFile As SFile
Friend ReadOnly Property UseM3U8 As Boolean
Get
Return OS64 And FfmpegExists
End Get
End Property
Private ReadOnly MySites As Dictionary(Of Sites, SiteSettings) Private ReadOnly MySites As Dictionary(Of Sites, SiteSettings)
Friend ReadOnly Property Users As List(Of IUserData) Friend ReadOnly Property Users As List(Of IUserData)
Friend ReadOnly Property UsersList As List(Of UserInfo) Friend ReadOnly Property UsersList As List(Of UserInfo)
@@ -14,12 +23,17 @@ Friend Class SettingsCLS : Implements IDisposable
Private ReadOnly BlackListFile As SFile = $"{SettingsFolderName}\BlackList.txt" Private ReadOnly BlackListFile As SFile = $"{SettingsFolderName}\BlackList.txt"
Private ReadOnly UsersSettingsFile As SFile = $"{SettingsFolderName}\Users.xml" Private ReadOnly UsersSettingsFile As SFile = $"{SettingsFolderName}\Users.xml"
Friend Sub New() Friend Sub New()
OS64 = Environment.Is64BitOperatingSystem
FfmpegFile = "ffmpeg.exe"
FfmpegExists = FfmpegFile.Exists
If OS64 And Not FfmpegExists Then MsgBoxE("[ffmpeg.exe] is missing", vbExclamation)
Design = New XmlFile("Settings\Design.xml") Design = New XmlFile("Settings\Design.xml")
Design.DefaultsLoading(False) Design.DefaultsLoading(False)
MyXML = New XmlFile(Nothing) With {.AutoUpdateFile = True} MyXML = New XmlFile(Nothing) With {.AutoUpdateFile = True}
Users = New List(Of IUserData) Users = New List(Of IUserData)
UsersList = New List(Of UserInfo) UsersList = New List(Of UserInfo)
BlackList = New List(Of UserBan) BlackList = New List(Of UserBan)
GlobalPath = New XMLValue(Of SFile)("GlobalPath", New SFile($"{SFile.GetPath(Application.StartupPath).PathWithSeparator}Data\"), MyXML,, GlobalPath = New XMLValue(Of SFile)("GlobalPath", New SFile($"{SFile.GetPath(Application.StartupPath).PathWithSeparator}Data\"), MyXML,,
XMLValue(Of SFile).ToFilePath) XMLValue(Of SFile).ToFilePath)
MySites = New Dictionary(Of Sites, SiteSettings) From { MySites = New Dictionary(Of Sites, SiteSettings) From {
@@ -27,22 +41,37 @@ Friend Class SettingsCLS : Implements IDisposable
{Sites.Twitter, New SiteSettings(Sites.Twitter, MyXML, GlobalPath.Value)} {Sites.Twitter, New SiteSettings(Sites.Twitter, MyXML, GlobalPath.Value)}
} }
MySites(Sites.Reddit).Responser.Decoders.Add(SymbolsConverter.Converters.Unicode) MySites(Sites.Reddit).Responser.Decoders.Add(SymbolsConverter.Converters.Unicode)
MaxLargeImageHeigh = New XMLValue(Of Integer)("MaxLargeImageHeigh", 150, MyXML)
MaxSmallImageHeigh = New XMLValue(Of Integer)("MaxSmallImageHeigh", 15, MyXML)
ViewMode = New XMLValue(Of Integer)("ViewMode", ViewModes.IconLarge, MyXML)
ShowingMode = New XMLValue(Of Integer)("ShowingMode", ShowingModes.All, MyXML)
SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML) SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML)
CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML) CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML)
MaxUsersJobsCount = New XMLValue(Of Integer)("MaxUsersJobsCount", DefaultMaxDownloadingTasks, MyXML)
DefaultTemporary = New XMLValue(Of Boolean)("DefaultTemporary", False, MyXML) DefaultTemporary = New XMLValue(Of Boolean)("DefaultTemporary", False, MyXML)
DefaultDownloadImages = New XMLValue(Of Boolean)("DefaultDownloadImages", True, MyXML)
DefaultDownloadVideos = New XMLValue(Of Boolean)("DefaultDownloadVideos", True, MyXML)
FileAddDateToFileName = New XMLValue(Of Boolean)("FileAddDateToFileName", False, MyXML) With {.OnChangeFunction = AddressOf ChangeDateProvider}
FileAddTimeToFileName = New XMLValue(Of Boolean)("FileAddTimeToFileName", False, MyXML) With {.OnChangeFunction = AddressOf ChangeDateProvider}
FileDateTimePositionEnd = New XMLValue(Of Boolean)("FileDateTimePositionEnd", True, MyXML) With {.OnChangeFunction = AddressOf ChangeDateProvider}
FileReplaceNameByDate = New XMLValue(Of Boolean)("FileReplaceNameByDate", False, MyXML)
MaxLargeImageHeigh = New XMLValue(Of Integer)("MaxLargeImageHeigh", 150, MyXML)
MaxSmallImageHeigh = New XMLValue(Of Integer)("MaxSmallImageHeigh", 15, MyXML)
InfoViewMode = New XMLValue(Of Integer)("InfoViewMode", DownloadedInfoForm.ViewModes.Session, MyXML)
ViewMode = New XMLValue(Of Integer)("ViewMode", ViewModes.IconLarge, MyXML)
ShowingMode = New XMLValue(Of Integer)("ShowingMode", ShowingModes.All, MyXML)
LatestSavingPath = New XMLValue(Of SFile)("LatestSavingPath", Nothing, MyXML,, XMLValue(Of SFile).ToFilePath) LatestSavingPath = New XMLValue(Of SFile)("LatestSavingPath", Nothing, MyXML,, XMLValue(Of SFile).ToFilePath)
LatestSelectedLabels = New XMLValue(Of String)("LatestSelectedLabels",, MyXML) LatestSelectedLabels = New XMLValue(Of String)("LatestSelectedLabels",, MyXML)
LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML) LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML)
ChannelsHideExistsUser = New XMLValue(Of Boolean)("ChannelsHideExistsUser", True, MyXML)
InfoViewMode = New XMLValue(Of Integer)("InfoViewMode", DownloadedInfoForm.ViewModes.Session, MyXML)
ChannelsImagesRows = New XMLValue(Of Integer)("ChannelsImagesRows", 2, MyXML) ChannelsImagesRows = New XMLValue(Of Integer)("ChannelsImagesRows", 2, MyXML)
ChannelsImagesColumns = New XMLValue(Of Integer)("ChannelsImagesColumns", 5, MyXML) ChannelsImagesColumns = New XMLValue(Of Integer)("ChannelsImagesColumns", 5, MyXML)
ChannelsHideExistsUser = New XMLValue(Of Boolean)("ChannelsHideExistsUser", True, MyXML)
ChannelsMaxJobsCount = New XMLValue(Of Integer)("ChannelsMaxJobsCount", DefaultMaxDownloadingTasks, MyXML)
FromChannelDownloadTop = New XMLValue(Of Integer)("FromChannelDownloadTop", 10, MyXML)
FromChannelDownloadTopUse = New XMLValue(Of Boolean)("FromChannelDownloadTopUse", False, MyXML)
FromChannelCopyImageToUser = New XMLValue(Of Boolean)("FromChannelCopyImageToUser", True, MyXML)
CheckUpdatesAtStart = New XMLValue(Of Boolean)("CheckUpdatesAtStart", True, MyXML) CheckUpdatesAtStart = New XMLValue(Of Boolean)("CheckUpdatesAtStart", True, MyXML)
ShowNewVersionNotification = New XMLValue(Of Boolean)("ShowNewVersionNotification", True, MyXML) ShowNewVersionNotification = New XMLValue(Of Boolean)("ShowNewVersionNotification", True, MyXML)
@@ -56,6 +85,16 @@ Friend Class SettingsCLS : Implements IDisposable
BlackList.ListAddList(IO.File.ReadAllLines(BlackListFile), LAP.NotContainsOnly) BlackList.ListAddList(IO.File.ReadAllLines(BlackListFile), LAP.NotContainsOnly)
If BlackList.Count > 0 Then BlackList.RemoveAll(Function(b) Not b.Exists) If BlackList.Count > 0 Then BlackList.RemoveAll(Function(b) Not b.Exists)
End If End If
ChangeDateProvider(Nothing, Nothing, Nothing)
End Sub
Private Sub ChangeDateProvider(ByVal Sender As Object, ByVal Name As String, ByVal Value As Object)
If Not _UpdatesSuspended Then
Dim p$ = String.Empty
If FileAddDateToFileName Then p = "yyyyMMdd"
If FileAddTimeToFileName Then p.StringAppend("HHmmss", "_")
If Not p.IsEmptyString Then FileDateAppenderProvider = New ADateTime(p) Else FileDateAppenderProvider = New ADateTime("yyyyMMdd_HHmmss")
If FileDateTimePositionEnd Then FileDateAppenderPattern = "{0}_{1}" Else FileDateAppenderPattern = "{1}_{0}"
End If
End Sub End Sub
Friend Sub LoadUsers() Friend Sub LoadUsers()
Try Try
@@ -67,17 +106,26 @@ Friend Class SettingsCLS : Implements IDisposable
If x.Count > 0 Then x.ForEach(Sub(xx) UsersList.Add(xx)) If x.Count > 0 Then x.ForEach(Sub(xx) UsersList.Add(xx))
End Using End Using
Dim PNC As Func(Of UserInfo, Boolean) = Function(u) Not u.IncludedInCollection Dim PNC As Func(Of UserInfo, Boolean) = Function(u) Not u.IncludedInCollection
Dim NeedUpdate As Boolean = False
If UsersList.Count > 0 Then If UsersList.Count > 0 Then
Dim cUsers As List(Of UserInfo) = UsersList.Where(Function(u) u.IncludedInCollection).ToList Dim cUsers As List(Of UserInfo) = UsersList.Where(Function(u) u.IncludedInCollection).ToList
If cUsers.ListExists Then If cUsers.ListExists Then
Dim d As New Dictionary(Of SFile, List(Of UserInfo)) Dim d As New Dictionary(Of SFile, List(Of UserInfo))
cUsers = cUsers.ListForEachCopy(Of List(Of UserInfo))(Function(ByVal f As UserInfo, ByVal f_indx As Integer) As UserInfo cUsers = cUsers.ListForEachCopy(Of List(Of UserInfo))(Function(ByVal f As UserInfo, ByVal f_indx As Integer) As UserInfo
If Not d.ContainsKey(f.File.CutPath(2).Path) Then Dim m% = IIf(f.Merged, 1, 2)
d.Add(f.File.CutPath(2).Path, New List(Of UserInfo) From {f}) If SFile.GetPath(f.File.CutPath(m - 1).Path).Exists(SFO.Path, False) Then
Dim fp As SFile = SFile.GetPath(f.File.CutPath(m).Path)
If Not d.ContainsKey(fp) Then
d.Add(fp, New List(Of UserInfo) From {f})
Else Else
d(f.File.CutPath(2).Path).Add(f) d(f.File.CutPath(m).Path).Add(f)
End If End If
Return f Return f
Else
NeedUpdate = True
UsersList.Remove(f)
Return Nothing
End If
End Function, True) End Function, True)
Dim v% Dim v%
If d.Count > 0 Then If d.Count > 0 Then
@@ -99,8 +147,8 @@ Friend Class SettingsCLS : Implements IDisposable
t.Clear() t.Clear()
Dim du As List(Of UserInfo) = (From u As IUserData In Users Dim du As List(Of UserInfo) = (From u As IUserData In Users
Where Not u.IsCollection AndAlso Not u.FileExists Where Not u.IsCollection AndAlso Not u.FileExists
Select DirectCast(u, UserDataBase).User).ToList Select DirectCast(u.Self, UserDataBase).User).ToList
If Not du Is Nothing AndAlso du.Count > 0 Then du.ForEach(Sub(u) UsersList.Remove(u)) : du.Clear() If du.ListExists Then du.ForEach(Sub(u) UsersList.Remove(u)) : du.Clear()
Users.ListDisposeRemoveAll(Function(ByVal u As IUserData) As Boolean Users.ListDisposeRemoveAll(Function(ByVal u As IUserData) As Boolean
If u.IsCollection Then If u.IsCollection Then
With DirectCast(u, UserDataBind) With DirectCast(u, UserDataBind)
@@ -119,6 +167,7 @@ Friend Class SettingsCLS : Implements IDisposable
End If End If
End Function) End Function)
End If End If
If NeedUpdate Then UpdateUsersList()
End If End If
If Users.Count > 0 Then If Users.Count > 0 Then
Labels.ToList.ListAddList(Users.SelectMany(Function(u) u.Labels), LAP.NotContainsOnly) Labels.ToList.ListAddList(Users.SelectMany(Function(u) u.Labels), LAP.NotContainsOnly)
@@ -171,24 +220,23 @@ Friend Class SettingsCLS : Implements IDisposable
Friend Overloads Function UserExists(ByVal _User As UserInfo) As Boolean Friend Overloads Function UserExists(ByVal _User As UserInfo) As Boolean
Return UserExists(_User.Site, _User.Name) Return UserExists(_User.Site, _User.Name)
End Function End Function
Private _UpdatesSuspended As Boolean = False
Friend Sub BeginUpdate()
MyXML.BeginUpdate()
_UpdatesSuspended = True
End Sub
Friend Sub EndUpdate()
MyXML.EndUpdate()
If MyXML.ChangesDetected Then MyXML.UpdateData()
_UpdatesSuspended = False
ChangeDateProvider(Nothing, Nothing, Nothing)
End Sub
Friend ReadOnly Property Site(ByVal s As Sites) As SiteSettings Friend ReadOnly Property Site(ByVal s As Sites) As SiteSettings
Get Get
Return MySites(s) Return MySites(s)
End Get End Get
End Property End Property
Friend ReadOnly Property GlobalPath As XMLValue(Of SFile) Friend ReadOnly Property GlobalPath As XMLValue(Of SFile)
Friend ReadOnly Property MaxLargeImageHeigh As XMLValue(Of Integer)
Friend ReadOnly Property MaxSmallImageHeigh As XMLValue(Of Integer)
Friend ReadOnly Property ViewMode As XMLValue(Of Integer)
Friend ReadOnly Property ViewModeIsPicture As Boolean
Get
Select Case ViewMode.Value
Case View.LargeIcon, View.SmallIcon : Return True
Case Else : Return False
End Select
End Get
End Property
Friend ReadOnly Property ShowingMode As XMLValue(Of Integer)
Friend ReadOnly Property SeparateVideoFolder As XMLValue(Of Boolean) Friend ReadOnly Property SeparateVideoFolder As XMLValue(Of Boolean)
Friend ReadOnly Property CollectionsPath As XMLValue(Of String) Friend ReadOnly Property CollectionsPath As XMLValue(Of String)
Friend ReadOnly Property CollectionsPathF As SFile Friend ReadOnly Property CollectionsPathF As SFile
@@ -200,17 +248,52 @@ Friend Class SettingsCLS : Implements IDisposable
End If End If
End Get End Get
End Property End Property
Friend ReadOnly Property MaxUsersJobsCount As XMLValue(Of Integer)
#Region "Defaults"
Friend ReadOnly Property DefaultTemporary As XMLValue(Of Boolean) Friend ReadOnly Property DefaultTemporary As XMLValue(Of Boolean)
Friend ReadOnly Property DefaultDownloadImages As XMLValue(Of Boolean)
Friend ReadOnly Property DefaultDownloadVideos As XMLValue(Of Boolean)
#End Region
#Region "Additional info"
Friend ReadOnly Property FileAddDateToFileName As XMLValue(Of Boolean)
Friend ReadOnly Property FileAddTimeToFileName As XMLValue(Of Boolean)
Friend ReadOnly Property FileDateTimePositionEnd As XMLValue(Of Boolean)
Friend ReadOnly Property FileReplaceNameByDate As XMLValue(Of Boolean)
#End Region
#Region "View"
Friend ReadOnly Property MaxLargeImageHeigh As XMLValue(Of Integer)
Friend ReadOnly Property MaxSmallImageHeigh As XMLValue(Of Integer)
Friend ReadOnly Property InfoViewMode As XMLValue(Of Integer)
Friend ReadOnly Property ViewMode As XMLValue(Of Integer)
Friend ReadOnly Property ViewModeIsPicture As Boolean
Get
Select Case ViewMode.Value
Case View.LargeIcon, View.SmallIcon : Return True
Case Else : Return False
End Select
End Get
End Property
Friend ReadOnly Property ShowingMode As XMLValue(Of Integer)
#End Region
#Region "Latest values"
Friend ReadOnly Property LatestSavingPath As XMLValue(Of SFile) Friend ReadOnly Property LatestSavingPath As XMLValue(Of SFile)
Friend ReadOnly Property LatestSelectedLabels As XMLValue(Of String) Friend ReadOnly Property LatestSelectedLabels As XMLValue(Of String)
Friend ReadOnly Property LatestSelectedChannel As XMLValue(Of String) Friend ReadOnly Property LatestSelectedChannel As XMLValue(Of String)
Friend ReadOnly Property InfoViewMode As XMLValue(Of Integer) #End Region
#Region "Channels properties"
Friend ReadOnly Property ChannelsImagesRows As XMLValue(Of Integer) Friend ReadOnly Property ChannelsImagesRows As XMLValue(Of Integer)
Friend ReadOnly Property ChannelsImagesColumns As XMLValue(Of Integer) Friend ReadOnly Property ChannelsImagesColumns As XMLValue(Of Integer)
Friend ReadOnly Property ChannelsHideExistsUser As XMLValue(Of Boolean) Friend ReadOnly Property ChannelsHideExistsUser As XMLValue(Of Boolean)
Friend ReadOnly Property ChannelsMaxJobsCount As XMLValue(Of Integer)
Friend ReadOnly Property FromChannelDownloadTop As XMLValue(Of Integer)
Friend ReadOnly Property FromChannelDownloadTopUse As XMLValue(Of Boolean)
Friend ReadOnly Property FromChannelCopyImageToUser As XMLValue(Of Boolean)
#End Region
#Region "New version properties"
Friend ReadOnly Property CheckUpdatesAtStart As XMLValue(Of Boolean) Friend ReadOnly Property CheckUpdatesAtStart As XMLValue(Of Boolean)
Friend ReadOnly Property ShowNewVersionNotification As XMLValue(Of Boolean) Friend ReadOnly Property ShowNewVersionNotification As XMLValue(Of Boolean)
Friend ReadOnly Property LatestVersion As XMLValue(Of String) Friend ReadOnly Property LatestVersion As XMLValue(Of String)
#End Region
#Region "IDisposable Support" #Region "IDisposable Support"
Private disposedValue As Boolean = False Private disposedValue As Boolean = False
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean) Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)

View File

@@ -81,11 +81,16 @@ Friend Class TDownloader : Implements IDisposable
Const nf As ANumbers.Formats = ANumbers.Formats.Number Const nf As ANumbers.Formats = ANumbers.Formats.Number
Dim t As New List(Of Task) Dim t As New List(Of Task)
Dim i% = -1 Dim i% = -1
Dim j% = Settings.MaxUsersJobsCount - 1
Dim Keys As New List(Of String)
For Each _Item As IUserData In Items For Each _Item As IUserData In Items
i += 1 If Not _Item.Disposed Then
If i > 4 Then Exit For Keys.Add(_Item.LVIKey)
Token.ThrowIfCancellationRequested() Token.ThrowIfCancellationRequested()
t.Add(Task.Run(Sub() _Item.DownloadData(Token))) t.Add(Task.Run(Sub() _Item.DownloadData(Token)))
i += 1
If i >= j Then Exit For
End If
Next Next
If t.Count > 0 Then If t.Count > 0 Then
_CurrentDownloadingTasks = t.Count _CurrentDownloadingTasks = t.Count
@@ -94,20 +99,24 @@ Friend Class TDownloader : Implements IDisposable
.Information = $"Downloading {_CurrentDownloadingTasks.NumToString(nf, NProv)}/{Items.Count.NumToString(nf, NProv)} profiles' data" .Information = $"Downloading {_CurrentDownloadingTasks.NumToString(nf, NProv)}/{Items.Count.NumToString(nf, NProv)} profiles' data"
.InformationTemporary = .Information .InformationTemporary = .Information
End With End With
Token.ThrowIfCancellationRequested()
Task.WaitAll(t.ToArray) Task.WaitAll(t.ToArray)
Dim dcc As Boolean = False Dim dcc As Boolean = False
If Count > 0 And Count >= t.Count Then If Keys.Count > 0 Then
For i = t.Count - 1 To 0 Step -1 For Each k$ In Keys
i = Items.FindIndex(Function(ii) ii.LVIKey = k)
If i >= 0 Then
With Items(i) With Items(i)
If Not .IsCollection AndAlso .DownloadedTotal(False) > 0 Then If Not .Disposed AndAlso Not .IsCollection AndAlso .DownloadedTotal(False) > 0 Then
If Not Downloaded.Contains(.Self) Then Downloaded.Add(GetUserFromMainCollection(.Self)) If Not Downloaded.Contains(.Self) Then Downloaded.Add(GetUserFromMainCollection(.Self))
dcc = True dcc = True
End If End If
Items.RemoveAt(i)
End With End With
Items.RemoveAt(i)
End If
Next Next
End If End If
Keys.Clear()
Items.RemoveAll(Function(ii) ii.Disposed)
If dcc Then Downloaded.RemoveAll(Function(u) u Is Nothing) If dcc Then Downloaded.RemoveAll(Function(u) u Is Nothing)
If dcc And Downloaded.Count > 0 Then RaiseEvent OnDownloadCountChange() If dcc And Downloaded.Count > 0 Then RaiseEvent OnDownloadCountChange()
t.Clear() t.Clear()
@@ -123,7 +132,7 @@ Friend Class TDownloader : Implements IDisposable
End Try End Try
End Sub End Sub
Private Function GetUserFromMainCollection(ByVal User As IUserData) As IUserData Private Function GetUserFromMainCollection(ByVal User As IUserData) As IUserData
Dim uSimple As Predicate(Of IUserData) = Function(u) u.Equals(DirectCast(User, UserDataBase)) Dim uSimple As Predicate(Of IUserData) = Function(u) u.Equals(DirectCast(User.Self, UserDataBase))
Dim uCol As Predicate(Of IUserData) = Function(ByVal u As IUserData) As Boolean Dim uCol As Predicate(Of IUserData) = Function(ByVal u As IUserData) As Boolean
If u.IsCollection Then If u.IsCollection Then
Return DirectCast(u, UserDataBind).Collections.Exists(uSimple) Return DirectCast(u, UserDataBind).Collections.Exists(uSimple)
@@ -150,19 +159,18 @@ Friend Class TDownloader : Implements IDisposable
If Not Items.Contains(Item) Then If Not Items.Contains(Item) Then
If Item.IsCollection Then Item.DownloadData(Nothing) Else Items.Add(Item) If Item.IsCollection Then Item.DownloadData(Nothing) Else Items.Add(Item)
UpdateJobsLabel() UpdateJobsLabel()
If Not _Working Then Start()
End If End If
If Items.Count > 0 Then Start()
End Sub End Sub
Friend Sub AddRange(ByVal _Items As IEnumerable(Of IUserData), Optional ByVal ReparseOnly As Boolean = False) Friend Sub AddRange(ByVal _Items As IEnumerable(Of IUserData))
If _Items.ListExists Then If _Items.ListExists Then
For i% = 0 To _Items.Count - 1 For i% = 0 To _Items.Count - 1
'If i = 5 Then UpdateJobsLabel() : Start() 'If i = 5 Then UpdateJobsLabel() : Start()
If ReparseOnly Then _Items(i).DownloadReparseOnly = True
If _Items(i).IsCollection Then _Items(i).DownloadData(Nothing) Else Items.Add(_Items(i)) If _Items(i).IsCollection Then _Items(i).DownloadData(Nothing) Else Items.Add(_Items(i))
Next Next
UpdateJobsLabel() UpdateJobsLabel()
Start()
End If End If
If Items.Count > 0 Then Start()
End Sub End Sub
Friend Sub UserRemove(ByVal _Item As IUserData) Friend Sub UserRemove(ByVal _Item As IUserData)
If Downloaded.Count > 0 AndAlso Downloaded.Contains(_Item) Then Downloaded.Remove(_Item) : RaiseEvent OnDownloadCountChange() If Downloaded.Count > 0 AndAlso Downloaded.Contains(_Item) Then Downloaded.Remove(_Item) : RaiseEvent OnDownloadCountChange()