Compare commits
15 Commits
2022.12.26
...
2023.3.5.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db9e2cfb88 | ||
|
|
85d8df96ca | ||
|
|
6ca90f0489 | ||
|
|
2a780a3acf | ||
|
|
290b5c4586 | ||
|
|
f5e68a7032 | ||
|
|
ece573dd40 | ||
|
|
1f1148020c | ||
|
|
fc226d549a | ||
|
|
602771d982 | ||
|
|
3e472b4f2b | ||
|
|
30c3fe3b68 | ||
|
|
38c81b7a0b | ||
|
|
0fb6add751 | ||
|
|
5d64b8c7ce |
@@ -8,14 +8,16 @@ I welcome requests! Follow these steps to contribute:
|
|||||||
1. If you have a code change suggestion, you can post a replacement code block. I also accept pull requests.
|
1. If you have a code change suggestion, you can post a replacement code block. I also accept pull requests.
|
||||||
|
|
||||||
# How to build from source
|
# How to build from source
|
||||||
1. Delete the "PersonalUtilities" project from the solution.
|
1. Delete the ```PersonalUtilities``` project from the solution.
|
||||||
1. Delete the "PersonalUtilities.Notifications" project from the solution.
|
1. Delete the ```PersonalUtilities.Notifications``` project from the solution.
|
||||||
|
1. Delete the ```cURL``` folder from the solution.
|
||||||
|
1. Delete the ```ffmpeg.exe``` from the solution.
|
||||||
1. The following libraries must be added to project references with the '**Copy to output folder**' option:
|
1. The following libraries must be added to project references with the '**Copy to output folder**' option:
|
||||||
- ```PersonalUtilities.dll```
|
- ```PersonalUtilities.dll```
|
||||||
- ```PersonalUtilities.Notifications.dll```
|
- ```PersonalUtilities.Notifications.dll```
|
||||||
- ```Microsoft.Toolkit.Uwp.Notifications.dll```
|
- ```Microsoft.Toolkit.Uwp.Notifications.dll```
|
||||||
- ```System.ValueTuple.dll```
|
- ```System.ValueTuple.dll```
|
||||||
1. Import PersonalUtilities.Functions for the whole project.
|
1. Import ```PersonalUtilities.Functions``` for the whole project.
|
||||||
|
|
||||||
**Always use the correct libraries. You must download libraries from the same release date as the code commit date.**
|
**Always use the correct libraries. You must download libraries from the same release date as the code commit date.**
|
||||||
|
|
||||||
|
|||||||
96
Changelog.md
@@ -1,3 +1,99 @@
|
|||||||
|
# 2023.3.5.0
|
||||||
|
|
||||||
|
*2023-03-05*
|
||||||
|
|
||||||
|
- Fixed
|
||||||
|
- A bug in the new way of naming `SavedPosts` data files.
|
||||||
|
- An error that could occur during Twitter MD5 comparison.
|
||||||
|
- A bug in the ffmpeg file parts concatenation algorithm that could occur in some cases.
|
||||||
|
|
||||||
|
# 2023.3.1.0
|
||||||
|
|
||||||
|
*2023-03-01*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- **Path plugin.** Now you can add paths. *This may be suitable if you want to add a collection of media data to a specific user collection.*
|
||||||
|
- MainWindow: setting a background image
|
||||||
|
- MainWindow: setting background color and font color
|
||||||
|
- Feed: setting background color and font color
|
||||||
|
- Feed: (Request #108) center the image in the feed grid
|
||||||
|
- Users: the ability to use user site name (if it exists) as a friendly name (on supported sites: Reddit, Twitter, Instagram)
|
||||||
|
- Users: the ability to update user site name every time
|
||||||
|
- Twitter: ability to download images using MD5 comparison to protect against duplicate downloads *(this may be suitable for the users who post the same image many times)*
|
||||||
|
- Twitter: one-time duplicate image removal option
|
||||||
|
- XHamster: (Request #107) added channels downloading
|
||||||
|
- Updated
|
||||||
|
- Updated ffmpeg to version [5.1.2](https://github.com/GyanD/codexffmpeg/releases/tag/5.1.2)
|
||||||
|
- Fixed
|
||||||
|
- PornHub: (Issue #106) unicode titles
|
||||||
|
- (Issue #106) problem with non-Latin characters
|
||||||
|
- ffmpeg: maximum input length error when merging parts of files
|
||||||
|
|
||||||
|
# 2023.2.5.0
|
||||||
|
|
||||||
|
*2023-02-05*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- The ability to configure UserAgent
|
||||||
|
- Fixed
|
||||||
|
- (Issue #101) Failed download Gfycat video in some cases
|
||||||
|
|
||||||
|
# 2023.1.27.0
|
||||||
|
|
||||||
|
*2023-01-27*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- Advanced Twitter options for GIFs
|
||||||
|
- Changing the icon of the user creation form based on the selected site
|
||||||
|
- Fixed
|
||||||
|
- Pinned Instagram posts reload every time
|
||||||
|
- Plugins
|
||||||
|
- Added
|
||||||
|
- `Interaction` option to the `Provider` attribute
|
||||||
|
- `IPropertyProvider` interface
|
||||||
|
|
||||||
|
# 2023.1.24.1
|
||||||
|
|
||||||
|
*2023-01-24*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- Icon for standalone downloader
|
||||||
|
- Fixed
|
||||||
|
- (Issue #100) some Imgur albums won't download
|
||||||
|
|
||||||
|
# 2023.1.24.0
|
||||||
|
|
||||||
|
*2023-01-24*
|
||||||
|
|
||||||
|
- Fixed
|
||||||
|
- (Issue #100) Imgur albums not downloading
|
||||||
|
- When deleting a collection with the 'ban' option, users in the collection are not banned
|
||||||
|
|
||||||
|
# 2023.1.2.0
|
||||||
|
|
||||||
|
*2023-01-02*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- RedGifs: an ability to customize token refresh interval
|
||||||
|
- RedGifs: token refresh interval changed from 24 hours to 12 hours
|
||||||
|
- Updated labels collection
|
||||||
|
- Fixed
|
||||||
|
- PornHub: bug in the downloader
|
||||||
|
- PornHub: download additional non-user videos
|
||||||
|
- Reddit: bug in standalone downloader
|
||||||
|
- Fixed a bug in the user list loading algorithm
|
||||||
|
- Notifications: pressing any button opens SCrawler
|
||||||
|
|
||||||
|
# 2022.12.27.0
|
||||||
|
|
||||||
|
*2022-12-27*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- XVideos: added downloading 'Quickies'
|
||||||
|
- Instagram: added more enable/disable options
|
||||||
|
- Fixed
|
||||||
|
- XVideos not downloading (sorry, I broke it in a previous release)
|
||||||
|
|
||||||
# 2022.12.26.0
|
# 2022.12.26.0
|
||||||
|
|
||||||
*2022-12-26*
|
*2022-12-26*
|
||||||
|
|||||||
2
FAQ.md
@@ -42,7 +42,7 @@ A: How to request a new site you can read [here](CONTRIBUTING.md#how-to-request-
|
|||||||
|
|
||||||
#### Q: **Twitter/Instagram download failed.**
|
#### Q: **Twitter/Instagram download failed.**
|
||||||
|
|
||||||
A: Check your credentials. Both of these sites require cookies. Check your [Twitter tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) and [Instagram settings](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram-settings). If all settings are set, but nothing works, go to [create a new issue](https://github.com/AAndyProgram/SCrawler/issues). Don't forget to attach the LOG.
|
A: Check your credentials. Both of these sites require cookies. Check your [Twitter tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) and [Instagram settings](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram). If all settings are set, but nothing works, go to [create a new issue](https://github.com/AAndyProgram/SCrawler/issues). Don't forget to attach the LOG.
|
||||||
|
|
||||||
**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**
|
**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ You can support the program by:
|
|||||||
- :repeat: make a post about my program on your profile (Reddit, Twitter, Instagram and any other social networks)
|
- :repeat: make a post about my program on your profile (Reddit, Twitter, Instagram and any other social networks)
|
||||||
- :speech_balloon: tell your friends about the program
|
- :speech_balloon: tell your friends about the program
|
||||||
- :heart: like the program on this site: https://alternativeto.net/software/scrawler/about/
|
- :heart: like the program on this site: https://alternativeto.net/software/scrawler/about/
|
||||||
|
- :heart: like the program on this site: https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml
|
||||||
- suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before
|
- suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before
|
||||||
|
|
||||||
I would be very grateful for any support! :blush:
|
I would be very grateful for any support! :blush:
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.4 KiB |
BIN
ProgramScreenshots/SettingsTwitterUser.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 4.3 KiB |
48
README.md
@@ -1,6 +1,4 @@
|
|||||||
# :rainbow_flag: Social networks crawler :rainbow_flag: :christmas_tree:
|
# :rainbow_flag: Social networks crawler :rainbow_flag:
|
||||||
|
|
||||||
# :christmas_tree: Happy new year :christmas_tree:
|
|
||||||
|
|
||||||
[](https://github.com/AAndyProgram/SCrawler/releases/latest)
|
[](https://github.com/AAndyProgram/SCrawler/releases/latest)
|
||||||
[](https://github.com/AAndyProgram/SCrawler/blob/main/LICENSE)
|
[](https://github.com/AAndyProgram/SCrawler/blob/main/LICENSE)
|
||||||
@@ -11,7 +9,7 @@
|
|||||||
|
|
||||||
A program to download photo and video from [any site](#supported-sites) (e.g. Reddit, Twitter, Instagram, TikTok, RedGifs, PornHub, XHamster, XVIDEOS, LPSG).
|
A program to download photo and video from [any site](#supported-sites) (e.g. Reddit, Twitter, Instagram, TikTok, RedGifs, PornHub, XHamster, XVIDEOS, LPSG).
|
||||||
|
|
||||||
**If you like SCrawler, please like the program on [this site]( https://alternativeto.net/software/scrawler/about/)**
|
**If you like SCrawler, please like the program on [this site](https://alternativeto.net/software/scrawler/about/) and/or [this](https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml)**
|
||||||
|
|
||||||
Do you like this program? Consider adding to my coffee fund by making a donation to show your support. :blush:
|
Do you like this program? Consider adding to my coffee fund by making a donation to show your support. :blush:
|
||||||
|
|
||||||
@@ -24,7 +22,7 @@ Do you like this program? Consider adding to my coffee fund by making a donation
|
|||||||
|
|
||||||
# What can program do:
|
# What can program do:
|
||||||
- Download pictures and videos from users' profiles and subreddits:
|
- Download pictures and videos from users' profiles and subreddits:
|
||||||
- Reddit images, galleries of images, videos (downloading Reddit hosted video is going through ffmpeg (**ffmpeg only works with the x64 program**)), saved posts;
|
- Reddit images, galleries of images, videos, saved posts;
|
||||||
- Redgifs videos (https://www.redgifs.com/);
|
- Redgifs videos (https://www.redgifs.com/);
|
||||||
- Twitter images and videos, saved (bookmarked) posts;
|
- Twitter images and videos, saved (bookmarked) posts;
|
||||||
- Instagram images and videos, tagged posts, stories, saved posts;
|
- Instagram images and videos, tagged posts, stories, saved posts;
|
||||||
@@ -39,18 +37,18 @@ Do you like this program? Consider adding to my coffee fund by making a donation
|
|||||||
- Download [saved Reddit, Twitter and Instagram posts](https://github.com/AAndyProgram/SCrawler/wiki/Home#saved-posts)
|
- Download [saved Reddit, Twitter and Instagram posts](https://github.com/AAndyProgram/SCrawler/wiki/Home#saved-posts)
|
||||||
- Add users from parsed channel
|
- Add users from parsed channel
|
||||||
- **Advanced user management**
|
- **Advanced user management**
|
||||||
- **Automation** (downloading data automatically every ```X``` minutes)
|
- **Automation** ([downloading data automatically](https://github.com/AAndyProgram/SCrawler/wiki/Settings#automation) every ```X``` minutes)
|
||||||
- **Feed** (feed of downloaded media files)
|
- **Feed** ([feed](https://github.com/AAndyProgram/SCrawler/wiki#feed) of downloaded media files)
|
||||||
- Labeling users
|
- Labeling users
|
||||||
- Create download groups
|
- Create [download groups](https://github.com/AAndyProgram/SCrawler/wiki/Settings#download-groups)
|
||||||
- Adding users to favorites and temporary
|
- Adding users to favorites and temporary
|
||||||
- Filter exists users by label or group
|
- [Filter exists users](https://github.com/AAndyProgram/SCrawler/wiki#view) by label or group
|
||||||
- Selection of media types you want to download (images only, videos only, both)
|
- Selection of media types you want to download (images only, videos only, both)
|
||||||
- Download a special video, image or gallery
|
- [Download a special video](https://github.com/AAndyProgram/SCrawler/wiki#download-separate-video), image or gallery
|
||||||
- Making collections (grouping users into collections)
|
- Making [collections](https://github.com/AAndyProgram/SCrawler/wiki#collections) (grouping users into collections)
|
||||||
- Specifying a user folder (for downloading data to another location)
|
- Specifying a user folder (for downloading data to another location)
|
||||||
- Changing user icons
|
- Changing user icons
|
||||||
- Changing view modes
|
- Changing [view modes](https://github.com/AAndyProgram/SCrawler/wiki#view)
|
||||||
- ...and many others...
|
- ...and many others...
|
||||||
|
|
||||||
# Supported sites
|
# Supported sites
|
||||||
@@ -76,11 +74,11 @@ First, the program downloads the full profile. After the program downloads only
|
|||||||
|
|
||||||
## Reddit
|
## Reddit
|
||||||
|
|
||||||
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.
|
The program parses user posts, obtain MD5 images hash and compares them with existing ones to remove duplicates. Then the media will be downloaded.
|
||||||
|
|
||||||
## Other sites
|
## Other sites
|
||||||
|
|
||||||
The program parses all user posts and compares file names with existing ones to remove duplicates. Then the media will be downloaded.
|
The program parses user posts and compares file names with existing ones to remove duplicates. Then the media will be downloaded.
|
||||||
|
|
||||||
## How to request a new site
|
## How to request a new site
|
||||||
|
|
||||||
@@ -122,7 +120,7 @@ Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about
|
|||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
**Just download the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest), unzip the program archive to any folder, copy the file ```ffmpeg.exe``` into it and enjoy.** :blush:
|
**Just download the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest), unzip the program archive to any folder and enjoy.** :blush:
|
||||||
|
|
||||||
**Don't put program in the ```Program Files``` system folder (this is portable program and program settings are stored in the program folder)**
|
**Don't put program in the ```Program Files``` system folder (this is portable program and program settings are stored in the program folder)**
|
||||||
|
|
||||||
@@ -130,17 +128,11 @@ Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about
|
|||||||
|
|
||||||
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.**
|
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.**
|
||||||
|
|
||||||
# How to build from source
|
# [How to build from source](CONTRIBUTING.md#how-to-build-from-source)
|
||||||
|
|
||||||
Read about how to build from source [here](CONTRIBUTING.md#how-to-build-from-source)
|
# [How to make a plugin](https://github.com/AAndyProgram/SCrawler/wiki/Plugins)
|
||||||
|
|
||||||
# How to make a plugin
|
# [How to support](HowToSupport.md)
|
||||||
|
|
||||||
Read about how to make plugin [here](https://github.com/AAndyProgram/SCrawler/wiki/Plugins).
|
|
||||||
|
|
||||||
# How to support
|
|
||||||
|
|
||||||
Read more about how to support the program [here](HowToSupport.md).
|
|
||||||
|
|
||||||
# Settings and usage
|
# Settings and usage
|
||||||
|
|
||||||
@@ -160,4 +152,10 @@ Create a shortcut for the program. Open shortcut properties. In the ```Shortcut`
|
|||||||
|
|
||||||
Example: ```D:\Programs\SCrawler\SCrawler.exe v```
|
Example: ```D:\Programs\SCrawler\SCrawler.exe v```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
# Contact me
|
||||||
|
|
||||||
|
[](https://matrix.to/#/@andyprogram:matrix.org)
|
||||||
|
|
||||||
|
[](https://discordapp.com/users/1012768226679206009) AndyProgram#3804
|
||||||
@@ -100,6 +100,8 @@ Namespace Plugin.Attributes
|
|||||||
''' <see langword="False"/> - only for conversion
|
''' <see langword="False"/> - only for conversion
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Public FieldsChecker As Boolean = False
|
Public FieldsChecker As Boolean = False
|
||||||
|
''' <summary>Interaction with changing text field. Default: <see langword="False"/></summary>
|
||||||
|
Public Interaction As Boolean = False
|
||||||
''' <summary>Initialize a new Provider attribute. <see cref="IFormatProvider"/> is only allowed</summary>
|
''' <summary>Initialize a new Provider attribute. <see cref="IFormatProvider"/> is only allowed</summary>
|
||||||
''' <param name="PropertyName">The name of the property for which this provider is used</param>
|
''' <param name="PropertyName">The name of the property for which this provider is used</param>
|
||||||
Public Sub New(ByVal PropertyName As String)
|
Public Sub New(ByVal PropertyName As String)
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2022.12.26.0")>
|
<Assembly: AssemblyVersion("2023.2.5.0")>
|
||||||
<Assembly: AssemblyFileVersion("2022.12.26.0")>
|
<Assembly: AssemblyFileVersion("2023.2.5.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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 Plugin
|
||||||
|
Public Interface IPropertyProvider : Inherits IFormatProvider
|
||||||
|
Property PropertyName As String
|
||||||
|
End Interface
|
||||||
|
End Namespace
|
||||||
@@ -102,6 +102,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Attributes\Attributes.vb" />
|
<Compile Include="Attributes\Attributes.vb" />
|
||||||
|
<Compile Include="ObjectInterfaces\IPropertyProvider.vb" />
|
||||||
<Compile Include="Objects\ExchangeOptions.vb" />
|
<Compile Include="Objects\ExchangeOptions.vb" />
|
||||||
<Compile Include="ObjectInterfaces\ILogProvider.vb" />
|
<Compile Include="ObjectInterfaces\ILogProvider.vb" />
|
||||||
<Compile Include="Interfaces\IPluginContentProvider.vb" />
|
<Compile Include="Interfaces\IPluginContentProvider.vb" />
|
||||||
|
|||||||
@@ -9,5 +9,8 @@
|
|||||||
Namespace API.Base
|
Namespace API.Base
|
||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
Friend ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
|
Friend ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
|
||||||
|
Friend ReadOnly TitleHtmlConverter As Func(Of String, String) =
|
||||||
|
Function(Input) SymbolsConverter.HTML.Decode(SymbolsConverter.Convert(Input, EDP.ReturnValue), EDP.ReturnValue).
|
||||||
|
StringRemoveWinForbiddenSymbols().StringTrim()
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -37,7 +37,6 @@ Namespace API.Base
|
|||||||
.LoadSettings()
|
.LoadSettings()
|
||||||
Else
|
Else
|
||||||
.CookiesDomain = CookiesDomain
|
.CookiesDomain = CookiesDomain
|
||||||
.Cookies = New CookieKeeper(.CookiesDomain) With {.EncryptKey = SettingsCLS.CookieEncryptKey}
|
|
||||||
.CookiesEncryptKey = SettingsCLS.CookieEncryptKey
|
.CookiesEncryptKey = SettingsCLS.CookieEncryptKey
|
||||||
.SaveSettings()
|
.SaveSettings()
|
||||||
End If
|
End If
|
||||||
@@ -53,6 +52,7 @@ Namespace API.Base
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Overridable Sub EndInit() Implements ISiteSettings.EndInit
|
Friend Overridable Sub EndInit() Implements ISiteSettings.EndInit
|
||||||
EncryptCookies.ValidateCookiesEncrypt(Responser)
|
EncryptCookies.ValidateCookiesEncrypt(Responser)
|
||||||
|
If Not DefaultUserAgent.IsEmptyString And Not Responser Is Nothing Then Responser.UserAgent = DefaultUserAgent
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overridable Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
Friend Overridable Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ Namespace API.Base
|
|||||||
|
|
||||||
Post = New UserPost With {
|
Post = New UserPost With {
|
||||||
.ID = e.Attribute(Name_MediaPostID).Value,
|
.ID = e.Attribute(Name_MediaPostID).Value,
|
||||||
.[Date] = AConvert(Of Date)(e.Attribute(Name_MediaPostDate).Value, ParsersDataDateProvider, Nothing)
|
.[Date] = AConvert(Of Date)(e.Attribute(Name_MediaPostDate).Value, DateTimeDefaultProvider, Nothing)
|
||||||
}
|
}
|
||||||
End Sub
|
End Sub
|
||||||
Public Shared Widening Operator CType(ByVal _URL As String) As UserMedia
|
Public Shared Widening Operator CType(ByVal _URL As String) As UserMedia
|
||||||
@@ -225,7 +225,7 @@ Namespace API.Base
|
|||||||
New EAttribute(Name_MediaFile, File.File),
|
New EAttribute(Name_MediaFile, File.File),
|
||||||
New EAttribute(Name_SpecialFolder, SpecialFolder),
|
New EAttribute(Name_SpecialFolder, SpecialFolder),
|
||||||
New EAttribute(Name_MediaPostID, Post.ID),
|
New EAttribute(Name_MediaPostID, Post.ID),
|
||||||
New EAttribute(Name_MediaPostDate, AConvert(Of String)(Post.Date, ParsersDataDateProvider, String.Empty))
|
New EAttribute(Name_MediaPostDate, AConvert(Of String)(Post.Date, DateTimeDefaultProvider, String.Empty))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -6,16 +6,18 @@
|
|||||||
'
|
'
|
||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports System.IO
|
||||||
|
Imports System.Net
|
||||||
|
Imports System.Threading
|
||||||
|
Imports System.Runtime.CompilerServices
|
||||||
|
Imports SCrawler.Plugin
|
||||||
|
Imports SCrawler.Plugin.Hosts
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools
|
||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
Imports System.IO
|
|
||||||
Imports System.Net
|
|
||||||
Imports System.Threading
|
|
||||||
Imports SCrawler.Plugin
|
|
||||||
Imports SCrawler.Plugin.Hosts
|
|
||||||
Imports UStates = SCrawler.API.Base.UserMedia.States
|
Imports UStates = SCrawler.API.Base.UserMedia.States
|
||||||
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
||||||
Namespace API.Base
|
Namespace API.Base
|
||||||
@@ -107,6 +109,7 @@ Namespace API.Base
|
|||||||
Private Const Name_UserExists As String = "UserExists"
|
Private Const Name_UserExists As String = "UserExists"
|
||||||
Private Const Name_UserSuspended As String = "UserSuspended"
|
Private Const Name_UserSuspended As String = "UserSuspended"
|
||||||
Private Const Name_FriendlyName As String = "FriendlyName"
|
Private Const Name_FriendlyName As String = "FriendlyName"
|
||||||
|
Private Const Name_UserSiteName As String = "UserSiteName"
|
||||||
Private Const Name_UserID As String = "UserID"
|
Private Const Name_UserID As String = "UserID"
|
||||||
Private Const Name_Description As String = "Description"
|
Private Const Name_Description As String = "Description"
|
||||||
Private Const Name_ParseUserMediaOnly As String = "ParseUserMediaOnly"
|
Private Const Name_ParseUserMediaOnly As String = "ParseUserMediaOnly"
|
||||||
@@ -140,17 +143,30 @@ Namespace API.Base
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend Property Progress As MyProgress
|
Friend Property Progress As MyProgress
|
||||||
Friend ReadOnly Property Self As IUserData Implements IUserData.Self
|
|
||||||
Get
|
|
||||||
Return Me
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
#End Region
|
#End Region
|
||||||
#Region "User name, ID, exist, suspend"
|
#Region "User name, ID, exist, suspend"
|
||||||
Friend User As UserInfo
|
Friend User As UserInfo
|
||||||
Friend Property IsSavedPosts As Boolean Implements IPluginContentProvider.IsSavedPosts
|
Friend Property IsSavedPosts As Boolean Implements IPluginContentProvider.IsSavedPosts
|
||||||
Friend Overridable Property UserExists As Boolean = True Implements IUserData.Exists, IPluginContentProvider.UserExists
|
Private _UserExists As Boolean = True
|
||||||
Friend Overridable Property UserSuspended As Boolean = False Implements IUserData.Suspended, IPluginContentProvider.UserSuspended
|
Friend Overridable Property UserExists As Boolean Implements IUserData.Exists, IPluginContentProvider.UserExists
|
||||||
|
Get
|
||||||
|
Return _UserExists
|
||||||
|
End Get
|
||||||
|
Set(ByVal _UserExists As Boolean)
|
||||||
|
If Not Me._UserExists = _UserExists Then EnvirChanged(_UserExists)
|
||||||
|
Me._UserExists = _UserExists
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Private _UserSuspended As Boolean = False
|
||||||
|
Friend Overridable Property UserSuspended As Boolean Implements IUserData.Suspended, IPluginContentProvider.UserSuspended
|
||||||
|
Get
|
||||||
|
Return _UserSuspended
|
||||||
|
End Get
|
||||||
|
Set(ByVal _UserSuspended As Boolean)
|
||||||
|
If Not Me._UserSuspended = _UserSuspended Then EnvirChanged(_UserSuspended)
|
||||||
|
Me._UserSuspended = _UserSuspended
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
Friend Overridable Property Name As String Implements IContentProvider.Name, IPluginContentProvider.Name
|
Friend Overridable Property Name As String Implements IContentProvider.Name, IPluginContentProvider.Name
|
||||||
Get
|
Get
|
||||||
Return User.Name
|
Return User.Name
|
||||||
@@ -162,7 +178,46 @@ Namespace API.Base
|
|||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
Friend Overridable Property ID As String = String.Empty Implements IContentProvider.ID, IPluginContentProvider.ID
|
Friend Overridable Property ID As String = String.Empty Implements IContentProvider.ID, IPluginContentProvider.ID
|
||||||
Friend Overridable Property FriendlyName As String = String.Empty Implements IContentProvider.FriendlyName
|
Protected _FriendlyName As String = String.Empty
|
||||||
|
Friend Overridable Property FriendlyName As String Implements IContentProvider.FriendlyName
|
||||||
|
Get
|
||||||
|
If Settings.UserSiteNameAsFriendly Then
|
||||||
|
Return _FriendlyName.IfNullOrEmpty(UserSiteName)
|
||||||
|
Else
|
||||||
|
Return _FriendlyName
|
||||||
|
End If
|
||||||
|
End Get
|
||||||
|
Set(ByVal n As String)
|
||||||
|
_FriendlyName = n
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property FriendlyNameOrig As String
|
||||||
|
Get
|
||||||
|
Return _FriendlyName
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property FriendlyNameIsSiteName As Boolean
|
||||||
|
Get
|
||||||
|
If Settings.UserSiteNameAsFriendly Then
|
||||||
|
Return Not FriendlyName.IsEmptyString And Not _FriendlyName = UserSiteName And FriendlyName = UserSiteName
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Private _UserSiteName As String = String.Empty
|
||||||
|
Friend Property UserSiteName As String
|
||||||
|
Get
|
||||||
|
Return _UserSiteName
|
||||||
|
End Get
|
||||||
|
Set(ByVal _UserSiteName As String)
|
||||||
|
If Not Me._UserSiteName = _UserSiteName Then EnvirChanged(_UserSiteName)
|
||||||
|
Me._UserSiteName = _UserSiteName
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Protected Sub UserSiteNameUpdate(ByVal NewName As String)
|
||||||
|
If Not NewName.IsEmptyString And (UserSiteName.IsEmptyString Or Settings.UserSiteNameUpdateEveryTime) Then UserSiteName = NewName
|
||||||
|
End Sub
|
||||||
Friend ReadOnly Property UserModel As UsageModel Implements IUserData.UserModel
|
Friend ReadOnly Property UserModel As UsageModel Implements IUserData.UserModel
|
||||||
Get
|
Get
|
||||||
Return User.UserModel
|
Return User.UserModel
|
||||||
@@ -196,10 +251,6 @@ Namespace API.Base
|
|||||||
_DescriptionChecked = True
|
_DescriptionChecked = True
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Protected Sub UserDescriptionReset()
|
|
||||||
_DescriptionChecked = False
|
|
||||||
_DescriptionEveryTime = Settings.UpdateUserDescriptionEveryTime
|
|
||||||
End Sub
|
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Favorite, Temporary"
|
#Region "Favorite, Temporary"
|
||||||
Protected _Favorite As Boolean = False
|
Protected _Favorite As Boolean = False
|
||||||
@@ -245,12 +296,12 @@ Namespace API.Base
|
|||||||
Friend Overridable Sub SetPicture(ByVal f As SFile) Implements IUserData.SetPicture
|
Friend Overridable Sub SetPicture(ByVal f As SFile) Implements IUserData.SetPicture
|
||||||
Try
|
Try
|
||||||
If f.Exists Then
|
If f.Exists Then
|
||||||
Using p As New UserImage(f, User.File) : p.Save() : End Using
|
Using p As New UserImage(f, MyFile) : p.Save() : End Using
|
||||||
End If
|
End If
|
||||||
Catch
|
Catch
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Protected Function GetNullPicture(ByVal MaxHeigh As XML.Base.XMLValue(Of Integer)) As Bitmap
|
Protected Function GetNullPicture(ByVal MaxHeigh As XMLValue(Of Integer)) As Bitmap
|
||||||
Return New Bitmap(CInt(DivideWithZeroChecking(MaxHeigh.Value, 100) * 75), MaxHeigh.Value)
|
Return New Bitmap(CInt(DivideWithZeroChecking(MaxHeigh.Value, 100) * 75), MaxHeigh.Value)
|
||||||
End Function
|
End Function
|
||||||
Friend Function GetPicture(Of T)(Optional ByVal ReturnNullImageOnNothing As Boolean = True, Optional ByVal GetToast As Boolean = False) As T
|
Friend Function GetPicture(Of T)(Optional ByVal ReturnNullImageOnNothing As Boolean = True, Optional ByVal GetToast As Boolean = False) As T
|
||||||
@@ -408,13 +459,18 @@ BlockNullPicture:
|
|||||||
#Region "Files"
|
#Region "Files"
|
||||||
Friend Overridable Property MyFile As SFile Implements IUserData.File
|
Friend Overridable Property MyFile As SFile Implements IUserData.File
|
||||||
Get
|
Get
|
||||||
Return User.File
|
If IsSavedPosts Then
|
||||||
|
Return MyFileSettings
|
||||||
|
Else
|
||||||
|
Return User.File
|
||||||
|
End If
|
||||||
End Get
|
End Get
|
||||||
Set(ByVal f As SFile)
|
Set(ByVal f As SFile)
|
||||||
User.File = f
|
User.File = f
|
||||||
Settings.UpdateUsersList(User)
|
Settings.UpdateUsersList(User)
|
||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
|
Protected MyFileSettings As SFile
|
||||||
Protected MyFileData As SFile
|
Protected MyFileData As SFile
|
||||||
Protected MyFilePosts As SFile
|
Protected MyFilePosts As SFile
|
||||||
Friend Overridable Property FileExists As Boolean = False Implements IUserData.FileExists
|
Friend Overridable Property FileExists As Boolean = False Implements IUserData.FileExists
|
||||||
@@ -660,14 +716,16 @@ BlockNullPicture:
|
|||||||
Private _UserInformationLoaded As Boolean = False
|
Private _UserInformationLoaded As Boolean = False
|
||||||
Friend Overridable Sub LoadUserInformation() Implements IUserData.LoadUserInformation
|
Friend Overridable Sub LoadUserInformation() Implements IUserData.LoadUserInformation
|
||||||
Try
|
Try
|
||||||
If MyFile.Exists Then
|
UpdateDataFiles(, True)
|
||||||
|
If MyFileSettings.Exists Then
|
||||||
FileExists = True
|
FileExists = True
|
||||||
Using x As New XmlFile(MyFile) With {.XmlReadOnly = True}
|
Using x As New XmlFile(MyFileSettings) With {.XmlReadOnly = True}
|
||||||
If User.Name.IsEmptyString Then User.Name = x.Value(Name_UserName)
|
If User.Name.IsEmptyString Then User.Name = x.Value(Name_UserName)
|
||||||
UserExists = x.Value(Name_UserExists).FromXML(Of Boolean)(True)
|
UserExists = x.Value(Name_UserExists).FromXML(Of Boolean)(True)
|
||||||
UserSuspended = x.Value(Name_UserSuspended).FromXML(Of Boolean)(False)
|
UserSuspended = x.Value(Name_UserSuspended).FromXML(Of Boolean)(False)
|
||||||
ID = x.Value(Name_UserID)
|
ID = x.Value(Name_UserID)
|
||||||
FriendlyName = x.Value(Name_FriendlyName)
|
_FriendlyName = x.Value(Name_FriendlyName)
|
||||||
|
UserSiteName = x.Value(Name_UserSiteName)
|
||||||
UserDescription = x.Value(Name_Description)
|
UserDescription = x.Value(Name_Description)
|
||||||
ParseUserMediaOnly = x.Value(Name_ParseUserMediaOnly).FromXML(Of Boolean)(False)
|
ParseUserMediaOnly = x.Value(Name_ParseUserMediaOnly).FromXML(Of Boolean)(False)
|
||||||
Temporary = x.Value(Name_Temporary).FromXML(Of Boolean)(False)
|
Temporary = x.Value(Name_Temporary).FromXML(Of Boolean)(False)
|
||||||
@@ -704,7 +762,8 @@ BlockNullPicture:
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Overridable Sub UpdateUserInformation() Implements IUserData.UpdateUserInformation
|
Friend Overridable Sub UpdateUserInformation() Implements IUserData.UpdateUserInformation
|
||||||
Try
|
Try
|
||||||
MyFile.Exists(SFO.Path)
|
UpdateDataFiles(True)
|
||||||
|
MyFileSettings.Exists(SFO.Path)
|
||||||
Using x As New XmlFile With {.Name = "User"}
|
Using x As New XmlFile With {.Name = "User"}
|
||||||
x.Add(Name_Site, Site)
|
x.Add(Name_Site, Site)
|
||||||
x.Add(Name_Plugin, HOST.Key)
|
x.Add(Name_Plugin, HOST.Key)
|
||||||
@@ -717,7 +776,8 @@ BlockNullPicture:
|
|||||||
x.Add(Name_UserExists, UserExists.BoolToInteger)
|
x.Add(Name_UserExists, UserExists.BoolToInteger)
|
||||||
x.Add(Name_UserSuspended, UserSuspended.BoolToInteger)
|
x.Add(Name_UserSuspended, UserSuspended.BoolToInteger)
|
||||||
x.Add(Name_UserID, ID)
|
x.Add(Name_UserID, ID)
|
||||||
x.Add(Name_FriendlyName, FriendlyName)
|
x.Add(Name_FriendlyName, _FriendlyName)
|
||||||
|
x.Add(Name_UserSiteName, UserSiteName)
|
||||||
x.Add(Name_Description, UserDescription)
|
x.Add(Name_Description, UserDescription)
|
||||||
x.Add(Name_ParseUserMediaOnly, ParseUserMediaOnly.BoolToInteger)
|
x.Add(Name_ParseUserMediaOnly, ParseUserMediaOnly.BoolToInteger)
|
||||||
x.Add(Name_Temporary, Temporary.BoolToInteger)
|
x.Add(Name_Temporary, Temporary.BoolToInteger)
|
||||||
@@ -742,7 +802,7 @@ BlockNullPicture:
|
|||||||
|
|
||||||
LoadUserInformation_OptionalFields(x, False)
|
LoadUserInformation_OptionalFields(x, False)
|
||||||
|
|
||||||
x.Save(MyFile)
|
x.Save(MyFileSettings)
|
||||||
End Using
|
End Using
|
||||||
If Not IsSavedPosts Then Settings.UpdateUsersList(User)
|
If Not IsSavedPosts Then Settings.UpdateUsersList(User)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
@@ -755,7 +815,7 @@ BlockNullPicture:
|
|||||||
#Region "User data"
|
#Region "User data"
|
||||||
Friend Overridable Overloads Sub LoadContentInformation(Optional ByVal Force As Boolean = False)
|
Friend Overridable Overloads Sub LoadContentInformation(Optional ByVal Force As Boolean = False)
|
||||||
Try
|
Try
|
||||||
UpdateDataFiles()
|
UpdateDataFiles(, True)
|
||||||
If Not MyFileData.Exists Or (_DataLoaded And Not Force) Then Exit Sub
|
If Not MyFileData.Exists Or (_DataLoaded And Not Force) Then Exit Sub
|
||||||
Using x As New XmlFile(MyFileData, Protector.Modes.All, False) With {.XmlReadOnly = True, .AllowSameNames = True}
|
Using x As New XmlFile(MyFileData, Protector.Modes.All, False) With {.XmlReadOnly = True, .AllowSameNames = True}
|
||||||
x.LoadData()
|
x.LoadData()
|
||||||
@@ -770,7 +830,7 @@ BlockNullPicture:
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Sub UpdateContentInformation()
|
Friend Sub UpdateContentInformation()
|
||||||
Try
|
Try
|
||||||
UpdateDataFiles()
|
UpdateDataFiles(True, True)
|
||||||
If MyFileData.IsEmptyString Then Exit Sub
|
If MyFileData.IsEmptyString Then Exit Sub
|
||||||
MyFileData.Exists(SFO.Path)
|
MyFileData.Exists(SFO.Path)
|
||||||
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Data"}
|
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Data"}
|
||||||
@@ -846,12 +906,45 @@ BlockNullPicture:
|
|||||||
#Region "Download functions and options"
|
#Region "Download functions and options"
|
||||||
Protected Responser As Responser
|
Protected Responser As Responser
|
||||||
Protected UseResponserClient As Boolean = False
|
Protected UseResponserClient As Boolean = False
|
||||||
|
Protected _ForceSaveUserData As Boolean = False
|
||||||
|
Protected _ForceSaveUserInfo As Boolean = False
|
||||||
|
Private _DownloadInProgress As Boolean = False
|
||||||
|
Private _EnvirUserExists As Boolean
|
||||||
|
Private _EnvirUserSuspended As Boolean
|
||||||
|
Private _EnvirChanged As Boolean = False
|
||||||
|
Private _PictureExists As Boolean
|
||||||
|
Private _EnvirInvokeUserUpdated As Boolean = False
|
||||||
|
Protected Sub EnvirDownloadSet()
|
||||||
|
UpdateDataFiles(, True)
|
||||||
|
_DownloadInProgress = True
|
||||||
|
_DescriptionChecked = False
|
||||||
|
_DescriptionEveryTime = Settings.UpdateUserDescriptionEveryTime
|
||||||
|
_ForceSaveUserData = False
|
||||||
|
_ForceSaveUserInfo = False
|
||||||
|
_EnvirUserExists = UserExists
|
||||||
|
_EnvirUserSuspended = UserSuspended
|
||||||
|
_EnvirChanged = False
|
||||||
|
UserExists = True
|
||||||
|
UserSuspended = False
|
||||||
|
DownloadedPictures(False) = 0
|
||||||
|
DownloadedVideos(False) = 0
|
||||||
|
_PictureExists = Settings.ViewModeIsPicture AndAlso Not GetPicture(Of Image)(False) Is Nothing
|
||||||
|
_EnvirInvokeUserUpdated = False
|
||||||
|
End Sub
|
||||||
|
Private Sub EnvirChanged(ByVal NewValue As Object, <CallerMemberName> Optional ByVal Caller As String = Nothing)
|
||||||
|
If _DownloadInProgress Then
|
||||||
|
Select Case Caller
|
||||||
|
Case NameOf(UserExists) : If Not _EnvirUserExists = CBool(NewValue) Then _EnvirChanged = True : _EnvirInvokeUserUpdated = True
|
||||||
|
Case NameOf(UserSuspended) : If Not _EnvirUserSuspended = CBool(NewValue) Then _EnvirChanged = True : _EnvirInvokeUserUpdated = True
|
||||||
|
Case Else : _EnvirChanged = True
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData
|
Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData
|
||||||
Dim Canceled As Boolean = False
|
Dim Canceled As Boolean = False
|
||||||
_ExternalCompatibilityToken = Token
|
_ExternalCompatibilityToken = Token
|
||||||
Try
|
Try
|
||||||
UpdateDataFiles()
|
EnvirDownloadSet()
|
||||||
UserDescriptionReset()
|
|
||||||
If Not Responser Is Nothing Then Responser.Dispose()
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
Responser = New Responser
|
Responser = New Responser
|
||||||
If Not HOST.Responser Is Nothing Then Responser.Copy(HOST.Responser)
|
If Not HOST.Responser Is Nothing Then Responser.Copy(HOST.Responser)
|
||||||
@@ -859,14 +952,7 @@ BlockNullPicture:
|
|||||||
Responser.DecodersError = New ErrorsDescriber(EDP.SendInLog + EDP.ReturnValue) With {
|
Responser.DecodersError = New ErrorsDescriber(EDP.SendInLog + EDP.ReturnValue) With {
|
||||||
.DeclaredMessage = New MMessage($"SymbolsConverter error: [{ToStringForLog()}]", ToStringForLog())}
|
.DeclaredMessage = New MMessage($"SymbolsConverter error: [{ToStringForLog()}]", ToStringForLog())}
|
||||||
|
|
||||||
Dim UpPic As Boolean = Settings.ViewModeIsPicture AndAlso GetPicture(Of Image)(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
|
|
||||||
Dim _downContent As Func(Of UserMedia, Boolean) = Function(c) c.State = UStates.Downloaded
|
Dim _downContent As Func(Of UserMedia, Boolean) = Function(c) c.State = UStates.Downloaded
|
||||||
UserExists = True
|
|
||||||
UserSuspended = False
|
|
||||||
DownloadedPictures(False) = 0
|
|
||||||
DownloadedVideos(False) = 0
|
|
||||||
_TempMediaList.Clear()
|
_TempMediaList.Clear()
|
||||||
_TempPostsList.Clear()
|
_TempPostsList.Clear()
|
||||||
LatestData.Clear()
|
LatestData.Clear()
|
||||||
@@ -895,6 +981,7 @@ BlockNullPicture:
|
|||||||
|
|
||||||
ReparseVideo(Token)
|
ReparseVideo(Token)
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
|
If IsSavedPosts Then UpdateDataFiles(True)
|
||||||
If _TempPostsList.Count > 0 And Not DownloadMissingOnly And __SaveData Then _
|
If _TempPostsList.Count > 0 And Not DownloadMissingOnly And __SaveData Then _
|
||||||
TextSaver.SaveTextToFile(_TempPostsList.ListToString(Environment.NewLine), MyFilePosts, True,, EDP.None)
|
TextSaver.SaveTextToFile(_TempPostsList.ListToString(Environment.NewLine), MyFilePosts, True,, EDP.None)
|
||||||
_ContentNew.ListAddList(_TempMediaList, LAP.ClearBeforeAdd)
|
_ContentNew.ListAddList(_TempMediaList, LAP.ClearBeforeAdd)
|
||||||
@@ -905,12 +992,12 @@ BlockNullPicture:
|
|||||||
Dim mcb& = If(ContentMissingExists, _ContentList.LongCount(Function(c) MissingFinder(c)), 0)
|
Dim mcb& = If(ContentMissingExists, _ContentList.LongCount(Function(c) MissingFinder(c)), 0)
|
||||||
_ContentList.ListAddList(_ContentNew.Where(Function(c) _downContent(c) Or MissingFinder(c)), LNC)
|
_ContentList.ListAddList(_ContentNew.Where(Function(c) _downContent(c) Or MissingFinder(c)), LNC)
|
||||||
Dim mca& = If(ContentMissingExists, _ContentList.LongCount(Function(c) MissingFinder(c)), 0)
|
Dim mca& = If(ContentMissingExists, _ContentList.LongCount(Function(c) MissingFinder(c)), 0)
|
||||||
If DownloadedTotal(False) > 0 Or EnvirChanged.Invoke Or Not mcb = mca Then
|
If DownloadedTotal(False) > 0 Or _EnvirChanged Or Not mcb = mca Or _ForceSaveUserData Then
|
||||||
If __SaveData Then
|
If __SaveData Then
|
||||||
LastUpdated = Now
|
LastUpdated = Now
|
||||||
RunScript()
|
RunScript()
|
||||||
DownloadedPictures(True) = SFile.GetFiles(User.File.CutPath, "*.jpg|*.jpeg|*.png|*.gif|*.webm",, EDP.ReturnValue).Count
|
DownloadedPictures(True) = SFile.GetFiles(MyFile.CutPath, "*.jpg|*.jpeg|*.png|*.gif|*.webm",, EDP.ReturnValue).Count
|
||||||
DownloadedVideos(True) = SFile.GetFiles(User.File.CutPath, "*.mp4|*.mkv|*.mov", SearchOption.AllDirectories, EDP.ReturnValue).Count
|
DownloadedVideos(True) = SFile.GetFiles(MyFile.CutPath, "*.mp4|*.mkv|*.mov", SearchOption.AllDirectories, EDP.ReturnValue).Count
|
||||||
If Labels.Contains(LabelsKeeper.NoParsedUser) Then Labels.Remove(LabelsKeeper.NoParsedUser)
|
If Labels.Contains(LabelsKeeper.NoParsedUser) Then Labels.Remove(LabelsKeeper.NoParsedUser)
|
||||||
UpdateContentInformation()
|
UpdateContentInformation()
|
||||||
Else
|
Else
|
||||||
@@ -921,10 +1008,12 @@ BlockNullPicture:
|
|||||||
End If
|
End If
|
||||||
If Not UserExists Then ReadyForDownload = False
|
If Not UserExists Then ReadyForDownload = False
|
||||||
UpdateUserInformation()
|
UpdateUserInformation()
|
||||||
If _CollectionButtonsExists AndAlso EnvirChanged.Invoke Then UpdateButtonsColor()
|
If _CollectionButtonsExists AndAlso _EnvirChanged Then UpdateButtonsColor()
|
||||||
|
ElseIf _ForceSaveUserInfo Then
|
||||||
|
UpdateUserInformation()
|
||||||
End If
|
End If
|
||||||
ThrowIfDisposed()
|
ThrowIfDisposed()
|
||||||
If UpPic Or EnvirChanged.Invoke Then OnUserUpdated()
|
If Not _PictureExists Or _EnvirInvokeUserUpdated Then OnUserUpdated()
|
||||||
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
||||||
MyMainLOG = $"{ToStringForLog()}: downloading canceled"
|
MyMainLOG = $"{ToStringForLog()}: downloading canceled"
|
||||||
Canceled = True
|
Canceled = True
|
||||||
@@ -937,17 +1026,33 @@ BlockNullPicture:
|
|||||||
If Not Responser Is Nothing Then Responser.Dispose() : Responser = Nothing
|
If Not Responser Is Nothing Then Responser.Dispose() : Responser = Nothing
|
||||||
If Not Canceled Then _DataParsed = True
|
If Not Canceled Then _DataParsed = True
|
||||||
_ContentNew.Clear()
|
_ContentNew.Clear()
|
||||||
|
_DownloadInProgress = False
|
||||||
DownloadTopCount = Nothing
|
DownloadTopCount = Nothing
|
||||||
DownloadDateFrom = Nothing
|
DownloadDateFrom = Nothing
|
||||||
DownloadDateTo = Nothing
|
DownloadDateTo = Nothing
|
||||||
DownloadMissingOnly = False
|
DownloadMissingOnly = False
|
||||||
|
_ForceSaveUserData = False
|
||||||
|
_ForceSaveUserInfo = False
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Protected Sub UpdateDataFiles()
|
Protected Sub UpdateDataFiles(Optional ByVal ForceSaved As Boolean = False, Optional ByVal ValidateContetnt As Boolean = False)
|
||||||
|
'TODELETE: saved posts name compatibility 2023.2.5.0
|
||||||
|
Dim __validateSaved As Func(Of Boolean) = Function() MyFileData.Exists Or MyFilePosts.Exists
|
||||||
If Not User.File.IsEmptyString Then
|
If Not User.File.IsEmptyString Then
|
||||||
MyFileData = User.File
|
MyFileSettings = Nothing
|
||||||
|
If IsSavedPosts Then
|
||||||
|
Dim u As UserInfo = User
|
||||||
|
u.Name = "SavedPosts"
|
||||||
|
u.UpdateUserFile()
|
||||||
|
Dim mfp As SFile = u.File
|
||||||
|
mfp.Name &= "_Posts"
|
||||||
|
mfp.Extension = "txt"
|
||||||
|
If (ValidateContetnt AndAlso mfp.Exists) Or (Not ValidateContetnt AndAlso u.File.Exists) Or ForceSaved Then MyFileSettings = u.File
|
||||||
|
End If
|
||||||
|
If MyFileSettings.IsEmptyString Then MyFileSettings = User.File
|
||||||
|
MyFileData = MyFileSettings
|
||||||
MyFileData.Name &= "_Data"
|
MyFileData.Name &= "_Data"
|
||||||
MyFilePosts = User.File
|
MyFilePosts = MyFileSettings
|
||||||
MyFilePosts.Name &= "_Posts"
|
MyFilePosts.Name &= "_Posts"
|
||||||
MyFilePosts.Extension = "txt"
|
MyFilePosts.Extension = "txt"
|
||||||
Else
|
Else
|
||||||
@@ -1023,12 +1128,14 @@ BlockNullPicture:
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
If Not v.SpecialFolder.IsEmptyString Then
|
If Not v.SpecialFolder.IsEmptyString Then
|
||||||
f.Path = $"{f.PathWithSeparator}{v.SpecialFolder}\".CSFileP.Path
|
f.Path = $"{f.PathWithSeparator}{v.SpecialFolder.StringTrimEnd("*")}\".CSFileP.Path
|
||||||
f.Exists(SFO.Path)
|
f.Exists(SFO.Path)
|
||||||
End If
|
End If
|
||||||
If __isVideo And vsf Then
|
If __isVideo And vsf Then
|
||||||
f.Path = $"{f.PathWithSeparator}Video"
|
If v.SpecialFolder.IsEmptyString OrElse Not v.SpecialFolder.EndsWith("*") Then
|
||||||
If Not v.SpecialFolder.IsEmptyString Then f.Exists(SFO.Path)
|
f.Path = $"{f.PathWithSeparator}Video"
|
||||||
|
If Not v.SpecialFolder.IsEmptyString Then f.Exists(SFO.Path)
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If v.Type = UTypes.m3u8 And UseInternalM3U8Function Then
|
If v.Type = UTypes.m3u8 And UseInternalM3U8Function Then
|
||||||
@@ -1095,7 +1202,6 @@ BlockNullPicture:
|
|||||||
Return v
|
Return v
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
'URGENT: UserDataBase.ProcessException [Throw ex]
|
|
||||||
If ThrowEx Then Throw ex Else Return EXCEPTION_OPERATION_CANCELED
|
If ThrowEx Then Throw ex Else Return EXCEPTION_OPERATION_CANCELED
|
||||||
End If
|
End If
|
||||||
Return 0
|
Return 0
|
||||||
@@ -1290,7 +1396,7 @@ BlockNullPicture:
|
|||||||
Else
|
Else
|
||||||
pOffset = 1
|
pOffset = 1
|
||||||
End If
|
End If
|
||||||
fSource = User.File.CutPath(pOffset).Path.CSFileP
|
fSource = MyFile.CutPath(pOffset).Path.CSFileP
|
||||||
|
|
||||||
Dim OptPath$ = String.Empty
|
Dim OptPath$ = String.Empty
|
||||||
If IncludedInCollection Then
|
If IncludedInCollection Then
|
||||||
@@ -1498,7 +1604,6 @@ BlockNullPicture:
|
|||||||
Function MoveFiles(ByVal CollectionName As String, ByVal SpecialCollectionPath As SFile) As Boolean
|
Function MoveFiles(ByVal CollectionName As String, ByVal SpecialCollectionPath As SFile) As Boolean
|
||||||
Function CopyFiles(ByVal DestinationPath As SFile, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean
|
Function CopyFiles(ByVal DestinationPath As SFile, Optional ByVal e As ErrorsDescriber = Nothing) As Boolean
|
||||||
Sub OpenFolder()
|
Sub OpenFolder()
|
||||||
ReadOnly Property Self As IUserData
|
|
||||||
Property DownloadTopCount As Integer?
|
Property DownloadTopCount As Integer?
|
||||||
Property DownloadDateFrom As Date?
|
Property DownloadDateFrom As Date?
|
||||||
Property DownloadDateTo As Date?
|
Property DownloadDateTo As Date?
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ Namespace API.BaseObjects
|
|||||||
s.DomainsChanged = False
|
s.DomainsChanged = False
|
||||||
End Sub
|
End Sub
|
||||||
Friend Shared Sub OpenSettingsForm(ByVal s As IDomainContainer)
|
Friend Shared Sub OpenSettingsForm(ByVal s As IDomainContainer)
|
||||||
Dim __add As EventHandler(Of SimpleListFormEventArgs) = Sub(sender, e) e.ValueNew = InputBoxE($"Enter a new domain using the pattern [{s.Site}.com]:", "New domain").IfNullOrEmptyE(Nothing)
|
Dim __add As EventHandler(Of SimpleListFormEventArgs) = Sub(sender, e) e.Item = InputBoxE($"Enter a new domain using the pattern [{s.Site}.com]:", "New domain").IfNullOrEmptyE(Nothing)
|
||||||
Dim __delete As EventHandler(Of SimpleListFormEventArgs) = Sub(sender, e)
|
Dim __delete As EventHandler(Of SimpleListFormEventArgs) = Sub(sender, e)
|
||||||
Dim n$ = AConvert(Of String)(e.ValueCurrent, AModes.Var, String.Empty)
|
Dim n$ = AConvert(Of String)(e.Item, AModes.Var, String.Empty)
|
||||||
e.Result = MsgBoxE({$"Are you sure you want to delete the [{n}] domain?",
|
e.Result = MsgBoxE({$"Are you sure you want to delete the [{n}] domain?",
|
||||||
"Removing domains"}, vbYesNo) = vbYes
|
"Removing domains"}, vbYesNo) = vbYes
|
||||||
End Sub
|
End Sub
|
||||||
@@ -71,7 +71,7 @@ Namespace API.BaseObjects
|
|||||||
.Icon = s.Icon,
|
.Icon = s.Icon,
|
||||||
.LocationOnly = True,
|
.LocationOnly = True,
|
||||||
.Size = New Size(400, 330),
|
.Size = New Size(400, 330),
|
||||||
.DesignXMLNode = s.Site
|
.DesignXMLNodeName = s.Site
|
||||||
}
|
}
|
||||||
AddHandler f.AddClick, __add
|
AddHandler f.AddClick, __add
|
||||||
AddHandler f.DeleteClick, __delete
|
AddHandler f.DeleteClick, __delete
|
||||||
|
|||||||
@@ -17,7 +17,18 @@ Namespace API.Gfycat
|
|||||||
Try
|
Try
|
||||||
Dim r$
|
Dim r$
|
||||||
Using w As New WebClient : r = w.DownloadString(URL) : End Using
|
Using w As New WebClient : r = w.DownloadString(URL) : End Using
|
||||||
If Not r.IsEmptyString Then Return RegexReplace(r, RParams.DMS("contentUrl.:.(http.?://[^""]+?\.mp4)", 1)) Else Return String.Empty
|
If Not r.IsEmptyString Then
|
||||||
|
Dim _url$ = RegexReplace(r, RParams.DMS("contentUrl.:.(http.?://[^""]+?\.mp4)", 1, EDP.ReturnValue))
|
||||||
|
If Not _url.IsEmptyString Then
|
||||||
|
If _url.Contains("redgifs.com") Then
|
||||||
|
_url = RegexReplace(_url, RParams.DMS("([^/-]+)[-\w]*\.mp4", 1, EDP.ReturnValue))
|
||||||
|
If Not _url.IsEmptyString Then Return $"https://www.redgifs.com/watch/{_url}"
|
||||||
|
Else
|
||||||
|
Return _url
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return String.Empty
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Dim e As EDP = EDP.ReturnValue
|
Dim e As EDP = EDP.ReturnValue
|
||||||
If TypeOf ex Is WebException Then
|
If TypeOf ex Is WebException Then
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Imports PersonalUtilities.Tools.Web.Documents.JSON
|
|||||||
Namespace API.Imgur
|
Namespace API.Imgur
|
||||||
Namespace Declarations
|
Namespace Declarations
|
||||||
Friend Module Imgur_Declarations
|
Friend Module Imgur_Declarations
|
||||||
Friend ReadOnly PostRegex As RParams = RParams.DMS("/([\w\d]+?)(|\.[\w]{0,4})\Z", 1)
|
Friend ReadOnly PostRegex As RParams = RParams.DMS("/([^/]+?)(|#.*?|\.[\w]{0,4})(|\?.*?)\Z", 1)
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
Friend NotInheritable Class Envir
|
Friend NotInheritable Class Envir
|
||||||
@@ -70,11 +70,12 @@ Namespace API.Imgur
|
|||||||
Friend Shared Function GetVideoInfo(ByVal URL As String, Optional ByVal e As ErrorsDescriber = Nothing) As IEnumerable(Of UserMedia)
|
Friend Shared Function GetVideoInfo(ByVal URL As String, Optional ByVal e As ErrorsDescriber = Nothing) As IEnumerable(Of UserMedia)
|
||||||
Try
|
Try
|
||||||
If Not URL.IsEmptyString AndAlso URL.ToLower.Contains("imgur") AndAlso Not Settings.ImgurClientID.IsEmptyString Then
|
If Not URL.IsEmptyString AndAlso URL.ToLower.Contains("imgur") AndAlso Not Settings.ImgurClientID.IsEmptyString Then
|
||||||
Dim img$ = GetImage(URL, EDP.ReturnValue)
|
Dim imgList As List(Of String) = GetGallery(URL, EDP.ReturnValue)
|
||||||
If Not img.IsEmptyString Then
|
If imgList.ListExists Then
|
||||||
Return {New UserMedia(img)}
|
Return imgList.Select(Function(u) New UserMedia(u))
|
||||||
Else
|
Else
|
||||||
Return GetGallery(URL, EDP.ReturnValue).ListIfNothing.Select(Function(u) New UserMedia(u))
|
Dim img$ = GetImage(URL, EDP.ReturnValue)
|
||||||
|
If Not img.IsEmptyString Then Return {New UserMedia(img)}
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
|
|||||||
@@ -9,10 +9,12 @@
|
|||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Namespace API.Instagram
|
Namespace API.Instagram
|
||||||
Friend Class EditorExchangeOptions
|
Friend Class EditorExchangeOptions
|
||||||
|
Friend Property GetTimeline As Boolean
|
||||||
Friend Property GetStories As Boolean
|
Friend Property GetStories As Boolean
|
||||||
Friend Property GetTagged As Boolean
|
Friend Property GetTagged As Boolean
|
||||||
Friend Sub New(ByVal h As ISiteSettings)
|
Friend Sub New(ByVal h As ISiteSettings)
|
||||||
With DirectCast(h, SiteSettings)
|
With DirectCast(h, SiteSettings)
|
||||||
|
GetTimeline = CBool(.GetTimeline.Value)
|
||||||
GetStories = CBool(.GetStories.Value)
|
GetStories = CBool(.GetStories.Value)
|
||||||
GetTagged = CBool(.GetTagged.Value)
|
GetTagged = CBool(.GetTagged.Value)
|
||||||
End With
|
End With
|
||||||
|
|||||||
41
SCrawler/API/Instagram/OptionsForm.Designer.vb
generated
@@ -26,6 +26,7 @@ Namespace API.Instagram
|
|||||||
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||||
Me.CH_GET_STORIES = New System.Windows.Forms.CheckBox()
|
Me.CH_GET_STORIES = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_GET_TAGGED = New System.Windows.Forms.CheckBox()
|
Me.CH_GET_TAGGED = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_GET_TIMELINE = New System.Windows.Forms.CheckBox()
|
||||||
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
@@ -39,13 +40,13 @@ Namespace API.Instagram
|
|||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
||||||
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(260, 53)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(260, 79)
|
||||||
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||||
CONTAINER_MAIN.Size = New System.Drawing.Size(260, 78)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(260, 104)
|
||||||
CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
@@ -54,26 +55,28 @@ Namespace API.Instagram
|
|||||||
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
TP_MAIN.ColumnCount = 1
|
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.Percent, 100.0!))
|
||||||
TP_MAIN.Controls.Add(Me.CH_GET_STORIES, 0, 0)
|
TP_MAIN.Controls.Add(Me.CH_GET_STORIES, 0, 1)
|
||||||
TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 0, 1)
|
TP_MAIN.Controls.Add(Me.CH_GET_TAGGED, 0, 2)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_GET_TIMELINE, 0, 0)
|
||||||
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
TP_MAIN.Name = "TP_MAIN"
|
TP_MAIN.Name = "TP_MAIN"
|
||||||
TP_MAIN.RowCount = 3
|
TP_MAIN.RowCount = 4
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_MAIN.Size = New System.Drawing.Size(260, 53)
|
TP_MAIN.Size = New System.Drawing.Size(260, 79)
|
||||||
TP_MAIN.TabIndex = 0
|
TP_MAIN.TabIndex = 0
|
||||||
'
|
'
|
||||||
'CH_GET_STORIES
|
'CH_GET_STORIES
|
||||||
'
|
'
|
||||||
Me.CH_GET_STORIES.AutoSize = True
|
Me.CH_GET_STORIES.AutoSize = True
|
||||||
Me.CH_GET_STORIES.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_GET_STORIES.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_GET_STORIES.Location = New System.Drawing.Point(4, 4)
|
Me.CH_GET_STORIES.Location = New System.Drawing.Point(4, 30)
|
||||||
Me.CH_GET_STORIES.Name = "CH_GET_STORIES"
|
Me.CH_GET_STORIES.Name = "CH_GET_STORIES"
|
||||||
Me.CH_GET_STORIES.Size = New System.Drawing.Size(252, 19)
|
Me.CH_GET_STORIES.Size = New System.Drawing.Size(252, 19)
|
||||||
Me.CH_GET_STORIES.TabIndex = 0
|
Me.CH_GET_STORIES.TabIndex = 1
|
||||||
Me.CH_GET_STORIES.Text = "Get stories"
|
Me.CH_GET_STORIES.Text = "Get stories"
|
||||||
Me.CH_GET_STORIES.UseVisualStyleBackColor = True
|
Me.CH_GET_STORIES.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
@@ -81,26 +84,37 @@ Namespace API.Instagram
|
|||||||
'
|
'
|
||||||
Me.CH_GET_TAGGED.AutoSize = True
|
Me.CH_GET_TAGGED.AutoSize = True
|
||||||
Me.CH_GET_TAGGED.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_GET_TAGGED.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_GET_TAGGED.Location = New System.Drawing.Point(4, 30)
|
Me.CH_GET_TAGGED.Location = New System.Drawing.Point(4, 56)
|
||||||
Me.CH_GET_TAGGED.Name = "CH_GET_TAGGED"
|
Me.CH_GET_TAGGED.Name = "CH_GET_TAGGED"
|
||||||
Me.CH_GET_TAGGED.Size = New System.Drawing.Size(252, 19)
|
Me.CH_GET_TAGGED.Size = New System.Drawing.Size(252, 19)
|
||||||
Me.CH_GET_TAGGED.TabIndex = 1
|
Me.CH_GET_TAGGED.TabIndex = 2
|
||||||
Me.CH_GET_TAGGED.Text = "Get tagged data"
|
Me.CH_GET_TAGGED.Text = "Get tagged data"
|
||||||
Me.CH_GET_TAGGED.UseVisualStyleBackColor = True
|
Me.CH_GET_TAGGED.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'CH_GET_TIMELINE
|
||||||
|
'
|
||||||
|
Me.CH_GET_TIMELINE.AutoSize = True
|
||||||
|
Me.CH_GET_TIMELINE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_GET_TIMELINE.Location = New System.Drawing.Point(4, 4)
|
||||||
|
Me.CH_GET_TIMELINE.Name = "CH_GET_TIMELINE"
|
||||||
|
Me.CH_GET_TIMELINE.Size = New System.Drawing.Size(252, 19)
|
||||||
|
Me.CH_GET_TIMELINE.TabIndex = 0
|
||||||
|
Me.CH_GET_TIMELINE.Text = "Get Timeline"
|
||||||
|
Me.CH_GET_TIMELINE.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
'OptionsForm
|
'OptionsForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
Me.ClientSize = New System.Drawing.Size(260, 78)
|
Me.ClientSize = New System.Drawing.Size(260, 104)
|
||||||
Me.Controls.Add(CONTAINER_MAIN)
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32
|
Me.Icon = Global.SCrawler.My.Resources.SiteResources.InstagramIcon_32
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MaximizeBox = False
|
Me.MaximizeBox = False
|
||||||
Me.MaximumSize = New System.Drawing.Size(276, 117)
|
Me.MaximumSize = New System.Drawing.Size(276, 143)
|
||||||
Me.MinimizeBox = False
|
Me.MinimizeBox = False
|
||||||
Me.MinimumSize = New System.Drawing.Size(276, 117)
|
Me.MinimumSize = New System.Drawing.Size(276, 143)
|
||||||
Me.Name = "OptionsForm"
|
Me.Name = "OptionsForm"
|
||||||
Me.ShowInTaskbar = False
|
Me.ShowInTaskbar = False
|
||||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
@@ -116,5 +130,6 @@ Namespace API.Instagram
|
|||||||
|
|
||||||
Private WithEvents CH_GET_STORIES As CheckBox
|
Private WithEvents CH_GET_STORIES As CheckBox
|
||||||
Private WithEvents CH_GET_TAGGED As CheckBox
|
Private WithEvents CH_GET_TAGGED As CheckBox
|
||||||
|
Private WithEvents CH_GET_TIMELINE As CheckBox
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -21,6 +21,7 @@ Namespace API.Instagram
|
|||||||
.MyViewInitialize(True)
|
.MyViewInitialize(True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
With MyExchangeOptions
|
With MyExchangeOptions
|
||||||
|
CH_GET_TIMELINE.Checked = .GetTimeline
|
||||||
CH_GET_STORIES.Checked = .GetStories
|
CH_GET_STORIES.Checked = .GetStories
|
||||||
CH_GET_TAGGED.Checked = .GetTagged
|
CH_GET_TAGGED.Checked = .GetTagged
|
||||||
End With
|
End With
|
||||||
@@ -29,6 +30,7 @@ Namespace API.Instagram
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
With MyExchangeOptions
|
With MyExchangeOptions
|
||||||
|
.GetTimeline = CH_GET_TIMELINE.Checked
|
||||||
.GetStories = CH_GET_STORIES.Checked
|
.GetStories = CH_GET_STORIES.Checked
|
||||||
.GetTagged = CH_GET_TAGGED.Checked
|
.GetTagged = CH_GET_TAGGED.Checked
|
||||||
End With
|
End With
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Imports SCrawler.Plugin
|
|||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
@@ -85,10 +86,10 @@ Namespace API.Instagram
|
|||||||
Friend ReadOnly Property CSRF_TOKEN As PropertyValue
|
Friend ReadOnly Property CSRF_TOKEN As PropertyValue
|
||||||
<PropertyOption(ControlText:="x-ig-app-id", IsAuth:=True, AllowNull:=False), ControlNumber(3)>
|
<PropertyOption(ControlText:="x-ig-app-id", IsAuth:=True, AllowNull:=False), ControlNumber(3)>
|
||||||
Friend Property IG_APP_ID As PropertyValue
|
Friend Property IG_APP_ID As PropertyValue
|
||||||
<PropertyOption(ControlText:="x-ig-www-claim", IsAuth:=True, AllowNull:=False), ControlNumber(4)>
|
<PropertyOption(ControlText:="x-ig-www-claim", IsAuth:=True, AllowNull:=True), ControlNumber(4)>
|
||||||
Friend Property IG_WWW_CLAIM As PropertyValue
|
Friend Property IG_WWW_CLAIM As PropertyValue
|
||||||
Friend Overrides Function BaseAuthExists() As Boolean
|
Friend Overrides Function BaseAuthExists() As Boolean
|
||||||
Return Responser.CookiesExists And ACheck(IG_APP_ID.Value) And ACheck(IG_WWW_CLAIM.Value) And ACheck(CSRF_TOKEN.Value)
|
Return Responser.CookiesExists And ACheck(IG_APP_ID.Value) And ACheck(CSRF_TOKEN.Value)
|
||||||
End Function
|
End Function
|
||||||
Private Const Header_IG_APP_ID As String = "x-ig-app-id"
|
Private Const Header_IG_APP_ID As String = "x-ig-app-id"
|
||||||
Friend Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim"
|
Friend Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim"
|
||||||
@@ -111,33 +112,37 @@ Namespace API.Instagram
|
|||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download properties"
|
#Region "Download properties"
|
||||||
<PropertyOption(ControlText:="Request timer", AllowNull:=False), PXML("RequestsWaitTimer"), ControlNumber(8)>
|
<PropertyOption(ControlText:="Request timer", AllowNull:=False), PXML("RequestsWaitTimer"), ControlNumber(20)>
|
||||||
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider
|
Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Request timer counter", AllowNull:=False, LeftOffset:=120), PXML("RequestsWaitTimerTaskCount"), ControlNumber(9)>
|
<PropertyOption(ControlText:="Request timer counter", AllowNull:=False, LeftOffset:=120), PXML("RequestsWaitTimerTaskCount"), ControlNumber(21)>
|
||||||
Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimerTaskCount), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimerTaskCount), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider
|
Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Posts limit timer", AllowNull:=False), PXML("SleepTimerOnPostsLimit"), ControlNumber(10)>
|
<PropertyOption(ControlText:="Posts limit timer", AllowNull:=False), PXML("SleepTimerOnPostsLimit"), ControlNumber(22)>
|
||||||
Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue
|
Friend ReadOnly Property SleepTimerOnPostsLimit As PropertyValue
|
||||||
<Provider(NameOf(SleepTimerOnPostsLimit), FieldsChecker:=True)>
|
<Provider(NameOf(SleepTimerOnPostsLimit), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider
|
Private ReadOnly Property SleepTimerOnPostsLimitProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Get stories"), PXML, ControlNumber(11)>
|
<PropertyOption(ControlText:="Get timeline", ControlToolTip:="Default value for new users"), PXML, ControlNumber(23)>
|
||||||
|
Friend ReadOnly Property GetTimeline As PropertyValue
|
||||||
|
<PropertyOption(ControlText:="Get stories", ControlToolTip:="Default value for new users"), PXML, ControlNumber(24)>
|
||||||
Friend ReadOnly Property GetStories As PropertyValue
|
Friend ReadOnly Property GetStories As PropertyValue
|
||||||
<PropertyOption(ControlText:="Get tagged photos"), PXML, ControlNumber(12)>
|
<PropertyOption(ControlText:="Get tagged photos", ControlToolTip:="Default value for new users"), PXML, ControlNumber(25)>
|
||||||
Friend ReadOnly Property GetTagged As PropertyValue
|
Friend ReadOnly Property GetTagged As PropertyValue
|
||||||
<PropertyOption(ControlText:="Tagged notify limit",
|
<PropertyOption(ControlText:="Tagged notify limit",
|
||||||
ControlToolTip:="If the number of tagged posts exceeds this number you will be notified." & vbCr &
|
ControlToolTip:="If the number of tagged posts exceeds this number you will be notified." & vbCr &
|
||||||
"-1 to disable"), PXML, ControlNumber(13)>
|
"-1 to disable"), PXML, ControlNumber(26)>
|
||||||
Friend ReadOnly Property TaggedNotifyLimit As PropertyValue
|
Friend ReadOnly Property TaggedNotifyLimit As PropertyValue
|
||||||
<Provider(NameOf(TaggedNotifyLimit), FieldsChecker:=True)>
|
<Provider(NameOf(TaggedNotifyLimit), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider
|
Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download ready"
|
#Region "Download ready"
|
||||||
<PropertyOption(ControlText:="Download timeline", ControlToolTip:="Download timeline, stories and saved posts"), PXML, ControlNumber(6)>
|
<PropertyOption(ControlText:="Download timeline", ControlToolTip:="Download timeline"), PXML, ControlNumber(10)>
|
||||||
Friend ReadOnly Property DownloadTimeline As PropertyValue
|
Friend ReadOnly Property DownloadTimeline As PropertyValue
|
||||||
<PropertyOption(ControlText:="Download tagged", ControlToolTip:="Download tagged posts"), PXML, ControlNumber(7)>
|
<PropertyOption(ControlText:="Download stories", ControlToolTip:="Download stories"), PXML, ControlNumber(11)>
|
||||||
|
Friend ReadOnly Property DownloadStories As PropertyValue
|
||||||
|
<PropertyOption(ControlText:="Download tagged", ControlToolTip:="Download tagged posts"), PXML, ControlNumber(12)>
|
||||||
Friend ReadOnly Property DownloadTagged As PropertyValue
|
Friend ReadOnly Property DownloadTagged As PropertyValue
|
||||||
#End Region
|
#End Region
|
||||||
#Region "429 bypass"
|
#Region "429 bypass"
|
||||||
@@ -207,10 +212,6 @@ Namespace API.Instagram
|
|||||||
.CookiesExtractMode = Responser.CookiesExtractModes.Response
|
.CookiesExtractMode = Responser.CookiesExtractModes.Response
|
||||||
.CookiesUpdateMode = CookieKeeper.UpdateModes.ReplaceByNameAll
|
.CookiesUpdateMode = CookieKeeper.UpdateModes.ReplaceByNameAll
|
||||||
.CookiesExtractedAutoSave = False
|
.CookiesExtractedAutoSave = False
|
||||||
If Not .Cookies Is Nothing Then
|
|
||||||
.Cookies.ChangedAllowInternalDrop = False
|
|
||||||
.Cookies.Changed = False
|
|
||||||
End If
|
|
||||||
End With
|
End With
|
||||||
|
|
||||||
Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString}
|
Dim n() As String = {SettingsCLS.Name_Node_Sites, Site.ToString}
|
||||||
@@ -218,9 +219,10 @@ Namespace API.Instagram
|
|||||||
HashTagged = New PropertyValue(String.Empty, GetType(String))
|
HashTagged = New PropertyValue(String.Empty, GetType(String))
|
||||||
CSRF_TOKEN = New PropertyValue(token, GetType(String), Sub(v) ChangeResponserFields(NameOf(CSRF_TOKEN), v))
|
CSRF_TOKEN = New PropertyValue(token, GetType(String), Sub(v) ChangeResponserFields(NameOf(CSRF_TOKEN), v))
|
||||||
IG_APP_ID = New PropertyValue(app_id, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_APP_ID), v))
|
IG_APP_ID = New PropertyValue(app_id, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_APP_ID), v))
|
||||||
IG_WWW_CLAIM = New PropertyValue(www_claim, GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_WWW_CLAIM), v))
|
IG_WWW_CLAIM = New PropertyValue(www_claim.IfNullOrEmpty(0), GetType(String), Sub(v) ChangeResponserFields(NameOf(IG_WWW_CLAIM), v))
|
||||||
|
|
||||||
DownloadTimeline = New PropertyValue(True)
|
DownloadTimeline = New PropertyValue(True)
|
||||||
|
DownloadStories = New PropertyValue(True)
|
||||||
DownloadTagged = New PropertyValue(False)
|
DownloadTagged = New PropertyValue(False)
|
||||||
|
|
||||||
RequestsWaitTimer = New PropertyValue(1000)
|
RequestsWaitTimer = New PropertyValue(1000)
|
||||||
@@ -230,64 +232,23 @@ Namespace API.Instagram
|
|||||||
SleepTimerOnPostsLimit = New PropertyValue(60000)
|
SleepTimerOnPostsLimit = New PropertyValue(60000)
|
||||||
SleepTimerOnPostsLimitProvider = New TimersChecker(10000)
|
SleepTimerOnPostsLimitProvider = New TimersChecker(10000)
|
||||||
|
|
||||||
|
GetTimeline = New PropertyValue(True)
|
||||||
GetStories = New PropertyValue(False)
|
GetStories = New PropertyValue(False)
|
||||||
GetTagged = New PropertyValue(False)
|
GetTagged = New PropertyValue(False)
|
||||||
TaggedNotifyLimit = New PropertyValue(200)
|
TaggedNotifyLimit = New PropertyValue(200)
|
||||||
TaggedNotifyLimitProvider = New TaggedNotifyLimitChecker
|
TaggedNotifyLimitProvider = New TaggedNotifyLimitChecker
|
||||||
|
|
||||||
DownloadingErrorDate = New XMLValue(Of Date) With {.Provider = New XMLValueConversionProvider(Function(ss, vv) AConvert(Of String)(vv, AModes.Var, Nothing))}
|
DownloadingErrorDate = New XMLValue(Of Date) With {.Provider = New XMLValueConversionProvider(Function(ss, nn, vv, dd) AConvert(Of String)(vv, AModes.Var, Nothing))}
|
||||||
DownloadingErrorDate.SetExtended("InstagramDownloadingErrorDate", Now.AddYears(-10), _XML, n)
|
DownloadingErrorDate.SetExtended("InstagramDownloadingErrorDate", Now.AddYears(-10), _XML, n)
|
||||||
LastDownloadDate = New XMLValue(Of Date)("LastDownloadDate", Now.AddDays(-1), _XML, n)
|
LastDownloadDate = New XMLValue(Of Date)("LastDownloadDate", Now.AddDays(-1), _XML, n)
|
||||||
LastRequestsCount = New XMLValue(Of Integer)("LastRequestsCount", 0, _XML, n)
|
LastRequestsCount = New XMLValue(Of Integer)("LastRequestsCount", 0, _XML, n)
|
||||||
LastRequestsCountLabel = New PropertyValue(LastRequestsCountLabelStr.Invoke(LastRequestsCount.Value))
|
LastRequestsCountLabel = New PropertyValue(LastRequestsCountLabelStr.Invoke(LastRequestsCount.Value))
|
||||||
AddHandler LastRequestsCount.OnValueChanged, Sub(sender, __name, __value) LastRequestsCountLabel.Value = LastRequestsCountLabelStr.Invoke(DirectCast(__value, Existable(Of Integer)).Value)
|
AddHandler LastRequestsCount.ValueChanged, Sub(sender, e) LastRequestsCountLabel.Value = LastRequestsCountLabelStr.Invoke(DirectCast(sender, XMLValue(Of Integer)).ValueF.Value)
|
||||||
|
|
||||||
UrlPatternUser = "https://www.instagram.com/{0}/"
|
UrlPatternUser = "https://www.instagram.com/{0}/"
|
||||||
UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1)
|
UserRegex = RParams.DMS("[htps:/]{7,8}.*?instagram.com/([^/]+)", 1)
|
||||||
ImageVideoContains = "instagram.com"
|
ImageVideoContains = "instagram.com"
|
||||||
End Sub
|
End Sub
|
||||||
Private Structure LatestValues
|
|
||||||
Friend Hash As String
|
|
||||||
Friend Token As String
|
|
||||||
Friend AppID As String
|
|
||||||
Friend WwwClaim As String
|
|
||||||
Friend Exists As Boolean
|
|
||||||
Friend Sub New(ByVal Source As SiteSettings)
|
|
||||||
Exists = True
|
|
||||||
With Source
|
|
||||||
Hash = AConvert(Of String)(.HashTagged.Value, String.Empty)
|
|
||||||
With .Responser
|
|
||||||
Token = .Headers.Value(Header_CSRF_TOKEN)
|
|
||||||
AppID = .Headers.Value(Header_IG_APP_ID)
|
|
||||||
WwwClaim = .Headers.Value(Header_IG_WWW_CLAIM)
|
|
||||||
End With
|
|
||||||
End With
|
|
||||||
End Sub
|
|
||||||
End Structure
|
|
||||||
Private LV As LatestValues = Nothing
|
|
||||||
Friend Overrides Sub BeginEdit()
|
|
||||||
LV = New LatestValues(Me)
|
|
||||||
MyBase.BeginEdit()
|
|
||||||
End Sub
|
|
||||||
Friend Overrides Sub EndEdit()
|
|
||||||
LV = Nothing
|
|
||||||
MyBase.EndEdit()
|
|
||||||
End Sub
|
|
||||||
Friend Overloads Overrides Sub Update()
|
|
||||||
If LV.Exists Then
|
|
||||||
Dim __lv As New LatestValues(Me)
|
|
||||||
If If(Responser.Cookies?.Count, 0) > 0 Then
|
|
||||||
Dim _cookiesChanged As Boolean = If(Responser.Cookies?.Changed, False) And Responser.CookiesExists
|
|
||||||
Dim _tokensChanged As Boolean = (Not __lv.Token.IsEmptyString And Not __lv.WwwClaim.IsEmptyString And Not __lv.AppID.IsEmptyString) And
|
|
||||||
(Not LV.Token = __lv.Token Or Not LV.WwwClaim = __lv.WwwClaim Or Not LV.AppID = __lv.AppID)
|
|
||||||
If _cookiesChanged Or _tokensChanged Then DownloadTimeline.Value = True
|
|
||||||
If Not __lv.Hash.IsEmptyString And (_cookiesChanged Or _tokensChanged Or Not LV.Hash = __lv.Hash) Then DownloadTagged.Value = True
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
LV = Nothing
|
|
||||||
If Not Responser.Cookies Is Nothing Then Responser.Cookies.Changed = False
|
|
||||||
MyBase.Update()
|
|
||||||
End Sub
|
|
||||||
#End Region
|
#End Region
|
||||||
#Region "PropertiesDataChecker"
|
#Region "PropertiesDataChecker"
|
||||||
<PropertiesDataChecker({NameOf(TaggedNotifyLimit)})>
|
<PropertiesDataChecker({NameOf(TaggedNotifyLimit)})>
|
||||||
@@ -330,6 +291,7 @@ Namespace API.Instagram
|
|||||||
Private _NextTagged As Boolean = True
|
Private _NextTagged As Boolean = True
|
||||||
Friend Overrides Sub DownloadStarted(ByVal What As Download)
|
Friend Overrides Sub DownloadStarted(ByVal What As Download)
|
||||||
ActiveJobs += 1
|
ActiveJobs += 1
|
||||||
|
If LastDownloadDate.Value.AddMinutes(120) < Now Or Not ACheck(IG_WWW_CLAIM.Value) Then IG_WWW_CLAIM.Value = "0"
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overrides Sub BeforeStartDownload(ByVal User As Object, ByVal What As Download)
|
Friend Overrides Sub BeforeStartDownload(ByVal User As Object, ByVal What As Download)
|
||||||
With DirectCast(User, UserData)
|
With DirectCast(User, UserData)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ Namespace API.Instagram
|
|||||||
#Region "XML Names"
|
#Region "XML Names"
|
||||||
Private Const Name_LastCursor As String = "LastCursor"
|
Private Const Name_LastCursor As String = "LastCursor"
|
||||||
Private Const Name_FirstLoadingDone As String = "FirstLoadingDone"
|
Private Const Name_FirstLoadingDone As String = "FirstLoadingDone"
|
||||||
|
Private Const Name_GetTimeline As String = "GetTimeline"
|
||||||
Private Const Name_GetStories As String = "GetStories"
|
Private Const Name_GetStories As String = "GetStories"
|
||||||
Private Const Name_GetTagged As String = "GetTaggedData"
|
Private Const Name_GetTagged As String = "GetTaggedData"
|
||||||
Private Const Name_TaggedChecked As String = "TaggedChecked"
|
Private Const Name_TaggedChecked As String = "TaggedChecked"
|
||||||
@@ -70,16 +71,18 @@ Namespace API.Instagram
|
|||||||
Private ReadOnly PostsToReparse As List(Of PostKV)
|
Private ReadOnly PostsToReparse As List(Of PostKV)
|
||||||
Private LastCursor As String = String.Empty
|
Private LastCursor As String = String.Empty
|
||||||
Private FirstLoadingDone As Boolean = False
|
Private FirstLoadingDone As Boolean = False
|
||||||
|
Friend Property GetTimeline As Boolean = True
|
||||||
Friend Property GetStories As Boolean
|
Friend Property GetStories As Boolean
|
||||||
Friend Property GetTaggedData As Boolean
|
Friend Property GetTaggedData As Boolean
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Exchange options"
|
#Region "Exchange options"
|
||||||
Friend Overrides Function ExchangeOptionsGet() As Object
|
Friend Overrides Function ExchangeOptionsGet() As Object
|
||||||
Return New EditorExchangeOptions(HOST.Source) With {.GetStories = GetStories, .GetTagged = GetTaggedData}
|
Return New EditorExchangeOptions(HOST.Source) With {.GetTimeline = GetTimeline, .GetStories = GetStories, .GetTagged = GetTaggedData}
|
||||||
End Function
|
End Function
|
||||||
Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object)
|
Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object)
|
||||||
If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then
|
If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then
|
||||||
With DirectCast(Obj, EditorExchangeOptions)
|
With DirectCast(Obj, EditorExchangeOptions)
|
||||||
|
GetTimeline = .GetTimeline
|
||||||
GetStories = .GetStories
|
GetStories = .GetStories
|
||||||
GetTaggedData = .GetTagged
|
GetTaggedData = .GetTagged
|
||||||
End With
|
End With
|
||||||
@@ -95,12 +98,14 @@ Namespace API.Instagram
|
|||||||
If Loading Then
|
If Loading Then
|
||||||
LastCursor = Container.Value(Name_LastCursor)
|
LastCursor = Container.Value(Name_LastCursor)
|
||||||
FirstLoadingDone = Container.Value(Name_FirstLoadingDone).FromXML(Of Boolean)(False)
|
FirstLoadingDone = Container.Value(Name_FirstLoadingDone).FromXML(Of Boolean)(False)
|
||||||
|
GetTimeline = Container.Value(Name_GetTimeline).FromXML(Of Boolean)(CBool(MySiteSettings.GetTimeline.Value))
|
||||||
GetStories = Container.Value(Name_GetStories).FromXML(Of Boolean)(CBool(MySiteSettings.GetStories.Value))
|
GetStories = Container.Value(Name_GetStories).FromXML(Of Boolean)(CBool(MySiteSettings.GetStories.Value))
|
||||||
GetTaggedData = Container.Value(Name_GetTagged).FromXML(Of Boolean)(CBool(MySiteSettings.GetTagged.Value))
|
GetTaggedData = Container.Value(Name_GetTagged).FromXML(Of Boolean)(CBool(MySiteSettings.GetTagged.Value))
|
||||||
TaggedChecked = Container.Value(Name_TaggedChecked).FromXML(Of Boolean)(False)
|
TaggedChecked = Container.Value(Name_TaggedChecked).FromXML(Of Boolean)(False)
|
||||||
Else
|
Else
|
||||||
Container.Add(Name_LastCursor, LastCursor)
|
Container.Add(Name_LastCursor, LastCursor)
|
||||||
Container.Add(Name_FirstLoadingDone, FirstLoadingDone.BoolToInteger)
|
Container.Add(Name_FirstLoadingDone, FirstLoadingDone.BoolToInteger)
|
||||||
|
Container.Add(Name_GetTimeline, GetTimeline.BoolToInteger)
|
||||||
Container.Add(Name_GetStories, GetStories.BoolToInteger)
|
Container.Add(Name_GetStories, GetStories.BoolToInteger)
|
||||||
Container.Add(Name_GetTagged, GetTaggedData.BoolToInteger)
|
Container.Add(Name_GetTagged, GetTaggedData.BoolToInteger)
|
||||||
Container.Add(Name_TaggedChecked, TaggedChecked.BoolToInteger)
|
Container.Add(Name_TaggedChecked, TaggedChecked.BoolToInteger)
|
||||||
@@ -197,21 +202,22 @@ Namespace API.Instagram
|
|||||||
AddHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived
|
AddHandler Responser.ResponseReceived, AddressOf Responser_ResponseReceived
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
HasError = False
|
HasError = False
|
||||||
If CBool(MySiteSettings.DownloadTimeline.Value) And Not LastCursor.IsEmptyString Then
|
Dim dt As Func(Of Boolean) = Function() (CBool(MySiteSettings.DownloadTimeline.Value) And GetTimeline) Or IsSavedPosts
|
||||||
|
If dt.Invoke And Not LastCursor.IsEmptyString Then
|
||||||
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
||||||
DownloadData(LastCursor, s, Token)
|
DownloadData(LastCursor, s, Token)
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
If Not HasError Then FirstLoadingDone = True
|
If Not HasError Then FirstLoadingDone = True
|
||||||
End If
|
End If
|
||||||
If CBool(MySiteSettings.DownloadTimeline.Value) And Not HasError Then
|
If dt.Invoke And Not HasError Then
|
||||||
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
s = IIf(IsSavedPosts, Sections.SavedPosts, Sections.Timeline)
|
||||||
DownloadData(String.Empty, s, Token)
|
DownloadData(String.Empty, s, Token)
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
If Not HasError Then FirstLoadingDone = True
|
If Not HasError Then FirstLoadingDone = True
|
||||||
End If
|
End If
|
||||||
If FirstLoadingDone Then LastCursor = String.Empty
|
If FirstLoadingDone Then LastCursor = String.Empty
|
||||||
If MySiteSettings.BaseAuthExists() Then
|
If Not IsSavedPosts AndAlso MySiteSettings.BaseAuthExists() Then
|
||||||
If CBool(MySiteSettings.DownloadTimeline.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token)
|
If CBool(MySiteSettings.DownloadStories.Value) And GetStories Then s = Sections.Stories : DownloadData(String.Empty, s, Token)
|
||||||
If CBool(MySiteSettings.DownloadTagged.Value) And ACheck(MySiteSettings.HashTagged.Value) And GetTaggedData Then s = Sections.Tagged : DownloadData(String.Empty, s, Token)
|
If CBool(MySiteSettings.DownloadTagged.Value) And ACheck(MySiteSettings.HashTagged.Value) And GetTaggedData Then s = Sections.Tagged : DownloadData(String.Empty, s, Token)
|
||||||
End If
|
End If
|
||||||
If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify
|
If WaitNotificationMode = WNM.SkipTemp Or WaitNotificationMode = WNM.SkipCurrent Then WaitNotificationMode = WNM.Notify
|
||||||
@@ -275,7 +281,7 @@ Namespace API.Instagram
|
|||||||
Case Else : WaitNotificationMode = WNM.SkipTemp
|
Case Else : WaitNotificationMode = WNM.SkipTemp
|
||||||
End Select
|
End Select
|
||||||
End If
|
End If
|
||||||
If Not ProgressTempSet Then Progress.InformationTemporary = $"Waiting until { .GetWaitDate().ToString(ParsersDataDateProvider)}"
|
If Not ProgressTempSet Then Progress.InformationTemporary = $"Waiting until { .GetWaitDate().ToString(DateTimeDefaultProvider)}"
|
||||||
ProgressTempSet = True
|
ProgressTempSet = True
|
||||||
Return False
|
Return False
|
||||||
Else
|
Else
|
||||||
@@ -392,7 +398,6 @@ Namespace API.Instagram
|
|||||||
If ID.IsEmptyString Then Throw New ArgumentException("User ID is not detected", "ID")
|
If ID.IsEmptyString Then Throw New ArgumentException("User ID is not detected", "ID")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
|
||||||
'Create query
|
'Create query
|
||||||
Select Case Section
|
Select Case Section
|
||||||
Case Sections.Timeline
|
Case Sections.Timeline
|
||||||
@@ -447,6 +452,7 @@ Namespace API.Instagram
|
|||||||
HasNextPage = .Value("more_available").FromXML(Of Boolean)(False)
|
HasNextPage = .Value("more_available").FromXML(Of Boolean)(False)
|
||||||
EndCursor = .Value("next_max_id")
|
EndCursor = .Value("next_max_id")
|
||||||
If If(.Item("items")?.Count, 0) > 0 Then
|
If If(.Item("items")?.Count, 0) > 0 Then
|
||||||
|
UserSiteNameUpdate(.ItemF({"items", 0, "user", "full_name"}).XmlIfNothingValue)
|
||||||
If Not DefaultParser(.Item("items"), Section, Token) Then Throw New ExitException
|
If Not DefaultParser(.Item("items"), Section, Token) Then Throw New ExitException
|
||||||
Else
|
Else
|
||||||
HasNextPage = False
|
HasNextPage = False
|
||||||
@@ -608,17 +614,20 @@ Namespace API.Instagram
|
|||||||
With nn
|
With nn
|
||||||
PostIDKV = New PostKV(.Value("code"), .Value("id"), Section)
|
PostIDKV = New PostKV(.Value("code"), .Value("id"), Section)
|
||||||
Pinned = .Contains("timeline_pinned_user_ids")
|
Pinned = .Contains("timeline_pinned_user_ids")
|
||||||
If PostKvExists(PostIDKV) And Not Pinned Then Return False
|
If PostKvExists(PostIDKV) Then
|
||||||
_TempPostsList.Add(PostIDKV.ID)
|
If Not Pinned Then Return False
|
||||||
PostsKVIDs.ListAddValue(PostIDKV, LAP.NotContainsOnly)
|
Else
|
||||||
PostDate = .Value("taken_at")
|
_TempPostsList.Add(PostIDKV.ID)
|
||||||
If Not IsSavedPosts Then
|
PostsKVIDs.ListAddValue(PostIDKV, LNC)
|
||||||
Select Case CheckDatesLimit(PostDate, DateProvider)
|
PostDate = .Value("taken_at")
|
||||||
Case DateResult.Skip : Continue For
|
If Not IsSavedPosts Then
|
||||||
Case DateResult.Exit : If Not Pinned Then Return False
|
Select Case CheckDatesLimit(PostDate, DateProvider)
|
||||||
End Select
|
Case DateResult.Skip : Continue For
|
||||||
|
Case DateResult.Exit : If Not Pinned Then Return False
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
ObtainMedia(.Self, PostIDKV.ID, SpecFolder, PostDate)
|
||||||
End If
|
End If
|
||||||
ObtainMedia(.Self, PostIDKV.ID, SpecFolder, PostDate)
|
|
||||||
End With
|
End With
|
||||||
Next
|
Next
|
||||||
Return True
|
Return True
|
||||||
@@ -734,18 +743,40 @@ Namespace API.Instagram
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "GetUserId"
|
#Region "GetUserId"
|
||||||
Private Sub GetUserId()
|
Private Sub GetUserId()
|
||||||
|
Dim __idFound As Boolean = False
|
||||||
Try
|
Try
|
||||||
Dim r$ = Responser.GetResponse($"https://i.instagram.com/api/v1/users/web_profile_info/?username={Name}",, EDP.ThrowException)
|
Dim r$ = Responser.GetResponse($"https://i.instagram.com/api/v1/users/web_profile_info/?username={Name}",, EDP.ThrowException)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
Using j As EContainer = JsonDocument.Parse(r)
|
||||||
ID = j({"data", "user"}, "id").XmlIfNothingValue
|
If Not j Is Nothing AndAlso j.Contains({"data", "user"}) Then
|
||||||
|
With j({"data", "user"})
|
||||||
|
ID = .Value("id")
|
||||||
|
__idFound = True
|
||||||
|
UserSiteNameUpdate(.Value("full_name"))
|
||||||
|
Dim descr$ = .Value("biography")
|
||||||
|
If If(.Item("bio_links")?.Count, 0) > 0 Then descr.StringAppend(.Item("bio_links").Select(Function(bl) bl.Value("url")).ListToString(vbNewLine), vbNewLine)
|
||||||
|
Dim eUrl$ = .Value("external_url")
|
||||||
|
If Not eUrl.IsEmptyString AndAlso (descr.IsEmptyString OrElse Not descr.Contains(eUrl)) Then descr.StringAppendLine(eUrl)
|
||||||
|
UserDescriptionUpdate(descr)
|
||||||
|
Dim f As New SFile With {.Path = MyFile.CutPath.Path, .Name = "ProfilePicture", .Extension = "jpg"}
|
||||||
|
If Not f.Exists Then
|
||||||
|
Dim profilePicture$ = .Value("profile_pic_url_hd")
|
||||||
|
If profilePicture.IsEmptyString OrElse Not GetWebFile(profilePicture, f, EDP.ReturnValue) Then
|
||||||
|
profilePicture = .Value("profile_pic_url")
|
||||||
|
If Not profilePicture.IsEmptyString Then GetWebFile(profilePicture, f, EDP.ReturnValue)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End If
|
||||||
End Using
|
End Using
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If Responser.StatusCode = HttpStatusCode.NotFound Or Responser.StatusCode = HttpStatusCode.BadRequest Then
|
If Not __idFound Then
|
||||||
Throw ex
|
If Responser.StatusCode = HttpStatusCode.NotFound Or Responser.StatusCode = HttpStatusCode.BadRequest Then
|
||||||
Else
|
Throw ex
|
||||||
LogError(ex, "get Instagram user id")
|
Else
|
||||||
|
LogError(ex, "get Instagram user id")
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ Namespace API.LPSG
|
|||||||
Return New UserData
|
Return New UserData
|
||||||
End Function
|
End Function
|
||||||
Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean
|
Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean
|
||||||
Return If(Responser.Cookies?.Count, 0) > 0
|
Return Responser.CookiesExists
|
||||||
End Function
|
End Function
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
14
SCrawler/API/PathPlugin/Declarations.vb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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.PathPlugin
|
||||||
|
Friend Module Declarations
|
||||||
|
Friend Const PluginKey As String = "AndyProgram_PathPlugin"
|
||||||
|
Friend Const PluginName As String = "Path"
|
||||||
|
End Module
|
||||||
|
End Namespace
|
||||||
49
SCrawler/API/PathPlugin/SiteSettings.vb
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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
|
||||||
|
Imports SCrawler.Plugin
|
||||||
|
Imports SCrawler.Plugin.Attributes
|
||||||
|
Namespace API.PathPlugin
|
||||||
|
<Manifest(PluginKey)>
|
||||||
|
Friend Class SiteSettings : Inherits SiteSettingsBase
|
||||||
|
Friend Overrides ReadOnly Property Icon As Icon
|
||||||
|
Get
|
||||||
|
Return PersonalUtilities.Tools.ImageRenderer.GetIcon(PersonalUtilities.My.Resources.FolderOpenPic_Orange_16, EDP.ReturnValue)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Overrides ReadOnly Property Image As Image
|
||||||
|
Get
|
||||||
|
Return PersonalUtilities.My.Resources.FolderOpenPic_Orange_16
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Sub New()
|
||||||
|
MyBase.New(PluginName)
|
||||||
|
End Sub
|
||||||
|
Friend Overrides Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider
|
||||||
|
Return New UserData
|
||||||
|
End Function
|
||||||
|
Friend Overrides Function IsMyUser(ByVal UserURL As String) As ExchangeOptions
|
||||||
|
Dim f As SFile = UserURL
|
||||||
|
If Not f.IsEmptyString AndAlso f.PathNoSeparator = UserURL.StringTrimEnd("\") AndAlso (f.Location = SFOLocation.Local Or f.Location = SFOLocation.Network) Then
|
||||||
|
Return New ExchangeOptions(Site, f)
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
Friend Overrides Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String
|
||||||
|
Return String.Empty
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
45
SCrawler/API/PathPlugin/UserData.vb
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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.PathPlugin
|
||||||
|
Friend Class UserData : Inherits UserDataBase
|
||||||
|
Private Const DOWNLOAD_ERROR As String = "The path plugin only provides user paths."
|
||||||
|
Friend Overrides Property UserExists As Boolean
|
||||||
|
Get
|
||||||
|
Return FileExists
|
||||||
|
End Get
|
||||||
|
Set(ByVal e As Boolean)
|
||||||
|
MyBase.UserExists = e
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Friend Overrides Property UserSuspended As Boolean
|
||||||
|
Get
|
||||||
|
Return False
|
||||||
|
End Get
|
||||||
|
Set(ByVal s As Boolean)
|
||||||
|
MyBase.UserSuspended = s
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Friend Overrides Sub OpenSite(Optional ByVal e As ErrorsDescriber = Nothing)
|
||||||
|
OpenFolder()
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XML.XmlFile, ByVal Loading As Boolean)
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub DownloadDataF(ByVal Token As Threading.CancellationToken)
|
||||||
|
Throw New InvalidOperationException(DOWNLOAD_ERROR)
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub DownloadContent(ByVal Token As Threading.CancellationToken)
|
||||||
|
Throw New InvalidOperationException(DOWNLOAD_ERROR)
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False,
|
||||||
|
Optional ByVal EObj As Object = Nothing) As Integer
|
||||||
|
Throw New InvalidOperationException(DOWNLOAD_ERROR)
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -11,7 +11,6 @@ Namespace API.PornHub
|
|||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
#Region "Converters"
|
#Region "Converters"
|
||||||
Private ReadOnly UnicodeHexConverter As Func(Of String, String) = Function(Input) SymbolsConverter.UnicodeHex.Decode(Input, EDP.ReturnValue)
|
Private ReadOnly UnicodeHexConverter As Func(Of String, String) = Function(Input) SymbolsConverter.UnicodeHex.Decode(Input, EDP.ReturnValue)
|
||||||
Friend ReadOnly HtmlConverter As Func(Of String, String) = Function(Input) SymbolsConverter.HTML.Decode(Input, EDP.ReturnValue)
|
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Declarations video"
|
#Region "Declarations video"
|
||||||
Friend ReadOnly RegexVideo_FlashVarsBlock As RParams = RParams.DM("(?<=flashvars_\['[nN]ext[vV]ideo'\];[\r\n]*?)(.+?)(?=;flashvars_\d+?)", 0, EDP.ReturnValue)
|
Friend ReadOnly RegexVideo_FlashVarsBlock As RParams = RParams.DM("(?<=flashvars_\['[nN]ext[vV]ideo'\];[\r\n]*?)(.+?)(?=;flashvars_\d+?)", 0, EDP.ReturnValue)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ Namespace API.PornHub
|
|||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
MyBase.New("PornHub", "pornhub.com")
|
MyBase.New("PornHub", "pornhub.com")
|
||||||
Responser.CurlPath = $"cURL\curl.exe"
|
Responser.CurlPath = $"cURL\curl.exe"
|
||||||
|
Responser.CurlArgumentsRight = "--ssl-no-revoke"
|
||||||
CurlPathExists = Responser.CurlPath.Exists
|
CurlPathExists = Responser.CurlPath.Exists
|
||||||
Responser.DeclaredError = EDP.ThrowException
|
Responser.DeclaredError = EDP.ThrowException
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ Namespace API.PornHub
|
|||||||
URL = ParamsArray(0)
|
URL = ParamsArray(0)
|
||||||
ID = RegexReplace(URL, RegexVideo_Video_VideoKey)
|
ID = RegexReplace(URL, RegexVideo_Video_VideoKey)
|
||||||
URL = String.Format(UrlPattern, URL.TrimStart("/"))
|
URL = String.Format(UrlPattern, URL.TrimStart("/"))
|
||||||
Title = HtmlConverter(ParamsArray(1)).StringRemoveWinForbiddenSymbols.StringTrim
|
Title = TitleHtmlConverter(ParamsArray(1))
|
||||||
End If
|
End If
|
||||||
Return Me
|
Return Me
|
||||||
End Function
|
End Function
|
||||||
@@ -99,7 +99,6 @@ Namespace API.PornHub
|
|||||||
#Region "Person"
|
#Region "Person"
|
||||||
Friend Property PersonType As String
|
Friend Property PersonType As String
|
||||||
Friend Property NameTrue As String
|
Friend Property NameTrue As String
|
||||||
Private _FriendlyName As String = String.Empty
|
|
||||||
Friend Overrides Property FriendlyName As String
|
Friend Overrides Property FriendlyName As String
|
||||||
Get
|
Get
|
||||||
If _FriendlyName.IsEmptyString Then Return NameTrue Else Return _FriendlyName
|
If _FriendlyName.IsEmptyString Then Return NameTrue Else Return _FriendlyName
|
||||||
@@ -210,6 +209,7 @@ Namespace API.PornHub
|
|||||||
If __continue And Not __videoDone Then
|
If __continue And Not __videoDone Then
|
||||||
Do While DownloadUserVideos(page, Token) = DataDownloaded And page < 100 : page += 1 : Loop
|
Do While DownloadUserVideos(page, Token) = DataDownloaded And page < 100 : page += 1 : Loop
|
||||||
End If
|
End If
|
||||||
|
If _TempMediaList.Count > 0 Then _TempMediaList.RemoveAll(Function(m) Not m.Type = UTypes.m3u8 And Not m.Type = UTypes.VideoPre)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Responser.Method = "GET"
|
Responser.Method = "GET"
|
||||||
@@ -256,7 +256,7 @@ Namespace API.PornHub
|
|||||||
If PersonType = PersonTypeUser And r.Contains(HtmlPageNotFoundVideo) Then Return DataDownloaded_NotFound
|
If PersonType = PersonTypeUser And r.Contains(HtmlPageNotFoundVideo) Then Return DataDownloaded_NotFound
|
||||||
Dim l As List(Of UserVideo) = RegexFields(Of UserVideo)(r, {RegexVideo_Video_All}, {1, 2})
|
Dim l As List(Of UserVideo) = RegexFields(Of UserVideo)(r, {RegexVideo_Video_All}, {1, 2})
|
||||||
Dim lw As List(Of UserVideo) = Nothing
|
Dim lw As List(Of UserVideo) = Nothing
|
||||||
If Not PersonType = PersonTypeUser Then RegexFields(Of UserVideo)(r, {RegexVideo_Video_Wrong}, RegexVideo_Video_Wrong_Fields)
|
If Not PersonType = PersonTypeUser Then lw = RegexFields(Of UserVideo)(r, {RegexVideo_Video_Wrong}, RegexVideo_Video_Wrong_Fields)
|
||||||
If l.ListExists Then
|
If l.ListExists Then
|
||||||
If lw.ListExists Then l.ListWithRemove(lw)
|
If lw.ListExists Then l.ListWithRemove(lw)
|
||||||
If l.Count > 0 Then
|
If l.Count > 0 Then
|
||||||
@@ -314,7 +314,7 @@ Namespace API.PornHub
|
|||||||
If l3.ListExists(3) Then
|
If l3.ListExists(3) Then
|
||||||
m.URL = l3(2)
|
m.URL = l3(2)
|
||||||
m.File = m.URL
|
m.File = m.URL
|
||||||
n = HtmlConverter(l3(1)).StringRemoveWinForbiddenSymbols.StringTrim
|
n = TitleHtmlConverter(l3(1))
|
||||||
If MySettings.DownloadGifsAsMp4.Value Then m.File.Extension = "mp4"
|
If MySettings.DownloadGifsAsMp4.Value Then m.File.Extension = "mp4"
|
||||||
If Not n.IsEmptyString Then m.File.Name = n
|
If Not n.IsEmptyString Then m.File.Name = n
|
||||||
End If
|
End If
|
||||||
@@ -415,7 +415,7 @@ Namespace API.PornHub
|
|||||||
If albumName.IsEmptyString Then
|
If albumName.IsEmptyString Then
|
||||||
albumName = block.AlbumID.Split("/").LastOrDefault.StringTrim
|
albumName = block.AlbumID.Split("/").LastOrDefault.StringTrim
|
||||||
Else
|
Else
|
||||||
albumName = HtmlConverter(albumName).StringRemoveWinForbiddenSymbols.StringTrim
|
albumName = TitleHtmlConverter(albumName)
|
||||||
End If
|
End If
|
||||||
page = 1
|
page = 1
|
||||||
Do While DownloadUserPhotos_PornHub(page, block.AlbumID, albumName, Token) : page += 1 : Loop
|
Do While DownloadUserPhotos_PornHub(page, block.AlbumID, albumName, Token) : page += 1 : Loop
|
||||||
|
|||||||
@@ -32,8 +32,9 @@ Namespace API.Reddit
|
|||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
MyBase.New(RedditSite, "reddit.com")
|
MyBase.New(RedditSite, "reddit.com")
|
||||||
With Responser
|
With Responser
|
||||||
If .Decoders.Count = 0 OrElse Not .Decoders.Contains(SymbolsConverter.Converters.Unicode) Then _
|
Dim d% = .Decoders.Count
|
||||||
.Decoders.Add(SymbolsConverter.Converters.Unicode) : .SaveSettings()
|
.Decoders.ListAddList({SymbolsConverter.Converters.Unicode, SymbolsConverter.Converters.HTML}, LAP.NotContainsOnly)
|
||||||
|
If d <> .Decoders.Count Then .SaveSettings()
|
||||||
End With
|
End With
|
||||||
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
||||||
UseM3U8 = New PropertyValue(True)
|
UseM3U8 = New PropertyValue(True)
|
||||||
|
|||||||
@@ -132,9 +132,9 @@ Namespace API.Reddit
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "Download Overrides"
|
#Region "Download Overrides"
|
||||||
Friend Overrides Sub DownloadData(ByVal Token As CancellationToken)
|
Friend Overrides Sub DownloadData(ByVal Token As CancellationToken)
|
||||||
UserDescriptionReset()
|
|
||||||
_CrossPosts.Clear()
|
_CrossPosts.Clear()
|
||||||
If Not IsSavedPosts AndAlso (IsChannel AndAlso Not ChannelInfo Is Nothing) Then
|
If Not IsSavedPosts AndAlso (IsChannel AndAlso Not ChannelInfo Is Nothing) Then
|
||||||
|
EnvirDownloadSet()
|
||||||
If Not Responser Is Nothing Then Responser.Dispose()
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
Responser = New Responser
|
Responser = New Responser
|
||||||
Responser.Copy(MySiteSettings.Responser)
|
Responser.Copy(MySiteSettings.Responser)
|
||||||
@@ -165,12 +165,15 @@ Namespace API.Reddit
|
|||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
If DownloadTopCount.HasValue Then DownloadLimitCount = DownloadTopCount
|
If DownloadTopCount.HasValue Then DownloadLimitCount = DownloadTopCount
|
||||||
|
Else
|
||||||
|
GetUserInfo()
|
||||||
End If
|
End If
|
||||||
If SaveToCache AndAlso Not Responser.Decoders.Contains(SymbolsConverter.Converters.HTML) Then _
|
If SaveToCache AndAlso Not Responser.Decoders.Contains(SymbolsConverter.Converters.HTML) Then _
|
||||||
Responser.Decoders.Add(SymbolsConverter.Converters.HTML)
|
Responser.Decoders.Add(SymbolsConverter.Converters.HTML)
|
||||||
DownloadDataChannel(String.Empty, Token)
|
DownloadDataChannel(String.Empty, Token)
|
||||||
If ChannelInfo Is Nothing Then _TempPostsList.ListAddList(_TempMediaList.Select(Function(m) m.Post.ID), LNC)
|
If ChannelInfo Is Nothing Then _TempPostsList.ListAddList(_TempMediaList.Select(Function(m) m.Post.ID), LNC)
|
||||||
Else
|
Else
|
||||||
|
GetUserInfo()
|
||||||
DownloadDataUser(String.Empty, Token)
|
DownloadDataUser(String.Empty, Token)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
@@ -205,7 +208,8 @@ Namespace API.Reddit
|
|||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Using w As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
Using w As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
||||||
If w.Count > 0 Then
|
If w.Count > 0 Then
|
||||||
If UserDescriptionNeedToUpdate() Then UserDescriptionUpdate(w.ItemF({"subredditAboutInfo", 0, "publicDescription"}).XmlIfNothingValue)
|
'TODELETE: moved to 'GetUserInfo' 2023.2.5.0
|
||||||
|
'If UserDescriptionNeedToUpdate() Then UserDescriptionUpdate(w.ItemF({"subredditAboutInfo", 0, "publicDescription"}).XmlIfNothingValue)
|
||||||
n = w.GetNode(JsonNodesJson)
|
n = w.GetNode(JsonNodesJson)
|
||||||
If Not n Is Nothing AndAlso n.Count > 0 Then
|
If Not n Is Nothing AndAlso n.Count > 0 Then
|
||||||
For Each nn In n
|
For Each nn In n
|
||||||
@@ -416,6 +420,37 @@ Namespace API.Reddit
|
|||||||
ProcessException(ex, Token, $"channel data downloading error [{URL}]")
|
ProcessException(ex, Token, $"channel data downloading error [{URL}]")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub GetUserInfo()
|
||||||
|
Try
|
||||||
|
If Not IsSavedPosts And ChannelInfo Is Nothing Then
|
||||||
|
Dim r$ = Responser.GetResponse($"https://reddit.com/{IIf(IsChannel, "r", "user")}/{Name}/about.json",, EDP.ReturnValue)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Using j As EContainer = JsonDocument.Parse(r)
|
||||||
|
If Not j Is Nothing AndAlso j.Contains({"data", "subreddit"}) Then
|
||||||
|
With j({"data", "subreddit"})
|
||||||
|
UserSiteNameUpdate(.Value("title"))
|
||||||
|
UserDescriptionUpdate(.Value("public_description"))
|
||||||
|
Dim dir As SFile = MyFile.CutPath
|
||||||
|
Dim __getFile As Action(Of String) = Sub(ByVal img As String)
|
||||||
|
If Not img.IsEmptyString Then
|
||||||
|
Dim f As SFile = UrlToFile(img)
|
||||||
|
If Not f.Name.IsEmptyString Then
|
||||||
|
If f.Extension.IsEmptyString Then f.Extension = "jpg"
|
||||||
|
f.Path = dir.Path
|
||||||
|
If Not f.Exists Then GetWebFile(img, f, EDP.ReturnValue)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
__getFile.Invoke(.Value("icon_img"))
|
||||||
|
__getFile.Invoke(.Value("banner_img"))
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download Base Functions"
|
#Region "Download Base Functions"
|
||||||
Private Function CreateImgurMedia(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
Private Function CreateImgurMedia(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
||||||
@@ -533,31 +568,36 @@ Namespace API.Reddit
|
|||||||
Dim e As New ErrorsDescriber(EDP.ReturnValue)
|
Dim e As New ErrorsDescriber(EDP.ReturnValue)
|
||||||
Dim m As UserMedia, m2 As UserMedia
|
Dim m As UserMedia, m2 As UserMedia
|
||||||
Dim RedGifsHost As SettingsHost = Settings(RedGifs.RedGifsSiteKey)
|
Dim RedGifsHost As SettingsHost = Settings(RedGifs.RedGifsSiteKey)
|
||||||
|
Dim _repeatForRedgifs As Boolean
|
||||||
RedGifsResponser = RedGifsHost.Responser.Copy
|
RedGifsResponser = RedGifsHost.Responser.Copy
|
||||||
For i% = _TempMediaList.Count - 1 To 0 Step -1
|
For i% = _TempMediaList.Count - 1 To 0 Step -1
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
If _TempMediaList(i).Type = UTypes.VideoPre Or _TempMediaList(i).Type = v2 Then
|
If _TempMediaList(i).Type = UTypes.VideoPre Or _TempMediaList(i).Type = v2 Then
|
||||||
m = _TempMediaList(i)
|
m = _TempMediaList(i)
|
||||||
If _TempMediaList(i).Type = UTypes.VideoPre Then
|
If _TempMediaList(i).Type = UTypes.VideoPre Then
|
||||||
If m.URL.Contains($"{SiteGfycatKey}.com") Then
|
Do
|
||||||
r = Gfycat.Envir.GetVideo(m.URL)
|
_repeatForRedgifs = False
|
||||||
ElseIf m.URL.Contains(SiteRedGifsKey) Then
|
If m.URL.Contains($"{SiteGfycatKey}.com") Then
|
||||||
m2 = RedGifs.UserData.GetDataFromUrlId(m.URL, False, RedGifsResponser, RedGifsHost)
|
r = Gfycat.Envir.GetVideo(m.URL)
|
||||||
If m2.State = UStates.Missing Then
|
If Not r.IsEmptyString AndAlso r.Contains("redgifs.com") Then m.URL = r : _repeatForRedgifs = True
|
||||||
m.State = UStates.Missing
|
ElseIf m.URL.Contains(SiteRedGifsKey) Then
|
||||||
_ContentList.Add(m)
|
m2 = RedGifs.UserData.GetDataFromUrlId(m.URL, False, RedGifsResponser, RedGifsHost)
|
||||||
_TempMediaList.RemoveAt(i)
|
If m2.State = UStates.Missing Then
|
||||||
ElseIf m2.State = RedGifs.UserData.DataGone Then
|
m.State = UStates.Missing
|
||||||
_TempMediaList.RemoveAt(i)
|
_ContentList.Add(m)
|
||||||
|
_TempMediaList.RemoveAt(i)
|
||||||
|
ElseIf m2.State = RedGifs.UserData.DataGone Then
|
||||||
|
_TempMediaList.RemoveAt(i)
|
||||||
|
Else
|
||||||
|
m2.URL_BASE = m.URL
|
||||||
|
m2.Post = m.Post
|
||||||
|
_TempMediaList(i) = m2
|
||||||
|
End If
|
||||||
|
Continue For
|
||||||
Else
|
Else
|
||||||
m2.URL_BASE = m.URL
|
r = Responser.GetResponse(m.URL,, e)
|
||||||
m2.Post = m.Post
|
|
||||||
_TempMediaList(i) = m2
|
|
||||||
End If
|
End If
|
||||||
Continue For
|
Loop While _repeatForRedgifs
|
||||||
Else
|
|
||||||
r = Responser.GetResponse(m.URL,, e)
|
|
||||||
End If
|
|
||||||
Else
|
Else
|
||||||
r = m.URL
|
r = m.URL
|
||||||
End If
|
End If
|
||||||
@@ -662,6 +702,7 @@ Namespace API.Reddit
|
|||||||
Try
|
Try
|
||||||
If Not URL.IsEmptyString Then
|
If Not URL.IsEmptyString Then
|
||||||
Using r As New UserData
|
Using r As New UserData
|
||||||
|
r.SetEnvironment(Settings(RedditSiteKey), Nothing, False, False)
|
||||||
r.Responser = New Responser
|
r.Responser = New Responser
|
||||||
r.Responser.Copy(resp)
|
r.Responser.Copy(resp)
|
||||||
r.ParsePost(URL)
|
r.ParsePost(URL)
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
Imports PersonalUtilities.Tools.Web.Cookies
|
|
||||||
Imports PersonalUtilities.Tools.Web.Documents.JSON
|
Imports PersonalUtilities.Tools.Web.Documents.JSON
|
||||||
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
||||||
Imports UStates = SCrawler.API.Base.UserMedia.States
|
Imports UStates = SCrawler.API.Base.UserMedia.States
|
||||||
@@ -30,10 +30,38 @@ Namespace API.RedGifs
|
|||||||
Return My.Resources.SiteResources.RedGifsPic_32
|
Return My.Resources.SiteResources.RedGifsPic_32
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
<PropertyOption(AllowNull:=False, ControlText:="Token", ControlToolTip:="Bearer token")>
|
<PropertyOption(ControlToolTip:="Bearer token", AllowNull:=False), ControlNumber(1)>
|
||||||
Friend Property Token As PropertyValue
|
Friend ReadOnly Property Token As PropertyValue
|
||||||
<PXML> Friend Property TokenLastDateUpdated As PropertyValue
|
<PXML> Friend ReadOnly Property TokenLastDateUpdated As PropertyValue
|
||||||
Private Const TokenName As String = "authorization"
|
Private Const TokenName As String = "authorization"
|
||||||
|
#Region "TokenUpdateInterval"
|
||||||
|
<PropertyOption(ControlText:="Token refresh interval", ControlToolTip:="Interval (in minutes) to refresh the token", AllowNull:=False, LeftOffset:=120),
|
||||||
|
PXML, ControlNumber(0)>
|
||||||
|
Friend ReadOnly Property TokenUpdateInterval As PropertyValue
|
||||||
|
Private Class TokenIntervalProvider : Implements IFieldsCheckerProvider
|
||||||
|
Private Property ErrorMessage As String Implements IFieldsCheckerProvider.ErrorMessage
|
||||||
|
Private Property Name As String Implements IFieldsCheckerProvider.Name
|
||||||
|
Private Property TypeError As Boolean Implements IFieldsCheckerProvider.TypeError
|
||||||
|
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
|
||||||
|
TypeError = False
|
||||||
|
ErrorMessage = String.Empty
|
||||||
|
If Not ACheck(Of Integer)(Value) Then
|
||||||
|
TypeError = True
|
||||||
|
ElseIf CInt(Value) > 0 Then
|
||||||
|
Return Value
|
||||||
|
Else
|
||||||
|
ErrorMessage = $"The value of [{Name}] field must be greater than or equal to 1"
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||||
|
Throw New NotImplementedException("[GetFormat] is not available in the context of [TokenIntervalProvider]")
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
<Provider(NameOf(TokenUpdateInterval), FieldsChecker:=True)>
|
||||||
|
Private ReadOnly Property TokenUpdateIntervalProvider As IFormatProvider
|
||||||
|
#End Region
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Initializer"
|
#Region "Initializer"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
@@ -47,6 +75,8 @@ Namespace API.RedGifs
|
|||||||
End With
|
End With
|
||||||
Token = New PropertyValue(t, GetType(String), Sub(v) UpdateResponse(v))
|
Token = New PropertyValue(t, GetType(String), Sub(v) UpdateResponse(v))
|
||||||
TokenLastDateUpdated = New PropertyValue(Now.AddYears(-1), GetType(Date))
|
TokenLastDateUpdated = New PropertyValue(Now.AddYears(-1), GetType(Date))
|
||||||
|
TokenUpdateInterval = New PropertyValue(60 * 12, GetType(Integer))
|
||||||
|
TokenUpdateIntervalProvider = New TokenIntervalProvider
|
||||||
UrlPatternUser = "https://www.redgifs.com/users/{0}/"
|
UrlPatternUser = "https://www.redgifs.com/users/{0}/"
|
||||||
UserRegex = RParams.DMS("[htps:/]{7,8}.*?redgifs.com/users/([^/]+)", 1)
|
UserRegex = RParams.DMS("[htps:/]{7,8}.*?redgifs.com/users/([^/]+)", 1)
|
||||||
ImageVideoContains = "redgifs"
|
ImageVideoContains = "redgifs"
|
||||||
@@ -61,7 +91,7 @@ Namespace API.RedGifs
|
|||||||
#Region "Token updaters"
|
#Region "Token updaters"
|
||||||
Friend Function UpdateTokenIfRequired() As Boolean
|
Friend Function UpdateTokenIfRequired() As Boolean
|
||||||
Dim d As Date? = AConvert(Of Date)(TokenLastDateUpdated.Value, AModes.Var, Nothing)
|
Dim d As Date? = AConvert(Of Date)(TokenLastDateUpdated.Value, AModes.Var, Nothing)
|
||||||
If Not d.HasValue OrElse d.Value < Now.AddDays(-1) Then
|
If Not d.HasValue OrElse d.Value < Now.AddMinutes(-CInt(TokenUpdateInterval.Value)) Then
|
||||||
Return UpdateToken()
|
Return UpdateToken()
|
||||||
Else
|
Else
|
||||||
Return True
|
Return True
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Namespace API.TikTok
|
|||||||
Return UserData.GetVideoInfo(URL, Responser)
|
Return UserData.GetVideoInfo(URL, Responser)
|
||||||
End Function
|
End Function
|
||||||
Friend Overrides Function BaseAuthExists() As Boolean
|
Friend Overrides Function BaseAuthExists() As Boolean
|
||||||
Return If(Responser.Cookies?.Count, 0) > 0
|
Return Responser.CookiesExists
|
||||||
End Function
|
End Function
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -12,6 +12,7 @@ Imports PersonalUtilities.Functions.RegularExpressions
|
|||||||
Namespace API.Twitter
|
Namespace API.Twitter
|
||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
Friend Const TwitterSite As String = "Twitter"
|
Friend Const TwitterSite As String = "Twitter"
|
||||||
|
Friend Const TwitterSiteKey As String = "AndyProgram_Twitter"
|
||||||
Friend ReadOnly DateProvider As ADateTime = GetDateProvider()
|
Friend ReadOnly DateProvider As ADateTime = GetDateProvider()
|
||||||
Friend ReadOnly VideoNode As NodeParams() = {New NodeParams("video_info", True, True, True, True, 10)}
|
Friend ReadOnly VideoNode As NodeParams() = {New NodeParams("video_info", True, True, True, True, 10)}
|
||||||
Friend ReadOnly VideoSizeRegEx As RParams = RParams.DMS("\d+x(\d+)", 1, EDP.ReturnValue)
|
Friend ReadOnly VideoSizeRegEx As RParams = RParams.DMS("\d+x(\d+)", 1, EDP.ReturnValue)
|
||||||
|
|||||||
32
SCrawler/API/Twitter/EditorExchangeOptions.vb
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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.Twitter
|
||||||
|
Friend Class EditorExchangeOptions
|
||||||
|
Friend Property GifsDownload As Boolean
|
||||||
|
Friend Property GifsSpecialFolder As String
|
||||||
|
Friend Property GifsPrefix As String
|
||||||
|
Friend Property UseMD5Comparison As Boolean = False
|
||||||
|
Friend Property RemoveExistingDuplicates As Boolean = False
|
||||||
|
Friend Sub New()
|
||||||
|
End Sub
|
||||||
|
Friend Sub New(ByVal s As SiteSettings)
|
||||||
|
GifsDownload = s.GifsDownload.Value
|
||||||
|
GifsSpecialFolder = s.GifsSpecialFolder.Value
|
||||||
|
GifsPrefix = s.GifsPrefix.Value
|
||||||
|
UseMD5Comparison = s.UseMD5Comparison.Value
|
||||||
|
End Sub
|
||||||
|
Friend Sub New(ByVal u As UserData)
|
||||||
|
GifsDownload = u.GifsDownload
|
||||||
|
GifsSpecialFolder = u.GifsSpecialFolder
|
||||||
|
GifsPrefix = u.GifsPrefix
|
||||||
|
UseMD5Comparison = u.UseMD5Comparison
|
||||||
|
RemoveExistingDuplicates = u.RemoveExistingDuplicates
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
185
SCrawler/API/Twitter/OptionsForm.Designer.vb
generated
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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.Twitter
|
||||||
|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||||
|
Partial Friend Class OptionsForm : 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()
|
||||||
|
Me.components = New System.ComponentModel.Container()
|
||||||
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
|
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(OptionsForm))
|
||||||
|
Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim TT_MAIN As System.Windows.Forms.ToolTip
|
||||||
|
Me.CH_DOWN_GIFS = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.TXT_GIF_FOLDER = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.TXT_GIF_PREFIX = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.CH_USE_MD5 = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP = New System.Windows.Forms.CheckBox()
|
||||||
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
|
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
|
||||||
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
|
TP_MAIN.SuspendLayout()
|
||||||
|
CType(Me.TXT_GIF_FOLDER, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.TXT_GIF_PREFIX, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN
|
||||||
|
'
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN.ContentPanel
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
||||||
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(304, 161)
|
||||||
|
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(304, 161)
|
||||||
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
|
'
|
||||||
|
'TP_MAIN
|
||||||
|
'
|
||||||
|
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
|
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.CH_DOWN_GIFS, 0, 0)
|
||||||
|
TP_MAIN.Controls.Add(Me.TXT_GIF_FOLDER, 0, 1)
|
||||||
|
TP_MAIN.Controls.Add(Me.TXT_GIF_PREFIX, 0, 2)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_USE_MD5, 0, 3)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_REMOVE_EXISTING_DUP, 0, 4)
|
||||||
|
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 = 6
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_MAIN.Size = New System.Drawing.Size(304, 161)
|
||||||
|
TP_MAIN.TabIndex = 0
|
||||||
|
'
|
||||||
|
'CH_DOWN_GIFS
|
||||||
|
'
|
||||||
|
Me.CH_DOWN_GIFS.AutoSize = True
|
||||||
|
Me.CH_DOWN_GIFS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_DOWN_GIFS.Location = New System.Drawing.Point(4, 4)
|
||||||
|
Me.CH_DOWN_GIFS.Name = "CH_DOWN_GIFS"
|
||||||
|
Me.CH_DOWN_GIFS.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
|
||||||
|
Me.CH_DOWN_GIFS.Size = New System.Drawing.Size(296, 19)
|
||||||
|
Me.CH_DOWN_GIFS.TabIndex = 0
|
||||||
|
Me.CH_DOWN_GIFS.Text = "Download GIFs"
|
||||||
|
Me.CH_DOWN_GIFS.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'TXT_GIF_FOLDER
|
||||||
|
'
|
||||||
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton3.Name = "Clear"
|
||||||
|
ActionButton3.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear
|
||||||
|
Me.TXT_GIF_FOLDER.Buttons.Add(ActionButton3)
|
||||||
|
Me.TXT_GIF_FOLDER.CaptionText = "GIFs special folder"
|
||||||
|
Me.TXT_GIF_FOLDER.CaptionToolTipText = "Put the GIFs in a special folder"
|
||||||
|
Me.TXT_GIF_FOLDER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_GIF_FOLDER.Location = New System.Drawing.Point(4, 30)
|
||||||
|
Me.TXT_GIF_FOLDER.Name = "TXT_GIF_FOLDER"
|
||||||
|
Me.TXT_GIF_FOLDER.Size = New System.Drawing.Size(296, 22)
|
||||||
|
Me.TXT_GIF_FOLDER.TabIndex = 1
|
||||||
|
'
|
||||||
|
'TXT_GIF_PREFIX
|
||||||
|
'
|
||||||
|
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton4.Name = "Clear"
|
||||||
|
ActionButton4.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear
|
||||||
|
Me.TXT_GIF_PREFIX.Buttons.Add(ActionButton4)
|
||||||
|
Me.TXT_GIF_PREFIX.CaptionText = "GIF prefix"
|
||||||
|
Me.TXT_GIF_PREFIX.CaptionToolTipText = "This prefix will be added to the beginning of the filename"
|
||||||
|
Me.TXT_GIF_PREFIX.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_GIF_PREFIX.Location = New System.Drawing.Point(4, 59)
|
||||||
|
Me.TXT_GIF_PREFIX.Name = "TXT_GIF_PREFIX"
|
||||||
|
Me.TXT_GIF_PREFIX.Size = New System.Drawing.Size(296, 22)
|
||||||
|
Me.TXT_GIF_PREFIX.TabIndex = 2
|
||||||
|
'
|
||||||
|
'CH_USE_MD5
|
||||||
|
'
|
||||||
|
Me.CH_USE_MD5.AutoSize = True
|
||||||
|
Me.CH_USE_MD5.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_USE_MD5.Location = New System.Drawing.Point(4, 88)
|
||||||
|
Me.CH_USE_MD5.Name = "CH_USE_MD5"
|
||||||
|
Me.CH_USE_MD5.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
|
||||||
|
Me.CH_USE_MD5.Size = New System.Drawing.Size(296, 19)
|
||||||
|
Me.CH_USE_MD5.TabIndex = 3
|
||||||
|
Me.CH_USE_MD5.Text = "Use MD5 comparison"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_USE_MD5, "Each image will be checked for existence using MD5")
|
||||||
|
Me.CH_USE_MD5.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_REMOVE_EXISTING_DUP
|
||||||
|
'
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.AutoSize = True
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.Location = New System.Drawing.Point(4, 114)
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.Name = "CH_REMOVE_EXISTING_DUP"
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.Padding = New System.Windows.Forms.Padding(100, 0, 0, 0)
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.Size = New System.Drawing.Size(296, 19)
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.TabIndex = 4
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.Text = "Remove existing duplicates"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_REMOVE_EXISTING_DUP, "Existing files will be checked for duplicates and duplicates removed." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Works only" &
|
||||||
|
" on the first activation 'Use MD5 comparison'.")
|
||||||
|
Me.CH_REMOVE_EXISTING_DUP.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'OptionsForm
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.ClientSize = New System.Drawing.Size(304, 161)
|
||||||
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
|
Me.Icon = Global.SCrawler.My.Resources.SiteResources.TwitterIcon_32
|
||||||
|
Me.MaximizeBox = False
|
||||||
|
Me.MaximumSize = New System.Drawing.Size(320, 200)
|
||||||
|
Me.MinimizeBox = False
|
||||||
|
Me.MinimumSize = New System.Drawing.Size(320, 200)
|
||||||
|
Me.Name = "OptionsForm"
|
||||||
|
Me.ShowInTaskbar = False
|
||||||
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
|
Me.Text = "Options"
|
||||||
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.PerformLayout()
|
||||||
|
TP_MAIN.ResumeLayout(False)
|
||||||
|
TP_MAIN.PerformLayout()
|
||||||
|
CType(Me.TXT_GIF_FOLDER, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.TXT_GIF_PREFIX, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
Private WithEvents CH_DOWN_GIFS As CheckBox
|
||||||
|
Private WithEvents TXT_GIF_FOLDER As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents TXT_GIF_PREFIX As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents CH_USE_MD5 As CheckBox
|
||||||
|
Private WithEvents CH_REMOVE_EXISTING_DUP As CheckBox
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
155
SCrawler/API/Twitter/OptionsForm.resx
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
<?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>
|
||||||
|
<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="ActionButton3.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="ActionButton4.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>
|
||||||
|
<metadata name="TT_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
||||||
81
SCrawler/API/Twitter/OptionsForm.vb
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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.Plugin.Attributes
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
|
Imports PersonalUtilities.Forms.Controls
|
||||||
|
Namespace API.Twitter
|
||||||
|
Friend Class OptionsForm
|
||||||
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
|
Private ReadOnly Property MyExchangeOptions As EditorExchangeOptions
|
||||||
|
Private ReadOnly MyGifTextProvider As SiteSettings.GifStringProvider
|
||||||
|
Friend Sub New(ByRef ExchangeOptions As EditorExchangeOptions)
|
||||||
|
InitializeComponent()
|
||||||
|
MyExchangeOptions = ExchangeOptions
|
||||||
|
MyGifTextProvider = New SiteSettings.GifStringProvider
|
||||||
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
|
End Sub
|
||||||
|
Private Sub OptionsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
|
With MyDefs
|
||||||
|
.MyViewInitialize(True)
|
||||||
|
.AddOkCancelToolbar()
|
||||||
|
With MyExchangeOptions
|
||||||
|
CH_DOWN_GIFS.Checked = .GifsDownload
|
||||||
|
TXT_GIF_FOLDER.Text = .GifsSpecialFolder
|
||||||
|
TXT_GIF_FOLDER.Tag = NameOf(SiteSettings.GifsSpecialFolder)
|
||||||
|
TXT_GIF_PREFIX.Text = .GifsPrefix
|
||||||
|
TXT_GIF_PREFIX.Tag = NameOf(SiteSettings.GifsPrefix)
|
||||||
|
CH_USE_MD5.Checked = .UseMD5Comparison
|
||||||
|
CH_REMOVE_EXISTING_DUP.Checked = .RemoveExistingDuplicates
|
||||||
|
|
||||||
|
Try
|
||||||
|
Dim p As PropertyOption
|
||||||
|
With Settings(TwitterSiteKey)
|
||||||
|
p = .PropList.Find(Function(pp) pp.Name = TXT_GIF_FOLDER.Tag).Options
|
||||||
|
If Not p Is Nothing Then
|
||||||
|
TXT_GIF_FOLDER.CaptionText = p.ControlText
|
||||||
|
TXT_GIF_FOLDER.CaptionToolTipText = p.ControlToolTip
|
||||||
|
TXT_GIF_FOLDER.CaptionToolTipEnabled = Not TXT_GIF_FOLDER.CaptionToolTipText.IsEmptyString
|
||||||
|
End If
|
||||||
|
|
||||||
|
p = .PropList.Find(Function(pp) pp.Name = TXT_GIF_PREFIX.Tag).Options
|
||||||
|
If Not p Is Nothing Then
|
||||||
|
TXT_GIF_PREFIX.CaptionText = p.ControlText
|
||||||
|
TXT_GIF_PREFIX.CaptionToolTipText = p.ControlToolTip
|
||||||
|
TXT_GIF_PREFIX.CaptionToolTipEnabled = Not TXT_GIF_PREFIX.CaptionToolTipText.IsEmptyString
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Catch
|
||||||
|
End Try
|
||||||
|
End With
|
||||||
|
.EndLoaderOperations()
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
|
With MyExchangeOptions
|
||||||
|
.GifsDownload = CH_DOWN_GIFS.Checked
|
||||||
|
.GifsSpecialFolder = TXT_GIF_FOLDER.Text
|
||||||
|
.GifsPrefix = TXT_GIF_PREFIX.Text
|
||||||
|
.UseMD5Comparison = CH_USE_MD5.Checked
|
||||||
|
.RemoveExistingDuplicates = CH_REMOVE_EXISTING_DUP.Checked
|
||||||
|
End With
|
||||||
|
MyDefs.CloseForm()
|
||||||
|
End Sub
|
||||||
|
Private Sub TXT_ActionOnTextChanged(ByVal Sender As TextBoxExtended, ByVal e As EventArgs) Handles TXT_GIF_FOLDER.ActionOnTextChanged,
|
||||||
|
TXT_GIF_PREFIX.ActionOnTextChanged
|
||||||
|
If Not MyDefs.Initializing Then
|
||||||
|
With Sender
|
||||||
|
MyGifTextProvider.PropertyName = .Tag
|
||||||
|
Dim s% = .SelectionStart
|
||||||
|
Dim t$ = AConvert(Of String)(.Text, String.Empty, MyGifTextProvider)
|
||||||
|
If Not .Text = t Then .Text = t : .Select(s, 0)
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -13,10 +13,11 @@ Imports PersonalUtilities.Functions.RegularExpressions
|
|||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
Imports PersonalUtilities.Tools.Web.Cookies
|
Imports PersonalUtilities.Tools.Web.Cookies
|
||||||
Namespace API.Twitter
|
Namespace API.Twitter
|
||||||
<Manifest("AndyProgram_Twitter"), SavedPosts>
|
<Manifest(TwitterSiteKey), SavedPosts, SpecialForm(False)>
|
||||||
Friend Class SiteSettings : Inherits SiteSettingsBase
|
Friend Class SiteSettings : Inherits SiteSettingsBase
|
||||||
Friend Const Header_Authorization As String = "authorization"
|
Friend Const Header_Authorization As String = "authorization"
|
||||||
Friend Const Header_Token As String = "x-csrf-token"
|
Friend Const Header_Token As String = "x-csrf-token"
|
||||||
|
#Region "Declarations"
|
||||||
Friend Overrides ReadOnly Property Icon As Icon
|
Friend Overrides ReadOnly Property Icon As Icon
|
||||||
Get
|
Get
|
||||||
Return My.Resources.SiteResources.TwitterIcon_32
|
Return My.Resources.SiteResources.TwitterIcon_32
|
||||||
@@ -27,14 +28,52 @@ Namespace API.Twitter
|
|||||||
Return My.Resources.SiteResources.TwitterPic_400
|
Return My.Resources.SiteResources.TwitterPic_400
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
<PropertyOption(AllowNull:=False, ControlText:="Authorization",
|
#Region "Auth"
|
||||||
|
<PropertyOption(AllowNull:=False, IsAuth:=True, ControlText:="Authorization",
|
||||||
ControlToolTip:="Set authorization from [authorization] response header. This field must start from [Bearer] key word")>
|
ControlToolTip:="Set authorization from [authorization] response header. This field must start from [Bearer] key word")>
|
||||||
Private ReadOnly Property Auth As PropertyValue
|
Private ReadOnly Property Auth As PropertyValue
|
||||||
<PropertyOption(AllowNull:=False, ControlText:="Token", ControlToolTip:="Set token from [x-csrf-token] response header")>
|
<PropertyOption(AllowNull:=False, IsAuth:=True, ControlText:="Token", ControlToolTip:="Set token from [x-csrf-token] response header")>
|
||||||
Private ReadOnly Property Token As PropertyValue
|
Private ReadOnly Property Token As PropertyValue
|
||||||
<PropertyOption(ControlText:="Saved posts user", ControlToolTip:="Personal profile username"), PXML>
|
<PropertyOption(IsAuth:=True, ControlText:="Saved posts user", ControlToolTip:="Personal profile username"), PXML>
|
||||||
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
||||||
|
#End Region
|
||||||
|
#Region "Other properties"
|
||||||
|
<PropertyOption(IsAuth:=False, ControlText:="Download GIFs"), PXML>
|
||||||
|
Friend ReadOnly Property GifsDownload As PropertyValue
|
||||||
|
<PropertyOption(IsAuth:=False, ControlText:="GIFs special folder",
|
||||||
|
ControlToolTip:="Put the GIFs in a special folder" & vbCr &
|
||||||
|
"This is a folder name, not an absolute path." & vbCr &
|
||||||
|
"This folder(s) will be created relative to the user's root folder." & vbCr &
|
||||||
|
"Examples:" & vbCr & "SomeFolderName" & vbCr & "SomeFolderName\SomeFolderName2"), PXML>
|
||||||
|
Friend ReadOnly Property GifsSpecialFolder As PropertyValue
|
||||||
|
<PropertyOption(IsAuth:=False, ControlText:="GIF prefix", ControlToolTip:="This prefix will be added to the beginning of the filename"), PXML>
|
||||||
|
Friend ReadOnly Property GifsPrefix As PropertyValue
|
||||||
|
<Provider(NameOf(GifsSpecialFolder), Interaction:=True), Provider(NameOf(GifsPrefix), Interaction:=True)>
|
||||||
|
Private ReadOnly Property GifStringChecker As IFormatProvider
|
||||||
|
Friend Class GifStringProvider : Implements ICustomProvider, IPropertyProvider
|
||||||
|
Friend Property PropertyName As String Implements IPropertyProvider.PropertyName
|
||||||
|
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
|
||||||
|
Dim v$ = AConvert(Of String)(Value, String.Empty)
|
||||||
|
If Not v.IsEmptyString Then
|
||||||
|
If PropertyName = NameOf(GifsPrefix) Then
|
||||||
|
v = v.StringRemoveWinForbiddenSymbols
|
||||||
|
Else
|
||||||
|
v = v.StringReplaceSymbols(GetWinForbiddenSymbols.ToList.ListWithRemove("\").ToArray, String.Empty, EDP.ReturnValue)
|
||||||
|
v = v.StringTrim("\")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return v
|
||||||
|
End Function
|
||||||
|
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||||
|
Throw New NotImplementedException("[GetFormat] is not available in the context of [TimersChecker]")
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
<PropertyOption(IsAuth:=False, ControlText:="Use MD5 comparison", ControlToolTip:="Each image will be checked for existence using MD5"), PXML>
|
||||||
|
Friend ReadOnly Property UseMD5Comparison As PropertyValue
|
||||||
|
#End Region
|
||||||
Friend Overrides ReadOnly Property Responser As Responser
|
Friend Overrides ReadOnly Property Responser As Responser
|
||||||
|
#End Region
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
MyBase.New(TwitterSite)
|
MyBase.New(TwitterSite)
|
||||||
Responser = New Responser($"{SettingsFolderName}\Responser_{Site}.xml")
|
Responser = New Responser($"{SettingsFolderName}\Responser_{Site}.xml")
|
||||||
@@ -44,15 +83,17 @@ Namespace API.Twitter
|
|||||||
|
|
||||||
With Responser
|
With Responser
|
||||||
If .File.Exists Then
|
If .File.Exists Then
|
||||||
|
Dim b As Boolean = .CookiesDomain.IsEmptyString
|
||||||
If EncryptCookies.CookiesEncrypted Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey
|
If EncryptCookies.CookiesEncrypted Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey
|
||||||
.LoadSettings()
|
.LoadSettings()
|
||||||
a = .Headers.Value(Header_Authorization)
|
a = .Headers.Value(Header_Authorization)
|
||||||
t = .Headers.Value(Header_Token)
|
t = .Headers.Value(Header_Token)
|
||||||
|
.CookiesDomain = "twitter.com"
|
||||||
|
If b Then .SaveSettings()
|
||||||
Else
|
Else
|
||||||
.ContentType = "application/json"
|
.ContentType = "application/json"
|
||||||
.Accept = "*/*"
|
.Accept = "*/*"
|
||||||
.CookiesDomain = "twitter.com"
|
.CookiesDomain = "twitter.com"
|
||||||
.Cookies = New CookieKeeper(.CookiesDomain) With {.EncryptKey = SettingsCLS.CookieEncryptKey}
|
|
||||||
.CookiesEncryptKey = SettingsCLS.CookieEncryptKey
|
.CookiesEncryptKey = SettingsCLS.CookieEncryptKey
|
||||||
.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
||||||
.Headers.Add("sec-ch-ua", " Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91""")
|
.Headers.Add("sec-ch-ua", " Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91""")
|
||||||
@@ -72,6 +113,12 @@ Namespace API.Twitter
|
|||||||
Token = New PropertyValue(t, GetType(String), Sub(v) ChangeResponserFields(NameOf(Token), v))
|
Token = New PropertyValue(t, GetType(String), Sub(v) ChangeResponserFields(NameOf(Token), v))
|
||||||
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
||||||
|
|
||||||
|
GifsDownload = New PropertyValue(True)
|
||||||
|
GifsSpecialFolder = New PropertyValue(String.Empty, GetType(String))
|
||||||
|
GifsPrefix = New PropertyValue("GIF_")
|
||||||
|
GifStringChecker = New GifStringProvider
|
||||||
|
UseMD5Comparison = New PropertyValue(False)
|
||||||
|
|
||||||
UserRegex = RParams.DMS("[htps:/]{7,8}.*?twitter.com/([^/]+)", 1)
|
UserRegex = RParams.DMS("[htps:/]{7,8}.*?twitter.com/([^/]+)", 1)
|
||||||
UrlPatternUser = "https://twitter.com/{0}"
|
UrlPatternUser = "https://twitter.com/{0}"
|
||||||
ImageVideoContains = "twitter"
|
ImageVideoContains = "twitter"
|
||||||
@@ -104,7 +151,13 @@ Namespace API.Twitter
|
|||||||
Return $"https://twitter.com/{User.Name}/status/{Media.Post.ID}"
|
Return $"https://twitter.com/{User.Name}/status/{Media.Post.ID}"
|
||||||
End Function
|
End Function
|
||||||
Friend Overrides Function BaseAuthExists() As Boolean
|
Friend Overrides Function BaseAuthExists() As Boolean
|
||||||
Return If(Responser.Cookies?.Count, 0) > 0 And ACheck(Token.Value) And ACheck(Auth.Value)
|
Return Responser.CookiesExists And ACheck(Token.Value) And ACheck(Auth.Value)
|
||||||
End Function
|
End Function
|
||||||
|
Friend Overrides Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean)
|
||||||
|
If Options Is Nothing OrElse Not TypeOf Options Is EditorExchangeOptions Then Options = New EditorExchangeOptions(Me)
|
||||||
|
If OpenForm Then
|
||||||
|
Using f As New OptionsForm(Options) : f.ShowDialog() : End Using
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -7,25 +7,77 @@
|
|||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports System.Net
|
Imports System.Net
|
||||||
|
Imports System.Drawing
|
||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
Imports PersonalUtilities.Tools.Web.Documents.JSON
|
Imports PersonalUtilities.Tools.Web.Documents.JSON
|
||||||
|
Imports PersonalUtilities.Tools.ImageRenderer
|
||||||
Imports UStates = SCrawler.API.Base.UserMedia.States
|
Imports UStates = SCrawler.API.Base.UserMedia.States
|
||||||
|
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
||||||
Namespace API.Twitter
|
Namespace API.Twitter
|
||||||
Friend Class UserData : Inherits UserDataBase
|
Friend Class UserData : Inherits UserDataBase
|
||||||
Private Const SinglePostUrl As String = "https://api.twitter.com/1.1/statuses/show.json?id={0}&tweet_mode=extended"
|
Private Const SinglePostUrl As String = "https://api.twitter.com/1.1/statuses/show.json?id={0}&tweet_mode=extended"
|
||||||
|
#Region "XML names"
|
||||||
|
Private Const Name_GifsDownload As String = "GifsDownload"
|
||||||
|
Private Const Name_GifsSpecialFolder As String = "GifsSpecialFolder"
|
||||||
|
Private Const Name_GifsPrefix As String = "GifsPrefix"
|
||||||
|
Private Const Name_UseMD5Comparison As String = "UseMD5Comparison"
|
||||||
|
Private Const Name_RemoveExistingDuplicates As String = "RemoveExistingDuplicates"
|
||||||
|
Private Const Name_StartMD5Checked As String = "StartMD5Checked"
|
||||||
|
#End Region
|
||||||
#Region "Declarations"
|
#Region "Declarations"
|
||||||
|
Friend Property GifsDownload As Boolean
|
||||||
|
Friend Property GifsSpecialFolder As String
|
||||||
|
Friend Property GifsPrefix As String
|
||||||
Private ReadOnly _DataNames As List(Of String)
|
Private ReadOnly _DataNames As List(Of String)
|
||||||
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean)
|
Friend Property UseMD5Comparison As Boolean = False
|
||||||
|
Private StartMD5Checked As Boolean = False
|
||||||
|
Friend Property RemoveExistingDuplicates As Boolean = False
|
||||||
|
#End Region
|
||||||
|
#Region "Exchange options"
|
||||||
|
Friend Overrides Function ExchangeOptionsGet() As Object
|
||||||
|
Return New EditorExchangeOptions(Me)
|
||||||
|
End Function
|
||||||
|
Friend Overrides Sub ExchangeOptionsSet(ByVal Obj As Object)
|
||||||
|
If Not Obj Is Nothing AndAlso TypeOf Obj Is EditorExchangeOptions Then
|
||||||
|
With DirectCast(Obj, EditorExchangeOptions)
|
||||||
|
GifsDownload = .GifsDownload
|
||||||
|
GifsSpecialFolder = .GifsSpecialFolder
|
||||||
|
GifsPrefix = .GifsPrefix
|
||||||
|
UseMD5Comparison = .UseMD5Comparison
|
||||||
|
RemoveExistingDuplicates = .RemoveExistingDuplicates
|
||||||
|
End With
|
||||||
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Initializer"
|
#Region "Initializer, loader"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
_DataNames = New List(Of String)
|
_DataNames = New List(Of String)
|
||||||
End Sub
|
End Sub
|
||||||
|
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean)
|
||||||
|
If Loading Then
|
||||||
|
GifsDownload = Container.Value(Name_GifsDownload).FromXML(Of Boolean)(True)
|
||||||
|
GifsSpecialFolder = Container.Value(Name_GifsSpecialFolder)
|
||||||
|
If Not Container.Contains(Name_GifsPrefix) Then
|
||||||
|
GifsPrefix = "GIF_"
|
||||||
|
Else
|
||||||
|
GifsPrefix = Container.Value(Name_GifsPrefix)
|
||||||
|
End If
|
||||||
|
UseMD5Comparison = Container.Value(Name_UseMD5Comparison).FromXML(Of Boolean)(False)
|
||||||
|
RemoveExistingDuplicates = Container.Value(Name_RemoveExistingDuplicates).FromXML(Of Boolean)(False)
|
||||||
|
StartMD5Checked = Container.Value(Name_StartMD5Checked).FromXML(Of Boolean)(False)
|
||||||
|
Else
|
||||||
|
Container.Add(Name_GifsDownload, GifsDownload.BoolToInteger)
|
||||||
|
Container.Add(Name_GifsSpecialFolder, GifsSpecialFolder)
|
||||||
|
Container.Add(Name_GifsPrefix, GifsPrefix)
|
||||||
|
Container.Add(Name_UseMD5Comparison, UseMD5Comparison.BoolToInteger)
|
||||||
|
Container.Add(Name_RemoveExistingDuplicates, RemoveExistingDuplicates.BoolToInteger)
|
||||||
|
Container.Add(Name_StartMD5Checked, StartMD5Checked.BoolToInteger)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download functions"
|
#Region "Download functions"
|
||||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
@@ -35,6 +87,7 @@ Namespace API.Twitter
|
|||||||
Else
|
Else
|
||||||
If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.File.File), LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
If _ContentList.Count > 0 Then _DataNames.ListAddList(_ContentList.Select(Function(c) c.File.File), LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
||||||
DownloadData(String.Empty, Token)
|
DownloadData(String.Empty, Token)
|
||||||
|
If UseMD5Comparison Then ValidateMD5(Token)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Overloads Sub DownloadData(ByVal POST As String, ByVal Token As CancellationToken)
|
Private Overloads Sub DownloadData(ByVal POST As String, ByVal Token As CancellationToken)
|
||||||
@@ -65,6 +118,30 @@ Namespace API.Twitter
|
|||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Using w As EContainer = JsonDocument.Parse(r)
|
Using w As EContainer = JsonDocument.Parse(r)
|
||||||
If w.ListExists Then
|
If w.ListExists Then
|
||||||
|
|
||||||
|
If Not IsSavedPosts And POST.IsEmptyString And Not w.ItemF({0, "user"}) Is Nothing Then
|
||||||
|
With w.ItemF({0, "user"})
|
||||||
|
If .Value("screen_name").StringToLower = Name Then
|
||||||
|
UserSiteNameUpdate(.Value("name"))
|
||||||
|
UserDescriptionUpdate(.Value("description"))
|
||||||
|
Dim __getImage As Action(Of String) = Sub(ByVal img As String)
|
||||||
|
If Not img.IsEmptyString Then
|
||||||
|
Dim __imgFile As SFile = UrlFile(img, True)
|
||||||
|
If Not __imgFile.Name.IsEmptyString Then
|
||||||
|
If __imgFile.Extension.IsEmptyString Then __imgFile.Extension = "jpg"
|
||||||
|
__imgFile.Path = MyFile.CutPath.Path
|
||||||
|
If Not __imgFile.Exists Then GetWebFile(img, __imgFile, EDP.None)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Dim icon$ = .Value("profile_image_url_https")
|
||||||
|
If Not icon.IsEmptyString Then icon = icon.Replace("_normal", String.Empty)
|
||||||
|
__getImage.Invoke(.Value("profile_banner_url"))
|
||||||
|
__getImage.Invoke(icon)
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
|
||||||
For Each nn In If(IsSavedPosts, w({"globalObjects", "tweets"}).XmlIfNothing, w)
|
For Each nn In If(IsSavedPosts, w({"globalObjects", "tweets"}).XmlIfNothing, w)
|
||||||
ThrowAny(Token)
|
ThrowAny(Token)
|
||||||
If nn.Count > 0 Then
|
If nn.Count > 0 Then
|
||||||
@@ -79,9 +156,6 @@ Namespace API.Twitter
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Not IsSavedPosts AndAlso UserDescriptionNeedToUpdate() AndAlso nn.Value({"user"}, "screen_name") = Name Then _
|
|
||||||
UserDescriptionUpdate(nn.Value({"user"}, "description"))
|
|
||||||
|
|
||||||
'Date Pattern:
|
'Date Pattern:
|
||||||
'Sat Jan 01 01:10:15 +0000 2000
|
'Sat Jan 01 01:10:15 +0000 2000
|
||||||
If nn.Contains("created_at") Then PostDate = nn("created_at").Value Else PostDate = String.Empty
|
If nn.Contains("created_at") Then PostDate = nn("created_at").Value Else PostDate = String.Empty
|
||||||
@@ -139,7 +213,7 @@ Namespace API.Twitter
|
|||||||
If Not dName.IsEmptyString AndAlso Not _DataNames.Contains(dName) Then
|
If Not dName.IsEmptyString AndAlso Not _DataNames.Contains(dName) Then
|
||||||
_DataNames.Add(dName)
|
_DataNames.Add(dName)
|
||||||
_TempMediaList.ListAddValue(MediaFromData(m("media_url").Value,
|
_TempMediaList.ListAddValue(MediaFromData(m("media_url").Value,
|
||||||
PostID, PostDate, GetPictureOption(m), State), LNC)
|
PostID, PostDate, GetPictureOption(m), State, UTypes.Picture), LNC)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -155,7 +229,7 @@ Namespace API.Twitter
|
|||||||
Dim f$ = UrlFile(URL)
|
Dim f$ = UrlFile(URL)
|
||||||
If Not f.IsEmptyString AndAlso Not _DataNames.Contains(f) Then
|
If Not f.IsEmptyString AndAlso Not _DataNames.Contains(f) Then
|
||||||
_DataNames.Add(f)
|
_DataNames.Add(f)
|
||||||
_TempMediaList.ListAddValue(MediaFromData(URL, PostID, PostDate,, State), LNC)
|
_TempMediaList.ListAddValue(MediaFromData(URL, PostID, PostDate,, State, UTypes.Video), LNC)
|
||||||
End If
|
End If
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
@@ -182,10 +256,11 @@ Namespace API.Twitter
|
|||||||
url = .Value("url")
|
url = .Value("url")
|
||||||
ff = UrlFile(url)
|
ff = UrlFile(url)
|
||||||
If Not ff.IsEmptyString Then
|
If Not ff.IsEmptyString Then
|
||||||
If Not _DataNames.Contains(ff) Then
|
If GifsDownload And Not _DataNames.Contains(ff) Then
|
||||||
m = MediaFromData(url, PostID, PostDate,, State)
|
m = MediaFromData(url, PostID, PostDate,, State, UTypes.Video)
|
||||||
f = m.File
|
f = m.File
|
||||||
If Not f.IsEmptyString Then f.Name = $"GIF_{f.Name}" : m.File = f
|
If Not f.IsEmptyString And Not GifsPrefix.IsEmptyString Then f.Name = $"{GifsPrefix}{f.Name}" : m.File = f
|
||||||
|
If Not GifsSpecialFolder.IsEmptyString Then m.SpecialFolder = $"{GifsSpecialFolder}*"
|
||||||
_TempMediaList.ListAddValue(m, LNC)
|
_TempMediaList.ListAddValue(m, LNC)
|
||||||
End If
|
End If
|
||||||
Return True
|
Return True
|
||||||
@@ -262,6 +337,132 @@ Namespace API.Twitter
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
|
#Region "MD5 support"
|
||||||
|
Private Const VALIDATE_MD5_ERROR As String = "VALIDATE_MD5_ERROR"
|
||||||
|
Private Sub ValidateMD5(ByVal Token As CancellationToken)
|
||||||
|
Try
|
||||||
|
Dim missingMD5 As Predicate(Of UserMedia) = Function(d) (d.Type = UTypes.GIF Or d.Type = UTypes.Picture) And d.MD5.IsEmptyString
|
||||||
|
If UseMD5Comparison And _TempMediaList.Exists(missingMD5) Then
|
||||||
|
Dim i%
|
||||||
|
Dim data As UserMedia = Nothing
|
||||||
|
Dim hashList As New Dictionary(Of String, SFile)
|
||||||
|
Dim f As SFile
|
||||||
|
Dim ErrMD5 As New ErrorsDescriber(EDP.ReturnValue)
|
||||||
|
Dim __getMD5 As Func(Of UserMedia, Boolean, String) =
|
||||||
|
Function(ByVal __data As UserMedia, ByVal IsUrl As Boolean) As String
|
||||||
|
Try
|
||||||
|
Dim ImgFormat As Imaging.ImageFormat = Nothing
|
||||||
|
Dim hash$ = String.Empty
|
||||||
|
Dim __isGif As Boolean = False
|
||||||
|
If __data.Type = UTypes.GIF Then
|
||||||
|
ImgFormat = Imaging.ImageFormat.Gif
|
||||||
|
__isGif = True
|
||||||
|
ElseIf Not __data.File.IsEmptyString Then
|
||||||
|
ImgFormat = GetImageFormat(__data.File)
|
||||||
|
End If
|
||||||
|
If ImgFormat Is Nothing Then ImgFormat = Imaging.ImageFormat.Jpeg
|
||||||
|
If IsUrl Then
|
||||||
|
hash = ByteArrayToString(GetMD5(SFile.GetBytesFromNet(__data.URL_BASE.IfNullOrEmpty(__data.URL), ErrMD5), ImgFormat, ErrMD5))
|
||||||
|
Else
|
||||||
|
hash = ByteArrayToString(GetMD5(SFile.GetBytes(__data.File, ErrMD5), ImgFormat, ErrMD5))
|
||||||
|
End If
|
||||||
|
If hash.IsEmptyString And Not __isGif Then
|
||||||
|
If ImgFormat Is Imaging.ImageFormat.Jpeg Then ImgFormat = Imaging.ImageFormat.Png Else ImgFormat = Imaging.ImageFormat.Jpeg
|
||||||
|
If IsUrl Then
|
||||||
|
hash = ByteArrayToString(GetMD5(SFile.GetBytesFromNet(__data.URL_BASE.IfNullOrEmpty(__data.URL), ErrMD5), ImgFormat, ErrMD5))
|
||||||
|
Else
|
||||||
|
hash = ByteArrayToString(GetMD5(SFile.GetBytes(__data.File, ErrMD5), ImgFormat, ErrMD5))
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return hash
|
||||||
|
Catch
|
||||||
|
Return String.Empty
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
If Not StartMD5Checked Then
|
||||||
|
StartMD5Checked = True
|
||||||
|
If _ContentList.Exists(missingMD5) Then
|
||||||
|
Dim existingFiles As List(Of SFile) = SFile.GetFiles(MyFileSettings.CutPath, "*.jpg|*.jpeg|*.png|*.gif",, EDP.ReturnValue).ListIfNothing
|
||||||
|
Dim eIndx%
|
||||||
|
Dim eFinder As Predicate(Of SFile) = Function(ff) ff.File = data.File.File
|
||||||
|
If RemoveExistingDuplicates Then
|
||||||
|
RemoveExistingDuplicates = False
|
||||||
|
_ForceSaveUserInfo = True
|
||||||
|
If existingFiles.Count > 0 Then
|
||||||
|
Dim h$
|
||||||
|
For i = existingFiles.Count - 1 To 0 Step -1
|
||||||
|
h = __getMD5(New UserMedia With {.File = existingFiles(i)}, False)
|
||||||
|
If Not h.IsEmptyString Then
|
||||||
|
If hashList.ContainsKey(h) Then
|
||||||
|
MyMainLOG = $"{ToStringForLog()}: Removed image [{existingFiles(i).File}] (duplicate of [{hashList(h).File}])"
|
||||||
|
existingFiles(i).Delete(SFO.File, SFODelete.DeleteToRecycleBin, ErrMD5)
|
||||||
|
existingFiles.RemoveAt(i)
|
||||||
|
Else
|
||||||
|
hashList.Add(h, existingFiles(i))
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
For i = 0 To _ContentList.Count - 1
|
||||||
|
data = _ContentList(i)
|
||||||
|
If (data.Type = UTypes.GIF Or data.Type = UTypes.Picture) Then
|
||||||
|
If data.MD5.IsEmptyString Then
|
||||||
|
ThrowAny(Token)
|
||||||
|
eIndx = existingFiles.FindIndex(eFinder)
|
||||||
|
If eIndx >= 0 Then
|
||||||
|
data.MD5 = __getMD5(New UserMedia With {.File = existingFiles(eIndx)}, False)
|
||||||
|
If Not data.MD5.IsEmptyString Then _ContentList(i) = data : _ForceSaveUserData = True
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
existingFiles.RemoveAll(eFinder)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If existingFiles.Count > 0 Then
|
||||||
|
For i = 0 To existingFiles.Count - 1
|
||||||
|
f = existingFiles(i)
|
||||||
|
data = New UserMedia(f.File) With {
|
||||||
|
.State = UStates.Downloaded,
|
||||||
|
.Type = IIf(f.Extension = "gif", UTypes.GIF, UTypes.Picture),
|
||||||
|
.File = f
|
||||||
|
}
|
||||||
|
ThrowAny(Token)
|
||||||
|
data.MD5 = __getMD5(data, False)
|
||||||
|
If Not data.MD5.IsEmptyString Then _ContentList.Add(data) : _ForceSaveUserData = True
|
||||||
|
Next
|
||||||
|
existingFiles.Clear()
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If _ContentList.Count > 0 Then
|
||||||
|
With _ContentList.Select(Function(d) d.MD5)
|
||||||
|
If .ListExists Then .ToList.ForEach(Sub(md5value) _
|
||||||
|
If Not md5value.IsEmptyString AndAlso Not hashList.ContainsKey(md5value) Then hashList.Add(md5value, New SFile))
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
|
||||||
|
For i = _TempMediaList.Count - 1 To 0 Step -1
|
||||||
|
data = _TempMediaList(i)
|
||||||
|
If missingMD5(data) Then
|
||||||
|
ThrowAny(Token)
|
||||||
|
data.MD5 = __getMD5(data, True)
|
||||||
|
If Not data.MD5.IsEmptyString Then
|
||||||
|
If hashList.ContainsKey(data.MD5) Then
|
||||||
|
_TempMediaList.RemoveAt(i)
|
||||||
|
Else
|
||||||
|
hashList.Add(data.MD5, New SFile)
|
||||||
|
_TempMediaList(i) = data
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
ProcessException(ex, Token, "ValidateMD5",, VALIDATE_MD5_ERROR)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "Get video static"
|
#Region "Get video static"
|
||||||
Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal resp As Responser) As IEnumerable(Of UserMedia)
|
Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal resp As Responser) As IEnumerable(Of UserMedia)
|
||||||
Try
|
Try
|
||||||
@@ -274,7 +475,7 @@ Namespace API.Twitter
|
|||||||
Using j As EContainer = JsonDocument.Parse(r)
|
Using j As EContainer = JsonDocument.Parse(r)
|
||||||
If j.ListExists Then
|
If j.ListExists Then
|
||||||
Dim u$ = GetVideoNodeURL(j)
|
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,,, UTypes.Video)}
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
End If
|
End If
|
||||||
@@ -323,10 +524,17 @@ Namespace API.Twitter
|
|||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "UrlFile"
|
#Region "UrlFile"
|
||||||
Private Function UrlFile(ByVal URL As String) As String
|
Private Function UrlFile(ByVal URL As String, Optional ByVal GetWithoutExtension As Boolean = False) As String
|
||||||
Try
|
Try
|
||||||
Dim f As SFile = CStr(RegexReplace(LinkFormatterSecure(RegexReplace(URL.Replace("\", String.Empty), LinkPattern)), FilesPattern))
|
If Not URL.IsEmptyString Then
|
||||||
If Not f.IsEmptyString Then Return f.File Else Return String.Empty
|
Dim f As SFile = CStr(RegexReplace(LinkFormatterSecure(RegexReplace(URL.Replace("\", String.Empty), LinkPattern)), FilesPattern))
|
||||||
|
If f.IsEmptyString And GetWithoutExtension Then
|
||||||
|
URL = LinkFormatterSecure(RegexReplace(URL.Replace("\", String.Empty), LinkPattern))
|
||||||
|
If Not URL.IsEmptyString Then f = New SFile With {.Name = URL.Split("/").LastOrDefault}
|
||||||
|
End If
|
||||||
|
If Not f.IsEmptyString Then Return f.File
|
||||||
|
End If
|
||||||
|
Return String.Empty
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return String.Empty
|
Return String.Empty
|
||||||
End Try
|
End Try
|
||||||
@@ -335,9 +543,10 @@ Namespace API.Twitter
|
|||||||
#Region "Create media"
|
#Region "Create media"
|
||||||
Private Shared Function MediaFromData(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
Private Shared Function MediaFromData(ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
||||||
Optional ByVal _PictureOption As String = Nothing,
|
Optional ByVal _PictureOption As String = Nothing,
|
||||||
Optional ByVal State As UStates = UStates.Unknown) As UserMedia
|
Optional ByVal State As UStates = UStates.Unknown,
|
||||||
|
Optional ByVal Type As UTypes = UTypes.Undefined) As UserMedia
|
||||||
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
||||||
Dim m As New UserMedia(_URL) With {.PictureOption = _PictureOption, .Post = New UserPost With {.ID = PostID}}
|
Dim m As New UserMedia(_URL) With {.PictureOption = _PictureOption, .Post = New UserPost With {.ID = PostID}, .Type = Type}
|
||||||
If Not m.URL.IsEmptyString Then m.File = CStr(RegexReplace(m.URL, FilesPattern))
|
If Not m.URL.IsEmptyString Then m.File = CStr(RegexReplace(m.URL, FilesPattern))
|
||||||
If Not m.PictureOption.IsEmptyString And Not m.File.IsEmptyString And Not m.URL.IsEmptyString Then
|
If Not m.PictureOption.IsEmptyString And Not m.File.IsEmptyString And Not m.URL.IsEmptyString Then
|
||||||
m.URL = $"{m.URL.Replace($".{m.File.Extension}", String.Empty)}?format={m.File.Extension}&name={m.PictureOption}"
|
m.URL = $"{m.URL.Replace($".{m.File.Extension}", String.Empty)}?format={m.File.Extension}&name={m.PictureOption}"
|
||||||
@@ -355,20 +564,25 @@ Namespace API.Twitter
|
|||||||
#Region "Exception"
|
#Region "Exception"
|
||||||
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False,
|
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False,
|
||||||
Optional ByVal EObj As Object = Nothing) As Integer
|
Optional ByVal EObj As Object = Nothing) As Integer
|
||||||
With Responser
|
If AEquals(EObj, VALIDATE_MD5_ERROR) Then
|
||||||
If .StatusCode = HttpStatusCode.NotFound Then
|
If Not FromPE Then LogError(ex, Message)
|
||||||
UserExists = False
|
Return 0
|
||||||
ElseIf .StatusCode = HttpStatusCode.Unauthorized Then
|
Else
|
||||||
UserSuspended = True
|
With Responser
|
||||||
ElseIf .StatusCode = HttpStatusCode.BadRequest Then
|
If .StatusCode = HttpStatusCode.NotFound Then
|
||||||
MyMainLOG = "Twitter has invalid credentials"
|
UserExists = False
|
||||||
ElseIf .StatusCode = HttpStatusCode.ServiceUnavailable Or .StatusCode = HttpStatusCode.InternalServerError Then
|
ElseIf .StatusCode = HttpStatusCode.Unauthorized Then
|
||||||
MyMainLOG = $"[{CInt(.StatusCode)}] Twitter is currently unavailable ({ToString()})"
|
UserSuspended = True
|
||||||
Else
|
ElseIf .StatusCode = HttpStatusCode.BadRequest Then
|
||||||
If Not FromPE Then LogError(ex, Message) : HasError = True
|
MyMainLOG = "Twitter has invalid credentials"
|
||||||
Return 0
|
ElseIf .StatusCode = HttpStatusCode.ServiceUnavailable Or .StatusCode = HttpStatusCode.InternalServerError Then
|
||||||
End If
|
MyMainLOG = $"[{CInt(.StatusCode)}] Twitter is currently unavailable ({ToString()})"
|
||||||
End With
|
Else
|
||||||
|
If Not FromPE Then LogError(ex, Message) : HasError = True
|
||||||
|
Return 0
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End If
|
||||||
Return 1
|
Return 1
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ Namespace API
|
|||||||
If Not e.Exists Then e = New ErrorsDescriber(EDP.SendInLog)
|
If Not e.Exists Then e = New ErrorsDescriber(EDP.SendInLog)
|
||||||
If Count > 0 Then Collections.ForEach(Sub(c) c.OpenSite(e))
|
If Count > 0 Then Collections.ForEach(Sub(c) c.OpenSite(e))
|
||||||
End Sub
|
End Sub
|
||||||
Private ReadOnly RealUser As Predicate(Of IUserData) = Function(u) u.UserModel = UsageModel.Default
|
Private ReadOnly RealUser As Predicate(Of IUserData) = Function(u) u.UserModel = UsageModel.Default And Not u.HOST.Key = PathPlugin.PluginKey
|
||||||
Friend Overrides Sub OpenFolder()
|
Friend Overrides Sub OpenFolder()
|
||||||
Try
|
Try
|
||||||
If Count > 0 Then
|
If Count > 0 Then
|
||||||
|
|||||||
@@ -6,17 +6,17 @@
|
|||||||
'
|
'
|
||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports SCrawler.API.Base
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Namespace API.XVIDEOS
|
Namespace API.XVIDEOS
|
||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
Friend Const XvideosSiteKey As String = "AndyProgram_XVIDEOS"
|
Friend Const XvideosSiteKey As String = "AndyProgram_XVIDEOS"
|
||||||
Private ReadOnly HtmlConverter As Func(Of String, String) = Function(Input) SymbolsConverter.HTML.Decode(Input, EDP.ReturnValue)
|
|
||||||
Friend ReadOnly Regex_M3U8 As RParams = RParams.DM("http.+?.m3u8.*?(?=')", 0)
|
Friend ReadOnly Regex_M3U8 As RParams = RParams.DM("http.+?.m3u8.*?(?=')", 0)
|
||||||
Friend ReadOnly Regex_VideoTitle As RParams = RParams.DMS("html5player.setVideoTitle\('(.+)(?='\);)", 1, EDP.ReturnValue, HtmlConverter)
|
Friend ReadOnly Regex_VideoTitle As RParams = RParams.DMS("html5player.setVideoTitle\('(.+)(?='\);)", 1, EDP.ReturnValue, TitleHtmlConverter)
|
||||||
Friend ReadOnly Regex_VideoID As RParams = RParams.DMS(".*?www.xvideos.com/(video\d+).*", 1)
|
Friend ReadOnly Regex_VideoID As RParams = RParams.DMS(".*?www.xvideos.com/(video\d+).*", 1)
|
||||||
Friend ReadOnly Regex_M3U8_Reparse As RParams = RParams.DM("NAME=""(\d+).*?""[\r\n]*?(.+)(?=(|[\r\n]+?))", 0, RegexReturn.List)
|
Friend ReadOnly Regex_M3U8_Reparse As RParams = RParams.DM("NAME=""(\d+).*?""[\r\n]*?(.+)(?=(|[\r\n]+?))", 0, RegexReturn.List)
|
||||||
Friend ReadOnly Regex_M3U8_Appender As RParams = RParams.DM("(.+)(?=/.+?\.m3u8.*?)", 0)
|
Friend ReadOnly Regex_M3U8_Appender As RParams = RParams.DM("(.+)(?=/.+?\.m3u8.*?)", 0)
|
||||||
Friend ReadOnly Regex_SavedVideosPlaylist As RParams = RParams.DM("<div id=""video.+?data-id=""(\d+).+?a href=""([^""]+)"".+?title=""([^""]*)""",
|
Friend ReadOnly Regex_SavedVideosPlaylist As RParams = RParams.DM("<div id=""video.+?data-id=""(\d+).+?a href=""([^""]+)"".+?title=""([^""]*)""",
|
||||||
0, RegexReturn.List, EDP.ReturnValue, HtmlConverter)
|
0, RegexReturn.List, EDP.ReturnValue, TitleHtmlConverter)
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -63,6 +63,7 @@ Namespace API.XVIDEOS
|
|||||||
Initialized = True
|
Initialized = True
|
||||||
DomainContainer.EndInit(Me)
|
DomainContainer.EndInit(Me)
|
||||||
DomainsTemp.ListAddList(Domains)
|
DomainsTemp.ListAddList(Domains)
|
||||||
|
MyBase.EndInit()
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Edit"
|
#Region "Edit"
|
||||||
@@ -94,7 +95,7 @@ Namespace API.XVIDEOS
|
|||||||
Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean
|
Friend Overrides Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean
|
||||||
If Settings.UseM3U8 Then
|
If Settings.UseM3U8 Then
|
||||||
If What = ISiteSettings.Download.SavedPosts Then
|
If What = ISiteSettings.Download.SavedPosts Then
|
||||||
Return ACheck(SavedVideosPlaylist.Value) And If(Responser.Cookies?.Count, 0) > 0
|
Return ACheck(SavedVideosPlaylist.Value) And Responser.CookiesExists
|
||||||
Else
|
Else
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
@@ -104,10 +105,13 @@ Namespace API.XVIDEOS
|
|||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "User: get, check"
|
#Region "User: get, check"
|
||||||
Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String
|
Friend Function GetUserUrlPart(ByVal User As UserData) As String
|
||||||
Dim __user$ = User.Name.Split("_").FirstOrDefault
|
Dim __user$ = User.Name.Split("_").FirstOrDefault
|
||||||
__user &= $"/{User.Name.Replace($"{__user}_", String.Empty)}"
|
__user &= $"/{User.Name.Replace($"{__user}_", String.Empty)}"
|
||||||
Return String.Format(UrlPatternUser, __user)
|
Return __user
|
||||||
|
End Function
|
||||||
|
Friend Overrides Function GetUserUrl(ByVal User As IPluginContentProvider, ByVal Channel As Boolean) As String
|
||||||
|
Return String.Format(UrlPatternUser, GetUserUrlPart(User))
|
||||||
End Function
|
End Function
|
||||||
Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)"
|
Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)"
|
||||||
Private Const URD As String = ".*?{0}{1}"
|
Private Const URD As String = ".*?{0}{1}"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ Namespace API.XVIDEOS
|
|||||||
ID = ParamsArray(0)
|
ID = ParamsArray(0)
|
||||||
URL = ParamsArray(1)
|
URL = ParamsArray(1)
|
||||||
If Not URL.IsEmptyString Then URL = $"https://www.xvideos.com/{URL.StringTrimStart("/")}"
|
If Not URL.IsEmptyString Then URL = $"https://www.xvideos.com/{URL.StringTrimStart("/")}"
|
||||||
Title = ParamsArray(2).StringRemoveWinForbiddenSymbols.StringTrim
|
Title = ParamsArray(2)
|
||||||
End If
|
End If
|
||||||
Return Me
|
Return Me
|
||||||
End Function
|
End Function
|
||||||
@@ -45,16 +45,7 @@ Namespace API.XVIDEOS
|
|||||||
UseInternalM3U8Function = True
|
UseInternalM3U8Function = True
|
||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
If Not Settings.UseM3U8 Then
|
If Not Settings.UseM3U8 Then MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found" : Exit Sub
|
||||||
'TODELETE: XVideos m3u8 delete after debug ffmpeg x86
|
|
||||||
'If Not Settings.OS64 Then
|
|
||||||
' MyMainLOG = $"XVIDEOS [{ToStringForLog()}]: The plugin only works with x64 OS."
|
|
||||||
'Else
|
|
||||||
' 'MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found"
|
|
||||||
'End If
|
|
||||||
MyMainLOG = $"{ToStringForLog()}: File [ffmpeg.exe] not found"
|
|
||||||
Exit Sub
|
|
||||||
End If
|
|
||||||
If IsSavedPosts Then
|
If IsSavedPosts Then
|
||||||
If Not ACheck(MySettings.SavedVideosPlaylist.Value) Then Throw New ArgumentNullException("SavedVideosPlaylist", "Playlist of saved videos cannot be null")
|
If Not ACheck(MySettings.SavedVideosPlaylist.Value) Then Throw New ArgumentNullException("SavedVideosPlaylist", "Playlist of saved videos cannot be null")
|
||||||
DownloadSavedVideos(Token)
|
DownloadSavedVideos(Token)
|
||||||
@@ -65,49 +56,63 @@ Namespace API.XVIDEOS
|
|||||||
Private Sub DownloadUserVideo(ByVal Token As CancellationToken)
|
Private Sub DownloadUserVideo(ByVal Token As CancellationToken)
|
||||||
Dim URL$ = String.Empty
|
Dim URL$ = String.Empty
|
||||||
Try
|
Try
|
||||||
Dim NextPage% = 0
|
Dim NextPage%, d%
|
||||||
Dim r$
|
Dim limit% = If(DownloadTopCount, -1)
|
||||||
|
Dim r$, n$
|
||||||
Dim j As EContainer = Nothing
|
Dim j As EContainer = Nothing
|
||||||
Dim jj As EContainer
|
Dim jj As EContainer
|
||||||
Dim user$ = MySettings.GetUserUrl(Me, False)
|
Dim user$ = MySettings.GetUserUrlPart(Me)
|
||||||
Dim p As UserMedia
|
Dim p As UserMedia
|
||||||
Dim EnvirSet As Boolean = False
|
Dim EnvirSet As Boolean = False
|
||||||
|
|
||||||
Do
|
If ID.IsEmptyString Then GetUserID()
|
||||||
ThrowAny(Token)
|
For i% = 0 To 1
|
||||||
URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}"
|
If i = 1 And ID.IsEmptyString Then Exit For
|
||||||
r = Responser.GetResponse(URL)
|
NextPage = 0
|
||||||
If Not r.IsEmptyString Then
|
d = 0
|
||||||
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
n = IIf(i = 0, "u", "url")
|
||||||
j = JsonDocument.Parse(r).XmlIfNothing
|
Do
|
||||||
With j
|
ThrowAny(Token)
|
||||||
If .Contains("videos") Then
|
If i = 0 Then
|
||||||
With .Item("videos")
|
URL = $"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}"
|
||||||
If .Count > 0 Then
|
Else 'Quickies
|
||||||
NextPage += 1
|
URL = $"https://www.xvideos.com/quickies-api/profilevideos/all/none/N/{ID}/{NextPage}"
|
||||||
For Each jj In .Self
|
End If
|
||||||
p = New UserMedia With {
|
r = Responser.GetResponse(URL,, EDP.ReturnValue)
|
||||||
.Post = jj.Value("id"),
|
If Not r.IsEmptyString Then
|
||||||
.URL = $"https://www.xvideos.com/{jj.Value("u").StringTrimStart("/")}"
|
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
||||||
}
|
j = JsonDocument.Parse(r).XmlIfNothing
|
||||||
If Not p.Post.ID.IsEmptyString And Not jj.Value("u").IsEmptyString Then
|
With j
|
||||||
If Not _TempPostsList.Contains(p.Post.ID) Then
|
If .Contains("videos") Then
|
||||||
_TempPostsList.Add(p.Post.ID)
|
With .Item("videos")
|
||||||
_TempMediaList.Add(p)
|
If .Count > 0 Then
|
||||||
Else
|
NextPage += 1
|
||||||
Exit Do
|
For Each jj In .Self
|
||||||
|
p = New UserMedia With {
|
||||||
|
.Post = jj.Value("id"),
|
||||||
|
.URL = $"https://www.xvideos.com/{jj.Value(n).StringTrimStart("/")}"
|
||||||
|
}
|
||||||
|
If Not p.Post.ID.IsEmptyString And Not jj.Value(n).IsEmptyString Then
|
||||||
|
If Not _TempPostsList.Contains(p.Post.ID) Then
|
||||||
|
_TempPostsList.Add(p.Post.ID)
|
||||||
|
_TempMediaList.Add(p)
|
||||||
|
d += 1
|
||||||
|
If limit > 0 And d = limit Then Exit Do
|
||||||
|
Else
|
||||||
|
Exit Do
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
Next
|
||||||
Next
|
Continue Do
|
||||||
Continue Do
|
End If
|
||||||
End If
|
End With
|
||||||
End With
|
End If
|
||||||
End If
|
End With
|
||||||
End With
|
End If
|
||||||
End If
|
If Not j Is Nothing Then j.Dispose()
|
||||||
If Not j Is Nothing Then j.Dispose()
|
Exit Do
|
||||||
Exit Do
|
Loop While NextPage < 100
|
||||||
Loop While NextPage < 100
|
Next
|
||||||
|
|
||||||
If Not j Is Nothing Then j.Dispose()
|
If Not j Is Nothing Then j.Dispose()
|
||||||
|
|
||||||
@@ -130,6 +135,10 @@ Namespace API.XVIDEOS
|
|||||||
If _TempMediaList.ListExists Then _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
If _TempMediaList.ListExists Then _TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub GetUserID()
|
||||||
|
Dim r$ = Responser.GetResponse($"https://www.xvideos.com/{MySettings.GetUserUrlPart(Me)}",, EDP.ReturnValue)
|
||||||
|
If Not r.IsEmptyString Then ID = RegexReplace(r, RParams.DMS("""id_user"":(\d+)", 1, EDP.ReturnValue))
|
||||||
|
End Sub
|
||||||
Private Sub DownloadSavedVideos(ByVal Token As CancellationToken)
|
Private Sub DownloadSavedVideos(ByVal Token As CancellationToken)
|
||||||
Dim URL$ = MySettings.SavedVideosPlaylist.Value
|
Dim URL$ = MySettings.SavedVideosPlaylist.Value
|
||||||
Try
|
Try
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ Namespace API.Xhamster
|
|||||||
DownloadUHD = New PropertyValue(False)
|
DownloadUHD = New PropertyValue(False)
|
||||||
|
|
||||||
UrlPatternUser = "https://xhamster.com/users/{0}"
|
UrlPatternUser = "https://xhamster.com/users/{0}"
|
||||||
UserRegex = RParams.DMS("xhamster.com/users/([^/]+).*?", 1)
|
UrlPatternChannel = "https://xhamster.com/channels/{0}"
|
||||||
|
UserRegex = RParams.DMS($"/({UserOption}|{ChannelOption})/([^/]+)(\Z|.*)", 0, RegexReturn.ListByMatch)
|
||||||
ImageVideoContains = "xhamster"
|
ImageVideoContains = "xhamster"
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overrides Sub EndInit()
|
Friend Overrides Sub EndInit()
|
||||||
@@ -129,18 +130,12 @@ Namespace API.Xhamster
|
|||||||
Return Media.URL_BASE
|
Return Media.URL_BASE
|
||||||
End Function
|
End Function
|
||||||
#Region "Is my user/data"
|
#Region "Is my user/data"
|
||||||
Private Const UserRegexDefault As String = "{0}/users/([^/]+).*?"
|
Private Const ChannelOption As String = "channels"
|
||||||
|
Private Const UserOption As String = "users"
|
||||||
Friend Overrides Function IsMyUser(ByVal UserURL As String) As ExchangeOptions
|
Friend Overrides Function IsMyUser(ByVal UserURL As String) As ExchangeOptions
|
||||||
Dim b As ExchangeOptions = MyBase.IsMyUser(UserURL)
|
If Not UserURL.IsEmptyString AndAlso Domains.Count > 0 AndAlso Domains.Exists(Function(d) UserURL.ToLower.Contains(d.ToLower)) Then
|
||||||
If b.Exists Then Return b
|
Dim data As List(Of String) = RegexReplace(UserURL, UserRegex)
|
||||||
If Not UserURL.IsEmptyString And Domains.Count > 0 Then
|
If data.ListExists(3) AndAlso Not data(2).IsEmptyString Then Return New ExchangeOptions(Site, data(2), data(1) = ChannelOption)
|
||||||
Dim uName$, fStr$
|
|
||||||
Dim uErr As New ErrorsDescriber(EDP.ReturnValue)
|
|
||||||
For i% = 0 To Domains.Count - 1
|
|
||||||
fStr = String.Format(UserRegexDefault, Domains(i))
|
|
||||||
uName = RegexReplace(UserURL, RParams.DMS(fStr, 1, uErr))
|
|
||||||
If Not uName.IsEmptyString Then Return New ExchangeOptions(Site, uName)
|
|
||||||
Next
|
|
||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ Namespace API.Xhamster
|
|||||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
_TempPhotoData.Clear()
|
_TempPhotoData.Clear()
|
||||||
If DownloadVideos Then DownloadData(1, True, Token)
|
If DownloadVideos Then DownloadData(1, True, Token)
|
||||||
If DownloadImages Then
|
If Not IsChannel And DownloadImages Then
|
||||||
DownloadData(1, False, Token)
|
DownloadData(1, False, Token)
|
||||||
ReparsePhoto(Token)
|
ReparsePhoto(Token)
|
||||||
End If
|
End If
|
||||||
@@ -50,11 +50,16 @@ Namespace API.Xhamster
|
|||||||
Dim Type As UTypes = IIf(IsVideo, UTypes.VideoPre, UTypes.Picture)
|
Dim Type As UTypes = IIf(IsVideo, UTypes.VideoPre, UTypes.Picture)
|
||||||
Dim mPages$ = IIf(IsVideo, "maxVideoPages", "maxPhotoPages")
|
Dim mPages$ = IIf(IsVideo, "maxVideoPages", "maxPhotoPages")
|
||||||
Dim listNode$()
|
Dim listNode$()
|
||||||
|
Dim skipped As Boolean = False
|
||||||
|
Dim cBefore% = _TempMediaList.Count
|
||||||
Dim m As UserMedia
|
Dim m As UserMedia
|
||||||
|
|
||||||
If IsSavedPosts Then
|
If IsSavedPosts Then
|
||||||
URL = $"https://xhamster.com/my/favorites/{IIf(IsVideo, "videos", "photos-and-galleries")}{IIf(Page = 1, String.Empty, $"/{Page}")}"
|
URL = $"https://xhamster.com/my/favorites/{IIf(IsVideo, "videos", "photos-and-galleries")}{IIf(Page = 1, String.Empty, $"/{Page}")}"
|
||||||
listNode = If(IsVideo, {"favoriteVideoListComponent", "models"}, {"favoritesGalleriesAndPhotosCollection"})
|
listNode = If(IsVideo, {"favoriteVideoListComponent", "models"}, {"favoritesGalleriesAndPhotosCollection"})
|
||||||
|
ElseIf IsChannel Then
|
||||||
|
URL = $"https://xhamster.com/channels/{Name}/newest{IIf(Page = 1, String.Empty, $"/{Page}")}"
|
||||||
|
listNode = {"trendingVideoListComponent", "models"}
|
||||||
Else
|
Else
|
||||||
URL = $"https://xhamster.com/users/{Name}/{IIf(IsVideo, "videos", "photos")}{IIf(Page = 1, String.Empty, $"/{Page}")}"
|
URL = $"https://xhamster.com/users/{Name}/{IIf(IsVideo, "videos", "photos")}{IIf(Page = 1, String.Empty, $"/{Page}")}"
|
||||||
listNode = {If(IsVideo, "userVideoCollection", "userGalleriesCollection")}
|
listNode = {If(IsVideo, "userVideoCollection", "userGalleriesCollection")}
|
||||||
@@ -80,7 +85,7 @@ Namespace API.Xhamster
|
|||||||
|
|
||||||
If m.Post.Date.HasValue Then
|
If m.Post.Date.HasValue Then
|
||||||
Select Case CheckDatesLimit(m.Post.Date.Value, Nothing)
|
Select Case CheckDatesLimit(m.Post.Date.Value, Nothing)
|
||||||
Case DateResult.Skip : Continue For
|
Case DateResult.Skip : skipped = True : Continue For
|
||||||
Case DateResult.Exit : Exit Sub
|
Case DateResult.Exit : Exit Sub
|
||||||
End Select
|
End Select
|
||||||
End If
|
End If
|
||||||
@@ -108,7 +113,7 @@ Namespace API.Xhamster
|
|||||||
End Using
|
End Using
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If MaxPage > 0 AndAlso Page < MaxPage Then DownloadData(Page + 1, IsVideo, Token)
|
If (Not _TempMediaList.Count = cBefore Or skipped) And (IsChannel Or (MaxPage > 0 And Page < MaxPage)) Then DownloadData(Page + 1, IsVideo, Token)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ProcessException(ex, Token, $"data downloading error [{URL}]")
|
ProcessException(ex, Token, $"data downloading error [{URL}]")
|
||||||
End Try
|
End Try
|
||||||
@@ -286,7 +291,7 @@ Namespace API.Xhamster
|
|||||||
.ID = j.Value("id"),
|
.ID = j.Value("id"),
|
||||||
.Date = AConvert(Of Date)(j.Value("created"), DateProvider, Nothing)
|
.Date = AConvert(Of Date)(j.Value("created"), DateProvider, Nothing)
|
||||||
},
|
},
|
||||||
.PictureOption = j.Value("title").StringRemoveWinForbiddenSymbols,
|
.PictureOption = TitleHtmlConverter(j.Value("title")),
|
||||||
.Object = New ExchObj
|
.Object = New ExchObj
|
||||||
}
|
}
|
||||||
If PostDate.HasValue Then m.Post.Date = PostDate
|
If PostDate.HasValue Then m.Post.Date = PostDate
|
||||||
@@ -309,7 +314,7 @@ Namespace API.Xhamster
|
|||||||
End If
|
End If
|
||||||
If Not m.URL.IsEmptyString Then
|
If Not m.URL.IsEmptyString Then
|
||||||
If m.Post.ID.IsEmptyString Then m.Post.ID = m.URL.Split("/").LastOrDefault
|
If m.Post.ID.IsEmptyString Then m.Post.ID = m.URL.Split("/").LastOrDefault
|
||||||
If m.PictureOption.IsEmptyString Then m.PictureOption = j.Value("titleLocalized").StringRemoveWinForbiddenSymbols
|
If m.PictureOption.IsEmptyString Then m.PictureOption = TitleHtmlConverter(j.Value("titleLocalized"))
|
||||||
If m.PictureOption.IsEmptyString Then m.PictureOption = m.Post.ID
|
If m.PictureOption.IsEmptyString Then m.PictureOption = m.Post.ID
|
||||||
If setSpecialFolder Then m.SpecialFolder = m.PictureOption
|
If setSpecialFolder Then m.SpecialFolder = m.PictureOption
|
||||||
|
|
||||||
@@ -334,7 +339,7 @@ Namespace API.Xhamster
|
|||||||
Return If(Responser.Status = Net.WebExceptionStatus.ConnectionClosed, 1, 0)
|
Return If(Responser.Status = Net.WebExceptionStatus.ConnectionClosed, 1, 0)
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Idisposable support"
|
#Region "IDisposable support"
|
||||||
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
If Not disposedValue And disposing Then _TempPhotoData.Clear()
|
If Not disposedValue And disposing Then _TempPhotoData.Clear()
|
||||||
MyBase.Dispose(disposing)
|
MyBase.Dispose(disposing)
|
||||||
|
|||||||
@@ -211,8 +211,8 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
New ToolStripSeparator,
|
New ToolStripSeparator,
|
||||||
New ToolStripControlHost(CH_HIDE_EXISTS_USERS),
|
New ToolStripControlHost(CH_HIDE_EXISTS_USERS),
|
||||||
BTT_SHOW_STATS})
|
BTT_SHOW_STATS})
|
||||||
AddHandler Settings.ChannelsImagesColumns.OnValueChanged, AddressOf ImagesCountChanged
|
AddHandler Settings.ChannelsImagesColumns.ValueChanged, AddressOf ImagesCountChanged
|
||||||
AddHandler Settings.ChannelsImagesRows.OnValueChanged, AddressOf ImagesCountChanged
|
AddHandler Settings.ChannelsImagesRows.ValueChanged, AddressOf ImagesCountChanged
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Form handlers"
|
#Region "Form handlers"
|
||||||
@@ -398,7 +398,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
End With
|
End With
|
||||||
Return s
|
Return s
|
||||||
End Function
|
End Function
|
||||||
Private Sub ImagesCountChanged(ByVal Sender As Object, ByVal _Name As String, ByVal _Value As Object)
|
Private Sub ImagesCountChanged(ByVal Sender As Object, ByVal e As EventArgs)
|
||||||
AppendPendingUsers()
|
AppendPendingUsers()
|
||||||
MyRange.Limit = ImagesInRow * ImagesRows
|
MyRange.Limit = ImagesInRow * ImagesRows
|
||||||
MyRange.GoTo(0)
|
MyRange.GoTo(0)
|
||||||
|
|||||||
@@ -143,7 +143,8 @@ Namespace DownloadObjects
|
|||||||
''' <returns>True to activate</returns>
|
''' <returns>True to activate</returns>
|
||||||
Friend Function Open(ByVal _Key As String) As Boolean
|
Friend Function Open(ByVal _Key As String) As Boolean
|
||||||
If Not User Is Nothing Then
|
If Not User Is Nothing Then
|
||||||
If Key = _Key Then
|
If KeyDismiss = _Key Then
|
||||||
|
ElseIf Key = _Key Then
|
||||||
Return True
|
Return True
|
||||||
ElseIf KeyFolder = _Key Then
|
ElseIf KeyFolder = _Key Then
|
||||||
User.OpenFolder()
|
User.OpenFolder()
|
||||||
@@ -152,6 +153,8 @@ Namespace DownloadObjects
|
|||||||
ElseIf Images.ContainsKey(_Key) Then
|
ElseIf Images.ContainsKey(_Key) Then
|
||||||
Images(_Key).Open(, EDP.None)
|
Images(_Key).Open(, EDP.None)
|
||||||
End If
|
End If
|
||||||
|
Else
|
||||||
|
Return True
|
||||||
End If
|
End If
|
||||||
Return False
|
Return False
|
||||||
End Function
|
End Function
|
||||||
@@ -548,10 +551,12 @@ Namespace DownloadObjects
|
|||||||
UserKeys.Last.ShowNotification()
|
UserKeys.Last.ShowNotification()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Friend Function NotificationClicked(ByVal Key As String) As Boolean
|
Friend Function NotificationClicked(ByVal Key As String, ByRef Found As Boolean, ByRef ActivateForm As Boolean) As Boolean
|
||||||
Dim i% = UserKeys.IndexOf(Key)
|
Dim i% = UserKeys.IndexOf(Key)
|
||||||
If i >= 0 Then
|
If i >= 0 Then
|
||||||
MainFrameObj.FocusUser(UserKeys(i).IUserDataKey, UserKeys(i).Open(Key))
|
Found = True
|
||||||
|
ActivateForm = UserKeys(i).Open(Key)
|
||||||
|
MainFrameObj.FocusUser(UserKeys(i).IUserDataKey, ActivateForm)
|
||||||
Return True
|
Return True
|
||||||
Else
|
Else
|
||||||
Return False
|
Return False
|
||||||
|
|||||||
@@ -52,8 +52,13 @@ Namespace DownloadObjects
|
|||||||
Return Plans.Count
|
Return Plans.Count
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend Function NotificationClicked(ByVal Key As String) As Boolean
|
Friend Function NotificationClicked(ByVal Key As String, ByRef Found As Boolean, ByRef ActivateForm As Boolean) As Boolean
|
||||||
Return Count > 0 AndAlso Plans.Exists(Function(p) p.NotificationClicked(Key))
|
If Count > 0 Then
|
||||||
|
For Each plan As AutoDownloader In Plans
|
||||||
|
If plan.NotificationClicked(Key, Found, ActivateForm) Then Return True
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
End Function
|
End Function
|
||||||
Friend Sub Add(ByVal Plan As AutoDownloader)
|
Friend Sub Add(ByVal Plan As AutoDownloader)
|
||||||
Plan.Source = Me
|
Plan.Source = Me
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ Namespace DownloadObjects
|
|||||||
Private FeedEndless As Boolean = False
|
Private FeedEndless As Boolean = False
|
||||||
Private ReadOnly FileNotExist As New FPredicate(Of UserMediaD)(Function(d) Not d.Data.File.Exists)
|
Private ReadOnly FileNotExist As New FPredicate(Of UserMediaD)(Function(d) Not d.Data.File.Exists)
|
||||||
Private BttRefreshToolTipText As String = "Refresh data list"
|
Private BttRefreshToolTipText As String = "Refresh data list"
|
||||||
|
Private CenterImage As Boolean = False
|
||||||
|
Private NumberOfVisibleImages As Integer = 1
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Initializer"
|
#Region "Initializer"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
@@ -81,6 +83,25 @@ Namespace DownloadObjects
|
|||||||
DataRows = .FeedDataRows
|
DataRows = .FeedDataRows
|
||||||
DataColumns = .FeedDataColumns
|
DataColumns = .FeedDataColumns
|
||||||
FeedEndless = .FeedEndless
|
FeedEndless = .FeedEndless
|
||||||
|
If .FeedCenterImage.Use Then
|
||||||
|
CenterImage = True
|
||||||
|
NumberOfVisibleImages = .FeedCenterImage
|
||||||
|
Else
|
||||||
|
CenterImage = False
|
||||||
|
NumberOfVisibleImages = 1
|
||||||
|
End If
|
||||||
|
|
||||||
|
If .FeedBackColor.Exists Then
|
||||||
|
BackColor = .FeedBackColor
|
||||||
|
Else
|
||||||
|
BackColor = SystemColors.Window
|
||||||
|
End If
|
||||||
|
If .FeedForeColor.Exists Then
|
||||||
|
ForeColor = .FeedForeColor
|
||||||
|
Else
|
||||||
|
ForeColor = SystemColors.WindowText
|
||||||
|
End If
|
||||||
|
|
||||||
Dim fsd As Boolean = .FeedStoreSessionsData
|
Dim fsd As Boolean = .FeedStoreSessionsData
|
||||||
ControlInvoke(ToolbarTOP, MENU_LOAD_SESSION, Sub()
|
ControlInvoke(ToolbarTOP, MENU_LOAD_SESSION, Sub()
|
||||||
MENU_LOAD_SESSION.Visible = fsd
|
MENU_LOAD_SESSION.Visible = fsd
|
||||||
@@ -107,7 +128,7 @@ Namespace DownloadObjects
|
|||||||
MyRange.HandlersSuspended = True
|
MyRange.HandlersSuspended = True
|
||||||
MyRange.Limit = c
|
MyRange.Limit = c
|
||||||
MyRange.HandlersSuspended = False
|
MyRange.HandlersSuspended = False
|
||||||
If Not MyDefs.Initializing And rangeChanged Then RefillList()
|
If Not MyDefs.Initializing Then RefillList(False)
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
@@ -376,9 +397,10 @@ Namespace DownloadObjects
|
|||||||
If d2.Count > 0 Then d.InsertRange(0, d2) : d2.Clear()
|
If d2.Count > 0 Then d.InsertRange(0, d2) : d2.Clear()
|
||||||
End If
|
End If
|
||||||
Dim w% = GetWidth()
|
Dim w% = GetWidth()
|
||||||
|
Dim h% = GetHeight()
|
||||||
Dim p As New TPCELL(DataRows, DataColumns)
|
Dim p As New TPCELL(DataRows, DataColumns)
|
||||||
Dim fmList As New List(Of FeedMedia)
|
Dim fmList As New List(Of FeedMedia)
|
||||||
d.ForEach(Sub(de) fmList.Add(New FeedMedia(de, w, AddressOf FeedMedia_MediaDeleted)))
|
d.ForEach(Sub(de) fmList.Add(New FeedMedia(de, w, h, AddressOf FeedMedia_MediaDeleted)))
|
||||||
If fmList.Count > 0 Then fmList.ListDisposeRemoveAll(Function(fm) fm Is Nothing OrElse fm.HasError)
|
If fmList.Count > 0 Then fmList.ListDisposeRemoveAll(Function(fm) fm Is Nothing OrElse fm.HasError)
|
||||||
If fmList.Count > 0 Then
|
If fmList.Count > 0 Then
|
||||||
For i = 0 To fmList.Count - 1
|
For i = 0 To fmList.Count - 1
|
||||||
@@ -420,6 +442,13 @@ Namespace DownloadObjects
|
|||||||
Private Function GetWidth() As Integer
|
Private Function GetWidth() As Integer
|
||||||
Return (TP_DATA.Width - PaddingE.GetOf({Me, TP_DATA}).Horizontal(2)) / DataColumns
|
Return (TP_DATA.Width - PaddingE.GetOf({Me, TP_DATA}).Horizontal(2)) / DataColumns
|
||||||
End Function
|
End Function
|
||||||
|
Private Function GetHeight() As Integer
|
||||||
|
If CenterImage And DataColumns = 1 Then
|
||||||
|
Return (TP_DATA.Height - PaddingE.GetOf({Me, TP_DATA}).Vertical(2)) / IIf(NumberOfVisibleImages > 0, NumberOfVisibleImages, 1)
|
||||||
|
Else
|
||||||
|
Return -1
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
Private Sub DownloadFeedForm_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
|
Private Sub DownloadFeedForm_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
|
||||||
ResizeGrid()
|
ResizeGrid()
|
||||||
End Sub
|
End Sub
|
||||||
@@ -431,10 +460,11 @@ Namespace DownloadObjects
|
|||||||
With TP_DATA
|
With TP_DATA
|
||||||
If .Controls.Count > 0 Then
|
If .Controls.Count > 0 Then
|
||||||
Dim w% = GetWidth()
|
Dim w% = GetWidth()
|
||||||
|
Dim h% = GetHeight()
|
||||||
Dim p As TableLayoutPanelCellPosition
|
Dim p As TableLayoutPanelCellPosition
|
||||||
Dim rh As New Dictionary(Of Integer, List(Of Integer))
|
Dim rh As New Dictionary(Of Integer, List(Of Integer))
|
||||||
For Each cnt As FeedMedia In .Controls
|
For Each cnt As FeedMedia In .Controls
|
||||||
cnt.Width = w
|
cnt.RerenderObject(w, h)
|
||||||
p = .GetCellPosition(cnt)
|
p = .GetCellPosition(cnt)
|
||||||
If Not rh.ContainsKey(p.Row) Then rh.Add(p.Row, New List(Of Integer))
|
If Not rh.ContainsKey(p.Row) Then rh.Add(p.Row, New List(Of Integer))
|
||||||
rh(p.Row).Add(cnt.Height)
|
rh(p.Row).Add(cnt.Height)
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
'
|
'
|
||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
'Imports System.Windows.Forms.PropertyGridInternal
|
|
||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
@@ -30,19 +29,19 @@ Namespace DownloadObjects
|
|||||||
End Property
|
End Property
|
||||||
Friend ReadOnly Property HasError As Boolean
|
Friend ReadOnly Property HasError As Boolean
|
||||||
Friend ReadOnly File As SFile
|
Friend ReadOnly File As SFile
|
||||||
Public Shadows Property Width As Integer
|
Public Shadows Property Width(Optional ByVal UpdateImage As Boolean = True) As Integer
|
||||||
Get
|
Get
|
||||||
Return MyBase.Width
|
Return MyBase.Width
|
||||||
End Get
|
End Get
|
||||||
Set(ByVal w As Integer)
|
Set(ByVal w As Integer)
|
||||||
If Size.Width <> w Then
|
If Size.Width <> w Then
|
||||||
Dim s As New Size(w, If(MyImage Is Nothing, VideoHeight, MyImage.FitToWidthF(w).Height))
|
Dim s As New Size(w, If(MyImage Is Nothing, VideoHeight, If(UpdateImage, MyImage.FitToWidthF(w).Height, MyPicture.Height)))
|
||||||
Dim objSize As Size = s
|
Dim objSize As Size = s
|
||||||
objSize.Height += (TP_MAIN.RowStyles(0).Height + PaddingE.GetOf({TP_MAIN}).Vertical(2))
|
objSize.Height += ObjectsPaddingHeight
|
||||||
MinimumSize = objSize
|
MinimumSize = objSize
|
||||||
MyBase.MaximumSize = objSize
|
MyBase.MaximumSize = objSize
|
||||||
Size = objSize
|
Size = objSize
|
||||||
If Not MyImage Is Nothing Then
|
If UpdateImage AndAlso Not MyImage Is Nothing Then
|
||||||
With MyPicture
|
With MyPicture
|
||||||
.MinimumSize = Nothing
|
.MinimumSize = Nothing
|
||||||
.MaximumSize = Nothing
|
.MaximumSize = Nothing
|
||||||
@@ -54,6 +53,11 @@ Namespace DownloadObjects
|
|||||||
End If
|
End If
|
||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
|
Private ReadOnly Property ObjectsPaddingHeight
|
||||||
|
Get
|
||||||
|
Return TP_MAIN.RowStyles(0).Height + PaddingE.GetOf({TP_MAIN}).Vertical(2)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
Private ReadOnly UserKey As String
|
Private ReadOnly UserKey As String
|
||||||
Private ReadOnly Post As UserMedia
|
Private ReadOnly Post As UserMedia
|
||||||
Friend ReadOnly Property Checked As Boolean
|
Friend ReadOnly Property Checked As Boolean
|
||||||
@@ -62,12 +66,56 @@ Namespace DownloadObjects
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend ReadOnly Property Information As String
|
Friend ReadOnly Property Information As String
|
||||||
|
Private Function GetImageResize(ByVal Width As Integer, ByVal Height As Integer) As Size
|
||||||
|
If Height > 0 Then
|
||||||
|
Dim h% = Height = ObjectsPaddingHeight
|
||||||
|
If h <= 0 Then h = Height
|
||||||
|
Dim s As Size = MyImage.FitToHeightF(h)
|
||||||
|
s = MyImage.FitToWidthF(s, Width, False)
|
||||||
|
If s.Height > MyImage.Height Then s = MyImage.Size
|
||||||
|
Return s
|
||||||
|
Else
|
||||||
|
Return MyImage.FitToWidthF(Width)
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Friend Sub RerenderObject(ByVal Width As Integer, ByVal Height As Integer)
|
||||||
|
If Not MyImage Is Nothing Then
|
||||||
|
Dim s As Size
|
||||||
|
If Height > 0 Then
|
||||||
|
s = GetImageResize(Width, Height)
|
||||||
|
With MyPicture
|
||||||
|
.MinimumSize = Nothing
|
||||||
|
.MaximumSize = Nothing
|
||||||
|
.Size = s
|
||||||
|
.MinimumSize = s
|
||||||
|
.MaximumSize = s
|
||||||
|
.Anchor = AnchorStyles.Top
|
||||||
|
End With
|
||||||
|
Me.Width(False) = Width
|
||||||
|
Else
|
||||||
|
Me.Width = Width
|
||||||
|
MyPicture.Anchor = AnchorStyles.Left + AnchorStyles.Top
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Me.Width = Width
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub ApplyColors()
|
||||||
|
If Settings.FeedBackColor.Exists Then
|
||||||
|
BackColor = Settings.FeedBackColor
|
||||||
|
LBL_INFO.BackColor = Settings.FeedBackColor
|
||||||
|
End If
|
||||||
|
If Settings.FeedForeColor.Exists Then
|
||||||
|
ForeColor = Settings.FeedForeColor
|
||||||
|
LBL_INFO.ForeColor = Settings.FeedForeColor
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Initializers"
|
#Region "Initializers"
|
||||||
Public Sub New()
|
Public Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub New(ByVal Media As UserMediaD, ByVal Width As Integer, ByVal Handler As MediaDeletedEventHandler)
|
Friend Sub New(ByVal Media As UserMediaD, ByVal Width As Integer, ByVal Height As Integer, ByVal Handler As MediaDeletedEventHandler)
|
||||||
Try
|
Try
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
File = Media.Data.File
|
File = Media.Data.File
|
||||||
@@ -93,14 +141,15 @@ Namespace DownloadObjects
|
|||||||
Select Case Media.Data.Type
|
Select Case Media.Data.Type
|
||||||
Case UserMedia.Types.Picture, UserMedia.Types.GIF
|
Case UserMedia.Types.Picture, UserMedia.Types.GIF
|
||||||
MyImage = New ImageRenderer(File)
|
MyImage = New ImageRenderer(File)
|
||||||
s = MyImage.FitToWidthF(Width)
|
Dim a As AnchorStyles = AnchorStyles.Top + If(Height > 0, 0, AnchorStyles.Left)
|
||||||
|
s = GetImageResize(Width, Height)
|
||||||
h = s.Height
|
h = s.Height
|
||||||
MyPicture = New PictureBox With {
|
MyPicture = New PictureBox With {
|
||||||
.SizeMode = PictureBoxSizeMode.Zoom,
|
.SizeMode = PictureBoxSizeMode.Zoom,
|
||||||
.Image = MyImage,
|
.Image = MyImage,
|
||||||
.InitialImage = .Image,
|
.InitialImage = .Image,
|
||||||
.Dock = DockStyle.None,
|
.Dock = DockStyle.None,
|
||||||
.Anchor = AnchorStyles.Left + AnchorStyles.Top,
|
.Anchor = a,
|
||||||
.Size = s,
|
.Size = s,
|
||||||
.MinimumSize = s,
|
.MinimumSize = s,
|
||||||
.MaximumSize = s,
|
.MaximumSize = s,
|
||||||
@@ -142,11 +191,11 @@ Namespace DownloadObjects
|
|||||||
If Settings.FeedAddDateToCaption Then info &= $" ({Media.Date.ToStringDate(ADateTime.Formats.BaseDateTime)})"
|
If Settings.FeedAddDateToCaption Then info &= $" ({Media.Date.ToStringDate(ADateTime.Formats.BaseDateTime)})"
|
||||||
LBL_INFO.Text = info
|
LBL_INFO.Text = info
|
||||||
|
|
||||||
s = New Size(Width, h + TP_MAIN.RowStyles(0).Height + PaddingE.GetOf({TP_MAIN}).Vertical(2))
|
s = New Size(Width, h + ObjectsPaddingHeight)
|
||||||
Size = s
|
Size = s
|
||||||
MinimumSize = s
|
MinimumSize = s
|
||||||
MaximumSize = s
|
MaximumSize = s
|
||||||
|
ApplyColors()
|
||||||
If Not Handler Is Nothing Then AddHandler Me.MediaDeleted, Handler
|
If Not Handler Is Nothing Then AddHandler Me.MediaDeleted, Handler
|
||||||
Else
|
Else
|
||||||
Throw New ArgumentNullException With {.HelpLink = 1}
|
Throw New ArgumentNullException With {.HelpLink = 1}
|
||||||
|
|||||||
@@ -90,18 +90,7 @@ Namespace DownloadObjects.Groups
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Sub New(ByVal e As EContainer)
|
Friend Sub New(ByVal e As EContainer)
|
||||||
Me.New
|
Me.New
|
||||||
If e.Attributes.Contains(New EAttribute(Name_Name)) Then
|
Import(e)
|
||||||
'TODELETE: 2022.10.18.0
|
|
||||||
NeedToSave = True
|
|
||||||
Name = e.Attribute(Name_Name)
|
|
||||||
Temporary = e.Attribute(Name_Temporary).Value.FromXML(Of Integer)(CInt(CheckState.Indeterminate))
|
|
||||||
Favorite = e.Attribute(Name_Favorite).Value.FromXML(Of Integer)(CInt(CheckState.Indeterminate))
|
|
||||||
ReadyForDownload = e.Attribute(Name_ReadyForDownload).Value.FromXML(Of Boolean)(True)
|
|
||||||
ReadyForDownloadIgnore = e.Attribute(Name_ReadyForDownloadIgnore).Value.FromXML(Of Boolean)(False)
|
|
||||||
If Not e.Value.IsEmptyString Then Labels.ListAddList(e.Value.Split("|"), LAP.NotContainsOnly)
|
|
||||||
Else
|
|
||||||
Import(e)
|
|
||||||
End If
|
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "ToString"
|
#Region "ToString"
|
||||||
|
|||||||
@@ -34,9 +34,6 @@ Namespace DownloadObjects.Groups
|
|||||||
End If
|
End If
|
||||||
GroupsList.ListReindex
|
GroupsList.ListReindex
|
||||||
End Sub
|
End Sub
|
||||||
Friend Function GetLabels() As List(Of String)
|
|
||||||
Return ListAddList(Nothing, GroupsList.SelectMany(Function(g) g.Labels), LAP.NotContainsOnly)
|
|
||||||
End Function
|
|
||||||
Default Friend ReadOnly Property Item(ByVal Index As Integer) As DownloadGroup Implements IMyEnumerator(Of DownloadGroup).MyEnumeratorObject
|
Default Friend ReadOnly Property Item(ByVal Index As Integer) As DownloadGroup Implements IMyEnumerator(Of DownloadGroup).MyEnumeratorObject
|
||||||
Get
|
Get
|
||||||
Return GroupsList(Index)
|
Return GroupsList(Index)
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ Namespace DownloadObjects.Groups
|
|||||||
Select Case Sender.DefaultButton
|
Select Case Sender.DefaultButton
|
||||||
Case ADB.Edit, ADB.Delete
|
Case ADB.Edit, ADB.Delete
|
||||||
With If(Sender.DefaultButton = ADB.Edit, Labels, LabelsExcluded)
|
With If(Sender.DefaultButton = ADB.Edit, Labels, LabelsExcluded)
|
||||||
Using f As New LabelsForm(.ListSelf, True)
|
Using f As New LabelsForm(.Self, True)
|
||||||
If Sender.DefaultButton = ADB.Delete Then f.Text &= " excluded"
|
If Sender.DefaultButton = ADB.Delete Then f.Text &= " excluded"
|
||||||
f.ShowDialog()
|
f.ShowDialog()
|
||||||
If f.DialogResult = DialogResult.OK Then
|
If f.DialogResult = DialogResult.OK Then
|
||||||
@@ -133,11 +133,11 @@ Namespace DownloadObjects.Groups
|
|||||||
Select Case Sender.DefaultButton
|
Select Case Sender.DefaultButton
|
||||||
Case ADB.Edit, ADB.Delete
|
Case ADB.Edit, ADB.Delete
|
||||||
With If(Sender.DefaultButton = ADB.Edit, Sites, SitesExcluded)
|
With If(Sender.DefaultButton = ADB.Edit, Sites, SitesExcluded)
|
||||||
Using f As New Editors.SiteSelectionForm(.ListSelf)
|
Using f As New Editors.SiteSelectionForm(.Self)
|
||||||
If Sender.DefaultButton = ADB.Delete Then f.Text &= " excluded"
|
If Sender.DefaultButton = ADB.Delete Then f.Text &= " excluded"
|
||||||
f.ShowDialog()
|
f.ShowDialog()
|
||||||
If f.DialogResult = DialogResult.OK Then
|
If f.DialogResult = DialogResult.OK Then
|
||||||
.AsList.ListAddList(f.SelectedSites, LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
.Self.ListAddList(f.SelectedSites, LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
||||||
UpdateSitesText()
|
UpdateSitesText()
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ Namespace DownloadObjects
|
|||||||
If Not u.Name.IsEmptyString And Not u.Site.IsEmptyString Then User = Settings.GetUser(u)
|
If Not u.Name.IsEmptyString And Not u.Site.IsEmptyString Then User = Settings.GetUser(u)
|
||||||
End If
|
End If
|
||||||
Data = New UserMedia(e(Name_Media), User)
|
Data = New UserMedia(e(Name_Media), User)
|
||||||
[Date] = AConvert(Of Date)(e.Value(Name_Date), ParsersDataDateProvider, Now)
|
[Date] = AConvert(Of Date)(e.Value(Name_Date), DateTimeDefaultProvider, Now)
|
||||||
Session = e.Value(Name_Session).FromXML(Of Integer)(0)
|
Session = e.Value(Name_Session).FromXML(Of Integer)(0)
|
||||||
Dim f As SFile = e.Value(Name_File)
|
Dim f As SFile = e.Value(Name_File)
|
||||||
If f.Exists Then Data.File = f
|
If f.Exists Then Data.File = f
|
||||||
@@ -78,7 +78,7 @@ Namespace DownloadObjects
|
|||||||
Friend Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer
|
Friend Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer
|
||||||
Return ListAddValue(New EContainer(Name_Data, String.Empty) From {
|
Return ListAddValue(New EContainer(Name_Data, String.Empty) From {
|
||||||
Data.ToEContainer,
|
Data.ToEContainer,
|
||||||
New EContainer(Name_Date, AConvert(Of String)([Date], ParsersDataDateProvider, String.Empty)),
|
New EContainer(Name_Date, AConvert(Of String)([Date], DateTimeDefaultProvider, String.Empty)),
|
||||||
New EContainer(Name_Session, Session),
|
New EContainer(Name_Session, Session),
|
||||||
New EContainer(Name_File, Data.File)},
|
New EContainer(Name_File, Data.File)},
|
||||||
If(Not User Is Nothing, DirectCast(User, UserDataBase).User.ToEContainer, Nothing), LAP.IgnoreICopier)
|
If(Not User Is Nothing, DirectCast(User, UserDataBase).User.ToEContainer, Nothing), LAP.IgnoreICopier)
|
||||||
|
|||||||
@@ -151,10 +151,10 @@ Namespace DownloadObjects
|
|||||||
Me.Controls.Add(Me.LIST_VIDEOS)
|
Me.Controls.Add(Me.LIST_VIDEOS)
|
||||||
Me.Controls.Add(Me.ToolbarBOTTOM)
|
Me.Controls.Add(Me.ToolbarBOTTOM)
|
||||||
Me.Controls.Add(Me.ToolbarTOP)
|
Me.Controls.Add(Me.ToolbarTOP)
|
||||||
|
Me.Icon = Global.SCrawler.My.Resources.Resources.ArrowDownIcon_Blue_24
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MinimumSize = New System.Drawing.Size(540, 400)
|
Me.MinimumSize = New System.Drawing.Size(540, 400)
|
||||||
Me.Name = "VideosDownloaderForm"
|
Me.Name = "VideosDownloaderForm"
|
||||||
Me.ShowIcon = False
|
|
||||||
Me.Text = "Download videos"
|
Me.Text = "Download videos"
|
||||||
Me.ToolbarTOP.ResumeLayout(False)
|
Me.ToolbarTOP.ResumeLayout(False)
|
||||||
Me.ToolbarTOP.PerformLayout()
|
Me.ToolbarTOP.PerformLayout()
|
||||||
|
|||||||
141
SCrawler/Editors/ColorPicker.Designer.vb
generated
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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 Public Class ColorPicker : Inherits System.Windows.Forms.UserControl
|
||||||
|
<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()
|
||||||
|
Me.components = New System.ComponentModel.Container()
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ColorPicker))
|
||||||
|
Dim TT_MAIN As System.Windows.Forms.ToolTip
|
||||||
|
Me.TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
Me.LBL_CAPTION = New System.Windows.Forms.Label()
|
||||||
|
Me.LBL_COLORS = New System.Windows.Forms.Label()
|
||||||
|
Me.BTT_COLORS_FORE = New System.Windows.Forms.Button()
|
||||||
|
Me.BTT_COLORS_BACK = New System.Windows.Forms.Button()
|
||||||
|
Me.BTT_COLORS_CLEAR = New System.Windows.Forms.Button()
|
||||||
|
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
|
||||||
|
Me.TP_MAIN.SuspendLayout()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'TP_MAIN
|
||||||
|
'
|
||||||
|
Me.TP_MAIN.ColumnCount = 5
|
||||||
|
Me.TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 105.0!))
|
||||||
|
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, 22.0!))
|
||||||
|
Me.TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 22.0!))
|
||||||
|
Me.TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 22.0!))
|
||||||
|
Me.TP_MAIN.Controls.Add(Me.LBL_CAPTION, 0, 0)
|
||||||
|
Me.TP_MAIN.Controls.Add(Me.LBL_COLORS, 1, 0)
|
||||||
|
Me.TP_MAIN.Controls.Add(Me.BTT_COLORS_FORE, 2, 0)
|
||||||
|
Me.TP_MAIN.Controls.Add(Me.BTT_COLORS_BACK, 3, 0)
|
||||||
|
Me.TP_MAIN.Controls.Add(Me.BTT_COLORS_CLEAR, 4, 0)
|
||||||
|
Me.TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
|
Me.TP_MAIN.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
Me.TP_MAIN.Name = "TP_MAIN"
|
||||||
|
Me.TP_MAIN.RowCount = 1
|
||||||
|
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
Me.TP_MAIN.Size = New System.Drawing.Size(340, 28)
|
||||||
|
Me.TP_MAIN.TabIndex = 3
|
||||||
|
'
|
||||||
|
'LBL_CAPTION
|
||||||
|
'
|
||||||
|
Me.LBL_CAPTION.AutoSize = True
|
||||||
|
Me.LBL_CAPTION.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LBL_CAPTION.Location = New System.Drawing.Point(3, 0)
|
||||||
|
Me.LBL_CAPTION.Name = "LBL_CAPTION"
|
||||||
|
Me.LBL_CAPTION.Size = New System.Drawing.Size(99, 28)
|
||||||
|
Me.LBL_CAPTION.TabIndex = 0
|
||||||
|
Me.LBL_CAPTION.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
'
|
||||||
|
'LBL_COLORS
|
||||||
|
'
|
||||||
|
Me.LBL_COLORS.AutoSize = True
|
||||||
|
Me.LBL_COLORS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LBL_COLORS.Location = New System.Drawing.Point(108, 3)
|
||||||
|
Me.LBL_COLORS.Margin = New System.Windows.Forms.Padding(3)
|
||||||
|
Me.LBL_COLORS.Name = "LBL_COLORS"
|
||||||
|
Me.LBL_COLORS.Size = New System.Drawing.Size(163, 22)
|
||||||
|
Me.LBL_COLORS.TabIndex = 1
|
||||||
|
Me.LBL_COLORS.Text = "Here's what it looks like."
|
||||||
|
Me.LBL_COLORS.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
|
||||||
|
'
|
||||||
|
'BTT_COLORS_FORE
|
||||||
|
'
|
||||||
|
Me.BTT_COLORS_FORE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.BTT_COLORS_FORE.Location = New System.Drawing.Point(276, 2)
|
||||||
|
Me.BTT_COLORS_FORE.Margin = New System.Windows.Forms.Padding(2)
|
||||||
|
Me.BTT_COLORS_FORE.Name = "BTT_COLORS_FORE"
|
||||||
|
Me.BTT_COLORS_FORE.Size = New System.Drawing.Size(18, 24)
|
||||||
|
Me.BTT_COLORS_FORE.TabIndex = 2
|
||||||
|
Me.BTT_COLORS_FORE.Tag = "F"
|
||||||
|
Me.BTT_COLORS_FORE.Text = "F"
|
||||||
|
TT_MAIN.SetToolTip(Me.BTT_COLORS_FORE, "Font color")
|
||||||
|
Me.BTT_COLORS_FORE.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'BTT_COLORS_BACK
|
||||||
|
'
|
||||||
|
Me.BTT_COLORS_BACK.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.BTT_COLORS_BACK.Location = New System.Drawing.Point(298, 2)
|
||||||
|
Me.BTT_COLORS_BACK.Margin = New System.Windows.Forms.Padding(2)
|
||||||
|
Me.BTT_COLORS_BACK.Name = "BTT_COLORS_BACK"
|
||||||
|
Me.BTT_COLORS_BACK.Size = New System.Drawing.Size(18, 24)
|
||||||
|
Me.BTT_COLORS_BACK.TabIndex = 3
|
||||||
|
Me.BTT_COLORS_BACK.Tag = "C"
|
||||||
|
Me.BTT_COLORS_BACK.Text = "C"
|
||||||
|
TT_MAIN.SetToolTip(Me.BTT_COLORS_BACK, "Back color")
|
||||||
|
Me.BTT_COLORS_BACK.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'BTT_COLORS_CLEAR
|
||||||
|
'
|
||||||
|
Me.BTT_COLORS_CLEAR.BackgroundImage = CType(resources.GetObject("BTT_COLORS_CLEAR.BackgroundImage"), System.Drawing.Image)
|
||||||
|
Me.BTT_COLORS_CLEAR.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom
|
||||||
|
Me.BTT_COLORS_CLEAR.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.BTT_COLORS_CLEAR.Location = New System.Drawing.Point(320, 2)
|
||||||
|
Me.BTT_COLORS_CLEAR.Margin = New System.Windows.Forms.Padding(2)
|
||||||
|
Me.BTT_COLORS_CLEAR.Name = "BTT_COLORS_CLEAR"
|
||||||
|
Me.BTT_COLORS_CLEAR.Size = New System.Drawing.Size(18, 24)
|
||||||
|
Me.BTT_COLORS_CLEAR.TabIndex = 4
|
||||||
|
Me.BTT_COLORS_CLEAR.Tag = "D"
|
||||||
|
TT_MAIN.SetToolTip(Me.BTT_COLORS_CLEAR, "Reset")
|
||||||
|
Me.BTT_COLORS_CLEAR.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'ColorPicker
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.Controls.Add(Me.TP_MAIN)
|
||||||
|
Me.Name = "ColorPicker"
|
||||||
|
Me.Size = New System.Drawing.Size(340, 28)
|
||||||
|
Me.TP_MAIN.ResumeLayout(False)
|
||||||
|
Me.TP_MAIN.PerformLayout()
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
Private WithEvents LBL_COLORS As Label
|
||||||
|
Private WithEvents BTT_COLORS_FORE As Button
|
||||||
|
Private WithEvents BTT_COLORS_BACK As Button
|
||||||
|
Private WithEvents BTT_COLORS_CLEAR As Button
|
||||||
|
Private WithEvents TP_MAIN As TableLayoutPanel
|
||||||
|
Private WithEvents LBL_CAPTION As Label
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
135
SCrawler/Editors/ColorPicker.resx
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
<?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="TT_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="BTT_COLORS_CLEAR.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>
|
||||||
|
</root>
|
||||||
113
SCrawler/Editors/ColorPicker.vb
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' 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 System.ComponentModel
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
|
Namespace Editors
|
||||||
|
Public Class ColorPicker : Implements IChangeDetectorCompatible
|
||||||
|
Private Event DataChanged As EventHandler Implements IChangeDetectorCompatible.DataChanged
|
||||||
|
Public Sub New()
|
||||||
|
InitializeComponent()
|
||||||
|
End Sub
|
||||||
|
#Region "Appearance"
|
||||||
|
<Category("Appearance2"), DefaultValue(105)>
|
||||||
|
Public Property CaptionWidth As Integer
|
||||||
|
Get
|
||||||
|
Return TP_MAIN.ColumnStyles(0).Width
|
||||||
|
End Get
|
||||||
|
Set(ByVal w As Integer)
|
||||||
|
TP_MAIN.ColumnStyles(0).Width = w
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Private ReadOnly ButtonsMarginDefault As New Padding(2)
|
||||||
|
<Category("Appearance2")>
|
||||||
|
Public Property ButtonsMargin As Padding
|
||||||
|
Get
|
||||||
|
Return BTT_COLORS_CLEAR.Margin
|
||||||
|
End Get
|
||||||
|
Set(ByVal m As Padding)
|
||||||
|
BTT_COLORS_BACK.Margin = m
|
||||||
|
BTT_COLORS_FORE.Margin = m
|
||||||
|
BTT_COLORS_CLEAR.Margin = m
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Private Function ShouldSerializeButtonsMargin() As Boolean
|
||||||
|
Return Not ButtonsMargin.Equals(ButtonsMarginDefault)
|
||||||
|
End Function
|
||||||
|
Private Sub ResetButtonsMargin()
|
||||||
|
ButtonsMargin = ButtonsMarginDefault
|
||||||
|
End Sub
|
||||||
|
<Category("Appearance2"), DefaultValue("")>
|
||||||
|
Public Property CaptionText As String
|
||||||
|
Get
|
||||||
|
Return LBL_CAPTION.Text
|
||||||
|
End Get
|
||||||
|
Set(ByVal t As String)
|
||||||
|
LBL_CAPTION.Text = t
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "Colors"
|
||||||
|
Private BackColorDefault As Color = DefaultBackColor
|
||||||
|
Private _BackColorImpl As Color? = Nothing
|
||||||
|
Private Property BackColorImpl As Color?
|
||||||
|
Get
|
||||||
|
Return _BackColorImpl
|
||||||
|
End Get
|
||||||
|
Set(ByVal c As Color?)
|
||||||
|
_BackColorImpl = c
|
||||||
|
If _BackColorImpl.HasValue Then LBL_COLORS.BackColor = _BackColorImpl.Value Else LBL_COLORS.BackColor = BackColorDefault
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Private ForeColorDefault As Color = DefaultForeColor
|
||||||
|
Private _ForeColorImpl As Color? = Nothing
|
||||||
|
Private Property ForeColorImpl As Color?
|
||||||
|
Get
|
||||||
|
Return _ForeColorImpl
|
||||||
|
End Get
|
||||||
|
Set(ByVal c As Color?)
|
||||||
|
_ForeColorImpl = c
|
||||||
|
If _ForeColorImpl.HasValue Then LBL_COLORS.ForeColor = _ForeColorImpl.Value Else LBL_COLORS.ForeColor = ForeColorDefault
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "Get, Set"
|
||||||
|
Friend Sub ColorsSet(ByVal b As XMLValue(Of Color), ByVal f As XMLValue(Of Color), ByVal bDefault As Color, ByVal fDefault As Color)
|
||||||
|
BackColorDefault = bDefault
|
||||||
|
If b.Exists Then
|
||||||
|
BackColorImpl = b.Value
|
||||||
|
Else
|
||||||
|
BackColorImpl = Nothing
|
||||||
|
End If
|
||||||
|
ForeColorDefault = fDefault
|
||||||
|
If f.Exists Then
|
||||||
|
ForeColorImpl = f.Value
|
||||||
|
Else
|
||||||
|
ForeColorImpl = Nothing
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Friend Sub ColorsGet(ByRef b As XMLValue(Of Color), ByRef f As XMLValue(Of Color))
|
||||||
|
If BackColorImpl.HasValue Then b.Value = BackColorImpl.Value Else b.ValueF = Nothing
|
||||||
|
If ForeColorImpl.HasValue Then f.Value = ForeColorImpl.Value Else f.ValueF = Nothing
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Buttons handlers"
|
||||||
|
Private Sub COLOR_BUTTONS_Click(ByVal Sender As Button, ByVal e As EventArgs) Handles BTT_COLORS_BACK.Click,
|
||||||
|
BTT_COLORS_FORE.Click,
|
||||||
|
BTT_COLORS_CLEAR.Click
|
||||||
|
Select Case CStr(Sender.Tag)
|
||||||
|
Case "F" : ForeColorImpl = AFontColor.SelectNewColor(ForeColorImpl, EDP.ReturnValue)
|
||||||
|
Case "C" : BackColorImpl = AFontColor.SelectNewColor(BackColorImpl, EDP.ReturnValue)
|
||||||
|
Case "D" : BackColorImpl = Nothing : ForeColorImpl = Nothing
|
||||||
|
End Select
|
||||||
|
RaiseEvent DataChanged(Me, Nothing)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
314
SCrawler/Editors/GlobalSettingsForm.Designer.vb
generated
@@ -32,6 +32,10 @@ Namespace Editors
|
|||||||
Dim ActionButton4 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 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 ActionButton6 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim ActionButton8 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim ActionButton9 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim ActionButton10 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim TP_FILE_NAME As System.Windows.Forms.TableLayoutPanel
|
Dim TP_FILE_NAME As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim TP_FILE_PATTERNS As System.Windows.Forms.TableLayoutPanel
|
Dim TP_FILE_PATTERNS As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim LBL_DATE_POS As System.Windows.Forms.Label
|
Dim LBL_DATE_POS As System.Windows.Forms.Label
|
||||||
@@ -44,14 +48,14 @@ Namespace Editors
|
|||||||
Dim TP_CHANNELS As System.Windows.Forms.TableLayoutPanel
|
Dim TP_CHANNELS As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim TAB_BEHAVIOR As System.Windows.Forms.TabPage
|
Dim TAB_BEHAVIOR As System.Windows.Forms.TabPage
|
||||||
Dim TP_BEHAVIOR As System.Windows.Forms.TableLayoutPanel
|
Dim TP_BEHAVIOR As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton11 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim ActionButton8 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton12 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim TP_OPEN_INFO As System.Windows.Forms.TableLayoutPanel
|
Dim TP_OPEN_INFO As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim TP_OPEN_PROGRESS As System.Windows.Forms.TableLayoutPanel
|
Dim TP_OPEN_PROGRESS As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim TAB_DOWN As System.Windows.Forms.TabPage
|
Dim TAB_DOWN As System.Windows.Forms.TabPage
|
||||||
Dim TP_DOWNLOADING As System.Windows.Forms.TableLayoutPanel
|
Dim TP_DOWNLOADING As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim ActionButton9 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton13 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim ActionButton10 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton14 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim TP_MISSING_DATA As System.Windows.Forms.TableLayoutPanel
|
Dim TP_MISSING_DATA As System.Windows.Forms.TableLayoutPanel
|
||||||
Dim TAB_FEED As System.Windows.Forms.TabPage
|
Dim TAB_FEED As System.Windows.Forms.TabPage
|
||||||
Dim TP_FEED As System.Windows.Forms.TableLayoutPanel
|
Dim TP_FEED As System.Windows.Forms.TableLayoutPanel
|
||||||
@@ -68,6 +72,9 @@ Namespace Editors
|
|||||||
Me.TXT_IMGUR_CLIENT_ID = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_IMGUR_CLIENT_ID = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.CH_SHOW_GROUPS = New System.Windows.Forms.CheckBox()
|
Me.CH_SHOW_GROUPS = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_USERS_GROUPING = New System.Windows.Forms.CheckBox()
|
Me.CH_USERS_GROUPING = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.TXT_USER_AGENT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.TXT_USER_LIST_IMAGE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.COLORS_USERLIST = New SCrawler.Editors.ColorPicker()
|
||||||
Me.OPT_FILE_NAME_REPLACE = New System.Windows.Forms.RadioButton()
|
Me.OPT_FILE_NAME_REPLACE = New System.Windows.Forms.RadioButton()
|
||||||
Me.OPT_FILE_NAME_ADD_DATE = New System.Windows.Forms.RadioButton()
|
Me.OPT_FILE_NAME_ADD_DATE = New System.Windows.Forms.RadioButton()
|
||||||
Me.CH_FILE_NAME_CHANGE = New System.Windows.Forms.CheckBox()
|
Me.CH_FILE_NAME_CHANGE = New System.Windows.Forms.CheckBox()
|
||||||
@@ -96,6 +103,7 @@ Namespace Editors
|
|||||||
Me.CH_NOTIFY_CHANNELS = New System.Windows.Forms.CheckBox()
|
Me.CH_NOTIFY_CHANNELS = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_NOTIFY_SAVED_POSTS = New System.Windows.Forms.CheckBox()
|
Me.CH_NOTIFY_SAVED_POSTS = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_DOWN_REPARSE_MISSING = New System.Windows.Forms.CheckBox()
|
Me.CH_DOWN_REPARSE_MISSING = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY = New System.Windows.Forms.CheckBox()
|
||||||
Me.TXT_CHANNELS_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_CHANNELS_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_CHANNELS_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_CHANNELS_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.CH_DOWN_IMAGES_NATIVE = New System.Windows.Forms.CheckBox()
|
Me.CH_DOWN_IMAGES_NATIVE = New System.Windows.Forms.CheckBox()
|
||||||
@@ -109,11 +117,14 @@ Namespace Editors
|
|||||||
Me.CH_DOWN_OPEN_PROGRESS = New System.Windows.Forms.CheckBox()
|
Me.CH_DOWN_OPEN_PROGRESS = New System.Windows.Forms.CheckBox()
|
||||||
Me.TXT_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_DOWN_COMPLETE_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.CH_UNAME_UP = New System.Windows.Forms.CheckBox()
|
||||||
Me.TXT_FEED_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_FEED_ROWS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_FEED_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_FEED_COLUMNS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.CH_FEED_ENDLESS = New System.Windows.Forms.CheckBox()
|
Me.CH_FEED_ENDLESS = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_FEED_ADD_SESSION = New System.Windows.Forms.CheckBox()
|
Me.CH_FEED_ADD_SESSION = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_FEED_ADD_DATE = New System.Windows.Forms.CheckBox()
|
Me.CH_FEED_ADD_DATE = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.COLORS_FEED = New SCrawler.Editors.ColorPicker()
|
||||||
Me.TAB_MAIN = New System.Windows.Forms.TabControl()
|
Me.TAB_MAIN = New System.Windows.Forms.TabControl()
|
||||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
TP_BASIS = New System.Windows.Forms.TableLayoutPanel()
|
TP_BASIS = New System.Windows.Forms.TableLayoutPanel()
|
||||||
@@ -149,6 +160,8 @@ Namespace Editors
|
|||||||
CType(Me.TXT_MAX_JOBS_USERS, 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_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.TXT_USER_AGENT, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.TXT_USER_LIST_IMAGE, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
TP_FILE_NAME.SuspendLayout()
|
TP_FILE_NAME.SuspendLayout()
|
||||||
TP_FILE_PATTERNS.SuspendLayout()
|
TP_FILE_PATTERNS.SuspendLayout()
|
||||||
TP_CHANNELS_IMGS.SuspendLayout()
|
TP_CHANNELS_IMGS.SuspendLayout()
|
||||||
@@ -176,6 +189,7 @@ Namespace Editors
|
|||||||
TP_FEED_IMG_COUNT.SuspendLayout()
|
TP_FEED_IMG_COUNT.SuspendLayout()
|
||||||
CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.TXT_FEED_CENTER_IMAGE, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
TAB_NOTIFY.SuspendLayout()
|
TAB_NOTIFY.SuspendLayout()
|
||||||
TP_NOTIFY_MAIN.SuspendLayout()
|
TP_NOTIFY_MAIN.SuspendLayout()
|
||||||
Me.TAB_MAIN.SuspendLayout()
|
Me.TAB_MAIN.SuspendLayout()
|
||||||
@@ -194,13 +208,16 @@ Namespace Editors
|
|||||||
TP_BASIS.Controls.Add(Me.TXT_MAX_JOBS_USERS, 0, 3)
|
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.TXT_MAX_JOBS_CHANNELS, 0, 4)
|
||||||
TP_BASIS.Controls.Add(Me.CH_CHECK_VER_START, 0, 5)
|
TP_BASIS.Controls.Add(Me.CH_CHECK_VER_START, 0, 5)
|
||||||
TP_BASIS.Controls.Add(Me.TXT_IMGUR_CLIENT_ID, 0, 6)
|
TP_BASIS.Controls.Add(Me.TXT_IMGUR_CLIENT_ID, 0, 7)
|
||||||
TP_BASIS.Controls.Add(Me.CH_SHOW_GROUPS, 0, 7)
|
TP_BASIS.Controls.Add(Me.CH_SHOW_GROUPS, 0, 10)
|
||||||
TP_BASIS.Controls.Add(Me.CH_USERS_GROUPING, 0, 8)
|
TP_BASIS.Controls.Add(Me.CH_USERS_GROUPING, 0, 11)
|
||||||
|
TP_BASIS.Controls.Add(Me.TXT_USER_AGENT, 0, 6)
|
||||||
|
TP_BASIS.Controls.Add(Me.TXT_USER_LIST_IMAGE, 0, 8)
|
||||||
|
TP_BASIS.Controls.Add(Me.COLORS_USERLIST, 0, 9)
|
||||||
TP_BASIS.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_BASIS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_BASIS.Location = New System.Drawing.Point(3, 3)
|
TP_BASIS.Location = New System.Drawing.Point(3, 3)
|
||||||
TP_BASIS.Name = "TP_BASIS"
|
TP_BASIS.Name = "TP_BASIS"
|
||||||
TP_BASIS.RowCount = 10
|
TP_BASIS.RowCount = 13
|
||||||
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, 28.0!))
|
||||||
@@ -208,10 +225,14 @@ Namespace Editors
|
|||||||
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, 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.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, 25.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, 25.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.Percent, 100.0!))
|
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_BASIS.Size = New System.Drawing.Size(570, 278)
|
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||||
|
TP_BASIS.Size = New System.Drawing.Size(570, 337)
|
||||||
TP_BASIS.TabIndex = 0
|
TP_BASIS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TXT_GLOBAL_PATH
|
'TXT_GLOBAL_PATH
|
||||||
@@ -350,19 +371,19 @@ Namespace Editors
|
|||||||
Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton6)
|
Me.TXT_IMGUR_CLIENT_ID.Buttons.Add(ActionButton6)
|
||||||
Me.TXT_IMGUR_CLIENT_ID.CaptionText = "Imgur Client ID"
|
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.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.TXT_IMGUR_CLIENT_ID.Location = New System.Drawing.Point(4, 175)
|
Me.TXT_IMGUR_CLIENT_ID.Location = New System.Drawing.Point(4, 204)
|
||||||
Me.TXT_IMGUR_CLIENT_ID.Name = "TXT_IMGUR_CLIENT_ID"
|
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.Size = New System.Drawing.Size(562, 22)
|
||||||
Me.TXT_IMGUR_CLIENT_ID.TabIndex = 6
|
Me.TXT_IMGUR_CLIENT_ID.TabIndex = 7
|
||||||
'
|
'
|
||||||
'CH_SHOW_GROUPS
|
'CH_SHOW_GROUPS
|
||||||
'
|
'
|
||||||
Me.CH_SHOW_GROUPS.AutoSize = True
|
Me.CH_SHOW_GROUPS.AutoSize = True
|
||||||
Me.CH_SHOW_GROUPS.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_SHOW_GROUPS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_SHOW_GROUPS.Location = New System.Drawing.Point(4, 204)
|
Me.CH_SHOW_GROUPS.Location = New System.Drawing.Point(4, 288)
|
||||||
Me.CH_SHOW_GROUPS.Name = "CH_SHOW_GROUPS"
|
Me.CH_SHOW_GROUPS.Name = "CH_SHOW_GROUPS"
|
||||||
Me.CH_SHOW_GROUPS.Size = New System.Drawing.Size(562, 19)
|
Me.CH_SHOW_GROUPS.Size = New System.Drawing.Size(562, 19)
|
||||||
Me.CH_SHOW_GROUPS.TabIndex = 7
|
Me.CH_SHOW_GROUPS.TabIndex = 10
|
||||||
Me.CH_SHOW_GROUPS.Text = "Show groups"
|
Me.CH_SHOW_GROUPS.Text = "Show groups"
|
||||||
TT_MAIN.SetToolTip(Me.CH_SHOW_GROUPS, "Grouping users by site")
|
TT_MAIN.SetToolTip(Me.CH_SHOW_GROUPS, "Grouping users by site")
|
||||||
Me.CH_SHOW_GROUPS.UseVisualStyleBackColor = True
|
Me.CH_SHOW_GROUPS.UseVisualStyleBackColor = True
|
||||||
@@ -371,14 +392,65 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.CH_USERS_GROUPING.AutoSize = True
|
Me.CH_USERS_GROUPING.AutoSize = True
|
||||||
Me.CH_USERS_GROUPING.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_USERS_GROUPING.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_USERS_GROUPING.Location = New System.Drawing.Point(4, 230)
|
Me.CH_USERS_GROUPING.Location = New System.Drawing.Point(4, 314)
|
||||||
Me.CH_USERS_GROUPING.Name = "CH_USERS_GROUPING"
|
Me.CH_USERS_GROUPING.Name = "CH_USERS_GROUPING"
|
||||||
Me.CH_USERS_GROUPING.Size = New System.Drawing.Size(562, 19)
|
Me.CH_USERS_GROUPING.Size = New System.Drawing.Size(562, 19)
|
||||||
Me.CH_USERS_GROUPING.TabIndex = 8
|
Me.CH_USERS_GROUPING.TabIndex = 11
|
||||||
Me.CH_USERS_GROUPING.Text = "Use user grouping"
|
Me.CH_USERS_GROUPING.Text = "Use user grouping"
|
||||||
TT_MAIN.SetToolTip(Me.CH_USERS_GROUPING, "Group users by groups and/or labels")
|
TT_MAIN.SetToolTip(Me.CH_USERS_GROUPING, "Group users by groups and/or labels")
|
||||||
Me.CH_USERS_GROUPING.UseVisualStyleBackColor = True
|
Me.CH_USERS_GROUPING.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'TXT_USER_AGENT
|
||||||
|
'
|
||||||
|
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton7.Name = "Refresh"
|
||||||
|
ActionButton7.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh
|
||||||
|
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton8.Name = "Clear"
|
||||||
|
ActionButton8.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear
|
||||||
|
Me.TXT_USER_AGENT.Buttons.Add(ActionButton7)
|
||||||
|
Me.TXT_USER_AGENT.Buttons.Add(ActionButton8)
|
||||||
|
Me.TXT_USER_AGENT.CaptionText = "UserAgent"
|
||||||
|
Me.TXT_USER_AGENT.CaptionToolTipEnabled = True
|
||||||
|
Me.TXT_USER_AGENT.CaptionToolTipText = "Default user agent to use in requests"
|
||||||
|
Me.TXT_USER_AGENT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_USER_AGENT.Location = New System.Drawing.Point(4, 175)
|
||||||
|
Me.TXT_USER_AGENT.Name = "TXT_USER_AGENT"
|
||||||
|
Me.TXT_USER_AGENT.Size = New System.Drawing.Size(562, 22)
|
||||||
|
Me.TXT_USER_AGENT.TabIndex = 6
|
||||||
|
'
|
||||||
|
'TXT_USER_LIST_IMAGE
|
||||||
|
'
|
||||||
|
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton9.Name = "Open"
|
||||||
|
ActionButton9.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Open
|
||||||
|
ActionButton10.BackgroundImage = CType(resources.GetObject("ActionButton10.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton10.Name = "Clear"
|
||||||
|
ActionButton10.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear
|
||||||
|
Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton9)
|
||||||
|
Me.TXT_USER_LIST_IMAGE.Buttons.Add(ActionButton10)
|
||||||
|
Me.TXT_USER_LIST_IMAGE.CaptionText = "Userlist image"
|
||||||
|
Me.TXT_USER_LIST_IMAGE.CaptionToolTipEnabled = True
|
||||||
|
Me.TXT_USER_LIST_IMAGE.CaptionToolTipText = "Background image for user list"
|
||||||
|
Me.TXT_USER_LIST_IMAGE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_USER_LIST_IMAGE.Location = New System.Drawing.Point(4, 233)
|
||||||
|
Me.TXT_USER_LIST_IMAGE.Name = "TXT_USER_LIST_IMAGE"
|
||||||
|
Me.TXT_USER_LIST_IMAGE.Size = New System.Drawing.Size(562, 22)
|
||||||
|
Me.TXT_USER_LIST_IMAGE.TabIndex = 8
|
||||||
|
'
|
||||||
|
'COLORS_USERLIST
|
||||||
|
'
|
||||||
|
Me.COLORS_USERLIST.ButtonsMargin = New System.Windows.Forms.Padding(1, 2, 1, 2)
|
||||||
|
Me.COLORS_USERLIST.CaptionText = "Userlist colors"
|
||||||
|
Me.COLORS_USERLIST.CaptionWidth = 103
|
||||||
|
Me.COLORS_USERLIST.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.COLORS_USERLIST.Location = New System.Drawing.Point(1, 259)
|
||||||
|
Me.COLORS_USERLIST.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
Me.COLORS_USERLIST.Name = "COLORS_USERLIST"
|
||||||
|
Me.COLORS_USERLIST.Padding = New System.Windows.Forms.Padding(0, 0, 2, 0)
|
||||||
|
Me.COLORS_USERLIST.Size = New System.Drawing.Size(568, 25)
|
||||||
|
Me.COLORS_USERLIST.TabIndex = 9
|
||||||
|
'
|
||||||
'TP_FILE_NAME
|
'TP_FILE_NAME
|
||||||
'
|
'
|
||||||
TP_FILE_NAME.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
TP_FILE_NAME.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
@@ -390,13 +462,13 @@ Namespace Editors
|
|||||||
TP_FILE_NAME.Controls.Add(Me.OPT_FILE_NAME_ADD_DATE, 2, 0)
|
TP_FILE_NAME.Controls.Add(Me.OPT_FILE_NAME_ADD_DATE, 2, 0)
|
||||||
TP_FILE_NAME.Controls.Add(Me.CH_FILE_NAME_CHANGE, 0, 0)
|
TP_FILE_NAME.Controls.Add(Me.CH_FILE_NAME_CHANGE, 0, 0)
|
||||||
TP_FILE_NAME.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_FILE_NAME.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_FILE_NAME.Location = New System.Drawing.Point(1, 27)
|
TP_FILE_NAME.Location = New System.Drawing.Point(1, 53)
|
||||||
TP_FILE_NAME.Margin = New System.Windows.Forms.Padding(0)
|
TP_FILE_NAME.Margin = New System.Windows.Forms.Padding(0)
|
||||||
TP_FILE_NAME.Name = "TP_FILE_NAME"
|
TP_FILE_NAME.Name = "TP_FILE_NAME"
|
||||||
TP_FILE_NAME.RowCount = 1
|
TP_FILE_NAME.RowCount = 1
|
||||||
TP_FILE_NAME.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_FILE_NAME.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_FILE_NAME.Size = New System.Drawing.Size(574, 30)
|
TP_FILE_NAME.Size = New System.Drawing.Size(574, 30)
|
||||||
TP_FILE_NAME.TabIndex = 1
|
TP_FILE_NAME.TabIndex = 2
|
||||||
'
|
'
|
||||||
'OPT_FILE_NAME_REPLACE
|
'OPT_FILE_NAME_REPLACE
|
||||||
'
|
'
|
||||||
@@ -448,14 +520,14 @@ Namespace Editors
|
|||||||
TP_FILE_PATTERNS.Controls.Add(Me.OPT_FILE_DATE_START, 3, 0)
|
TP_FILE_PATTERNS.Controls.Add(Me.OPT_FILE_DATE_START, 3, 0)
|
||||||
TP_FILE_PATTERNS.Controls.Add(Me.OPT_FILE_DATE_END, 4, 0)
|
TP_FILE_PATTERNS.Controls.Add(Me.OPT_FILE_DATE_END, 4, 0)
|
||||||
TP_FILE_PATTERNS.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_FILE_PATTERNS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_FILE_PATTERNS.Location = New System.Drawing.Point(1, 58)
|
TP_FILE_PATTERNS.Location = New System.Drawing.Point(1, 84)
|
||||||
TP_FILE_PATTERNS.Margin = New System.Windows.Forms.Padding(0)
|
TP_FILE_PATTERNS.Margin = New System.Windows.Forms.Padding(0)
|
||||||
TP_FILE_PATTERNS.Name = "TP_FILE_PATTERNS"
|
TP_FILE_PATTERNS.Name = "TP_FILE_PATTERNS"
|
||||||
TP_FILE_PATTERNS.RowCount = 1
|
TP_FILE_PATTERNS.RowCount = 1
|
||||||
TP_FILE_PATTERNS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_FILE_PATTERNS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_FILE_PATTERNS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29.0!))
|
TP_FILE_PATTERNS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29.0!))
|
||||||
TP_FILE_PATTERNS.Size = New System.Drawing.Size(574, 30)
|
TP_FILE_PATTERNS.Size = New System.Drawing.Size(574, 30)
|
||||||
TP_FILE_PATTERNS.TabIndex = 2
|
TP_FILE_PATTERNS.TabIndex = 3
|
||||||
'
|
'
|
||||||
'CH_FILE_DATE
|
'CH_FILE_DATE
|
||||||
'
|
'
|
||||||
@@ -676,10 +748,10 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.AutoSize = True
|
Me.CH_FEED_STORE_SESSION_DATA.AutoSize = True
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_FEED_STORE_SESSION_DATA.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.Location = New System.Drawing.Point(4, 111)
|
Me.CH_FEED_STORE_SESSION_DATA.Location = New System.Drawing.Point(4, 166)
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.Name = "CH_FEED_STORE_SESSION_DATA"
|
Me.CH_FEED_STORE_SESSION_DATA.Name = "CH_FEED_STORE_SESSION_DATA"
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.Size = New System.Drawing.Size(568, 19)
|
Me.CH_FEED_STORE_SESSION_DATA.Size = New System.Drawing.Size(568, 19)
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.TabIndex = 4
|
Me.CH_FEED_STORE_SESSION_DATA.TabIndex = 6
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.Text = "Store session data"
|
Me.CH_FEED_STORE_SESSION_DATA.Text = "Store session data"
|
||||||
TT_MAIN.SetToolTip(Me.CH_FEED_STORE_SESSION_DATA, "If checked, session data will be stored in an xml file.")
|
TT_MAIN.SetToolTip(Me.CH_FEED_STORE_SESSION_DATA, "If checked, session data will be stored in an xml file.")
|
||||||
Me.CH_FEED_STORE_SESSION_DATA.UseVisualStyleBackColor = True
|
Me.CH_FEED_STORE_SESSION_DATA.UseVisualStyleBackColor = True
|
||||||
@@ -762,15 +834,27 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.CH_DOWN_REPARSE_MISSING.AutoSize = True
|
Me.CH_DOWN_REPARSE_MISSING.AutoSize = True
|
||||||
Me.CH_DOWN_REPARSE_MISSING.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_DOWN_REPARSE_MISSING.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_DOWN_REPARSE_MISSING.Location = New System.Drawing.Point(4, 176)
|
Me.CH_DOWN_REPARSE_MISSING.Location = New System.Drawing.Point(4, 202)
|
||||||
Me.CH_DOWN_REPARSE_MISSING.Name = "CH_DOWN_REPARSE_MISSING"
|
Me.CH_DOWN_REPARSE_MISSING.Name = "CH_DOWN_REPARSE_MISSING"
|
||||||
Me.CH_DOWN_REPARSE_MISSING.Size = New System.Drawing.Size(568, 19)
|
Me.CH_DOWN_REPARSE_MISSING.Size = New System.Drawing.Size(568, 19)
|
||||||
Me.CH_DOWN_REPARSE_MISSING.TabIndex = 6
|
Me.CH_DOWN_REPARSE_MISSING.TabIndex = 7
|
||||||
Me.CH_DOWN_REPARSE_MISSING.Text = "Trying to download missing posts using regular download"
|
Me.CH_DOWN_REPARSE_MISSING.Text = "Trying to download missing posts using regular download"
|
||||||
TT_MAIN.SetToolTip(Me.CH_DOWN_REPARSE_MISSING, "If missing posts exist, the missing posts will attempt to be downloaded via user " &
|
TT_MAIN.SetToolTip(Me.CH_DOWN_REPARSE_MISSING, "If missing posts exist, the missing posts will attempt to be downloaded via user " &
|
||||||
"download")
|
"download")
|
||||||
Me.CH_DOWN_REPARSE_MISSING.UseVisualStyleBackColor = True
|
Me.CH_DOWN_REPARSE_MISSING.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'CH_NAME_SITE_FRIENDLY
|
||||||
|
'
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.AutoSize = True
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.Location = New System.Drawing.Point(4, 134)
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.Name = "CH_NAME_SITE_FRIENDLY"
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.Size = New System.Drawing.Size(562, 19)
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.TabIndex = 5
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.Text = "Use the site name as a friendly name"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_NAME_SITE_FRIENDLY, "Use the user's site name as a friendly name")
|
||||||
|
Me.CH_NAME_SITE_FRIENDLY.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
'TP_CHANNELS_IMGS
|
'TP_CHANNELS_IMGS
|
||||||
'
|
'
|
||||||
TP_CHANNELS_IMGS.ColumnCount = 2
|
TP_CHANNELS_IMGS.ColumnCount = 2
|
||||||
@@ -822,7 +906,7 @@ Namespace Editors
|
|||||||
TAB_BASIS.Location = New System.Drawing.Point(4, 22)
|
TAB_BASIS.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_BASIS.Name = "TAB_BASIS"
|
TAB_BASIS.Name = "TAB_BASIS"
|
||||||
TAB_BASIS.Padding = New System.Windows.Forms.Padding(3)
|
TAB_BASIS.Padding = New System.Windows.Forms.Padding(3)
|
||||||
TAB_BASIS.Size = New System.Drawing.Size(576, 284)
|
TAB_BASIS.Size = New System.Drawing.Size(576, 343)
|
||||||
TAB_BASIS.TabIndex = 0
|
TAB_BASIS.TabIndex = 0
|
||||||
TAB_BASIS.Text = "Basis"
|
TAB_BASIS.Text = "Basis"
|
||||||
'
|
'
|
||||||
@@ -832,7 +916,7 @@ Namespace Editors
|
|||||||
TAB_DEFAULTS.Location = New System.Drawing.Point(4, 22)
|
TAB_DEFAULTS.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_DEFAULTS.Name = "TAB_DEFAULTS"
|
TAB_DEFAULTS.Name = "TAB_DEFAULTS"
|
||||||
TAB_DEFAULTS.Padding = New System.Windows.Forms.Padding(3)
|
TAB_DEFAULTS.Padding = New System.Windows.Forms.Padding(3)
|
||||||
TAB_DEFAULTS.Size = New System.Drawing.Size(576, 284)
|
TAB_DEFAULTS.Size = New System.Drawing.Size(576, 486)
|
||||||
TAB_DEFAULTS.TabIndex = 1
|
TAB_DEFAULTS.TabIndex = 1
|
||||||
TAB_DEFAULTS.Text = "Defaults"
|
TAB_DEFAULTS.Text = "Defaults"
|
||||||
'
|
'
|
||||||
@@ -846,17 +930,19 @@ Namespace Editors
|
|||||||
TP_DEFS.Controls.Add(Me.CH_DOWN_IMAGES, 0, 2)
|
TP_DEFS.Controls.Add(Me.CH_DOWN_IMAGES, 0, 2)
|
||||||
TP_DEFS.Controls.Add(Me.CH_DEF_TEMP, 0, 1)
|
TP_DEFS.Controls.Add(Me.CH_DEF_TEMP, 0, 1)
|
||||||
TP_DEFS.Controls.Add(Me.CH_DOWN_IMAGES_NATIVE, 0, 4)
|
TP_DEFS.Controls.Add(Me.CH_DOWN_IMAGES_NATIVE, 0, 4)
|
||||||
|
TP_DEFS.Controls.Add(Me.CH_NAME_SITE_FRIENDLY, 0, 5)
|
||||||
TP_DEFS.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_DEFS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_DEFS.Location = New System.Drawing.Point(3, 3)
|
TP_DEFS.Location = New System.Drawing.Point(3, 3)
|
||||||
TP_DEFS.Name = "TP_DEFS"
|
TP_DEFS.Name = "TP_DEFS"
|
||||||
TP_DEFS.RowCount = 6
|
TP_DEFS.RowCount = 7
|
||||||
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_DEFS.Size = New System.Drawing.Size(570, 278)
|
TP_DEFS.Size = New System.Drawing.Size(570, 480)
|
||||||
TP_DEFS.TabIndex = 0
|
TP_DEFS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'CH_DOWN_IMAGES_NATIVE
|
'CH_DOWN_IMAGES_NATIVE
|
||||||
@@ -876,7 +962,7 @@ Namespace Editors
|
|||||||
TAB_DEFS_CHANNELS.Location = New System.Drawing.Point(4, 22)
|
TAB_DEFS_CHANNELS.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_DEFS_CHANNELS.Name = "TAB_DEFS_CHANNELS"
|
TAB_DEFS_CHANNELS.Name = "TAB_DEFS_CHANNELS"
|
||||||
TAB_DEFS_CHANNELS.Padding = New System.Windows.Forms.Padding(3)
|
TAB_DEFS_CHANNELS.Padding = New System.Windows.Forms.Padding(3)
|
||||||
TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(576, 284)
|
TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(576, 486)
|
||||||
TAB_DEFS_CHANNELS.TabIndex = 4
|
TAB_DEFS_CHANNELS.TabIndex = 4
|
||||||
TAB_DEFS_CHANNELS.Text = "Channels"
|
TAB_DEFS_CHANNELS.Text = "Channels"
|
||||||
'
|
'
|
||||||
@@ -900,7 +986,7 @@ Namespace Editors
|
|||||||
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_CHANNELS.Size = New System.Drawing.Size(570, 278)
|
TP_CHANNELS.Size = New System.Drawing.Size(570, 480)
|
||||||
TP_CHANNELS.TabIndex = 0
|
TP_CHANNELS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TXT_CHANNEL_USER_POST_LIMIT
|
'TXT_CHANNEL_USER_POST_LIMIT
|
||||||
@@ -928,7 +1014,7 @@ Namespace Editors
|
|||||||
TAB_BEHAVIOR.Controls.Add(TP_BEHAVIOR)
|
TAB_BEHAVIOR.Controls.Add(TP_BEHAVIOR)
|
||||||
TAB_BEHAVIOR.Location = New System.Drawing.Point(4, 22)
|
TAB_BEHAVIOR.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_BEHAVIOR.Name = "TAB_BEHAVIOR"
|
TAB_BEHAVIOR.Name = "TAB_BEHAVIOR"
|
||||||
TAB_BEHAVIOR.Size = New System.Drawing.Size(576, 284)
|
TAB_BEHAVIOR.Size = New System.Drawing.Size(576, 486)
|
||||||
TAB_BEHAVIOR.TabIndex = 5
|
TAB_BEHAVIOR.TabIndex = 5
|
||||||
TAB_BEHAVIOR.Text = "Behavior"
|
TAB_BEHAVIOR.Text = "Behavior"
|
||||||
'
|
'
|
||||||
@@ -959,17 +1045,17 @@ Namespace Editors
|
|||||||
TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
TP_BEHAVIOR.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||||
TP_BEHAVIOR.Size = New System.Drawing.Size(576, 284)
|
TP_BEHAVIOR.Size = New System.Drawing.Size(576, 486)
|
||||||
TP_BEHAVIOR.TabIndex = 0
|
TP_BEHAVIOR.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TXT_FOLDER_CMD
|
'TXT_FOLDER_CMD
|
||||||
'
|
'
|
||||||
Me.TXT_FOLDER_CMD.AutoShowClearButton = True
|
Me.TXT_FOLDER_CMD.AutoShowClearButton = True
|
||||||
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
ActionButton11.BackgroundImage = CType(resources.GetObject("ActionButton11.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton7.Enabled = False
|
ActionButton11.Enabled = False
|
||||||
ActionButton7.Name = "Clear"
|
ActionButton11.Name = "Clear"
|
||||||
ActionButton7.Visible = False
|
ActionButton11.Visible = False
|
||||||
Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton7)
|
Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton11)
|
||||||
Me.TXT_FOLDER_CMD.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
Me.TXT_FOLDER_CMD.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
||||||
Me.TXT_FOLDER_CMD.CaptionText = "Folder cmd"
|
Me.TXT_FOLDER_CMD.CaptionText = "Folder cmd"
|
||||||
Me.TXT_FOLDER_CMD.CaptionToolTipEnabled = True
|
Me.TXT_FOLDER_CMD.CaptionToolTipEnabled = True
|
||||||
@@ -1008,11 +1094,11 @@ Namespace Editors
|
|||||||
'TXT_CLOSE_SCRIPT
|
'TXT_CLOSE_SCRIPT
|
||||||
'
|
'
|
||||||
Me.TXT_CLOSE_SCRIPT.AutoShowClearButton = True
|
Me.TXT_CLOSE_SCRIPT.AutoShowClearButton = True
|
||||||
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
ActionButton12.BackgroundImage = CType(resources.GetObject("ActionButton12.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton8.Enabled = False
|
ActionButton12.Enabled = False
|
||||||
ActionButton8.Name = "Clear"
|
ActionButton12.Name = "Clear"
|
||||||
ActionButton8.Visible = False
|
ActionButton12.Visible = False
|
||||||
Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton8)
|
Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton12)
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
Me.TXT_CLOSE_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionText = "Close cmd"
|
Me.TXT_CLOSE_SCRIPT.CaptionText = "Close cmd"
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionToolTipEnabled = True
|
Me.TXT_CLOSE_SCRIPT.CaptionToolTipEnabled = True
|
||||||
@@ -1100,7 +1186,7 @@ Namespace Editors
|
|||||||
TAB_DOWN.Controls.Add(TP_DOWNLOADING)
|
TAB_DOWN.Controls.Add(TP_DOWNLOADING)
|
||||||
TAB_DOWN.Location = New System.Drawing.Point(4, 22)
|
TAB_DOWN.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_DOWN.Name = "TAB_DOWN"
|
TAB_DOWN.Name = "TAB_DOWN"
|
||||||
TAB_DOWN.Size = New System.Drawing.Size(576, 284)
|
TAB_DOWN.Size = New System.Drawing.Size(576, 486)
|
||||||
TAB_DOWN.TabIndex = 6
|
TAB_DOWN.TabIndex = 6
|
||||||
TAB_DOWN.Text = "Downloading"
|
TAB_DOWN.Text = "Downloading"
|
||||||
'
|
'
|
||||||
@@ -1109,17 +1195,19 @@ Namespace Editors
|
|||||||
TP_DOWNLOADING.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
TP_DOWNLOADING.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
TP_DOWNLOADING.ColumnCount = 1
|
TP_DOWNLOADING.ColumnCount = 1
|
||||||
TP_DOWNLOADING.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_DOWNLOADING.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_DOWNLOADING.Controls.Add(TP_FILE_NAME, 0, 1)
|
TP_DOWNLOADING.Controls.Add(TP_FILE_NAME, 0, 2)
|
||||||
TP_DOWNLOADING.Controls.Add(TP_FILE_PATTERNS, 0, 2)
|
TP_DOWNLOADING.Controls.Add(TP_FILE_PATTERNS, 0, 3)
|
||||||
TP_DOWNLOADING.Controls.Add(Me.TXT_SCRIPT, 0, 3)
|
TP_DOWNLOADING.Controls.Add(Me.TXT_SCRIPT, 0, 4)
|
||||||
TP_DOWNLOADING.Controls.Add(Me.CH_UDESCR_UP, 0, 0)
|
TP_DOWNLOADING.Controls.Add(Me.CH_UDESCR_UP, 0, 0)
|
||||||
TP_DOWNLOADING.Controls.Add(Me.TXT_DOWN_COMPLETE_SCRIPT, 0, 4)
|
TP_DOWNLOADING.Controls.Add(Me.TXT_DOWN_COMPLETE_SCRIPT, 0, 5)
|
||||||
TP_DOWNLOADING.Controls.Add(TP_MISSING_DATA, 0, 5)
|
TP_DOWNLOADING.Controls.Add(TP_MISSING_DATA, 0, 6)
|
||||||
TP_DOWNLOADING.Controls.Add(Me.CH_DOWN_REPARSE_MISSING, 0, 6)
|
TP_DOWNLOADING.Controls.Add(Me.CH_DOWN_REPARSE_MISSING, 0, 7)
|
||||||
|
TP_DOWNLOADING.Controls.Add(Me.CH_UNAME_UP, 0, 1)
|
||||||
TP_DOWNLOADING.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_DOWNLOADING.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_DOWNLOADING.Location = New System.Drawing.Point(0, 0)
|
TP_DOWNLOADING.Location = New System.Drawing.Point(0, 0)
|
||||||
TP_DOWNLOADING.Name = "TP_DOWNLOADING"
|
TP_DOWNLOADING.Name = "TP_DOWNLOADING"
|
||||||
TP_DOWNLOADING.RowCount = 8
|
TP_DOWNLOADING.RowCount = 9
|
||||||
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
|
||||||
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30.0!))
|
||||||
@@ -1128,17 +1216,17 @@ Namespace Editors
|
|||||||
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_DOWNLOADING.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_DOWNLOADING.Size = New System.Drawing.Size(576, 284)
|
TP_DOWNLOADING.Size = New System.Drawing.Size(576, 486)
|
||||||
TP_DOWNLOADING.TabIndex = 0
|
TP_DOWNLOADING.TabIndex = 1
|
||||||
'
|
'
|
||||||
'TXT_SCRIPT
|
'TXT_SCRIPT
|
||||||
'
|
'
|
||||||
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
ActionButton13.BackgroundImage = CType(resources.GetObject("ActionButton13.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton9.Name = "Open"
|
ActionButton13.Name = "Open"
|
||||||
ActionButton10.BackgroundImage = CType(resources.GetObject("ActionButton10.BackgroundImage"), System.Drawing.Image)
|
ActionButton14.BackgroundImage = CType(resources.GetObject("ActionButton14.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton10.Name = "Clear"
|
ActionButton14.Name = "Clear"
|
||||||
Me.TXT_SCRIPT.Buttons.Add(ActionButton9)
|
Me.TXT_SCRIPT.Buttons.Add(ActionButton13)
|
||||||
Me.TXT_SCRIPT.Buttons.Add(ActionButton10)
|
Me.TXT_SCRIPT.Buttons.Add(ActionButton14)
|
||||||
Me.TXT_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
Me.TXT_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
||||||
Me.TXT_SCRIPT.CaptionText = "Script"
|
Me.TXT_SCRIPT.CaptionText = "Script"
|
||||||
Me.TXT_SCRIPT.CaptionToolTipEnabled = True
|
Me.TXT_SCRIPT.CaptionToolTipEnabled = True
|
||||||
@@ -1146,12 +1234,12 @@ Namespace Editors
|
|||||||
"sing the script option."
|
"sing the script option."
|
||||||
Me.TXT_SCRIPT.ChangeControlsEnableOnCheckedChange = False
|
Me.TXT_SCRIPT.ChangeControlsEnableOnCheckedChange = False
|
||||||
Me.TXT_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.TXT_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.TXT_SCRIPT.Location = New System.Drawing.Point(4, 92)
|
Me.TXT_SCRIPT.Location = New System.Drawing.Point(4, 118)
|
||||||
Me.TXT_SCRIPT.Name = "TXT_SCRIPT"
|
Me.TXT_SCRIPT.Name = "TXT_SCRIPT"
|
||||||
Me.TXT_SCRIPT.PlaceholderEnabled = True
|
Me.TXT_SCRIPT.PlaceholderEnabled = True
|
||||||
Me.TXT_SCRIPT.PlaceholderText = "Enter script path here..."
|
Me.TXT_SCRIPT.PlaceholderText = "Enter script path here..."
|
||||||
Me.TXT_SCRIPT.Size = New System.Drawing.Size(568, 22)
|
Me.TXT_SCRIPT.Size = New System.Drawing.Size(568, 22)
|
||||||
Me.TXT_SCRIPT.TabIndex = 3
|
Me.TXT_SCRIPT.TabIndex = 4
|
||||||
'
|
'
|
||||||
'TXT_DOWN_COMPLETE_SCRIPT
|
'TXT_DOWN_COMPLETE_SCRIPT
|
||||||
'
|
'
|
||||||
@@ -1161,12 +1249,12 @@ Namespace Editors
|
|||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.CaptionToolTipText = "This command will be executed after all downloads are completed"
|
Me.TXT_DOWN_COMPLETE_SCRIPT.CaptionToolTipText = "This command will be executed after all downloads are completed"
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.CaptionWidth = 120.0R
|
Me.TXT_DOWN_COMPLETE_SCRIPT.CaptionWidth = 120.0R
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.TXT_DOWN_COMPLETE_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.Location = New System.Drawing.Point(4, 121)
|
Me.TXT_DOWN_COMPLETE_SCRIPT.Location = New System.Drawing.Point(4, 147)
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.Name = "TXT_DOWN_COMPLETE_SCRIPT"
|
Me.TXT_DOWN_COMPLETE_SCRIPT.Name = "TXT_DOWN_COMPLETE_SCRIPT"
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.PlaceholderEnabled = True
|
Me.TXT_DOWN_COMPLETE_SCRIPT.PlaceholderEnabled = True
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.PlaceholderText = "Enter command here..."
|
Me.TXT_DOWN_COMPLETE_SCRIPT.PlaceholderText = "Enter command here..."
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.Size = New System.Drawing.Size(568, 22)
|
Me.TXT_DOWN_COMPLETE_SCRIPT.Size = New System.Drawing.Size(568, 22)
|
||||||
Me.TXT_DOWN_COMPLETE_SCRIPT.TabIndex = 4
|
Me.TXT_DOWN_COMPLETE_SCRIPT.TabIndex = 5
|
||||||
'
|
'
|
||||||
'TP_MISSING_DATA
|
'TP_MISSING_DATA
|
||||||
'
|
'
|
||||||
@@ -1177,21 +1265,32 @@ Namespace Editors
|
|||||||
TP_MISSING_DATA.Controls.Add(Me.CH_ADD_MISSING_TO_LOG, 0, 0)
|
TP_MISSING_DATA.Controls.Add(Me.CH_ADD_MISSING_TO_LOG, 0, 0)
|
||||||
TP_MISSING_DATA.Controls.Add(Me.CH_ADD_MISSING_ERROS_TO_LOG, 1, 0)
|
TP_MISSING_DATA.Controls.Add(Me.CH_ADD_MISSING_ERROS_TO_LOG, 1, 0)
|
||||||
TP_MISSING_DATA.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_MISSING_DATA.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_MISSING_DATA.Location = New System.Drawing.Point(1, 147)
|
TP_MISSING_DATA.Location = New System.Drawing.Point(1, 173)
|
||||||
TP_MISSING_DATA.Margin = New System.Windows.Forms.Padding(0)
|
TP_MISSING_DATA.Margin = New System.Windows.Forms.Padding(0)
|
||||||
TP_MISSING_DATA.Name = "TP_MISSING_DATA"
|
TP_MISSING_DATA.Name = "TP_MISSING_DATA"
|
||||||
TP_MISSING_DATA.RowCount = 1
|
TP_MISSING_DATA.RowCount = 1
|
||||||
TP_MISSING_DATA.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_MISSING_DATA.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_MISSING_DATA.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24.0!))
|
TP_MISSING_DATA.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24.0!))
|
||||||
TP_MISSING_DATA.Size = New System.Drawing.Size(574, 25)
|
TP_MISSING_DATA.Size = New System.Drawing.Size(574, 25)
|
||||||
TP_MISSING_DATA.TabIndex = 5
|
TP_MISSING_DATA.TabIndex = 6
|
||||||
|
'
|
||||||
|
'CH_UNAME_UP
|
||||||
|
'
|
||||||
|
Me.CH_UNAME_UP.AutoSize = True
|
||||||
|
Me.CH_UNAME_UP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_UNAME_UP.Location = New System.Drawing.Point(4, 30)
|
||||||
|
Me.CH_UNAME_UP.Name = "CH_UNAME_UP"
|
||||||
|
Me.CH_UNAME_UP.Size = New System.Drawing.Size(568, 19)
|
||||||
|
Me.CH_UNAME_UP.TabIndex = 7
|
||||||
|
Me.CH_UNAME_UP.Text = "Update user site name every time"
|
||||||
|
Me.CH_UNAME_UP.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
'TAB_FEED
|
'TAB_FEED
|
||||||
'
|
'
|
||||||
TAB_FEED.Controls.Add(TP_FEED)
|
TAB_FEED.Controls.Add(TP_FEED)
|
||||||
TAB_FEED.Location = New System.Drawing.Point(4, 22)
|
TAB_FEED.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_FEED.Name = "TAB_FEED"
|
TAB_FEED.Name = "TAB_FEED"
|
||||||
TAB_FEED.Size = New System.Drawing.Size(576, 284)
|
TAB_FEED.Size = New System.Drawing.Size(576, 486)
|
||||||
TAB_FEED.TabIndex = 7
|
TAB_FEED.TabIndex = 7
|
||||||
TAB_FEED.Text = "Feed"
|
TAB_FEED.Text = "Feed"
|
||||||
'
|
'
|
||||||
@@ -1201,21 +1300,26 @@ Namespace Editors
|
|||||||
TP_FEED.ColumnCount = 1
|
TP_FEED.ColumnCount = 1
|
||||||
TP_FEED.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_FEED.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_FEED.Controls.Add(TP_FEED_IMG_COUNT, 0, 0)
|
TP_FEED.Controls.Add(TP_FEED_IMG_COUNT, 0, 0)
|
||||||
TP_FEED.Controls.Add(Me.CH_FEED_ENDLESS, 0, 1)
|
TP_FEED.Controls.Add(Me.CH_FEED_ENDLESS, 0, 3)
|
||||||
TP_FEED.Controls.Add(Me.CH_FEED_ADD_SESSION, 0, 2)
|
TP_FEED.Controls.Add(Me.CH_FEED_ADD_SESSION, 0, 4)
|
||||||
TP_FEED.Controls.Add(Me.CH_FEED_ADD_DATE, 0, 3)
|
TP_FEED.Controls.Add(Me.CH_FEED_ADD_DATE, 0, 5)
|
||||||
TP_FEED.Controls.Add(Me.CH_FEED_STORE_SESSION_DATA, 0, 4)
|
TP_FEED.Controls.Add(Me.CH_FEED_STORE_SESSION_DATA, 0, 6)
|
||||||
|
TP_FEED.Controls.Add(Me.TXT_FEED_CENTER_IMAGE, 0, 1)
|
||||||
|
TP_FEED.Controls.Add(Me.COLORS_FEED, 0, 2)
|
||||||
TP_FEED.Dock = System.Windows.Forms.DockStyle.Fill
|
TP_FEED.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_FEED.Location = New System.Drawing.Point(0, 0)
|
TP_FEED.Location = New System.Drawing.Point(0, 0)
|
||||||
TP_FEED.Name = "TP_FEED"
|
TP_FEED.Name = "TP_FEED"
|
||||||
TP_FEED.RowCount = 6
|
TP_FEED.RowCount = 8
|
||||||
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_FEED.Size = New System.Drawing.Size(576, 284)
|
TP_FEED.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||||
|
TP_FEED.Size = New System.Drawing.Size(576, 486)
|
||||||
TP_FEED.TabIndex = 0
|
TP_FEED.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TP_FEED_IMG_COUNT
|
'TP_FEED_IMG_COUNT
|
||||||
@@ -1271,10 +1375,10 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.CH_FEED_ENDLESS.AutoSize = True
|
Me.CH_FEED_ENDLESS.AutoSize = True
|
||||||
Me.CH_FEED_ENDLESS.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_FEED_ENDLESS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_FEED_ENDLESS.Location = New System.Drawing.Point(4, 33)
|
Me.CH_FEED_ENDLESS.Location = New System.Drawing.Point(4, 88)
|
||||||
Me.CH_FEED_ENDLESS.Name = "CH_FEED_ENDLESS"
|
Me.CH_FEED_ENDLESS.Name = "CH_FEED_ENDLESS"
|
||||||
Me.CH_FEED_ENDLESS.Size = New System.Drawing.Size(568, 19)
|
Me.CH_FEED_ENDLESS.Size = New System.Drawing.Size(568, 19)
|
||||||
Me.CH_FEED_ENDLESS.TabIndex = 1
|
Me.CH_FEED_ENDLESS.TabIndex = 3
|
||||||
Me.CH_FEED_ENDLESS.Text = "Endless feed"
|
Me.CH_FEED_ENDLESS.Text = "Endless feed"
|
||||||
Me.CH_FEED_ENDLESS.UseVisualStyleBackColor = True
|
Me.CH_FEED_ENDLESS.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
@@ -1282,10 +1386,10 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.CH_FEED_ADD_SESSION.AutoSize = True
|
Me.CH_FEED_ADD_SESSION.AutoSize = True
|
||||||
Me.CH_FEED_ADD_SESSION.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_FEED_ADD_SESSION.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_FEED_ADD_SESSION.Location = New System.Drawing.Point(4, 59)
|
Me.CH_FEED_ADD_SESSION.Location = New System.Drawing.Point(4, 114)
|
||||||
Me.CH_FEED_ADD_SESSION.Name = "CH_FEED_ADD_SESSION"
|
Me.CH_FEED_ADD_SESSION.Name = "CH_FEED_ADD_SESSION"
|
||||||
Me.CH_FEED_ADD_SESSION.Size = New System.Drawing.Size(568, 19)
|
Me.CH_FEED_ADD_SESSION.Size = New System.Drawing.Size(568, 19)
|
||||||
Me.CH_FEED_ADD_SESSION.TabIndex = 2
|
Me.CH_FEED_ADD_SESSION.TabIndex = 4
|
||||||
Me.CH_FEED_ADD_SESSION.Text = "Add the session number to the post title"
|
Me.CH_FEED_ADD_SESSION.Text = "Add the session number to the post title"
|
||||||
Me.CH_FEED_ADD_SESSION.UseVisualStyleBackColor = True
|
Me.CH_FEED_ADD_SESSION.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
@@ -1293,19 +1397,51 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.CH_FEED_ADD_DATE.AutoSize = True
|
Me.CH_FEED_ADD_DATE.AutoSize = True
|
||||||
Me.CH_FEED_ADD_DATE.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CH_FEED_ADD_DATE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CH_FEED_ADD_DATE.Location = New System.Drawing.Point(4, 85)
|
Me.CH_FEED_ADD_DATE.Location = New System.Drawing.Point(4, 140)
|
||||||
Me.CH_FEED_ADD_DATE.Name = "CH_FEED_ADD_DATE"
|
Me.CH_FEED_ADD_DATE.Name = "CH_FEED_ADD_DATE"
|
||||||
Me.CH_FEED_ADD_DATE.Size = New System.Drawing.Size(568, 19)
|
Me.CH_FEED_ADD_DATE.Size = New System.Drawing.Size(568, 19)
|
||||||
Me.CH_FEED_ADD_DATE.TabIndex = 3
|
Me.CH_FEED_ADD_DATE.TabIndex = 5
|
||||||
Me.CH_FEED_ADD_DATE.Text = "Add the date to the post title"
|
Me.CH_FEED_ADD_DATE.Text = "Add the date to the post title"
|
||||||
Me.CH_FEED_ADD_DATE.UseVisualStyleBackColor = True
|
Me.CH_FEED_ADD_DATE.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'TXT_FEED_CENTER_IMAGE
|
||||||
|
'
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.CaptionSizeType = System.Windows.Forms.SizeType.Percent
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.CaptionText = "Center images in grid (number of visible images)"
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.CaptionToolTipEnabled = True
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.CaptionToolTipText = "Don't fit images to the grid, but center them and set the number of visible image" &
|
||||||
|
"s." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Only works when the number of columns is 1."
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.CaptionWidth = 50.0R
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.Location = New System.Drawing.Point(4, 33)
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.Margin = New System.Windows.Forms.Padding(3, 3, 2, 3)
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.Name = "TXT_FEED_CENTER_IMAGE"
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.NumberMaximum = New Decimal(New Integer() {50, 0, 0, 0})
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.NumberMinimum = New Decimal(New Integer() {1, 0, 0, 0})
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.Size = New System.Drawing.Size(569, 22)
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.TabIndex = 1
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.Text = "1"
|
||||||
|
Me.TXT_FEED_CENTER_IMAGE.TextBoxTextAlign = System.Windows.Forms.HorizontalAlignment.Center
|
||||||
|
'
|
||||||
|
'COLORS_FEED
|
||||||
|
'
|
||||||
|
Me.COLORS_FEED.ButtonsMargin = New System.Windows.Forms.Padding(1, 2, 1, 2)
|
||||||
|
Me.COLORS_FEED.CaptionText = "Feed colors"
|
||||||
|
Me.COLORS_FEED.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.COLORS_FEED.Location = New System.Drawing.Point(1, 59)
|
||||||
|
Me.COLORS_FEED.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
Me.COLORS_FEED.Name = "COLORS_FEED"
|
||||||
|
Me.COLORS_FEED.Size = New System.Drawing.Size(574, 25)
|
||||||
|
Me.COLORS_FEED.TabIndex = 2
|
||||||
|
'
|
||||||
'TAB_NOTIFY
|
'TAB_NOTIFY
|
||||||
'
|
'
|
||||||
TAB_NOTIFY.Controls.Add(TP_NOTIFY_MAIN)
|
TAB_NOTIFY.Controls.Add(TP_NOTIFY_MAIN)
|
||||||
TAB_NOTIFY.Location = New System.Drawing.Point(4, 22)
|
TAB_NOTIFY.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_NOTIFY.Name = "TAB_NOTIFY"
|
TAB_NOTIFY.Name = "TAB_NOTIFY"
|
||||||
TAB_NOTIFY.Size = New System.Drawing.Size(576, 284)
|
TAB_NOTIFY.Size = New System.Drawing.Size(576, 486)
|
||||||
TAB_NOTIFY.TabIndex = 8
|
TAB_NOTIFY.TabIndex = 8
|
||||||
TAB_NOTIFY.Text = "Notifications"
|
TAB_NOTIFY.Text = "Notifications"
|
||||||
'
|
'
|
||||||
@@ -1332,7 +1468,7 @@ Namespace Editors
|
|||||||
TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_NOTIFY_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_NOTIFY_MAIN.Size = New System.Drawing.Size(576, 284)
|
TP_NOTIFY_MAIN.Size = New System.Drawing.Size(576, 486)
|
||||||
TP_NOTIFY_MAIN.TabIndex = 0
|
TP_NOTIFY_MAIN.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TAB_MAIN
|
'TAB_MAIN
|
||||||
@@ -1348,7 +1484,7 @@ Namespace Editors
|
|||||||
Me.TAB_MAIN.Location = New System.Drawing.Point(0, 0)
|
Me.TAB_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.TAB_MAIN.Name = "TAB_MAIN"
|
Me.TAB_MAIN.Name = "TAB_MAIN"
|
||||||
Me.TAB_MAIN.SelectedIndex = 0
|
Me.TAB_MAIN.SelectedIndex = 0
|
||||||
Me.TAB_MAIN.Size = New System.Drawing.Size(584, 310)
|
Me.TAB_MAIN.Size = New System.Drawing.Size(584, 369)
|
||||||
Me.TAB_MAIN.TabIndex = 1
|
Me.TAB_MAIN.TabIndex = 1
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN
|
'CONTAINER_MAIN
|
||||||
@@ -1357,13 +1493,13 @@ Namespace Editors
|
|||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TAB_MAIN)
|
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TAB_MAIN)
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 310)
|
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 369)
|
||||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(584, 310)
|
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(584, 394)
|
||||||
Me.CONTAINER_MAIN.TabIndex = 0
|
Me.CONTAINER_MAIN.TabIndex = 0
|
||||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
@@ -1371,15 +1507,15 @@ Namespace Editors
|
|||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
Me.ClientSize = New System.Drawing.Size(584, 310)
|
Me.ClientSize = New System.Drawing.Size(584, 394)
|
||||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
Me.Controls.Add(Me.CONTAINER_MAIN)
|
||||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
Me.Icon = Global.SCrawler.My.Resources.Resources.SettingsIcon_48
|
Me.Icon = Global.SCrawler.My.Resources.Resources.SettingsIcon_48
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MaximizeBox = False
|
Me.MaximizeBox = False
|
||||||
Me.MaximumSize = New System.Drawing.Size(600, 349)
|
Me.MaximumSize = New System.Drawing.Size(600, 433)
|
||||||
Me.MinimizeBox = False
|
Me.MinimizeBox = False
|
||||||
Me.MinimumSize = New System.Drawing.Size(600, 349)
|
Me.MinimumSize = New System.Drawing.Size(600, 433)
|
||||||
Me.Name = "GlobalSettingsForm"
|
Me.Name = "GlobalSettingsForm"
|
||||||
Me.ShowInTaskbar = False
|
Me.ShowInTaskbar = False
|
||||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
@@ -1394,6 +1530,8 @@ Namespace Editors
|
|||||||
CType(Me.TXT_MAX_JOBS_USERS, 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_MAX_JOBS_CHANNELS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_IMGUR_CLIENT_ID, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.TXT_USER_AGENT, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.TXT_USER_LIST_IMAGE, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
TP_FILE_NAME.ResumeLayout(False)
|
TP_FILE_NAME.ResumeLayout(False)
|
||||||
TP_FILE_NAME.PerformLayout()
|
TP_FILE_NAME.PerformLayout()
|
||||||
TP_FILE_PATTERNS.ResumeLayout(False)
|
TP_FILE_PATTERNS.ResumeLayout(False)
|
||||||
@@ -1431,6 +1569,7 @@ Namespace Editors
|
|||||||
TP_FEED_IMG_COUNT.ResumeLayout(False)
|
TP_FEED_IMG_COUNT.ResumeLayout(False)
|
||||||
CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_FEED_ROWS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_FEED_COLUMNS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.TXT_FEED_CENTER_IMAGE, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
TAB_NOTIFY.ResumeLayout(False)
|
TAB_NOTIFY.ResumeLayout(False)
|
||||||
TP_NOTIFY_MAIN.ResumeLayout(False)
|
TP_NOTIFY_MAIN.ResumeLayout(False)
|
||||||
TP_NOTIFY_MAIN.PerformLayout()
|
TP_NOTIFY_MAIN.PerformLayout()
|
||||||
@@ -1499,5 +1638,12 @@ Namespace Editors
|
|||||||
Private WithEvents CH_NOTIFY_AUTO_DOWN As CheckBox
|
Private WithEvents CH_NOTIFY_AUTO_DOWN As CheckBox
|
||||||
Private WithEvents CH_NOTIFY_CHANNELS As CheckBox
|
Private WithEvents CH_NOTIFY_CHANNELS As CheckBox
|
||||||
Private WithEvents CH_DOWN_REPARSE_MISSING As CheckBox
|
Private WithEvents CH_DOWN_REPARSE_MISSING As CheckBox
|
||||||
|
Private WithEvents TXT_USER_AGENT As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents TXT_USER_LIST_IMAGE As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents TXT_FEED_CENTER_IMAGE As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents CH_NAME_SITE_FRIENDLY As CheckBox
|
||||||
|
Private WithEvents CH_UNAME_UP As CheckBox
|
||||||
|
Private WithEvents COLORS_USERLIST As ColorPicker
|
||||||
|
Private WithEvents COLORS_FEED As ColorPicker
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -197,6 +197,49 @@
|
|||||||
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>17, 17</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<data name="ActionButton7.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
||||||
|
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE
|
||||||
|
QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb
|
||||||
|
ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb
|
||||||
|
+eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv
|
||||||
|
qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN
|
||||||
|
v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA
|
||||||
|
prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ
|
||||||
|
qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY
|
||||||
|
HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74
|
||||||
|
qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG
|
||||||
|
VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton8.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="ActionButton9.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="ActionButton10.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>
|
||||||
<metadata name="TP_FILE_NAME.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="TP_FILE_NAME.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
@@ -245,7 +288,7 @@ You can find more detailed information about the missing posts in the form that
|
|||||||
<metadata name="TP_BEHAVIOR.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="TP_BEHAVIOR.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="ActionButton7.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton11.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
@@ -253,7 +296,7 @@ You can find more detailed information about the missing posts in the form that
|
|||||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton8.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton12.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
@@ -273,7 +316,7 @@ You can find more detailed information about the missing posts in the form that
|
|||||||
<metadata name="TP_DOWNLOADING.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="TP_DOWNLOADING.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<data name="ActionButton9.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton13.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
||||||
@@ -284,7 +327,7 @@ You can find more detailed information about the missing posts in the form that
|
|||||||
cMaRN0UdBBkAAAAASUVORK5CYII=
|
cMaRN0UdBBkAAAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton10.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton14.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ Namespace Editors
|
|||||||
TXT_MAX_JOBS_USERS.Value = .MaxUsersJobsCount.Value
|
TXT_MAX_JOBS_USERS.Value = .MaxUsersJobsCount.Value
|
||||||
TXT_MAX_JOBS_CHANNELS.Value = .ChannelsMaxJobsCount.Value
|
TXT_MAX_JOBS_CHANNELS.Value = .ChannelsMaxJobsCount.Value
|
||||||
CH_CHECK_VER_START.Checked = .CheckUpdatesAtStart
|
CH_CHECK_VER_START.Checked = .CheckUpdatesAtStart
|
||||||
|
TXT_USER_AGENT.Text = .UserAgent
|
||||||
TXT_IMGUR_CLIENT_ID.Text = .ImgurClientID
|
TXT_IMGUR_CLIENT_ID.Text = .ImgurClientID
|
||||||
|
TXT_USER_LIST_IMAGE.Text = .UserListImage.Value
|
||||||
|
COLORS_USERLIST.ColorsSet(.UserListBackColor, .UserListForeColor, SystemColors.Window, SystemColors.WindowText)
|
||||||
CH_SHOW_GROUPS.Checked = .ShowGroups
|
CH_SHOW_GROUPS.Checked = .ShowGroups
|
||||||
CH_USERS_GROUPING.Checked = .UseGrouping
|
CH_USERS_GROUPING.Checked = .UseGrouping
|
||||||
'Behavior
|
'Behavior
|
||||||
@@ -60,8 +63,10 @@ Namespace Editors
|
|||||||
CH_DOWN_IMAGES.Checked = .DefaultDownloadImages
|
CH_DOWN_IMAGES.Checked = .DefaultDownloadImages
|
||||||
CH_DOWN_VIDEOS.Checked = .DefaultDownloadVideos
|
CH_DOWN_VIDEOS.Checked = .DefaultDownloadVideos
|
||||||
CH_DOWN_IMAGES_NATIVE.Checked = .DownloadNativeImageFormat
|
CH_DOWN_IMAGES_NATIVE.Checked = .DownloadNativeImageFormat
|
||||||
|
CH_NAME_SITE_FRIENDLY.Checked = .UserSiteNameAsFriendly
|
||||||
'Downloading
|
'Downloading
|
||||||
CH_UDESCR_UP.Checked = .UpdateUserDescriptionEveryTime
|
CH_UDESCR_UP.Checked = .UpdateUserDescriptionEveryTime
|
||||||
|
CH_UNAME_UP.Checked = .UserSiteNameUpdateEveryTime
|
||||||
TXT_SCRIPT.Checked = .ScriptData.Attribute
|
TXT_SCRIPT.Checked = .ScriptData.Attribute
|
||||||
TXT_SCRIPT.Text = .ScriptData.Value
|
TXT_SCRIPT.Text = .ScriptData.Value
|
||||||
TXT_DOWN_COMPLETE_SCRIPT.Text = .DownloadsCompleteCommand
|
TXT_DOWN_COMPLETE_SCRIPT.Text = .DownloadsCompleteCommand
|
||||||
@@ -89,6 +94,10 @@ Namespace Editors
|
|||||||
'Feed
|
'Feed
|
||||||
TXT_FEED_ROWS.Value = .FeedDataRows.Value
|
TXT_FEED_ROWS.Value = .FeedDataRows.Value
|
||||||
TXT_FEED_COLUMNS.Value = .FeedDataColumns.Value
|
TXT_FEED_COLUMNS.Value = .FeedDataColumns.Value
|
||||||
|
TXT_FEED_CENTER_IMAGE.Checked = .FeedCenterImage.Use
|
||||||
|
TXT_FEED_CENTER_IMAGE.Value = .FeedCenterImage.Value
|
||||||
|
TXT_FEED_CENTER_IMAGE.Enabled = .FeedDataColumns = 1
|
||||||
|
COLORS_FEED.ColorsSet(.FeedBackColor, .FeedForeColor, SystemColors.Window, SystemColors.WindowText)
|
||||||
CH_FEED_ENDLESS.Checked = .FeedEndless
|
CH_FEED_ENDLESS.Checked = .FeedEndless
|
||||||
CH_FEED_ADD_SESSION.Checked = .FeedAddSessionToCaption
|
CH_FEED_ADD_SESSION.Checked = .FeedAddSessionToCaption
|
||||||
CH_FEED_ADD_DATE.Checked = .FeedAddDateToCaption
|
CH_FEED_ADD_DATE.Checked = .FeedAddDateToCaption
|
||||||
@@ -147,7 +156,11 @@ Namespace Editors
|
|||||||
.MaxUsersJobsCount.Value = CInt(TXT_MAX_JOBS_USERS.Value)
|
.MaxUsersJobsCount.Value = CInt(TXT_MAX_JOBS_USERS.Value)
|
||||||
.ChannelsMaxJobsCount.Value = TXT_MAX_JOBS_CHANNELS.Value
|
.ChannelsMaxJobsCount.Value = TXT_MAX_JOBS_CHANNELS.Value
|
||||||
.CheckUpdatesAtStart.Value = CH_CHECK_VER_START.Checked
|
.CheckUpdatesAtStart.Value = CH_CHECK_VER_START.Checked
|
||||||
|
.UserAgent.Value = TXT_USER_AGENT.Text
|
||||||
|
DefaultUserAgent = TXT_USER_AGENT.Text
|
||||||
.ImgurClientID.Value = TXT_IMGUR_CLIENT_ID.Text
|
.ImgurClientID.Value = TXT_IMGUR_CLIENT_ID.Text
|
||||||
|
.UserListImage.Value = TXT_USER_LIST_IMAGE.Text
|
||||||
|
COLORS_USERLIST.ColorsGet(.UserListBackColor, .UserListForeColor)
|
||||||
.ShowGroups.Value = CH_SHOW_GROUPS.Checked
|
.ShowGroups.Value = CH_SHOW_GROUPS.Checked
|
||||||
.UseGrouping.Value = CH_USERS_GROUPING.Checked
|
.UseGrouping.Value = CH_USERS_GROUPING.Checked
|
||||||
'Behavior
|
'Behavior
|
||||||
@@ -176,8 +189,10 @@ Namespace Editors
|
|||||||
.DefaultDownloadImages.Value = CH_DOWN_IMAGES.Checked
|
.DefaultDownloadImages.Value = CH_DOWN_IMAGES.Checked
|
||||||
.DefaultDownloadVideos.Value = CH_DOWN_VIDEOS.Checked
|
.DefaultDownloadVideos.Value = CH_DOWN_VIDEOS.Checked
|
||||||
.DownloadNativeImageFormat.Value = CH_DOWN_IMAGES_NATIVE.Checked
|
.DownloadNativeImageFormat.Value = CH_DOWN_IMAGES_NATIVE.Checked
|
||||||
|
.UserSiteNameAsFriendly.Value = CH_NAME_SITE_FRIENDLY.Checked
|
||||||
'Downloading
|
'Downloading
|
||||||
.UpdateUserDescriptionEveryTime.Value = CH_UDESCR_UP.Checked
|
.UpdateUserDescriptionEveryTime.Value = CH_UDESCR_UP.Checked
|
||||||
|
.UserSiteNameUpdateEveryTime.Value = CH_UNAME_UP.Checked
|
||||||
.ScriptData.Value = TXT_SCRIPT.Text
|
.ScriptData.Value = TXT_SCRIPT.Text
|
||||||
.ScriptData.Attribute.Value = TXT_SCRIPT.Checked
|
.ScriptData.Attribute.Value = TXT_SCRIPT.Checked
|
||||||
.DownloadsCompleteCommand.Value = TXT_DOWN_COMPLETE_SCRIPT.Text
|
.DownloadsCompleteCommand.Value = TXT_DOWN_COMPLETE_SCRIPT.Text
|
||||||
@@ -199,6 +214,8 @@ Namespace Editors
|
|||||||
'Channels
|
'Channels
|
||||||
.ChannelsImagesRows.Value = CInt(TXT_CHANNELS_ROWS.Value)
|
.ChannelsImagesRows.Value = CInt(TXT_CHANNELS_ROWS.Value)
|
||||||
.ChannelsImagesColumns.Value = CInt(TXT_CHANNELS_COLUMNS.Value)
|
.ChannelsImagesColumns.Value = CInt(TXT_CHANNELS_COLUMNS.Value)
|
||||||
|
.FeedCenterImage.Use = TXT_FEED_CENTER_IMAGE.Checked
|
||||||
|
.FeedCenterImage.Value = TXT_FEED_CENTER_IMAGE.Value
|
||||||
.FromChannelDownloadTop.Value = CInt(TXT_CHANNEL_USER_POST_LIMIT.Value)
|
.FromChannelDownloadTop.Value = CInt(TXT_CHANNEL_USER_POST_LIMIT.Value)
|
||||||
.FromChannelDownloadTopUse.Value = TXT_CHANNEL_USER_POST_LIMIT.Checked
|
.FromChannelDownloadTopUse.Value = TXT_CHANNEL_USER_POST_LIMIT.Checked
|
||||||
.FromChannelCopyImageToUser.Value = CH_COPY_CHANNEL_USER_IMAGE.Checked
|
.FromChannelCopyImageToUser.Value = CH_COPY_CHANNEL_USER_IMAGE.Checked
|
||||||
@@ -207,12 +224,15 @@ Namespace Editors
|
|||||||
'Feed
|
'Feed
|
||||||
.FeedDataRows.Value = CInt(TXT_FEED_ROWS.Value)
|
.FeedDataRows.Value = CInt(TXT_FEED_ROWS.Value)
|
||||||
.FeedDataColumns.Value = CInt(TXT_FEED_COLUMNS.Value)
|
.FeedDataColumns.Value = CInt(TXT_FEED_COLUMNS.Value)
|
||||||
|
COLORS_FEED.ColorsGet(.FeedBackColor, .FeedForeColor)
|
||||||
.FeedEndless.Value = CH_FEED_ENDLESS.Checked
|
.FeedEndless.Value = CH_FEED_ENDLESS.Checked
|
||||||
.FeedAddSessionToCaption.Value = CH_FEED_ADD_SESSION.Checked
|
.FeedAddSessionToCaption.Value = CH_FEED_ADD_SESSION.Checked
|
||||||
.FeedAddDateToCaption.Value = CH_FEED_ADD_DATE.Checked
|
.FeedAddDateToCaption.Value = CH_FEED_ADD_DATE.Checked
|
||||||
.FeedStoreSessionsData.Value = CH_FEED_STORE_SESSION_DATA.Checked
|
.FeedStoreSessionsData.Value = CH_FEED_STORE_SESSION_DATA.Checked
|
||||||
FeedParametersChanged = .FeedDataRows.ChangesDetected Or .FeedDataColumns.ChangesDetected Or
|
FeedParametersChanged = .FeedDataRows.ChangesDetected Or .FeedDataColumns.ChangesDetected Or
|
||||||
.FeedEndless.ChangesDetected Or .FeedStoreSessionsData.ChangesDetected
|
.FeedEndless.ChangesDetected Or .FeedStoreSessionsData.ChangesDetected Or
|
||||||
|
.FeedBackColor.ChangesDetected Or .FeedForeColor.ChangesDetected Or
|
||||||
|
.FeedCenterImage.ChangesDetected
|
||||||
|
|
||||||
.EndUpdate()
|
.EndUpdate()
|
||||||
End With
|
End With
|
||||||
@@ -231,6 +251,9 @@ Namespace Editors
|
|||||||
Private Sub TXT_MAX_JOBS_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_MAX_JOBS_CHANNELS.ActionOnButtonClick
|
Private Sub TXT_MAX_JOBS_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_MAX_JOBS_CHANNELS.ActionOnButtonClick
|
||||||
If Sender.DefaultButton = ADB.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks
|
If Sender.DefaultButton = ADB.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub TXT_USER_AGENT_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_USER_AGENT.ActionOnButtonClick
|
||||||
|
If Sender.DefaultButton = ADB.Refresh Then TXT_USER_AGENT.Text = Settings.UserAgent.Value
|
||||||
|
End Sub
|
||||||
Private Sub ChangePositionControlsEnabling() Handles OPT_FILE_NAME_REPLACE.CheckedChanged, OPT_FILE_NAME_ADD_DATE.CheckedChanged
|
Private Sub ChangePositionControlsEnabling() Handles OPT_FILE_NAME_REPLACE.CheckedChanged, OPT_FILE_NAME_ADD_DATE.CheckedChanged
|
||||||
Dim b As Boolean = OPT_FILE_NAME_ADD_DATE.Checked And OPT_FILE_NAME_ADD_DATE.Enabled
|
Dim b As Boolean = OPT_FILE_NAME_ADD_DATE.Checked And OPT_FILE_NAME_ADD_DATE.Enabled
|
||||||
OPT_FILE_DATE_START.Enabled = b
|
OPT_FILE_DATE_START.Enabled = b
|
||||||
@@ -258,5 +281,14 @@ Namespace Editors
|
|||||||
CH_NOTIFY_CHANNELS.Enabled = b
|
CH_NOTIFY_CHANNELS.Enabled = b
|
||||||
CH_NOTIFY_SAVED_POSTS.Enabled = b
|
CH_NOTIFY_SAVED_POSTS.Enabled = b
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub TXT_USER_LIST_IMAGE_ActionOnButtonClick(ByVal Sender As ActionButton, e As ActionButtonEventArgs) Handles TXT_USER_LIST_IMAGE.ActionOnButtonClick
|
||||||
|
If Sender.DefaultButton = ADB.Open Then
|
||||||
|
Dim f As SFile = SFile.SelectFiles(TXT_USER_LIST_IMAGE.Text, False, "Select a new image for the user list:", "Pictures|*.jpg;*.jpeg;*.png").FirstOrDefault
|
||||||
|
If Not f.IsEmptyString Then TXT_USER_LIST_IMAGE.Text = f
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub TXT_FEED_COLUMNS_ActionOnValueChanged(sender As Object, e As EventArgs) Handles TXT_FEED_COLUMNS.ActionOnValueChanged
|
||||||
|
TXT_FEED_CENTER_IMAGE.Enabled = TXT_FEED_COLUMNS.Value = 1
|
||||||
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -72,7 +72,7 @@ Friend Class LabelsForm
|
|||||||
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
Try
|
Try
|
||||||
LabelsList.ListAddList(CMB_LABELS.Items.CheckedItems.Select(Function(l) CStr(l.Value(0))), LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
LabelsList.ListAddList(CMB_LABELS.Items.CheckedItems.Select(Function(l) CStr(l.Value(0))), LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
||||||
If _AnyLabelAdd And _Source Is Nothing Then Settings.Labels.Update()
|
If _Source Is Nothing Then Settings.Labels.Update()
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Label selection")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Label selection")
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ Namespace Editors
|
|||||||
SetChecker(CH.MyImagesDown, h.DownloadImages)
|
SetChecker(CH.MyImagesDown, h.DownloadImages)
|
||||||
SetChecker(CH.MyVideosDown, h.DownloadVideos)
|
SetChecker(CH.MyVideosDown, h.DownloadVideos)
|
||||||
End Sub
|
End Sub
|
||||||
Private Overloads Shared Sub SetChecker(ByRef State As CheckState, ByVal Prop As XML.Base.XMLValue(Of Boolean))
|
Private Overloads Shared Sub SetChecker(ByRef State As CheckState, ByVal Prop As XML.Objects.XMLValue(Of Boolean))
|
||||||
If Prop.ValueF.Exists Then
|
If Prop.ValueF.Exists Then
|
||||||
State = If(Prop.Value, CheckState.Checked, CheckState.Unchecked)
|
State = If(Prop.Value, CheckState.Checked, CheckState.Unchecked)
|
||||||
Else
|
Else
|
||||||
@@ -113,7 +113,7 @@ Namespace Editors
|
|||||||
SetPropByChecker(CH.MyImagesDown, h.DownloadImages)
|
SetPropByChecker(CH.MyImagesDown, h.DownloadImages)
|
||||||
SetPropByChecker(CH.MyVideosDown, h.DownloadVideos)
|
SetPropByChecker(CH.MyVideosDown, h.DownloadVideos)
|
||||||
End Sub
|
End Sub
|
||||||
Private Overloads Shared Sub SetPropByChecker(ByVal State As CheckState, ByRef Prop As XML.Base.XMLValue(Of Boolean))
|
Private Overloads Shared Sub SetPropByChecker(ByVal State As CheckState, ByRef Prop As XML.Objects.XMLValue(Of Boolean))
|
||||||
Select Case State
|
Select Case State
|
||||||
Case CheckState.Checked : Prop.Value = True
|
Case CheckState.Checked : Prop.Value = True
|
||||||
Case CheckState.Unchecked : Prop.Value = False
|
Case CheckState.Unchecked : Prop.Value = False
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ Namespace Editors
|
|||||||
Select Case Sender.DefaultButton
|
Select Case Sender.DefaultButton
|
||||||
Case ADB.Edit
|
Case ADB.Edit
|
||||||
If Not Host.Responser Is Nothing Then
|
If Not Host.Responser Is Nothing Then
|
||||||
Using f As New CookieListForm With {.DesignXML = Settings.Design, .UseGrid = False}
|
Using f As New CookieListForm With {.DesignXML = Settings.Design, .ShowGrid = False}
|
||||||
f.SetCollection(Host.Responser.Cookies)
|
f.SetCollection(Host.Responser.Cookies)
|
||||||
f.ShowDialog()
|
f.ShowDialog()
|
||||||
If f.DialogResult = DialogResult.OK Then
|
If f.DialogResult = DialogResult.OK Then
|
||||||
@@ -224,17 +224,14 @@ Namespace Editors
|
|||||||
End If
|
End If
|
||||||
Case ADB.Clear
|
Case ADB.Clear
|
||||||
If Not Host.Responser Is Nothing Then
|
If Not Host.Responser Is Nothing Then
|
||||||
With Host.Responser
|
Host.Responser.Cookies.Clear()
|
||||||
If Not .Cookies Is Nothing Then .Cookies.Dispose()
|
MyDefs.MyOkCancel.EnableOK = True
|
||||||
.Cookies = New CookieKeeper(.CookiesDomain)
|
|
||||||
MyDefs.MyOkCancel.EnableOK = True
|
|
||||||
End With
|
|
||||||
SetCookieText()
|
SetCookieText()
|
||||||
End If
|
End If
|
||||||
End Select
|
End Select
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SetCookieText()
|
Private Sub SetCookieText()
|
||||||
If Not Host.Responser Is Nothing Then TXT_COOKIES.Text = $"{If(Host.Responser.Cookies?.Count, 0)} cookies"
|
If Not Host.Responser Is Nothing Then TXT_COOKIES.Text = $"{Host.Responser.Cookies.Count} cookies"
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SpecialButton_Click(sender As Object, e As EventArgs) Handles SpecialButton.Click
|
Private Sub SpecialButton_Click(sender As Object, e As EventArgs) Handles SpecialButton.Click
|
||||||
MyDefs.Detector()
|
MyDefs.Detector()
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ Namespace Editors
|
|||||||
Return TXT_SCRIPT.Text
|
Return TXT_SCRIPT.Text
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Private FriendlyNameIsSiteName As Boolean = False
|
||||||
|
Private FriendlyNameChanged As Boolean = False
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Exchange, Path, Labels"
|
#Region "Exchange, Path, Labels"
|
||||||
Friend Property MyExchangeOptions As Object = Nothing
|
Friend Property MyExchangeOptions As Object = Nothing
|
||||||
@@ -248,7 +250,18 @@ Namespace Editors
|
|||||||
TXT_SPEC_FOLDER.Buttons.Clear()
|
TXT_SPEC_FOLDER.Buttons.Clear()
|
||||||
TXT_SPEC_FOLDER.Buttons.UpdateButtonsPositions()
|
TXT_SPEC_FOLDER.Buttons.UpdateButtonsPositions()
|
||||||
With UserInstance
|
With UserInstance
|
||||||
|
If .HOST.Key = PathPlugin.PluginKey Then TXT_SPEC_FOLDER.Enabled = False
|
||||||
TXT_USER_FRIENDLY.Text = .FriendlyName
|
TXT_USER_FRIENDLY.Text = .FriendlyName
|
||||||
|
FriendlyNameIsSiteName = DirectCast(.Self, UserDataBase).FriendlyNameIsSiteName
|
||||||
|
If FriendlyNameIsSiteName Then
|
||||||
|
With TXT_USER_FRIENDLY
|
||||||
|
.ControlChangeColor(True, False)
|
||||||
|
.Buttons.AddRange({New ActionButton With {.Text = "F", .ToolTipText = "Name set by you"},
|
||||||
|
New ActionButton With {.Text = "S", .ToolTipText = "Name from site"},
|
||||||
|
New ActionButton(ADB.Clear)})
|
||||||
|
.ClearTextByButtonClear = False
|
||||||
|
End With
|
||||||
|
End If
|
||||||
CH_FAV.Checked = .Favorite
|
CH_FAV.Checked = .Favorite
|
||||||
CH_TEMP.Checked = .Temporary
|
CH_TEMP.Checked = .Temporary
|
||||||
CH_PARSE_USER_MEDIA.Checked = .ParseUserMediaOnly
|
CH_PARSE_USER_MEDIA.Checked = .ParseUserMediaOnly
|
||||||
@@ -275,6 +288,7 @@ Namespace Editors
|
|||||||
.MyFieldsChecker.EndLoaderOperations()
|
.MyFieldsChecker.EndLoaderOperations()
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
|
FriendlyNameChanged = False
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MyDef.InvokeLoaderError(ex)
|
MyDef.InvokeLoaderError(ex)
|
||||||
End Try
|
End Try
|
||||||
@@ -336,7 +350,19 @@ Namespace Editors
|
|||||||
If Not UserInstance Is Nothing Then
|
If Not UserInstance Is Nothing Then
|
||||||
With DirectCast(UserInstance, UserDataBase)
|
With DirectCast(UserInstance, UserDataBase)
|
||||||
.User = User
|
.User = User
|
||||||
.FriendlyName = TXT_USER_FRIENDLY.Text
|
Dim setFriendly As Boolean = True
|
||||||
|
If FriendlyNameIsSiteName Then
|
||||||
|
If Not FriendlyNameChanged Then
|
||||||
|
setFriendly = False
|
||||||
|
Else
|
||||||
|
setFriendly = MsgBoxE({"Are you sure you want to set the site name as the friendly name?" & vbCr &
|
||||||
|
$"Friendly name: { .FriendlyNameOrig}" & vbCr &
|
||||||
|
$"Site name: { .UserSiteName}" & vbCr &
|
||||||
|
$"Your choice: {TXT_USER_FRIENDLY.Text}", "Friendly name change"}, vbExclamation,,,
|
||||||
|
{"Confirm", New Messaging.MsgBoxButton("Decline", "Friendly name will not be changed")}) = 0
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
If setFriendly Then .FriendlyName = TXT_USER_FRIENDLY.Text
|
||||||
.Favorite = CH_FAV.Checked
|
.Favorite = CH_FAV.Checked
|
||||||
.Temporary = CH_TEMP.Checked
|
.Temporary = CH_TEMP.Checked
|
||||||
.ReadyForDownload = CH_READY_FOR_DOWN.Checked
|
.ReadyForDownload = CH_READY_FOR_DOWN.Checked
|
||||||
@@ -346,7 +372,7 @@ Namespace Editors
|
|||||||
If Not MyExchangeOptions Is Nothing Then .ExchangeOptionsSet(MyExchangeOptions)
|
If Not MyExchangeOptions Is Nothing Then .ExchangeOptionsSet(MyExchangeOptions)
|
||||||
Dim l As New ListAddParams(LAP.NotContainsOnly + LAP.ClearBeforeAdd)
|
Dim l As New ListAddParams(LAP.NotContainsOnly + LAP.ClearBeforeAdd)
|
||||||
If .IsCollection Then
|
If .IsCollection Then
|
||||||
With DirectCast(UserInstance, API.UserDataBind)
|
With DirectCast(UserInstance, UserDataBind)
|
||||||
If .Count > 0 Then .Collections.ForEach(Sub(c) c.Labels.ListAddList(UserLabels, l))
|
If .Count > 0 Then .Collections.ForEach(Sub(c) c.Labels.ListAddList(UserLabels, l))
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
@@ -387,6 +413,10 @@ CloseForm:
|
|||||||
If Not s.UserName.IsEmptyString Then
|
If Not s.UserName.IsEmptyString Then
|
||||||
Dim i% = Settings.Plugins.FindIndex(Function(p) p.Key = s.HostKey)
|
Dim i% = Settings.Plugins.FindIndex(Function(p) p.Key = s.HostKey)
|
||||||
If i >= 0 Then
|
If i >= 0 Then
|
||||||
|
If s.HostKey = PathPlugin.PluginKey Then
|
||||||
|
TXT_SPEC_FOLDER.Text = s.UserName
|
||||||
|
s.UserName = s.UserName.CSFileP.Segments.LastOrDefault
|
||||||
|
End If
|
||||||
CMB_SITE.SelectedIndex = i
|
CMB_SITE.SelectedIndex = i
|
||||||
CH_IS_CHANNEL.Checked = s.IsChannel
|
CH_IS_CHANNEL.Checked = s.IsChannel
|
||||||
TXT_USER.Text = s.UserName
|
TXT_USER.Text = s.UserName
|
||||||
@@ -397,6 +427,7 @@ CloseForm:
|
|||||||
CMB_SITE.SelectedIndex = -1
|
CMB_SITE.SelectedIndex = -1
|
||||||
CMB_SITE.Clear(ComboBoxExtended.ClearMode.Text)
|
CMB_SITE.Clear(ComboBoxExtended.ClearMode.Text)
|
||||||
CH_IS_CHANNEL.Checked = False
|
CH_IS_CHANNEL.Checked = False
|
||||||
|
If Not UserIsCollection Then Icon = My.Resources.UsersIcon_32
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
_TextChangeInvoked = False
|
_TextChangeInvoked = False
|
||||||
@@ -407,11 +438,38 @@ CloseForm:
|
|||||||
Private Sub TXT_USER_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_USER.ActionOnButtonClick
|
Private Sub TXT_USER_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_USER.ActionOnButtonClick
|
||||||
If UserIsCollection AndAlso Sender.DefaultButton = ADB.Refresh Then TXT_USER.Text = UserInstance.CollectionName
|
If UserIsCollection AndAlso Sender.DefaultButton = ADB.Refresh Then TXT_USER.Text = UserInstance.CollectionName
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub TXT_USER_FRIENDLY_ActionOnTextChanged(sender As Object, e As EventArgs) Handles TXT_USER_FRIENDLY.ActionOnTextChanged
|
||||||
|
If Not MyDef.Initializing Then FriendlyNameChanged = True
|
||||||
|
End Sub
|
||||||
|
Private Sub TXT_USER_FRIENDLY_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As ActionButtonEventArgs) Handles TXT_USER_FRIENDLY.ActionOnButtonClick
|
||||||
|
If Sender.DefaultButton = ADB.Clear Then
|
||||||
|
TXT_USER_FRIENDLY.Clear()
|
||||||
|
FriendlyNameIsSiteName = False
|
||||||
|
FriendlyNameChanged = False
|
||||||
|
TXT_USER_FRIENDLY.ControlChangeColor(SystemColors.Window, SystemColors.WindowText)
|
||||||
|
Else
|
||||||
|
Select Case Sender.Text
|
||||||
|
Case "F"
|
||||||
|
TXT_USER_FRIENDLY.Text = DirectCast(UserInstance, UserDataBase).FriendlyNameOrig
|
||||||
|
FriendlyNameIsSiteName = False
|
||||||
|
FriendlyNameChanged = False
|
||||||
|
TXT_USER_FRIENDLY.ControlChangeColor(SystemColors.Window, SystemColors.WindowText)
|
||||||
|
Case "S"
|
||||||
|
TXT_USER_FRIENDLY.Text = DirectCast(UserInstance, UserDataBase).UserSiteName
|
||||||
|
FriendlyNameIsSiteName = True
|
||||||
|
FriendlyNameChanged = False
|
||||||
|
TXT_USER_FRIENDLY.ControlChangeColor(True, False)
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
Private Sub CMB_SITE_ActionSelectedItemChanged(ByVal Sender As Object, ByVal e As EventArgs, ByVal Item As ListViewItem) Handles CMB_SITE.ActionSelectedItemChanged
|
Private Sub CMB_SITE_ActionSelectedItemChanged(ByVal Sender As Object, ByVal e As EventArgs, ByVal Item As ListViewItem) Handles CMB_SITE.ActionSelectedItemChanged
|
||||||
CH_IS_CHANNEL.Checked = False
|
CH_IS_CHANNEL.Checked = False
|
||||||
MyExchangeOptions = Nothing
|
MyExchangeOptions = Nothing
|
||||||
SetParamsBySite()
|
SetParamsBySite()
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub CMB_SITE_ActionOnTextChanged(sender As Object, e As EventArgs) Handles CMB_SITE.ActionOnTextChanged
|
||||||
|
If CMB_SITE.Text.IsEmptyString And Not UserIsCollection Then CMB_SITE.SelectedIndex = -1 : Icon = My.Resources.UsersIcon_32
|
||||||
|
End Sub
|
||||||
Private Sub BTT_OTHER_SETTINGS_Click(sender As Object, e As EventArgs) Handles BTT_OTHER_SETTINGS.Click
|
Private Sub BTT_OTHER_SETTINGS_Click(sender As Object, e As EventArgs) Handles BTT_OTHER_SETTINGS.Click
|
||||||
Dim s As SettingsHost = GetSiteByCheckers()
|
Dim s As SettingsHost = GetSiteByCheckers()
|
||||||
If Not s Is Nothing Then
|
If Not s Is Nothing Then
|
||||||
@@ -604,9 +662,17 @@ CloseForm:
|
|||||||
Else
|
Else
|
||||||
BTT_OTHER_SETTINGS.Enabled = False
|
BTT_OTHER_SETTINGS.Enabled = False
|
||||||
End If
|
End If
|
||||||
|
If Not UserIsCollection Then
|
||||||
|
If Not s.Source.Icon Is Nothing Then
|
||||||
|
Icon = s.Source.Icon
|
||||||
|
ElseIf Not s.Source.Image Is Nothing Then
|
||||||
|
Icon = ImageRenderer.GetIcon(s.Source.Image, New ErrorsDescriber(False, False, False, My.Resources.UsersIcon_32))
|
||||||
|
End If
|
||||||
|
End If
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
BTT_OTHER_SETTINGS.Enabled = False
|
BTT_OTHER_SETTINGS.Enabled = False
|
||||||
|
If Not UserIsCollection Then Icon = My.Resources.UsersIcon_32
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ChangeLabels()
|
Private Sub ChangeLabels()
|
||||||
|
|||||||
@@ -12,15 +12,8 @@ Namespace EncryptCookies
|
|||||||
Friend CookiesEncrypted As Boolean = False
|
Friend CookiesEncrypted As Boolean = False
|
||||||
Friend Sub ValidateCookiesEncrypt(ByRef Responser As Responser)
|
Friend Sub ValidateCookiesEncrypt(ByRef Responser As Responser)
|
||||||
If Not Responser Is Nothing Then
|
If Not Responser Is Nothing Then
|
||||||
Dim b As Boolean = False
|
|
||||||
With Responser
|
With Responser
|
||||||
If Not .Cookies Is Nothing Then
|
If .CookiesEncryptKey.IsEmptyString Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey : .SaveSettings()
|
||||||
With .Cookies
|
|
||||||
If .EncryptKey.IsEmptyString Then .EncryptKey = SettingsCLS.CookieEncryptKey : b = .Count > 0
|
|
||||||
End With
|
|
||||||
End If
|
|
||||||
If .CookiesEncryptKey.IsEmptyString Then .CookiesEncryptKey = SettingsCLS.CookieEncryptKey : b = True
|
|
||||||
If b Then .SaveSettings()
|
|
||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools
|
||||||
Friend Class LabelsKeeper : Implements ICollection(Of String), IMyEnumerator(Of String), IDisposable
|
Friend Class LabelsKeeper : Implements ICollection(Of String), IMyEnumerator(Of String), IDisposable
|
||||||
Friend Event NewLabelAdded()
|
Friend Event NewLabelAdded()
|
||||||
@@ -25,30 +25,16 @@ Friend Class LabelsKeeper : Implements ICollection(Of String), IMyEnumerator(Of
|
|||||||
Friend ReadOnly Property Current As XMLValuesCollection(Of String)
|
Friend ReadOnly Property Current As XMLValuesCollection(Of String)
|
||||||
Friend ReadOnly Property Excluded As XMLValuesCollection(Of String)
|
Friend ReadOnly Property Excluded As XMLValuesCollection(Of String)
|
||||||
Friend ReadOnly Property ExcludedIgnore As XMLValue(Of Boolean)
|
Friend ReadOnly Property ExcludedIgnore As XMLValue(Of Boolean)
|
||||||
Private ReadOnly Property SourceXML As XmlFile
|
|
||||||
Friend Sub New(ByRef x As XmlFile)
|
Friend Sub New(ByRef x As XmlFile)
|
||||||
SourceXML = x
|
|
||||||
LabelsList = New List(Of String)
|
LabelsList = New List(Of String)
|
||||||
NewLabels = New List(Of String)
|
NewLabels = New List(Of String)
|
||||||
If LabelsFile.Exists Then LabelsList.ListAddList(IO.File.ReadAllLines(LabelsFile), LAP.NotContainsOnly)
|
If LabelsFile.Exists Then LabelsList.ListAddList(IO.File.ReadAllLines(LabelsFile), LAP.NotContainsOnly)
|
||||||
Current = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "LatestSelectedLabels", x) With {.ListAddParameters = LAP.NotContainsOnly}
|
Current = New XMLValuesCollection(Of String)(IXMLValuesCollection.Modes.String, "LatestSelectedLabels",, x) With {.ListAddParameters = LAP.NotContainsOnly}
|
||||||
Excluded = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "LatestExcludedLabels", x) With {.ListAddParameters = LAP.NotContainsOnly}
|
Excluded = New XMLValuesCollection(Of String)(IXMLValuesCollection.Modes.String, "LatestExcludedLabels",, x) With {.ListAddParameters = LAP.NotContainsOnly}
|
||||||
ExcludedIgnore = New XMLValue(Of Boolean)("LatestExcludedLabelsIgnore", False, x)
|
ExcludedIgnore = New XMLValue(Of Boolean)("LatestExcludedLabelsIgnore", False, x)
|
||||||
End Sub
|
Dim lp As New ListAddParams(LAP.NotContainsOnly + LAP.IgnoreICopier)
|
||||||
Friend Sub Verify()
|
If Current.Count > 0 Then LabelsList.ListAddList(Current, lp)
|
||||||
SourceXML.BeginUpdate()
|
If Excluded.Count > 0 Then LabelsList.ListAddList(Excluded, lp)
|
||||||
Dim r As Predicate(Of String) = Function(l) Not LabelsList.Contains(l)
|
|
||||||
Dim c% = Current.Count
|
|
||||||
If c > 0 Then
|
|
||||||
Current.ValuesList.RemoveAll(r)
|
|
||||||
If Not Current.Count = c Then Current.Update()
|
|
||||||
End If
|
|
||||||
c = Excluded.Count
|
|
||||||
If c > 0 Then
|
|
||||||
Excluded.ValuesList.RemoveAll(r)
|
|
||||||
If Not c = Excluded.Count Then Excluded.Update()
|
|
||||||
End If
|
|
||||||
SourceXML.EndUpdate()
|
|
||||||
End Sub
|
End Sub
|
||||||
Friend ReadOnly Property ToList As List(Of String)
|
Friend ReadOnly Property ToList As List(Of String)
|
||||||
Get
|
Get
|
||||||
@@ -69,10 +55,14 @@ Friend Class LabelsKeeper : Implements ICollection(Of String), IMyEnumerator(Of
|
|||||||
LabelsList.Clear()
|
LabelsList.Clear()
|
||||||
NewLabels.Clear()
|
NewLabels.Clear()
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub Update()
|
Friend Sub Update(Optional ByVal Force As Boolean = False)
|
||||||
If LabelsList.Count > 0 Then
|
If LabelsList.Count > 0 Then
|
||||||
LabelsList.Sort()
|
If NewLabelsExists Or Force Then
|
||||||
TextSaver.SaveTextToFile(LabelsList.ListToString(vbNewLine), LabelsFile, True, False, EDP.SendInLog)
|
If LabelsList.Contains(NoParsedUser) Then LabelsList.Remove(NoParsedUser)
|
||||||
|
LabelsList.Sort()
|
||||||
|
TextSaver.SaveTextToFile(LabelsList.ListToString(vbNewLine), LabelsFile, True, False, EDP.SendInLog)
|
||||||
|
If NewLabels.Count > 0 Then NewLabels.Clear()
|
||||||
|
End If
|
||||||
Else
|
Else
|
||||||
LabelsFile.Delete(, Settings.DeleteMode, EDP.SendInLog)
|
LabelsFile.Delete(, Settings.DeleteMode, EDP.SendInLog)
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -40,20 +40,26 @@ Friend Class ListImagesLoader
|
|||||||
ImageThread = New Thread(New ThreadStart(Sub()
|
ImageThread = New Thread(New ThreadStart(Sub()
|
||||||
Dim ar As IAsyncResult = Nothing
|
Dim ar As IAsyncResult = Nothing
|
||||||
Dim a As Action = Sub()
|
Dim a As Action = Sub()
|
||||||
If UserDataList.ListExists Then
|
Try
|
||||||
For i% = 0 To UserDataList.Count - 1
|
If UserDataList.ListExists Then
|
||||||
With UserDataList(i).User
|
For i% = 0 To UserDataList.Count - 1
|
||||||
Select Case Settings.ViewMode.Value
|
With UserDataList(i).User
|
||||||
Case View.LargeIcon : MyList.LargeImageList.Images.Add(.Key, .GetPicture())
|
Select Case Settings.ViewMode.Value
|
||||||
Case View.SmallIcon : MyList.SmallImageList.Images.Add(.Key, .GetPicture())
|
Case View.LargeIcon : MyList.LargeImageList.Images.Add(.Key, .GetPicture())
|
||||||
End Select
|
Case View.SmallIcon : MyList.SmallImageList.Images.Add(.Key, .GetPicture())
|
||||||
End With
|
End Select
|
||||||
Application.DoEvents()
|
End With
|
||||||
Next
|
Application.DoEvents()
|
||||||
UserDataList.Clear()
|
Next
|
||||||
GC.Collect()
|
UserDataList.Clear()
|
||||||
End If
|
GC.Collect()
|
||||||
|
End If
|
||||||
|
Catch iex As ArgumentOutOfRangeException
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[ListImagesLoader.UpdateImages]")
|
||||||
|
End Try
|
||||||
If Not ar Is Nothing Then MyList.EndInvoke(ar)
|
If Not ar Is Nothing Then MyList.EndInvoke(ar)
|
||||||
|
UpdateInProgress = False
|
||||||
End Sub
|
End Sub
|
||||||
If MyList.InvokeRequired Then
|
If MyList.InvokeRequired Then
|
||||||
ar = MyList.BeginInvoke(a)
|
ar = MyList.BeginInvoke(a)
|
||||||
@@ -65,62 +71,83 @@ Friend Class ListImagesLoader
|
|||||||
ImageThread.Start()
|
ImageThread.Start()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub InterruptUpdate()
|
||||||
|
Try
|
||||||
|
If UserDataList.ListExists Then UserDataList.Clear() : Application.DoEvents()
|
||||||
|
If If(ImageThread?.IsAlive, False) Then ImageThread.Abort() : Application.DoEvents()
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[ListImagesLoader.InterruptUpdate]")
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
Friend Sub Update()
|
Friend Sub Update()
|
||||||
If Not UpdateInProgress Then
|
Try
|
||||||
UpdateInProgress = True
|
If UpdateInProgress Then InterruptUpdate()
|
||||||
Dim a As Action = Sub()
|
If Not UpdateInProgress Then
|
||||||
With MyList
|
UpdateInProgress = True
|
||||||
.Items.Clear()
|
Dim a As Action = Sub()
|
||||||
If Not .LargeImageList Is Nothing Then .LargeImageList.Images.Clear()
|
With MyList
|
||||||
.LargeImageList = New ImageList
|
.Items.Clear()
|
||||||
If Not .SmallImageList Is Nothing Then .SmallImageList.Images.Clear()
|
If Not .LargeImageList Is Nothing Then .LargeImageList.Images.Clear()
|
||||||
.SmallImageList = New ImageList
|
.LargeImageList = New ImageList
|
||||||
If Settings.ViewModeIsPicture Then
|
If Not .SmallImageList Is Nothing Then .SmallImageList.Images.Clear()
|
||||||
.LargeImageList.ColorDepth = ColorDepth.Depth32Bit
|
.SmallImageList = New ImageList
|
||||||
.SmallImageList.ColorDepth = ColorDepth.Depth32Bit
|
If Settings.ViewModeIsPicture Then
|
||||||
.LargeImageList.ImageSize = New Size(DivideWithZeroChecking(Settings.MaxLargeImageHeight.Value, 100) * 75, Settings.MaxLargeImageHeight.Value)
|
.LargeImageList.ColorDepth = ColorDepth.Depth32Bit
|
||||||
.SmallImageList.ImageSize = New Size(DivideWithZeroChecking(Settings.MaxSmallImageHeight.Value, 100) * 75, Settings.MaxSmallImageHeight.Value)
|
.SmallImageList.ColorDepth = ColorDepth.Depth32Bit
|
||||||
End If
|
.LargeImageList.ImageSize = New Size(DivideWithZeroChecking(Settings.MaxLargeImageHeight.Value, 100) * 75, Settings.MaxLargeImageHeight.Value)
|
||||||
End With
|
.SmallImageList.ImageSize = New Size(DivideWithZeroChecking(Settings.MaxSmallImageHeight.Value, 100) * 75, Settings.MaxSmallImageHeight.Value)
|
||||||
End Sub
|
End If
|
||||||
If MyList.InvokeRequired Then MyList.Invoke(a) Else a.Invoke
|
End With
|
||||||
If Settings.Users.Count > 0 Then
|
End Sub
|
||||||
Settings.Users.Sort()
|
If MyList.InvokeRequired Then MyList.Invoke(a) Else a.Invoke
|
||||||
Dim v As View = Settings.ViewMode.Value
|
If Settings.Users.Count > 0 Then
|
||||||
|
Settings.Users.Sort()
|
||||||
|
Dim v As View = Settings.ViewMode.Value
|
||||||
|
|
||||||
With MyList
|
With MyList
|
||||||
MyList.BeginUpdate()
|
MyList.BeginUpdate()
|
||||||
|
|
||||||
If Settings.FastProfilesLoading Then
|
If Settings.FastProfilesLoading Then
|
||||||
Settings.Users.ListReindex
|
Settings.Users.ListReindex
|
||||||
|
|
||||||
UserDataList = (From u As IUserData In Settings.Users Where u.FitToAddParams Select New UserOption(u, MyList)).ListIfNothing
|
UserDataList = (From u As IUserData In Settings.Users Where u.FitToAddParams Select New UserOption(u, MyList)).ListIfNothing
|
||||||
If UserDataList.ListExists Then UserDataList.Sort()
|
If UserDataList.ListExists Then UserDataList.Sort()
|
||||||
|
|
||||||
If UserDataList.ListExists Then
|
If UserDataList.ListExists Then
|
||||||
.Items.AddRange(UserDataList.Select(Function(u) u.LVI).ToArray)
|
.Items.AddRange(UserDataList.Select(Function(u) u.LVI).ToArray)
|
||||||
If Settings.ViewModeIsPicture Then MyList.EndUpdate() : UpdateImages() Else UserDataList.Clear()
|
|
||||||
End If
|
|
||||||
Else
|
|
||||||
Dim t As New List(Of Task)
|
|
||||||
For Each User As IUserData In Settings.Users
|
|
||||||
If User.FitToAddParams Then
|
|
||||||
If Settings.ViewModeIsPicture Then
|
If Settings.ViewModeIsPicture Then
|
||||||
t.Add(Task.Run(Sub() UpdateUser(User, True)))
|
MyList.EndUpdate()
|
||||||
|
UpdateImages()
|
||||||
Else
|
Else
|
||||||
UpdateUser(User, True)
|
UserDataList.Clear()
|
||||||
|
UpdateInProgress = False
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Next
|
Else
|
||||||
If t.Count > 0 Then Task.WhenAll(t.ToArray) : t.Clear()
|
Dim t As New List(Of Task)
|
||||||
End If
|
For Each User As IUserData In Settings.Users
|
||||||
End With
|
If User.FitToAddParams Then
|
||||||
MyList.EndUpdate()
|
If Settings.ViewModeIsPicture Then
|
||||||
|
t.Add(Task.Run(Sub() UpdateUser(User, True)))
|
||||||
|
Else
|
||||||
|
UpdateUser(User, True)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If t.Count > 0 Then Task.WhenAll(t.ToArray) : t.Clear()
|
||||||
|
UpdateInProgress = False
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
MyList.EndUpdate()
|
||||||
|
Else
|
||||||
|
UpdateInProgress = False
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
MsgBoxE({"User list update aborted. Click the 'Refresh' button to refresh the user list.", "Update user list"}, vbExclamation)
|
||||||
End If
|
End If
|
||||||
UpdateInProgress = False
|
Catch ex As Exception
|
||||||
Else
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[ListImagesLoader.Update]")
|
||||||
MsgBoxE({"The user list is currently being updated. Please wait for the update operation to complete and try again.", "Update user list"}, vbExclamation)
|
End Try
|
||||||
End If
|
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub UpdateUser(ByVal User As IUserData, ByVal Add As Boolean)
|
Friend Sub UpdateUser(ByVal User As IUserData, ByVal Add As Boolean)
|
||||||
Try
|
Try
|
||||||
@@ -170,9 +197,9 @@ Friend Class ListImagesLoader
|
|||||||
ElseIf CheckUserCollection(User) Then
|
ElseIf CheckUserCollection(User) Then
|
||||||
.BackColor = Color.LightSkyBlue
|
.BackColor = Color.LightSkyBlue
|
||||||
.ForeColor = Color.MidnightBlue
|
.ForeColor = Color.MidnightBlue
|
||||||
ElseIf Not IsInit Then
|
Else
|
||||||
.BackColor = SystemColors.Window
|
.BackColor = Settings.UserListBackColorF
|
||||||
.ForeColor = SystemColors.WindowText
|
.ForeColor = Settings.UserListForeColorF
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
Return LVI
|
Return LVI
|
||||||
|
|||||||
18
SCrawler/MainFrame.Designer.vb
generated
@@ -121,10 +121,10 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_TRAY_PAUSE_AUTOMATION = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_PAUSE_AUTOMATION = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_SILENT_MODE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_SILENT_MODE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_FEED_SHOW = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_FEED_SHOW = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_TRAY_CHANNELS = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_SHOW_HIDE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_SHOW_HIDE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_CLOSE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_CLOSE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_CLOSE_NO_SCRIPT = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_CLOSE_NO_SCRIPT = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_CHANNELS = New System.Windows.Forms.ToolStripMenuItem()
|
|
||||||
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
@@ -419,7 +419,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
'BTT_DOWN_VIDEO
|
'BTT_DOWN_VIDEO
|
||||||
'
|
'
|
||||||
Me.BTT_DOWN_VIDEO.AutoToolTip = True
|
Me.BTT_DOWN_VIDEO.AutoToolTip = True
|
||||||
Me.BTT_DOWN_VIDEO.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
|
Me.BTT_DOWN_VIDEO.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24
|
||||||
Me.BTT_DOWN_VIDEO.ImageTransparentColor = System.Drawing.Color.Magenta
|
Me.BTT_DOWN_VIDEO.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||||
Me.BTT_DOWN_VIDEO.Name = "BTT_DOWN_VIDEO"
|
Me.BTT_DOWN_VIDEO.Name = "BTT_DOWN_VIDEO"
|
||||||
Me.BTT_DOWN_VIDEO.Size = New System.Drawing.Size(231, 22)
|
Me.BTT_DOWN_VIDEO.Size = New System.Drawing.Size(231, 22)
|
||||||
@@ -856,6 +856,13 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_TRAY_FEED_SHOW.Text = "Feed"
|
Me.BTT_TRAY_FEED_SHOW.Text = "Feed"
|
||||||
Me.BTT_TRAY_FEED_SHOW.ToolTipText = "Show feed of recently downloaded data." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ctrl+Click the tray icon to show the feed" &
|
Me.BTT_TRAY_FEED_SHOW.ToolTipText = "Show feed of recently downloaded data." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Ctrl+Click the tray icon to show the feed" &
|
||||||
"."
|
"."
|
||||||
|
'
|
||||||
|
'BTT_TRAY_CHANNELS
|
||||||
|
'
|
||||||
|
Me.BTT_TRAY_CHANNELS.Image = Global.SCrawler.My.Resources.SiteResources.RedditPic_512
|
||||||
|
Me.BTT_TRAY_CHANNELS.Name = "BTT_TRAY_CHANNELS"
|
||||||
|
Me.BTT_TRAY_CHANNELS.Size = New System.Drawing.Size(170, 22)
|
||||||
|
Me.BTT_TRAY_CHANNELS.Text = "Channels"
|
||||||
'
|
'
|
||||||
'BTT_TRAY_SHOW_HIDE
|
'BTT_TRAY_SHOW_HIDE
|
||||||
'
|
'
|
||||||
@@ -885,13 +892,6 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_TRAY_CLOSE_NO_SCRIPT.ToolTipText = "Close the program without executing the script"
|
Me.BTT_TRAY_CLOSE_NO_SCRIPT.ToolTipText = "Close the program without executing the script"
|
||||||
Me.BTT_TRAY_CLOSE_NO_SCRIPT.Visible = False
|
Me.BTT_TRAY_CLOSE_NO_SCRIPT.Visible = False
|
||||||
'
|
'
|
||||||
'BTT_TRAY_CHANNELS
|
|
||||||
'
|
|
||||||
Me.BTT_TRAY_CHANNELS.Name = "BTT_TRAY_CHANNELS"
|
|
||||||
Me.BTT_TRAY_CHANNELS.Size = New System.Drawing.Size(170, 22)
|
|
||||||
Me.BTT_TRAY_CHANNELS.Text = "Channels"
|
|
||||||
Me.BTT_TRAY_CHANNELS.Image = Global.SCrawler.My.Resources.SiteResources.RedditPic_512
|
|
||||||
'
|
|
||||||
'MainFrame
|
'MainFrame
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ Imports System.Threading
|
|||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Functions.Messaging
|
Imports PersonalUtilities.Functions.Messaging
|
||||||
|
Imports PersonalUtilities.Tools
|
||||||
Imports SCrawler.API
|
Imports SCrawler.API
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.Editors
|
Imports SCrawler.Editors
|
||||||
@@ -36,7 +37,8 @@ Public Class MainFrame
|
|||||||
With Settings.Plugins
|
With Settings.Plugins
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
For i% = 0 To .Count - 1
|
For i% = 0 To .Count - 1
|
||||||
MENU_SETTINGS.DropDownItems.Insert(MENU_SETTINGS.DropDownItems.Count - 2, .Item(i).Settings.GetSettingsButton)
|
If Not .Item(i).Key = PathPlugin.PluginKey Then _
|
||||||
|
MENU_SETTINGS.DropDownItems.Insert(MENU_SETTINGS.DropDownItems.Count - 2, .Item(i).Settings.GetSettingsButton)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
@@ -88,33 +90,36 @@ Public Class MainFrame
|
|||||||
LIST_PROFILES.ShowGroups = .UseGrouping
|
LIST_PROFILES.ShowGroups = .UseGrouping
|
||||||
ApplyViewPattern(.ViewMode.Value)
|
ApplyViewPattern(.ViewMode.Value)
|
||||||
AddHandler .Labels.NewLabelAdded, AddressOf UpdateLabelsGroups
|
AddHandler .Labels.NewLabelAdded, AddressOf UpdateLabelsGroups
|
||||||
|
UpdateImageColor()
|
||||||
|
UserListLoader = New ListImagesLoader(LIST_PROFILES)
|
||||||
|
RefillList()
|
||||||
|
UpdateLabelsGroups()
|
||||||
|
SetShowButtonsCheckers(.ShowingMode.Value)
|
||||||
|
CheckVersion(False)
|
||||||
|
BTT_SITE_ALL.Checked = .SelectedSites.Count = 0
|
||||||
|
BTT_SITE_SPECIFIC.Checked = .SelectedSites.Count > 0
|
||||||
|
BTT_SHOW_LIMIT_DATES_NOT.Tag = ShowingDates.Not
|
||||||
|
BTT_SHOW_LIMIT_DATES_NOT.Checked = .ViewDateMode.Value = ShowingDates.Not
|
||||||
|
BTT_SHOW_LIMIT_DATES_IN.Tag = ShowingDates.In
|
||||||
|
BTT_SHOW_LIMIT_DATES_IN.Checked = .ViewDateMode.Value = ShowingDates.In
|
||||||
|
With .Groups
|
||||||
|
AddHandler .Added, AddressOf GROUPS_Added
|
||||||
|
AddHandler .Deleted, AddressOf GROUPS_Deleted
|
||||||
|
AddHandler .Updated, AddressOf GROUPS_Updated
|
||||||
|
If .Count > 0 Then
|
||||||
|
For Each ugroup As Groups.DownloadGroup In Settings.Groups : GROUPS_Added(ugroup) : Next
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
.Automation = New Scheduler
|
||||||
|
AddHandler .Groups.Updated, AddressOf .Automation.GROUPS_Updated
|
||||||
|
AddHandler .Groups.Deleted, AddressOf .Automation.GROUPS_Deleted
|
||||||
|
AddHandler .Automation.PauseDisabled, AddressOf MainFrameObj.PauseButtons.UpdatePauseButtons
|
||||||
|
If .Automation.Count > 0 Then .Labels.AddRange(.Automation.GetGroupsLabels, False) : .Labels.Update()
|
||||||
|
_UFinit = False
|
||||||
|
Await .Automation.Start(True)
|
||||||
End With
|
End With
|
||||||
UserListLoader = New ListImagesLoader(LIST_PROFILES)
|
|
||||||
RefillList()
|
|
||||||
UpdateLabelsGroups()
|
|
||||||
SetShowButtonsCheckers(Settings.ShowingMode.Value)
|
|
||||||
CheckVersion(False)
|
|
||||||
BTT_SITE_ALL.Checked = Settings.SelectedSites.Count = 0
|
|
||||||
BTT_SITE_SPECIFIC.Checked = Settings.SelectedSites.Count > 0
|
|
||||||
BTT_SHOW_LIMIT_DATES_NOT.Tag = ShowingDates.Not
|
|
||||||
BTT_SHOW_LIMIT_DATES_NOT.Checked = Settings.ViewDateMode.Value = ShowingDates.Not
|
|
||||||
BTT_SHOW_LIMIT_DATES_IN.Tag = ShowingDates.In
|
|
||||||
BTT_SHOW_LIMIT_DATES_IN.Checked = Settings.ViewDateMode.Value = ShowingDates.In
|
|
||||||
With Settings.Groups
|
|
||||||
AddHandler .Added, AddressOf GROUPS_Added
|
|
||||||
AddHandler .Deleted, AddressOf GROUPS_Deleted
|
|
||||||
AddHandler .Updated, AddressOf GROUPS_Updated
|
|
||||||
If .Count > 0 Then
|
|
||||||
For Each ugroup As Groups.DownloadGroup In Settings.Groups : GROUPS_Added(ugroup) : Next
|
|
||||||
End If
|
|
||||||
End With
|
|
||||||
Settings.Automation = New Scheduler
|
|
||||||
AddHandler Settings.Groups.Updated, AddressOf Settings.Automation.GROUPS_Updated
|
|
||||||
AddHandler Settings.Groups.Deleted, AddressOf Settings.Automation.GROUPS_Deleted
|
|
||||||
AddHandler Settings.Automation.PauseDisabled, AddressOf MainFrameObj.PauseButtons.UpdatePauseButtons
|
|
||||||
_UFinit = False
|
|
||||||
Await Settings.Automation.Start(True)
|
|
||||||
UpdatePauseButtonsVisibility()
|
UpdatePauseButtonsVisibility()
|
||||||
|
MainFrameObj.UpdateLogButton()
|
||||||
GoTo EndFunction
|
GoTo EndFunction
|
||||||
FormClosingInvoker:
|
FormClosingInvoker:
|
||||||
Close()
|
Close()
|
||||||
@@ -189,6 +194,25 @@ CloseResume:
|
|||||||
If Not _DisableClosingScript And Not _VideoDownloadingMode Then ExecuteCommand(Settings.ClosingCommand)
|
If Not _DisableClosingScript And Not _VideoDownloadingMode Then ExecuteCommand(Settings.ClosingCommand)
|
||||||
If Not MyMainLOG.IsEmptyString Then SaveLogToFile()
|
If Not MyMainLOG.IsEmptyString Then SaveLogToFile()
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub MainFrame_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
|
||||||
|
If Not _UFinit Then UpdateImageColor()
|
||||||
|
End Sub
|
||||||
|
Private Sub UpdateImageColor()
|
||||||
|
Try
|
||||||
|
If Settings.UserListImage.Value.Exists Then
|
||||||
|
Using ir As New ImageRenderer(Settings.UserListImage) : LIST_PROFILES.BackgroundImage = ir.FitToWidth(LIST_PROFILES.Width) : End Using
|
||||||
|
Else
|
||||||
|
LIST_PROFILES.BackgroundImage = Nothing
|
||||||
|
End If
|
||||||
|
With Settings
|
||||||
|
If Not .UserListBackColorF = LIST_PROFILES.BackColor Or Not .UserListForeColorF = LIST_PROFILES.ForeColor Then
|
||||||
|
LIST_PROFILES.BackColor = .UserListBackColorF
|
||||||
|
LIST_PROFILES.ForeColor = .UserListForeColorF
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Catch ex As Exception
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
Private Sub MainFrame_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
Private Sub MainFrame_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
||||||
Dim b As Boolean = True
|
Dim b As Boolean = True
|
||||||
Select Case e.KeyCode
|
Select Case e.KeyCode
|
||||||
@@ -271,6 +295,7 @@ CloseResume:
|
|||||||
LIST_PROFILES.ShowGroups = .UseGrouping
|
LIST_PROFILES.ShowGroups = .UseGrouping
|
||||||
If f.FeedParametersChanged And Not MyFeed Is Nothing Then MyFeed.UpdateSettings()
|
If f.FeedParametersChanged And Not MyFeed Is Nothing Then MyFeed.UpdateSettings()
|
||||||
UpdateSilentButtons()
|
UpdateSilentButtons()
|
||||||
|
UpdateImageColor()
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
End With
|
End With
|
||||||
@@ -338,8 +363,11 @@ CloseResume:
|
|||||||
.ScriptUse = f.ScriptUse
|
.ScriptUse = f.ScriptUse
|
||||||
.ScriptData = f.ScriptData
|
.ScriptData = f.ScriptData
|
||||||
If Not f.MyExchangeOptions Is Nothing Then DirectCast(.Self, UserDataBase).ExchangeOptionsSet(f.MyExchangeOptions)
|
If Not f.MyExchangeOptions Is Nothing Then DirectCast(.Self, UserDataBase).ExchangeOptionsSet(f.MyExchangeOptions)
|
||||||
Settings.Labels.Add(LabelsKeeper.NoParsedUser)
|
If Not .HOST.Key = PathPlugin.PluginKey Then
|
||||||
.Self.Labels.ListAddList(f.UserLabels.ListAddValue(LabelsKeeper.NoParsedUser), LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
Settings.Labels.Add(LabelsKeeper.NoParsedUser)
|
||||||
|
f.UserLabels.ListAddValue(LabelsKeeper.NoParsedUser)
|
||||||
|
End If
|
||||||
|
.Self.Labels.ListAddList(f.UserLabels, LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
||||||
.UpdateUserInformation()
|
.UpdateUserInformation()
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
@@ -612,7 +640,7 @@ CloseResume:
|
|||||||
BTT_SHOW_EXCLUDED_LABELS.Checked = Settings.Labels.Excluded.Count > 0
|
BTT_SHOW_EXCLUDED_LABELS.Checked = Settings.Labels.Excluded.Count > 0
|
||||||
BTT_SHOW_EXCLUDED_LABELS_IGNORE.Checked = Settings.Labels.ExcludedIgnore
|
BTT_SHOW_EXCLUDED_LABELS_IGNORE.Checked = Settings.Labels.ExcludedIgnore
|
||||||
End Sub
|
End Sub
|
||||||
Private Function OpenLabelsForm(ByRef ll As XML.Base.XMLValuesCollection(Of String)) As Boolean
|
Private Function OpenLabelsForm(ByRef ll As XML.Objects.XMLValuesCollection(Of String)) As Boolean
|
||||||
Using f As New LabelsForm(ll) With {.WithDeleteButton = True}
|
Using f As New LabelsForm(ll) With {.WithDeleteButton = True}
|
||||||
f.ShowDialog()
|
f.ShowDialog()
|
||||||
If f.DialogResult = DialogResult.OK Then
|
If f.DialogResult = DialogResult.OK Then
|
||||||
@@ -881,6 +909,23 @@ CloseResume:
|
|||||||
Else
|
Else
|
||||||
__ModelAskForDecision = True
|
__ModelAskForDecision = True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
If (users.Count = 1 AndAlso Not users(0).IsCollection AndAlso users(0).HOST.Key = PathPlugin.PluginKey) OrElse
|
||||||
|
(users.Count = 2 AndAlso users.All(Function(u) u.IsCollection OrElse u.HOST.Key = PathPlugin.PluginKey)) Then
|
||||||
|
__modelUser = UsageModel.Virtual
|
||||||
|
If Added Then
|
||||||
|
__modelCollection = UsageModel.Virtual
|
||||||
|
Else
|
||||||
|
i = users.FindIndex(_col_user)
|
||||||
|
If i >= 0 Then
|
||||||
|
__modelCollection = users(i).CollectionModel
|
||||||
|
Else
|
||||||
|
__modelCollection = UsageModel.Virtual
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
__ModelAskForDecision = False
|
||||||
|
End If
|
||||||
|
|
||||||
If __ModelAskForDecision Then
|
If __ModelAskForDecision Then
|
||||||
Select Case MsgBoxE({"How do you want to add users to the collection?", MsgTitle}, vbQuestion,,,
|
Select Case MsgBoxE({"How do you want to add users to the collection?", MsgTitle}, vbQuestion,,,
|
||||||
{
|
{
|
||||||
@@ -908,7 +953,7 @@ CloseResume:
|
|||||||
For Each user As UserDataBase In users
|
For Each user As UserDataBase In users
|
||||||
If Not user.IsCollection Then
|
If Not user.IsCollection Then
|
||||||
Try
|
Try
|
||||||
user.User.UserModel = __modelUser
|
user.User.UserModel = IIf(user.HOST.Key = PathPlugin.PluginKey, UsageModel.Virtual, __modelUser)
|
||||||
user.User.CollectionModel = __modelCollection
|
user.User.CollectionModel = __modelCollection
|
||||||
userCollection.Add(user)
|
userCollection.Add(user)
|
||||||
RemoveUserFromList(user)
|
RemoveUserFromList(user)
|
||||||
@@ -1005,10 +1050,10 @@ CloseResume:
|
|||||||
Exit Sub
|
Exit Sub
|
||||||
End If
|
End If
|
||||||
CurrDir = CurrDir.CutPath(IIf(.DataMerging, 3, 2))
|
CurrDir = CurrDir.CutPath(IIf(.DataMerging, 3, 2))
|
||||||
colName = CurrDir.PathFolders.LastOrDefault
|
colName = CurrDir.Segments.LastOrDefault
|
||||||
Dim vu As IEnumerable(Of IUserData) = .Where(Function(vuu) vuu.UserModel = UsageModel.Virtual)
|
Dim vu As IEnumerable(Of IUserData) = .Where(Function(vuu) vuu.UserModel = UsageModel.Virtual Or vuu.HOST.Key = PathPlugin.PluginKey)
|
||||||
If vu.ListExists Then
|
If vu.ListExists Then
|
||||||
If MsgBoxE({"This collection contains virtual users." & vbCr &
|
If MsgBoxE({"This collection contains virtual users and/or paths." & vbCr &
|
||||||
"If you continue, the virtual user paths will not be changed." & vbCr &
|
"If you continue, the virtual user paths will not be changed." & vbCr &
|
||||||
"The following users have been added to the collection in virtual mode:" & vbCr &
|
"The following users have been added to the collection in virtual mode:" & vbCr &
|
||||||
vu.ListToStringE(vbCr, GetUserListProvider(False)), MsgTitle},
|
vu.ListToStringE(vbCr, GetUserListProvider(False)), MsgTitle},
|
||||||
@@ -1016,17 +1061,29 @@ CloseResume:
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
|
ElseIf .HOST.Key = PathPlugin.PluginKey Then
|
||||||
|
MsgBoxE({"This is the path (not user). The paths cannot be changed.", MsgTitle}, vbCritical)
|
||||||
|
Exit Sub
|
||||||
Else
|
Else
|
||||||
CurrDir = .Self.File.CutPath(1)
|
CurrDir = .Self.File.CutPath(1)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Dim NewDest As SFile = SFile.SelectPath(CurrDir, $"Select a new destination for {IIf(_IsCollection, "collection", "user")} [{ .Self}]")
|
Dim NewDest As SFile = SFile.SelectPath(CurrDir, $"Select a new destination for {IIf(_IsCollection, "collection", "user")} [{ .Self}]")
|
||||||
|
Dim NewDest2 As SFile
|
||||||
If Not NewDest.IsEmptyString Then
|
If Not NewDest.IsEmptyString Then
|
||||||
NewDest = $"{NewDest.PathWithSeparator}{colName}\"
|
NewDest = $"{NewDest.PathWithSeparator}{colName}\"
|
||||||
If MsgBoxE({$"You are changing the user's [{ .Self}] destination" & vbCr &
|
NewDest2 = $"{NewDest.PathWithSeparator}{CurrDir.Segments.LastOrDefault().StringAppend("\", String.Empty)}"
|
||||||
$"Current destination: {CurrDir.PathNoSeparator}" & vbCr &
|
Dim choice% = MsgBoxE(New MMessage($"You are changing the user's [{ .Self}] destination" & vbCr &
|
||||||
$"New destination: {NewDest.PathNoSeparator}",
|
$"Current destination: {CurrDir.PathNoSeparator}" & vbCr &
|
||||||
MsgTitle}, MsgBoxStyle.Exclamation,,, {"Confirm", "Cancel"}) = 0 Then
|
$"New destination [1]: {NewDest.PathNoSeparator}" & vbCr &
|
||||||
|
$"New destination [2]: {NewDest2.PathWithSeparator}",
|
||||||
|
MsgTitle,
|
||||||
|
{New MsgBoxButton("Confirm [1] (Enter)", "Move the data to the destination [1]."),
|
||||||
|
New MsgBoxButton("Confirm [2]", "Move the data to the destination [2].") With {.KeyCode = Keys.D2},
|
||||||
|
"Cancel"},
|
||||||
|
MsgBoxStyle.Exclamation) With {.AppendKeyCode = False})
|
||||||
|
If choice < 2 Then
|
||||||
|
If choice = 1 Then NewDest = NewDest2
|
||||||
If Not NewDest.IsEmptyString AndAlso
|
If Not NewDest.IsEmptyString AndAlso
|
||||||
(Not NewDest.Exists(SFO.Path, False) OrElse
|
(Not NewDest.Exists(SFO.Path, False) OrElse
|
||||||
(
|
(
|
||||||
@@ -1395,6 +1452,7 @@ ResumeDownloadingOperation:
|
|||||||
If result < 6 Then
|
If result < 6 Then
|
||||||
Dim collectionResult% = -1
|
Dim collectionResult% = -1
|
||||||
Dim tmpResult%
|
Dim tmpResult%
|
||||||
|
Dim tmpUserNames As New List(Of String)
|
||||||
Dim IsMultiple As Boolean = users.Count > 1
|
Dim IsMultiple As Boolean = users.Count > 1
|
||||||
Dim removedUsers As New List(Of String)
|
Dim removedUsers As New List(Of String)
|
||||||
Dim keepData As Boolean = Not (result Mod 2) = 0
|
Dim keepData As Boolean = Not (result Mod 2) = 0
|
||||||
@@ -1429,10 +1487,18 @@ ResumeDownloadingOperation:
|
|||||||
removedUsers.Add(ugn(user))
|
removedUsers.Add(ugn(user))
|
||||||
user.Dispose()
|
user.Dispose()
|
||||||
Else
|
Else
|
||||||
|
If banUser Then
|
||||||
|
tmpUserNames.Clear()
|
||||||
|
If user.IsCollection Then
|
||||||
|
tmpUserNames.ListAddList(DirectCast(user, UserDataBind).Collections.Select(Function(u) u.Name), l)
|
||||||
|
Else
|
||||||
|
tmpUserNames.Add(user.Name)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
tmpResult = user.Delete(IsMultiple, collectionResult)
|
tmpResult = user.Delete(IsMultiple, collectionResult)
|
||||||
If user.IsCollection And collectionResult = -1 Then collectionResult = tmpResult
|
If user.IsCollection And collectionResult = -1 Then collectionResult = tmpResult
|
||||||
If tmpResult > 0 Then
|
If tmpResult > 0 Then
|
||||||
If banUser Then Settings.BlackList.ListAddValue(New UserBan(user.Name, reason), l) : b = True
|
If banUser And tmpUserNames.Count > 0 Then Settings.BlackList.ListAddList(tmpUserNames.Select(Function(u) New UserBan(u, reason)), l) : b = True
|
||||||
RemoveUserFromList(user)
|
RemoveUserFromList(user)
|
||||||
removedUsers.Add(ugn(user))
|
removedUsers.Add(ugn(user))
|
||||||
Else
|
Else
|
||||||
@@ -1613,7 +1679,7 @@ ResumeDownloadingOperation:
|
|||||||
Private Sub Downloader_Downloading(ByVal Value As Boolean)
|
Private Sub Downloader_Downloading(ByVal Value As Boolean)
|
||||||
Dim __isDownloading As Boolean = Value Or Downloader.Working
|
Dim __isDownloading As Boolean = Value Or Downloader.Working
|
||||||
ControlInvokeFast(Toolbar_TOP, BTT_DOWN_STOP, Sub() BTT_DOWN_STOP.Enabled = __isDownloading)
|
ControlInvokeFast(Toolbar_TOP, BTT_DOWN_STOP, Sub() BTT_DOWN_STOP.Enabled = __isDownloading)
|
||||||
ControlInvokeFast(Me, Sub() TrayIcon.Icon = If(__isDownloading, My.Resources.ArrowDownIcon_Blue_24, My.Resources.RainbowIcon_48))
|
TrayIcon.Icon = If(__isDownloading, My.Resources.ArrowDownIcon_Blue_24, My.Resources.RainbowIcon_48)
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
@@ -74,14 +74,18 @@ Friend Class MainFrameObjects
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub Notificator_OnClicked(ByVal Key As String) Handles Notificator.OnClicked
|
Private Sub Notificator_OnClicked(ByVal Key As String) Handles Notificator.OnClicked
|
||||||
If Not Key.IsEmptyString Then
|
If Not Key.IsEmptyString Then
|
||||||
|
Dim found As Boolean = False
|
||||||
|
Dim activateForm As Boolean = False
|
||||||
If Key.StartsWith(NotificationInternalKey) Then
|
If Key.StartsWith(NotificationInternalKey) Then
|
||||||
Select Case Key
|
Select Case Key
|
||||||
Case $"{NotificationInternalKey}_{NotifyObj.Channels}" : MF.MyChannels.FormShowS()
|
Case $"{NotificationInternalKey}_{NotifyObj.Channels}" : MF.MyChannels.FormShowS()
|
||||||
Case $"{NotificationInternalKey}_{NotifyObj.SavedPosts}" : MF.MySavedPosts.FormShowS()
|
Case $"{NotificationInternalKey}_{NotifyObj.SavedPosts}" : MF.MySavedPosts.FormShowS()
|
||||||
Case Else : Focus(True)
|
Case Else : Focus(True)
|
||||||
End Select
|
End Select
|
||||||
ElseIf Settings.Automation Is Nothing OrElse Not Settings.Automation.NotificationClicked(Key) Then
|
ElseIf Settings.Automation Is Nothing OrElse Not Settings.Automation.NotificationClicked(Key, found, activateForm) Then
|
||||||
Focus(True)
|
Focus(True)
|
||||||
|
ElseIf found Then
|
||||||
|
Focus(activateForm)
|
||||||
Else
|
Else
|
||||||
Focus(True)
|
Focus(True)
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
'
|
'
|
||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports System.Runtime.CompilerServices
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools
|
||||||
@@ -103,10 +104,11 @@ Friend Module MainMod
|
|||||||
Friend UserListLoader As ListImagesLoader
|
Friend UserListLoader As ListImagesLoader
|
||||||
Friend MyProgressForm As ActiveDownloadingProgress
|
Friend MyProgressForm As ActiveDownloadingProgress
|
||||||
Friend MainFrameObj As MainFrameObjects
|
Friend MainFrameObj As MainFrameObjects
|
||||||
Friend ReadOnly ParsersDataDateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
|
Friend ReadOnly DateTimeDefaultProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
|
||||||
Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan}
|
Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan}
|
||||||
Friend ReadOnly UserExistsPredicate As New FPredicate(Of IUserData)(Function(u) u.Exists)
|
Friend ReadOnly UserExistsPredicate As New FPredicate(Of IUserData)(Function(u) u.Exists)
|
||||||
Friend ReadOnly LogConnector As New LogHost
|
Friend ReadOnly LogConnector As New LogHost
|
||||||
|
Friend DefaultUserAgent As String = String.Empty
|
||||||
#Region "File name operations"
|
#Region "File name operations"
|
||||||
Friend FileDateAppenderProvider As IFormatProvider
|
Friend FileDateAppenderProvider As IFormatProvider
|
||||||
''' <summary>File, Date</summary>
|
''' <summary>File, Date</summary>
|
||||||
@@ -147,6 +149,14 @@ Friend Module MainMod
|
|||||||
Return $"{If(Host?.Name, String.Empty)}{Opt}"
|
Return $"{If(Host?.Name, String.Empty)}{Opt}"
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
<Extension> Friend Function GetGroupsLabels(Of T As Groups.IGroup)(ByVal Groups As IEnumerable(Of T)) As List(Of String)
|
||||||
|
If Groups.ListExists Then
|
||||||
|
Return ListAddList(Nothing, Groups.SelectMany(Function(g) g.Labels), LAP.NotContainsOnly).
|
||||||
|
ListAddList(Groups.SelectMany(Function(g) g.LabelsExcluded), LAP.NotContainsOnly)
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
#Region "Standalone video download functions"
|
#Region "Standalone video download functions"
|
||||||
Friend Function GetCurrentBuffer() As String
|
Friend Function GetCurrentBuffer() As String
|
||||||
Dim b$ = BufferText
|
Dim b$ = BufferText
|
||||||
@@ -178,6 +188,7 @@ Friend Module MainMod
|
|||||||
If Not found Then
|
If Not found Then
|
||||||
If URL.Contains("gfycat") Then
|
If URL.Contains("gfycat") Then
|
||||||
um = Gfycat.Envir.GetVideoInfo(URL)
|
um = Gfycat.Envir.GetVideoInfo(URL)
|
||||||
|
If um.ListExists AndAlso um(0).URL.Contains("redgifs.com") Then Return DownloadVideoByURL(um(0).URL, AskForPath, Silent)
|
||||||
ElseIf URL.Contains("imgur.com") Then
|
ElseIf URL.Contains("imgur.com") Then
|
||||||
um = Imgur.Envir.GetVideoInfo(URL)
|
um = Imgur.Envir.GetVideoInfo(URL)
|
||||||
Else
|
Else
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2022.12.26.0")>
|
<Assembly: AssemblyVersion("2023.3.5.0")>
|
||||||
<Assembly: AssemblyFileVersion("2022.12.26.0")>
|
<Assembly: AssemblyFileVersion("2023.3.5.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
Imports System.Reflection
|
Imports System.Reflection
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Tools.WEB.GitHub
|
Imports PersonalUtilities.Tools.WEB.GitHub
|
||||||
Namespace Plugin.Hosts
|
Namespace Plugin.Hosts
|
||||||
Friend Class PluginHost
|
Friend Class PluginHost
|
||||||
@@ -83,7 +83,8 @@ Namespace Plugin.Hosts
|
|||||||
New PluginHost(New API.LPSG.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
New PluginHost(New API.LPSG.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
||||||
New PluginHost(New API.PornHub.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
New PluginHost(New API.PornHub.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
||||||
New PluginHost(New API.Xhamster.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
New PluginHost(New API.Xhamster.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
||||||
New PluginHost(New API.XVIDEOS.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids)}
|
New PluginHost(New API.XVIDEOS.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids),
|
||||||
|
New PluginHost(New API.PathPlugin.SiteSettings, _XML, GlobalPath, _Temp, _Imgs, _Vids)}
|
||||||
End Function
|
End Function
|
||||||
Friend Shared Function GetPluginsHosts(ByRef _XML As XmlFile, ByVal GlobalPath As SFile,
|
Friend Shared Function GetPluginsHosts(ByRef _XML As XmlFile, ByVal GlobalPath As SFile,
|
||||||
ByRef _Temp As XMLValue(Of Boolean), ByRef _Imgs As XMLValue(Of Boolean),
|
ByRef _Temp As XMLValue(Of Boolean), ByRef _Imgs As XMLValue(Of Boolean),
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
Imports System.Reflection
|
Imports System.Reflection
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Controls
|
Imports PersonalUtilities.Forms.Controls
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
@@ -76,6 +77,7 @@ Namespace Plugin.Hosts
|
|||||||
.EndInit(True)
|
.EndInit(True)
|
||||||
End With
|
End With
|
||||||
AddHandler .ActionOnButtonClick, AddressOf TextBoxClick
|
AddHandler .ActionOnButtonClick, AddressOf TextBoxClick
|
||||||
|
If Not ProviderValue Is Nothing AndAlso ProviderValueInteraction Then AddHandler .ActionOnTextChanged, AddressOf TextBoxTextChanged
|
||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@@ -98,6 +100,14 @@ Namespace Plugin.Hosts
|
|||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, $"Updating [{Name}] property")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, $"Updating [{Name}] property")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub TextBoxTextChanged(ByVal Sender As Object, ByVal e As EventArgs)
|
||||||
|
UpdateProviderPropertyName()
|
||||||
|
With DirectCast(Sender, TextBoxExtended)
|
||||||
|
Dim s% = .SelectionStart
|
||||||
|
Dim t$ = AConvert(Of String)(.Text, ProviderValue, String.Empty)
|
||||||
|
If Not t = .Text Then .Text = t : .Select(s, 0)
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
Friend Sub UpdateValueByControl()
|
Friend Sub UpdateValueByControl()
|
||||||
If Not Control Is Nothing AndAlso Not TypeOf Control Is Label Then
|
If Not Control Is Nothing AndAlso Not TypeOf Control Is Label Then
|
||||||
If TypeOf Control Is CheckBox Then
|
If TypeOf Control Is CheckBox Then
|
||||||
@@ -105,6 +115,7 @@ Namespace Plugin.Hosts
|
|||||||
If Options.ThreeStates Then Value = CInt(.CheckState) Else Value = .Checked
|
If Options.ThreeStates Then Value = CInt(.CheckState) Else Value = .Checked
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
|
UpdateProviderPropertyName()
|
||||||
Value = AConvert(DirectCast(Control, TextBoxExtended).Text, AModes.Var, [Type],,,, ProviderValue)
|
Value = AConvert(DirectCast(Control, TextBoxExtended).Text, AModes.Var, [Type],,,, ProviderValue)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@@ -116,12 +127,16 @@ Namespace Plugin.Hosts
|
|||||||
If Options.ThreeStates Then Return CInt(.CheckState) Else Return .Checked
|
If Options.ThreeStates Then Return CInt(.CheckState) Else Return .Checked
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
|
UpdateProviderPropertyName()
|
||||||
Return AConvert(DirectCast(Control, TextBoxExtended).Text, AModes.Var, [Type],,,, ProviderValue)
|
Return AConvert(DirectCast(Control, TextBoxExtended).Text, AModes.Var, [Type],,,, ProviderValue)
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
Private Sub UpdateProviderPropertyName()
|
||||||
|
If ProviderValueIsPropertyProvider Then DirectCast(ProviderValue, IPropertyProvider).PropertyName = Name
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Compatibility"
|
#Region "Compatibility"
|
||||||
Private ReadOnly Source As Object
|
Private ReadOnly Source As Object
|
||||||
@@ -143,9 +158,17 @@ Namespace Plugin.Hosts
|
|||||||
End Property
|
End Property
|
||||||
#Region "Providers"
|
#Region "Providers"
|
||||||
Friend Property ProviderFieldsChecker As IFormatProvider
|
Friend Property ProviderFieldsChecker As IFormatProvider
|
||||||
Friend Property ProviderValue As IFormatProvider
|
Private Property ProviderValue As IFormatProvider
|
||||||
Friend Sub SetProvider(ByVal Provider As IFormatProvider, ByVal FC As Boolean)
|
Private Property ProviderValueInteraction As Boolean = False
|
||||||
If FC Then ProviderFieldsChecker = Provider Else ProviderValue = Provider
|
Private Property ProviderValueIsPropertyProvider As Boolean = False
|
||||||
|
Friend Sub SetProvider(ByVal Provider As IFormatProvider, ByVal Instance As Provider)
|
||||||
|
If Instance.FieldsChecker Then
|
||||||
|
ProviderFieldsChecker = Provider
|
||||||
|
Else
|
||||||
|
ProviderValue = Provider
|
||||||
|
ProviderValueIsPropertyProvider = TypeOf ProviderValue Is IPropertyProvider
|
||||||
|
ProviderValueInteraction = Instance.Interaction
|
||||||
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
Friend PropertiesChecking As String()
|
Friend PropertiesChecking As String()
|
||||||
@@ -178,7 +201,7 @@ Namespace Plugin.Hosts
|
|||||||
Options = Member.GetCustomAttribute(Of PropertyOption)()
|
Options = Member.GetCustomAttribute(Of PropertyOption)()
|
||||||
IsTaskCounter = Not Member.GetCustomAttribute(Of TaskCounter)() Is Nothing
|
IsTaskCounter = Not Member.GetCustomAttribute(Of TaskCounter)() Is Nothing
|
||||||
_XmlName = If(Member.GetCustomAttribute(Of PXML)()?.ElementName, String.Empty)
|
_XmlName = If(Member.GetCustomAttribute(Of PXML)()?.ElementName, String.Empty)
|
||||||
If Not _XmlName.IsEmptyString Then XValue = XMLValueBase.CreateInstance([Type])
|
If Not _XmlName.IsEmptyString Then XValue = CreateXMLValueInstance([Type], True)
|
||||||
Exists = True
|
Exists = True
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Imports SCrawler.API.Base
|
|||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
||||||
Namespace Plugin.Hosts
|
Namespace Plugin.Hosts
|
||||||
@@ -204,7 +205,7 @@ Namespace Plugin.Hosts
|
|||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
ElseIf m.MemberType = MemberTypes.Property Then
|
ElseIf m.MemberType = MemberTypes.Property Then
|
||||||
If Not m.GetCustomAttribute(Of Provider)() Is Nothing Then Providers.Add(m)
|
If m.GetCustomAttributes(Of Provider)().ListExists Then Providers.Add(m)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
@@ -220,13 +221,15 @@ Namespace Plugin.Hosts
|
|||||||
Updaters.Clear()
|
Updaters.Clear()
|
||||||
End If
|
End If
|
||||||
If Providers.Count > 0 Then
|
If Providers.Count > 0 Then
|
||||||
Dim prov As Provider
|
Dim prov As IEnumerable(Of Provider)
|
||||||
|
Dim _prov As Provider
|
||||||
For Each m In Providers
|
For Each m In Providers
|
||||||
prov = m.GetCustomAttribute(Of Provider)()
|
prov = m.GetCustomAttributes(Of Provider)()
|
||||||
i = PropList.FindIndex(Function(p) p.Name = prov.Name)
|
If prov.ListExists Then
|
||||||
If i >= 0 Then
|
For Each _prov In prov
|
||||||
PropList(i).SetProvider(DirectCast(DirectCast(m, PropertyInfo).GetValue(Source), IFormatProvider),
|
i = PropList.FindIndex(Function(p) p.Name = _prov.Name)
|
||||||
m.GetCustomAttribute(Of Provider)().FieldsChecker)
|
If i >= 0 Then PropList(i).SetProvider(DirectCast(DirectCast(m, PropertyInfo).GetValue(Source), IFormatProvider), _prov)
|
||||||
|
Next
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
Providers.Clear()
|
Providers.Clear()
|
||||||
@@ -249,8 +252,8 @@ Namespace Plugin.Hosts
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
_Path = New XMLValue(Of SFile)("Path",, _XML, n, New XMLValueBase.ToFilePath)
|
_Path = New XMLValue(Of SFile)("Path",, _XML, n, New XMLToFilePathProvider)
|
||||||
_SavedPostsPath = New XMLValue(Of SFile)("SavedPostsPath",, _XML, n, New XMLValueBase.ToFilePath)
|
_SavedPostsPath = New XMLValue(Of SFile)("SavedPostsPath",, _XML, n, New XMLToFilePathProvider)
|
||||||
|
|
||||||
Temporary = New XMLValue(Of Boolean)
|
Temporary = New XMLValue(Of Boolean)
|
||||||
Temporary.SetExtended("Temporary", False, _XML, n)
|
Temporary.SetExtended("Temporary", False, _XML, n)
|
||||||
|
|||||||
@@ -175,6 +175,9 @@
|
|||||||
<Compile Include="API\LPSG\Declarations.vb" />
|
<Compile Include="API\LPSG\Declarations.vb" />
|
||||||
<Compile Include="API\LPSG\SiteSettings.vb" />
|
<Compile Include="API\LPSG\SiteSettings.vb" />
|
||||||
<Compile Include="API\LPSG\UserData.vb" />
|
<Compile Include="API\LPSG\UserData.vb" />
|
||||||
|
<Compile Include="API\PathPlugin\Declarations.vb" />
|
||||||
|
<Compile Include="API\PathPlugin\SiteSettings.vb" />
|
||||||
|
<Compile Include="API\PathPlugin\UserData.vb" />
|
||||||
<Compile Include="API\PornHub\Declarations.vb" />
|
<Compile Include="API\PornHub\Declarations.vb" />
|
||||||
<Compile Include="API\PornHub\M3U8.vb" />
|
<Compile Include="API\PornHub\M3U8.vb" />
|
||||||
<Compile Include="API\PornHub\OptionsForm.Designer.vb">
|
<Compile Include="API\PornHub\OptionsForm.Designer.vb">
|
||||||
@@ -196,6 +199,13 @@
|
|||||||
<Compile Include="API\TikTok\Declarations.vb" />
|
<Compile Include="API\TikTok\Declarations.vb" />
|
||||||
<Compile Include="API\TikTok\SiteSettings.vb" />
|
<Compile Include="API\TikTok\SiteSettings.vb" />
|
||||||
<Compile Include="API\TikTok\UserData.vb" />
|
<Compile Include="API\TikTok\UserData.vb" />
|
||||||
|
<Compile Include="API\Twitter\EditorExchangeOptions.vb" />
|
||||||
|
<Compile Include="API\Twitter\OptionsForm.Designer.vb">
|
||||||
|
<DependentUpon>OptionsForm.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="API\Twitter\OptionsForm.vb">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="API\Xhamster\Declarations.vb" />
|
<Compile Include="API\Xhamster\Declarations.vb" />
|
||||||
<Compile Include="API\Xhamster\M3U8.vb" />
|
<Compile Include="API\Xhamster\M3U8.vb" />
|
||||||
<Compile Include="API\Xhamster\SiteSettings.vb" />
|
<Compile Include="API\Xhamster\SiteSettings.vb" />
|
||||||
@@ -263,6 +273,12 @@
|
|||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Download\WebClient2.vb" />
|
<Compile Include="Download\WebClient2.vb" />
|
||||||
|
<Compile Include="Editors\ColorPicker.Designer.vb">
|
||||||
|
<DependentUpon>ColorPicker.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Editors\ColorPicker.vb">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="EncryptCookies.vb" />
|
<Compile Include="EncryptCookies.vb" />
|
||||||
<Compile Include="GlobalSuppressions.vb" />
|
<Compile Include="GlobalSuppressions.vb" />
|
||||||
<Compile Include="MainFrameObjects.vb" />
|
<Compile Include="MainFrameObjects.vb" />
|
||||||
@@ -416,6 +432,9 @@
|
|||||||
<EmbeddedResource Include="API\Reddit\RedditViewSettingsForm.resx">
|
<EmbeddedResource Include="API\Reddit\RedditViewSettingsForm.resx">
|
||||||
<DependentUpon>RedditViewSettingsForm.vb</DependentUpon>
|
<DependentUpon>RedditViewSettingsForm.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="API\Twitter\OptionsForm.resx">
|
||||||
|
<DependentUpon>OptionsForm.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Channels\ChannelsStatsForm.resx">
|
<EmbeddedResource Include="Channels\ChannelsStatsForm.resx">
|
||||||
<DependentUpon>ChannelsStatsForm.vb</DependentUpon>
|
<DependentUpon>ChannelsStatsForm.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -455,6 +474,9 @@
|
|||||||
<EmbeddedResource Include="Editors\CollectionEditorForm.resx">
|
<EmbeddedResource Include="Editors\CollectionEditorForm.resx">
|
||||||
<DependentUpon>CollectionEditorForm.vb</DependentUpon>
|
<DependentUpon>CollectionEditorForm.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Editors\ColorPicker.resx">
|
||||||
|
<DependentUpon>ColorPicker.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Editors\GlobalSettingsForm.resx">
|
<EmbeddedResource Include="Editors\GlobalSettingsForm.resx">
|
||||||
<DependentUpon>GlobalSettingsForm.vb</DependentUpon>
|
<DependentUpon>GlobalSettingsForm.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
Imports PersonalUtilities.Functions.Messaging
|
Imports PersonalUtilities.Functions.Messaging
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
|
Imports PersonalUtilities.Functions.XML.Objects
|
||||||
Imports PersonalUtilities.Forms.Controls
|
Imports PersonalUtilities.Forms.Controls
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
Imports SCrawler.API
|
Imports SCrawler.API
|
||||||
@@ -23,13 +24,10 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword"
|
Friend Const CookieEncryptKey As String = "SCrawlerCookiesEncryptKeyword"
|
||||||
Friend ReadOnly Design As XmlFile
|
Friend ReadOnly Design As XmlFile
|
||||||
Private ReadOnly MyXML As XmlFile
|
Private ReadOnly MyXML As XmlFile
|
||||||
Private ReadOnly OS64 As Boolean
|
|
||||||
Private ReadOnly FfmpegExists As Boolean
|
Private ReadOnly FfmpegExists As Boolean
|
||||||
Friend ReadOnly FfmpegFile As SFile
|
Friend ReadOnly FfmpegFile As SFile
|
||||||
Friend ReadOnly Property UseM3U8 As Boolean
|
Friend ReadOnly Property UseM3U8 As Boolean
|
||||||
Get
|
Get
|
||||||
'TODELETE: SETTINGS m3u8 delete after debug ffmpeg x86
|
|
||||||
'Return OS64 And FfmpegExists
|
|
||||||
Return FfmpegExists
|
Return FfmpegExists
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
@@ -69,7 +67,6 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
RemoveUnusedPlugins()
|
RemoveUnusedPlugins()
|
||||||
OS64 = Environment.Is64BitOperatingSystem
|
|
||||||
FfmpegFile = "ffmpeg.exe"
|
FfmpegFile = "ffmpeg.exe"
|
||||||
FfmpegExists = FfmpegFile.Exists
|
FfmpegExists = FfmpegFile.Exists
|
||||||
|
|
||||||
@@ -83,20 +80,17 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
LastCollections = New List(Of String)
|
LastCollections = New List(Of String)
|
||||||
|
|
||||||
FFMPEGNotification = New XMLValue(Of Boolean)("FFMPEGNotification", True, MyXML)
|
FFMPEGNotification = New XMLValue(Of Boolean)("FFMPEGNotification", True, MyXML)
|
||||||
If OS64 And Not FfmpegExists Then
|
If Not FfmpegExists Then
|
||||||
If FFMPEGNotification.Value AndAlso MsgBoxE(New MMessage("[ffmpeg.exe] is missing", "ffmpeg.exe",
|
If FFMPEGNotification.Value AndAlso
|
||||||
{"OK", New MsgBoxButton("Disable notification") With {
|
MsgBoxE({"[ffmpeg.exe] is missing", "ffmpeg.exe"}, vbExclamation,,,
|
||||||
.IsDialogResultButton = False, .ToolTip = "Disable ffmpeg missing notification"}}, vbExclamation) With {
|
{"OK", New MsgBoxButton("Disable notification", "Disable ffmpeg missing notification")}) = 1 Then FFMPEGNotification.Value = False
|
||||||
.DefaultButton = 0, .CancelButton = 0}) = 1 Then
|
|
||||||
FFMPEGNotification.Value = False
|
|
||||||
End If
|
|
||||||
Else
|
Else
|
||||||
FFMPEGNotification.Value = True
|
FFMPEGNotification.Value = True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
GlobalPath = New XMLValue(Of SFile)("GlobalPath", New SFile($"{SFile.GetPath(Application.StartupPath).PathWithSeparator}Data\"), MyXML,,
|
GlobalPath = New XMLValue(Of SFile)("GlobalPath", New SFile($"{SFile.GetPath(Application.StartupPath).PathWithSeparator}Data\"), MyXML,,
|
||||||
New XMLValueBase.ToFilePath)
|
New XMLToFilePathProvider)
|
||||||
LastCopyPath = New XMLValue(Of SFile)("LastCopyPath",, MyXML,, New XMLValueBase.ToFilePath)
|
LastCopyPath = New XMLValue(Of SFile)("LastCopyPath",, MyXML,, New XMLToFilePathProvider)
|
||||||
|
|
||||||
CookiesEncrypted = New XMLValue(Of Boolean)("CookiesEncrypted", False, MyXML)
|
CookiesEncrypted = New XMLValue(Of Boolean)("CookiesEncrypted", False, MyXML)
|
||||||
EncryptCookies.CookiesEncrypted = CookiesEncrypted
|
EncryptCookies.CookiesEncrypted = CookiesEncrypted
|
||||||
@@ -104,6 +98,9 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML)
|
SeparateVideoFolder = New XMLValue(Of Boolean)("SeparateVideoFolder", True, MyXML)
|
||||||
CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML)
|
CollectionsPath = New XMLValue(Of String)("CollectionsPath", "Collections", MyXML)
|
||||||
|
|
||||||
|
UserAgent = New XMLValue(Of String)("UserAgent",, MyXML)
|
||||||
|
If Not UserAgent.IsEmptyString Then DefaultUserAgent = UserAgent
|
||||||
|
|
||||||
Dim n() As String = {"Search"}
|
Dim n() As String = {"Search"}
|
||||||
SearchInName = New XMLValue(Of Boolean)("SearchInName", True, MyXML, n)
|
SearchInName = New XMLValue(Of Boolean)("SearchInName", True, MyXML, n)
|
||||||
SearchInDescription = New XMLValue(Of Boolean)("SearchInDescription", False, MyXML, n)
|
SearchInDescription = New XMLValue(Of Boolean)("SearchInDescription", False, MyXML, n)
|
||||||
@@ -116,6 +113,8 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
ChangeReadyForDownOnTempChange = New XMLValue(Of Boolean)("ChangeReadyForDownOnTempChange", True, MyXML, n)
|
ChangeReadyForDownOnTempChange = New XMLValue(Of Boolean)("ChangeReadyForDownOnTempChange", True, MyXML, n)
|
||||||
DownloadNativeImageFormat = New XMLValue(Of Boolean)("DownloadNativeImageFormat", True, MyXML, n)
|
DownloadNativeImageFormat = New XMLValue(Of Boolean)("DownloadNativeImageFormat", True, MyXML, n)
|
||||||
ReparseMissingInTheRoutine = New XMLValue(Of Boolean)("ReparseMissingInTheRoutine", False, MyXML, n)
|
ReparseMissingInTheRoutine = New XMLValue(Of Boolean)("ReparseMissingInTheRoutine", False, MyXML, n)
|
||||||
|
UserSiteNameAsFriendly = New XMLValue(Of Boolean)("UserSiteNameAsFriendly", False, MyXML, n)
|
||||||
|
UserSiteNameUpdateEveryTime = New XMLValue(Of Boolean)("UserSiteNameUpdateEveryTime", False, MyXML, n)
|
||||||
|
|
||||||
Plugins.AddRange(PluginHost.GetMyHosts(MyXML, GlobalPath.Value, DefaultTemporary, DefaultDownloadImages, DefaultDownloadVideos))
|
Plugins.AddRange(PluginHost.GetMyHosts(MyXML, GlobalPath.Value, DefaultTemporary, DefaultDownloadImages, DefaultDownloadVideos))
|
||||||
Dim tmpPluginList As IEnumerable(Of PluginHost) = PluginHost.GetPluginsHosts(MyXML, GlobalPath.Value, DefaultTemporary,
|
Dim tmpPluginList As IEnumerable(Of PluginHost) = PluginHost.GetPluginsHosts(MyXML, GlobalPath.Value, DefaultTemporary,
|
||||||
@@ -123,14 +122,19 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
If tmpPluginList.ListExists Then Plugins.AddRange(tmpPluginList)
|
If tmpPluginList.ListExists Then Plugins.AddRange(tmpPluginList)
|
||||||
CookiesEncrypted.Value = True
|
CookiesEncrypted.Value = True
|
||||||
|
|
||||||
FastProfilesLoading = New XMLValue(Of Boolean)("FastProfilesLoading", False, MyXML)
|
FastProfilesLoading = New XMLValue(Of Boolean)("FastProfilesLoading", True, MyXML)
|
||||||
MaxLargeImageHeight = New XMLValue(Of Integer)("MaxLargeImageHeight", 150, MyXML)
|
MaxLargeImageHeight = New XMLValue(Of Integer)("MaxLargeImageHeight", 150, MyXML)
|
||||||
MaxSmallImageHeight = New XMLValue(Of Integer)("MaxSmallImageHeight", 15, MyXML)
|
MaxSmallImageHeight = New XMLValue(Of Integer)("MaxSmallImageHeight", 15, MyXML)
|
||||||
|
UserListBackColor = New XMLValue(Of Color)
|
||||||
|
UserListBackColor.SetExtended("UserListBackColor",, MyXML)
|
||||||
|
UserListForeColor = New XMLValue(Of Color)
|
||||||
|
UserListForeColor.SetExtended("UserListForeColor",, MyXML)
|
||||||
|
UserListImage = New XMLValue(Of SFile)("UserListImage",, MyXML)
|
||||||
DownloadOpenInfo = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenInfo", "OpenAgain", False, False, MyXML)
|
DownloadOpenInfo = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenInfo", "OpenAgain", False, False, MyXML)
|
||||||
DownloadOpenProgress = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenProgress", "OpenAgain", False, False, MyXML)
|
DownloadOpenProgress = New XMLValueAttribute(Of Boolean, Boolean)("DownloadOpenProgress", "OpenAgain", False, False, MyXML)
|
||||||
DownloadsCompleteCommand = New XMLValueAttribute(Of String, Boolean)("DownloadsCompleteCommand", "Use",,, MyXML)
|
DownloadsCompleteCommand = New XMLValueAttribute(Of String, Boolean)("DownloadsCompleteCommand", "Use",,, MyXML)
|
||||||
ClosingCommand = New XMLValueAttribute(Of String, Boolean)("ClosingCommand", "Use",,, MyXML)
|
ClosingCommand = New XMLValueAttribute(Of String, Boolean)("ClosingCommand", "Use",,, MyXML)
|
||||||
AddHandler ClosingCommand.OnValueChanged, Sub(s, __n, v) MainFrameObj?.ChangeCloseVisible()
|
AddHandler ClosingCommand.ValueChanged, Sub(s, ev) MainFrameObj?.ChangeCloseVisible()
|
||||||
InfoViewMode = New XMLValue(Of Integer)("InfoViewMode", DownloadedInfoForm.ViewModes.Session, MyXML)
|
InfoViewMode = New XMLValue(Of Integer)("InfoViewMode", DownloadedInfoForm.ViewModes.Session, MyXML)
|
||||||
ViewMode = New XMLValue(Of Integer)("ViewMode", ViewModes.IconLarge, MyXML)
|
ViewMode = New XMLValue(Of Integer)("ViewMode", ViewModes.IconLarge, MyXML)
|
||||||
ShowingMode = New XMLValue(Of Integer)("ShowingMode", ShowingModes.All, MyXML)
|
ShowingMode = New XMLValue(Of Integer)("ShowingMode", ShowingModes.All, MyXML)
|
||||||
@@ -141,7 +145,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
AddMissingToLog = New XMLValue(Of Boolean)("AddMissingToLog", True, MyXML)
|
AddMissingToLog = New XMLValue(Of Boolean)("AddMissingToLog", True, MyXML)
|
||||||
AddMissingErrorsToLog = New XMLValue(Of Boolean)("AddMissingErrorsToLog", False, MyXML)
|
AddMissingErrorsToLog = New XMLValue(Of Boolean)("AddMissingErrorsToLog", False, MyXML)
|
||||||
|
|
||||||
LatestSavingPath = New XMLValue(Of SFile)("LatestSavingPath", Nothing, MyXML,, New XMLValueBase.ToFilePath)
|
LatestSavingPath = New XMLValue(Of SFile)("LatestSavingPath", Nothing, MyXML,, New XMLToFilePathProvider)
|
||||||
LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML)
|
LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML)
|
||||||
|
|
||||||
_ViewDateFrom = New XMLValue(Of Date)
|
_ViewDateFrom = New XMLValue(Of Date)
|
||||||
@@ -150,9 +154,9 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
_ViewDateTo.SetExtended("ViewDateTo",, MyXML)
|
_ViewDateTo.SetExtended("ViewDateTo",, MyXML)
|
||||||
ViewDateMode = New XMLValue(Of Integer)("ViewDateMode", ShowingDates.Off, MyXML)
|
ViewDateMode = New XMLValue(Of Integer)("ViewDateMode", ShowingDates.Off, MyXML)
|
||||||
|
|
||||||
LatestDownloadedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "LatestDownloadedSites", MyXML)
|
LatestDownloadedSites = New XMLValuesCollection(Of String)(IXMLValuesCollection.Modes.String, "LatestDownloadedSites",, MyXML)
|
||||||
|
|
||||||
SelectedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "SelectedSites", MyXML, {Name_Node_Sites})
|
SelectedSites = New XMLValuesCollection(Of String)(IXMLValuesCollection.Modes.String, "SelectedSites",, MyXML, {Name_Node_Sites})
|
||||||
|
|
||||||
ImgurClientID = New XMLValue(Of String)("ImgurClientID", String.Empty, MyXML, {Name_Node_Sites})
|
ImgurClientID = New XMLValue(Of String)("ImgurClientID", String.Empty, MyXML, {Name_Node_Sites})
|
||||||
|
|
||||||
@@ -169,10 +173,15 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
n = {"Feed"}
|
n = {"Feed"}
|
||||||
FeedDataColumns = New XMLValue(Of Integer)("DataColumns", 1, MyXML, n)
|
FeedDataColumns = New XMLValue(Of Integer)("DataColumns", 1, MyXML, n)
|
||||||
FeedDataRows = New XMLValue(Of Integer)("DataRows", 10, MyXML, n)
|
FeedDataRows = New XMLValue(Of Integer)("DataRows", 10, MyXML, n)
|
||||||
|
FeedCenterImage = New XMLValueUse(Of Integer)("FeedCenterImage", 1,, MyXML, n)
|
||||||
FeedEndless = New XMLValue(Of Boolean)("Endless", True, MyXML, n)
|
FeedEndless = New XMLValue(Of Boolean)("Endless", True, MyXML, n)
|
||||||
FeedAddDateToCaption = New XMLValue(Of Boolean)("AddDateToCaption", True, MyXML, n)
|
FeedAddDateToCaption = New XMLValue(Of Boolean)("AddDateToCaption", True, MyXML, n)
|
||||||
FeedAddSessionToCaption = New XMLValue(Of Boolean)("AddSessionToCaption", False, MyXML, n)
|
FeedAddSessionToCaption = New XMLValue(Of Boolean)("AddSessionToCaption", False, MyXML, n)
|
||||||
FeedStoreSessionsData = New XMLValue(Of Boolean)("StoreSessionsData", True, MyXML, n)
|
FeedStoreSessionsData = New XMLValue(Of Boolean)("StoreSessionsData", True, MyXML, n)
|
||||||
|
FeedBackColor = New XMLValue(Of Color)
|
||||||
|
FeedBackColor.SetExtended("FeedColorBack",, MyXML, n)
|
||||||
|
FeedForeColor = New XMLValue(Of Color)
|
||||||
|
FeedForeColor.SetExtended("FeedColorFore",, MyXML, n)
|
||||||
|
|
||||||
n = {"Users"}
|
n = {"Users"}
|
||||||
FromChannelDownloadTop = New XMLValue(Of Integer)("FromChannelDownloadTop", 10, MyXML, n)
|
FromChannelDownloadTop = New XMLValue(Of Integer)("FromChannelDownloadTop", 10, MyXML, n)
|
||||||
@@ -184,11 +193,11 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
n = {"Users", "FileName"}
|
n = {"Users", "FileName"}
|
||||||
MaxUsersJobsCount = New XMLValue(Of Integer)("MaxJobsCount", DefaultMaxDownloadingTasks, MyXML, n)
|
MaxUsersJobsCount = New XMLValue(Of Integer)("MaxJobsCount", DefaultMaxDownloadingTasks, MyXML, n)
|
||||||
FileAddDateToFileName = New XMLValue(Of Boolean)("FileAddDateToFileName", False, MyXML, n)
|
FileAddDateToFileName = New XMLValue(Of Boolean)("FileAddDateToFileName", False, MyXML, n)
|
||||||
AddHandler FileAddDateToFileName.OnValueChanged, AddressOf ChangeDateProvider
|
AddHandler FileAddDateToFileName.ValueChanged, AddressOf ChangeDateProvider
|
||||||
FileAddTimeToFileName = New XMLValue(Of Boolean)("FileAddTimeToFileName", False, MyXML, n)
|
FileAddTimeToFileName = New XMLValue(Of Boolean)("FileAddTimeToFileName", False, MyXML, n)
|
||||||
AddHandler FileAddTimeToFileName.OnValueChanged, AddressOf ChangeDateProvider
|
AddHandler FileAddTimeToFileName.ValueChanged, AddressOf ChangeDateProvider
|
||||||
FileDateTimePositionEnd = New XMLValue(Of Boolean)("FileDateTimePositionEnd", True, MyXML, n)
|
FileDateTimePositionEnd = New XMLValue(Of Boolean)("FileDateTimePositionEnd", True, MyXML, n)
|
||||||
AddHandler FileDateTimePositionEnd.OnValueChanged, AddressOf ChangeDateProvider
|
AddHandler FileDateTimePositionEnd.ValueChanged, AddressOf ChangeDateProvider
|
||||||
FileReplaceNameByDate = New XMLValue(Of Integer)("FileReplaceNameByDate", FileNameReplaceMode.None, MyXML, n)
|
FileReplaceNameByDate = New XMLValue(Of Integer)("FileReplaceNameByDate", FileNameReplaceMode.None, MyXML, n)
|
||||||
|
|
||||||
CheckUpdatesAtStart = New XMLValue(Of Boolean)("CheckUpdatesAtStart", True, MyXML)
|
CheckUpdatesAtStart = New XMLValue(Of Boolean)("CheckUpdatesAtStart", True, MyXML)
|
||||||
@@ -197,7 +206,6 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
|
|
||||||
n = {"Notifications"}
|
n = {"Notifications"}
|
||||||
ShowNotifications = New XMLValue(Of Boolean)("ShowNotifications", True, MyXML, n)
|
ShowNotifications = New XMLValue(Of Boolean)("ShowNotifications", True, MyXML, n)
|
||||||
ShowNotifications.ReplaceByValue("ShowNotifications") 'TODELETE: 2022.9.24.0
|
|
||||||
ShowNotificationsDownProfiles = New XMLValue(Of Boolean)("Profiles", True, MyXML, n)
|
ShowNotificationsDownProfiles = New XMLValue(Of Boolean)("Profiles", True, MyXML, n)
|
||||||
ShowNotificationsDownAutoDownloader = New XMLValue(Of Boolean)("AutoDownloader", True, MyXML, n)
|
ShowNotificationsDownAutoDownloader = New XMLValue(Of Boolean)("AutoDownloader", True, MyXML, n)
|
||||||
ShowNotificationsDownChannels = New XMLValue(Of Boolean)("Channels", True, MyXML, n)
|
ShowNotificationsDownChannels = New XMLValue(Of Boolean)("Channels", True, MyXML, n)
|
||||||
@@ -210,7 +218,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
|
|
||||||
Labels = New LabelsKeeper(MyXML)
|
Labels = New LabelsKeeper(MyXML)
|
||||||
Groups = New Groups.DownloadGroupCollection
|
Groups = New Groups.DownloadGroupCollection
|
||||||
Labels.AddRange(Groups.GetLabels, False)
|
Labels.AddRange(Groups.GetGroupsLabels, False)
|
||||||
|
|
||||||
MyXML.EndUpdate()
|
MyXML.EndUpdate()
|
||||||
If MyXML.ChangesDetected Then MyXML.Sort() : MyXML.UpdateData()
|
If MyXML.ChangesDetected Then MyXML.Sort() : MyXML.UpdateData()
|
||||||
@@ -220,9 +228,9 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
If BlackList.Count > 0 Then BlackList.RemoveAll(Function(b) Not b.Exists)
|
If BlackList.Count > 0 Then BlackList.RemoveAll(Function(b) Not b.Exists)
|
||||||
End If
|
End If
|
||||||
_UpdatesSuspended = False
|
_UpdatesSuspended = False
|
||||||
ChangeDateProvider(Nothing, Nothing, Nothing)
|
ChangeDateProvider(Nothing, Nothing)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ChangeDateProvider(ByVal Sender As Object, ByVal Name As String, ByVal Value As Object)
|
Private Sub ChangeDateProvider(ByVal Sender As Object, ByVal e As EventArgs)
|
||||||
If Not _UpdatesSuspended Then
|
If Not _UpdatesSuspended Then
|
||||||
Dim p$ = String.Empty
|
Dim p$ = String.Empty
|
||||||
If FileAddDateToFileName Then p = "yyyyMMdd"
|
If FileAddDateToFileName Then p = "yyyyMMdd"
|
||||||
@@ -247,63 +255,148 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
#Region "USERS"
|
#Region "USERS"
|
||||||
Friend Sub LoadUsers()
|
Friend Sub LoadUsers()
|
||||||
Try
|
Try
|
||||||
Users.Clear()
|
Users.ListClearDispose
|
||||||
|
UsersList.Clear()
|
||||||
If UsersSettingsFile.Exists Then
|
If UsersSettingsFile.Exists Then
|
||||||
Using x As New XmlFile(UsersSettingsFile, Protector.Modes.All, False) With {.AllowSameNames = True}
|
Using x As New XmlFile(UsersSettingsFile, Protector.Modes.All, False) With {.AllowSameNames = True}
|
||||||
x.LoadData()
|
x.LoadData()
|
||||||
If x.Count > 0 Then x.ForEach(Sub(xx) UsersList.Add(xx))
|
UsersList.ListAddList(x, LAP.IgnoreICopier)
|
||||||
End Using
|
End Using
|
||||||
UsersCompatibilityCheck()
|
|
||||||
Dim PNC As Func(Of UserInfo, Boolean) = Function(u) Not u.IncludedInCollection And Not u.Protected
|
|
||||||
Dim NeedUpdate As Boolean = False
|
|
||||||
If UsersList.Count > 0 Then
|
|
||||||
Dim cUsers As List(Of UserInfo) = UsersList.Where(Function(u) u.IncludedInCollection And Not u.Protected).ToList
|
|
||||||
If cUsers.ListExists Then
|
|
||||||
Dim d As New Dictionary(Of String, List(Of UserInfo))
|
|
||||||
cUsers = cUsers.ListForEachCopy(Of List(Of UserInfo))(Function(ByVal f As UserInfo, ByVal f_indx As Integer) As UserInfo
|
|
||||||
Dim m% = IIf(f.Merged Or f.IsVirtual, 1, 2)
|
|
||||||
If Not f.Protected AndAlso SFile.GetPath(f.File.CutPath(m - 1).Path).Exists(SFO.Path, False) Then
|
|
||||||
If Not d.ContainsKey(f.CollectionName) Then
|
|
||||||
d.Add(f.CollectionName, New List(Of UserInfo) From {f})
|
|
||||||
Else
|
|
||||||
d(f.CollectionName).Add(f)
|
|
||||||
End If
|
|
||||||
Return f
|
|
||||||
Else
|
|
||||||
If Not f.Protected Then NeedUpdate = True : UsersList.Remove(f)
|
|
||||||
Return Nothing
|
|
||||||
End If
|
|
||||||
End Function, True)
|
|
||||||
Dim v%
|
|
||||||
If d.Count > 0 Then
|
|
||||||
For Each kv As KeyValuePair(Of String, List(Of UserInfo)) In d
|
|
||||||
Users.Add(New UserDataBind(kv.Key))
|
|
||||||
MainFrameObj.CollectionHandler(DirectCast(Users(Users.Count - 1), UserDataBind))
|
|
||||||
For v = 0 To kv.Value.Count - 1 : DirectCast(Users(Users.Count - 1), UserDataBind).Add(kv.Value(v), False) : Next
|
|
||||||
Next
|
|
||||||
d.Clear()
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
|
|
||||||
If UsersList.LongCount(PNC) > 0 Then UsersList.Where(PNC).ToList.ForEach(Sub(u) Users.Add(UserDataBase.GetInstance(u, False)))
|
Dim NeedUpdate As Boolean = False
|
||||||
|
Dim i%, indx%, c%
|
||||||
|
Dim UsersListInitialCount% = UsersList.Count
|
||||||
|
Dim iUser As UserInfo
|
||||||
|
Dim userFileExists As Boolean
|
||||||
|
Dim __plugins As List(Of KeyValuePair(Of String, String))
|
||||||
|
|
||||||
|
If UsersList.Count > 0 Then
|
||||||
|
__plugins = Plugins.Select(Function(p) New KeyValuePair(Of String, String)(p.Key, p.Name)).ToList
|
||||||
|
For i% = UsersList.Count - 1 To 0 Step -1
|
||||||
|
iUser = UsersList(i)
|
||||||
|
With iUser
|
||||||
|
'Check plugins
|
||||||
|
If .Plugin.IsEmptyString Then
|
||||||
|
If .Site.IsEmptyString Then
|
||||||
|
MyMainLOG = $"The corresponding plugin was not found for the user [{ .Name}]. The user was removed from SCrawler."
|
||||||
|
Else
|
||||||
|
indx = __plugins.FindIndex(Function(p) p.Value.ToLower = .Site.ToLower)
|
||||||
|
If indx >= 0 Then
|
||||||
|
.Plugin = __plugins(indx).Key
|
||||||
|
.Site = __plugins(indx).Value
|
||||||
|
NeedUpdate = True
|
||||||
|
Else
|
||||||
|
.Protected = True
|
||||||
|
MyMainLOG = $"The corresponding plugin was not found for the user [{ .Name}]."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
If Not __plugins.Exists(Function(p) p.Key.ToLower = .Plugin.ToLower) Then
|
||||||
|
.Protected = True
|
||||||
|
MyMainLOG = $"The corresponding plugin was not found for the user [{ .Plugin}:{ .Site}: { .Name}]."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'Check paths
|
||||||
|
c = IIf((Not .IncludedInCollection Or (.Merged Or .IsVirtual)) And Not .Plugin = PathPlugin.PluginKey, 1, 2)
|
||||||
|
userFileExists = SFile.GetPath(.File.CutPath(c - 1).Path).Exists(SFO.Path, False)
|
||||||
|
If Not .IsProtected Then
|
||||||
|
If userFileExists Then
|
||||||
|
If .LastSeen.HasValue Then .LastSeen = Nothing : NeedUpdate = True
|
||||||
|
Else
|
||||||
|
.LastSeen = Now
|
||||||
|
MyMainLOG = $"The user [{ .Site}: { .Name}] was not found. " &
|
||||||
|
$"It will be removed from SCrawler on { .LastSeen.Value.ToStringDate(DateTimeDefaultProvider)}."
|
||||||
|
NeedUpdate = True
|
||||||
|
End If
|
||||||
|
ElseIf userFileExists Then
|
||||||
|
If .Protected Then
|
||||||
|
If Not .LastSeen.HasValue Then .LastSeen = Now : NeedUpdate = True
|
||||||
|
MyMainLOG = $"The corresponding plugin was not found for the user [{ .Site}: { .Name}]. " &
|
||||||
|
$"It will be removed from SCrawler on { .LastSeen.Value.ToStringDate(DateTimeDefaultProvider)}."
|
||||||
|
Else
|
||||||
|
If .LastSeen.HasValue Then .LastSeen = Nothing : NeedUpdate = True
|
||||||
|
End If
|
||||||
|
ElseIf If(.LastSeen, Now).AddDays(30) < Now Then
|
||||||
|
UsersList.RemoveAt(i)
|
||||||
|
MyMainLOG = $"The user [{ .Site}: { .Name}] was not found and was removed from SCrawler."
|
||||||
|
NeedUpdate = True
|
||||||
|
Continue For
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
UsersList(i) = iUser
|
||||||
|
Next
|
||||||
|
|
||||||
|
If UsersList.Count > 0 Then
|
||||||
|
With UsersList
|
||||||
|
'Create collections
|
||||||
|
Dim d As New Dictionary(Of String, List(Of UserInfo))
|
||||||
|
.Where(Function(u) u.IncludedInCollection And Not u.IsProtected).ListIfNothing.
|
||||||
|
ListForEachCopy(Of List(Of UserInfo))(Function(ByVal u As UserInfo, ByVal ii As Integer) As UserInfo
|
||||||
|
If Not d.ContainsKey(u.CollectionName) Then
|
||||||
|
d.Add(u.CollectionName, New List(Of UserInfo) From {u})
|
||||||
|
Else
|
||||||
|
d(u.CollectionName).Add(u)
|
||||||
|
End If
|
||||||
|
Return u
|
||||||
|
End Function, True, EDP.ThrowException)
|
||||||
|
If d.Count > 0 Then
|
||||||
|
For Each kv As KeyValuePair(Of String, List(Of UserInfo)) In d
|
||||||
|
Users.Add(New UserDataBind(kv.Key))
|
||||||
|
With DirectCast(Users.Last, UserDataBind)
|
||||||
|
MainFrameObj.CollectionHandler(.Self)
|
||||||
|
For i = 0 To kv.Value.Count - 1 : .Self.Add(kv.Value(i), False) : Next
|
||||||
|
End With
|
||||||
|
Next
|
||||||
|
d.Clear()
|
||||||
|
End If
|
||||||
|
|
||||||
|
'Create users
|
||||||
|
.Where(Function(u) Not u.IncludedInCollection And Not u.IsProtected).
|
||||||
|
ListIfNothing.ListForEach(Sub(u, ii) Users.Add(UserDataBase.GetInstance(u, False)))
|
||||||
|
End With
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Users.Count > 0 Then
|
If Users.Count > 0 Then
|
||||||
|
'Load user data
|
||||||
Dim t As New List(Of Task)
|
Dim t As New List(Of Task)
|
||||||
For Each user As IUserData In Users : t.Add(Task.Run(AddressOf user.LoadUserInformation)) : Next
|
For Each user As IUserData In Users : t.Add(Task.Run(AddressOf user.LoadUserInformation)) : Next
|
||||||
Task.WaitAll(t.ToArray)
|
Task.WaitAll(t.ToArray)
|
||||||
t.Clear()
|
t.Clear()
|
||||||
Dim du As List(Of UserInfo) = (From u As IUserData In Users
|
|
||||||
Where Not u.IsCollection AndAlso Not u.FileExists AndAlso Not DirectCast(u, UserDataBase).User.Protected
|
'Users final check
|
||||||
Select DirectCast(u, UserDataBase).User).ToList
|
Dim findWrongUser As Func(Of UserInfo, Boolean) = Function(ByVal u As UserInfo) As Boolean
|
||||||
If du.ListExists Then du.ForEach(Sub(u) UsersList.Remove(u)) : du.Clear()
|
Dim uIndex% = UsersList.IndexOf(u)
|
||||||
Users.ListDisposeRemoveAll(Function(ByVal u As IUserData) As Boolean
|
If uIndex >= 0 Then
|
||||||
If Not DirectCast(u, UserDataBase).User.Protected Then
|
Dim uu As UserInfo = UsersList(indx)
|
||||||
|
If Not uu.LastSeen.HasValue Then
|
||||||
|
uu.LastSeen = Now
|
||||||
|
NeedUpdate = True
|
||||||
|
UsersList(indx) = uu
|
||||||
|
MyMainLOG = $"The user [{uu.Site}: {uu.Name}] was not found. " &
|
||||||
|
$"It will be removed from SCrawler on {uu.LastSeen.Value.ToStringDate(DateTimeDefaultProvider)}."
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return uIndex >= 0
|
||||||
|
End Function
|
||||||
|
Users.ListDisposeRemoveAll(Function(ByVal u As UserDataBase) As Boolean
|
||||||
|
If Not u.User.IsProtected Then
|
||||||
If u.IsCollection Then
|
If u.IsCollection Then
|
||||||
With DirectCast(u, UserDataBind)
|
With DirectCast(u, UserDataBind)
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
|
Dim __del As Boolean
|
||||||
For i% = .Count - 1 To 0 Step -1
|
For i% = .Count - 1 To 0 Step -1
|
||||||
|
__del = False
|
||||||
If Not .Item(i).FileExists Then
|
If Not .Item(i).FileExists Then
|
||||||
.Item(i).Delete()
|
With DirectCast(.Item(i), UserDataBase).User
|
||||||
|
If Not findWrongUser(.Self) Then
|
||||||
|
__del = True
|
||||||
|
MyMainLOG = $"The user [{ .Site}: { .Name}] was not found and was removed from SCrawler."
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
If __del Then .Item(i).Delete()
|
||||||
|
.Item(i).Dispose()
|
||||||
.Collections.RemoveAt(i)
|
.Collections.RemoveAt(i)
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -311,70 +404,30 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Return Not .FileExists
|
Return Not .FileExists
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
Return Not u.FileExists
|
If Not u.FileExists Then
|
||||||
|
If Not findWrongUser(u.User) Then MyMainLOG = $"The user [{u.User.Site}: {u.User.Name}] was not found."
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
End Function)
|
End Function)
|
||||||
End If
|
End If
|
||||||
If NeedUpdate Then UpdateUsersList()
|
|
||||||
|
If NeedUpdate Or Not UsersList.Count = UsersListInitialCount Then
|
||||||
|
If UsersList.Count = 0 Then UsersSettingsFile.Delete() Else UpdateUsersList()
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
If Users.Count > 0 Then
|
If Users.Count > 0 Then
|
||||||
Dim tul As IEnumerable(Of String) = Users.SelectMany(Function(u) u.Labels)
|
Labels.AddRange(Users.SelectMany(Function(u) u.Labels), False)
|
||||||
Labels.AddRange(tul, False)
|
Labels.Update()
|
||||||
If Labels.NewLabelsExists Or
|
|
||||||
(tul.ListExists AndAlso Not tul.Contains(LabelsKeeper.NoParsedUser) AndAlso Labels.Remove(LabelsKeeper.NoParsedUser)) Then _
|
|
||||||
Labels.Update() : Labels.NewLabels.Clear() : Labels.Verify()
|
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub UsersCompatibilityCheck()
|
|
||||||
With UsersList
|
|
||||||
Dim user As UserInfo
|
|
||||||
Dim uKeysList As List(Of String) = Nothing
|
|
||||||
If Plugins.Count > 0 Then uKeysList = Plugins.Select(Function(p) p.Key).ListIfNothing
|
|
||||||
If uKeysList Is Nothing Then uKeysList = New List(Of String)
|
|
||||||
Dim i%
|
|
||||||
If .Count > 0 AndAlso (uKeysList.Count = 0 OrElse
|
|
||||||
.Exists(Function(u) u.Site.Length = 1 Or u.Plugin.IsEmptyString Or Not uKeysList.Contains(u.Plugin))) Then
|
|
||||||
Dim indx%
|
|
||||||
Dim c As Boolean = False
|
|
||||||
For i = 0 To .Count - 1
|
|
||||||
user = .Item(i)
|
|
||||||
With user
|
|
||||||
If .Site.Length = 1 Then
|
|
||||||
Select Case .Site
|
|
||||||
Case "1" : .Site = Reddit.RedditSite : c = True
|
|
||||||
Case "2" : .Site = Twitter.TwitterSite : c = True
|
|
||||||
Case "3" : .Site = Instagram.InstagramSite : c = True
|
|
||||||
Case "4" : .Site = RedGifs.RedGifsSite : c = True
|
|
||||||
End Select
|
|
||||||
End If
|
|
||||||
If Not .Site.IsEmptyString Then
|
|
||||||
If .Plugin.IsEmptyString Then
|
|
||||||
indx = Plugins.FindIndex(Function(p) p.Settings.Name.ToLower = .Site.ToLower)
|
|
||||||
If indx >= 0 Then .Plugin = Plugins(indx).Settings.Key : c = True Else .Protected = True
|
|
||||||
Else
|
|
||||||
indx = Plugins.FindIndex(Function(p) p.Key = .Plugin)
|
|
||||||
If indx < 0 Then .Protected = True
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
.UpdateUserFile()
|
|
||||||
End With
|
|
||||||
.Item(i) = user
|
|
||||||
Next
|
|
||||||
If c Then UpdateUsersList()
|
|
||||||
Else
|
|
||||||
For i = 0 To .Count - 1
|
|
||||||
user = .Item(i)
|
|
||||||
user.UpdateUserFile()
|
|
||||||
.Item(i) = user
|
|
||||||
Next
|
|
||||||
End If
|
|
||||||
End With
|
|
||||||
End Sub
|
|
||||||
Private _UserListUpdateRequired As Boolean = False
|
Private _UserListUpdateRequired As Boolean = False
|
||||||
Friend ReadOnly Property UserListUpdateRequired As Boolean
|
Friend ReadOnly Property UserListUpdateRequired As Boolean
|
||||||
Get
|
Get
|
||||||
@@ -510,7 +563,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
MyXML.EndUpdate()
|
MyXML.EndUpdate()
|
||||||
If MyXML.ChangesDetected Then MyXML.UpdateData()
|
If MyXML.ChangesDetected Then MyXML.UpdateData()
|
||||||
_UpdatesSuspended = False
|
_UpdatesSuspended = False
|
||||||
ChangeDateProvider(Nothing, Nothing, Nothing)
|
ChangeDateProvider(Nothing, Nothing)
|
||||||
End Sub
|
End Sub
|
||||||
Default Friend ReadOnly Property Site(ByVal PluginKey As String) As SettingsHost
|
Default Friend ReadOnly Property Site(ByVal PluginKey As String) As SettingsHost
|
||||||
Get
|
Get
|
||||||
@@ -536,6 +589,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Private ReadOnly Property CookiesEncrypted As XMLValue(Of Boolean)
|
Private ReadOnly Property CookiesEncrypted As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property AddMissingToLog As XMLValue(Of Boolean)
|
Friend ReadOnly Property AddMissingToLog As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property AddMissingErrorsToLog As XMLValue(Of Boolean)
|
Friend ReadOnly Property AddMissingErrorsToLog As XMLValue(Of Boolean)
|
||||||
|
Friend ReadOnly Property UserAgent As XMLValue(Of String)
|
||||||
#Region "Search"
|
#Region "Search"
|
||||||
Friend ReadOnly Property SearchInName As XMLValue(Of Boolean)
|
Friend ReadOnly Property SearchInName As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property SearchInDescription As XMLValue(Of Boolean)
|
Friend ReadOnly Property SearchInDescription As XMLValue(Of Boolean)
|
||||||
@@ -548,6 +602,8 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Friend ReadOnly Property ChangeReadyForDownOnTempChange As XMLValue(Of Boolean)
|
Friend ReadOnly Property ChangeReadyForDownOnTempChange As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property DownloadNativeImageFormat As XMLValue(Of Boolean)
|
Friend ReadOnly Property DownloadNativeImageFormat As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property ReparseMissingInTheRoutine As XMLValue(Of Boolean)
|
Friend ReadOnly Property ReparseMissingInTheRoutine As XMLValue(Of Boolean)
|
||||||
|
Friend ReadOnly Property UserSiteNameAsFriendly As XMLValue(Of Boolean)
|
||||||
|
Friend ReadOnly Property UserSiteNameUpdateEveryTime As XMLValue(Of Boolean)
|
||||||
#End Region
|
#End Region
|
||||||
#Region "User data"
|
#Region "User data"
|
||||||
Friend ReadOnly Property FromChannelDownloadTop As XMLValue(Of Integer)
|
Friend ReadOnly Property FromChannelDownloadTop As XMLValue(Of Integer)
|
||||||
@@ -565,6 +621,19 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Friend ReadOnly Property FastProfilesLoading As XMLValue(Of Boolean)
|
Friend ReadOnly Property FastProfilesLoading As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property MaxLargeImageHeight As XMLValue(Of Integer)
|
Friend ReadOnly Property MaxLargeImageHeight As XMLValue(Of Integer)
|
||||||
Friend ReadOnly Property MaxSmallImageHeight As XMLValue(Of Integer)
|
Friend ReadOnly Property MaxSmallImageHeight As XMLValue(Of Integer)
|
||||||
|
Friend ReadOnly Property UserListBackColor As XMLValue(Of Color)
|
||||||
|
Friend ReadOnly Property UserListBackColorF As Color
|
||||||
|
Get
|
||||||
|
Return If(UserListBackColor.Exists, UserListBackColor.Value, SystemColors.Window)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property UserListForeColor As XMLValue(Of Color)
|
||||||
|
Friend ReadOnly Property UserListForeColorF As Color
|
||||||
|
Get
|
||||||
|
Return If(UserListForeColor.Exists, UserListForeColor.Value, SystemColors.WindowText)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property UserListImage As XMLValue(Of SFile)
|
||||||
Friend ReadOnly Property DownloadOpenInfo As XMLValueAttribute(Of Boolean, Boolean)
|
Friend ReadOnly Property DownloadOpenInfo As XMLValueAttribute(Of Boolean, Boolean)
|
||||||
Friend ReadOnly Property DownloadOpenProgress As XMLValueAttribute(Of Boolean, Boolean)
|
Friend ReadOnly Property DownloadOpenProgress As XMLValueAttribute(Of Boolean, Boolean)
|
||||||
Friend ReadOnly Property DownloadsCompleteCommand As XMLValueAttribute(Of String, Boolean)
|
Friend ReadOnly Property DownloadsCompleteCommand As XMLValueAttribute(Of String, Boolean)
|
||||||
@@ -624,10 +693,13 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
#Region "Feed properties"
|
#Region "Feed properties"
|
||||||
Friend ReadOnly Property FeedDataColumns As XMLValue(Of Integer)
|
Friend ReadOnly Property FeedDataColumns As XMLValue(Of Integer)
|
||||||
Friend ReadOnly Property FeedDataRows As XMLValue(Of Integer)
|
Friend ReadOnly Property FeedDataRows As XMLValue(Of Integer)
|
||||||
|
Friend ReadOnly Property FeedCenterImage As XMLValueUse(Of Integer)
|
||||||
Friend ReadOnly Property FeedEndless As XMLValue(Of Boolean)
|
Friend ReadOnly Property FeedEndless As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property FeedAddDateToCaption As XMLValue(Of Boolean)
|
Friend ReadOnly Property FeedAddDateToCaption As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property FeedAddSessionToCaption As XMLValue(Of Boolean)
|
Friend ReadOnly Property FeedAddSessionToCaption As XMLValue(Of Boolean)
|
||||||
Friend ReadOnly Property FeedStoreSessionsData As XMLValue(Of Boolean)
|
Friend ReadOnly Property FeedStoreSessionsData As XMLValue(Of Boolean)
|
||||||
|
Friend ReadOnly Property FeedBackColor As XMLValue(Of Color)
|
||||||
|
Friend ReadOnly Property FeedForeColor As XMLValue(Of Color)
|
||||||
#End Region
|
#End Region
|
||||||
#Region "New version properties"
|
#Region "New version properties"
|
||||||
Friend ReadOnly Property CheckUpdatesAtStart As XMLValue(Of Boolean)
|
Friend ReadOnly Property CheckUpdatesAtStart As XMLValue(Of Boolean)
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ Friend Class UserFinder : Implements IDisposable
|
|||||||
End If
|
End If
|
||||||
__added = {__added, __dup, __skipped}.ListToString(vbCr.StringDup(2))
|
__added = {__added, __dup, __skipped}.ListToString(vbCr.StringDup(2))
|
||||||
If Not __added.IsEmptyString Then
|
If Not __added.IsEmptyString Then
|
||||||
Using t As New TextSaver("LOGs\ImportUsers.txt") With {.ForceAddDateTimeToFileName = True}
|
Using t As New TextSaver("LOGs\ImportUsers.txt") With {.FileForceAddDateTimeToName = True}
|
||||||
t.Append(__added)
|
t.Append(__added)
|
||||||
If Added.Count > 0 Then
|
If Added.Count > 0 Then
|
||||||
t.AppendLine(vbNewLine.StringDup(2))
|
t.AppendLine(vbNewLine.StringDup(2))
|
||||||
@@ -283,7 +283,7 @@ Friend Class UserFinder : Implements IDisposable
|
|||||||
Private Function GetLabels() As List(Of String)
|
Private Function GetLabels() As List(Of String)
|
||||||
Const DesignNode$ = "ImportUserSelectorLabels"
|
Const DesignNode$ = "ImportUserSelectorLabels"
|
||||||
Try
|
Try
|
||||||
Dim __add As EventHandler(Of SimpleListFormEventArgs) = Sub(sender, e) e.ValueNew = InputBoxE("Enter a new label name", "New label").IfNullOrEmptyE(Nothing)
|
Dim __add As EventHandler(Of SimpleListFormEventArgs) = Sub(sender, e) e.Item = InputBoxE("Enter a new label name", "New label").IfNullOrEmptyE(Nothing)
|
||||||
Dim l As List(Of String) = ListAddList(Nothing, Settings.Labels, LAP.NotContainsOnly).ListAddValue(LabelImported, LAP.NotContainsOnly)
|
Dim l As List(Of String) = ListAddList(Nothing, Settings.Labels, LAP.NotContainsOnly).ListAddValue(LabelImported, LAP.NotContainsOnly)
|
||||||
If l.Count > 0 Then l.Sort()
|
If l.Count > 0 Then l.Sort()
|
||||||
If Not Settings.Design.Contains(DesignNode) Then Settings.Design.Add(DesignNode, String.Empty)
|
If Not Settings.Design.Contains(DesignNode) Then Settings.Design.Add(DesignNode, String.Empty)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ Partial Friend Module MainMod
|
|||||||
Friend Const Name_IsChannel As String = "IsChannel"
|
Friend Const Name_IsChannel As String = "IsChannel"
|
||||||
Friend Const Name_SpecialPath As String = "SpecialPath"
|
Friend Const Name_SpecialPath As String = "SpecialPath"
|
||||||
Friend Const Name_SpecialCollectionPath As String = "SpecialCollectionPath"
|
Friend Const Name_SpecialCollectionPath As String = "SpecialCollectionPath"
|
||||||
|
Private Const Name_LastSeen As String = "LastSeen"
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Declarations"
|
#Region "Declarations"
|
||||||
Friend Name As String
|
Friend Name As String
|
||||||
@@ -49,6 +50,12 @@ Partial Friend Module MainMod
|
|||||||
Friend CollectionModel As UsageModel
|
Friend CollectionModel As UsageModel
|
||||||
Friend IsChannel As Boolean
|
Friend IsChannel As Boolean
|
||||||
Friend [Protected] As Boolean
|
Friend [Protected] As Boolean
|
||||||
|
Friend ReadOnly Property IsProtected As Boolean
|
||||||
|
Get
|
||||||
|
Return [Protected] Or (LastSeen.HasValue AndAlso LastSeen.Value.AddDays(30) < Now)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend LastSeen As Date?
|
||||||
Friend ReadOnly Property DownloadOption As DownOptions
|
Friend ReadOnly Property DownloadOption As DownOptions
|
||||||
Get
|
Get
|
||||||
If IsChannel Then
|
If IsChannel Then
|
||||||
@@ -77,6 +84,8 @@ Partial Friend Module MainMod
|
|||||||
SpecialPath = SFile.GetPath(x.Attribute(Name_SpecialPath).Value)
|
SpecialPath = SFile.GetPath(x.Attribute(Name_SpecialPath).Value)
|
||||||
SpecialCollectionPath = SFile.GetPath(x.Attribute(Name_SpecialCollectionPath).Value)
|
SpecialCollectionPath = SFile.GetPath(x.Attribute(Name_SpecialCollectionPath).Value)
|
||||||
IsChannel = x.Attribute(Name_IsChannel).Value.FromXML(Of Boolean)(False)
|
IsChannel = x.Attribute(Name_IsChannel).Value.FromXML(Of Boolean)(False)
|
||||||
|
If Not x.Attribute(Name_LastSeen).Value.IsEmptyString Then LastSeen = AConvert(Of Date)(x.Attribute(Name_LastSeen).Value, DateTimeDefaultProvider, Nothing)
|
||||||
|
UpdateUserFile()
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub New(ByVal c As Reddit.Channel)
|
Friend Sub New(ByVal c As Reddit.Channel)
|
||||||
Name = c.Name
|
Name = c.Name
|
||||||
@@ -145,7 +154,8 @@ Partial Friend Module MainMod
|
|||||||
New EAttribute(Name_Merged, Merged.BoolToInteger),
|
New EAttribute(Name_Merged, Merged.BoolToInteger),
|
||||||
New EAttribute(Name_IsChannel, IsChannel.BoolToInteger),
|
New EAttribute(Name_IsChannel, IsChannel.BoolToInteger),
|
||||||
New EAttribute(Name_SpecialPath, SpecialPath.PathWithSeparator),
|
New EAttribute(Name_SpecialPath, SpecialPath.PathWithSeparator),
|
||||||
New EAttribute(Name_SpecialCollectionPath, SpecialCollectionPath.PathWithSeparator)})
|
New EAttribute(Name_SpecialCollectionPath, SpecialCollectionPath.PathWithSeparator),
|
||||||
|
New EAttribute(Name_LastSeen, AConvert(Of String)(LastSeen, DateTimeDefaultProvider, String.Empty))})
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "IComparable Support"
|
#Region "IComparable Support"
|
||||||
@@ -159,7 +169,8 @@ Partial Friend Module MainMod
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "IEquatable Support"
|
#Region "IEquatable Support"
|
||||||
Friend Overloads Function Equals(ByVal Other As UserInfo) As Boolean Implements IEquatable(Of UserInfo).Equals
|
Friend Overloads Function Equals(ByVal Other As UserInfo) As Boolean Implements IEquatable(Of UserInfo).Equals
|
||||||
Return Site.StringToLower = Other.Site.StringToLower And Name.StringToLower = Other.Name.StringToLower
|
Return Site.StringToLower = Other.Site.StringToLower And Name.StringToLower = Other.Name.StringToLower And
|
||||||
|
(Not Plugin = PathPlugin.PluginKey Or SpecialPath = Other.SpecialPath)
|
||||||
End Function
|
End Function
|
||||||
Public Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean
|
Public Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean
|
||||||
Return Equals(DirectCast(Obj, UserInfo))
|
Return Equals(DirectCast(Obj, UserInfo))
|
||||||
|
|||||||
@@ -94,56 +94,49 @@ Friend Class UserSearchForm
|
|||||||
LIST_SEARCH.BeginUpdate()
|
LIST_SEARCH.BeginUpdate()
|
||||||
ControlInvokeFast(LIST_SEARCH, Sub() LIST_SEARCH.Items.Clear())
|
ControlInvokeFast(LIST_SEARCH, Sub() LIST_SEARCH.Items.Clear())
|
||||||
Results.Clear()
|
Results.Clear()
|
||||||
Dim t$ = TXT_SEARCH.Text.Trim
|
Dim t$ = TXT_SEARCH.Text.StringTrim.StringToLower
|
||||||
With Settings
|
With Settings
|
||||||
If Not t.IsEmptyString And .Users.Count > 0 Then
|
If Not t.IsEmptyString And .Users.Count > 0 Then
|
||||||
Dim i%
|
Dim i%
|
||||||
Dim s As Plugin.ExchangeOptions = Nothing
|
Dim s As Plugin.ExchangeOptions = Nothing
|
||||||
Dim cu As Boolean = False
|
|
||||||
Dim __descr As Boolean = CH_SEARCH_IN_DESCR.Checked
|
Dim __descr As Boolean = CH_SEARCH_IN_DESCR.Checked
|
||||||
Dim __name As Boolean = CH_SEARCH_IN_NAME.Checked
|
Dim __name As Boolean = CH_SEARCH_IN_NAME.Checked
|
||||||
Dim __lbl As Boolean = CH_SEARCH_IN_LABEL.Checked
|
Dim __lbl As Boolean = CH_SEARCH_IN_LABEL.Checked
|
||||||
Dim _CheckUrl As Action(Of IUserData) = Sub(ByVal u As IUserData)
|
Dim __isUrl As Boolean = t.StartsWith("http")
|
||||||
If cu AndAlso ((u.Site = s.SiteName Or u.HOST.Key = s.HostKey) And u.Name.ToLower = s.UserName) Then _
|
Dim __urlFound As Boolean = False
|
||||||
Results.ListAddValue(New SearchResult(u, SearchResult.Modes.URL), RLP)
|
Dim _p_url As Predicate(Of IUserData) = Function(u) __urlFound AndAlso ((u.Site = s.SiteName Or u.HOST.Key = s.HostKey) And u.Name.ToLower = s.UserName.ToLower)
|
||||||
End Sub
|
Dim _p_descr As Predicate(Of IUserData) = Function(u) __descr AndAlso Not u.Description.IsEmptyString AndAlso u.Description.ToLower.Contains(t)
|
||||||
Dim _CheckDescr As Action(Of IUserData) = Sub(ByVal u As IUserData)
|
Dim _p_labels_p As Predicate(Of String) = Function(l) l.ToLower.Contains(t)
|
||||||
If __descr AndAlso Not u.Description.IsEmptyString AndAlso
|
Dim _p_labels As Predicate(Of IUserData) = Function(u) __lbl AndAlso u.Labels.ListExists AndAlso u.Labels.Exists(_p_labels_p)
|
||||||
u.Description.Contains(t) Then _
|
Dim _addValue As Action(Of IUserData, SearchResult.Modes, Predicate(Of IUserData)) = Sub(u, m, p) If p.Invoke(u) Then Results.ListAddValue(New SearchResult(u, m), RLP)
|
||||||
Results.ListAddValue(New SearchResult(u, SearchResult.Modes.Description), RLP)
|
|
||||||
End Sub
|
|
||||||
Dim _LabelPredicate As Predicate(Of String) = Function(l) l.ToLower.Contains(t)
|
|
||||||
Dim _CheckLabels As Action(Of IUserData) = Sub(ByVal u As IUserData)
|
|
||||||
If __lbl AndAlso u.Labels.ListExists AndAlso u.Labels.Exists(_LabelPredicate) Then _
|
|
||||||
Results.ListAddValue(New SearchResult(u, SearchResult.Modes.Label), RLP)
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
If t.Length >= 4 AndAlso t.StartsWith("http") Then
|
If __isUrl Then
|
||||||
For Each p In Settings.Plugins
|
For Each p In Settings.Plugins
|
||||||
s = p.Settings.IsMyUser(t)
|
s = p.Settings.IsMyUser(t)
|
||||||
If Not s.UserName.IsEmptyString Then Exit For
|
If Not s.UserName.IsEmptyString Then Exit For
|
||||||
Next
|
Next
|
||||||
|
__urlFound = Not s.UserName.IsEmptyString
|
||||||
End If
|
End If
|
||||||
cu = Not s.UserName.IsEmptyString
|
|
||||||
t = t.ToLower
|
|
||||||
|
|
||||||
For Each user As IUserData In .Users
|
For Each user As IUserData In .Users
|
||||||
If __name AndAlso user.Name.ToLower.Contains(t) Then Results.ListAddValue(New SearchResult(user, SearchResult.Modes.Name), RLP)
|
If Not __isUrl AndAlso __name AndAlso user.Name.ToLower.Contains(t) Then Results.ListAddValue(New SearchResult(user, SearchResult.Modes.Name), RLP)
|
||||||
If user.IsCollection Then
|
If user.IsCollection Then
|
||||||
With DirectCast(user, UserDataBind)
|
With DirectCast(user, UserDataBind)
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
For i = 0 To .Count - 1
|
For i = 0 To .Count - 1
|
||||||
If __name AndAlso .Item(i).Name.ToLower = t Then Results.ListAddValue(New SearchResult(.Item(i), SearchResult.Modes.Name), RLP)
|
With .Item(i)
|
||||||
_CheckUrl(.Item(i))
|
If Not __isUrl AndAlso __name AndAlso .Self.Name.ToLower = t Then Results.ListAddValue(New SearchResult(.Self, SearchResult.Modes.Name), RLP)
|
||||||
_CheckDescr(.Item(i))
|
_addValue(.Self, SearchResult.Modes.URL, _p_url)
|
||||||
_CheckLabels(.Item(i))
|
_addValue(.Self, SearchResult.Modes.Description, _p_descr)
|
||||||
|
_addValue(.Self, SearchResult.Modes.Label, _p_labels)
|
||||||
|
End With
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
_CheckUrl(user)
|
_addValue(user, SearchResult.Modes.URL, _p_url)
|
||||||
_CheckDescr(user)
|
_addValue(user, SearchResult.Modes.Description, _p_descr)
|
||||||
_CheckLabels(user)
|
_addValue(user, SearchResult.Modes.Label, _p_labels)
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
If Results.Count > 0 Then
|
If Results.Count > 0 Then
|
||||||
|
|||||||