mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-14 15:52:18 +00:00
2.0.0.0
Added Instagram downloading, filter by site, channels groups, change folder function, imgur compatibility, special folders, deleting with keeping data, Reddit saved posts downloading Fixed limited twitter downloading, suspended profiles Updated download algo Concat sites editors into a single form Updated Reddit downloading algo Fixed saved function in video downloader Some improvements
This commit is contained in:
17
Changelog.md
17
Changelog.md
@@ -1,3 +1,20 @@
|
||||
# 2.0.0.0
|
||||
|
||||
- Added
|
||||
- **Instagram**
|
||||
- Filter by site
|
||||
- Group for regular channels in the main window
|
||||
- Ability to change user/collection path
|
||||
- Imgur albums downloading
|
||||
- NSFW Imgur content bypass (requires 'CilentID')
|
||||
- Special user folder
|
||||
- Remove user while keeping data
|
||||
- Disabled overriding user preferences when creating a new user if it already exists in the destination (in case of deleting a user with saving data).
|
||||
- **Saved Reddit posts downloading**
|
||||
- Fixed
|
||||
- Suspended profiles do not change status if the profile is no longer suspended
|
||||
- Limited download for Twitter not implemented
|
||||
|
||||
# 1.0.1.0
|
||||
|
||||
- Added
|
||||
|
||||
39
README.md
39
README.md
@@ -1,8 +1,8 @@
|
||||
# Social networks crawler
|
||||
|
||||
Program for downloading photo and video from Reddit and Twitter
|
||||
Program for downloading photo and video from Reddit, Twitter and Instagram
|
||||
|
||||
Enjoying the tool? Considering adding to my coffee fund :)
|
||||
Do you like this program? Consider adding to my coffee fund by making a donation to show your support. :)
|
||||
|
||||
[](https://ko-fi.com/andyprogram)
|
||||
|
||||
@@ -12,9 +12,10 @@ Enjoying the tool? Considering adding to my coffee fund :)
|
||||
- Reddit galleries of images;
|
||||
- Redgifs hosted videos (https://www.redgifs.com/);
|
||||
- Reddit hosted videos (downloading Reddit hosted video is going through ffmpeg);
|
||||
- Twitter images;
|
||||
- Twitter videos.
|
||||
- Parse channel and view data.
|
||||
- Twitter images and videos;
|
||||
- Instagram images and videos.
|
||||
- Parse [channel and view data](https://github.com/AAndyProgram/SCrawler/wiki/Channels).
|
||||
- Download [saved Reddit posts](https://github.com/AAndyProgram/SCrawler/wiki/Home#saved-posts).
|
||||
- Add users from parsed channel.
|
||||
- Labeling users.
|
||||
- Filter exists users by label or group.
|
||||
@@ -24,41 +25,49 @@ Enjoying the tool? Considering adding to my coffee fund :)
|
||||
|
||||
## Reddit
|
||||
|
||||
The program parsing all user's posts, gathering pictures' MD5 hash and compare with existing for remove duplicates. Then media will be downloaded.
|
||||
The program parses all user posts, obtain MD5 images hash and compares them with existing ones to remove duplicates. Then the media will be downloaded.
|
||||
|
||||
## Twitter
|
||||
## Twitter and Instagram
|
||||
|
||||
The program parsing all user's posts and compare file names with existing for remove duplicates. Then media will be downloaded.
|
||||
The program parses all user posts and compares file names with existing ones to remove duplicates. Then the media will be downloaded.
|
||||
|
||||
You can read about Instagram restrictions [here](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram-limits)
|
||||
|
||||
# Requirements:
|
||||
|
||||
- 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)
|
||||
- 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))
|
||||
- Authorization cookies Instagram (if you want to download data from Instagram)
|
||||
- ffmpeg library for downloading videos hosted on Reddit (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)
|
||||
- Just unpack program archive in any folder you want, copy ```ffmpeg.exe``` into and enjoy. :-)
|
||||
- Just unzip the program archive to any folder, copy the file ```ffmpeg.exe``` into it and enjoy. :)
|
||||
|
||||
# Updating
|
||||
|
||||
Just download [latest](https://github.com/AAndyProgram/SCrawler/releases/latest) version and unpack it into the program folder. Before starting a new version, I recommend making a backup copy of the program settings folder.
|
||||
|
||||
# Settings and usage
|
||||
|
||||
The program has an intuitive interface.
|
||||
|
||||
Just add user profile and press ```Start downloading``` button.
|
||||
Just add a user profile and click the ```Start downloading``` button.
|
||||
|
||||
Users can be added by patterns:
|
||||
You can add users by patterns:
|
||||
- https://www.instagram.com/SomeUserName
|
||||
- https://twitter.com/SomeUserName
|
||||
- https://reddit.com/user/SomeUserName
|
||||
- https://reddit.com/r/SomeSubredditName
|
||||
- u/SomeUserName
|
||||
- r/SomeSubredditName
|
||||
- SomeUserName (in this case you must to choose user site)
|
||||
- SomeUserName (in this case, you need to select the user's site)
|
||||
- SomeSubredditName
|
||||
|
||||
More about users and subreddits adding [here](https://github.com/AAndyProgram/SCrawler/wiki/Users)
|
||||
Read more about adding users and subreddits [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
|
||||
|
||||
Create a shortcut for the program. Open shortcut properties. On the ```Shortcut``` tab in ```Target``` field just add ```v``` at the end through the space.
|
||||
Create a shortcut for the program. Open shortcut properties. In the ```Shortcut``` tab, in the ```Target``` field, just add the letter ```v``` at the end across the space.
|
||||
|
||||
Example: ```D:\Programs\SCrawler\SCrawler.exe v```
|
||||
|
||||
@@ -11,6 +11,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitignore = .gitignore
|
||||
Changelog.md = Changelog.md
|
||||
Info\InstaAlgo.txt = Info\InstaAlgo.txt
|
||||
Info\InstagramInfo.txt = Info\InstagramInfo.txt
|
||||
README.md = README.md
|
||||
Info\RedditUrlsInfo.txt = Info\RedditUrlsInfo.txt
|
||||
ToDo.txt = ToDo.txt
|
||||
|
||||
13
SCrawler/API/Base/Declarations.vb
Normal file
13
SCrawler/API/Base/Declarations.vb
Normal file
@@ -0,0 +1,13 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Namespace API.Base
|
||||
Friend Module Declarations
|
||||
Friend ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
|
||||
End Module
|
||||
End Namespace
|
||||
@@ -25,8 +25,47 @@ Namespace API.Base
|
||||
_Path.Value = NewFile
|
||||
End Set
|
||||
End Property
|
||||
Friend ReadOnly Property InstaHash As XMLValue(Of String)
|
||||
Friend ReadOnly Property InstaHashUpdateRequired As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property InstagramDownloadingErrorDate As XMLValue(Of Date)
|
||||
Friend Property InstagramLastApplyingValue As Integer? = Nothing
|
||||
Friend ReadOnly Property InstagramReadyForDownload As Boolean
|
||||
Get
|
||||
With InstagramDownloadingErrorDate
|
||||
If .ValueF.Exists Then
|
||||
Return .ValueF.Value.AddMinutes(If(InstagramLastApplyingValue, 10)) < Now
|
||||
Else
|
||||
Return True
|
||||
End If
|
||||
End With
|
||||
End Get
|
||||
End Property
|
||||
Friend Property InstagramTooManyRequestsReadyForCatch As Boolean = True
|
||||
Friend Sub InstagramTooManyRequests(ByVal Catched As Boolean)
|
||||
With InstagramDownloadingErrorDate
|
||||
If Catched Then
|
||||
If Not .ValueF.Exists Then
|
||||
.Value = Now
|
||||
If InstagramTooManyRequestsReadyForCatch Then
|
||||
InstagramLastApplyingValue = If(InstagramLastApplyingValue, 0) + 10
|
||||
InstagramTooManyRequestsReadyForCatch = False
|
||||
MyMainLOG = $"Instagram downloading error: too many requests. Try again after {If(InstagramLastApplyingValue, 10)} minutes..."
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
.ValueF = Nothing
|
||||
InstagramLastApplyingValue = Nothing
|
||||
End If
|
||||
End With
|
||||
End Sub
|
||||
Friend ReadOnly Property Temporary As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property DownloadImages As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property DownloadVideos As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property GetUserMediaOnly As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property SavedPostsUserName As XMLValue(Of String)
|
||||
Private ReadOnly SettingsFile As SFile
|
||||
Friend Sub New(ByVal s As Sites, ByRef _XML As XmlFile, ByVal GlobalPath As SFile)
|
||||
Friend Sub New(ByVal s As Sites, ByRef _XML As XmlFile, ByVal GlobalPath As SFile,
|
||||
ByRef _Temp As XMLValue(Of Boolean), ByRef _Imgs As XMLValue(Of Boolean), ByRef _Vids As XMLValue(Of Boolean))
|
||||
Site = s
|
||||
SettingsFile = $"{SettingsFolderName}\Responser_{s}.xml"
|
||||
Responser = New WEB.Response(SettingsFile)
|
||||
@@ -34,7 +73,8 @@ Namespace API.Base
|
||||
If SettingsFile.Exists Then
|
||||
Responser.LoadSettings()
|
||||
Else
|
||||
If Site = Sites.Twitter Then
|
||||
Select Case Site
|
||||
Case Sites.Twitter
|
||||
With Responser
|
||||
.ContentType = "application/json"
|
||||
.Accept = "*/*"
|
||||
@@ -54,20 +94,91 @@ Namespace API.Base
|
||||
.Add(Header_Twitter_Authorization, String.Empty)
|
||||
End With
|
||||
End With
|
||||
ElseIf Site = Sites.Reddit Then
|
||||
Case Sites.Reddit
|
||||
Responser.CookiesDomain = "reddit.com"
|
||||
Responser.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
||||
End If
|
||||
Case Sites.Instagram : Responser.CookiesDomain = "instagram.com"
|
||||
End Select
|
||||
Responser.SaveSettings()
|
||||
End If
|
||||
_Path = New XMLValue(Of SFile)("Path", SFile.GetPath($"{GlobalPath.PathWithSeparator}{Site}"),
|
||||
_XML, {SettingsCLS.Name_Node_Sites, Site.ToString}, XMLValue(Of SFile).ToFilePath)
|
||||
|
||||
Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString}
|
||||
_Path = New XMLValue(Of SFile)("Path", SFile.GetPath($"{GlobalPath.PathWithSeparator}{Site}"), _XML, n, XMLValue(Of SFile).ToFilePath)
|
||||
_Path.ReplaceByValue("Path", {Site.ToString})
|
||||
_XML.Remove(Site.ToString)
|
||||
|
||||
Temporary = New XMLValue(Of Boolean)
|
||||
Temporary.SetExtended("Temporary", False, _XML, n)
|
||||
Temporary.SetDefault(_Temp)
|
||||
|
||||
DownloadImages = New XMLValue(Of Boolean)
|
||||
DownloadImages.SetExtended("DownloadImages", True, _XML, n)
|
||||
DownloadImages.SetDefault(_Imgs)
|
||||
|
||||
DownloadVideos = New XMLValue(Of Boolean)
|
||||
DownloadVideos.SetExtended("DownloadVideos", True, _XML, n)
|
||||
DownloadVideos.SetDefault(_Vids)
|
||||
|
||||
If Site = Sites.Twitter Then
|
||||
GetUserMediaOnly = New XMLValue(Of Boolean)("GetUserMediaOnly", True, _XML, n)
|
||||
GetUserMediaOnly.ReplaceByValue("TwitterDefaultGetUserMedia", n)
|
||||
Else
|
||||
GetUserMediaOnly = New XMLValue(Of Boolean)
|
||||
End If
|
||||
|
||||
If Site = Sites.Instagram Then
|
||||
InstaHash = New XMLValue(Of String)("InstaHash", String.Empty, _XML, n)
|
||||
InstaHashUpdateRequired = New XMLValue(Of Boolean)("InstaHashUpdateRequired", True, _XML, n)
|
||||
If (InstaHash.IsEmptyString Or InstaHashUpdateRequired) And Responser.Cookies.ListExists Then GatherInstaHash()
|
||||
InstagramDownloadingErrorDate = New XMLValue(Of Date) With {.ToStringFunction = Function(ss, vv) AConvert(Of String)(vv, Nothing)}
|
||||
InstagramDownloadingErrorDate.SetExtended("InstagramDownloadingErrorDate", Now.AddYears(-10), _XML, n)
|
||||
Else
|
||||
InstaHash = New XMLValue(Of String)
|
||||
InstaHashUpdateRequired = New XMLValue(Of Boolean)
|
||||
End If
|
||||
If Site = Sites.Reddit Then
|
||||
SavedPostsUserName = New XMLValue(Of String)("SavedPostsUserName", String.Empty, _XML, n)
|
||||
Else
|
||||
SavedPostsUserName = New XMLValue(Of String)
|
||||
End If
|
||||
End Sub
|
||||
Friend Sub Update()
|
||||
Responser.SaveSettings()
|
||||
End Sub
|
||||
Friend Function GatherInstaHash() As Boolean
|
||||
Try
|
||||
Dim rs As New RegexStructure("=" & Chr(34) & "([^" & Chr(34) & "]+?ConsumerLibCommons[^" & Chr(34) & "]+?.js)" & Chr(34), 1) With {
|
||||
.UseTimeOut = True,
|
||||
.MatchTimeOutSeconds = 10
|
||||
}
|
||||
Dim r$ = Responser.GetResponse("https://instagram.com",, EDP.ThrowException)
|
||||
If Not r.IsEmptyString Then
|
||||
Dim hStr$ = RegexReplace(r, rs)
|
||||
If Not hStr.IsEmptyString Then
|
||||
Do While Left(hStr, 1) = "/" : hStr = Right(hStr, hStr.Length - 1) : Loop
|
||||
hStr = $"https://instagram.com/{hStr}"
|
||||
r = Responser.GetResponse(hStr,, EDP.ThrowException)
|
||||
If Not r.IsEmptyString Then
|
||||
rs = New RegexStructure("generatePaginationActionCreators.+?.profilePosts.byUserId.get.+?queryId:.([\d\w\S]+?)" & Chr(34), 1) With {
|
||||
.UseTimeOut = True,
|
||||
.MatchTimeOutSeconds = 10
|
||||
}
|
||||
Dim h$ = RegexReplace(r, rs)
|
||||
If Not h.IsEmptyString Then
|
||||
InstaHash.Value = h
|
||||
InstaHashUpdateRequired.Value = False
|
||||
Return True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Return False
|
||||
Catch ex As Exception
|
||||
InstaHashUpdateRequired.Value = True
|
||||
InstaHash.Value = String.Empty
|
||||
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[SiteSettings.GaterInstaHash]", False)
|
||||
End Try
|
||||
End Function
|
||||
#Region "IDisposable Support"
|
||||
Private disposedValue As Boolean = False
|
||||
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||
|
||||
@@ -78,6 +78,7 @@ Namespace API.Base
|
||||
#Region "Declarations"
|
||||
Friend MustOverride Property Site As Sites Implements IContentProvider.Site
|
||||
Friend User As UserInfo
|
||||
Friend Property IsSavedPosts As Boolean
|
||||
Protected Const NonExistendUserHelp As String = "404"
|
||||
Protected Const SuspendedUserHelp As String = "403"
|
||||
Friend Overridable Property UserExists As Boolean = True Implements IUserData.Exists
|
||||
@@ -333,13 +334,12 @@ BlockNullPicture:
|
||||
End Get
|
||||
End Property
|
||||
#End Region
|
||||
Protected ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
|
||||
#End Region
|
||||
#Region "LVI"
|
||||
Friend ReadOnly Property LVIKey As String Implements IUserData.LVIKey
|
||||
Get
|
||||
If Not _IsCollection Then
|
||||
Return $"{IIf(Site = Sites.Reddit, "R", "T")}_{Name}"
|
||||
Return $"{Interaction.Switch(Site = Sites.Reddit, "R", Site = Sites.Twitter, "T", Site = Sites.Instagram, "I")}_{Name}"
|
||||
Else
|
||||
Return $"CCCC_{CollectionName}"
|
||||
End If
|
||||
@@ -361,6 +361,7 @@ BlockNullPicture:
|
||||
End Function
|
||||
Friend Overridable ReadOnly Property FitToAddParams As Boolean Implements IUserData.FitToAddParams
|
||||
Get
|
||||
If Settings.SelectedSites.Count = 0 OrElse Settings.SelectedSites.Contains(Site) Then
|
||||
Select Case Settings.ShowingMode.Value
|
||||
Case ShowingModes.Regular : Return Not Temporary And Not Favorite
|
||||
Case ShowingModes.Temporary : Return Temporary
|
||||
@@ -369,6 +370,9 @@ BlockNullPicture:
|
||||
Case ShowingModes.NoLabels : Return Labels.Count = 0
|
||||
Case Else : Return True
|
||||
End Select
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
Friend Function GetLVIGroup(ByVal Destination As ListView) As ListViewGroup Implements IUserData.GetLVIGroup
|
||||
@@ -383,7 +387,7 @@ BlockNullPicture:
|
||||
Return Destination.Groups.Item(LabelsKeeper.NoLabeledName)
|
||||
End If
|
||||
Else
|
||||
Return Destination.Groups.Item(GetLviGroupName(Site, Temporary, Favorite, IsCollection))
|
||||
Return Destination.Groups.Item(GetLviGroupName(Site, Temporary, Favorite, IsCollection, IsChannel))
|
||||
End If
|
||||
Catch ex As Exception
|
||||
Return Destination.Groups.Item(LabelsKeeper.NoLabeledName)
|
||||
@@ -431,6 +435,7 @@ BlockNullPicture:
|
||||
Return New Reddit.UserData(u, _LoadUserInformation)
|
||||
End If
|
||||
Case Sites.Twitter : Return New Twitter.UserData(u, _LoadUserInformation)
|
||||
Case Sites.Instagram : Return New Instagram.UserData(u, _LoadUserInformation)
|
||||
Case Else : Throw New ArgumentOutOfRangeException("Site", $"Site [{u.Site}] information does not recognized by loader")
|
||||
End Select
|
||||
End Function
|
||||
@@ -503,7 +508,7 @@ BlockNullPicture:
|
||||
|
||||
x.Save(MyFile)
|
||||
End Using
|
||||
Settings.UpdateUsersList(User)
|
||||
If Not IsSavedPosts Then Settings.UpdateUsersList(User)
|
||||
Catch ex As Exception
|
||||
LogError(ex, "user information saving error")
|
||||
End Try
|
||||
@@ -584,7 +589,8 @@ BlockNullPicture:
|
||||
Select Case Site
|
||||
Case Sites.Reddit : URL = $"https://www.reddit.com/{IIf(IsChannel, "r", "user")}/{Name}/"
|
||||
Case Sites.Twitter : URL = $"https://twitter.com/{Name}"
|
||||
Case Else : MsgBoxE($"Site [{Site}] opening does not implemented", MsgBoxStyle.Exclamation)
|
||||
Case Sites.Instagram : URL = $"https://www.instagram.com/{Name}/"
|
||||
Case Else : MsgBoxE($"Site [{Site}] opening not implemented", MsgBoxStyle.Exclamation)
|
||||
End Select
|
||||
If Not URL.IsEmptyString Then Process.Start(URL)
|
||||
Catch ex As Exception
|
||||
@@ -604,10 +610,12 @@ BlockNullPicture:
|
||||
UpdateDataFiles()
|
||||
If Not Responser Is Nothing Then Responser.Dispose()
|
||||
Responser = New PersonalUtilities.Tools.WEB.Response
|
||||
Responser.Copy(Settings.Site(Site).Responser)
|
||||
Responser.Copy(Settings(Site).Responser)
|
||||
Dim UpPic As Boolean = Settings.ViewModeIsPicture AndAlso GetPicture(False) Is Nothing
|
||||
Dim sEnvir() As Boolean = {UserExists, UserSuspended}
|
||||
Dim EnvirChanged As Func(Of Boolean) = Function() Not sEnvir(0) = UserExists Or Not sEnvir(1) = UserSuspended
|
||||
UserExists = True
|
||||
UserSuspended = False
|
||||
_DownloadedPicturesSession = 0
|
||||
_DownloadedVideosSession = 0
|
||||
_TempMediaList.Clear()
|
||||
@@ -714,7 +722,7 @@ BlockNullPicture:
|
||||
End Function
|
||||
Friend Function DeleteF(ByVal Instance As IUserData) As Integer
|
||||
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 (User.Merged OrElse f.Delete(SFO.Path, False, False)) Then
|
||||
ImageHandler(Me, False)
|
||||
Settings.UsersList.Remove(User)
|
||||
Settings.UpdateUsersList()
|
||||
@@ -919,7 +927,7 @@ BlockNullPicture:
|
||||
#End Region
|
||||
#Region "IEquatable Support"
|
||||
Friend Overridable Overloads Function Equals(ByVal Other As UserDataBase) As Boolean Implements IEquatable(Of UserDataBase).Equals
|
||||
Return Site = Other.Site And Name = Other.Name
|
||||
Return Site = Other.Site And Name = Other.Name And IsSavedPosts = Other.IsSavedPosts
|
||||
End Function
|
||||
Public Overrides Function Equals(ByVal Obj As Object) As Boolean
|
||||
If TypeOf Obj Is Reddit.Channel Then
|
||||
|
||||
69
SCrawler/API/Imgur/Envir.vb
Normal file
69
SCrawler/API/Imgur/Envir.vb
Normal file
@@ -0,0 +1,69 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports PersonalUtilities.Functions.XML
|
||||
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
||||
Imports System.Net
|
||||
Imports SCrawler.API.Imgur.Declarations
|
||||
Namespace API.Imgur.Declarations
|
||||
Friend Module Imgur_Declarations
|
||||
Friend ReadOnly PostRegex As New RegexStructure("/([\w\d]+?)(|\.[\w]{0,4})\Z", 1)
|
||||
End Module
|
||||
End Namespace
|
||||
Namespace API.Imgur
|
||||
Friend NotInheritable Class Envir
|
||||
Private Sub New()
|
||||
End Sub
|
||||
Friend Shared Function GetGallery(ByVal URL As String) As List(Of String)
|
||||
Try
|
||||
If Not Settings.ImgurClientID.IsEmptyString And Not URL.IsEmptyString Then
|
||||
Dim __url$ = RegexReplace(URL, PostRegex)
|
||||
If Not __url.IsEmptyString Then
|
||||
__url = $"https://api.imgur.com/post/v1/albums/{__url}?client_id={Settings.ImgurClientID.Value}&include=media"
|
||||
Using w As New WebClient
|
||||
Dim r$ = w.DownloadString(__url)
|
||||
If Not r.IsEmptyString Then
|
||||
Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
||||
If j.Contains("media") Then
|
||||
Dim UrlsList As New List(Of String)
|
||||
Dim tmpUrl$
|
||||
For Each m As EContainer In j("media")
|
||||
tmpUrl = m.Value("url")
|
||||
If Not tmpUrl.IsEmptyString Then UrlsList.ListAddValue(tmpUrl, Base.LNC)
|
||||
Next
|
||||
Return UrlsList
|
||||
End If
|
||||
End Using
|
||||
End If
|
||||
End Using
|
||||
End If
|
||||
End If
|
||||
Return Nothing
|
||||
Catch ex As Exception
|
||||
Return ErrorsDescriber.Execute(EDP.ReturnValue + EDP.SendInLog, ex, $"[API.Imgur.Envir.GetGallery({URL})]", Nothing)
|
||||
End Try
|
||||
End Function
|
||||
Friend Shared Function GetImage(ByVal URL As String) As String
|
||||
Try
|
||||
If Not Settings.ImgurClientID.IsEmptyString And Not URL.IsEmptyString Then
|
||||
Dim __url$ = RegexReplace(URL, PostRegex)
|
||||
If Not __url.IsEmptyString Then
|
||||
__url = $"https://api.imgur.com/3/image/{__url}?client_id={Settings.ImgurClientID.Value}&include=media"
|
||||
Using w As New WebClient
|
||||
Dim r$ = w.DownloadString(__url)
|
||||
If Not r.IsEmptyString Then Return JsonDocument.Parse(r).XmlIfNothing.Value({"data"}, "link")
|
||||
End Using
|
||||
End If
|
||||
End If
|
||||
Return String.Empty
|
||||
Catch ex As Exception
|
||||
Return ErrorsDescriber.Execute(EDP.ReturnValue + EDP.SendInLog, ex, $"[API.Imgur.Envir.GetImage({URL})]", String.Empty)
|
||||
End Try
|
||||
End Function
|
||||
End Class
|
||||
End Namespace
|
||||
23
SCrawler/API/Instagram/Declarations.vb
Normal file
23
SCrawler/API/Instagram/Declarations.vb
Normal file
@@ -0,0 +1,23 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Namespace API.Instagram
|
||||
Friend Module Declarations
|
||||
Friend ReadOnly FilesPattern As New RegexStructure("[^\./]+?\.\w+", True, False, 2,,,, String.Empty, EDP.ReturnValue)
|
||||
Friend ReadOnly Property DateProvider As New JsonDate
|
||||
Friend Class JsonDate : Implements ICustomProvider
|
||||
Friend Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
||||
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
||||
Return ADateTime.ParseUnicode(Value)
|
||||
End Function
|
||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
||||
End Function
|
||||
End Class
|
||||
End Module
|
||||
End Namespace
|
||||
241
SCrawler/API/Instagram/UserData.vb
Normal file
241
SCrawler/API/Instagram/UserData.vb
Normal file
@@ -0,0 +1,241 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports PersonalUtilities.Functions.XML
|
||||
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
||||
Imports SCrawler.API.Base
|
||||
Imports System.Threading
|
||||
Imports System.Net
|
||||
Imports UStates = SCrawler.API.Base.UserMedia.States
|
||||
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
||||
Namespace API.Instagram
|
||||
Friend Class UserData : Inherits UserDataBase
|
||||
Friend Overrides Property Site As Sites = Sites.Instagram
|
||||
''' <summary>Video downloader initializer</summary>
|
||||
Private Sub New()
|
||||
End Sub
|
||||
''' <summary>Default initializer</summary>
|
||||
Friend Sub New(ByVal u As UserInfo, Optional ByVal _LoadUserInformation As Boolean = True)
|
||||
User = u
|
||||
If _LoadUserInformation Then LoadUserInformation()
|
||||
End Sub
|
||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||
DownloadData(String.Empty, Token)
|
||||
End Sub
|
||||
Private _InstaHash As String = String.Empty
|
||||
Private Overloads Sub DownloadData(ByVal Cursor As String, ByVal Token As CancellationToken)
|
||||
Dim URL$ = String.Empty
|
||||
Try
|
||||
Dim n As EContainer, nn As EContainer, node As EContainer
|
||||
Dim HasNextPage As Boolean = False
|
||||
Dim EndCursor$ = String.Empty
|
||||
Dim PostID$ = String.Empty, PostDate$ = String.Empty
|
||||
|
||||
'Check environment
|
||||
If Cursor.IsEmptyString And _InstaHash.IsEmptyString Then _InstaHash = Settings(Sites.Instagram).InstaHash
|
||||
If _InstaHash.IsEmptyString Then Throw New ArgumentNullException("InstHash", "Query hash is null")
|
||||
If ID.IsEmptyString Then GetUserId()
|
||||
If ID.IsEmptyString Then Throw New ArgumentException("User ID is not detected", "ID")
|
||||
|
||||
'Create query
|
||||
Dim vars$ = "{""id"":" & ID & ",""first"":12,""after"":""" & Cursor & """}"
|
||||
vars = SymbolsConverter.ASCII.EncodeSymbolsOnly(vars)
|
||||
URL = $"https://www.instagram.com/graphql/query/?query_hash={_InstaHash}&variables={vars}"
|
||||
|
||||
'Get response
|
||||
Dim r$ = Responser.GetResponse(URL,, EDP.ThrowException)
|
||||
Settings(Sites.Instagram).InstagramTooManyRequests(False)
|
||||
ThrowAny(Token)
|
||||
|
||||
'Data
|
||||
If Not r.IsEmptyString Then
|
||||
Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
||||
n = j.ItemF({"data", "user", 0}).XmlIfNothing
|
||||
If n.Count > 0 Then
|
||||
If n.Contains("page_info") Then
|
||||
With n("page_info")
|
||||
HasNextPage = .Value("has_next_page").FromXML(Of Boolean)(False)
|
||||
EndCursor = .Value("end_cursor")
|
||||
End With
|
||||
End If
|
||||
n = n("edges").XmlIfNothing
|
||||
If n.Count > 0 Then
|
||||
For Each nn In n
|
||||
ThrowAny(Token)
|
||||
node = nn(0).XmlIfNothing
|
||||
|
||||
PostID = node.Value("id")
|
||||
If Not PostID.IsEmptyString And _TempPostsList.Contains(PostID) Then Exit Sub
|
||||
_TempPostsList.Add(PostID)
|
||||
PostDate = node.Value("taken_at_timestamp")
|
||||
|
||||
ObtainMedia(node, PostID, PostDate)
|
||||
Next
|
||||
End If
|
||||
Else
|
||||
If j.Value("status") = "ok" AndAlso j({"data", "user"}).XmlIfNothing.Count = 0 AndAlso _TempMediaList.Count = 0 Then
|
||||
Settings(Sites.Instagram).InstaHashUpdateRequired.Value = True
|
||||
UserExists = False
|
||||
Exit Sub
|
||||
End If
|
||||
End If
|
||||
End Using
|
||||
End If
|
||||
If HasNextPage And Not EndCursor.IsEmptyString Then DownloadData(EndCursor, Token)
|
||||
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
||||
Catch dex As ObjectDisposedException When Disposed
|
||||
Catch ex As Exception
|
||||
If Responser.StatusCode = HttpStatusCode.NotFound Then
|
||||
UserExists = False
|
||||
ElseIf Responser.StatusCode = HttpStatusCode.BadRequest Then
|
||||
MyMainLOG = "Instagram credentials have expired"
|
||||
Settings(Sites.Instagram).InstaHashUpdateRequired.Value = True
|
||||
ElseIf Responser.StatusCode = 429 Then
|
||||
Settings(Sites.Instagram).InstagramTooManyRequests(True)
|
||||
Else
|
||||
Settings(Sites.Instagram).InstaHashUpdateRequired.Value = True
|
||||
LogError(ex, $"data downloading error [{URL}]")
|
||||
End If
|
||||
HasError = True
|
||||
Finally
|
||||
_InstaHash = String.Empty
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub ObtainMedia(ByVal node As EContainer, ByVal PostID As String, ByVal PostDate As String)
|
||||
Dim CreateMedia As Action(Of EContainer) =
|
||||
Sub(ByVal e As EContainer)
|
||||
Dim t As UTypes = If(e.Value("is_video").FromXML(Of Boolean)(False), UTypes.Video, UTypes.Picture)
|
||||
Dim tmpValue$
|
||||
If t = UTypes.Picture Then
|
||||
tmpValue = e.Value("display_url")
|
||||
Else
|
||||
tmpValue = e.Value("video_url")
|
||||
End If
|
||||
If Not tmpValue.IsEmptyString Then _TempMediaList.ListAddValue(MediaFromData(t, tmpValue, PostID, PostDate), LNC)
|
||||
End Sub
|
||||
If node.Contains({"edge_sidecar_to_children", "edges"}) Then
|
||||
For Each edge As EContainer In node({"edge_sidecar_to_children", "edges"}) : CreateMedia(edge("node").XmlIfNothing) : Next
|
||||
Else
|
||||
CreateMedia(node)
|
||||
End If
|
||||
End Sub
|
||||
Private Sub GetUserId()
|
||||
Try
|
||||
Dim r$ = Responser.GetResponse($"https://www.instagram.com/{Name}/?__a=1",, EDP.ThrowException)
|
||||
If Not r.IsEmptyString Then
|
||||
Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
||||
ID = j({"graphql", "user"}, "id").XmlIfNothingValue
|
||||
End Using
|
||||
End If
|
||||
Catch ex As Exception
|
||||
If Responser.StatusCode = HttpStatusCode.NotFound Or Responser.StatusCode = HttpStatusCode.BadRequest Then
|
||||
Throw ex
|
||||
Else
|
||||
LogError(ex, "get instagram user id")
|
||||
End If
|
||||
End Try
|
||||
End Sub
|
||||
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
||||
End Sub
|
||||
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
|
||||
Try
|
||||
Dim i%
|
||||
Dim dCount% = 0, dTotal% = 0
|
||||
ThrowAny(Token)
|
||||
If _ContentNew.Count > 0 Then
|
||||
_ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString)
|
||||
If _ContentNew.Count > 0 Then
|
||||
MyFile.Exists(SFO.Path)
|
||||
Dim MyDir$ = MyFile.CutPath.PathNoSeparator
|
||||
Dim vsf As Boolean = SeparateVideoFolderF
|
||||
Dim f As SFile
|
||||
Dim v As UserMedia
|
||||
Using w As New WebClient
|
||||
If vsf Then SFileShares.SFileExists($"{MyDir}\Video\", SFO.Path)
|
||||
MainProgress.TotalCount += _ContentNew.Count
|
||||
For i = 0 To _ContentNew.Count - 1
|
||||
ThrowAny(Token)
|
||||
v = _ContentNew(i)
|
||||
v.State = UStates.Tried
|
||||
If v.File.IsEmptyString Then
|
||||
f = v.URL
|
||||
Else
|
||||
f = v.File
|
||||
End If
|
||||
f.Separator = "\"
|
||||
f.Path = MyDir
|
||||
|
||||
If v.URL_BASE.IsEmptyString Then v.URL_BASE = v.URL
|
||||
|
||||
If Not v.File.IsEmptyString AndAlso Not v.URL_BASE.IsEmptyString Then
|
||||
Try
|
||||
If v.Type = UTypes.Video And vsf Then f.Path = $"{f.PathWithSeparator}Video"
|
||||
w.DownloadFile(v.URL_BASE, f.ToString)
|
||||
Select Case v.Type
|
||||
Case UTypes.Video : DownloadedVideos += 1 : _CountVideo += 1
|
||||
Case UTypes.Picture : DownloadedPictures += 1 : _CountPictures += 1
|
||||
End Select
|
||||
v.File = ChangeFileNameByProvider(f, v)
|
||||
v.State = UStates.Downloaded
|
||||
Catch wex As Exception
|
||||
ErrorDownloading(f, v.URL_BASE)
|
||||
End Try
|
||||
Else
|
||||
v.State = UStates.Skipped
|
||||
End If
|
||||
_ContentNew(i) = v
|
||||
If DownloadTopCount.HasValue AndAlso dCount >= DownloadTopCount.Value Then
|
||||
MainProgress.Perform(_ContentNew.Count - dTotal)
|
||||
Exit Sub
|
||||
Else
|
||||
dTotal += 1
|
||||
MainProgress.Perform()
|
||||
End If
|
||||
Next
|
||||
End Using
|
||||
End If
|
||||
End If
|
||||
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
||||
Catch dex As ObjectDisposedException When Disposed
|
||||
Catch ex As Exception
|
||||
LogError(ex, "content downloading error")
|
||||
HasError = True
|
||||
End Try
|
||||
End Sub
|
||||
Private Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String) As UserMedia
|
||||
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
||||
Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID}}
|
||||
If Not m.URL.IsEmptyString Then m.File = CStr(RegexReplace(m.URL, FilesPattern))
|
||||
If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, Declarations.DateProvider, Nothing) Else m.Post.Date = Nothing
|
||||
Return m
|
||||
End Function
|
||||
Friend Shared Function GetVideoInfo(ByVal URL As String) As IEnumerable(Of UserMedia)
|
||||
Try
|
||||
If Not URL.IsEmptyString AndAlso URL.Contains("instagram.com") Then
|
||||
Do While Right(URL, 1) = "/" : URL = Left(URL, URL.Length - 1) : Loop
|
||||
URL = $"{URL}/?__a=1"
|
||||
Using t As New UserData
|
||||
t.Responser = New PersonalUtilities.Tools.WEB.Response
|
||||
t.Responser.Copy(Settings(Sites.Instagram).Responser)
|
||||
Dim r$ = t.Responser.GetResponse(URL,, EDP.ThrowException)
|
||||
If Not r.IsEmptyString Then
|
||||
Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
||||
Dim node As EContainer = j({"graphql", "shortcode_media"}).XmlIfNothing
|
||||
If node.Count > 0 Then t.ObtainMedia(node, String.Empty, String.Empty)
|
||||
End Using
|
||||
End If
|
||||
If t._TempMediaList.Count > 0 Then Return ListAddList(Nothing, t._TempMediaList)
|
||||
End Using
|
||||
End If
|
||||
Return Nothing
|
||||
Catch ex As Exception
|
||||
Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Instagram standalone downloader: fetch media error")
|
||||
End Try
|
||||
End Function
|
||||
End Class
|
||||
End Namespace
|
||||
@@ -24,7 +24,7 @@ Namespace API.Reddit
|
||||
Return ADateTime.ParseUnicodeJS(Value, NothingArg, e)
|
||||
End Function
|
||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||
Throw New NotImplementedException("GetFormat does not available in this context")
|
||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
||||
End Function
|
||||
End Class
|
||||
Friend Class JsonDateChannel : Implements ICustomProvider
|
||||
@@ -34,7 +34,7 @@ Namespace API.Reddit
|
||||
Return ADateTime.ParseUnicode(AConvert(Of Integer)(Value, EUR_PROVIDER, Value), NothingArg, e)
|
||||
End Function
|
||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||
Throw New NotImplementedException("GetFormat does not available in this context")
|
||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
||||
End Function
|
||||
End Class
|
||||
End Module
|
||||
|
||||
39
SCrawler/API/Reddit/ProfileSaved.vb
Normal file
39
SCrawler/API/Reddit/ProfileSaved.vb
Normal file
@@ -0,0 +1,39 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports SCrawler.API.Base
|
||||
Namespace API.Reddit
|
||||
Friend NotInheritable Class ProfileSaved
|
||||
Private Sub New()
|
||||
End Sub
|
||||
Friend Shared Sub Download(ByRef Toolbar As StatusStrip, ByRef PR As ToolStripProgressBar)
|
||||
Try
|
||||
Dim Bar = New PersonalUtilities.Forms.Toolbars.MyProgress(Toolbar, PR, Nothing)
|
||||
Dim u As New UserInfo(Settings(Sites.Reddit).SavedPostsUserName.Value, Sites.Reddit) With {
|
||||
.IsChannel = True,
|
||||
.SpecialPath = $"{Settings(Sites.Reddit).Path.PathWithSeparator}\!Saved\"
|
||||
}
|
||||
u.UpdateUserFile()
|
||||
Using user As IUserData = UserDataBase.GetInstance(u)
|
||||
DirectCast(user.Self, UserDataBase).IsSavedPosts = True
|
||||
Bar.Enabled = True
|
||||
DirectCast(user.Self, UserData).Progress = Bar
|
||||
If Not user.FileExists Then user.UpdateUserInformation()
|
||||
user.DownloadData(Nothing)
|
||||
Dim m As New MMessage("Reddit saved posts download complete", "Saved posts downloading", {"OK", "Open folder"})
|
||||
m.Text.StringAppendLine($"Downloaded images: {user.DownloadedPictures}")
|
||||
m.Text.StringAppendLine($"Downloaded videos: {user.DownloadedVideos}")
|
||||
If MsgBoxE(m) = 1 Then u.File.CutPath.Open(SFO.Path)
|
||||
Bar.Enabled = False
|
||||
End Using
|
||||
Catch ex As Exception
|
||||
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[API.Reddit.ProfileSaved.Download]")
|
||||
End Try
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
@@ -79,7 +79,7 @@ Namespace API.Reddit
|
||||
If IsChannel AndAlso Not ChannelInfo.IsRegularChannel Then
|
||||
If Not Responser Is Nothing Then Responser.Dispose()
|
||||
Responser = New PersonalUtilities.Tools.WEB.Response
|
||||
Responser.Copy(Settings.Site(Sites.Reddit).Responser)
|
||||
Responser.Copy(Settings(Sites.Reddit).Responser)
|
||||
ChannelPostsNames.ListAddList(ChannelInfo.PostsAll.Select(Function(p) p.ID), LNC)
|
||||
If SkipExistsUsers Then _ExistsUsersNames.ListAddList(Settings.UsersList.Select(Function(p) p.Name), LNC)
|
||||
DownloadDataF(Token)
|
||||
@@ -227,7 +227,12 @@ Namespace API.Reddit
|
||||
Dim eCount As Predicate(Of EContainer) = Function(e) e.Count > 0
|
||||
Dim lDate As Date?
|
||||
|
||||
If IsSavedPosts Then
|
||||
URL = $"https://www.reddit.com/user/{Name}/saved.json?after={POST}"
|
||||
Else
|
||||
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"
|
||||
End If
|
||||
|
||||
ThrowAny(Token)
|
||||
Dim r$ = GetSiteResponse(URL)
|
||||
If Not r.IsEmptyString Then
|
||||
@@ -396,15 +401,15 @@ Namespace API.Reddit
|
||||
LogError(ex, "video reparsing error")
|
||||
End Try
|
||||
End Sub
|
||||
Friend Shared Function GetVideoInfo(ByVal URL As String) As UserMedia
|
||||
Friend Shared Function GetVideoInfo(ByVal URL As String) As IEnumerable(Of UserMedia)
|
||||
Try
|
||||
If Not URL.IsEmptyString AndAlso URL.Contains("redgifs") Then
|
||||
Using r As New UserData
|
||||
r._TempMediaList.Add(MediaFromData(UTypes.VideoPre, URL, String.Empty, String.Empty,, False))
|
||||
r.Responser = New PersonalUtilities.Tools.WEB.Response
|
||||
r.Responser.Copy(Settings.Site(Sites.Reddit).Responser)
|
||||
r.Responser.Copy(Settings(Sites.Reddit).Responser)
|
||||
r.ReparseVideo(Nothing)
|
||||
If r._TempMediaList.ListExists Then Return r._TempMediaList(0)
|
||||
If r._TempMediaList.ListExists Then Return {r._TempMediaList(0)}
|
||||
End Using
|
||||
End If
|
||||
Return Nothing
|
||||
@@ -460,13 +465,23 @@ Namespace API.Reddit
|
||||
Dim v As UserMedia
|
||||
Dim cached As Boolean = IsChannel And SaveToCache
|
||||
Dim vsf As Boolean = SeparateVideoFolderF
|
||||
Dim ImgFormat As Imaging.ImageFormat
|
||||
Dim UseMD5 As Boolean = Not IsChannel Or (Not cached And Settings.ChannelsRegularCheckMD5)
|
||||
Dim bDP As New ErrorsDescriber(EDP.None)
|
||||
Dim ImgurUrls As New List(Of String)
|
||||
Dim TryBytes As Func(Of String, Imaging.ImageFormat, String) =
|
||||
Function(ByVal __URL As String, ByVal ImgFormat As Imaging.ImageFormat) As String
|
||||
Try
|
||||
Return ByteArrayToString(GetMD5(SFile.GetBytesFromNet(__URL, bDP), ImgFormat))
|
||||
Catch hash_ex As Exception
|
||||
Return String.Empty
|
||||
End Try
|
||||
End Function
|
||||
Dim MD5BS As Func(Of String, UTypes,
|
||||
SFile, Boolean, String) = Function(ByVal __URL As String, ByVal __MT As UTypes,
|
||||
ByVal __File As SFile, ByVal __IsBase As Boolean) As String
|
||||
Try
|
||||
ImgurUrls.Clear()
|
||||
Dim ImgFormat As Imaging.ImageFormat
|
||||
If __MT = UTypes.GIF Then
|
||||
ImgFormat = Imaging.ImageFormat.Gif
|
||||
ElseIf __IsBase Then
|
||||
@@ -474,7 +489,27 @@ Namespace API.Reddit
|
||||
Else
|
||||
ImgFormat = GetImageFormat(__File)
|
||||
End If
|
||||
Return ByteArrayToString(GetMD5(SFile.GetBytesFromNet(__URL, bDP), ImgFormat))
|
||||
|
||||
Dim tmpBytes$ = TryBytes(__URL, ImgFormat)
|
||||
If tmpBytes.IsEmptyString And Not __MT = UTypes.GIF Then
|
||||
ImgFormat = Imaging.ImageFormat.Png
|
||||
tmpBytes = TryBytes(__URL, ImgFormat)
|
||||
If Not tmpBytes.IsEmptyString Then Return tmpBytes
|
||||
Else
|
||||
Return tmpBytes
|
||||
End If
|
||||
|
||||
If tmpBytes.IsEmptyString And Not __MT = UTypes.GIF And __URL.Contains("imgur.com") Then
|
||||
For c% = 0 To 1
|
||||
If c = 0 Then
|
||||
ImgurUrls.ListAddList(Imgur.Envir.GetGallery(__URL))
|
||||
Else
|
||||
ImgurUrls.ListAddValue(Imgur.Envir.GetImage(__URL))
|
||||
End If
|
||||
If ImgurUrls.Count > 0 Then Exit For
|
||||
Next
|
||||
End If
|
||||
Return tmpBytes
|
||||
Catch hash_ex As Exception
|
||||
Return String.Empty
|
||||
End Try
|
||||
@@ -496,21 +531,35 @@ Namespace API.Reddit
|
||||
m = String.Empty
|
||||
If (v.Type = UTypes.Picture Or v.Type = UTypes.GIF) And UseMD5 Then
|
||||
m = MD5BS(v.URL, v.Type, f, False)
|
||||
If m.IsEmptyString AndAlso Not v.URL_BASE.IsEmptyString AndAlso Not v.URL_BASE = v.URL Then
|
||||
If ImgurUrls.Count = 0 AndAlso m.IsEmptyString AndAlso Not v.URL_BASE.IsEmptyString AndAlso Not v.URL_BASE = v.URL Then
|
||||
m = MD5BS(v.URL_BASE, v.Type, f, True)
|
||||
If Not m.IsEmptyString Then v.URL = v.URL_BASE
|
||||
End If
|
||||
End If
|
||||
|
||||
If (Not m.IsEmptyString AndAlso Not HashList.Contains(m)) Or Not (v.Type = UTypes.Picture Or
|
||||
v.Type = UTypes.GIF) Or Not UseMD5 Then
|
||||
If Not cached Then HashList.Add(m)
|
||||
v.Type = UTypes.GIF) Or Not UseMD5 Or ImgurUrls.Count > 0 Then
|
||||
Do
|
||||
If Not cached And Not m.IsEmptyString Then HashList.Add(m)
|
||||
v.MD5 = m
|
||||
If ImgurUrls.Count > 0 Then
|
||||
If ImgurUrls(0).IsEmptyString Then ImgurUrls.RemoveAt(0) : Continue Do
|
||||
f = UrlToFile(ImgurUrls(0))
|
||||
If f.Extension.IsEmptyString Then f.Extension = "gif"
|
||||
If f.Name.IsEmptyString Then
|
||||
f.Path = MyDir
|
||||
f.Name = $"ImgurImg_{v.File.Name}"
|
||||
f = SFile.Indexed_IndexFile(f,,, EDP.ReturnValue)
|
||||
End If
|
||||
End If
|
||||
f.Path = MyDir
|
||||
Try
|
||||
If (v.Type = UTypes.Video Or v.Type = UTypes.m3u8) And vsf Then f.Path = $"{f.PathWithSeparator}Video"
|
||||
If (v.Type = UTypes.Video Or v.Type = UTypes.m3u8 Or (ImgurUrls.Count > 0 AndAlso f.Extension = "mp4")) And
|
||||
vsf Then f.Path = $"{f.PathWithSeparator}Video"
|
||||
If v.Type = UTypes.m3u8 Then
|
||||
f = M3U8.Download(v.URL, f)
|
||||
ElseIf ImgurUrls.Count > 0 Then
|
||||
w.DownloadFile(ImgurUrls(0), f.ToString)
|
||||
Else
|
||||
w.DownloadFile(v.URL, f.ToString)
|
||||
End If
|
||||
@@ -531,6 +580,8 @@ Namespace API.Reddit
|
||||
Catch wex As Exception
|
||||
If Not IsChannel Then ErrorDownloading(f, v.URL)
|
||||
End Try
|
||||
If ImgurUrls.Count > 0 Then ImgurUrls.RemoveAt(0)
|
||||
Loop While ImgurUrls.Count > 0
|
||||
Else
|
||||
v.State = UStates.Skipped
|
||||
End If
|
||||
|
||||
@@ -130,18 +130,18 @@ Namespace API.Twitter
|
||||
End If
|
||||
End Try
|
||||
End Sub
|
||||
Friend Shared Function GetVideoInfo(ByVal URL As String) As UserMedia
|
||||
Friend Shared Function GetVideoInfo(ByVal URL As String) As IEnumerable(Of UserMedia)
|
||||
Try
|
||||
If URL.Contains("twitter") Then
|
||||
Dim PostID$ = RegexReplace(URL, New RegexStructure("(?<=/)\d+", True, False,,,,, String.Empty))
|
||||
If Not PostID.IsEmptyString Then
|
||||
Dim r$ = DirectCast(Settings.Site(Sites.Twitter).Responser.Copy(), Response).
|
||||
Dim r$ = DirectCast(Settings(Sites.Twitter).Responser.Copy(), Response).
|
||||
GetResponse($"https://api.twitter.com/1.1/statuses/show.json?id={PostID}",, EDP.ReturnValue)
|
||||
If Not r.IsEmptyString Then
|
||||
Using j As EContainer = JsonDocument.Parse(r)
|
||||
If j.ListExists Then
|
||||
Dim u$ = GetVideoNodeURL(j)
|
||||
If Not u.IsEmptyString Then Return MediaFromData(u, PostID, String.Empty)
|
||||
If Not u.IsEmptyString Then Return {MediaFromData(u, PostID, String.Empty)}
|
||||
End If
|
||||
End Using
|
||||
End If
|
||||
@@ -224,12 +224,13 @@ Namespace API.Twitter
|
||||
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
|
||||
Try
|
||||
Dim i%
|
||||
Dim dCount% = 0, dTotal% = 0
|
||||
ThrowAny(Token)
|
||||
If _ContentNew.Count > 0 Then
|
||||
_ContentNew.RemoveAll(Function(c) c.URL.IsEmptyString)
|
||||
If _ContentNew.Count > 0 Then
|
||||
MyFile.Exists(SFO.Path)
|
||||
Dim MyDir$ = MyFile.CutPath.Path
|
||||
Dim MyDir$ = MyFile.CutPath.PathNoSeparator
|
||||
Dim vsf As Boolean = SeparateVideoFolderF
|
||||
Dim f As SFile
|
||||
Dim v As UserMedia
|
||||
@@ -260,6 +261,7 @@ Namespace API.Twitter
|
||||
End Select
|
||||
v.File = ChangeFileNameByProvider(f, v)
|
||||
v.State = UStates.Downloaded
|
||||
dCount += 1
|
||||
Catch wex As Exception
|
||||
ErrorDownloading(f, v.URL_BASE)
|
||||
End Try
|
||||
@@ -267,7 +269,13 @@ Namespace API.Twitter
|
||||
v.State = UStates.Skipped
|
||||
End If
|
||||
_ContentNew(i) = v
|
||||
If DownloadTopCount.HasValue AndAlso dCount >= DownloadTopCount.Value Then
|
||||
MainProgress.Perform(_ContentNew.Count - dTotal)
|
||||
Exit Sub
|
||||
Else
|
||||
dTotal += 1
|
||||
MainProgress.Perform()
|
||||
End If
|
||||
Next
|
||||
End Using
|
||||
End If
|
||||
|
||||
@@ -407,7 +407,7 @@ Namespace API
|
||||
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"},
|
||||
MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
f = Collections(0).File.CutPath(2).PathWithSeparator
|
||||
f = Collections(0).File.CutPath(IIf(DataMerging, 1, 2)).PathWithSeparator
|
||||
Settings.Users.Remove(Me)
|
||||
Collections.ForEach(Sub(c) c.Delete())
|
||||
Downloader.UserRemove(Me)
|
||||
|
||||
BIN
SCrawler/Content/Icons/InstagramIcon.ico
Normal file
BIN
SCrawler/Content/Icons/InstagramIcon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
BIN
SCrawler/Content/Icons/SettingsIcon.ico
Normal file
BIN
SCrawler/Content/Icons/SettingsIcon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 147 KiB |
BIN
SCrawler/Content/Pictures/BookmarkBlack_16.png
Normal file
BIN
SCrawler/Content/Pictures/BookmarkBlack_16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
BIN
SCrawler/Content/Pictures/InstagramPic76.png
Normal file
BIN
SCrawler/Content/Pictures/InstagramPic76.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
BIN
SCrawler/Content/Pictures/SettingsPic_16.bmp
Normal file
BIN
SCrawler/Content/Pictures/SettingsPic_16.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 824 B |
BIN
SCrawler/Content/Pictures/TwitterPic400.png
Normal file
BIN
SCrawler/Content/Pictures/TwitterPic400.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
158
SCrawler/Editors/GlobalSettingsForm.Designer.vb
generated
158
SCrawler/Editors/GlobalSettingsForm.Designer.vb
generated
@@ -23,6 +23,7 @@
|
||||
Dim ActionButton3 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 ActionButton5 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim ActionButton6 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim TT_MAIN As System.Windows.Forms.ToolTip
|
||||
Dim TP_FILE_NAME As System.Windows.Forms.TableLayoutPanel
|
||||
Dim TP_FILE_PATTERNS As System.Windows.Forms.TableLayoutPanel
|
||||
@@ -38,6 +39,7 @@
|
||||
Dim TP_REDDIT As System.Windows.Forms.TableLayoutPanel
|
||||
Dim TAB_DEFS_TWITTER As System.Windows.Forms.TabPage
|
||||
Dim TP_TWITTER As System.Windows.Forms.TableLayoutPanel
|
||||
Dim TP_INSTAGRAM As System.Windows.Forms.TableLayoutPanel
|
||||
Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
@@ -45,11 +47,13 @@
|
||||
Me.TXT_MAX_JOBS_USERS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_MAX_JOBS_CHANNELS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.CH_CHECK_VER_START = New System.Windows.Forms.CheckBox()
|
||||
Me.TXT_IMGUR_CLIENT_ID = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.CH_COPY_CHANNEL_USER_IMAGE = New System.Windows.Forms.CheckBox()
|
||||
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.CH_SEPARATE_VIDEO_FOLDER = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_CHANNELS_USERS_TEMP = 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()
|
||||
@@ -60,7 +64,6 @@
|
||||
Me.TXT_CHANNELS_ROWS = 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_CHANNELS_USERS_TEMP = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_REDDIT_TEMP = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_REDDIT_DOWN_IMG = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_REDDIT_DOWN_VID = New System.Windows.Forms.CheckBox()
|
||||
@@ -68,7 +71,12 @@
|
||||
Me.CH_TWITTER_DOWN_IMG = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_TWITTER_DOWN_VID = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_TWITTER_USER_MEDIA = New System.Windows.Forms.CheckBox()
|
||||
Me.TAB_DEFS_INSTAGRAM = New System.Windows.Forms.TabPage()
|
||||
Me.CH_INSTA_TEMP = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_INSTA_DOWN_IMG = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_INSTA_DOWN_VID = New System.Windows.Forms.CheckBox()
|
||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
TP_BASIS = New System.Windows.Forms.TableLayoutPanel()
|
||||
TP_IMAGES = New System.Windows.Forms.TableLayoutPanel()
|
||||
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
|
||||
@@ -86,6 +94,7 @@
|
||||
TP_REDDIT = New System.Windows.Forms.TableLayoutPanel()
|
||||
TAB_DEFS_TWITTER = New System.Windows.Forms.TabPage()
|
||||
TP_TWITTER = New System.Windows.Forms.TableLayoutPanel()
|
||||
TP_INSTAGRAM = New System.Windows.Forms.TableLayoutPanel()
|
||||
TP_BASIS.SuspendLayout()
|
||||
CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
TP_IMAGES.SuspendLayout()
|
||||
@@ -94,6 +103,7 @@
|
||||
CType(Me.TXT_COLLECTIONS_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.TXT_MAX_JOBS_USERS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.TXT_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
TP_FILE_NAME.SuspendLayout()
|
||||
TP_FILE_PATTERNS.SuspendLayout()
|
||||
TP_CHANNELS_IMGS.SuspendLayout()
|
||||
@@ -110,8 +120,11 @@
|
||||
TP_REDDIT.SuspendLayout()
|
||||
TAB_DEFS_TWITTER.SuspendLayout()
|
||||
TP_TWITTER.SuspendLayout()
|
||||
Me.TAB_DEFS_INSTAGRAM.SuspendLayout()
|
||||
TP_INSTAGRAM.SuspendLayout()
|
||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||
Me.CONTAINER_MAIN.SuspendLayout()
|
||||
CType(Me.TXT_REDDIT_SAVED_POSTS_USER, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'TP_BASIS
|
||||
@@ -125,23 +138,19 @@
|
||||
TP_BASIS.Controls.Add(Me.TXT_MAX_JOBS_USERS, 0, 3)
|
||||
TP_BASIS.Controls.Add(Me.TXT_MAX_JOBS_CHANNELS, 0, 4)
|
||||
TP_BASIS.Controls.Add(Me.CH_CHECK_VER_START, 0, 5)
|
||||
TP_BASIS.Controls.Add(Me.TXT_IMGUR_CLIENT_ID, 0, 6)
|
||||
TP_BASIS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_BASIS.Location = New System.Drawing.Point(3, 3)
|
||||
TP_BASIS.Name = "TP_BASIS"
|
||||
TP_BASIS.RowCount = 7
|
||||
TP_BASIS.RowCount = 8
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_BASIS.Size = New System.Drawing.Size(570, 352)
|
||||
TP_BASIS.TabIndex = 0
|
||||
'
|
||||
@@ -279,6 +288,19 @@
|
||||
Me.CH_CHECK_VER_START.Text = "Check new version at start"
|
||||
Me.CH_CHECK_VER_START.UseVisualStyleBackColor = True
|
||||
'
|
||||
'TXT_IMGUR_CLIENT_ID
|
||||
'
|
||||
ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton6.Index = 0
|
||||
ActionButton6.Name = "BTT_CLEAR"
|
||||
Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton6)
|
||||
Me.TXT_IMGUR_CLIENT_ID.CaptionText = "Imgur Client ID"
|
||||
Me.TXT_IMGUR_CLIENT_ID.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_IMGUR_CLIENT_ID.Location = New System.Drawing.Point(4, 175)
|
||||
Me.TXT_IMGUR_CLIENT_ID.Name = "TXT_IMGUR_CLIENT_ID"
|
||||
Me.TXT_IMGUR_CLIENT_ID.Size = New System.Drawing.Size(562, 22)
|
||||
Me.TXT_IMGUR_CLIENT_ID.TabIndex = 6
|
||||
'
|
||||
'CH_COPY_CHANNEL_USER_IMAGE
|
||||
'
|
||||
Me.CH_COPY_CHANNEL_USER_IMAGE.AutoSize = True
|
||||
@@ -340,6 +362,18 @@
|
||||
TT_MAIN.SetToolTip(Me.CH_SEPARATE_VIDEO_FOLDER, resources.GetString("CH_SEPARATE_VIDEO_FOLDER.ToolTip"))
|
||||
Me.CH_SEPARATE_VIDEO_FOLDER.UseVisualStyleBackColor = True
|
||||
'
|
||||
'CH_CHANNELS_USERS_TEMP
|
||||
'
|
||||
Me.CH_CHANNELS_USERS_TEMP.AutoSize = True
|
||||
Me.CH_CHANNELS_USERS_TEMP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CH_CHANNELS_USERS_TEMP.Location = New System.Drawing.Point(4, 88)
|
||||
Me.CH_CHANNELS_USERS_TEMP.Name = "CH_CHANNELS_USERS_TEMP"
|
||||
Me.CH_CHANNELS_USERS_TEMP.Size = New System.Drawing.Size(562, 19)
|
||||
Me.CH_CHANNELS_USERS_TEMP.TabIndex = 3
|
||||
Me.CH_CHANNELS_USERS_TEMP.Text = "Create temporary users"
|
||||
TT_MAIN.SetToolTip(Me.CH_CHANNELS_USERS_TEMP, "Users added from channels will be created with this parameter")
|
||||
Me.CH_CHANNELS_USERS_TEMP.UseVisualStyleBackColor = True
|
||||
'
|
||||
'TP_FILE_NAME
|
||||
'
|
||||
TP_FILE_NAME.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||
@@ -527,6 +561,7 @@
|
||||
TAB_MAIN.Controls.Add(TAB_DEFS_CHANNELS)
|
||||
TAB_MAIN.Controls.Add(TAB_DEFS_REDDIT)
|
||||
TAB_MAIN.Controls.Add(TAB_DEFS_TWITTER)
|
||||
TAB_MAIN.Controls.Add(Me.TAB_DEFS_INSTAGRAM)
|
||||
TAB_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TAB_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
TAB_MAIN.Name = "TAB_MAIN"
|
||||
@@ -630,18 +665,6 @@
|
||||
Me.TXT_CHANNEL_USER_POST_LIMIT.Text = "1"
|
||||
Me.TXT_CHANNEL_USER_POST_LIMIT.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
|
||||
'
|
||||
'CH_CHANNELS_USERS_TEMP
|
||||
'
|
||||
Me.CH_CHANNELS_USERS_TEMP.AutoSize = True
|
||||
Me.CH_CHANNELS_USERS_TEMP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CH_CHANNELS_USERS_TEMP.Location = New System.Drawing.Point(4, 88)
|
||||
Me.CH_CHANNELS_USERS_TEMP.Name = "CH_CHANNELS_USERS_TEMP"
|
||||
Me.CH_CHANNELS_USERS_TEMP.Size = New System.Drawing.Size(562, 19)
|
||||
Me.CH_CHANNELS_USERS_TEMP.TabIndex = 3
|
||||
Me.CH_CHANNELS_USERS_TEMP.Text = "Create temporary users"
|
||||
TT_MAIN.SetToolTip(Me.CH_CHANNELS_USERS_TEMP, "Users added from channels will be created with this parameter")
|
||||
Me.CH_CHANNELS_USERS_TEMP.UseVisualStyleBackColor = True
|
||||
'
|
||||
'TAB_DEFS_REDDIT
|
||||
'
|
||||
TAB_DEFS_REDDIT.Controls.Add(TP_REDDIT)
|
||||
@@ -657,18 +680,19 @@
|
||||
TP_REDDIT.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||
TP_REDDIT.ColumnCount = 1
|
||||
TP_REDDIT.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_REDDIT.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_REDDIT.Controls.Add(Me.CH_REDDIT_TEMP, 0, 0)
|
||||
TP_REDDIT.Controls.Add(Me.CH_REDDIT_DOWN_IMG, 0, 1)
|
||||
TP_REDDIT.Controls.Add(Me.CH_REDDIT_DOWN_VID, 0, 2)
|
||||
TP_REDDIT.Controls.Add(Me.TXT_REDDIT_SAVED_POSTS_USER, 0, 3)
|
||||
TP_REDDIT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_REDDIT.Location = New System.Drawing.Point(3, 3)
|
||||
TP_REDDIT.Name = "TP_REDDIT"
|
||||
TP_REDDIT.RowCount = 4
|
||||
TP_REDDIT.RowCount = 5
|
||||
TP_REDDIT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_REDDIT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_REDDIT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_REDDIT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_REDDIT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||
TP_REDDIT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_REDDIT.Size = New System.Drawing.Size(570, 352)
|
||||
TP_REDDIT.TabIndex = 0
|
||||
'
|
||||
@@ -787,6 +811,72 @@
|
||||
Me.CH_TWITTER_USER_MEDIA.Text = "Get user media only"
|
||||
Me.CH_TWITTER_USER_MEDIA.UseVisualStyleBackColor = True
|
||||
'
|
||||
'TAB_DEFS_INSTAGRAM
|
||||
'
|
||||
Me.TAB_DEFS_INSTAGRAM.BackColor = System.Drawing.SystemColors.Control
|
||||
Me.TAB_DEFS_INSTAGRAM.Controls.Add(TP_INSTAGRAM)
|
||||
Me.TAB_DEFS_INSTAGRAM.Location = New System.Drawing.Point(4, 22)
|
||||
Me.TAB_DEFS_INSTAGRAM.Name = "TAB_DEFS_INSTAGRAM"
|
||||
Me.TAB_DEFS_INSTAGRAM.Size = New System.Drawing.Size(576, 358)
|
||||
Me.TAB_DEFS_INSTAGRAM.TabIndex = 5
|
||||
Me.TAB_DEFS_INSTAGRAM.Text = "Instagram"
|
||||
'
|
||||
'TP_INSTAGRAM
|
||||
'
|
||||
TP_INSTAGRAM.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||
TP_INSTAGRAM.ColumnCount = 1
|
||||
TP_INSTAGRAM.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_INSTAGRAM.Controls.Add(Me.CH_INSTA_TEMP, 0, 0)
|
||||
TP_INSTAGRAM.Controls.Add(Me.CH_INSTA_DOWN_IMG, 0, 1)
|
||||
TP_INSTAGRAM.Controls.Add(Me.CH_INSTA_DOWN_VID, 0, 2)
|
||||
TP_INSTAGRAM.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_INSTAGRAM.Location = New System.Drawing.Point(0, 0)
|
||||
TP_INSTAGRAM.Name = "TP_INSTAGRAM"
|
||||
TP_INSTAGRAM.RowCount = 4
|
||||
TP_INSTAGRAM.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_INSTAGRAM.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_INSTAGRAM.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||
TP_INSTAGRAM.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_INSTAGRAM.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_INSTAGRAM.Size = New System.Drawing.Size(576, 358)
|
||||
TP_INSTAGRAM.TabIndex = 0
|
||||
'
|
||||
'CH_INSTA_TEMP
|
||||
'
|
||||
Me.CH_INSTA_TEMP.AutoSize = True
|
||||
Me.CH_INSTA_TEMP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CH_INSTA_TEMP.Location = New System.Drawing.Point(4, 4)
|
||||
Me.CH_INSTA_TEMP.Name = "CH_INSTA_TEMP"
|
||||
Me.CH_INSTA_TEMP.Size = New System.Drawing.Size(568, 19)
|
||||
Me.CH_INSTA_TEMP.TabIndex = 0
|
||||
Me.CH_INSTA_TEMP.Text = "Temporary"
|
||||
Me.CH_INSTA_TEMP.ThreeState = True
|
||||
Me.CH_INSTA_TEMP.UseVisualStyleBackColor = True
|
||||
'
|
||||
'CH_INSTA_DOWN_IMG
|
||||
'
|
||||
Me.CH_INSTA_DOWN_IMG.AutoSize = True
|
||||
Me.CH_INSTA_DOWN_IMG.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CH_INSTA_DOWN_IMG.Location = New System.Drawing.Point(4, 30)
|
||||
Me.CH_INSTA_DOWN_IMG.Name = "CH_INSTA_DOWN_IMG"
|
||||
Me.CH_INSTA_DOWN_IMG.Size = New System.Drawing.Size(568, 19)
|
||||
Me.CH_INSTA_DOWN_IMG.TabIndex = 1
|
||||
Me.CH_INSTA_DOWN_IMG.Text = "Download images"
|
||||
Me.CH_INSTA_DOWN_IMG.ThreeState = True
|
||||
Me.CH_INSTA_DOWN_IMG.UseVisualStyleBackColor = True
|
||||
'
|
||||
'CH_INSTA_DOWN_VID
|
||||
'
|
||||
Me.CH_INSTA_DOWN_VID.AutoSize = True
|
||||
Me.CH_INSTA_DOWN_VID.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CH_INSTA_DOWN_VID.Location = New System.Drawing.Point(4, 56)
|
||||
Me.CH_INSTA_DOWN_VID.Name = "CH_INSTA_DOWN_VID"
|
||||
Me.CH_INSTA_DOWN_VID.Size = New System.Drawing.Size(568, 19)
|
||||
Me.CH_INSTA_DOWN_VID.TabIndex = 2
|
||||
Me.CH_INSTA_DOWN_VID.Text = "Download videos"
|
||||
Me.CH_INSTA_DOWN_VID.ThreeState = True
|
||||
Me.CH_INSTA_DOWN_VID.UseVisualStyleBackColor = True
|
||||
'
|
||||
'CONTAINER_MAIN
|
||||
'
|
||||
'
|
||||
@@ -803,6 +893,15 @@
|
||||
Me.CONTAINER_MAIN.TabIndex = 0
|
||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||
'
|
||||
'TXT_REDDIT_SAVED_POSTS_USER
|
||||
'
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER.CaptionText = "Saved posts user"
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER.Location = New System.Drawing.Point(4, 82)
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER.Name = "TXT_REDDIT_SAVED_POSTS_USER"
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER.Size = New System.Drawing.Size(562, 22)
|
||||
Me.TXT_REDDIT_SAVED_POSTS_USER.TabIndex = 3
|
||||
'
|
||||
'GlobalSettingsForm
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
@@ -810,13 +909,13 @@
|
||||
Me.ClientSize = New System.Drawing.Size(584, 384)
|
||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.KeyPreview = True
|
||||
Me.MaximizeBox = False
|
||||
Me.MaximumSize = New System.Drawing.Size(600, 423)
|
||||
Me.MinimizeBox = False
|
||||
Me.MinimumSize = New System.Drawing.Size(600, 423)
|
||||
Me.Name = "GlobalSettingsForm"
|
||||
Me.ShowIcon = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||
Me.Text = "Settings"
|
||||
@@ -829,6 +928,7 @@
|
||||
CType(Me.TXT_COLLECTIONS_PATH, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
CType(Me.TXT_MAX_JOBS_USERS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
CType(Me.TXT_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
TP_FILE_NAME.ResumeLayout(False)
|
||||
TP_FILE_NAME.PerformLayout()
|
||||
TP_FILE_PATTERNS.ResumeLayout(False)
|
||||
@@ -851,9 +951,13 @@
|
||||
TAB_DEFS_TWITTER.ResumeLayout(False)
|
||||
TP_TWITTER.ResumeLayout(False)
|
||||
TP_TWITTER.PerformLayout()
|
||||
Me.TAB_DEFS_INSTAGRAM.ResumeLayout(False)
|
||||
TP_INSTAGRAM.ResumeLayout(False)
|
||||
TP_INSTAGRAM.PerformLayout()
|
||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
||||
Me.CONTAINER_MAIN.PerformLayout()
|
||||
CType(Me.TXT_REDDIT_SAVED_POSTS_USER, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
@@ -889,5 +993,11 @@
|
||||
Private WithEvents CH_REDDIT_DOWN_IMG As CheckBox
|
||||
Private WithEvents CH_REDDIT_DOWN_VID As CheckBox
|
||||
Private WithEvents CH_CHANNELS_USERS_TEMP As CheckBox
|
||||
Private WithEvents TAB_DEFS_INSTAGRAM As TabPage
|
||||
Private WithEvents CH_INSTA_TEMP As CheckBox
|
||||
Private WithEvents CH_INSTA_DOWN_IMG As CheckBox
|
||||
Private WithEvents CH_INSTA_DOWN_VID As CheckBox
|
||||
Private WithEvents TXT_IMGUR_CLIENT_ID As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
Private WithEvents TXT_REDDIT_SAVED_POSTS_USER As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
End Class
|
||||
End Namespace
|
||||
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,19 @@ Imports PersonalUtilities.Forms.Toolbars
|
||||
Namespace Editors
|
||||
Friend Class GlobalSettingsForm : Implements IOkCancelToolbar
|
||||
Private ReadOnly MyDefs As DefaultFormProps(Of FieldsChecker)
|
||||
Private Class SavedPostsChecker : Implements ICustomProvider
|
||||
Private Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
||||
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
||||
If Not ACheck(Value) OrElse CStr(Value).Contains("/") Then
|
||||
Return Nothing
|
||||
Else
|
||||
Return Value
|
||||
End If
|
||||
End Function
|
||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||
Throw New NotImplementedException()
|
||||
End Function
|
||||
End Class
|
||||
Friend Sub New()
|
||||
InitializeComponent()
|
||||
MyDefs = New DefaultFormProps(Of FieldsChecker)
|
||||
@@ -31,6 +44,7 @@ Namespace Editors
|
||||
TXT_MAX_JOBS_USERS.Value = .MaxUsersJobsCount.Value
|
||||
TXT_MAX_JOBS_CHANNELS.Value = .ChannelsMaxJobsCount.Value
|
||||
CH_CHECK_VER_START.Checked = .CheckUpdatesAtStart
|
||||
TXT_IMGUR_CLIENT_ID.Text = .ImgurClientID
|
||||
'Defaults
|
||||
CH_SEPARATE_VIDEO_FOLDER.Checked = .SeparateVideoFolder.Value
|
||||
CH_DEF_TEMP.Checked = .DefaultTemporary
|
||||
@@ -52,19 +66,31 @@ Namespace Editors
|
||||
OPT_FILE_DATE_START.Checked = Not .FileDateTimePositionEnd
|
||||
OPT_FILE_DATE_END.Checked = .FileDateTimePositionEnd
|
||||
'Reddit
|
||||
SetChecker(CH_REDDIT_TEMP, .RedditTemporary)
|
||||
SetChecker(CH_REDDIT_DOWN_IMG, .RedditDownloadImages)
|
||||
SetChecker(CH_REDDIT_DOWN_VID, .RedditDownloadVideos)
|
||||
With .Site(Sites.Reddit)
|
||||
SetChecker(CH_REDDIT_TEMP, .Temporary)
|
||||
SetChecker(CH_REDDIT_DOWN_IMG, .DownloadImages)
|
||||
SetChecker(CH_REDDIT_DOWN_VID, .DownloadVideos)
|
||||
TXT_REDDIT_SAVED_POSTS_USER.Text = .SavedPostsUserName
|
||||
End With
|
||||
'Twitter
|
||||
SetChecker(CH_TWITTER_TEMP, .TwitterTemporary)
|
||||
SetChecker(CH_TWITTER_DOWN_IMG, .TwitterDownloadImages)
|
||||
SetChecker(CH_TWITTER_DOWN_VID, .TwitterDownloadVideos)
|
||||
CH_TWITTER_USER_MEDIA.Checked = .TwitterDefaultGetUserMedia
|
||||
With .Site(Sites.Twitter)
|
||||
SetChecker(CH_TWITTER_TEMP, .Temporary)
|
||||
SetChecker(CH_TWITTER_DOWN_IMG, .DownloadImages)
|
||||
SetChecker(CH_TWITTER_DOWN_VID, .DownloadVideos)
|
||||
CH_TWITTER_USER_MEDIA.Checked = .GetUserMediaOnly
|
||||
End With
|
||||
'Instagram
|
||||
With .Site(Sites.Instagram)
|
||||
SetChecker(CH_INSTA_TEMP, .Temporary)
|
||||
SetChecker(CH_INSTA_DOWN_IMG, .DownloadImages)
|
||||
SetChecker(CH_INSTA_DOWN_VID, .DownloadVideos)
|
||||
End With
|
||||
End With
|
||||
.MyFieldsChecker = New FieldsChecker
|
||||
With .MyFieldsChecker
|
||||
.AddControl(Of String)(TXT_GLOBAL_PATH, TXT_GLOBAL_PATH.CaptionText)
|
||||
.AddControl(Of String)(TXT_COLLECTIONS_PATH, TXT_COLLECTIONS_PATH.CaptionText)
|
||||
.AddControl(Of String)(TXT_REDDIT_SAVED_POSTS_USER, TXT_REDDIT_SAVED_POSTS_USER.CaptionText, True, New SavedPostsChecker)
|
||||
.EndLoaderOperations()
|
||||
End With
|
||||
.AppendDetectors()
|
||||
@@ -128,6 +154,7 @@ Namespace Editors
|
||||
.MaxUsersJobsCount.Value = CInt(TXT_MAX_JOBS_USERS.Value)
|
||||
.ChannelsMaxJobsCount.Value = TXT_MAX_JOBS_CHANNELS.Value
|
||||
.CheckUpdatesAtStart.Value = CH_CHECK_VER_START.Checked
|
||||
.ImgurClientID.Value = TXT_IMGUR_CLIENT_ID.Text
|
||||
'Defaults
|
||||
.SeparateVideoFolder.Value = CH_SEPARATE_VIDEO_FOLDER.Checked
|
||||
.DefaultTemporary.Value = CH_DEF_TEMP.Checked
|
||||
@@ -152,14 +179,25 @@ Namespace Editors
|
||||
.FileReplaceNameByDate.Value = False
|
||||
End If
|
||||
'Reddit
|
||||
SetPropByChecker(.RedditTemporary, CH_REDDIT_TEMP)
|
||||
SetPropByChecker(.RedditDownloadImages, CH_REDDIT_DOWN_IMG)
|
||||
SetPropByChecker(.RedditDownloadVideos, CH_REDDIT_DOWN_VID)
|
||||
With .Site(Sites.Reddit)
|
||||
SetPropByChecker(.Temporary, CH_REDDIT_TEMP)
|
||||
SetPropByChecker(.DownloadImages, CH_REDDIT_DOWN_IMG)
|
||||
SetPropByChecker(.DownloadVideos, CH_REDDIT_DOWN_VID)
|
||||
.SavedPostsUserName.Value = TXT_REDDIT_SAVED_POSTS_USER.Text
|
||||
End With
|
||||
'Twitter
|
||||
SetPropByChecker(.TwitterTemporary, CH_TWITTER_TEMP)
|
||||
SetPropByChecker(.TwitterDownloadImages, CH_TWITTER_DOWN_IMG)
|
||||
SetPropByChecker(.TwitterDownloadVideos, CH_TWITTER_DOWN_VID)
|
||||
.TwitterDefaultGetUserMedia.Value = CH_TWITTER_USER_MEDIA.Checked
|
||||
With .Site(Sites.Twitter)
|
||||
SetPropByChecker(.Temporary, CH_TWITTER_TEMP)
|
||||
SetPropByChecker(.DownloadImages, CH_TWITTER_DOWN_IMG)
|
||||
SetPropByChecker(.DownloadVideos, CH_TWITTER_DOWN_VID)
|
||||
.GetUserMediaOnly.Value = CH_TWITTER_USER_MEDIA.Checked
|
||||
End With
|
||||
'Instagram
|
||||
With .Site(Sites.Instagram)
|
||||
SetPropByChecker(.Temporary, CH_INSTA_TEMP)
|
||||
SetPropByChecker(.DownloadImages, CH_INSTA_DOWN_IMG)
|
||||
SetPropByChecker(.DownloadVideos, CH_INSTA_DOWN_VID)
|
||||
End With
|
||||
|
||||
.EndUpdate()
|
||||
End With
|
||||
|
||||
134
SCrawler/Editors/RedditEditorForm.Designer.vb
generated
134
SCrawler/Editors/RedditEditorForm.Designer.vb
generated
@@ -1,134 +0,0 @@
|
||||
Namespace Editors
|
||||
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||
Partial Friend Class RedditEditorForm : Inherits System.Windows.Forms.Form
|
||||
<System.Diagnostics.DebuggerNonUserCode()>
|
||||
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||
Try
|
||||
If disposing AndAlso components IsNot Nothing Then
|
||||
components.Dispose()
|
||||
End If
|
||||
Finally
|
||||
MyBase.Dispose(disposing)
|
||||
End Try
|
||||
End Sub
|
||||
Private components As System.ComponentModel.IContainer
|
||||
<System.Diagnostics.DebuggerStepThrough()>
|
||||
Private Sub InitializeComponent()
|
||||
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RedditEditorForm))
|
||||
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 ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Me.TXT_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_COOKIES = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||
TP_MAIN.SuspendLayout()
|
||||
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||
Me.CONTAINER_MAIN.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'TP_MAIN
|
||||
'
|
||||
TP_MAIN.ColumnCount = 1
|
||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_MAIN.Controls.Add(Me.TXT_PATH, 0, 0)
|
||||
TP_MAIN.Controls.Add(Me.TXT_COOKIES, 0, 1)
|
||||
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
TP_MAIN.Name = "TP_MAIN"
|
||||
TP_MAIN.RowCount = 2
|
||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
||||
TP_MAIN.Size = New System.Drawing.Size(524, 80)
|
||||
TP_MAIN.TabIndex = 0
|
||||
'
|
||||
'TXT_PATH
|
||||
'
|
||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton1.Index = 0
|
||||
ActionButton1.Name = "BTT_OPEN"
|
||||
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton2.Index = 1
|
||||
ActionButton2.Name = "BTT_CLEAR"
|
||||
Me.TXT_PATH.Buttons.Add(ActionButton1)
|
||||
Me.TXT_PATH.Buttons.Add(ActionButton2)
|
||||
Me.TXT_PATH.CaptionText = "Path"
|
||||
Me.TXT_PATH.CaptionToolTipEnabled = True
|
||||
Me.TXT_PATH.CaptionToolTipText = "Specific path to store Reddit files"
|
||||
Me.TXT_PATH.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_PATH.Location = New System.Drawing.Point(3, 3)
|
||||
Me.TXT_PATH.Name = "TXT_PATH"
|
||||
Me.TXT_PATH.Size = New System.Drawing.Size(518, 22)
|
||||
Me.TXT_PATH.TabIndex = 0
|
||||
'
|
||||
'TXT_COOKIES
|
||||
'
|
||||
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton3.Index = 0
|
||||
ActionButton3.Name = "BTT_EDIT"
|
||||
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton4.Index = 1
|
||||
ActionButton4.Name = "BTT_CLEAR"
|
||||
Me.TXT_COOKIES.Buttons.Add(ActionButton3)
|
||||
Me.TXT_COOKIES.Buttons.Add(ActionButton4)
|
||||
Me.TXT_COOKIES.CaptionText = "Cookies"
|
||||
Me.TXT_COOKIES.ClearTextByButtonClear = False
|
||||
Me.TXT_COOKIES.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_COOKIES.Location = New System.Drawing.Point(3, 43)
|
||||
Me.TXT_COOKIES.Name = "TXT_COOKIES"
|
||||
Me.TXT_COOKIES.Size = New System.Drawing.Size(518, 22)
|
||||
Me.TXT_COOKIES.TabIndex = 1
|
||||
Me.TXT_COOKIES.TextBoxReadOnly = True
|
||||
'
|
||||
'CONTAINER_MAIN
|
||||
'
|
||||
'
|
||||
'CONTAINER_MAIN.ContentPanel
|
||||
'
|
||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(524, 80)
|
||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(524, 80)
|
||||
Me.CONTAINER_MAIN.TabIndex = 0
|
||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||
'
|
||||
'RedditEditorForm
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(524, 80)
|
||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.KeyPreview = True
|
||||
Me.MaximizeBox = False
|
||||
Me.MaximumSize = New System.Drawing.Size(540, 119)
|
||||
Me.MinimizeBox = False
|
||||
Me.MinimumSize = New System.Drawing.Size(540, 119)
|
||||
Me.Name = "RedditEditorForm"
|
||||
Me.ShowInTaskbar = False
|
||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||
Me.Text = "Reddit"
|
||||
TP_MAIN.ResumeLayout(False)
|
||||
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
||||
Me.CONTAINER_MAIN.PerformLayout()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
Private WithEvents CONTAINER_MAIN As ToolStripContainer
|
||||
Private WithEvents TXT_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
Private WithEvents TXT_COOKIES As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
End Class
|
||||
End Namespace
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,76 +0,0 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports PersonalUtilities.Forms
|
||||
Imports PersonalUtilities.Forms.Controls
|
||||
Imports PersonalUtilities.Forms.Controls.Base
|
||||
Imports PersonalUtilities.Forms.Toolbars
|
||||
Imports PersonalUtilities.Tools.WEB
|
||||
Namespace Editors
|
||||
Friend Class RedditEditorForm : Implements IOkCancelToolbar
|
||||
Private ReadOnly MyDefs As DefaultFormProps
|
||||
Friend Sub New()
|
||||
InitializeComponent()
|
||||
MyDefs = New DefaultFormProps
|
||||
End Sub
|
||||
Private Sub RedditEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||
Try
|
||||
With MyDefs
|
||||
.MyViewInitialize(Me, Settings.Design, True)
|
||||
.AddOkCancelToolbar()
|
||||
.DelegateClosingChecker()
|
||||
With Settings.Site(Sites.Reddit)
|
||||
TXT_PATH.Text = .Path
|
||||
If .Responser.Cookies Is Nothing Then .Responser.Cookies = New CookieKeeper(.Responser.CookiesDomain)
|
||||
End With
|
||||
SetCookieText()
|
||||
TextBoxExtended.SetFalseDetector(Me, True, AddressOf .Detector)
|
||||
.EndLoaderOperations()
|
||||
End With
|
||||
Catch ex As Exception
|
||||
MyDefs.InvokeLoaderError(ex)
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
||||
With Settings.Site(Sites.Reddit)
|
||||
If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text
|
||||
.Update()
|
||||
End With
|
||||
MyDefs.CloseForm()
|
||||
End Sub
|
||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
||||
MyDefs.CloseForm(DialogResult.Cancel)
|
||||
End Sub
|
||||
Private Sub TXT_PATH_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_PATH.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then
|
||||
Dim f As SFile = SFile.SelectPath(Settings.Site(Sites.Reddit).Path)
|
||||
If Not f.IsEmptyString Then TXT_PATH.Text = f
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_COOKIES_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_COOKIES.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Edit Then
|
||||
Using f As New CookieListForm(Settings.Site(Sites.Reddit).Responser.Cookies) : f.ShowDialog() : End Using
|
||||
SetCookieText()
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_COOKIES_ActionOnButtonClearClick() Handles TXT_COOKIES.ActionOnButtonClearClick
|
||||
With Settings.Site(Sites.Reddit).Responser
|
||||
If Not .Cookies Is Nothing Then .Cookies.Dispose()
|
||||
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||
End With
|
||||
SetCookieText()
|
||||
End Sub
|
||||
Private Sub SetCookieText()
|
||||
Dim c% = 0
|
||||
With Settings.Site(Sites.Reddit).Responser
|
||||
If Not .Cookies Is Nothing Then c = .Cookies.Count
|
||||
End With
|
||||
TXT_COOKIES.Text = $"{c} cookies"
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
@@ -1,6 +1,6 @@
|
||||
Namespace Editors
|
||||
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||
Partial Friend Class TwitterEditorForm : Inherits System.Windows.Forms.Form
|
||||
Partial Friend Class SiteEditorForm : Inherits System.Windows.Forms.Form
|
||||
<System.Diagnostics.DebuggerNonUserCode()>
|
||||
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||
Try
|
||||
@@ -14,21 +14,20 @@
|
||||
Private components As System.ComponentModel.IContainer
|
||||
<System.Diagnostics.DebuggerStepThrough()>
|
||||
Private Sub InitializeComponent()
|
||||
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(TwitterEditorForm))
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SiteEditorForm))
|
||||
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim ActionButton3 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 ActionButton5 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim ActionButton6 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Me.TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||
Me.TXT_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_COOKIES = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_TOKEN = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.TXT_AUTH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||
TP_MAIN.SuspendLayout()
|
||||
Me.TP_MAIN.SuspendLayout()
|
||||
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
CType(Me.TXT_TOKEN, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
@@ -39,23 +38,23 @@
|
||||
'
|
||||
'TP_MAIN
|
||||
'
|
||||
TP_MAIN.ColumnCount = 1
|
||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
TP_MAIN.Controls.Add(Me.TXT_PATH, 0, 0)
|
||||
TP_MAIN.Controls.Add(Me.TXT_COOKIES, 0, 1)
|
||||
TP_MAIN.Controls.Add(Me.TXT_TOKEN, 0, 2)
|
||||
TP_MAIN.Controls.Add(Me.TXT_AUTH, 0, 3)
|
||||
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
TP_MAIN.Name = "TP_MAIN"
|
||||
TP_MAIN.RowCount = 4
|
||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_MAIN.Size = New System.Drawing.Size(544, 107)
|
||||
TP_MAIN.TabIndex = 0
|
||||
Me.TP_MAIN.ColumnCount = 1
|
||||
Me.TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
Me.TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||
Me.TP_MAIN.Controls.Add(Me.TXT_PATH, 0, 0)
|
||||
Me.TP_MAIN.Controls.Add(Me.TXT_COOKIES, 0, 1)
|
||||
Me.TP_MAIN.Controls.Add(Me.TXT_TOKEN, 0, 2)
|
||||
Me.TP_MAIN.Controls.Add(Me.TXT_AUTH, 0, 3)
|
||||
Me.TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
Me.TP_MAIN.Name = "TP_MAIN"
|
||||
Me.TP_MAIN.RowCount = 4
|
||||
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
Me.TP_MAIN.Size = New System.Drawing.Size(544, 132)
|
||||
Me.TP_MAIN.TabIndex = 0
|
||||
'
|
||||
'TXT_PATH
|
||||
'
|
||||
@@ -89,7 +88,7 @@
|
||||
Me.TXT_COOKIES.CaptionText = "Cookies"
|
||||
Me.TXT_COOKIES.ClearTextByButtonClear = False
|
||||
Me.TXT_COOKIES.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_COOKIES.Location = New System.Drawing.Point(3, 29)
|
||||
Me.TXT_COOKIES.Location = New System.Drawing.Point(3, 36)
|
||||
Me.TXT_COOKIES.Name = "TXT_COOKIES"
|
||||
Me.TXT_COOKIES.Size = New System.Drawing.Size(538, 22)
|
||||
Me.TXT_COOKIES.TabIndex = 1
|
||||
@@ -105,7 +104,7 @@
|
||||
Me.TXT_TOKEN.CaptionToolTipEnabled = True
|
||||
Me.TXT_TOKEN.CaptionToolTipText = "Set token from [x-csrf-token] response header"
|
||||
Me.TXT_TOKEN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_TOKEN.Location = New System.Drawing.Point(3, 55)
|
||||
Me.TXT_TOKEN.Location = New System.Drawing.Point(3, 69)
|
||||
Me.TXT_TOKEN.Name = "TXT_TOKEN"
|
||||
Me.TXT_TOKEN.Size = New System.Drawing.Size(538, 22)
|
||||
Me.TXT_TOKEN.TabIndex = 2
|
||||
@@ -121,7 +120,7 @@
|
||||
Me.TXT_AUTH.CaptionToolTipText = "Set authorization from [authorization] response header. This field must start fro" &
|
||||
"m [Bearer] key word"
|
||||
Me.TXT_AUTH.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_AUTH.Location = New System.Drawing.Point(3, 81)
|
||||
Me.TXT_AUTH.Location = New System.Drawing.Point(3, 102)
|
||||
Me.TXT_AUTH.Name = "TXT_AUTH"
|
||||
Me.TXT_AUTH.Size = New System.Drawing.Size(538, 22)
|
||||
Me.TXT_AUTH.TabIndex = 3
|
||||
@@ -131,8 +130,8 @@
|
||||
'
|
||||
'CONTAINER_MAIN.ContentPanel
|
||||
'
|
||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(544, 107)
|
||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TP_MAIN)
|
||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(544, 132)
|
||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
@@ -142,24 +141,23 @@
|
||||
Me.CONTAINER_MAIN.TabIndex = 0
|
||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||
'
|
||||
'TwitterEditorForm
|
||||
'SiteEditorForm
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(544, 132)
|
||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.KeyPreview = True
|
||||
Me.MaximizeBox = False
|
||||
Me.MaximumSize = New System.Drawing.Size(560, 171)
|
||||
Me.MinimizeBox = False
|
||||
Me.MinimumSize = New System.Drawing.Size(560, 171)
|
||||
Me.Name = "TwitterEditorForm"
|
||||
Me.Name = "SiteEditorForm"
|
||||
Me.ShowInTaskbar = False
|
||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||
Me.Text = "Twitter"
|
||||
TP_MAIN.ResumeLayout(False)
|
||||
Me.Text = "Site"
|
||||
Me.TP_MAIN.ResumeLayout(False)
|
||||
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
CType(Me.TXT_TOKEN, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
@@ -176,5 +174,6 @@
|
||||
Private WithEvents TXT_COOKIES As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
Private WithEvents TXT_TOKEN As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
Private WithEvents TXT_AUTH As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
Private WithEvents TP_MAIN As TableLayoutPanel
|
||||
End Class
|
||||
End Namespace
|
||||
@@ -117,9 +117,6 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="TP_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<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">
|
||||
<value>
|
||||
@@ -220,19 +217,6 @@
|
||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||
tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX
|
||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAICAAAAEAIADLAQAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAZJJ
|
||||
REFUeAFiGDZgFMguBPBazwB6BEAUx2PbttHFqmJ2sW1UsbrY6NLFrmL2sW3jbMz9z1rNqvh9wry3QnQ5
|
||||
LMRdRCAez7AVDQ1+3w2lc9+UwXwP4W3wFGIiBhPQANNxDScKDhgDwWIX4XXxCWIjDekQ/EKjgkP2QJCO
|
||||
DcoCRyAKbzAY07Ewd8hRSAHnUMtBeA0kQxQSIXiM6rmD9kKK+I7pKGlRYAzEhQeoX3DQWIiJJ5iFSgYF
|
||||
5kCUHqFy0UHl8QViIQ6nsAjdUBujIUrXzVbncKRCFFIgSheMwtdiClaqh+odNiqwDxKSFWarX0LS16hA
|
||||
SdyHBCwa5c12wk74DwnQMbszW1c8gwRksF2B2uiIdfgL8dETlLQr0CLAw3CM06vblgDCL2kur6VxAuKT
|
||||
CDTT3mSUxDx8hHiQipGqcIMi3XEPopSO6V7DR+ApRCkJU9yElkEvrPVwPniLXprQgbiNLx4PwXjsQGW3
|
||||
9/TTcQfpEIVf2KLa023KtMJSHMMj/IEgFf/xEhexGQNQJmMMQxmMAgBkarVAZoTAyQAAAABJRU5ErkJg
|
||||
gg==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
141
SCrawler/Editors/SiteEditorForm.vb
Normal file
141
SCrawler/Editors/SiteEditorForm.vb
Normal file
@@ -0,0 +1,141 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports PersonalUtilities.Forms
|
||||
Imports PersonalUtilities.Forms.Controls
|
||||
Imports PersonalUtilities.Forms.Controls.Base
|
||||
Imports PersonalUtilities.Forms.Toolbars
|
||||
Imports PersonalUtilities.Tools.WEB
|
||||
Namespace Editors
|
||||
Friend Class SiteEditorForm : Implements IOkCancelToolbar
|
||||
Private ReadOnly MyDefs As DefaultFormProps(Of FieldsChecker)
|
||||
Private ReadOnly MySite As Sites
|
||||
Friend Sub New(ByVal s As Sites)
|
||||
InitializeComponent()
|
||||
MySite = s
|
||||
MyDefs = New DefaultFormProps(Of FieldsChecker)
|
||||
End Sub
|
||||
Private Sub SiteEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||
Try
|
||||
With MyDefs
|
||||
.MyViewInitialize(Me, Settings.Design, True)
|
||||
.AddOkCancelToolbar()
|
||||
.DelegateClosingChecker()
|
||||
Select Case MySite
|
||||
Case Sites.Reddit : Icon = My.Resources.RedditIcon
|
||||
Case Sites.Twitter : Icon = My.Resources.TwitterIcon
|
||||
Case Sites.Instagram : Icon = My.Resources.InstagramIcon
|
||||
Case Else : ShowIcon = False
|
||||
End Select
|
||||
Text = MySite.ToString
|
||||
|
||||
With Settings(MySite)
|
||||
TXT_PATH.Text = .Path
|
||||
With .Responser
|
||||
If .Cookies Is Nothing Then .Cookies = New CookieKeeper(.CookiesDomain)
|
||||
SetCookieText()
|
||||
If MySite = Sites.Twitter Then
|
||||
TXT_TOKEN.Text = .Headers(API.Base.SiteSettings.Header_Twitter_Token)
|
||||
TXT_AUTH.Text = .Headers(API.Base.SiteSettings.Header_Twitter_Authorization)
|
||||
End If
|
||||
End With
|
||||
If MySite = Sites.Instagram Then TXT_TOKEN.Text = .InstaHash
|
||||
End With
|
||||
|
||||
If Not MySite = Sites.Twitter Then
|
||||
Dim p As PaddingE = PaddingE.GetOf({TP_MAIN})
|
||||
Dim s As New Size(Size.Width, Size.Height - p.Vertical - TXT_AUTH.NeededHeight)
|
||||
TXT_AUTH.Visible = False
|
||||
If Not MySite = Sites.Instagram Then
|
||||
s.Height -= (p.Vertical + TXT_TOKEN.NeededHeight)
|
||||
TXT_TOKEN.Visible = False
|
||||
Else
|
||||
TXT_TOKEN.CaptionText = "Hash"
|
||||
TXT_TOKEN.CaptionToolTipText = "Instagram session hash"
|
||||
TXT_TOKEN.Buttons.Clear()
|
||||
TXT_TOKEN.Buttons.AddRange({ActionButton.DefaultButtons.Refresh, ActionButton.DefaultButtons.Clear})
|
||||
End If
|
||||
With TP_MAIN
|
||||
If Not MySite = Sites.Instagram Then .RowStyles(2).Height = 0
|
||||
.RowStyles(3).Height = 0
|
||||
End With
|
||||
MinimumSize = s
|
||||
Size = s
|
||||
MaximumSize = s
|
||||
End If
|
||||
|
||||
.MyFieldsChecker = New FieldsChecker
|
||||
With .MyFieldsChecker
|
||||
If MySite = Sites.Twitter Then
|
||||
.AddControl(Of String)(TXT_TOKEN, TXT_TOKEN.CaptionText)
|
||||
.AddControl(Of String)(TXT_AUTH, TXT_AUTH.CaptionText)
|
||||
End If
|
||||
.EndLoaderOperations()
|
||||
End With
|
||||
TextBoxExtended.SetFalseDetector(Me, True, AddressOf .Detector)
|
||||
.EndLoaderOperations()
|
||||
End With
|
||||
Catch ex As Exception
|
||||
MyDefs.InvokeLoaderError(ex)
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
||||
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
||||
With Settings(MySite)
|
||||
If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text
|
||||
Select Case MySite
|
||||
Case Sites.Twitter
|
||||
With .Responser
|
||||
.Headers(API.Base.SiteSettings.Header_Twitter_Token) = TXT_TOKEN.Text
|
||||
.Headers(API.Base.SiteSettings.Header_Twitter_Authorization) = TXT_AUTH.Text
|
||||
End With
|
||||
Case Sites.Instagram
|
||||
.InstaHash.Value = TXT_TOKEN.Text
|
||||
End Select
|
||||
.Update()
|
||||
End With
|
||||
MyDefs.CloseForm()
|
||||
End If
|
||||
End Sub
|
||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
||||
MyDefs.CloseForm(DialogResult.Cancel)
|
||||
End Sub
|
||||
Private Sub TXT_TOKEN_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_TOKEN.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Refresh Then
|
||||
With Settings(Sites.Instagram)
|
||||
If .GatherInstaHash() Then
|
||||
.InstaHashUpdateRequired.Value = Not .InstaHash.IsEmptyString
|
||||
TXT_TOKEN.Text = .InstaHash
|
||||
End If
|
||||
End With
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_PATH_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_PATH.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then
|
||||
Dim f As SFile = SFile.SelectPath(Settings(MySite).Path)
|
||||
If Not f.IsEmptyString Then TXT_PATH.Text = f
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_COOKIES_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_COOKIES.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Edit Then
|
||||
Using f As New CookieListForm(Settings(MySite).Responser.Cookies) With {.MyDesignXML = Settings.Design} : f.ShowDialog() : End Using
|
||||
SetCookieText()
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_COOKIES_ActionOnButtonClearClick() Handles TXT_COOKIES.ActionOnButtonClearClick
|
||||
With Settings(MySite).Responser
|
||||
If Not .Cookies Is Nothing Then .Cookies.Dispose()
|
||||
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||
End With
|
||||
SetCookieText()
|
||||
End Sub
|
||||
Private Sub SetCookieText()
|
||||
TXT_COOKIES.Text = $"{If(Settings(MySite).Responser.Cookies?.Count, 0)} cookies"
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
107
SCrawler/Editors/SiteSelectionForm.Designer.vb
generated
Normal file
107
SCrawler/Editors/SiteSelectionForm.Designer.vb
generated
Normal file
@@ -0,0 +1,107 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Namespace Editors
|
||||
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||
Partial Friend Class SiteSelectionForm : Inherits System.Windows.Forms.Form
|
||||
<System.Diagnostics.DebuggerNonUserCode()>
|
||||
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||
Try
|
||||
If disposing AndAlso components IsNot Nothing Then
|
||||
components.Dispose()
|
||||
End If
|
||||
Finally
|
||||
MyBase.Dispose(disposing)
|
||||
End Try
|
||||
End Sub
|
||||
Private components As System.ComponentModel.IContainer
|
||||
<System.Diagnostics.DebuggerStepThrough()>
|
||||
Private Sub InitializeComponent()
|
||||
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SiteSelectionForm))
|
||||
Dim ListColumn1 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn()
|
||||
Dim ListColumn2 As PersonalUtilities.Forms.Controls.Base.ListColumn = New PersonalUtilities.Forms.Controls.Base.ListColumn()
|
||||
Me.CMB_SITES = New PersonalUtilities.Forms.Controls.ComboBoxExtended()
|
||||
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||
CONTAINER_MAIN.SuspendLayout()
|
||||
CType(Me.CMB_SITES, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'CONTAINER_MAIN
|
||||
'
|
||||
'
|
||||
'CONTAINER_MAIN.ContentPanel
|
||||
'
|
||||
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_SITES)
|
||||
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(284, 276)
|
||||
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||
CONTAINER_MAIN.Size = New System.Drawing.Size(284, 276)
|
||||
CONTAINER_MAIN.TabIndex = 0
|
||||
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||
'
|
||||
'CMB_SITES
|
||||
'
|
||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton1.Index = 0
|
||||
ActionButton1.Name = "BTT_COMBOBOX_ARROW"
|
||||
ActionButton1.Visible = False
|
||||
Me.CMB_SITES.Buttons.Add(ActionButton1)
|
||||
ListColumn1.DisplayMember = True
|
||||
ListColumn1.Name = "COL_DISPLAY"
|
||||
ListColumn1.Text = "Site"
|
||||
ListColumn1.Width = -1
|
||||
ListColumn2.Name = "COL_VALUE"
|
||||
ListColumn2.Text = "Value"
|
||||
ListColumn2.ValueMember = True
|
||||
ListColumn2.Visible = False
|
||||
Me.CMB_SITES.Columns.Add(ListColumn1)
|
||||
Me.CMB_SITES.Columns.Add(ListColumn2)
|
||||
Me.CMB_SITES.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CMB_SITES.ListCheckBoxes = True
|
||||
Me.CMB_SITES.ListDropDownStyle = PersonalUtilities.Forms.Controls.ComboBoxExtended.ListMode.Simple
|
||||
Me.CMB_SITES.ListGridVisible = True
|
||||
Me.CMB_SITES.ListMultiSelect = True
|
||||
Me.CMB_SITES.Location = New System.Drawing.Point(0, 0)
|
||||
Me.CMB_SITES.Name = "CMB_SITES"
|
||||
Me.CMB_SITES.Size = New System.Drawing.Size(286, 277)
|
||||
Me.CMB_SITES.TabIndex = 0
|
||||
'
|
||||
'SiteSelectionForm
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(284, 276)
|
||||
Me.Controls.Add(CONTAINER_MAIN)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.KeyPreview = True
|
||||
Me.MaximizeBox = False
|
||||
Me.MaximumSize = New System.Drawing.Size(300, 315)
|
||||
Me.MinimizeBox = False
|
||||
Me.MinimumSize = New System.Drawing.Size(300, 315)
|
||||
Me.Name = "SiteSelectionForm"
|
||||
Me.ShowIcon = False
|
||||
Me.ShowInTaskbar = False
|
||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||
Me.Text = "Select Site"
|
||||
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||
CONTAINER_MAIN.ResumeLayout(False)
|
||||
CONTAINER_MAIN.PerformLayout()
|
||||
CType(Me.CMB_SITES, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
|
||||
Private WithEvents CMB_SITES As PersonalUtilities.Forms.Controls.ComboBoxExtended
|
||||
End Class
|
||||
End Namespace
|
||||
214
SCrawler/Editors/SiteSelectionForm.resx
Normal file
214
SCrawler/Editors/SiteSelectionForm.resx
Normal file
@@ -0,0 +1,214 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<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">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
||||
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
||||
GlAKCkhEC4KgQlsLQkqhKi/lrYWWlxaw3dLddrerz/Q89+7dc2fbfTn3npf5fJJv2rS758z85nnOzJz5
|
||||
nZktAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMK3O3r79wVUIz65jfGNVxI/VIX69CvGO9M//a9P+e8o3B/8v
|
||||
vKn9s+3fyX8dAJgmaWd+fl3E96Wd/E9XdvZHkfbvXNa+Rn45AGCS3bvjj/E/h3box5OrmxjPyy8PAEyS
|
||||
XXO7zqhCeH/HDnwUOdCE+J6zdux4eH47YIrEGE8uy/Ls9Bnx/LooL0oH9b9Th/I1TVG+rCqKC+q6Xsh/
|
||||
FJgmO8vy6WknfdPQTnsjckMdwlPy2wITLO3wF6si/lGas1ekuXvX0Fzuyg9S3psOCl6qDwimQB3ji9Ok
|
||||
3btmEm907kpnEa/Mbw9Mlq1pB/6cdHZ/ZcfcPZrcXoXyrVVVFfl1gUmSdsS/libqPUMTd5NSvjktwrbB
|
||||
kgDjVi1UT26K+Nnu+XrMuaud60uPWHpIfhtg3JqyfEaanHcPTdZNTRPCPy4uLj40LxIwBudt2fKAtOP/
|
||||
0zQnN+5koIg3tpca81sC49J+LZcm5a3rJulYEq6LSV40YBOFEB6V5uFV6+flRiTsSwf9r81vDYzBCSO4
|
||||
vjfq/KAuiqfm5QM2QRPjuWnubUbz71DCn6W33zpYCmDT1EX5m92Tcuy5q47xFXkxgQ3UduqnOXfn0Bzc
|
||||
xJSvz4sCbIb2pzlp8v1w/WScnKSzkjekRT1hsMTAKC0vL5/Ydud3zb1NT1FelBcL2GiDm3d0TMTJy0ea
|
||||
pjk1LzYwAu3NvtLc+uTQXBtn7tYYCJtja/vQno5JOJFpQrzWb4hhNJoQnpjm1Q3D82wCcnNRFKfnxQQ2
|
||||
Qttk1zH5JjzhFmcIcHzyzb6O5aFem5J0sP/OvKjARmg7b7sm3xRkT3vDorwawJHb1t6Ep2NOTVoOtDch
|
||||
yssMjFr6IPh8x8SbnsT4lrQamgPhCMzPzz+sifHjnXNpMnN5XnRglJaWlk5KE2z/0ISbxnzQQ0bgvlXz
|
||||
1ePSXPnG0NyZ+DRF8Zi8CsCo7Azh0V0TbkrzRc2B0G3wIJ9429CcmZLce4MgYJTyff87JtzU5uayLM/J
|
||||
qwcM7vD5+jQ3DgzNlWnKDXldgFFJZwW/2jHZpj1727uZ5VWE3mofqJXmw4eG5sdUpqqqXXm1gFGoQnhJ
|
||||
12SbgRxoYvzjtIruK04vxRjPSvPgK0PzYmqTPqtemVcNGIU6xgu7JtusJH1ovH9ubu6UvLrQC2ncPyuN
|
||||
/58Mz4fpTvnmvHrAKJQL5dO6J9ssJXxucWFhLq8yzLKtaUf5h2ncb9zz+8eUKsYP53UERmHX/PyOrsk2
|
||||
g7nJDUWYZUuPWHpIE8oPdIz92UiMn86rCoxIOmOYta8KD5uftk2Peb1hZtTzdVOHcF3HmJ+ZVCF+Ia8u
|
||||
MCppcl0+PNlmOG1zYPtYYc2BzIQ0np+ZxvWPh8b5LObqvMrAqEzRo4BHmctijCfnEsBUqkP5u2ksz8Kd
|
||||
PI8g5SfyagOj0jbIpQk2c01DR5Brmh3NfC4DTI324LWO8V0dY3pm48mAsEGm7OEgo0sRb9wZ4+NzGWDi
|
||||
lWUZ0ti9Zt1YnvUU8fdyCYBRmsFbAh9xqhDvqEN4Xi4FTKz8s93vD4/hPiSdpJyXywCMWPtrgKuGJ12P
|
||||
ck/6gPmDXAuYOHVR/lY6UN3XMXb7kDv17MAGqhaqJ6WJ1sdegDUJ726a5oG5JDB2917vL+Kl3eO1N/lQ
|
||||
LgewUdIO8E0dk69vubosy+25JDA2bYNuFeJnOsZovxLjhbkkwEZZXl4+0QfOvfl2Ogg4O5cFNl1dFE9N
|
||||
4/B7Q+Oyj7mh/VzKZQE2UtM0j6iL+LWOidizhN3OPBiHuigvSmPwrvVjsn9pQnh1LguwGQa3Fo3fHp6M
|
||||
Pcw97c1WcllgQy0tLZ2UDr7/qmMc9jJNiF/WkwNjMHhQ0GzfX/yIU8RLfRCxkdq+kzTfrugcf/3MgZ1l
|
||||
+fRcHmCztU8Yq2P8h47J2cdcpTmQjdCE8IQ0vnzjdkjKP8nlAcZoWxXin3dP0n4l1eGb9UL92FwXOG51
|
||||
Ub48ja09w2Otz2nvTJpKs21QIWDs0lnKb6TJqTEphN3NQvncXBY4VtvSju4N3WOs17l6cXHxoblGwKRo
|
||||
r8mlHeAtHZO2b9mfDohem8sCR2XX3K4z0hj65NCYklSTGONpuUzApNlVFFWaqP81NHF7mvD2tnM7lwbu
|
||||
V/vwqTR2vrV+LPU7VSjf4ff+MAU0B65NeWVd12fm0sBhpTnzosHDp7rGUV8T9lVFvDiXCJgSrmEezDea
|
||||
onhMrgsM25rmyuvSODkwNG56nvZyYvi5XCNg2mgOXM3tVVH9ci4L3KtpmlN9W7Y+VYhfiEkuEzCt8n3L
|
||||
fzA8yXuY/b7OZEVZlovt3ew6xknf8965ublTcpmAaac5cG3C2zQ09Vv7bVAaC/+7fmz0Og6QYVZpDlyT
|
||||
GD/dPlgpl4b+2Nru5NIYuGfdmOhxmhB/VBblL+QaATNKc+DBfH1nCI/OdWHGtTewSdv874fGgIT4xfYb
|
||||
wlwmYNZpDlzNbVUIz85lYUblJ2i6BDacGP/u7O3bH5zLBPSF5sDV7K+L+Nu5LMyYtJP7xbSNfzy0zfue
|
||||
A+03gak8WwdVAnpHc+CaxHiJ5sCZsnK9f/+6bd3v3JZ2/r+SawT0mebAg0kfjB93v/Pp136t3X693bWN
|
||||
e56v6nsBhmkOXE24Ph0EnJXrwpSp63qhDuXnu7dtn1P+U1VVP5PLBHAozYGDtD+LchvU6TN4Iqa+lqGs
|
||||
XO8/YVAlgMPQHLiSsC+dNb0ml4UJVxflRWm73b1+O/Y5YXcVwvNziQDun+bANYnxkvO2bHlALg0TJsZ4
|
||||
cl3ESzu3Xa8Trm+KYimXCeDIaQ48mKqIH9McOHl2zc/vaIr42a5t1vN8tCiK03OZAI6J5sCVFPFr7QNk
|
||||
cl0Ys3yp6nvrtlO/s3K9f9ugSgDHSXPgILk58PxcFsYkX+93J8s1qUK8oynKF+YSAYyO5sCVhH3pgOjV
|
||||
uSxsoqZpHpjq//bu7dLjFPHGND+Xc5kARk9z4JrE+JZUEl+1bpLFhYW5VPf/WLcd5N/ruj4zlwlg42gO
|
||||
PCQfdXOVjdeE8MRU6xuGai9uXw2MgebA1YTrFkMoc10YsaYoX5rqfOf6uvc6e9LO/xW5RACbT3Pgam5N
|
||||
B0Q/m8vCCLT3XnCQ2ZXwnWqhenIuE8D4aA5czV3OykZj19yuM1I9PzlUXwnhirIst+cyAYyf5sA1GTQH
|
||||
uu/6MdoZ4+NTHb+1rq59j+v9wKTSHHhIPtI0zam5NByhNH5enGr306Fa9j1720ttuUQAE0tz4Epi/FJM
|
||||
cl24b8ZNd25KdTk31whg8mkOXEm4pX1EbS4LHebn5x+WdnIf765fr3NVCOFRuUwA00Nz4Gr21kX58lwW
|
||||
1qjmq8el+nxjqF4S4yVLS0sn5TIBTB/NgWuiOfAQTVE+J9XltnV16nXCvqqIF+cSAUw3zYGH5INnb9/+
|
||||
4Fyavtra7uRSLe4Zqk3f88MmxvNyjQBmhiavg/liVVVFrkuvLC4uPjSt/4eG6iEhXlOWZchlApg9mgNX
|
||||
c3P6wD8nl6UXqvlqZ1rv/xmqQ+/ThPJv5ufnH5TLBDC7NAeuZm97n/tclplWhfCstL4/GVr/nsf1fqCH
|
||||
NAeu5kB7aSSVZFabA13v786tVVFckGsE0C+aAw8mnSG/f25u7pRcmpnQbt8mlB/oWt8+pwnxWk+PBNAc
|
||||
uJoqxC/MSnNgs7BQ1yFc17WePc97Z+1AD+C4aA5czU3T/qjXdED3zLQePx5ar75nf77ev3VQJQBWaQ5c
|
||||
zZ4qhJfkskyVuigvapvbOtapt2lC/FFTls/IJQKgi+bA1aw0B07FGWOM8eQ6xnd1rEe/E+OX2jGdywTA
|
||||
fdEcuCYx/u2kXzNudjTz6az/c53L3+NUMX7YI6EBjp7mwIO5pt3J5rpMlHKhfFpavu8PLW/fM+s/7QTY
|
||||
eJoDV/PduiiWc1kmwuB6f7x7aDn7ntvrGC/MJQLgeGgOHKQK8Y46hOflsoxN0zQPbEJ8Z9cy9jxf3RnC
|
||||
o3OZABgFzYGrab9efl0qyViaAxcXFubSgchnOpar77k8xnhaLhMAo6Q5cE2K+L7NfoBMHcJT0nvfvG5Z
|
||||
+h3X+wE2iebAg7m6LMvtuS4bKl/v14txSMLuKoQX5BIBsBk0B64kfCfV4om5LCN33pYtD3DA1ZVwfb1Q
|
||||
PzaXCYDNpDlwJWH3RnSe75rbdUZ6/X9b/369z0eLojg9lwmAcdAcuJqV5sCRaEJ4QnrNbw+9R9+zcr1/
|
||||
26BKAIyV5sBDcll7W95cmmPSPocgvc6dQ6/b9+xpivJluUQATBDNgQdz1TE2B6phV4p446TdhAmAIens
|
||||
9ZXpQ1tz4KA58Am5LPfrrB07Hp7+zr90v1Z/UxXxU3Vdn5nLBMAk0xy4krC7WSifm8tyWGVZnl2F+M3u
|
||||
1+hxYrxkeXn5xFwmAKaB5sDV7E9nsRfnsqyTdnIvGtxiuPPv9jV7Ul1ekUsEwLTRHHgwVSjfsbS0dFIu
|
||||
TWtr+6uB9P8ODP/Znue7ZVmek2sEwBTT2Laa8sr2enb7jHoHRl0JV8QYH5nHDQCzwJ0DV/P1tKO7vuO/
|
||||
9zpVKN/qej/AjNIcKB3Z24TyVXmIADCrNAfKmtzUxHhuHhoAzDrNgZJyVQjhUXlIANAjmgN7m/Du471d
|
||||
MgBTzp0D+5Sw777uiQBAz2gO7EPCLSnn500OAAOaA2c615RlGfKmBoBDaQ6cvTQhvmd+fv5BeRMDwGFp
|
||||
DpyJuN4PwDHQHDjVubUqigvypgSAo6M5cPrShHjtYghl3oQAcGw0B05Rivi+ubm5U/KmA4Djozlw4rM/
|
||||
X+/fOthiADA6mgMnME2IP2rK8hl5GwHAxtAcOFH5SozxrLxpAGBjaQ4cf6oYP9w0zal5kwDA5tAcOLYc
|
||||
aC/FpE1wwmBLAMAm0xy46bk91fvCXH4AGCvNgZuRIn6tKYrH5JoDwGTQHLihuTzGeFouNQBMFs2BI4/r
|
||||
/QBMB82Bo0rYXYXwglxWAJh8mgOPN+H6eqF+bC4nAEwVzYHHkiL+c1EUp+caAsB00hx4FInxLalk2waV
|
||||
A4AppznwfrOnLsqX53IBwOzQHHiYFPHGaqF6Ui4TAMwezYGHpirip+q6PjOXBwBmmubANjFesry8fGKu
|
||||
CQD0Q4+bA/dWMf56LgMA9E8PmwO/W5blOXn1AaC/+tMcWF4ZY3xkXm0AYOabA2O8ZGlp6aS8ugDAGrPY
|
||||
HLi3CeWr8voBAIczQ82BN6UDmnPzagEA92f6mwPLz1dVVeTVAQCO1LQ2B1Yh/PX8/PyD8moAAEdrupoD
|
||||
w76qiBfnRQcAjtMUNAeGW1LOz8sLAIzKBDcHXlOWZciLCQCM2gQ2B142Nzd3Sl48AGCjTEhz4H7X+wFg
|
||||
k425OfDWqqh+Pi8KALDJtqWDgDemHfKBoR30hqUJ8dqY5PcHAMalKcrnpJ3z94Z31qNO+/t+1/sBYIKk
|
||||
k/LT6hD+Mu2oR/4rgXTW/+X02r+U3woAmDTtz/GaIv5F2nH/ZHhHfpS5J+Vf01n/S9LLbhu8OgAw0dpb
|
||||
8TYL5XPTmfvb0o78v/MOvWtHvybtzXzKT1Qx/n5d1wv5pQCAaXXvAUFRLLXd+3WMFzZF+cKUl7X/rIri
|
||||
gsWFhbn8RwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
||||
AAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
68
SCrawler/Editors/SiteSelectionForm.vb
Normal file
68
SCrawler/Editors/SiteSelectionForm.vb
Normal file
@@ -0,0 +1,68 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports PersonalUtilities.Forms
|
||||
Imports PersonalUtilities.Forms.Toolbars
|
||||
Imports PersonalUtilities.Forms.Controls.Base
|
||||
Namespace Editors
|
||||
Friend Class SiteSelectionForm : Implements IOkCancelToolbar
|
||||
Private ReadOnly MyDefs As DefaultFormProps
|
||||
Friend ReadOnly Property SelectedSites As List(Of Sites)
|
||||
Friend Sub New(ByVal s As List(Of Sites))
|
||||
InitializeComponent()
|
||||
SelectedSites.ListAddList(s)
|
||||
If SelectedSites Is Nothing Then SelectedSites = New List(Of Sites)
|
||||
MyDefs = New DefaultFormProps
|
||||
End Sub
|
||||
Private Sub SiteSelectionForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||
With MyDefs
|
||||
.MyViewInitialize(Me, Settings.Design, True)
|
||||
.DelegateClosingChecker()
|
||||
.AddOkCancelToolbar()
|
||||
CMB_SITES.BeginUpdate()
|
||||
CMB_SITES.Items.AddRange({New ListItem({Sites.Reddit.ToString, CInt(Sites.Reddit)}),
|
||||
New ListItem({Sites.Twitter.ToString, CInt(Sites.Twitter)}),
|
||||
New ListItem({Sites.Instagram.ToString, CInt(Sites.Instagram)})})
|
||||
Dim l As New List(Of Integer)
|
||||
If SelectedSites.Count > 0 Then
|
||||
If SelectedSites.Contains(Sites.Reddit) Then l.Add(0)
|
||||
If SelectedSites.Contains(Sites.Twitter) Then l.Add(1)
|
||||
If SelectedSites.Contains(Sites.Instagram) Then l.Add(2)
|
||||
End If
|
||||
CMB_SITES.EndUpdate()
|
||||
If l.Count > 0 Then CMB_SITES.ListCheckedIndexes = l : l.Clear()
|
||||
.EndLoaderOperations()
|
||||
.MyOkCancel.EnableOK = True
|
||||
End With
|
||||
End Sub
|
||||
Private Sub SiteSelectionForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||
SelectedSites.Clear()
|
||||
End Sub
|
||||
Public Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
||||
Try
|
||||
SelectedSites.Clear()
|
||||
Dim l As List(Of Integer) = CMB_SITES.ListCheckedIndexes
|
||||
If l.ListExists Then
|
||||
For Each i% In l
|
||||
Select Case i
|
||||
Case 0 : SelectedSites.Add(Sites.Reddit)
|
||||
Case 1 : SelectedSites.Add(Sites.Twitter)
|
||||
Case 2 : SelectedSites.Add(Sites.Instagram)
|
||||
End Select
|
||||
Next
|
||||
End If
|
||||
MyDefs.CloseForm()
|
||||
Catch ex As Exception
|
||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex)
|
||||
End Try
|
||||
End Sub
|
||||
Public Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
||||
MyDefs.CloseForm(DialogResult.Cancel)
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
@@ -1,92 +0,0 @@
|
||||
' Copyright (C) 2022 Andy
|
||||
' This program is free software: you can redistribute it and/or modify
|
||||
' it under the terms of the GNU General Public License as published by
|
||||
' the Free Software Foundation, either version 3 of the License, or
|
||||
' (at your option) any later version.
|
||||
'
|
||||
' This program is distributed in the hope that it will be useful,
|
||||
' but WITHOUT ANY WARRANTY
|
||||
Imports PersonalUtilities.Forms
|
||||
Imports PersonalUtilities.Forms.Controls
|
||||
Imports PersonalUtilities.Forms.Controls.Base
|
||||
Imports PersonalUtilities.Forms.Toolbars
|
||||
Imports PersonalUtilities.Tools.WEB
|
||||
Namespace Editors
|
||||
Friend Class TwitterEditorForm : Implements IOkCancelToolbar
|
||||
Private ReadOnly MyDefs As DefaultFormProps(Of FieldsChecker)
|
||||
Friend Sub New()
|
||||
InitializeComponent()
|
||||
MyDefs = New DefaultFormProps(Of FieldsChecker)
|
||||
End Sub
|
||||
Private Sub TwitterEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||
Try
|
||||
With MyDefs
|
||||
.MyViewInitialize(Me, Settings.Design, True)
|
||||
.AddOkCancelToolbar()
|
||||
.DelegateClosingChecker()
|
||||
With Settings.Site(Sites.Twitter)
|
||||
TXT_PATH.Text = .Path
|
||||
With .Responser
|
||||
If .Cookies Is Nothing Then .Cookies = New CookieKeeper(.CookiesDomain)
|
||||
SetCookieText()
|
||||
TXT_TOKEN.Text = .Headers(API.Base.SiteSettings.Header_Twitter_Token)
|
||||
TXT_AUTH.Text = .Headers(API.Base.SiteSettings.Header_Twitter_Authorization)
|
||||
End With
|
||||
End With
|
||||
.MyFieldsChecker = New FieldsChecker
|
||||
With .MyFieldsChecker
|
||||
.AddControl(Of String)(TXT_TOKEN, TXT_TOKEN.CaptionText)
|
||||
.AddControl(Of String)(TXT_AUTH, TXT_AUTH.CaptionText)
|
||||
.EndLoaderOperations()
|
||||
End With
|
||||
TextBoxExtended.SetFalseDetector(Me, True, AddressOf .Detector)
|
||||
.EndLoaderOperations()
|
||||
End With
|
||||
Catch ex As Exception
|
||||
MyDefs.InvokeLoaderError(ex)
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
||||
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
||||
With Settings.Site(Sites.Twitter)
|
||||
If TXT_PATH.IsEmptyString Then .Path = Nothing Else .Path = TXT_PATH.Text
|
||||
With .Responser
|
||||
.Headers(API.Base.SiteSettings.Header_Twitter_Token) = TXT_TOKEN.Text
|
||||
.Headers(API.Base.SiteSettings.Header_Twitter_Authorization) = TXT_AUTH.Text
|
||||
End With
|
||||
.Update()
|
||||
End With
|
||||
MyDefs.CloseForm()
|
||||
End If
|
||||
End Sub
|
||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
||||
MyDefs.CloseForm(DialogResult.Cancel)
|
||||
End Sub
|
||||
Private Sub TXT_PATH_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_PATH.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then
|
||||
Dim f As SFile = SFile.SelectPath(Settings.Site(Sites.Twitter).Path)
|
||||
If Not f.IsEmptyString Then TXT_PATH.Text = f
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_COOKIES_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_COOKIES.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Edit Then
|
||||
Using f As New CookieListForm(Settings.Site(Sites.Twitter).Responser.Cookies) : f.ShowDialog() : End Using
|
||||
SetCookieText()
|
||||
End If
|
||||
End Sub
|
||||
Private Sub TXT_COOKIES_ActionOnButtonClearClick() Handles TXT_COOKIES.ActionOnButtonClearClick
|
||||
With Settings.Site(Sites.Twitter).Responser
|
||||
If Not .Cookies Is Nothing Then .Cookies.Dispose()
|
||||
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||
End With
|
||||
SetCookieText()
|
||||
End Sub
|
||||
Private Sub SetCookieText()
|
||||
Dim c% = 0
|
||||
With Settings.Site(Sites.Twitter).Responser
|
||||
If Not .Cookies Is Nothing Then c = .Cookies.Count
|
||||
End With
|
||||
TXT_COOKIES.Text = $"{c} cookies"
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
123
SCrawler/Editors/UserCreatorForm.Designer.vb
generated
123
SCrawler/Editors/UserCreatorForm.Designer.vb
generated
@@ -24,11 +24,14 @@
|
||||
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 TP_DOWN_OPTIONS 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 TT_MAIN As System.Windows.Forms.ToolTip
|
||||
Me.TXT_USER = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.OPT_REDDIT = New System.Windows.Forms.RadioButton()
|
||||
Me.OPT_TWITTER = New System.Windows.Forms.RadioButton()
|
||||
Me.CH_IS_CHANNEL = New System.Windows.Forms.CheckBox()
|
||||
Me.OPT_INSTAGRAM = New System.Windows.Forms.RadioButton()
|
||||
Me.CH_TEMP = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_FAV = New System.Windows.Forms.CheckBox()
|
||||
Me.CH_PARSE_USER_MEDIA = New System.Windows.Forms.CheckBox()
|
||||
@@ -41,6 +44,7 @@
|
||||
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.TXT_SPEC_FOLDER = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||
TP_SITE = New System.Windows.Forms.TableLayoutPanel()
|
||||
@@ -58,6 +62,7 @@
|
||||
Me.TP_ADD_BY_LIST.SuspendLayout()
|
||||
CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
TP_DOWN_OPTIONS.SuspendLayout()
|
||||
CType(Me.TXT_SPEC_FOLDER, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||
Me.CONTAINER_MAIN.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
@@ -68,18 +73,20 @@
|
||||
TP_MAIN.ColumnCount = 1
|
||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_MAIN.Controls.Add(Me.TXT_USER, 0, 0)
|
||||
TP_MAIN.Controls.Add(TP_SITE, 0, 2)
|
||||
TP_MAIN.Controls.Add(TP_PARAMS, 0, 3)
|
||||
TP_MAIN.Controls.Add(TP_OTHER, 0, 5)
|
||||
TP_MAIN.Controls.Add(Me.TXT_DESCR, 0, 8)
|
||||
TP_MAIN.Controls.Add(TP_SITE, 0, 3)
|
||||
TP_MAIN.Controls.Add(TP_PARAMS, 0, 4)
|
||||
TP_MAIN.Controls.Add(TP_OTHER, 0, 6)
|
||||
TP_MAIN.Controls.Add(Me.TXT_DESCR, 0, 9)
|
||||
TP_MAIN.Controls.Add(Me.TXT_USER_FRIENDLY, 0, 1)
|
||||
TP_MAIN.Controls.Add(Me.TP_ADD_BY_LIST, 0, 6)
|
||||
TP_MAIN.Controls.Add(Me.TXT_LABELS, 0, 7)
|
||||
TP_MAIN.Controls.Add(TP_DOWN_OPTIONS, 0, 4)
|
||||
TP_MAIN.Controls.Add(Me.TP_ADD_BY_LIST, 0, 7)
|
||||
TP_MAIN.Controls.Add(Me.TXT_LABELS, 0, 8)
|
||||
TP_MAIN.Controls.Add(TP_DOWN_OPTIONS, 0, 5)
|
||||
TP_MAIN.Controls.Add(Me.TXT_SPEC_FOLDER, 0, 2)
|
||||
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
TP_MAIN.Name = "TP_MAIN"
|
||||
TP_MAIN.RowCount = 9
|
||||
TP_MAIN.RowCount = 10
|
||||
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, 16.66708!))
|
||||
@@ -89,7 +96,7 @@
|
||||
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.Size = New System.Drawing.Size(454, 403)
|
||||
TP_MAIN.Size = New System.Drawing.Size(454, 431)
|
||||
TP_MAIN.TabIndex = 0
|
||||
'
|
||||
'TXT_USER
|
||||
@@ -106,21 +113,23 @@
|
||||
'TP_SITE
|
||||
'
|
||||
TP_SITE.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||
TP_SITE.ColumnCount = 3
|
||||
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.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
|
||||
TP_SITE.ColumnCount = 4
|
||||
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_SITE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.0!))
|
||||
TP_SITE.Controls.Add(Me.OPT_REDDIT, 0, 0)
|
||||
TP_SITE.Controls.Add(Me.OPT_TWITTER, 2, 0)
|
||||
TP_SITE.Controls.Add(Me.CH_IS_CHANNEL, 1, 0)
|
||||
TP_SITE.Controls.Add(Me.OPT_INSTAGRAM, 3, 0)
|
||||
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, 88)
|
||||
TP_SITE.Margin = New System.Windows.Forms.Padding(0)
|
||||
TP_SITE.Name = "TP_SITE"
|
||||
TP_SITE.RowCount = 1
|
||||
TP_SITE.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||
TP_SITE.Size = New System.Drawing.Size(452, 31)
|
||||
TP_SITE.TabIndex = 2
|
||||
TP_SITE.TabIndex = 3
|
||||
'
|
||||
'OPT_REDDIT
|
||||
'
|
||||
@@ -128,7 +137,7 @@
|
||||
Me.OPT_REDDIT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.OPT_REDDIT.Location = New System.Drawing.Point(4, 4)
|
||||
Me.OPT_REDDIT.Name = "OPT_REDDIT"
|
||||
Me.OPT_REDDIT.Size = New System.Drawing.Size(143, 23)
|
||||
Me.OPT_REDDIT.Size = New System.Drawing.Size(105, 23)
|
||||
Me.OPT_REDDIT.TabIndex = 0
|
||||
Me.OPT_REDDIT.TabStop = True
|
||||
Me.OPT_REDDIT.Text = "Reddit"
|
||||
@@ -138,9 +147,9 @@
|
||||
'
|
||||
Me.OPT_TWITTER.AutoSize = True
|
||||
Me.OPT_TWITTER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.OPT_TWITTER.Location = New System.Drawing.Point(304, 4)
|
||||
Me.OPT_TWITTER.Location = New System.Drawing.Point(228, 4)
|
||||
Me.OPT_TWITTER.Name = "OPT_TWITTER"
|
||||
Me.OPT_TWITTER.Size = New System.Drawing.Size(144, 23)
|
||||
Me.OPT_TWITTER.Size = New System.Drawing.Size(105, 23)
|
||||
Me.OPT_TWITTER.TabIndex = 1
|
||||
Me.OPT_TWITTER.TabStop = True
|
||||
Me.OPT_TWITTER.Text = "Twitter"
|
||||
@@ -150,13 +159,25 @@
|
||||
'
|
||||
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.Location = New System.Drawing.Point(116, 4)
|
||||
Me.CH_IS_CHANNEL.Name = "CH_IS_CHANNEL"
|
||||
Me.CH_IS_CHANNEL.Size = New System.Drawing.Size(143, 23)
|
||||
Me.CH_IS_CHANNEL.Size = New System.Drawing.Size(105, 23)
|
||||
Me.CH_IS_CHANNEL.TabIndex = 2
|
||||
Me.CH_IS_CHANNEL.Text = "Channel"
|
||||
Me.CH_IS_CHANNEL.UseVisualStyleBackColor = True
|
||||
'
|
||||
'OPT_INSTAGRAM
|
||||
'
|
||||
Me.OPT_INSTAGRAM.AutoSize = True
|
||||
Me.OPT_INSTAGRAM.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.OPT_INSTAGRAM.Location = New System.Drawing.Point(340, 4)
|
||||
Me.OPT_INSTAGRAM.Name = "OPT_INSTAGRAM"
|
||||
Me.OPT_INSTAGRAM.Size = New System.Drawing.Size(108, 23)
|
||||
Me.OPT_INSTAGRAM.TabIndex = 3
|
||||
Me.OPT_INSTAGRAM.TabStop = True
|
||||
Me.OPT_INSTAGRAM.Text = "Instagram"
|
||||
Me.OPT_INSTAGRAM.UseVisualStyleBackColor = True
|
||||
'
|
||||
'TP_PARAMS
|
||||
'
|
||||
TP_PARAMS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||
@@ -166,14 +187,14 @@
|
||||
TP_PARAMS.Controls.Add(Me.CH_TEMP, 0, 0)
|
||||
TP_PARAMS.Controls.Add(Me.CH_FAV, 1, 0)
|
||||
TP_PARAMS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_PARAMS.Location = New System.Drawing.Point(1, 91)
|
||||
TP_PARAMS.Location = New System.Drawing.Point(1, 120)
|
||||
TP_PARAMS.Margin = New System.Windows.Forms.Padding(0)
|
||||
TP_PARAMS.Name = "TP_PARAMS"
|
||||
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.Absolute, 30.0!))
|
||||
TP_PARAMS.Size = New System.Drawing.Size(452, 31)
|
||||
TP_PARAMS.TabIndex = 3
|
||||
TP_PARAMS.TabIndex = 4
|
||||
'
|
||||
'CH_TEMP
|
||||
'
|
||||
@@ -206,14 +227,14 @@
|
||||
TP_OTHER.Controls.Add(Me.CH_PARSE_USER_MEDIA, 1, 0)
|
||||
TP_OTHER.Controls.Add(Me.CH_READY_FOR_DOWN, 0, 0)
|
||||
TP_OTHER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
TP_OTHER.Location = New System.Drawing.Point(1, 155)
|
||||
TP_OTHER.Location = New System.Drawing.Point(1, 184)
|
||||
TP_OTHER.Margin = New System.Windows.Forms.Padding(0)
|
||||
TP_OTHER.Name = "TP_OTHER"
|
||||
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.Absolute, 30.0!))
|
||||
TP_OTHER.Size = New System.Drawing.Size(452, 31)
|
||||
TP_OTHER.TabIndex = 5
|
||||
TP_OTHER.TabIndex = 6
|
||||
'
|
||||
'CH_PARSE_USER_MEDIA
|
||||
'
|
||||
@@ -253,11 +274,11 @@
|
||||
Me.TXT_DESCR.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_DESCR.GroupBoxed = True
|
||||
Me.TXT_DESCR.GroupBoxText = "Description"
|
||||
Me.TXT_DESCR.Location = New System.Drawing.Point(4, 254)
|
||||
Me.TXT_DESCR.Location = New System.Drawing.Point(4, 282)
|
||||
Me.TXT_DESCR.Multiline = True
|
||||
Me.TXT_DESCR.Name = "TXT_DESCR"
|
||||
Me.TXT_DESCR.Size = New System.Drawing.Size(446, 145)
|
||||
Me.TXT_DESCR.TabIndex = 8
|
||||
Me.TXT_DESCR.TabIndex = 9
|
||||
'
|
||||
'TXT_USER_FRIENDLY
|
||||
'
|
||||
@@ -278,13 +299,13 @@
|
||||
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.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TP_ADD_BY_LIST.Location = New System.Drawing.Point(1, 187)
|
||||
Me.TP_ADD_BY_LIST.Location = New System.Drawing.Point(1, 216)
|
||||
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.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.Size = New System.Drawing.Size(452, 31)
|
||||
Me.TP_ADD_BY_LIST.TabIndex = 6
|
||||
Me.TP_ADD_BY_LIST.Size = New System.Drawing.Size(452, 30)
|
||||
Me.TP_ADD_BY_LIST.TabIndex = 7
|
||||
'
|
||||
'CH_ADD_BY_LIST
|
||||
'
|
||||
@@ -292,7 +313,7 @@
|
||||
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.Name = "CH_ADD_BY_LIST"
|
||||
Me.CH_ADD_BY_LIST.Size = New System.Drawing.Size(218, 23)
|
||||
Me.CH_ADD_BY_LIST.Size = New System.Drawing.Size(218, 22)
|
||||
Me.CH_ADD_BY_LIST.TabIndex = 0
|
||||
Me.CH_ADD_BY_LIST.Text = "Add by list"
|
||||
Me.CH_ADD_BY_LIST.UseVisualStyleBackColor = True
|
||||
@@ -303,7 +324,7 @@
|
||||
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.Name = "CH_AUTO_DETECT_SITE"
|
||||
Me.CH_AUTO_DETECT_SITE.Size = New System.Drawing.Size(219, 23)
|
||||
Me.CH_AUTO_DETECT_SITE.Size = New System.Drawing.Size(219, 22)
|
||||
Me.CH_AUTO_DETECT_SITE.TabIndex = 1
|
||||
Me.CH_AUTO_DETECT_SITE.Text = "Auto detect site"
|
||||
Me.CH_AUTO_DETECT_SITE.UseVisualStyleBackColor = True
|
||||
@@ -321,10 +342,10 @@
|
||||
Me.TXT_LABELS.CaptionText = "Labels"
|
||||
Me.TXT_LABELS.CaptionWidth = 50.0R
|
||||
Me.TXT_LABELS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_LABELS.Location = New System.Drawing.Point(4, 222)
|
||||
Me.TXT_LABELS.Location = New System.Drawing.Point(4, 250)
|
||||
Me.TXT_LABELS.Name = "TXT_LABELS"
|
||||
Me.TXT_LABELS.Size = New System.Drawing.Size(446, 22)
|
||||
Me.TXT_LABELS.TabIndex = 7
|
||||
Me.TXT_LABELS.TabIndex = 8
|
||||
Me.TXT_LABELS.TextBoxReadOnly = True
|
||||
'
|
||||
'TP_DOWN_OPTIONS
|
||||
@@ -336,14 +357,14 @@
|
||||
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.Location = New System.Drawing.Point(1, 152)
|
||||
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
|
||||
TP_DOWN_OPTIONS.TabIndex = 5
|
||||
'
|
||||
'CH_DOWN_IMAGES
|
||||
'
|
||||
@@ -367,19 +388,38 @@
|
||||
Me.CH_DOWN_VIDEOS.Text = "Download videos"
|
||||
Me.CH_DOWN_VIDEOS.UseVisualStyleBackColor = True
|
||||
'
|
||||
'TXT_SPEC_FOLDER
|
||||
'
|
||||
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton4.Index = 0
|
||||
ActionButton4.Name = "BTT_OPEN"
|
||||
ActionButton4.ToolTipText = "Select a new path in the folder selection dialog"
|
||||
ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
|
||||
ActionButton5.Index = 1
|
||||
ActionButton5.Name = "BTT_CLEAR"
|
||||
ActionButton5.ToolTipText = "Clear"
|
||||
Me.TXT_SPEC_FOLDER.Buttons.Add(ActionButton4)
|
||||
Me.TXT_SPEC_FOLDER.Buttons.Add(ActionButton5)
|
||||
Me.TXT_SPEC_FOLDER.CaptionText = "Special path"
|
||||
Me.TXT_SPEC_FOLDER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.TXT_SPEC_FOLDER.Location = New System.Drawing.Point(4, 62)
|
||||
Me.TXT_SPEC_FOLDER.Name = "TXT_SPEC_FOLDER"
|
||||
Me.TXT_SPEC_FOLDER.Size = New System.Drawing.Size(446, 22)
|
||||
Me.TXT_SPEC_FOLDER.TabIndex = 2
|
||||
'
|
||||
'CONTAINER_MAIN
|
||||
'
|
||||
'
|
||||
'CONTAINER_MAIN.ContentPanel
|
||||
'
|
||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(454, 403)
|
||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(454, 431)
|
||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(454, 403)
|
||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(454, 431)
|
||||
Me.CONTAINER_MAIN.TabIndex = 0
|
||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||
'
|
||||
@@ -387,15 +427,15 @@
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||
Me.ClientSize = New System.Drawing.Size(454, 403)
|
||||
Me.ClientSize = New System.Drawing.Size(454, 431)
|
||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.KeyPreview = True
|
||||
Me.MaximizeBox = False
|
||||
Me.MaximumSize = New System.Drawing.Size(470, 442)
|
||||
Me.MaximumSize = New System.Drawing.Size(470, 470)
|
||||
Me.MinimizeBox = False
|
||||
Me.MinimumSize = New System.Drawing.Size(470, 442)
|
||||
Me.MinimumSize = New System.Drawing.Size(470, 470)
|
||||
Me.Name = "UserCreatorForm"
|
||||
Me.ShowInTaskbar = False
|
||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||
@@ -415,6 +455,7 @@
|
||||
CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
TP_DOWN_OPTIONS.ResumeLayout(False)
|
||||
TP_DOWN_OPTIONS.PerformLayout()
|
||||
CType(Me.TXT_SPEC_FOLDER, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
||||
Me.CONTAINER_MAIN.PerformLayout()
|
||||
@@ -439,5 +480,7 @@
|
||||
Private WithEvents CH_DOWN_IMAGES As CheckBox
|
||||
Private WithEvents CH_DOWN_VIDEOS As CheckBox
|
||||
Private WithEvents CH_IS_CHANNEL As CheckBox
|
||||
Private WithEvents OPT_INSTAGRAM As RadioButton
|
||||
Private WithEvents TXT_SPEC_FOLDER As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||
End Class
|
||||
End Namespace
|
||||
@@ -166,6 +166,25 @@
|
||||
<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="ActionButton4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
||||
WQwhyWIyJIUW5NqyPb7oCVtIlhVTwYf8nv7/t2zJagel9KmqKsIACYL9RjI8UHz5zshougZr/AEvbxEP
|
||||
aZCDBY3VslixaJvX3wzkkDiOwbZtDRGA5vdNAg+TL27qgmt5XkBG/gTdAG7Gt+3PP9oOaEGFCVEC6rp+
|
||||
5g9MfM/c5e4OsEZMZkQEtGL5H2DdZ5JRArDwPA+iKII0TfkC9vroC9j5vq8JTWw3WzWgLMtZGIaa0MR8
|
||||
vlAD8PYlSaIJTTiOowY0p0Bc19XEJo6HE59FAPuMzyAINKGJ1XLFZxHALtMrnkBXOIQIIIQ8YvF/KrgB
|
||||
cMaRN0UdBBkAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="ActionButton5.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||
tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX
|
||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAkAMDAQAAAAAABoBgAAlgAAACAgEAAAAAAA6AIAAP4GAAAQEBAAAAAAACgBAADmCQAAMDAAAAEA
|
||||
|
||||
@@ -66,16 +66,29 @@ Namespace Editors
|
||||
Return TXT_USER_FRIENDLY.Text
|
||||
End Get
|
||||
End Property
|
||||
Private ReadOnly _SpecPathPattern As New RegexStructure("\w:\\.*", True, False,,,,, String.Empty, EDP.ReturnValue)
|
||||
Private ReadOnly Property SpecialPath(ByVal s As Sites) As SFile
|
||||
Get
|
||||
If TXT_SPEC_FOLDER.IsEmptyString Then
|
||||
Return Nothing
|
||||
Else
|
||||
If Not CStr(RegexReplace(TXT_SPEC_FOLDER.Text, _SpecPathPattern)).IsEmptyString Then
|
||||
Return $"{TXT_SPEC_FOLDER.Text}\"
|
||||
Else
|
||||
Return $"{Settings(s).Path.PathWithSeparator}{TXT_SPEC_FOLDER.Text}\"
|
||||
End If
|
||||
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
Friend ReadOnly Property UserLabels As List(Of String)
|
||||
''' <summary>Create new user</summary>
|
||||
Friend Sub New()
|
||||
InitializeComponent()
|
||||
UserLabels = New List(Of String)
|
||||
MyDef = New DefaultFormProps(Of FieldsChecker)
|
||||
End Sub
|
||||
Friend Sub New(ByVal _User As UserInfo)
|
||||
Me.New
|
||||
User = _User
|
||||
End Sub
|
||||
''' <summary>Edit exist user</summary>
|
||||
Friend Sub New(ByVal _Instance As IUserData)
|
||||
Me.New
|
||||
If Not _Instance Is Nothing Then
|
||||
@@ -92,6 +105,7 @@ Namespace Editors
|
||||
If User.Name.IsEmptyString Then
|
||||
OPT_REDDIT.Checked = False
|
||||
OPT_TWITTER.Checked = False
|
||||
OPT_INSTAGRAM.Checked = False
|
||||
CH_PARSE_USER_MEDIA.Enabled = False
|
||||
CH_READY_FOR_DOWN.Checked = True
|
||||
CH_TEMP.Checked = Settings.DefaultTemporary
|
||||
@@ -100,16 +114,22 @@ Namespace Editors
|
||||
Else
|
||||
TP_ADD_BY_LIST.Enabled = False
|
||||
TXT_USER.Text = User.Name
|
||||
TXT_SPEC_FOLDER.Text = User.SpecialPath
|
||||
Select Case User.Site
|
||||
Case Sites.Reddit : OPT_REDDIT.Checked = True : CH_PARSE_USER_MEDIA.Enabled = False
|
||||
Case Sites.Twitter : OPT_TWITTER.Checked = True
|
||||
Case Sites.Instagram : OPT_INSTAGRAM.Checked = True
|
||||
End Select
|
||||
OPT_REDDIT.Enabled = False
|
||||
OPT_TWITTER.Enabled = False
|
||||
OPT_INSTAGRAM.Enabled = False
|
||||
CH_IS_CHANNEL.Checked = User.IsChannel
|
||||
CH_IS_CHANNEL.Enabled = False
|
||||
If Not UserInstance Is Nothing Then
|
||||
TXT_USER.Enabled = False
|
||||
TXT_SPEC_FOLDER.TextBoxReadOnly = True
|
||||
TXT_SPEC_FOLDER.Buttons.Clear()
|
||||
TXT_SPEC_FOLDER.Buttons.UpdateButtonsPositions()
|
||||
With UserInstance
|
||||
TXT_USER_FRIENDLY.Text = .FriendlyName
|
||||
CH_FAV.Checked = .Favorite
|
||||
@@ -154,14 +174,24 @@ Namespace Editors
|
||||
Private Sub UserCreatorForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||
UserLabels.Clear()
|
||||
End Sub
|
||||
Private Function GetSiteByCheckers() As Sites
|
||||
Select Case True
|
||||
Case OPT_REDDIT.Checked : Return Sites.Reddit
|
||||
Case OPT_TWITTER.Checked : Return Sites.Twitter
|
||||
Case OPT_INSTAGRAM.Checked : Return Sites.Instagram
|
||||
Case Else : Return Sites.Undefined
|
||||
End Select
|
||||
End Function
|
||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
||||
If Not CH_ADD_BY_LIST.Checked Then
|
||||
If MyDef.MyFieldsChecker.AllParamsOK Then
|
||||
If OPT_REDDIT.Checked Or OPT_TWITTER.Checked Then
|
||||
Dim s As Sites = GetSiteByCheckers()
|
||||
If Not s = Sites.Undefined Then
|
||||
Dim tmpUser As UserInfo = User.Clone
|
||||
With tmpUser
|
||||
.Name = TXT_USER.Text
|
||||
.Site = IIf(OPT_REDDIT.Checked, Sites.Reddit, Sites.Twitter)
|
||||
.SpecialPath = SpecialPath(s)
|
||||
.Site = s
|
||||
.IsChannel = CH_IS_CHANNEL.Checked
|
||||
.UpdateUserFile()
|
||||
End With
|
||||
@@ -208,6 +238,7 @@ CloseForm:
|
||||
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 ReadOnly InstagramRegEx As New RegexStructure("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1)
|
||||
Private _TextChangeInvoked As Boolean = False
|
||||
Private Sub TXT_USER_ActionOnTextChange() Handles TXT_USER.ActionOnTextChange
|
||||
Try
|
||||
@@ -218,7 +249,8 @@ CloseForm:
|
||||
Select Case s(0)
|
||||
Case Sites.Twitter : OPT_TWITTER.Checked = True
|
||||
Case Sites.Reddit : OPT_REDDIT.Checked = True
|
||||
Case Else : OPT_TWITTER.Checked = False : OPT_REDDIT.Checked = False
|
||||
Case Sites.Instagram : OPT_INSTAGRAM.Checked = True
|
||||
Case Else : OPT_TWITTER.Checked = False : OPT_REDDIT.Checked = False : OPT_INSTAGRAM.Checked = False
|
||||
End Select
|
||||
CH_IS_CHANNEL.Checked = CBool(s(1))
|
||||
End If
|
||||
@@ -235,6 +267,8 @@ CloseForm:
|
||||
Return {Sites.Reddit, False}
|
||||
ElseIf CheckRegex(TXT, RedditChannelRegEx1) OrElse CheckRegex(TXT, RedditChannelRegEx2) Then
|
||||
Return {Sites.Reddit, True}
|
||||
ElseIf CheckRegex(TXT, InstagramRegEx) Then
|
||||
Return {Sites.Instagram, False}
|
||||
End If
|
||||
End If
|
||||
Return {Sites.Undefined, False}
|
||||
@@ -249,6 +283,17 @@ CloseForm:
|
||||
Private Sub OPT_TWITTER_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_TWITTER.CheckedChanged
|
||||
If OPT_TWITTER.Checked Then CH_IS_CHANNEL.Checked = False : CH_IS_CHANNEL.Enabled = False : SetParamsBySite()
|
||||
End Sub
|
||||
Private Sub OPT_INSTAGRAM_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_INSTAGRAM.CheckedChanged
|
||||
If OPT_INSTAGRAM.Checked Then CH_IS_CHANNEL.Checked = False : CH_IS_CHANNEL.Enabled = False : SetParamsBySite()
|
||||
End Sub
|
||||
Private Sub TXT_SPEC_FOLDER_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_SPEC_FOLDER.ActionOnButtonClick
|
||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then
|
||||
Dim f As SFile = Nothing
|
||||
If Not TXT_SPEC_FOLDER.Text.IsEmptyString Then f = $"{TXT_SPEC_FOLDER.Text}\"
|
||||
f = SFile.SelectPath(f, True)
|
||||
If Not f.IsEmptyString Then TXT_SPEC_FOLDER.Text = f.PathWithSeparator
|
||||
End If
|
||||
End Sub
|
||||
Private Sub CH_TEMP_CheckedChanged(sender As Object, e As EventArgs) Handles CH_TEMP.CheckedChanged
|
||||
If CH_TEMP.Checked Then CH_FAV.Checked = False : CH_READY_FOR_DOWN.Checked = False
|
||||
End Sub
|
||||
@@ -256,27 +301,17 @@ CloseForm:
|
||||
If CH_FAV.Checked Then CH_TEMP.Checked = False
|
||||
End Sub
|
||||
Private Sub SetParamsBySite()
|
||||
Dim s As Sites = Sites.Undefined
|
||||
Select Case True
|
||||
Case OPT_REDDIT.Checked : s = Sites.Reddit
|
||||
Case OPT_TWITTER.Checked : s = Sites.Twitter
|
||||
End Select
|
||||
With Settings
|
||||
Select Case s
|
||||
Case Sites.Reddit
|
||||
CH_TEMP.Checked = .RedditTemporary
|
||||
CH_DOWN_IMAGES.Checked = .RedditDownloadImages
|
||||
CH_DOWN_VIDEOS.Checked = .RedditDownloadVideos
|
||||
CH_PARSE_USER_MEDIA.Checked = False
|
||||
CH_PARSE_USER_MEDIA.Enabled = False
|
||||
Case Sites.Twitter
|
||||
CH_TEMP.Checked = .TwitterTemporary
|
||||
CH_DOWN_IMAGES.Checked = .TwitterDownloadImages
|
||||
CH_DOWN_VIDEOS.Checked = .TwitterDownloadVideos
|
||||
CH_PARSE_USER_MEDIA.Enabled = True
|
||||
CH_PARSE_USER_MEDIA.Checked = .TwitterDefaultGetUserMedia
|
||||
End Select
|
||||
Dim s As Sites = GetSiteByCheckers()
|
||||
If Not s = Sites.Undefined Then
|
||||
With Settings(s)
|
||||
CH_TEMP.Checked = .Temporary
|
||||
CH_DOWN_IMAGES.Checked = .DownloadImages
|
||||
CH_DOWN_VIDEOS.Checked = .DownloadVideos
|
||||
CH_PARSE_USER_MEDIA.Checked = s = Sites.Twitter AndAlso .GetUserMediaOnly.Value
|
||||
CH_PARSE_USER_MEDIA.Enabled = s = Sites.Twitter
|
||||
CH_READY_FOR_DOWN.Checked = Not CH_TEMP.Checked
|
||||
End With
|
||||
End If
|
||||
End Sub
|
||||
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
|
||||
@@ -295,6 +330,7 @@ CloseForm:
|
||||
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_TWITTER.Enabled = Not CH_AUTO_DETECT_SITE.Checked
|
||||
OPT_INSTAGRAM.Enabled = Not CH_AUTO_DETECT_SITE.Checked
|
||||
CH_IS_CHANNEL.Enabled = Not CH_AUTO_DETECT_SITE.Checked
|
||||
End Sub
|
||||
Private Function CreateUsersByList() As Boolean
|
||||
@@ -308,18 +344,14 @@ CloseForm:
|
||||
Dim BannedUsers() As String = Nothing
|
||||
Dim uu$
|
||||
Dim tmpUser As UserInfo
|
||||
Dim s As Sites
|
||||
Dim s As Sites = GetSiteByCheckers()
|
||||
Dim sObj() As Object
|
||||
Dim _IsChannel As Boolean = CH_IS_CHANNEL.Checked
|
||||
Dim Added% = 0
|
||||
Dim Skipped% = 0
|
||||
Dim uid%
|
||||
|
||||
Select Case True
|
||||
Case OPT_REDDIT.Checked : s = Sites.Reddit
|
||||
Case OPT_TWITTER.Checked : s = Sites.Twitter
|
||||
Case Else : s = Sites.Undefined
|
||||
End Select
|
||||
Dim sf As Func(Of Sites, String) = Function(__s) SpecialPath(__s).PathWithSeparator
|
||||
Dim __sf As Func(Of String, Sites, SFile) = Function(Input, __s) IIf(sf(__s).IsEmptyString, Nothing, New SFile($"{sf(__s)}{Input}\"))
|
||||
|
||||
For i% = 0 To u.Count - 1
|
||||
uu = u(i)
|
||||
@@ -330,7 +362,7 @@ CloseForm:
|
||||
End If
|
||||
|
||||
If Not s = Sites.Undefined Then
|
||||
tmpUser = New UserInfo(uu, s) With {.IsChannel = _IsChannel}
|
||||
tmpUser = New UserInfo(uu, s,,, __sf(uu, s)) With {.IsChannel = _IsChannel}
|
||||
uid = -1
|
||||
If Settings.UsersList.Count > 0 Then uid = Settings.UsersList.IndexOf(tmpUser)
|
||||
If uid < 0 And Not UsersForCreate.Contains(tmpUser) Then
|
||||
|
||||
104
SCrawler/MainFrame.Designer.vb
generated
104
SCrawler/MainFrame.Designer.vb
generated
@@ -27,7 +27,6 @@ Partial Class MainFrame
|
||||
Dim SEP_2 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim CONTEXT_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim MENU_SETTINGS As System.Windows.Forms.ToolStripDropDownButton
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainFrame))
|
||||
Dim MENU_SETTINGS_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim SEP_3 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim CONTEXT_SEP_2 As System.Windows.Forms.ToolStripSeparator
|
||||
@@ -36,9 +35,12 @@ Partial Class MainFrame
|
||||
Dim CONTEXT_SEP_5 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim SEP_4 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim MENU_VIEW_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim MENU_VIEW_SEP_3 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim MENU_VIEW_SEP_2 As System.Windows.Forms.ToolStripSeparator
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainFrame))
|
||||
Me.BTT_SETTINGS_REDDIT = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SETTINGS_TWITTER = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SETTINGS_INSTAGRAM = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SETTINGS = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.Toolbar_TOP = New System.Windows.Forms.ToolStrip()
|
||||
Me.BTT_ADD_USER = New System.Windows.Forms.ToolStripButton()
|
||||
@@ -47,6 +49,7 @@ Partial Class MainFrame
|
||||
Me.BTT_REFRESH = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_SHOW_INFO = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_CHANNELS = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_DOWN_SAVED = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_DOWN_SELECTED = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_DOWN_ALL = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_DOWN_VIDEO = New System.Windows.Forms.ToolStripButton()
|
||||
@@ -55,6 +58,8 @@ Partial Class MainFrame
|
||||
Me.BTT_VIEW_LARGE = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_VIEW_SMALL = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_VIEW_LIST = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SITE_ALL = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SITE_SPECIFIC = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SHOW_ALL = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SHOW_REGULAR = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_SHOW_TEMP = New System.Windows.Forms.ToolStripMenuItem()
|
||||
@@ -65,6 +70,7 @@ Partial Class MainFrame
|
||||
Me.BTT_LOG = New System.Windows.Forms.ToolStripButton()
|
||||
Me.BTT_VERSION_INFO = New System.Windows.Forms.ToolStripButton()
|
||||
Me.Toolbar_BOTTOM = New System.Windows.Forms.StatusStrip()
|
||||
Me.PR_SAVED = New System.Windows.Forms.ToolStripProgressBar()
|
||||
Me.PR_MAIN = New System.Windows.Forms.ToolStripProgressBar()
|
||||
Me.LBL_JOBS_COUNT = New System.Windows.Forms.ToolStripStatusLabel()
|
||||
Me.LBL_STATUS = New System.Windows.Forms.ToolStripStatusLabel()
|
||||
@@ -76,14 +82,15 @@ Partial Class MainFrame
|
||||
Me.BTT_CONTEXT_DELETE = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_TEMP = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_READY = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_GROUPS = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_ADD_TO_COL = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_COL_MERGE = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_CHANGE_FOLDER = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CHANGE_IMAGE = 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_INFO = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.BTT_CONTEXT_READY = New System.Windows.Forms.ToolStripMenuItem()
|
||||
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||
@@ -96,6 +103,7 @@ Partial Class MainFrame
|
||||
CONTEXT_SEP_5 = New System.Windows.Forms.ToolStripSeparator()
|
||||
SEP_4 = New System.Windows.Forms.ToolStripSeparator()
|
||||
MENU_VIEW_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||
MENU_VIEW_SEP_3 = New System.Windows.Forms.ToolStripSeparator()
|
||||
MENU_VIEW_SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||
Me.Toolbar_TOP.SuspendLayout()
|
||||
Me.Toolbar_BOTTOM.SuspendLayout()
|
||||
@@ -120,9 +128,7 @@ Partial Class MainFrame
|
||||
'MENU_SETTINGS
|
||||
'
|
||||
MENU_SETTINGS.AutoToolTip = False
|
||||
MENU_SETTINGS.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
|
||||
MENU_SETTINGS.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_SETTINGS_REDDIT, Me.BTT_SETTINGS_TWITTER, MENU_SETTINGS_SEP_1, Me.BTT_SETTINGS})
|
||||
MENU_SETTINGS.Image = CType(resources.GetObject("MENU_SETTINGS.Image"), System.Drawing.Image)
|
||||
MENU_SETTINGS.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_SETTINGS_REDDIT, Me.BTT_SETTINGS_TWITTER, Me.BTT_SETTINGS_INSTAGRAM, MENU_SETTINGS_SEP_1, Me.BTT_SETTINGS})
|
||||
MENU_SETTINGS.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||
MENU_SETTINGS.Name = "MENU_SETTINGS"
|
||||
MENU_SETTINGS.Size = New System.Drawing.Size(62, 22)
|
||||
@@ -130,25 +136,35 @@ Partial Class MainFrame
|
||||
'
|
||||
'BTT_SETTINGS_REDDIT
|
||||
'
|
||||
Me.BTT_SETTINGS_REDDIT.Image = Global.SCrawler.My.Resources.Resources.RedditPic512
|
||||
Me.BTT_SETTINGS_REDDIT.Name = "BTT_SETTINGS_REDDIT"
|
||||
Me.BTT_SETTINGS_REDDIT.Size = New System.Drawing.Size(116, 22)
|
||||
Me.BTT_SETTINGS_REDDIT.Size = New System.Drawing.Size(127, 22)
|
||||
Me.BTT_SETTINGS_REDDIT.Text = "Reddit"
|
||||
'
|
||||
'BTT_SETTINGS_TWITTER
|
||||
'
|
||||
Me.BTT_SETTINGS_TWITTER.Image = Global.SCrawler.My.Resources.Resources.TwitterPic400
|
||||
Me.BTT_SETTINGS_TWITTER.Name = "BTT_SETTINGS_TWITTER"
|
||||
Me.BTT_SETTINGS_TWITTER.Size = New System.Drawing.Size(116, 22)
|
||||
Me.BTT_SETTINGS_TWITTER.Size = New System.Drawing.Size(127, 22)
|
||||
Me.BTT_SETTINGS_TWITTER.Text = "Twitter"
|
||||
'
|
||||
'BTT_SETTINGS_INSTAGRAM
|
||||
'
|
||||
Me.BTT_SETTINGS_INSTAGRAM.Image = Global.SCrawler.My.Resources.Resources.InstagramPic76
|
||||
Me.BTT_SETTINGS_INSTAGRAM.Name = "BTT_SETTINGS_INSTAGRAM"
|
||||
Me.BTT_SETTINGS_INSTAGRAM.Size = New System.Drawing.Size(127, 22)
|
||||
Me.BTT_SETTINGS_INSTAGRAM.Text = "Instagram"
|
||||
'
|
||||
'MENU_SETTINGS_SEP_1
|
||||
'
|
||||
MENU_SETTINGS_SEP_1.Name = "MENU_SETTINGS_SEP_1"
|
||||
MENU_SETTINGS_SEP_1.Size = New System.Drawing.Size(113, 6)
|
||||
MENU_SETTINGS_SEP_1.Size = New System.Drawing.Size(124, 6)
|
||||
'
|
||||
'BTT_SETTINGS
|
||||
'
|
||||
Me.BTT_SETTINGS.Image = Global.SCrawler.My.Resources.Resources.SettingsPic_16
|
||||
Me.BTT_SETTINGS.Name = "BTT_SETTINGS"
|
||||
Me.BTT_SETTINGS.Size = New System.Drawing.Size(116, 22)
|
||||
Me.BTT_SETTINGS.Size = New System.Drawing.Size(127, 22)
|
||||
Me.BTT_SETTINGS.Text = "Settings"
|
||||
'
|
||||
'SEP_3
|
||||
@@ -186,6 +202,11 @@ Partial Class MainFrame
|
||||
MENU_VIEW_SEP_1.Name = "MENU_VIEW_SEP_1"
|
||||
MENU_VIEW_SEP_1.Size = New System.Drawing.Size(141, 6)
|
||||
'
|
||||
'MENU_VIEW_SEP_3
|
||||
'
|
||||
MENU_VIEW_SEP_3.Name = "MENU_VIEW_SEP_3"
|
||||
MENU_VIEW_SEP_3.Size = New System.Drawing.Size(141, 6)
|
||||
'
|
||||
'MENU_VIEW_SEP_2
|
||||
'
|
||||
MENU_VIEW_SEP_2.Name = "MENU_VIEW_SEP_2"
|
||||
@@ -194,7 +215,7 @@ Partial Class MainFrame
|
||||
'Toolbar_TOP
|
||||
'
|
||||
Me.Toolbar_TOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
||||
Me.Toolbar_TOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {MENU_SETTINGS, SEP_1, Me.BTT_ADD_USER, Me.BTT_EDIT_USER, Me.BTT_DELETE_USER, Me.BTT_REFRESH, Me.BTT_SHOW_INFO, Me.BTT_CHANNELS, SEP_2, Me.BTT_DOWN_SELECTED, Me.BTT_DOWN_ALL, Me.BTT_DOWN_VIDEO, Me.BTT_DOWN_STOP, SEP_3, Me.MENU_VIEW, SEP_4, Me.BTT_LOG, Me.BTT_VERSION_INFO})
|
||||
Me.Toolbar_TOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {MENU_SETTINGS, SEP_1, Me.BTT_ADD_USER, Me.BTT_EDIT_USER, Me.BTT_DELETE_USER, Me.BTT_REFRESH, Me.BTT_SHOW_INFO, Me.BTT_CHANNELS, Me.BTT_DOWN_SAVED, SEP_2, Me.BTT_DOWN_SELECTED, Me.BTT_DOWN_ALL, Me.BTT_DOWN_VIDEO, Me.BTT_DOWN_STOP, SEP_3, Me.MENU_VIEW, SEP_4, Me.BTT_LOG, Me.BTT_VERSION_INFO})
|
||||
Me.Toolbar_TOP.Location = New System.Drawing.Point(0, 0)
|
||||
Me.Toolbar_TOP.Name = "Toolbar_TOP"
|
||||
Me.Toolbar_TOP.Size = New System.Drawing.Size(934, 25)
|
||||
@@ -247,12 +268,22 @@ Partial Class MainFrame
|
||||
'
|
||||
'BTT_CHANNELS
|
||||
'
|
||||
Me.BTT_CHANNELS.AutoToolTip = False
|
||||
Me.BTT_CHANNELS.Image = Global.SCrawler.My.Resources.Resources.RedditPic512
|
||||
Me.BTT_CHANNELS.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||
Me.BTT_CHANNELS.Name = "BTT_CHANNELS"
|
||||
Me.BTT_CHANNELS.Size = New System.Drawing.Size(76, 22)
|
||||
Me.BTT_CHANNELS.Text = "Channels"
|
||||
'
|
||||
'BTT_DOWN_SAVED
|
||||
'
|
||||
Me.BTT_DOWN_SAVED.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
|
||||
Me.BTT_DOWN_SAVED.Image = Global.SCrawler.My.Resources.Resources.BookmarkBlack_16
|
||||
Me.BTT_DOWN_SAVED.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||
Me.BTT_DOWN_SAVED.Name = "BTT_DOWN_SAVED"
|
||||
Me.BTT_DOWN_SAVED.Size = New System.Drawing.Size(23, 22)
|
||||
Me.BTT_DOWN_SAVED.ToolTipText = "Download Reddit saved posts"
|
||||
'
|
||||
'BTT_DOWN_SELECTED
|
||||
'
|
||||
Me.BTT_DOWN_SELECTED.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||
@@ -295,11 +326,11 @@ Partial Class MainFrame
|
||||
'
|
||||
Me.MENU_VIEW.AutoToolTip = False
|
||||
Me.MENU_VIEW.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
|
||||
Me.MENU_VIEW.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_VIEW_LARGE, Me.BTT_VIEW_SMALL, Me.BTT_VIEW_LIST, MENU_VIEW_SEP_1, Me.BTT_SHOW_ALL, Me.BTT_SHOW_REGULAR, Me.BTT_SHOW_TEMP, Me.BTT_SHOW_FAV, Me.BTT_SHOW_LABELS, Me.BTT_SHOW_NO_LABELS, MENU_VIEW_SEP_2, Me.BTT_SELECT_LABELS})
|
||||
Me.MENU_VIEW.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_VIEW_LARGE, Me.BTT_VIEW_SMALL, Me.BTT_VIEW_LIST, MENU_VIEW_SEP_1, Me.BTT_SITE_ALL, Me.BTT_SITE_SPECIFIC, MENU_VIEW_SEP_2, Me.BTT_SHOW_ALL, Me.BTT_SHOW_REGULAR, Me.BTT_SHOW_TEMP, Me.BTT_SHOW_FAV, Me.BTT_SHOW_LABELS, Me.BTT_SHOW_NO_LABELS, MENU_VIEW_SEP_3, Me.BTT_SELECT_LABELS})
|
||||
Me.MENU_VIEW.Image = CType(resources.GetObject("MENU_VIEW.Image"), System.Drawing.Image)
|
||||
Me.MENU_VIEW.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||
Me.MENU_VIEW.Name = "MENU_VIEW"
|
||||
Me.MENU_VIEW.Size = New System.Drawing.Size(45, 22)
|
||||
Me.MENU_VIEW.Size = New System.Drawing.Size(45, 19)
|
||||
Me.MENU_VIEW.Text = "View"
|
||||
'
|
||||
'BTT_VIEW_LARGE
|
||||
@@ -320,6 +351,18 @@ Partial Class MainFrame
|
||||
Me.BTT_VIEW_LIST.Size = New System.Drawing.Size(144, 22)
|
||||
Me.BTT_VIEW_LIST.Text = "List"
|
||||
'
|
||||
'BTT_SITE_ALL
|
||||
'
|
||||
Me.BTT_SITE_ALL.Name = "BTT_SITE_ALL"
|
||||
Me.BTT_SITE_ALL.Size = New System.Drawing.Size(144, 22)
|
||||
Me.BTT_SITE_ALL.Text = "All"
|
||||
'
|
||||
'BTT_SITE_SPECIFIC
|
||||
'
|
||||
Me.BTT_SITE_SPECIFIC.Name = "BTT_SITE_SPECIFIC"
|
||||
Me.BTT_SITE_SPECIFIC.Size = New System.Drawing.Size(144, 22)
|
||||
Me.BTT_SITE_SPECIFIC.Text = "Specific sites"
|
||||
'
|
||||
'BTT_SHOW_ALL
|
||||
'
|
||||
Me.BTT_SHOW_ALL.Name = "BTT_SHOW_ALL"
|
||||
@@ -385,12 +428,17 @@ Partial Class MainFrame
|
||||
'
|
||||
'Toolbar_BOTTOM
|
||||
'
|
||||
Me.Toolbar_BOTTOM.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.PR_MAIN, Me.LBL_JOBS_COUNT, Me.LBL_STATUS})
|
||||
Me.Toolbar_BOTTOM.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.PR_SAVED, Me.PR_MAIN, Me.LBL_JOBS_COUNT, Me.LBL_STATUS})
|
||||
Me.Toolbar_BOTTOM.Location = New System.Drawing.Point(0, 439)
|
||||
Me.Toolbar_BOTTOM.Name = "Toolbar_BOTTOM"
|
||||
Me.Toolbar_BOTTOM.Size = New System.Drawing.Size(934, 22)
|
||||
Me.Toolbar_BOTTOM.TabIndex = 2
|
||||
Me.Toolbar_BOTTOM.Text = "StatusStrip1"
|
||||
'
|
||||
'PR_SAVED
|
||||
'
|
||||
Me.PR_SAVED.Name = "PR_SAVED"
|
||||
Me.PR_SAVED.Size = New System.Drawing.Size(100, 16)
|
||||
Me.PR_SAVED.Visible = False
|
||||
'
|
||||
'PR_MAIN
|
||||
'
|
||||
@@ -423,7 +471,7 @@ Partial Class MainFrame
|
||||
'
|
||||
'USER_CONTEXT
|
||||
'
|
||||
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.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, Me.BTT_CONTEXT_CHANGE_FOLDER, 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.Size = New System.Drawing.Size(222, 364)
|
||||
'
|
||||
@@ -471,6 +519,12 @@ Partial Class MainFrame
|
||||
Me.BTT_CONTEXT_TEMP.Size = New System.Drawing.Size(221, 22)
|
||||
Me.BTT_CONTEXT_TEMP.Text = "Change temporary"
|
||||
'
|
||||
'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"
|
||||
'
|
||||
'BTT_CONTEXT_GROUPS
|
||||
'
|
||||
Me.BTT_CONTEXT_GROUPS.Name = "BTT_CONTEXT_GROUPS"
|
||||
@@ -490,6 +544,14 @@ Partial Class MainFrame
|
||||
Me.BTT_CONTEXT_COL_MERGE.Size = New System.Drawing.Size(221, 22)
|
||||
Me.BTT_CONTEXT_COL_MERGE.Text = "Merge collection files"
|
||||
'
|
||||
'BTT_CONTEXT_CHANGE_FOLDER
|
||||
'
|
||||
Me.BTT_CONTEXT_CHANGE_FOLDER.AutoToolTip = True
|
||||
Me.BTT_CONTEXT_CHANGE_FOLDER.Name = "BTT_CONTEXT_CHANGE_FOLDER"
|
||||
Me.BTT_CONTEXT_CHANGE_FOLDER.Size = New System.Drawing.Size(221, 22)
|
||||
Me.BTT_CONTEXT_CHANGE_FOLDER.Text = "Change folder"
|
||||
Me.BTT_CONTEXT_CHANGE_FOLDER.ToolTipText = "Change user data folder"
|
||||
'
|
||||
'BTT_CHANGE_IMAGE
|
||||
'
|
||||
Me.BTT_CHANGE_IMAGE.Image = Global.SCrawler.My.Resources.Resources.PicturePic_32
|
||||
@@ -518,12 +580,6 @@ Partial Class MainFrame
|
||||
Me.BTT_CONTEXT_INFO.Size = New System.Drawing.Size(221, 22)
|
||||
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
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
@@ -594,4 +650,10 @@ Partial Class MainFrame
|
||||
Private WithEvents BTT_VERSION_INFO As ToolStripButton
|
||||
Private WithEvents BTT_CONTEXT_DOWN_LIMITED As ToolStripMenuItem
|
||||
Private WithEvents BTT_CONTEXT_READY As ToolStripMenuItem
|
||||
Private WithEvents BTT_SETTINGS_INSTAGRAM As ToolStripMenuItem
|
||||
Private WithEvents BTT_SITE_ALL As ToolStripMenuItem
|
||||
Private WithEvents BTT_SITE_SPECIFIC As ToolStripMenuItem
|
||||
Private WithEvents BTT_CONTEXT_CHANGE_FOLDER As ToolStripMenuItem
|
||||
Private WithEvents PR_SAVED As ToolStripProgressBar
|
||||
Private WithEvents BTT_DOWN_SAVED As ToolStripButton
|
||||
End Class
|
||||
|
||||
@@ -132,22 +132,6 @@
|
||||
<metadata name="MENU_SETTINGS_SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="MENU_SETTINGS.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
|
||||
YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
|
||||
0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
|
||||
bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
|
||||
VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
|
||||
c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
|
||||
Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
|
||||
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
|
||||
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
|
||||
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="SEP_3.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
@@ -169,12 +153,16 @@
|
||||
<metadata name="MENU_VIEW_SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<metadata name="MENU_VIEW_SEP_3.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<metadata name="MENU_VIEW_SEP_2.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<metadata name="Toolbar_TOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>132, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="BTT_DOWN_VIDEO.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
|
||||
@@ -46,19 +46,30 @@ Public Class MainFrame
|
||||
MainProgress = New Toolbars.MyProgress(Toolbar_BOTTOM, PR_MAIN, LBL_STATUS) With {.DropCurrentProgressOnTotalChange = False}
|
||||
Dim gk$
|
||||
With LIST_PROFILES.Groups
|
||||
gk = GetLviGroupName(Sites.Undefined, False, False, True)
|
||||
'Collections
|
||||
gk = GetLviGroupName(Sites.Undefined, False, True, True, False)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
gk = GetLviGroupName(Sites.Undefined, False, True, True)
|
||||
gk = GetLviGroupName(Sites.Undefined, False, False, True, False)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
gk = GetLviGroupName(Sites.Undefined, True, False, True)
|
||||
gk = GetLviGroupName(Sites.Undefined, True, False, True, False)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
For Each s In {Sites.Reddit, Sites.Twitter}
|
||||
gk = GetLviGroupName(s, False, True, False)
|
||||
'Channels
|
||||
gk = GetLviGroupName(Sites.Undefined, False, True, False, True)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
gk = GetLviGroupName(s, False, False, False)
|
||||
gk = GetLviGroupName(Sites.Undefined, False, False, False, True)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
gk = GetLviGroupName(s, True, False, False)
|
||||
gk = GetLviGroupName(Sites.Undefined, True, False, False, True)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
'Sites
|
||||
For Each s As Sites In [Enum].GetValues(GetType(Sites))
|
||||
If Not s = Sites.Undefined Then
|
||||
gk = GetLviGroupName(s, False, True, False, False)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
gk = GetLviGroupName(s, False, False, False, False)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
gk = GetLviGroupName(s, True, False, False, False)
|
||||
.Add(New ListViewGroup(gk, gk))
|
||||
End If
|
||||
Next
|
||||
If Settings.Labels.Count > 0 Then Settings.Labels.ToList.ForEach(Sub(l) .Add(New ListViewGroup(l, l)))
|
||||
.Add(Settings.Labels.NoLabel)
|
||||
@@ -72,6 +83,8 @@ Public Class MainFrame
|
||||
UpdateLabelsGroups()
|
||||
SetShowButtonsCheckers(Settings.ShowingMode.Value)
|
||||
CheckVersion(False)
|
||||
BTT_SITE_ALL.Checked = Settings.SelectedSites.Count = 0
|
||||
BTT_SITE_SPECIFIC.Checked = Settings.SelectedSites.Count > 0
|
||||
_UFinit = False
|
||||
GoTo EndFunction
|
||||
FormClosingInvoker:
|
||||
@@ -89,12 +102,13 @@ EndFunction:
|
||||
"Downloading in progress"},
|
||||
MsgBoxStyle.Exclamation,,,
|
||||
{"Stop downloading and close", "Cancel"}) = 0 Then
|
||||
If Downloader.Working Then _CloseInvoked = True : Downloader.Stop()
|
||||
If Downloader.Working Then _CloseInvoked = True : Downloader.Stop() : Downloader.DownloadSavedPostsStop()
|
||||
If Downloader.SavedPostsDownloading Then _CloseInvoked = True : Downloader.DownloadSavedPostsStop()
|
||||
If ChannelsWorking.Invoke Then _CloseInvoked = True : MyChannels.Stop(False)
|
||||
If _CloseInvoked Then
|
||||
e.Cancel = True
|
||||
Await Task.Run(Sub()
|
||||
While Downloader.Working Or ChannelsWorking.Invoke : Thread.Sleep(500) : End While
|
||||
While Downloader.Working Or ChannelsWorking.Invoke Or Downloader.SavedPostsDownloading : Thread.Sleep(500) : End While
|
||||
End Sub)
|
||||
End If
|
||||
Downloader.Dispose()
|
||||
@@ -240,10 +254,13 @@ CloseResume:
|
||||
#Region "Toolbar buttons"
|
||||
#Region "Settings"
|
||||
Private Sub BTT_SETTINGS_REDDIT_Click(sender As Object, e As EventArgs) Handles BTT_SETTINGS_REDDIT.Click
|
||||
Using f As New RedditEditorForm : f.ShowDialog() : End Using
|
||||
Using f As New SiteEditorForm(Sites.Reddit) : f.ShowDialog() : End Using
|
||||
End Sub
|
||||
Private Sub BTT_SETTINGS_TWITTER_Click(sender As Object, e As EventArgs) Handles BTT_SETTINGS_TWITTER.Click
|
||||
Using f As New TwitterEditorForm : f.ShowDialog() : End Using
|
||||
Using f As New SiteEditorForm(Sites.Twitter) : f.ShowDialog() : End Using
|
||||
End Sub
|
||||
Private Sub BTT_SETTINGS_INSTAGRAM_Click(sender As Object, e As EventArgs) Handles BTT_SETTINGS_INSTAGRAM.Click
|
||||
Using f As New SiteEditorForm(Sites.Instagram) : f.ShowDialog() : End Using
|
||||
End Sub
|
||||
Private Sub BTT_SETTINGS_Click(sender As Object, e As EventArgs) Handles BTT_SETTINGS.Click
|
||||
Dim mhl% = Settings.MaxLargeImageHeigh.Value
|
||||
@@ -270,7 +287,8 @@ CloseResume:
|
||||
If Not UserBanned(f.User.Name) Then
|
||||
Settings.UpdateUsersList(f.User)
|
||||
Settings.Users.Add(UserDataBase.GetInstance(f.User))
|
||||
With Settings.Users(Settings.Users.Count - 1)
|
||||
With Settings.Users.Last
|
||||
If Not .FileExists Then
|
||||
.Favorite = f.UserFavorite
|
||||
.Temporary = f.UserTemporary
|
||||
.ParseUserMediaOnly = f.UserMediaOnly
|
||||
@@ -281,8 +299,9 @@ CloseResume:
|
||||
.Description = f.UserDescr
|
||||
.Self.Labels.ListAddList(f.UserLabels, LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
||||
.UpdateUserInformation()
|
||||
End If
|
||||
End With
|
||||
UserListUpdate(Settings.Users(Settings.Users.Count - 1), True)
|
||||
UserListUpdate(Settings.Users.Last, True)
|
||||
i = LIST_PROFILES.Items.IndexOfKey(Settings.Users(Settings.Users.Count - 1).LVIKey)
|
||||
If i >= 0 Then
|
||||
LIST_PROFILES.SelectedIndices.Clear()
|
||||
@@ -340,6 +359,9 @@ CloseResume:
|
||||
End If
|
||||
If MyChannels.Visible Then MyChannels.BringToFront() Else MyChannels.Show()
|
||||
End Sub
|
||||
Private Sub BTT_DOWN_SAVED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SAVED.Click
|
||||
Downloader.DownloadSavedPostsStart(Toolbar_BOTTOM, PR_SAVED)
|
||||
End Sub
|
||||
#End Region
|
||||
#Region "Download"
|
||||
Private Sub BTT_DOWN_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SELECTED.Click
|
||||
@@ -388,6 +410,25 @@ CloseResume:
|
||||
BTT_VIEW_LIST.Checked = List
|
||||
End Sub
|
||||
#End Region
|
||||
#Region "View Site"
|
||||
Private Sub BTT_SITE_ALL_Click(sender As Object, e As EventArgs) Handles BTT_SITE_ALL.Click
|
||||
Settings.SelectedSites = Nothing
|
||||
If Not BTT_SITE_ALL.Checked Then Settings.SelectedSites = Nothing : RefillList()
|
||||
BTT_SITE_ALL.Checked = True
|
||||
BTT_SITE_SPECIFIC.Checked = False
|
||||
End Sub
|
||||
Private Sub BTT_SITE_SPECIFIC_Click(sender As Object, e As EventArgs) Handles BTT_SITE_SPECIFIC.Click
|
||||
Using f As New SiteSelectionForm(Settings.SelectedSites)
|
||||
f.ShowDialog()
|
||||
If f.DialogResult = DialogResult.OK Then
|
||||
Settings.SelectedSites = f.SelectedSites
|
||||
BTT_SITE_SPECIFIC.Checked = Settings.SelectedSites.Count > 0
|
||||
BTT_SITE_ALL.Checked = Settings.SelectedSites.Count = 0
|
||||
RefillList()
|
||||
End If
|
||||
End Using
|
||||
End Sub
|
||||
#End Region
|
||||
#Region "Labels"
|
||||
Private Sub BTT_SHOW_ALL_Click(sender As Object, e As EventArgs) Handles BTT_SHOW_ALL.Click
|
||||
SetShowButtonsCheckers(ShowingModes.All)
|
||||
@@ -631,6 +672,86 @@ CloseResume:
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
Private Sub BTT_CONTEXT_CHANGE_FOLDER_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_CHANGE_FOLDER.Click
|
||||
Try
|
||||
Dim users As List(Of IUserData) = GetSelectedUserArray()
|
||||
If users.ListExists Then
|
||||
If users.Count = 1 Then
|
||||
Dim CutOption% = 1
|
||||
Dim _IsCollection As Boolean = False
|
||||
With users(0)
|
||||
If .IsCollection Then
|
||||
_IsCollection = True
|
||||
With DirectCast(.Self, UserDataBind)
|
||||
If .Count = 0 Then
|
||||
Throw New ArgumentOutOfRangeException("Collection", "Collection is empty")
|
||||
Else
|
||||
With DirectCast(.Collections(0).Self, UserDataBase)
|
||||
If Not .User.Merged Then CutOption = 2
|
||||
End With
|
||||
End If
|
||||
End With
|
||||
End If
|
||||
End With
|
||||
|
||||
Dim CurrDir As SFile = users(0).File.CutPath(CutOption)
|
||||
Dim NewDest As SFile = SFile.GetPath(InputBoxE($"Enter a new destination for user [{users(0)}]", "Change user folder", CurrDir.Path))
|
||||
If Not NewDest.IsEmptyString Then
|
||||
If MsgBoxE({$"You are changing the user's [{users(0)}] destination" & vbCr &
|
||||
$"Current destination: {CurrDir.PathNoSeparator}" & vbCr &
|
||||
$"New destination: {NewDest.Path}",
|
||||
"Changing user destination"}, MsgBoxStyle.Exclamation,,, {"Confirm", "Cancel"}) = 0 Then
|
||||
If Not NewDest.IsEmptyString AndAlso
|
||||
(Not NewDest.Exists(SFO.Path, False) OrElse
|
||||
(
|
||||
SFile.GetFiles(NewDest,, IO.SearchOption.AllDirectories, EDP.ThrowException).ListIfNothing.Count = 0 AndAlso
|
||||
NewDest.Delete(SFO.Path, False, False, EDP.ThrowException) AndAlso
|
||||
Not NewDest.Exists(SFO.Path, False)
|
||||
)
|
||||
) Then
|
||||
NewDest.CutPath.Exists(SFO.Path)
|
||||
IO.Directory.Move(CurrDir.Path, NewDest.Path)
|
||||
Dim ApplyChanges As Action(Of IUserData) = Sub(ByVal __user As IUserData)
|
||||
With DirectCast(__user.Self, UserDataBase)
|
||||
Dim u As UserInfo = .User.Clone
|
||||
Settings.UsersList.Remove(u)
|
||||
Dim d As SFile = Nothing
|
||||
If _IsCollection Then d = SFile.GetPath($"{NewDest.PathWithSeparator}{u.File.PathFolders(1).LastOrDefault}")
|
||||
If d.IsEmptyString Then d = NewDest
|
||||
u.SpecialPath = d.PathWithSeparator
|
||||
u.UpdateUserFile()
|
||||
Settings.UpdateUsersList(u)
|
||||
.User = u.Clone
|
||||
.UpdateUserInformation()
|
||||
End With
|
||||
End Sub
|
||||
If users(0).IsCollection Then
|
||||
With DirectCast(users(0), UserDataBind)
|
||||
For Each user In .Collections : ApplyChanges(user) : Next
|
||||
End With
|
||||
Else
|
||||
ApplyChanges(users(0))
|
||||
End If
|
||||
MsgBoxE($"User data has been moved")
|
||||
Else
|
||||
MsgBoxE($"Unable to move user data to new destination [{NewDest}]{vbCr}Operation canceled", MsgBoxStyle.Critical)
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("Operation canceled")
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("You have not entered a new destination" & vbCr & "Operation canceled", MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("You have selected multiple users. You can change the folder only for one user!", MsgBoxStyle.Critical)
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("No one user selected", MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
ErrorsDescriber.Execute(EDP.ShowAllMsg, ex, "Error while moving user")
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub BTT_CONTEXT_OPEN_PATH_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_OPEN_PATH.Click
|
||||
OpenFolder()
|
||||
End Sub
|
||||
@@ -745,27 +866,52 @@ CloseResume:
|
||||
If USER_CONTEXT.Visible Then USER_CONTEXT.Hide()
|
||||
Dim ugn As Func(Of IUserData, String) = Function(u) $"{IIf(u.IsCollection, "Collection", "User")}: {u.Name}"
|
||||
Dim m As New MMessage(users.Select(ugn).ListToString(, vbNewLine), "Users deleting",
|
||||
{New Messaging.MsgBoxButton("Delete and ban") With {.ToolTip = "Users will be deleted and added to the blacklist"},
|
||||
{New Messaging.MsgBoxButton("Delete and ban") With {.ToolTip = "Users and their data will be deleted and added to the blacklist"},
|
||||
New Messaging.MsgBoxButton("Delete user only and ban") With {
|
||||
.ToolTip = "Users will be deleted and added to the blacklist (user data will not be deleted)"},
|
||||
New Messaging.MsgBoxButton("Delete and ban with reason") With {
|
||||
.ToolTip = "Users will be deleted and added to the blacklist with set a reason to delete"},
|
||||
"Delete", "Cancel"}, MsgBoxStyle.Exclamation) With {.ButtonsPerRow = 2}
|
||||
.ToolTip = "Users and their data will be deleted and added to the blacklist with set a reason to delete"},
|
||||
New Messaging.MsgBoxButton("Delete user only and ban with reason") With {
|
||||
.ToolTip = "Users will be deleted and added to the blacklist with set a reason to delete (user data will not be deleted)"},
|
||||
New Messaging.MsgBoxButton("Delete") With {.ToolTip = "Delete users and their data"},
|
||||
New Messaging.MsgBoxButton("Delete user only") With {.ToolTip = "Delete users but keep data"}, "Cancel"},
|
||||
MsgBoxStyle.Exclamation) With {.ButtonsPerRow = 2, .ButtonsPlacing = MMessage.ButtonsPlacings.StartToEnd}
|
||||
m.Text = $"The following users ({users.Count}) will be deleted:{vbNewLine}{m.Text}"
|
||||
Dim result% = MsgBoxE(m)
|
||||
If result < 3 Then
|
||||
If result < 6 Then
|
||||
Dim removedUsers As New List(Of String)
|
||||
Dim keepData As Boolean = Not (result Mod 2) = 0
|
||||
Dim banUser As Boolean = result < 4
|
||||
Dim setReason As Boolean = banUser And result > 1
|
||||
Dim leftUsers As New List(Of String)
|
||||
Dim l As New ListAddParams(LAP.NotContainsOnly)
|
||||
Dim b As Boolean = False
|
||||
Dim reason$ = String.Empty
|
||||
If result = 1 Then reason = InputBoxE("Enter a deletion reason:", "Deletion reason")
|
||||
If setReason Then reason = InputBoxE("Enter a deletion reason:", "Deletion reason")
|
||||
For Each user In users
|
||||
If keepData Then
|
||||
If banUser Then Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) : b = True
|
||||
If user.IsCollection Then
|
||||
With DirectCast(user, UserDataBind)
|
||||
If .Count > 0 Then .Collections.ForEach(Sub(c) Settings.UsersList.Remove(DirectCast(c.Self, UserDataBase).User))
|
||||
End With
|
||||
Else
|
||||
Settings.UsersList.Remove(DirectCast(user.Self, UserDataBase).User)
|
||||
End If
|
||||
Settings.Users.Remove(user)
|
||||
Settings.UpdateUsersList()
|
||||
RemoveUserFromList(user)
|
||||
removedUsers.Add(ugn(user))
|
||||
user.Dispose()
|
||||
Else
|
||||
If user.Delete > 0 Then
|
||||
If result < 2 Then Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) : b = True
|
||||
If banUser Then Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) : b = True
|
||||
RemoveUserFromList(user)
|
||||
removedUsers.Add(ugn(user))
|
||||
Else
|
||||
leftUsers.Add(ugn(user))
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
m = New MMessage(String.Empty, "Users deleting")
|
||||
If removedUsers.Count = users.Count Then
|
||||
|
||||
@@ -18,6 +18,7 @@ Friend Module MainMod
|
||||
Friend Const LVI_FavOption As String = "Favorite"
|
||||
Friend Const CannelsLabelName As String = "Channels"
|
||||
Friend Const LVI_CollectionOption As String = "Collection"
|
||||
Friend Const LVI_ChannelOption As String = "Channel"
|
||||
Friend Enum ViewModes As Integer
|
||||
IconLarge = 0
|
||||
IconSmall = 2
|
||||
@@ -47,7 +48,8 @@ Friend Module MainMod
|
||||
End Class
|
||||
#End Region
|
||||
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, ByVal IsChannel As Boolean) As String
|
||||
Dim Opt$ = String.Empty
|
||||
If Temp Then
|
||||
Opt = LVI_TempOption
|
||||
@@ -57,6 +59,8 @@ Friend Module MainMod
|
||||
If Not Opt.IsEmptyString Then Opt = $" ({Opt})"
|
||||
If IsCollection Then
|
||||
Return $"{LVI_CollectionOption}{Opt}"
|
||||
ElseIf IsChannel Then
|
||||
Return $"{LVI_ChannelOption}{Opt}"
|
||||
Else
|
||||
Return $"{Site}{Opt}"
|
||||
End If
|
||||
@@ -65,32 +69,37 @@ Friend Module MainMod
|
||||
Undefined = 0
|
||||
Reddit = 1
|
||||
Twitter = 2
|
||||
Instagram = 3
|
||||
End Enum
|
||||
Friend Structure UserInfo : Implements IComparable(Of UserInfo), IEquatable(Of UserInfo), ICloneable
|
||||
Friend Const Name_Site As String = "Site"
|
||||
Friend Const Name_Collection As String = "Collection"
|
||||
Friend Const Name_Merged As String = "Merged"
|
||||
Friend Const Name_IsChannel As String = "IsChannel"
|
||||
Friend Const Name_SpecialPath As String = "SpecialPath"
|
||||
Friend Name As String
|
||||
Friend Site As Sites
|
||||
Friend File As SFile
|
||||
Friend SpecialPath As SFile
|
||||
Friend Merged As Boolean
|
||||
Friend IncludedInCollection As Boolean
|
||||
Friend CollectionName As String
|
||||
Friend IsChannel As Boolean
|
||||
Friend Sub New(ByVal _Name As String, ByVal s As Sites, Optional ByVal Collection As String = Nothing,
|
||||
Optional ByVal _Merged As Boolean = False)
|
||||
Optional ByVal _Merged As Boolean = False, Optional ByVal _SpecialPath As SFile = Nothing)
|
||||
Name = _Name
|
||||
Site = s
|
||||
IncludedInCollection = Not Collection.IsEmptyString
|
||||
CollectionName = Collection
|
||||
Merged = _Merged
|
||||
SpecialPath = _SpecialPath
|
||||
UpdateUserFile()
|
||||
End Sub
|
||||
Friend Sub New(ByVal x As EContainer)
|
||||
Me.New(x.Value,
|
||||
x.Attribute(Name_Site).Value.FromXML(Of Integer)(CInt(Sites.Undefined)),
|
||||
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),
|
||||
SFile.GetPath(x.Attribute(Name_SpecialPath).Value))
|
||||
IsChannel = x.Attribute(Name_IsChannel).Value.FromXML(Of Boolean)(False)
|
||||
End Sub
|
||||
Friend Sub New(ByVal c As Reddit.Channel)
|
||||
@@ -123,13 +132,15 @@ Friend Module MainMod
|
||||
}
|
||||
End Sub
|
||||
Private Function GetFilePathByParams() As String
|
||||
If Merged And IncludedInCollection Then
|
||||
If Not SpecialPath.IsEmptyString Then
|
||||
Return $"{SpecialPath.PathWithSeparator}{SettingsFolderName}"
|
||||
ElseIf Merged And IncludedInCollection Then
|
||||
Return $"{Settings.CollectionsPathF.PathNoSeparator}\{CollectionName}\{SettingsFolderName}"
|
||||
Else
|
||||
If IncludedInCollection Then
|
||||
Return $"{Settings.CollectionsPathF.PathNoSeparator}\{CollectionName}\{Site}_{Name}\{SettingsFolderName}"
|
||||
Else
|
||||
Return $"{Settings.Site(Site).Path.PathNoSeparator}\{Name}\{SettingsFolderName}"
|
||||
Return $"{Settings(Site).Path.PathNoSeparator}\{Name}\{SettingsFolderName}"
|
||||
End If
|
||||
End If
|
||||
End Function
|
||||
@@ -137,7 +148,8 @@ Friend Module MainMod
|
||||
Return New EContainer("User", Name, {New EAttribute(Name_Site, CInt(Site)),
|
||||
New EAttribute(Name_Collection, CollectionName),
|
||||
New EAttribute(Name_Merged, Merged.BoolToInteger),
|
||||
New EAttribute(Name_IsChannel, IsChannel.BoolToInteger)})
|
||||
New EAttribute(Name_IsChannel, IsChannel.BoolToInteger),
|
||||
New EAttribute(Name_SpecialPath, SpecialPath.PathWithSeparator)})
|
||||
End Function
|
||||
Friend Function CompareTo(ByVal Other As UserInfo) As Integer Implements IComparable(Of UserInfo).CompareTo
|
||||
If Site = Other.Site Then
|
||||
@@ -157,9 +169,11 @@ Friend Module MainMod
|
||||
.Name = Name,
|
||||
.Site = Site,
|
||||
.File = File,
|
||||
.SpecialPath = SpecialPath,
|
||||
.Merged = Merged,
|
||||
.IncludedInCollection = IncludedInCollection,
|
||||
.CollectionName = CollectionName
|
||||
.CollectionName = CollectionName,
|
||||
.IsChannel = IsChannel
|
||||
}
|
||||
End Function
|
||||
End Structure
|
||||
@@ -207,27 +221,47 @@ Friend Module MainMod
|
||||
Friend Function DownloadVideoByURL(ByVal URL As String, ByVal AskForPath As Boolean, ByVal Silent As Boolean) As Boolean
|
||||
Dim e As New ErrorsDescriber(Not Silent, Not Silent, True, False)
|
||||
Try
|
||||
Dim Result As Boolean = False
|
||||
If Not URL.IsEmptyString Then
|
||||
Dim u As UserMedia = Nothing
|
||||
Dim um As IEnumerable(Of UserMedia) = Nothing
|
||||
Dim site As Sites
|
||||
If URL.Contains("twitter") Then
|
||||
u = Twitter.UserData.GetVideoInfo(URL)
|
||||
um = Twitter.UserData.GetVideoInfo(URL)
|
||||
site = Sites.Twitter
|
||||
ElseIf URL.Contains("redgifs") Then
|
||||
u = Reddit.UserData.GetVideoInfo(URL)
|
||||
um = Reddit.UserData.GetVideoInfo(URL)
|
||||
site = Sites.Reddit
|
||||
ElseIf URL.Contains("instagram.com") Then
|
||||
um = Instagram.UserData.GetVideoInfo(URL)
|
||||
site = Sites.Instagram
|
||||
Else
|
||||
MsgBoxE("Site of video URL does not recognized" & vbCr & "Operation canceled", MsgBoxStyle.Exclamation, e)
|
||||
Return False
|
||||
End If
|
||||
|
||||
If um.ListExists Then
|
||||
Dim f As SFile, ff As SFile
|
||||
For Each u As UserMedia In um
|
||||
If Not u.URL.IsEmptyString Or Not u.URL_BASE.IsEmptyString Then
|
||||
Dim f As SFile = u.File
|
||||
f = u.File
|
||||
If f.Name.IsEmptyString Then f.Name = $"video_{u.Post.ID}"
|
||||
If f.Extension.IsEmptyString Then f.Extension = "mp4"
|
||||
If Not Settings.LatestSavingPath.IsEmptyString And
|
||||
Settings.LatestSavingPath.Value.Exists(SFO.Path, False) Then f.Path = Settings.LatestSavingPath.Value
|
||||
If AskForPath OrElse Not f.Exists(SFO.Path, False) Then
|
||||
#Disable Warning BC40000
|
||||
If site = Sites.Instagram Then
|
||||
ff = SFile.SaveAs(f, "Instagram files destination",,,, EDP.ReturnValue)
|
||||
If Not ff.IsEmptyString Then
|
||||
f.Path = ff.Path
|
||||
Else
|
||||
f = Nothing
|
||||
End If
|
||||
Else
|
||||
f = SFile.SaveAs(f, "Video file destination", True, "mp4", "Video|*.mp4|All files|*.*", EDP.ReturnValue)
|
||||
End If
|
||||
#Enable Warning
|
||||
AskForPath = False
|
||||
End If
|
||||
If Not f.IsEmptyString Then
|
||||
Settings.LatestSavingPath.Value = f.PathWithSeparator
|
||||
@@ -248,21 +282,27 @@ Friend Module MainMod
|
||||
Next
|
||||
End Using
|
||||
If FileDownloaded Then
|
||||
If um.Count = 1 Then
|
||||
MsgBoxE($"File downloaded to [{f}]",, e)
|
||||
Return True
|
||||
Else
|
||||
MsgBoxE("File does not downloaded", MsgBoxStyle.Critical, e)
|
||||
Result = True
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("File destination does not pointed" & vbCr & "Operation canceled",, e)
|
||||
If um.Count = 1 Then MsgBoxE("File does not downloaded", MsgBoxStyle.Critical, e)
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("File URL does not found!", MsgBoxStyle.Critical, e)
|
||||
If um.Count = 1 Then MsgBoxE("File destination does not pointed" & vbCr & "Operation canceled",, e)
|
||||
End If
|
||||
Else
|
||||
If um.Count = 1 Then MsgBoxE("File URL does not found!", MsgBoxStyle.Critical, e)
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("URL is empty", MsgBoxStyle.Exclamation, e)
|
||||
End If
|
||||
Return False
|
||||
Return Result
|
||||
Catch ex As Exception
|
||||
Return ErrorsDescriber.Execute(e, ex, "Downloading video by URL error", False)
|
||||
End Try
|
||||
|
||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
||||
' by using the '*' as shown below:
|
||||
' <Assembly: AssemblyVersion("1.0.*")>
|
||||
|
||||
<Assembly: AssemblyVersion("1.0.1.0")>
|
||||
<Assembly: AssemblyFileVersion("1.0.1.0")>
|
||||
<Assembly: AssemblyVersion("2.0.0.0")>
|
||||
<Assembly: AssemblyFileVersion("2.0.0.0")>
|
||||
<Assembly: NeutralResourcesLanguage("en")>
|
||||
|
||||
50
SCrawler/My Project/Resources.Designer.vb
generated
50
SCrawler/My Project/Resources.Designer.vb
generated
@@ -60,6 +60,16 @@ Namespace My.Resources
|
||||
End Set
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
Friend ReadOnly Property BookmarkBlack_16() As System.Drawing.Bitmap
|
||||
Get
|
||||
Dim obj As Object = ResourceManager.GetObject("BookmarkBlack_16", resourceCulture)
|
||||
Return CType(obj,System.Drawing.Bitmap)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
@@ -110,6 +120,26 @@ Namespace My.Resources
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
'''</summary>
|
||||
Friend ReadOnly Property InstagramIcon() As System.Drawing.Icon
|
||||
Get
|
||||
Dim obj As Object = ResourceManager.GetObject("InstagramIcon", resourceCulture)
|
||||
Return CType(obj,System.Drawing.Icon)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
Friend ReadOnly Property InstagramPic76() As System.Drawing.Bitmap
|
||||
Get
|
||||
Dim obj As Object = ResourceManager.GetObject("InstagramPic76", resourceCulture)
|
||||
Return CType(obj,System.Drawing.Bitmap)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
@@ -210,6 +240,16 @@ Namespace My.Resources
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
Friend ReadOnly Property SettingsPic_16() As System.Drawing.Bitmap
|
||||
Get
|
||||
Dim obj As Object = ResourceManager.GetObject("SettingsPic_16", resourceCulture)
|
||||
Return CType(obj,System.Drawing.Bitmap)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
@@ -239,5 +279,15 @@ Namespace My.Resources
|
||||
Return CType(obj,System.Drawing.Icon)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
'''</summary>
|
||||
Friend ReadOnly Property TwitterPic400() As System.Drawing.Bitmap
|
||||
Get
|
||||
Dim obj As Object = ResourceManager.GetObject("TwitterPic400", resourceCulture)
|
||||
Return CType(obj,System.Drawing.Bitmap)
|
||||
End Get
|
||||
End Property
|
||||
End Module
|
||||
End Namespace
|
||||
|
||||
@@ -118,17 +118,14 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="GlobeBlue_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\GlobeBlue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="StarPic_24" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\StarPic_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PrevPIC2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\PrevPIC2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PicturePic_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\PicturePic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="PencilPic_01_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\PencilPic_01_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="NextPIC2" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\NextPIC2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
@@ -136,40 +133,58 @@
|
||||
<data name="Folder_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\Folder_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PencilPic_01_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\PencilPic_01_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="TwitterPic400" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\TwitterPic400.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PlusPIC" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\PlusPIC.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="TwitterIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Icons\TwitterIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="SettingsPic_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\SettingsPic_16.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Delete" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\Delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="InfoPic_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\InfoPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="InstagramIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Icons\InstagramIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="GlobeBlue_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\GlobeBlue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="PicturePic_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\PicturePic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Refresh" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\Refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="DBPic_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\DBPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="RedditIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Icons\RedditIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="InstagramPic76" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\InstagramPic76.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Rainbow" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Icons\Rainbow.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Pin_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\Pin_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="StartPic_01_Green_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\StartPic_01_Green_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="RedditPic512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\RedditPic512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="TwitterIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Icons\TwitterIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="DBPic_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\DBPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="StartPic_01_Green_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\StartPic_01_Green_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="BookmarkBlack_16" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Content\Pictures\BookmarkBlack_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -133,13 +133,18 @@
|
||||
<Import Include="System.Threading.Tasks" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="API\Base\Declarations.vb" />
|
||||
<Compile Include="API\Base\SiteSettings.vb" />
|
||||
<Compile Include="API\Base\Structures.vb" />
|
||||
<Compile Include="API\Base\UserDataBase.vb" />
|
||||
<Compile Include="API\Imgur\Envir.vb" />
|
||||
<Compile Include="API\Instagram\Declarations.vb" />
|
||||
<Compile Include="API\Instagram\UserData.vb" />
|
||||
<Compile Include="API\Reddit\Channel.vb" />
|
||||
<Compile Include="API\Reddit\ChannelsCollection.vb" />
|
||||
<Compile Include="API\Reddit\Declarations.vb" />
|
||||
<Compile Include="API\Reddit\M3U8.vb" />
|
||||
<Compile Include="API\Reddit\ProfileSaved.vb" />
|
||||
<Compile Include="API\Reddit\UserData.vb" />
|
||||
<Compile Include="API\Twitter\Declarations.vb" />
|
||||
<Compile Include="API\Twitter\UserData.vb" />
|
||||
@@ -174,16 +179,16 @@
|
||||
<Compile Include="Editors\LabelsForm.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Editors\RedditEditorForm.Designer.vb">
|
||||
<DependentUpon>RedditEditorForm.vb</DependentUpon>
|
||||
<Compile Include="Editors\SiteSelectionForm.Designer.vb">
|
||||
<DependentUpon>SiteSelectionForm.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Editors\RedditEditorForm.vb">
|
||||
<Compile Include="Editors\SiteSelectionForm.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Editors\TwitterEditorForm.Designer.vb">
|
||||
<DependentUpon>TwitterEditorForm.vb</DependentUpon>
|
||||
<Compile Include="Editors\SiteEditorForm.Designer.vb">
|
||||
<DependentUpon>SiteEditorForm.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Editors\TwitterEditorForm.vb">
|
||||
<Compile Include="Editors\SiteEditorForm.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Editors\UserCreatorForm.Designer.vb">
|
||||
@@ -244,11 +249,11 @@
|
||||
<EmbeddedResource Include="Editors\LabelsForm.resx">
|
||||
<DependentUpon>LabelsForm.vb</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Editors\RedditEditorForm.resx">
|
||||
<DependentUpon>RedditEditorForm.vb</DependentUpon>
|
||||
<EmbeddedResource Include="Editors\SiteSelectionForm.resx">
|
||||
<DependentUpon>SiteSelectionForm.vb</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Editors\TwitterEditorForm.resx">
|
||||
<DependentUpon>TwitterEditorForm.vb</DependentUpon>
|
||||
<EmbeddedResource Include="Editors\SiteEditorForm.resx">
|
||||
<DependentUpon>SiteEditorForm.vb</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Editors\UserCreatorForm.resx">
|
||||
<DependentUpon>UserCreatorForm.vb</DependentUpon>
|
||||
@@ -287,6 +292,11 @@
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Content\Icons\InstagramIcon.ico" />
|
||||
<None Include="Content\Pictures\SettingsPic_16.bmp" />
|
||||
<None Include="Content\Pictures\TwitterPic400.png" />
|
||||
<None Include="Content\Pictures\InstagramPic76.png" />
|
||||
<None Include="Content\Pictures\BookmarkBlack_16.png" />
|
||||
<Content Include="ffmpeg.exe">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
||||
@@ -13,6 +13,7 @@ Imports SCrawler.API.Base
|
||||
Friend Class SettingsCLS : Implements IDisposable
|
||||
Friend Const DefaultMaxDownloadingTasks As Integer = 5
|
||||
Friend Const Name_Node_Sites As String = "Sites"
|
||||
Private Const SitesValuesSeparator As String = ","
|
||||
Friend ReadOnly Design As XmlFile
|
||||
Private ReadOnly MyXML As XmlFile
|
||||
Friend ReadOnly OS64 As Boolean
|
||||
@@ -44,11 +45,6 @@ Friend Class SettingsCLS : Implements IDisposable
|
||||
|
||||
GlobalPath = New XMLValue(Of SFile)("GlobalPath", New SFile($"{SFile.GetPath(Application.StartupPath).PathWithSeparator}Data\"), MyXML,,
|
||||
XMLValue(Of SFile).ToFilePath)
|
||||
MySites = New Dictionary(Of Sites, SiteSettings) From {
|
||||
{Sites.Reddit, New SiteSettings(Sites.Reddit, MyXML, GlobalPath.Value)},
|
||||
{Sites.Twitter, New SiteSettings(Sites.Twitter, MyXML, GlobalPath.Value)}
|
||||
}
|
||||
MySites(Sites.Reddit).Responser.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
||||
|
||||
SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML)
|
||||
CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML)
|
||||
@@ -62,33 +58,12 @@ Friend Class SettingsCLS : Implements IDisposable
|
||||
DefaultDownloadVideos.ReplaceByValue("DefaultDownloadVideos")
|
||||
ChangeReadyForDownOnTempChange = New XMLValue(Of Boolean)("ChangeReadyForDownOnTempChange", True, MyXML, n)
|
||||
|
||||
n = {Name_Node_Sites, Sites.Reddit.ToString}
|
||||
RedditTemporary = New XMLValue(Of Boolean)
|
||||
RedditTemporary.SetExtended("Temporary", False, MyXML, n)
|
||||
RedditTemporary.SetDefault(DefaultTemporary)
|
||||
|
||||
RedditDownloadImages = New XMLValue(Of Boolean)
|
||||
RedditDownloadImages.SetExtended("DownloadImages", True, MyXML, n)
|
||||
RedditDownloadImages.SetDefault(DefaultDownloadImages)
|
||||
|
||||
RedditDownloadVideos = New XMLValue(Of Boolean)
|
||||
RedditDownloadVideos.SetExtended("DownloadVideos", True, MyXML, n)
|
||||
RedditDownloadVideos.SetDefault(DefaultDownloadVideos)
|
||||
|
||||
n = {Name_Node_Sites, Sites.Twitter.ToString}
|
||||
TwitterTemporary = New XMLValue(Of Boolean)
|
||||
TwitterTemporary.SetExtended("Temporary", False, MyXML, n)
|
||||
TwitterTemporary.SetDefault(DefaultTemporary)
|
||||
|
||||
TwitterDownloadImages = New XMLValue(Of Boolean)
|
||||
TwitterDownloadImages.SetExtended("DownloadImages", True, MyXML, n)
|
||||
TwitterDownloadImages.SetDefault(DefaultDownloadImages)
|
||||
|
||||
TwitterDownloadVideos = New XMLValue(Of Boolean)
|
||||
TwitterDownloadVideos.SetExtended("DownloadVideos", True, MyXML, n)
|
||||
TwitterDownloadVideos.SetDefault(DefaultDownloadVideos)
|
||||
|
||||
TwitterDefaultGetUserMedia = New XMLValue(Of Boolean)("TwitterDefaultGetUserMedia", True, MyXML, n)
|
||||
MySites = New Dictionary(Of Sites, SiteSettings) From {
|
||||
{Sites.Reddit, New SiteSettings(Sites.Reddit, MyXML, GlobalPath.Value, DefaultTemporary, DefaultDownloadImages, DefaultDownloadVideos)},
|
||||
{Sites.Twitter, New SiteSettings(Sites.Twitter, MyXML, GlobalPath.Value, DefaultTemporary, DefaultDownloadImages, DefaultDownloadVideos)},
|
||||
{Sites.Instagram, New SiteSettings(Sites.Instagram, MyXML, GlobalPath.Value, DefaultTemporary, DefaultDownloadImages, DefaultDownloadVideos)}
|
||||
}
|
||||
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)
|
||||
@@ -100,6 +75,14 @@ Friend Class SettingsCLS : Implements IDisposable
|
||||
LatestSelectedLabels = New XMLValue(Of String)("LatestSelectedLabels",, MyXML)
|
||||
LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML)
|
||||
|
||||
XMLSelectedSites = New XMLValue(Of String)("SelectedSites", String.Empty, MyXML, {Name_Node_Sites})
|
||||
If Not XMLSelectedSites.IsEmptyString Then
|
||||
_SelectedSites = XMLSelectedSites.Value.StringToList(Of Sites)(SitesValuesSeparator)
|
||||
End If
|
||||
If _SelectedSites Is Nothing Then _SelectedSites = New List(Of Sites)
|
||||
|
||||
ImgurClientID = New XMLValue(Of String)("ImgurClientID", String.Empty, MyXML, {Name_Node_Sites})
|
||||
|
||||
n = {Name_Node_Sites, "Channels"}
|
||||
ChannelsDefaultReadyForDownload = New XMLValue(Of Boolean)("ChannelsDefaultReadyForDownload", False, MyXML, n)
|
||||
ChannelsDefaultTemporary = New XMLValue(Of Boolean)("ChannelsDefaultTemporary", True, MyXML, n)
|
||||
@@ -300,7 +283,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
||||
_UpdatesSuspended = False
|
||||
ChangeDateProvider(Nothing, Nothing, Nothing)
|
||||
End Sub
|
||||
Friend ReadOnly Property Site(ByVal s As Sites) As SiteSettings
|
||||
Default Friend ReadOnly Property Site(ByVal s As Sites) As SiteSettings
|
||||
Get
|
||||
Return MySites(s)
|
||||
End Get
|
||||
@@ -318,22 +301,12 @@ Friend Class SettingsCLS : Implements IDisposable
|
||||
End Get
|
||||
End Property
|
||||
Friend ReadOnly Property MaxUsersJobsCount As XMLValue(Of Integer)
|
||||
Friend ReadOnly Property ImgurClientID As XMLValue(Of String)
|
||||
#Region "Defaults"
|
||||
Friend ReadOnly Property DefaultTemporary As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property DefaultDownloadImages As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property DefaultDownloadVideos As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property ChangeReadyForDownOnTempChange As XMLValue(Of Boolean)
|
||||
#Region "Reddit"
|
||||
Friend ReadOnly Property RedditTemporary As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property RedditDownloadImages As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property RedditDownloadVideos As XMLValue(Of Boolean)
|
||||
#End Region
|
||||
#Region "Twitter"
|
||||
Friend ReadOnly Property TwitterTemporary As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property TwitterDownloadImages As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property TwitterDownloadVideos As XMLValue(Of Boolean)
|
||||
Friend ReadOnly Property TwitterDefaultGetUserMedia As XMLValue(Of Boolean)
|
||||
#End Region
|
||||
#End Region
|
||||
#Region "User data"
|
||||
Friend ReadOnly Property FromChannelDownloadTop As XMLValue(Of Integer)
|
||||
@@ -360,6 +333,22 @@ Friend Class SettingsCLS : Implements IDisposable
|
||||
End Get
|
||||
End Property
|
||||
Friend ReadOnly Property ShowingMode As XMLValue(Of Integer)
|
||||
Private ReadOnly Property XMLSelectedSites As XMLValue(Of String)
|
||||
Private ReadOnly _SelectedSites As List(Of Sites)
|
||||
Friend Property SelectedSites As List(Of Sites)
|
||||
Get
|
||||
Return _SelectedSites
|
||||
End Get
|
||||
Set(ByVal s As List(Of Sites))
|
||||
_SelectedSites.Clear()
|
||||
If s.ListExists Then
|
||||
_SelectedSites.ListAddList(s)
|
||||
XMLSelectedSites.Value = ListAddList(Of Integer, Sites)(Nothing, s).ListToString(, SitesValuesSeparator)
|
||||
Else
|
||||
XMLSelectedSites.Value = String.Empty
|
||||
End If
|
||||
End Set
|
||||
End Property
|
||||
#End Region
|
||||
#Region "Latest values"
|
||||
Friend ReadOnly Property LatestSavingPath As XMLValue(Of SFile)
|
||||
|
||||
@@ -73,6 +73,7 @@ Friend Class TDownloader : Implements IDisposable
|
||||
_Working = False
|
||||
TokenSource = Nothing
|
||||
UpdateJobsLabel()
|
||||
If Settings(Sites.Instagram).InstaHashUpdateRequired Then MyMainLOG = "Check your Instagram credentials"
|
||||
RaiseEvent OnDownloading(False)
|
||||
End Try
|
||||
End Sub
|
||||
@@ -91,23 +92,33 @@ Friend Class TDownloader : Implements IDisposable
|
||||
Dim i% = -1
|
||||
Dim j% = Settings.MaxUsersJobsCount - 1
|
||||
Dim Keys As New List(Of String)
|
||||
Dim h As Boolean = False
|
||||
Dim InstaReady As Boolean = Settings(Sites.Instagram).InstagramReadyForDownload
|
||||
For Each _Item As IUserData In Items
|
||||
If Not _Item.Disposed Then
|
||||
Keys.Add(_Item.LVIKey)
|
||||
If Not _Item.Site = Sites.Instagram Or InstaReady Then
|
||||
If _Item.Site = Sites.Instagram Then h = True : Settings(Sites.Instagram).InstagramTooManyRequestsReadyForCatch = True
|
||||
Token.ThrowIfCancellationRequested()
|
||||
t.Add(Task.Run(Sub() _Item.DownloadData(Token)))
|
||||
i += 1
|
||||
If i >= j Then Exit For
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
If t.Count > 0 Then
|
||||
If t.Count > 0 Or Keys.Count > 0 Then
|
||||
If h Then
|
||||
With Settings(Sites.Instagram)
|
||||
If .InstaHash.IsEmptyString Or .InstaHashUpdateRequired Then .GatherInstaHash()
|
||||
End With
|
||||
End If
|
||||
_CurrentDownloadingTasks = t.Count
|
||||
With MainProgress
|
||||
.Enabled(EOptions.All) = True
|
||||
.Information = $"Downloading {_CurrentDownloadingTasks.NumToString(nf, NProv)}/{Items.Count.NumToString(nf, NProv)} profiles' data"
|
||||
.InformationTemporary = .Information
|
||||
End With
|
||||
Task.WaitAll(t.ToArray)
|
||||
If t.Count > 0 Then Task.WaitAll(t.ToArray)
|
||||
Dim dcc As Boolean = False
|
||||
If Keys.Count > 0 Then
|
||||
For Each k$ In Keys
|
||||
@@ -167,6 +178,33 @@ Friend Class TDownloader : Implements IDisposable
|
||||
End If
|
||||
Return Nothing
|
||||
End Function
|
||||
#Region "Saved posts downloading"
|
||||
Friend ReadOnly Property SavedPostsDownloading As Boolean
|
||||
Get
|
||||
Return If(_SavedPostsThread?.IsAlive, False)
|
||||
End Get
|
||||
End Property
|
||||
Private _SavedPostsThread As Thread
|
||||
Friend Sub DownloadSavedPostsStart(ByVal Toolbar As StatusStrip, ByVal PR As ToolStripProgressBar)
|
||||
If Not SavedPostsDownloading Then
|
||||
If Settings(Sites.Reddit).SavedPostsUserName.IsEmptyString Then
|
||||
MsgBoxE($"Username of saved posts not set{vbNewLine}Operation canceled", MsgBoxStyle.Critical)
|
||||
Else
|
||||
_SavedPostsThread = New Thread(New ThreadStart(Sub() Reddit.ProfileSaved.Download(Toolbar, PR)))
|
||||
_SavedPostsThread.SetApartmentState(ApartmentState.MTA)
|
||||
_SavedPostsThread.Start()
|
||||
End If
|
||||
Else
|
||||
MsgBoxE("Saved posts are already downloading", MsgBoxStyle.Exclamation)
|
||||
End If
|
||||
End Sub
|
||||
Friend Sub DownloadSavedPostsStop()
|
||||
Try
|
||||
If SavedPostsDownloading Then _SavedPostsThread.Abort()
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
Friend Sub Add(ByVal Item As IUserData)
|
||||
If Not Items.Contains(Item) Then
|
||||
If Item.IsCollection Then Item.DownloadData(Nothing) Else Items.Add(Item)
|
||||
|
||||
@@ -26,7 +26,7 @@ Friend Class VideosDownloaderForm
|
||||
MyView = New FormsView(Me)
|
||||
MyView.ImportFromXML(Settings.Design)
|
||||
MyView.SetMeSize()
|
||||
RefillList()
|
||||
RefillList(False)
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
End Sub
|
||||
@@ -36,9 +36,7 @@ Friend Class VideosDownloaderForm
|
||||
End Sub
|
||||
Private Sub VideosDownloaderForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||
If Not MyView Is Nothing Then MyView.Dispose(Settings.Design)
|
||||
If UrlList.Count > 0 Then
|
||||
TextSaver.SaveTextToFile(UrlList.ListToString(, Environment.NewLine), DownloadingUrlsFile, True,, EDP.SendInLog)
|
||||
End If
|
||||
If UrlList.Count > 0 Then UpdateUrlsFile()
|
||||
UrlList.Clear()
|
||||
End Sub
|
||||
Private Sub VideosDownloaderForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
||||
@@ -51,17 +49,25 @@ Friend Class VideosDownloaderForm
|
||||
End Select
|
||||
If b Then e.Handled = True
|
||||
End Sub
|
||||
Private Sub RefillList()
|
||||
Private Sub RefillList(Optional ByVal Update As Boolean = True)
|
||||
Try
|
||||
With LIST_VIDEOS
|
||||
.Items.Clear()
|
||||
If UrlList.Count > 0 Then UrlList.ForEach(Sub(u) .Items.Add(u))
|
||||
If .Items.Count > 0 And _LatestSelected >= 0 And _LatestSelected <= .Items.Count - 1 Then .SelectedIndex = _LatestSelected
|
||||
If Update Then UpdateUrlsFile()
|
||||
End With
|
||||
Catch ex As Exception
|
||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on list refill")
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub UpdateUrlsFile()
|
||||
If UrlList.Count > 0 Then
|
||||
TextSaver.SaveTextToFile(UrlList.ListToString(, Environment.NewLine), DownloadingUrlsFile, True,, EDP.SendInLog)
|
||||
Else
|
||||
If DownloadingUrlsFile.Exists Then DownloadingUrlsFile.Delete(,,, EDP.SendInLog)
|
||||
End If
|
||||
End Sub
|
||||
Private Sub BTT_ADD_Click(sender As Object, e As EventArgs) Handles BTT_ADD.Click
|
||||
AddVideo()
|
||||
End Sub
|
||||
|
||||
Reference in New Issue
Block a user