Compare commits
12 Commits
3.0.0.10
...
2022.8.22.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54ffe10f71 | ||
|
|
e0dc66e0da | ||
|
|
ab020d9b5f | ||
|
|
4ba1624edf | ||
|
|
f3d956f33f | ||
|
|
4a5e050201 | ||
|
|
dd272c6f6d | ||
|
|
fbcda1ae75 | ||
|
|
9e87369c9b | ||
|
|
cc3618a50e | ||
|
|
33b9e9cfc6 | ||
|
|
26dca2246e |
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -12,7 +12,7 @@ A clear and concise description of what the bug is.
|
|||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
Steps to reproduce the behavior:
|
Steps to reproduce the behavior:
|
||||||
1. Profile URL:
|
1. **Profile URL**:
|
||||||
2. Do something
|
2. Do something
|
||||||
3. See error
|
3. See error
|
||||||
|
|
||||||
|
|||||||
4
.github/ISSUE_TEMPLATE/plugin_add.md
vendored
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Add plugin
|
name: I developed a plugin for SCrawler
|
||||||
about: Add plugin to plugin list
|
about: I developed a plugin for SCrawler. Add plugin to plugin list.
|
||||||
title: "[NEW PLUGIN]"
|
title: "[NEW PLUGIN]"
|
||||||
labels: 'New Plugin'
|
labels: 'New Plugin'
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|||||||
@@ -3,29 +3,39 @@
|
|||||||
I welcome requests! Follow these steps to contribute:
|
I welcome requests! Follow these steps to contribute:
|
||||||
|
|
||||||
1. Find an [issue](https://github.com/AAndyProgram/SCrawler/issues) that needs assistance.
|
1. Find an [issue](https://github.com/AAndyProgram/SCrawler/issues) that needs assistance.
|
||||||
2. Let me know you are working on it by posting a comment on the issue.
|
1. Let me know you are working on it by posting a comment on the issue.
|
||||||
3. If you find an error in the code, please provide a link to the file and the line number.
|
1. If you find an error in the code, please provide a link to the file and the line number.
|
||||||
4. If you have a suggestion to change the code, you can post a block of code to replace. I don't currently have time to learn pull requests, so it might work this way.
|
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.
|
||||||
2. Add the latest version of the "PersonalUtilities.dll" library (from the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest)).
|
1. Delete the "PersonalUtilities.Notifications" project from the solution.
|
||||||
3. Import PersonalUtilities.Functions for the whole project.
|
1. The following libraries must be added to project references with the '**Copy to output folder**' option:
|
||||||
|
- ```PersonalUtilities.dll```
|
||||||
|
- ```PersonalUtilities.Notifications.dll```
|
||||||
|
- ```Microsoft.Toolkit.Uwp.Notifications.dll```
|
||||||
|
- ```System.ValueTuple.dll```
|
||||||
|
1. Import PersonalUtilities.Functions for the whole project.
|
||||||
|
|
||||||
**Always use the correct "PersonalUtilities.dll" library. You must download this library from the release of the code you downloaded.**
|
**Always use the correct libraries. You must download libraries from the same release date as the code commit date.**
|
||||||
|
|
||||||
# How to request a new site
|
# How to request a new site
|
||||||
|
|
||||||
1. Check [issues](https://github.com/AAndyProgram/SCrawler/issues) (open and [closed](https://github.com/AAndyProgram/SCrawler/issues?q=is%3Aissue+is%3Aclosed)) and [discussions](https://github.com/AAndyProgram/SCrawler/discussions) to find your issue. Perhaps I have already answered your request.
|
1. Check [issues](https://github.com/AAndyProgram/SCrawler/issues) (open and [closed](https://github.com/AAndyProgram/SCrawler/issues?q=is%3Aissue+is%3Aclosed)) and [discussions](https://github.com/AAndyProgram/SCrawler/discussions) to find your issue. Perhaps I have already answered your request.
|
||||||
2. If you don't find anything, create a new issue with your request. I usually reply as soon as possible (within the next few hours).
|
1. If you don't find anything, create a new issue with your request. I usually reply as soon as possible (within the next few hours).
|
||||||
- If I'm interested in a site you want to add, it may be added in future releases.
|
|
||||||
- If the site has an API that does not require authorization, it may be added in the coming releases.
|
|
||||||
- You can make it faster by posting a link to the API. **I don't use OAuth authentication** in my application, so if it's not too hard to make a new parsing algorithm **without OAuth** authorization, I can start developing it in the coming days. Otherwise, I need time to figure out how to do it.
|
|
||||||
- If the site does not have an API that does not require authorization, this may take some time.
|
|
||||||
- If you will be posting request urls **without OAuth** authentication, I might consider adding your site if I have time.
|
|
||||||
- If I'm **not** interested in the site you want to add, you can pay to have it added by making a donation of approximately $10. **But before that, you still need to create an issue. If I'm not interested, you can offer me a deal to develop it for money. I'll check the site you want to add, check the availability of the API and tell you how much time I need to develop it and the price. If you agree, I will do it.** [](https://ko-fi.com/andyprogram)
|
|
||||||
|
|
||||||
|
# Requirements for new site requests
|
||||||
|
|
||||||
|
**Attention! I'll add a new site only if I'm interested. I also have a life, and any development takes time.**
|
||||||
|
|
||||||
|
- Post a link to the site's API
|
||||||
|
- Post request URLs **without OAuth** authentication
|
||||||
|
- Post a **complete cURL** request which provides the required information (JSON is better)
|
||||||
|
|
||||||
|
**I don't use OAuth authentication** in my application, so if it's not too hard to make a new parsing algorithm **without OAuth** authorization, I can start developing it in the coming days. Otherwise, I need time to figure out how to do it.
|
||||||
|
|
||||||
|
If I'm interested in a site you want to add, it may be added in future releases.
|
||||||
|
|
||||||
# Sites I will never develop
|
# Sites I will never develop
|
||||||
|
|
||||||
|
|||||||
110
Changelog.md
@@ -1,5 +1,73 @@
|
|||||||
|
# 2022.8.22.0
|
||||||
|
|
||||||
|
*2022-08-22*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- Ability to enable/disable the display of the downloaded image in toast notifications (AutoDownloader)
|
||||||
|
- Ability to enable/disable the display of the user icon in toast notifications (AutoDownloader)
|
||||||
|
- Downloading with standalone video downloader has been moved to a separate thread
|
||||||
|
- Fixed
|
||||||
|
- (Issue #35) The file name does not change only by date
|
||||||
|
- (Issue #62) Internal library error
|
||||||
|
- AutoDownloader option ```Show notifications``` not saved
|
||||||
|
- Minor bugs
|
||||||
|
|
||||||
|
# 2022.7.7.0
|
||||||
|
|
||||||
|
*2022-07-07*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- **Scheduler** (creating multiple automation tasks)
|
||||||
|
- Automation startup delay
|
||||||
|
- Download ```webp``` in ```jpg``` format
|
||||||
|
- Development: the ability to create a label control, that provides some information
|
||||||
|
- Removed
|
||||||
|
- Instagram auto-fill hash from cookies
|
||||||
|
- Updated
|
||||||
|
- Plugins
|
||||||
|
- Fixed
|
||||||
|
- ```Stop``` option not working properly
|
||||||
|
- In some cases, Twitter image is not downloading
|
||||||
|
- Minor bugs
|
||||||
|
|
||||||
|
# 2022.6.10.0
|
||||||
|
|
||||||
|
*2022-06-10*
|
||||||
|
|
||||||
|
**Attention! From now on, Instagram requires Cookies, Hash and authorization headers!**
|
||||||
|
|
||||||
|
- Fixed
|
||||||
|
- Can't get Instagram user ID
|
||||||
|
|
||||||
|
# 2022.6.6.0
|
||||||
|
|
||||||
|
*2022-06-06*
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- Ability to pause automation
|
||||||
|
- Fixed
|
||||||
|
- GIFs from Twitter not downloading
|
||||||
|
- Not quite correct algorithm for stopping automation
|
||||||
|
|
||||||
|
# 2022.6.3.0
|
||||||
|
|
||||||
|
*2022-06-03*
|
||||||
|
|
||||||
|
Changed version numbering method. From now on, new versions will be numbered by release date (YYYY.M.D)
|
||||||
|
|
||||||
|
**Attention! Starting with this release, SCrawler may not work on windows 7 and 8 or may not work correctly. All future releases will only be guaranteed to work on windows 10 and 11.**
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- **Automation** (downloading data automatically every ```X``` minutes)
|
||||||
|
- Expanded settings for Instagram tagged posts that are downloaded for the first time.
|
||||||
|
- Fixed
|
||||||
|
- Videos hosted on Reddit that are downloaded via m3u8 playlists are missing an audio track.
|
||||||
|
- Instagram hash not able to be auto-filled from cookies
|
||||||
|
|
||||||
# 3.0.0.10
|
# 3.0.0.10
|
||||||
|
|
||||||
|
*2022-05-23*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- **Downloading groups**
|
- **Downloading groups**
|
||||||
- **Download saved Twitter posts** (bookmarks)
|
- **Download saved Twitter posts** (bookmarks)
|
||||||
@@ -21,6 +89,8 @@
|
|||||||
|
|
||||||
# 3.0.0.9
|
# 3.0.0.9
|
||||||
|
|
||||||
|
*2022-04-24*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Excluded labels
|
- Excluded labels
|
||||||
- Ability to disable user grouping
|
- Ability to disable user grouping
|
||||||
@@ -31,6 +101,8 @@
|
|||||||
|
|
||||||
# 3.0.0.8
|
# 3.0.0.8
|
||||||
|
|
||||||
|
*2022-04-19*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Script mode ```command```
|
- Script mode ```command```
|
||||||
- Disabled Instagram error 403 (Forbidden) logging for downloading tagged data
|
- Disabled Instagram error 403 (Forbidden) logging for downloading tagged data
|
||||||
@@ -39,6 +111,8 @@
|
|||||||
|
|
||||||
# 3.0.0.7
|
# 3.0.0.7
|
||||||
|
|
||||||
|
*2022-04-14*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Ability to run a script after the user download is complete
|
- Ability to run a script after the user download is complete
|
||||||
- Hotkey ```F2``` for additional options in the user creation form
|
- Hotkey ```F2``` for additional options in the user creation form
|
||||||
@@ -49,6 +123,8 @@
|
|||||||
|
|
||||||
# 3.0.0.6
|
# 3.0.0.6
|
||||||
|
|
||||||
|
*2022-04-04*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- ```GoTo Start``` channels button
|
- ```GoTo Start``` channels button
|
||||||
- ```GoTo End``` channels button
|
- ```GoTo End``` channels button
|
||||||
@@ -60,17 +136,23 @@
|
|||||||
|
|
||||||
# 3.0.0.5
|
# 3.0.0.5
|
||||||
|
|
||||||
|
*2022-04-02*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- ```New```, ```Hot```, ```Top``` Reddit channel and user download modes
|
- ```New```, ```Hot```, ```Top``` Reddit channel and user download modes
|
||||||
|
|
||||||
# 3.0.0.4
|
# 3.0.0.4
|
||||||
|
|
||||||
|
*2022-03-26*
|
||||||
|
|
||||||
- Fixed
|
- Fixed
|
||||||
- External plugins do not save information about downloaded files
|
- External plugins do not save information about downloaded files
|
||||||
- The user cannot be added to the collection if a special path has been specified.
|
- The user cannot be added to the collection if a special path has been specified.
|
||||||
|
|
||||||
# 3.0.0.3
|
# 3.0.0.3
|
||||||
|
|
||||||
|
*2022-03-24*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Download all by specific sites
|
- Download all by specific sites
|
||||||
- Download all, ignoring the ```Ready for download``` option
|
- Download all, ignoring the ```Ready for download``` option
|
||||||
@@ -82,6 +164,8 @@
|
|||||||
|
|
||||||
# 3.0.0.2
|
# 3.0.0.2
|
||||||
|
|
||||||
|
*2022-03-22*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- **LPSG** site plugin
|
- **LPSG** site plugin
|
||||||
- **XVIDEOS** site plugin
|
- **XVIDEOS** site plugin
|
||||||
@@ -92,6 +176,8 @@
|
|||||||
|
|
||||||
# 3.0.0.1
|
# 3.0.0.1
|
||||||
|
|
||||||
|
*2022-03-20*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Download data up to a specific date
|
- Download data up to a specific date
|
||||||
- Update and Reset functions in the plugin (ISiteSettings)
|
- Update and Reset functions in the plugin (ISiteSettings)
|
||||||
@@ -105,6 +191,8 @@
|
|||||||
|
|
||||||
# 3.0.0.0
|
# 3.0.0.0
|
||||||
|
|
||||||
|
*2022-03-17*
|
||||||
|
|
||||||
**Attention! This version of the program makes changes user data file (Users.xml). Once you start using this version, you will not be able to use previous versions of the program. Therefore, it is highly recommended to archive the program settings folder and archive the users' data files (you can use the [```ArchiveSCrawlerUsersDataFiles.bat```](Tools/ArchiveSCrawlerUsersDataFiles.bat) tool to archive the data files of all users).**
|
**Attention! This version of the program makes changes user data file (Users.xml). Once you start using this version, you will not be able to use previous versions of the program. Therefore, it is highly recommended to archive the program settings folder and archive the users' data files (you can use the [```ArchiveSCrawlerUsersDataFiles.bat```](Tools/ArchiveSCrawlerUsersDataFiles.bat) tool to archive the data files of all users).**
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
@@ -145,6 +233,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 2.0.0.4
|
# 2.0.0.4
|
||||||
|
|
||||||
|
*2022-02-07*
|
||||||
|
|
||||||
**Removed compatibility of program settings with version 1.0.0.4 and lower.**
|
**Removed compatibility of program settings with version 1.0.0.4 and lower.**
|
||||||
|
|
||||||
**If your program version is 1.0.0.4 and lower, it is strongly recommended that you upgrade to release 2.0.0.1 to update the program settings (and run the program). Then update to this release. Otherwise, you will have to configure the program settings again**
|
**If your program version is 1.0.0.4 and lower, it is strongly recommended that you upgrade to release 2.0.0.1 to update the program settings (and run the program). Then update to this release. Otherwise, you will have to configure the program settings again**
|
||||||
@@ -159,6 +249,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 2.0.0.3
|
# 2.0.0.3
|
||||||
|
|
||||||
|
*2022-02-02*
|
||||||
|
|
||||||
**Removed compatibility of program settings with version 1.0.0.4 and lower.**
|
**Removed compatibility of program settings with version 1.0.0.4 and lower.**
|
||||||
|
|
||||||
**If your program version is 1.0.0.4 and lower, it is strongly recommended that you upgrade to release 2.0.0.1 to update the program settings (and run the program). Then update to this release. Otherwise, you will have to configure the program settings again**
|
**If your program version is 1.0.0.4 and lower, it is strongly recommended that you upgrade to release 2.0.0.1 to update the program settings (and run the program). Then update to this release. Otherwise, you will have to configure the program settings again**
|
||||||
@@ -174,6 +266,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 2.0.0.2
|
# 2.0.0.2
|
||||||
|
|
||||||
|
*2022-01-23*
|
||||||
|
|
||||||
**This is the last release that supports program settings of version 1.0.0.4 and lower. Compatibility of program settings with version 1.0.0.4 and lower will be removed in future releases. It is strongly recommended that you upgrade to this release before future releases. Otherwise, you will have to configure the program settings again. If your program version is 1.0.1.0 or higher, you should not pay attention to this message.**
|
**This is the last release that supports program settings of version 1.0.0.4 and lower. Compatibility of program settings with version 1.0.0.4 and lower will be removed in future releases. It is strongly recommended that you upgrade to this release before future releases. Otherwise, you will have to configure the program settings again. If your program version is 1.0.1.0 or higher, you should not pay attention to this message.**
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
@@ -196,6 +290,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 2.0.0.1
|
# 2.0.0.1
|
||||||
|
|
||||||
|
*2021-12-29*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Download individual Imgur media files (use the "Download video" form).
|
- Download individual Imgur media files (use the "Download video" form).
|
||||||
- Fixed
|
- Fixed
|
||||||
@@ -204,6 +300,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 2.0.0.0
|
# 2.0.0.0
|
||||||
|
|
||||||
|
*2021-12-27*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- **Instagram**
|
- **Instagram**
|
||||||
- Filter by site
|
- Filter by site
|
||||||
@@ -221,6 +319,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 1.0.1.0
|
# 1.0.1.0
|
||||||
|
|
||||||
|
*2021-12-20*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Extended site settings
|
- Extended site settings
|
||||||
- Non-existend users will be marked in red
|
- Non-existend users will be marked in red
|
||||||
@@ -242,6 +342,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 1.0.0.4
|
# 1.0.0.4
|
||||||
|
|
||||||
|
*2021-12-12*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Full channels support (you can now add channel (subreddit) for standard download)
|
- Full channels support (you can now add channel (subreddit) for standard download)
|
||||||
- ```Ready for download``` now available for collections and can be changed for multiple user
|
- ```Ready for download``` now available for collections and can be changed for multiple user
|
||||||
@@ -250,12 +352,16 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 1.0.0.3
|
# 1.0.0.3
|
||||||
|
|
||||||
|
*2021-12-11*
|
||||||
|
|
||||||
- Fixed
|
- Fixed
|
||||||
- Custom "Download videos" option is not saved
|
- Custom "Download videos" option is not saved
|
||||||
- The "Download all" button is not activated after changing modes
|
- The "Download all" button is not activated after changing modes
|
||||||
|
|
||||||
# 1.0.0.2
|
# 1.0.0.2
|
||||||
|
|
||||||
|
*2021-12-10*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Ability to choose what types of media you want to download (images only, videos only, both)
|
- Ability to choose what types of media you want to download (images only, videos only, both)
|
||||||
- Ability to name files by date
|
- Ability to name files by date
|
||||||
@@ -264,6 +370,8 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 1.0.0.1
|
# 1.0.0.1
|
||||||
|
|
||||||
|
*2021-12-09*
|
||||||
|
|
||||||
- Added
|
- Added
|
||||||
- Limited download if user added from the channel
|
- Limited download if user added from the channel
|
||||||
- Forced limited download for any user
|
- Forced limited download for any user
|
||||||
@@ -286,4 +394,6 @@ At the requests of some users, I added [screenshots](ProgramScreenshots) of the
|
|||||||
|
|
||||||
# 1.0.0.0
|
# 1.0.0.0
|
||||||
|
|
||||||
|
*2021-12-07*
|
||||||
|
|
||||||
Initial release
|
Initial release
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
BIN
ProgramScreenshots/SettingsAutoDownloader.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
BIN
ProgramScreenshots/SettingsScheduler.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
@@ -5,6 +5,8 @@ https://www.4kdownload.com/products/product-stogram
|
|||||||
| Option | SCrawler | 4K Stogram |
|
| Option | SCrawler | 4K Stogram |
|
||||||
| ---- | ---- | ---- |
|
| ---- | ---- | ---- |
|
||||||
| User managament | **Advanced** | Primitive |
|
| User managament | **Advanced** | Primitive |
|
||||||
|
| Automatic downloads | **Yes** | No |
|
||||||
|
| Downloading groups | **Yes** | No |
|
||||||
| Labeling users | **Yes** | No |
|
| Labeling users | **Yes** | No |
|
||||||
| Filtering | **Yes** | No |
|
| Filtering | **Yes** | No |
|
||||||
| Collections | **Yes** | No |
|
| Collections | **Yes** | No |
|
||||||
@@ -44,6 +46,8 @@ https://github.com/RipMeApp/ripme
|
|||||||
| Option | SCrawler | RipMeApp |
|
| Option | SCrawler | RipMeApp |
|
||||||
| ---- | ---- | ---- |
|
| ---- | ---- | ---- |
|
||||||
| User managament | **Advanced** | No |
|
| User managament | **Advanced** | No |
|
||||||
|
| Automatic downloads | **Yes** | No |
|
||||||
|
| Downloading groups | **Yes** | No |
|
||||||
| Labeling users | **Yes** | No |
|
| Labeling users | **Yes** | No |
|
||||||
| Filtering | **Yes** | No |
|
| Filtering | **Yes** | No |
|
||||||
| Collections | **Yes** | No |
|
| Collections | **Yes** | No |
|
||||||
@@ -75,4 +79,4 @@ https://github.com/mikf/gallery-dl
|
|||||||
|
|
||||||
**CLI tool**! Configured with JSON files only. Users need to learn complex configuration options, JSON, commands to use that tool. Very difficult to configure.
|
**CLI tool**! Configured with JSON files only. Users need to learn complex configuration options, JSON, commands to use that tool. Very difficult to configure.
|
||||||
|
|
||||||
SCrawler has advanced user management, collections, labels, groups, a beautiful view, GUI, the ability to add plugins for other sites and much more. Just try it and compare.
|
SCrawler has advanced user management, collections, labels, groups, automatic downloads, a beautiful view, GUI, the ability to add plugins for other sites and much more. Just try it and compare.
|
||||||
40
README.md
@@ -1,4 +1,4 @@
|
|||||||
# Social networks crawler
|
# :rainbow_flag: Social networks crawler :rainbow_flag:
|
||||||
|
|
||||||
[](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)
|
||||||
@@ -21,20 +21,24 @@ Do you like this program? Consider adding to my coffee fund by making a donation
|
|||||||
- Download pictures and videos from users' profiles and subreddits:
|
- Download pictures and videos from users' profiles and subreddits:
|
||||||
- Reddit images;
|
- Reddit images;
|
||||||
- Reddit galleries of images;
|
- Reddit galleries of images;
|
||||||
- Redgifs hosted videos (https://www.redgifs.com/);
|
- Reddit videos (downloading Reddit hosted video is going through ffmpeg (**ffmpeg only works with the x64 program**));
|
||||||
- Reddit hosted videos (downloading Reddit hosted video is going through ffmpeg (**ffmpeg only works with the x64 program**));
|
- Redgifs videos (https://www.redgifs.com/);
|
||||||
- Twitter images and videos;
|
- Twitter images and videos;
|
||||||
- Instagram images and videos.
|
- Instagram images and videos;
|
||||||
- Imgur images, galleries and videos
|
- Instagram tagged posts;
|
||||||
- Gfycat videos
|
- Instagram stories;
|
||||||
|
- Imgur images, galleries and videos;
|
||||||
|
- Gfycat videos;
|
||||||
- [Other](#supported-sites) supported sites
|
- [Other](#supported-sites) supported sites
|
||||||
- Parse [channel and view data](https://github.com/AAndyProgram/SCrawler/wiki/Channels).
|
- Parse [channel and view data](https://github.com/AAndyProgram/SCrawler/wiki/Channels)
|
||||||
- Download [saved Reddit 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**
|
||||||
- Labeling users.
|
- **Automation** (downloading data automatically every ```X``` minutes)
|
||||||
- Adding users to favorites and temporary.
|
- Labeling users
|
||||||
- Filter exists users by label or group.
|
- Create download groups
|
||||||
|
- Adding users to favorites and temporary
|
||||||
|
- Filter exists users 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, image or gallery
|
||||||
- Making collections (grouping users into collections)
|
- Making collections (grouping users into collections)
|
||||||
@@ -75,7 +79,7 @@ Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about
|
|||||||
|
|
||||||
# Requirements
|
# Requirements
|
||||||
|
|
||||||
- Windows 7, 8, 9, 10, 11 with NET Framework 4.6.1 or higher (v4.6.1 must be installed). You can check version compatibility with this [tool](Tools/NET.FrameworkVersion.ps1).
|
- Windows 10, 11 with NET Framework 4.6.1 or higher (v4.6.1 must be installed). You can check version compatibility with this [tool](Tools/NET.FrameworkVersion.ps1).
|
||||||
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for Twitter (if you want to download data from Twitter)
|
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for Twitter (if you want to download data from Twitter)
|
||||||
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [Hash](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) for Instagram (if you want to download data from Instagram), [Hash 2](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-hash-2) for saved Instagram posts, Instagram [stories authorization headers](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-stories-authorization-headers) for Stories and Tagged data
|
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [Hash](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) for Instagram (if you want to download data from Instagram), [Hash 2](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-hash-2) for saved Instagram posts, Instagram [stories authorization headers](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-stories-authorization-headers) for Stories and Tagged data
|
||||||
- ffmpeg library for downloading videos hosted on Reddit (you can download it from the [official repo](https://github.com/GyanD/codexffmpeg/releases/tag/2021-01-12-git-ca21cb1e36) or [from my first release](https://github.com/AAndyProgram/SCrawler/releases/download/1.0.0.0/ffmpeg.zip)). **ffmpeg only works with the x64 version of the program.**
|
- ffmpeg library for downloading videos hosted on Reddit (you can download it from the [official repo](https://github.com/GyanD/codexffmpeg/releases/tag/2021-01-12-git-ca21cb1e36) or [from my first release](https://github.com/AAndyProgram/SCrawler/releases/download/1.0.0.0/ffmpeg.zip)). **ffmpeg only works with the x64 version of the program.**
|
||||||
@@ -86,7 +90,7 @@ Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about
|
|||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
**Just 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, copy the file ```ffmpeg.exe``` into it 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)**
|
||||||
|
|
||||||
@@ -96,9 +100,7 @@ Just download [latest](https://github.com/AAndyProgram/SCrawler/releases/latest)
|
|||||||
|
|
||||||
# How to build from source
|
# How to build from source
|
||||||
|
|
||||||
1. Delete the "PersonalUtilities" project from the solution.
|
Read about how to build from source [here](CONTRIBUTING.md#how-to-build-from-source)
|
||||||
1. Add the latest version of the "PersonalUtilities.dll" library (from the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest)).
|
|
||||||
1. Import PersonalUtilities.Functions for the whole project.
|
|
||||||
|
|
||||||
# How to make a plugin
|
# How to make a plugin
|
||||||
|
|
||||||
@@ -114,7 +116,7 @@ The program has an intuitive interface.
|
|||||||
|
|
||||||
You need to set up authorization for Twitter and Instagram:
|
You need to set up authorization for Twitter and Instagram:
|
||||||
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for **Twitter** (if you want to download data from Twitter)
|
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for **Twitter** (if you want to download data from Twitter)
|
||||||
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [Hash](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) for **Instagram** (if you want to download data from Instagram), [Hash 2](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-hash-2) for **saved Instagram posts**, Instagram [stories authorization headers](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-stories-authorization-headers) for **Stories** and **Tagged data**
|
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies), [Hash](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram) and [authorization headers](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-authorization-headers) for **Instagram** (if you want to download data from Instagram), [Hash 2](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-instagram-hash-2) for **saved Instagram posts**
|
||||||
|
|
||||||
Just add a user profile and **click the ```Start downloading``` button**.
|
Just add a user profile and **click the ```Start downloading``` button**.
|
||||||
|
|
||||||
|
|||||||
@@ -30,19 +30,5 @@ Friend Module Declarations
|
|||||||
Friend ReadOnly Property FileRegExExt As New RParams(FileUrlRegexDefault, 0, Nothing, InputForbidRemover)
|
Friend ReadOnly Property FileRegExExt As New RParams(FileUrlRegexDefault, 0, Nothing, InputForbidRemover)
|
||||||
Friend ReadOnly Property FileRegExExt2 As New RParams("([^/]+?)(?=(\Z|&))", 0, Nothing, InputForbidRemover)
|
Friend ReadOnly Property FileRegExExt2 As New RParams("([^/]+?)(?=(\Z|&))", 0, Nothing, InputForbidRemover)
|
||||||
Friend ReadOnly Property FileExistsRegEx As RParams = RParams.DMS(FileUrlRegexDefault, 2)
|
Friend ReadOnly Property FileExistsRegEx As RParams = RParams.DMS(FileUrlRegexDefault, 2)
|
||||||
Private Class PUMComparer : Implements IEqualityComparer, IEqualityComparer(Of PluginUserMedia)
|
Friend ReadOnly TempListAddParams As New ListAddParams(LAP.NotContainsOnly) With {.Comparer = New FComparer(Of PluginUserMedia)(Function(x, y) x.URL = y.URL)}
|
||||||
Private Overloads Function Equals(ByVal x As PluginUserMedia, ByVal y As PluginUserMedia) As Boolean Implements IEqualityComparer(Of PluginUserMedia).Equals
|
|
||||||
Return x.URL = y.URL
|
|
||||||
End Function
|
|
||||||
Private Function IEqualityComparer_Equals(ByVal x As Object, ByVal y As Object) As Boolean Implements IEqualityComparer.Equals
|
|
||||||
Return DirectCast(x, PluginUserMedia).URL = DirectCast(y, PluginUserMedia).URL
|
|
||||||
End Function
|
|
||||||
Private Overloads Function GetHashCode(ByVal Obj As Object) As Integer Implements IEqualityComparer.GetHashCode
|
|
||||||
Throw New NotImplementedException()
|
|
||||||
End Function
|
|
||||||
Private Overloads Function GetHashCode(ByVal Obj As PluginUserMedia) As Integer Implements IEqualityComparer(Of PluginUserMedia).GetHashCode
|
|
||||||
Throw New NotImplementedException()
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
Friend ReadOnly TempListAddParams As New ListAddParams(LAP.NotContainsOnly) With {.Comparer = New PUMComparer}
|
|
||||||
End Module
|
End Module
|
||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.0.0.2")>
|
<Assembly: AssemblyVersion("2022.8.22.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.0.2")>
|
<Assembly: AssemblyFileVersion("2022.8.22.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
.LoadSettings()
|
.LoadSettings()
|
||||||
Else
|
Else
|
||||||
.CookiesDomain = "www.lpsg.com"
|
.CookiesDomain = "www.lpsg.com"
|
||||||
.Cookies = New CookieKeeper("www.lpsg.com")
|
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
@@ -81,7 +81,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Else
|
Else
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
@@ -91,7 +91,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData
|
Public Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
Public Function Available(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.Available
|
Public Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
If Responser.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then
|
If Responser.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then
|
||||||
LogProvider.Add("LPSG not available")
|
LogProvider.Add("LPSG not available")
|
||||||
Else
|
Else
|
||||||
LogProvider.Add(ex, "[LPSG.UserData.GetMedia]")
|
LogProvider.Add(ex, $"[LPSG.UserData.GetMedia({Name})]")
|
||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -47,8 +47,7 @@ Friend NotInheritable Class M3U8
|
|||||||
CachePath.Delete(SFO.Path, SFODelete.None, EDP.None)
|
CachePath.Delete(SFO.Path, SFODelete.None, EDP.None)
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Friend Shared Function Download(ByVal URL As String, ByVal Appender As String, ByVal ffmpegFile As SFile, ByVal f As SFile,
|
Friend Shared Function Download(ByVal URL As String, ByVal Appender As String, ByVal ffmpegFile As SFile, ByVal f As SFile, ByRef Logger As ILogProvider) As SFile
|
||||||
ByRef Logger As ILogProvider) As SFile
|
|
||||||
Try
|
Try
|
||||||
If Not URL.IsEmptyString Then
|
If Not URL.IsEmptyString Then
|
||||||
Using w As New WebClient
|
Using w As New WebClient
|
||||||
@@ -62,7 +61,7 @@ Friend NotInheritable Class M3U8
|
|||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If Not ex.HelpLink = 1 Then Logger.Add(ex, "[M3U8.Download]")
|
If Not ex.HelpLink = 1 Then Logger.Add(ex, $"[M3U8.Download({URL}, {Appender}, {ffmpegFile}, {f})]")
|
||||||
Throw ex
|
Throw ex
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.0.0.2")>
|
<Assembly: AssemblyVersion("2022.8.22.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.0.2")>
|
<Assembly: AssemblyFileVersion("2022.8.22.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
53
SCrawler.Plugin.XVIDEOS/SettingsForm.Designer.vb
generated
@@ -25,14 +25,9 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SettingsForm))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SettingsForm))
|
||||||
Me.LIST_DOMAINS = New System.Windows.Forms.ListBox()
|
Me.LIST_DOMAINS = New System.Windows.Forms.ListBox()
|
||||||
Me.ToolbarTOP = New System.Windows.Forms.ToolStrip()
|
|
||||||
Me.BTT_ADD = New System.Windows.Forms.ToolStripButton()
|
|
||||||
Me.BTT_DELETE = New System.Windows.Forms.ToolStripButton()
|
|
||||||
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
CONTAINER_MAIN.TopToolStripPanel.SuspendLayout()
|
|
||||||
CONTAINER_MAIN.SuspendLayout()
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
Me.ToolbarTOP.SuspendLayout()
|
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN
|
'CONTAINER_MAIN
|
||||||
@@ -41,7 +36,7 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_DOMAINS)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_DOMAINS)
|
||||||
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 266)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 291)
|
||||||
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)
|
||||||
@@ -50,52 +45,15 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
CONTAINER_MAIN.Size = New System.Drawing.Size(384, 291)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(384, 291)
|
||||||
CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN.TopToolStripPanel
|
|
||||||
'
|
|
||||||
CONTAINER_MAIN.TopToolStripPanel.Controls.Add(Me.ToolbarTOP)
|
|
||||||
'
|
|
||||||
'LIST_DOMAINS
|
'LIST_DOMAINS
|
||||||
'
|
'
|
||||||
Me.LIST_DOMAINS.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.LIST_DOMAINS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.LIST_DOMAINS.FormattingEnabled = True
|
Me.LIST_DOMAINS.FormattingEnabled = True
|
||||||
Me.LIST_DOMAINS.Location = New System.Drawing.Point(0, 0)
|
Me.LIST_DOMAINS.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LIST_DOMAINS.Name = "LIST_DOMAINS"
|
Me.LIST_DOMAINS.Name = "LIST_DOMAINS"
|
||||||
Me.LIST_DOMAINS.Size = New System.Drawing.Size(384, 266)
|
Me.LIST_DOMAINS.Size = New System.Drawing.Size(384, 291)
|
||||||
Me.LIST_DOMAINS.TabIndex = 0
|
Me.LIST_DOMAINS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'ToolbarTOP
|
|
||||||
'
|
|
||||||
Me.ToolbarTOP.Dock = System.Windows.Forms.DockStyle.None
|
|
||||||
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
|
||||||
Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_ADD, Me.BTT_DELETE})
|
|
||||||
Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0)
|
|
||||||
Me.ToolbarTOP.Name = "ToolbarTOP"
|
|
||||||
Me.ToolbarTOP.Size = New System.Drawing.Size(384, 25)
|
|
||||||
Me.ToolbarTOP.Stretch = True
|
|
||||||
Me.ToolbarTOP.TabIndex = 0
|
|
||||||
'
|
|
||||||
'BTT_ADD
|
|
||||||
'
|
|
||||||
Me.BTT_ADD.AutoToolTip = False
|
|
||||||
Me.BTT_ADD.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer))
|
|
||||||
Me.BTT_ADD.ForeColor = System.Drawing.Color.DarkGreen
|
|
||||||
Me.BTT_ADD.Image = CType(resources.GetObject("BTT_ADD.Image"), System.Drawing.Image)
|
|
||||||
Me.BTT_ADD.ImageTransparentColor = System.Drawing.Color.Magenta
|
|
||||||
Me.BTT_ADD.Name = "BTT_ADD"
|
|
||||||
Me.BTT_ADD.Size = New System.Drawing.Size(49, 22)
|
|
||||||
Me.BTT_ADD.Text = "Add"
|
|
||||||
'
|
|
||||||
'BTT_DELETE
|
|
||||||
'
|
|
||||||
Me.BTT_DELETE.AutoToolTip = False
|
|
||||||
Me.BTT_DELETE.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer))
|
|
||||||
Me.BTT_DELETE.ForeColor = System.Drawing.Color.Maroon
|
|
||||||
Me.BTT_DELETE.Image = CType(resources.GetObject("BTT_DELETE.Image"), System.Drawing.Image)
|
|
||||||
Me.BTT_DELETE.ImageTransparentColor = System.Drawing.Color.Magenta
|
|
||||||
Me.BTT_DELETE.Name = "BTT_DELETE"
|
|
||||||
Me.BTT_DELETE.Size = New System.Drawing.Size(60, 22)
|
|
||||||
Me.BTT_DELETE.Text = "Delete"
|
|
||||||
'
|
|
||||||
'SettingsForm
|
'SettingsForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
@@ -112,18 +70,11 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
Me.Text = "Settings"
|
Me.Text = "Settings"
|
||||||
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
CONTAINER_MAIN.TopToolStripPanel.ResumeLayout(False)
|
|
||||||
CONTAINER_MAIN.TopToolStripPanel.PerformLayout()
|
|
||||||
CONTAINER_MAIN.ResumeLayout(False)
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
CONTAINER_MAIN.PerformLayout()
|
CONTAINER_MAIN.PerformLayout()
|
||||||
Me.ToolbarTOP.ResumeLayout(False)
|
|
||||||
Me.ToolbarTOP.PerformLayout()
|
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private WithEvents LIST_DOMAINS As Windows.Forms.ListBox
|
Private WithEvents LIST_DOMAINS As Windows.Forms.ListBox
|
||||||
Private WithEvents ToolbarTOP As Windows.Forms.ToolStrip
|
|
||||||
Private WithEvents BTT_ADD As Windows.Forms.ToolStripButton
|
|
||||||
Private WithEvents BTT_DELETE As Windows.Forms.ToolStripButton
|
|
||||||
End Class
|
End Class
|
||||||
@@ -120,60 +120,7 @@
|
|||||||
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="ToolbarTOP.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" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="BTT_ADD.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
|
||||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAN+SURBVEhLrZVZSFRRGMdvKa6oE5Y1bpTtRY2pJYk3ayyd
|
|
||||||
xgrvaDXlQotLKVqSo7QR2QIREUX0EgUSET1V9NTyYBHt6ZTOqNPY7DomWNbriX/fuYzkg2jY/eAPM5zD
|
|
||||||
//+d7/7OvcJkFXIlqDX0ahDGE18LbJt6cSOtWWTaDhGbPonQdZEsIrY7cuWQwLapFzfZ9FlkES8ERL8W
|
|
||||||
EPteQMLHYFR69coFUNcs5o2AWe+nYW5HKFK7otHkL1IuoKBbZLzzFHMo0qwxWN8zG2eHSpULkGxalmIO
|
|
||||||
w2qrCvm2eJr/AlwZrlIuYN9XHcuwqKC3JWC3czGqXKm4OVKvXMARTyHTfUlEmWspatxp9D8Ld0ZM/xYw
|
|
||||||
EeejMnkMv0tdS1DnzkBzv4jT/jy0fm/EzLvhE0p9P7JV7jB3lHHiu6BHhMGmRbkjH3WebTjq245z/nL6
|
|
||||||
nYFjvnVo8efjzKAOrcONuD1skoNuDNfj8lAFWgZL0OQrphEWoMa1E+oHkZADuHn0K2L8rYDEjhBoCENO
|
|
||||||
itSXgr2u5TjkycTx/g1koMP5Qb0ccHogj8xEVLlTsaNvIXJ750BjiUZSewhU5LPTIv0N4J1zc76osUTR
|
|
||||||
ZjWKAuaHvZk44dPijF9HAXk4OaCFyZdNzyIde5zLUGifh5yeOKzoikJ8RzBU7wSE06Us+jQmoMAqIpnM
|
|
||||||
U6mDXJtaxrDSrUGDdw2O9a/HCTI96suByZuNw57VqKa1MtcybLXPxTo6qWzeHgx+Gbn5tCcCpHdjAnbZ
|
|
||||||
NmKtNZYwTESJYwnq6WE2EinNZMhNj3izZDXQqKppJJymLfZkZHfHYWlnJNQfghBFIw5rEyA8Jj2ggJdj
|
|
||||||
Ag769cw0ZGAtP8rYhZH97NLPanbpVxW7/PMAu/atlnSQzNeg0qWB0bkIensSmj3lqHUaf1d4ilipU2LG
|
|
||||||
LxIzWCUmfSZ9JL2VmBzAMR0PsVHxTbeGmlmleyWMjoXYTKfMpNPWuI3y2oTimE5WfOP1bw1sBz2X/N4E
|
|
||||||
pNONnm8Oxx6HQTYJbJt6cZOLAzUsrzdeftHxt2kskbLbFpjx/xY3OeWtYKssMUgkUmYQzvzbUDzK+f8W
|
|
||||||
N6l3lbCk9lCoCMOI5wKCnhIlZgUD9tkNjJuHUefTOYaPKOCNggEl3RILp84FukDCQ9I9CnihYEBxpySP
|
|
||||||
hNiWL5DURnqmVACxzI3G1aScC8If1IGynvf45pQAAAAASUVORK5CYII=
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="BTT_DELETE.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
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
|
|
||||||
FHW1qQAAAABJRU5ErkJggg==
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAIAKgIAABGDgAAMDAAAAEA
|
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAIAKgIAABGDgAAMDAAAAEA
|
||||||
|
|||||||
@@ -8,28 +8,24 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Public Class SettingsForm : Implements IOkCancelToolbar
|
Public Class SettingsForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Private ReadOnly Property Settings As SiteSettings
|
Private ReadOnly Property Settings As SiteSettings
|
||||||
Friend Sub New(ByRef s As SiteSettings)
|
Friend Sub New(ByRef s As SiteSettings, ByRef Design As XML.XmlFile)
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyDefs = New DefaultFormProps
|
|
||||||
Settings = s
|
Settings = s
|
||||||
|
MyDefs = New DefaultFormOptions(Me, Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub SettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(True)
|
||||||
|
.AddEditToolbar({EditToolbar.ControlItem.Add, EditToolbar.ControlItem.Delete})
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
|
||||||
If Settings.Domains.Count > 0 Then Settings.Domains.ForEach(Sub(d) LIST_DOMAINS.Items.Add(d))
|
If Settings.Domains.Count > 0 Then Settings.Domains.ForEach(Sub(d) LIST_DOMAINS.Items.Add(d))
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
Catch ex As Exception
|
|
||||||
MyDefs.InvokeLoaderError(ex)
|
|
||||||
End Try
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
Settings.Domains.Clear()
|
Settings.Domains.Clear()
|
||||||
With LIST_DOMAINS
|
With LIST_DOMAINS
|
||||||
If .Items.Count > 0 Then
|
If .Items.Count > 0 Then
|
||||||
@@ -39,10 +35,7 @@ Public Class SettingsForm : Implements IOkCancelToolbar
|
|||||||
Settings.UpdateDomains()
|
Settings.UpdateDomains()
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbar.EditToolbarEventArgs) Handles MyDefs.ButtonAddClick
|
||||||
MyDefs.CloseForm(Windows.Forms.DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub BTT_ADD_Click(sender As Object, e As EventArgs) Handles BTT_ADD.Click
|
|
||||||
Dim nd$ = InputBoxE("Enter a new domain using the pattern [xvideos.com]:", "New domain")
|
Dim nd$ = InputBoxE("Enter a new domain using the pattern [xvideos.com]:", "New domain")
|
||||||
If Not nd.IsEmptyString Then
|
If Not nd.IsEmptyString Then
|
||||||
If Not LIST_DOMAINS.Items.Contains(nd) Then
|
If Not LIST_DOMAINS.Items.Contains(nd) Then
|
||||||
@@ -52,11 +45,10 @@ Public Class SettingsForm : Implements IOkCancelToolbar
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_DELETE_Click(sender As Object, e As EventArgs) Handles BTT_DELETE.Click
|
Private Sub MyDefs_ButtonDeleteClickE(ByVal Sender As Object, ByVal e As EditToolbar.EditToolbarEventArgs) Handles MyDefs.ButtonDeleteClickE
|
||||||
If _LatestSelected.ValueBetween(0, LIST_DOMAINS.Items.Count - 1) Then
|
If _LatestSelected.ValueBetween(0, LIST_DOMAINS.Items.Count - 1) Then
|
||||||
Dim n$ = LIST_DOMAINS.Items(_LatestSelected)
|
Dim n$ = LIST_DOMAINS.Items(_LatestSelected)
|
||||||
If MsgBoxE({$"Are you sure you want to delete the [{n}] domain?",
|
If MsgBoxE({$"Are you sure you want to delete the [{n}] domain?", "Removing domains"}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||||
"Removing domains"}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
|
||||||
LIST_DOMAINS.Items.RemoveAt(_LatestSelected)
|
LIST_DOMAINS.Items.RemoveAt(_LatestSelected)
|
||||||
MsgBoxE($"Domain [{n}] removed")
|
MsgBoxE($"Domain [{n}] removed")
|
||||||
Else
|
Else
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Property Logger As ILogProvider Implements ISiteSettings.Logger
|
Public Property Logger As ILogProvider Implements ISiteSettings.Logger
|
||||||
#Region "M3U8"
|
#Region "M3U8"
|
||||||
Private ReadOnly OS64 As Boolean
|
Private ReadOnly OS64 As Boolean
|
||||||
Private ReadOnly FfmpegExists As Boolean
|
Friend 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
|
||||||
@@ -41,7 +41,6 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public ReadOnly Property Responser As Response
|
Public ReadOnly Property Responser As Response
|
||||||
Private Const DomainsDefault As String = "xvideos.com|xnxx.com"
|
Private Const DomainsDefault As String = "xvideos.com|xnxx.com"
|
||||||
Private _Initialized As Boolean = False
|
Private _Initialized As Boolean = False
|
||||||
Friend Design As XmlFile
|
|
||||||
Public Sub New()
|
Public Sub New()
|
||||||
Responser = New Response($"Settings\Responser_{Site}.xml")
|
Responser = New Response($"Settings\Responser_{Site}.xml")
|
||||||
With Responser
|
With Responser
|
||||||
@@ -83,7 +82,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
#Region "Downloading"
|
#Region "Downloading"
|
||||||
Public Function Available(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.Available
|
Public Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available
|
||||||
Return UseM3U8
|
Return UseM3U8
|
||||||
End Function
|
End Function
|
||||||
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
@@ -109,10 +108,8 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Sub Reset() Implements ISiteSettings.Reset
|
Public Sub Reset() Implements ISiteSettings.Reset
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub OpenSettingsForm() Implements ISiteSettings.OpenSettingsForm
|
Public Sub OpenSettingsForm() Implements ISiteSettings.OpenSettingsForm
|
||||||
Using f As New SettingsForm(Me)
|
Using Design As New XmlFile("Settings\Design_XVIDEOS.xml")
|
||||||
Design = New XmlFile("Settings\Design_XVIDEOS.xml")
|
Using f As New SettingsForm(Me, Design) : f.ShowDialog() : End Using
|
||||||
f.ShowDialog()
|
|
||||||
Design.Dispose()
|
|
||||||
End Using
|
End Using
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
Public Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ Imports UStates = SCrawler.Plugin.PluginUserMedia.States
|
|||||||
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
||||||
Public Class UserData : Implements IPluginContentProvider
|
Public Class UserData : Implements IPluginContentProvider
|
||||||
#Region "Interface declarations"
|
#Region "Interface declarations"
|
||||||
Public Event ProgressChanged(Count As Integer) Implements IPluginContentProvider.ProgressChanged
|
Public Event ProgressChanged(ByVal Count As Integer) Implements IPluginContentProvider.ProgressChanged
|
||||||
Public Event TotalCountChanged(Count As Integer) Implements IPluginContentProvider.TotalCountChanged
|
Public Event TotalCountChanged(ByVal Count As Integer) Implements IPluginContentProvider.TotalCountChanged
|
||||||
Public Property Thrower As IThrower Implements IPluginContentProvider.Thrower
|
Public Property Thrower As IThrower Implements IPluginContentProvider.Thrower
|
||||||
Public Property LogProvider As ILogProvider Implements IPluginContentProvider.LogProvider
|
Public Property LogProvider As ILogProvider Implements IPluginContentProvider.LogProvider
|
||||||
Public Property ESettings As ISiteSettings Implements IPluginContentProvider.Settings
|
Public Property ESettings As ISiteSettings Implements IPluginContentProvider.Settings
|
||||||
@@ -56,7 +56,14 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
Private Property Responser As Response
|
Private Property Responser As Response
|
||||||
Public Sub GetMedia() Implements IPluginContentProvider.GetMedia
|
Public Sub GetMedia() Implements IPluginContentProvider.GetMedia
|
||||||
Try
|
Try
|
||||||
If Not Settings.UseM3U8 Then LogProvider.Add("File [ffmpeg.exe] not found") : Exit Sub
|
If Not Settings.UseM3U8 Then
|
||||||
|
If Settings.FfmpegExists Then
|
||||||
|
LogProvider.Add($"XVIDEOS [{Name}]: The plugin only works with x64 OS.")
|
||||||
|
Else
|
||||||
|
LogProvider.Add($"XVIDEOS [{Name}]: File [ffmpeg.exe] not found")
|
||||||
|
End If
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
If Not Responser Is Nothing Then Responser.Dispose()
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
Responser = New Response
|
Responser = New Response
|
||||||
Responser.Copy(Settings.Responser)
|
Responser.Copy(Settings.Responser)
|
||||||
@@ -105,9 +112,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
If TempMediaList.Count > 0 Then
|
If TempMediaList.Count > 0 Then
|
||||||
For i% = 0 To TempMediaList.Count - 1
|
For i% = 0 To TempMediaList.Count - 1
|
||||||
Thrower.ThrowAny()
|
Thrower.ThrowAny()
|
||||||
With TempMediaList(i)
|
With TempMediaList(i) : TempMediaList(i) = GetVideoData(.URL, Responser, Settings.DownloadUHD.Value, .PostID, LogProvider) : End With
|
||||||
TempMediaList(i) = GetVideoData(.URL, Responser, Settings.DownloadUHD.Value, .PostID, LogProvider)
|
|
||||||
End With
|
|
||||||
Next
|
Next
|
||||||
TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
||||||
End If
|
End If
|
||||||
@@ -149,7 +154,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
Dim t$ = RegexReplace(r, VideoTitleRegex)
|
Dim t$ = RegexReplace(r, VideoTitleRegex)
|
||||||
r = resp.GetResponse(m,, EDP.ThrowException)
|
r = resp.GetResponse(m,, EDP.ThrowException)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Dim ls As List(Of VSize) = FNF.RegexFields(Of VSize)(r, {M3U8Reparse}, {1, 2})
|
Dim ls As List(Of VSize) = RegexFields(Of VSize)(r, {M3U8Reparse}, {1, 2})
|
||||||
If ls.ListExists And Not DownloadUHD Then ls.RemoveAll(Function(v) v.Size > 1080)
|
If ls.ListExists And Not DownloadUHD Then ls.RemoveAll(Function(v) v.Size > 1080)
|
||||||
If ls.ListExists Then
|
If ls.ListExists Then
|
||||||
ls.Sort()
|
ls.Sort()
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ Namespace Plugin.Attributes
|
|||||||
Public Property AllowNull As Boolean = True
|
Public Property AllowNull As Boolean = True
|
||||||
''' <summary>Offset the control from the left border of the form.<br/>Default: 100</summary>
|
''' <summary>Offset the control from the left border of the form.<br/>Default: 100</summary>
|
||||||
Public Property LeftOffset As Integer = 100
|
Public Property LeftOffset As Integer = 100
|
||||||
|
''' <summary>This control is an information label.<br/>Default: <see langword="False"/></summary>
|
||||||
|
Public Property IsInformationLabel As Boolean = False
|
||||||
|
''' <summary>Label text alignment.<br/>Default: <see cref="Drawing.ContentAlignment.TopCenter"/></summary>
|
||||||
|
Public Property LabelTextAlign As Drawing.ContentAlignment = Drawing.ContentAlignment.TopCenter
|
||||||
''' <summary>This is an authorization property</summary>
|
''' <summary>This is an authorization property</summary>
|
||||||
Public Property IsAuth As Boolean = False
|
Public Property IsAuth As Boolean = False
|
||||||
''' <summary>Initialize a new property option attribute</summary>
|
''' <summary>Initialize a new property option attribute</summary>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ Namespace Plugin
|
|||||||
Sub EndUpdate()
|
Sub EndUpdate()
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Site availability"
|
#Region "Site availability"
|
||||||
Function Available(ByVal What As Download) As Boolean
|
Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean
|
||||||
Function ReadyToDownload(ByVal What As Download) As Boolean
|
Function ReadyToDownload(ByVal What As Download) As Boolean
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Downloading"
|
#Region "Downloading"
|
||||||
|
|||||||
@@ -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("3.0.0.2")>
|
<Assembly: AssemblyVersion("2022.8.22.0")>
|
||||||
<Assembly: AssemblyFileVersion("3.0.0.2")>
|
<Assembly: AssemblyFileVersion("2022.8.22.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ Namespace Plugin
|
|||||||
Public HostKey As String
|
Public HostKey As String
|
||||||
Public IsChannel As Boolean
|
Public IsChannel As Boolean
|
||||||
Public Exists As Boolean
|
Public Exists As Boolean
|
||||||
Public Sub New(ByVal Site As String, ByVal _Name As String)
|
Public Sub New(ByVal Site As String, ByVal Name As String)
|
||||||
UserName = _Name
|
UserName = Name
|
||||||
SiteName = Site
|
SiteName = Site
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub New(ByVal Site As String, ByVal _Name As String, ByVal _IsChannel As Boolean)
|
Public Sub New(ByVal Site As String, ByVal Name As String, ByVal IsChannel As Boolean)
|
||||||
Me.New(Site, _Name)
|
Me.New(Site, Name)
|
||||||
IsChannel = _IsChannel
|
Me.IsChannel = IsChannel
|
||||||
End Sub
|
End Sub
|
||||||
End Structure
|
End Structure
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -10,9 +10,9 @@ Namespace Plugin
|
|||||||
Public Structure PropertyData
|
Public Structure PropertyData
|
||||||
Public ReadOnly Name As String
|
Public ReadOnly Name As String
|
||||||
Public ReadOnly Value As Object
|
Public ReadOnly Value As Object
|
||||||
Public Sub New(ByVal _Name As String, ByVal _Value As Object)
|
Public Sub New(ByVal Name As String, ByVal Value As Object)
|
||||||
Name = _Name
|
Me.Name = Name
|
||||||
Value = _Value
|
Me.Value = Value
|
||||||
End Sub
|
End Sub
|
||||||
End Structure
|
End Structure
|
||||||
End Namespace
|
End Namespace
|
||||||
14
SCrawler.sln
@@ -21,6 +21,8 @@ Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.LPSG", "SCr
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.XVIDEOS", "SCrawler.Plugin.XVIDEOS\SCrawler.Plugin.XVIDEOS.vbproj", "{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}"
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.XVIDEOS", "SCrawler.Plugin.XVIDEOS\SCrawler.Plugin.XVIDEOS.vbproj", "{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PersonalUtilities.Notifications", "..\..\MyUtilities\PersonalUtilities.Notifications\PersonalUtilities.Notifications.vbproj", "{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -91,6 +93,18 @@ Global
|
|||||||
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x64.Build.0 = Release|x64
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x64.Build.0 = Release|x64
|
||||||
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x86.ActiveCfg = Release|x86
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x86.ActiveCfg = Release|x86
|
||||||
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x86.Build.0 = Release|x86
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x86.Build.0 = Release|x86
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Release|x64.Build.0 = Release|x64
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{FC532253-1AB3-4DEF-A28A-DFDD9A481EB2}.Release|x86.Build.0 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Namespace API.Base
|
|||||||
Friend Structure Data : Implements IRegExCreator, IComparable(Of Data)
|
Friend Structure Data : Implements IRegExCreator, IComparable(Of Data)
|
||||||
Friend [Date] As Date
|
Friend [Date] As Date
|
||||||
Friend Value As Integer
|
Friend Value As Integer
|
||||||
Friend Function CreateFromArray(ByVal ParamsArray() As String) As Object Implements IRegExCreator.CreateFromArray
|
Private Function CreateFromArray(ByVal ParamsArray() As String) As Object Implements IRegExCreator.CreateFromArray
|
||||||
If ParamsArray.ListExists Then
|
If ParamsArray.ListExists Then
|
||||||
Try : [Date] = Date.Parse(ParamsArray(0)) : Catch : End Try
|
Try : [Date] = Date.Parse(ParamsArray(0)) : Catch : End Try
|
||||||
If ParamsArray.Length > 1 Then Value = AConvert(Of Integer)(ParamsArray(1), 0)
|
If ParamsArray.Length > 1 Then Value = AConvert(Of Integer)(ParamsArray(1), 0)
|
||||||
@@ -26,7 +26,7 @@ Namespace API.Base
|
|||||||
Public Overrides Function ToString() As String
|
Public Overrides Function ToString() As String
|
||||||
Return $"{AConvert(Of String)([Date], ADateTime.Formats.BaseDateTime, String.Empty)} [{Value}]"
|
Return $"{AConvert(Of String)([Date], ADateTime.Formats.BaseDateTime, String.Empty)} [{Value}]"
|
||||||
End Function
|
End Function
|
||||||
Friend Function CompareTo(ByVal Other As Data) As Integer Implements IComparable(Of Data).CompareTo
|
Private Function CompareTo(ByVal Other As Data) As Integer Implements IComparable(Of Data).CompareTo
|
||||||
Return [Date].CompareTo(Other.Date) * -1
|
Return [Date].CompareTo(Other.Date) * -1
|
||||||
End Function
|
End Function
|
||||||
End Structure
|
End Structure
|
||||||
@@ -37,7 +37,7 @@ Namespace API.Base
|
|||||||
Using w As New WebClient
|
Using w As New WebClient
|
||||||
Dim r$ = w.DownloadString($"https://downdetector.co.uk/status/{Site}/")
|
Dim r$ = w.DownloadString($"https://downdetector.co.uk/status/{Site}/")
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
l = FNF.RegexFields(Of Data)(r, {Params}, {1, 2})
|
l = RegexFields(Of Data)(r, {Params}, {1, 2})
|
||||||
If l.ListExists(2) Then
|
If l.ListExists(2) Then
|
||||||
l.Sort()
|
l.Sort()
|
||||||
l2 = New List(Of Data)
|
l2 = New List(Of Data)
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
'
|
'
|
||||||
' 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.Plugin.Hosts
|
|
||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
|
Imports SCrawler.Plugin.Hosts
|
||||||
Imports PDownload = SCrawler.Plugin.ISiteSettings.Download
|
Imports PDownload = SCrawler.Plugin.ISiteSettings.Download
|
||||||
Namespace API.Base
|
Namespace API.Base
|
||||||
Friend NotInheritable Class ProfileSaved
|
Friend NotInheritable Class ProfileSaved
|
||||||
@@ -21,17 +21,14 @@ Namespace API.Base
|
|||||||
Friend Sub Download(ByVal Token As CancellationToken)
|
Friend Sub Download(ByVal Token As CancellationToken)
|
||||||
Try
|
Try
|
||||||
If HOST.Source.ReadyToDownload(PDownload.SavedPosts) Then
|
If HOST.Source.ReadyToDownload(PDownload.SavedPosts) Then
|
||||||
If HOST.Available(PDownload.SavedPosts) Then
|
If HOST.Available(PDownload.SavedPosts, False) Then
|
||||||
HOST.DownloadStarted(PDownload.SavedPosts)
|
HOST.DownloadStarted(PDownload.SavedPosts)
|
||||||
Dim u As New UserInfo With {.Plugin = HOST.Key, .Site = HOST.Name, .SpecialPath = HOST.SavedPostsPath}
|
Dim u As New UserInfo With {.Plugin = HOST.Key, .Site = HOST.Name, .SpecialPath = HOST.SavedPostsPath}
|
||||||
Using user As IUserData = HOST.GetInstance(PDownload.SavedPosts, Nothing, False, False)
|
Using user As IUserData = HOST.GetInstance(PDownload.SavedPosts, Nothing, False, False)
|
||||||
If Not user Is Nothing AndAlso (Not user.Name.IsEmptyString Or Not HOST.IsMyClass) Then
|
If Not user Is Nothing AndAlso (Not user.Name.IsEmptyString Or Not HOST.IsMyClass) Then
|
||||||
u.Name = user.Name
|
u.Name = user.Name
|
||||||
With DirectCast(user, UserDataBase).User
|
|
||||||
u.IsChannel = .IsChannel
|
|
||||||
u.UpdateUserFile()
|
|
||||||
End With
|
|
||||||
With DirectCast(user, UserDataBase)
|
With DirectCast(user, UserDataBase)
|
||||||
|
With .User : u.IsChannel = .IsChannel : u.UpdateUserFile() : End With
|
||||||
.User = u
|
.User = u
|
||||||
.LoadUserInformation()
|
.LoadUserInformation()
|
||||||
.IsSavedPosts = True
|
.IsSavedPosts = True
|
||||||
@@ -40,7 +37,7 @@ Namespace API.Base
|
|||||||
End With
|
End With
|
||||||
HOST.BeforeStartDownload(user, PDownload.SavedPosts)
|
HOST.BeforeStartDownload(user, PDownload.SavedPosts)
|
||||||
user.DownloadData(Token)
|
user.DownloadData(Token)
|
||||||
Progress.InformationTemporary = $"Images: {user.DownloadedPictures(False)}; Videos: {user.DownloadedVideos(False)}"
|
Progress.InformationTemporary = $"{HOST.Name} Images: {user.DownloadedPictures(False)}; Videos: {user.DownloadedVideos(False)}"
|
||||||
HOST.AfterDownload(user, PDownload.SavedPosts)
|
HOST.AfterDownload(user, PDownload.SavedPosts)
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
|
|||||||
@@ -6,15 +6,15 @@
|
|||||||
'
|
'
|
||||||
' 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.Plugin
|
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Tools.WEB
|
Imports PersonalUtilities.Tools.WEB
|
||||||
|
Imports SCrawler.Plugin
|
||||||
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
||||||
Namespace API.Base
|
Namespace API.Base
|
||||||
Friend MustInherit Class SiteSettingsBase : Implements ISiteSettings
|
Friend MustInherit Class SiteSettingsBase : Implements ISiteSettings
|
||||||
Friend ReadOnly Property Site As String Implements ISiteSettings.Site
|
Friend ReadOnly Property Site As String Implements ISiteSettings.Site
|
||||||
Friend Overridable ReadOnly Property Icon As Icon = Nothing Implements ISiteSettings.Icon
|
Friend Overridable ReadOnly Property Icon As Icon Implements ISiteSettings.Icon
|
||||||
Friend Overridable ReadOnly Property Image As Image = Nothing Implements ISiteSettings.Image
|
Friend Overridable ReadOnly Property Image As Image Implements ISiteSettings.Image
|
||||||
Private Property Logger As ILogProvider = LogConnector Implements ISiteSettings.Logger
|
Private Property Logger As ILogProvider = LogConnector Implements ISiteSettings.Logger
|
||||||
Friend Overridable ReadOnly Property Responser As Response
|
Friend Overridable ReadOnly Property Responser As Response
|
||||||
Friend MustOverride Function GetInstance(ByVal What As Download) As IPluginContentProvider Implements ISiteSettings.GetInstance
|
Friend MustOverride Function GetInstance(ByVal What As Download) As IPluginContentProvider Implements ISiteSettings.GetInstance
|
||||||
@@ -25,7 +25,7 @@ Namespace API.Base
|
|||||||
Site = SiteName
|
Site = SiteName
|
||||||
Responser = New Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
Responser = New Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
||||||
With Responser
|
With Responser
|
||||||
If .File.Exists Then .LoadSettings() Else .CookiesDomain = CookiesDomain : .SaveSettings()
|
If .File.Exists Then .LoadSettings() Else .CookiesDomain = CookiesDomain : .Cookies = New CookieKeeper(.CookiesDomain) : .SaveSettings()
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
#Region "XML"
|
#Region "XML"
|
||||||
@@ -91,7 +91,7 @@ Namespace API.Base
|
|||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Ready, Available"
|
#Region "Ready, Available"
|
||||||
Friend Overridable Function Available(ByVal What As Download) As Boolean Implements ISiteSettings.Available
|
Friend Overridable Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
Friend Overridable Function ReadyToDownload(ByVal What As Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
Friend Overridable Function ReadyToDownload(ByVal What As Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
|
|||||||
@@ -106,12 +106,12 @@ Namespace API.Base
|
|||||||
Friend Function CompareTo(ByVal Other As UserPost) As Integer Implements IComparable(Of UserPost).CompareTo
|
Friend Function CompareTo(ByVal Other As UserPost) As Integer Implements IComparable(Of UserPost).CompareTo
|
||||||
Return GetCompareValue(Me).CompareTo(GetCompareValue(Other))
|
Return GetCompareValue(Me).CompareTo(GetCompareValue(Other))
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
|
||||||
Private Function GetCompareValue(ByVal Post As UserPost) As Long
|
Private Function GetCompareValue(ByVal Post As UserPost) As Long
|
||||||
Dim v& = 0
|
Dim v& = 0
|
||||||
If Post.Date.HasValue Then v = Post.Date.Value.Ticks * -1
|
If Post.Date.HasValue Then v = Post.Date.Value.Ticks * -1
|
||||||
Return v
|
Return v
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
End Structure
|
End Structure
|
||||||
Friend Structure Sizes : Implements IComparable(Of Sizes)
|
Friend Structure Sizes : Implements IComparable(Of Sizes)
|
||||||
Friend Value As Integer
|
Friend Value As Integer
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Tools.WEB
|
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools
|
||||||
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports System.IO
|
Imports System.IO
|
||||||
Imports System.Net
|
Imports System.Net
|
||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
@@ -21,28 +21,33 @@ Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
|||||||
Namespace API.Base
|
Namespace API.Base
|
||||||
Friend MustInherit Class UserDataBase : Implements IUserData, IPluginContentProvider, IThrower
|
Friend MustInherit Class UserDataBase : Implements IUserData, IPluginContentProvider, IThrower
|
||||||
Friend Const UserFileAppender As String = "User"
|
Friend Const UserFileAppender As String = "User"
|
||||||
Private ReadOnly _OnUserUpdatedHandlers As List(Of IUserData.OnUserUpdatedEventHandler)
|
#Region "Events"
|
||||||
Friend Custom Event OnUserUpdated As IUserData.OnUserUpdatedEventHandler Implements IUserData.OnUserUpdated
|
Private ReadOnly UserUpdatedEventHandlers As List(Of IUserData.UserUpdatedEventHandler)
|
||||||
AddHandler(ByVal e As IUserData.OnUserUpdatedEventHandler)
|
Friend Custom Event UserUpdated As IUserData.UserUpdatedEventHandler Implements IUserData.UserUpdated
|
||||||
If Not _OnUserUpdatedHandlers.Contains(e) Then _OnUserUpdatedHandlers.Add(e)
|
AddHandler(ByVal e As IUserData.UserUpdatedEventHandler)
|
||||||
|
If Not UserUpdatedEventHandlers.Contains(e) Then UserUpdatedEventHandlers.Add(e)
|
||||||
End AddHandler
|
End AddHandler
|
||||||
RemoveHandler(ByVal e As IUserData.OnUserUpdatedEventHandler)
|
RemoveHandler(ByVal e As IUserData.UserUpdatedEventHandler)
|
||||||
If _OnUserUpdatedHandlers.Contains(e) Then _OnUserUpdatedHandlers.Remove(e)
|
If UserUpdatedEventHandlers.Contains(e) Then UserUpdatedEventHandlers.Remove(e)
|
||||||
End RemoveHandler
|
End RemoveHandler
|
||||||
RaiseEvent(ByVal User As IUserData)
|
RaiseEvent(ByVal User As IUserData)
|
||||||
If _OnUserUpdatedHandlers.Count > 0 Then
|
Try
|
||||||
For Each e As IUserData.OnUserUpdatedEventHandler In _OnUserUpdatedHandlers
|
If UserUpdatedEventHandlers.Count > 0 Then
|
||||||
Try : e.Invoke(User) : Catch : End Try
|
For i% = 0 To UserUpdatedEventHandlers.Count - 1
|
||||||
|
Try : UserUpdatedEventHandlers(i).Invoke(User) : Catch : End Try
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
Catch
|
||||||
|
End Try
|
||||||
End RaiseEvent
|
End RaiseEvent
|
||||||
End Event
|
End Event
|
||||||
Protected Sub RaiseEvent_OnUserUpdated()
|
Protected Sub OnUserUpdated()
|
||||||
RaiseEvent OnUserUpdated(Me)
|
RaiseEvent UserUpdated(Me)
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub RemoveUpdateHandlers()
|
Friend Sub RemoveUpdateHandlers()
|
||||||
_OnUserUpdatedHandlers.Clear()
|
UserUpdatedEventHandlers.Clear()
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "Collection buttons"
|
#Region "Collection buttons"
|
||||||
Private _CollectionButtonsExists As Boolean = False
|
Private _CollectionButtonsExists As Boolean = False
|
||||||
Private _CollectionButtonsColorsSet As Boolean = False
|
Private _CollectionButtonsColorsSet As Boolean = False
|
||||||
@@ -78,11 +83,11 @@ Namespace API.Base
|
|||||||
Dim cb As Color = SystemColors.Control
|
Dim cb As Color = SystemColors.Control
|
||||||
Dim cf As Color = SystemColors.ControlText
|
Dim cf As Color = SystemColors.ControlText
|
||||||
If Not UserExists Then
|
If Not UserExists Then
|
||||||
cb = ColorBttDeleteBack
|
cb = MyColor.DeleteBack
|
||||||
cf = ColorBttDeleteFore
|
cf = MyColor.DeleteFore
|
||||||
ElseIf UserSuspended Then
|
ElseIf UserSuspended Then
|
||||||
cb = ColorBttEditBack
|
cb = MyColor.EditBack
|
||||||
cf = ColorBttEditFore
|
cf = MyColor.EditFore
|
||||||
End If
|
End If
|
||||||
For Each b As ToolStripMenuItem In {BTT_CONTEXT_DOWN, BTT_CONTEXT_EDIT, BTT_CONTEXT_DELETE, BTT_CONTEXT_OPEN_PATH, BTT_CONTEXT_OPEN_SITE}
|
For Each b As ToolStripMenuItem In {BTT_CONTEXT_DOWN, BTT_CONTEXT_EDIT, BTT_CONTEXT_DELETE, BTT_CONTEXT_OPEN_PATH, BTT_CONTEXT_OPEN_SITE}
|
||||||
If Not b Is Nothing Then b.BackColor = cb : b.ForeColor = cf
|
If Not b Is Nothing Then b.BackColor = cb : b.ForeColor = cf
|
||||||
@@ -130,12 +135,21 @@ Namespace API.Base
|
|||||||
#End Region
|
#End Region
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Declarations"
|
#Region "Declarations"
|
||||||
|
#Region "Host, Site, Progress, Self"
|
||||||
|
Friend Property HOST As SettingsHost Implements IUserData.HOST
|
||||||
Friend ReadOnly Property Site As String Implements IContentProvider.Site
|
Friend ReadOnly Property Site As String Implements IContentProvider.Site
|
||||||
Get
|
Get
|
||||||
Return HOST.Name
|
Return HOST.Name
|
||||||
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
|
||||||
|
#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
|
Friend Overridable Property UserExists As Boolean = True Implements IUserData.Exists, IPluginContentProvider.UserExists
|
||||||
@@ -152,7 +166,8 @@ Namespace API.Base
|
|||||||
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
|
Friend Overridable Property FriendlyName As String = String.Empty Implements IContentProvider.FriendlyName
|
||||||
#Region "UserDescription"
|
#End Region
|
||||||
|
#Region "Description"
|
||||||
Friend Property UserDescription As String = String.Empty Implements IContentProvider.Description, IPluginContentProvider.UserDescription
|
Friend Property UserDescription As String = String.Empty Implements IContentProvider.Description, IPluginContentProvider.UserDescription
|
||||||
Protected _DescriptionEveryTime As Boolean = False
|
Protected _DescriptionEveryTime As Boolean = False
|
||||||
Protected _DescriptionChecked As Boolean = False
|
Protected _DescriptionChecked As Boolean = False
|
||||||
@@ -174,7 +189,7 @@ Namespace API.Base
|
|||||||
_DescriptionEveryTime = Settings.UpdateUserDescriptionEveryTime
|
_DescriptionEveryTime = Settings.UpdateUserDescriptionEveryTime
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
Friend Property ParseUserMediaOnly As Boolean = False Implements IUserData.ParseUserMediaOnly, IPluginContentProvider.ParseUserMediaOnly
|
#Region "Favorite, Temporary"
|
||||||
Protected _Favorite As Boolean = False
|
Protected _Favorite As Boolean = False
|
||||||
Friend Overridable Property Favorite As Boolean Implements IContentProvider.Favorite
|
Friend Overridable Property Favorite As Boolean Implements IContentProvider.Favorite
|
||||||
Get
|
Get
|
||||||
@@ -195,37 +210,39 @@ Namespace API.Base
|
|||||||
If _Temporary Then _Favorite = False
|
If _Temporary Then _Favorite = False
|
||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "Channel"
|
||||||
Friend Overridable ReadOnly Property IsChannel As Boolean Implements IUserData.IsChannel
|
Friend Overridable ReadOnly Property IsChannel As Boolean Implements IUserData.IsChannel
|
||||||
Get
|
Get
|
||||||
Return User.IsChannel
|
Return User.IsChannel
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend Property CreatedByChannel As Boolean = False
|
Friend Property CreatedByChannel As Boolean = False
|
||||||
Friend ReadOnly Property Self As IUserData Implements IUserData.Self
|
#End Region
|
||||||
Get
|
|
||||||
Return Me
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
#Region "Images"
|
#Region "Images"
|
||||||
Friend Overridable Function GetUserPicture() As Image Implements IUserData.GetPicture
|
Friend Overridable Function GetUserPicture() As Image Implements IUserData.GetPicture
|
||||||
If Settings.ViewModeIsPicture Then
|
If Settings.ViewModeIsPicture Then
|
||||||
Return GetPicture()
|
Return GetPicture(Of Image)()
|
||||||
Else
|
Else
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
Friend Function GetUserPictureToastAddress() As SFile
|
||||||
|
Return GetPicture(Of SFile)(False, True)
|
||||||
|
End Function
|
||||||
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 Not f.IsEmptyString AndAlso 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, User.File) : p.Save() : End Using
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
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 XML.Base.XMLValue(Of Integer)) As Bitmap
|
||||||
Return New Bitmap(CInt(DivideWithZeroChecking(MaxHeigh.Value, 100) * 75), MaxHeigh.Value)
|
Return New Bitmap(CInt(DivideWithZeroChecking(MaxHeigh.Value, 100) * 75), MaxHeigh.Value)
|
||||||
End Function
|
End Function
|
||||||
Protected Function GetPicture(Optional ByVal ReturnNullImageOnNothing As Boolean = True) As Image
|
Protected Function GetPicture(Of T)(Optional ByVal ReturnNullImageOnNothing As Boolean = True, Optional ByVal GetToast As Boolean = False) As T
|
||||||
|
Dim rsfile As Boolean = GetType(T) Is GetType(SFile)
|
||||||
Dim f As SFile = Nothing
|
Dim f As SFile = Nothing
|
||||||
Dim p As UserImage = Nothing
|
Dim p As UserImage = Nothing
|
||||||
Dim DelPath As Boolean = True
|
Dim DelPath As Boolean = True
|
||||||
@@ -256,7 +273,7 @@ BlockPictureScan:
|
|||||||
New ErrorsDescriber(EDP.ReturnValue) With {
|
New ErrorsDescriber(EDP.ReturnValue) With {
|
||||||
.ReturnValue = New List(Of SFile),
|
.ReturnValue = New List(Of SFile),
|
||||||
.ReturnValueExists = True}).FirstOrDefault
|
.ReturnValueExists = True}).FirstOrDefault
|
||||||
If Not NewPicFile.IsEmptyString AndAlso NewPicFile.Exists Then
|
If NewPicFile.Exists Then
|
||||||
p = New UserImage(NewPicFile, MyFile)
|
p = New UserImage(NewPicFile, MyFile)
|
||||||
p.Save()
|
p.Save()
|
||||||
GoTo BlockReturn
|
GoTo BlockReturn
|
||||||
@@ -271,18 +288,27 @@ BlockReturn:
|
|||||||
On Error GoTo BlockNullPicture
|
On Error GoTo BlockNullPicture
|
||||||
If Not p Is Nothing Then
|
If Not p Is Nothing Then
|
||||||
Dim i As Image = Nothing
|
Dim i As Image = Nothing
|
||||||
|
Dim a As SFile = Nothing
|
||||||
|
If rsfile Then
|
||||||
|
If GetToast Then
|
||||||
|
a = p.Large.Address
|
||||||
|
Else
|
||||||
|
a = p.Address
|
||||||
|
End If
|
||||||
|
Else
|
||||||
Select Case Settings.ViewMode.Value
|
Select Case Settings.ViewMode.Value
|
||||||
Case View.LargeIcon : i = p.Large.OriginalImage.Clone
|
Case View.LargeIcon : i = p.Large.OriginalImage.Clone
|
||||||
Case View.SmallIcon : i = p.Small.OriginalImage.Clone
|
Case View.SmallIcon : i = p.Small.OriginalImage.Clone
|
||||||
End Select
|
End Select
|
||||||
|
End If
|
||||||
p.Dispose()
|
p.Dispose()
|
||||||
Return i
|
If rsfile Then Return CObj(a) Else Return CObj(i)
|
||||||
End If
|
End If
|
||||||
BlockNullPicture:
|
BlockNullPicture:
|
||||||
If ReturnNullImageOnNothing Then
|
If ReturnNullImageOnNothing Then
|
||||||
Select Case Settings.ViewMode.Value
|
Select Case Settings.ViewMode.Value
|
||||||
Case View.LargeIcon : Return GetNullPicture(Settings.MaxLargeImageHeigh)
|
Case View.LargeIcon : Return CObj(GetNullPicture(Settings.MaxLargeImageHeight))
|
||||||
Case View.SmallIcon : Return GetNullPicture(Settings.MaxSmallImageHeigh)
|
Case View.SmallIcon : Return CObj(GetNullPicture(Settings.MaxSmallImageHeight))
|
||||||
End Select
|
End Select
|
||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
@@ -296,7 +322,7 @@ BlockNullPicture:
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Collections support"
|
#Region "Collections"
|
||||||
Protected _IsCollection As Boolean = False
|
Protected _IsCollection As Boolean = False
|
||||||
Protected Friend ReadOnly Property IsCollection As Boolean Implements IUserData.IsCollection
|
Protected Friend ReadOnly Property IsCollection As Boolean Implements IUserData.IsCollection
|
||||||
Get
|
Get
|
||||||
@@ -325,9 +351,10 @@ BlockNullPicture:
|
|||||||
End Sub
|
End Sub
|
||||||
Friend Overridable ReadOnly Property Labels As List(Of String) Implements IUserData.Labels
|
Friend Overridable ReadOnly Property Labels As List(Of String) Implements IUserData.Labels
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Downloading params"
|
#Region "Downloading"
|
||||||
Protected _DataLoaded As Boolean = False
|
Protected _DataLoaded As Boolean = False
|
||||||
Protected _DataParsed As Boolean = False
|
Protected _DataParsed As Boolean = False
|
||||||
|
Friend Property ParseUserMediaOnly As Boolean = False Implements IUserData.ParseUserMediaOnly, IPluginContentProvider.ParseUserMediaOnly
|
||||||
Friend Overridable Property ReadyForDownload As Boolean = True Implements IUserData.ReadyForDownload
|
Friend Overridable Property ReadyForDownload As Boolean = True Implements IUserData.ReadyForDownload
|
||||||
Friend Property DownloadImages As Boolean = True Implements IUserData.DownloadImages
|
Friend Property DownloadImages As Boolean = True Implements IUserData.DownloadImages
|
||||||
Friend Property DownloadVideos As Boolean = True Implements IUserData.DownloadVideos
|
Friend Property DownloadVideos As Boolean = True Implements IUserData.DownloadVideos
|
||||||
@@ -337,6 +364,13 @@ BlockNullPicture:
|
|||||||
Protected ReadOnly _ContentNew As List(Of UserMedia)
|
Protected ReadOnly _ContentNew As List(Of UserMedia)
|
||||||
Protected ReadOnly _TempMediaList As List(Of UserMedia)
|
Protected ReadOnly _TempMediaList As List(Of UserMedia)
|
||||||
Protected ReadOnly _TempPostsList As List(Of String)
|
Protected ReadOnly _TempPostsList As List(Of String)
|
||||||
|
Friend Function GetLastImageAddress() As SFile
|
||||||
|
If _ContentList.Count > 0 Then
|
||||||
|
Return _ContentList.LastOrDefault(Function(c) c.Type = UTypes.Picture And Not c.File.IsEmptyString And Not c.File.Extension = "gif").File
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Files"
|
#Region "Files"
|
||||||
Friend Overridable Property MyFile As SFile Implements IUserData.File
|
Friend Overridable Property MyFile As SFile Implements IUserData.File
|
||||||
@@ -364,7 +398,7 @@ BlockNullPicture:
|
|||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Information"
|
#Region "Information, counters, error, update date"
|
||||||
Friend Overridable Property LastUpdated As Date?
|
Friend Overridable Property LastUpdated As Date?
|
||||||
Friend Overridable Property HasError As Boolean = False Implements IUserData.HasError
|
Friend Overridable Property HasError As Boolean = False Implements IUserData.HasError
|
||||||
Private _DownloadedPicturesTotal As Integer = 0
|
Private _DownloadedPicturesTotal As Integer = 0
|
||||||
@@ -408,6 +442,25 @@ BlockNullPicture:
|
|||||||
$" (P - {DownloadedPictures(True)}; V - {DownloadedVideos(True)})"
|
$" (P - {DownloadedPictures(True)}; V - {DownloadedVideos(True)})"
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Friend Overridable Function GetUserInformation() As String
|
||||||
|
Dim OutStr$ = $"User: {Name}"
|
||||||
|
OutStr.StringAppendLine($"Path: {MyFile.CutPath.Path}")
|
||||||
|
OutStr.StringAppendLine($"Total downloaded ({DownloadedTotal(True).NumToString(ANumbers.Formats.Number, 3)}):")
|
||||||
|
OutStr.StringAppendLine($"Pictures: {DownloadedPictures(True).NumToString(ANumbers.Formats.Number, 3)}")
|
||||||
|
OutStr.StringAppendLine($"Videos: {DownloadedVideos(True).NumToString(ANumbers.Formats.Number, 3)}")
|
||||||
|
If Not UserDescription.IsEmptyString Then
|
||||||
|
OutStr.StringAppendLine(String.Empty)
|
||||||
|
OutStr.StringAppendLine(UserDescription)
|
||||||
|
End If
|
||||||
|
OutStr.StringAppendLine(String.Empty)
|
||||||
|
OutStr.StringAppendLine($"Last updated at: {AConvert(Of String)(LastUpdated, ADateTime.Formats.BaseDateTime, "not yet")}")
|
||||||
|
If _DataParsed Then
|
||||||
|
OutStr.StringAppendLine("Downloaded now:")
|
||||||
|
OutStr.StringAppendLine($"Pictures: {DownloadedTotal(False).NumToString(ANumbers.Formats.Number, 3)}")
|
||||||
|
OutStr.StringAppendLine($"Videos: {DownloadedVideos(False).NumToString(ANumbers.Formats.Number, 3)}")
|
||||||
|
End If
|
||||||
|
Return OutStr
|
||||||
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Script"
|
#Region "Script"
|
||||||
Friend Overridable Property ScriptUse As Boolean = False Implements IUserData.ScriptUse
|
Friend Overridable Property ScriptUse As Boolean = False Implements IUserData.ScriptUse
|
||||||
@@ -417,7 +470,6 @@ BlockNullPicture:
|
|||||||
#Region "Plugins Support"
|
#Region "Plugins Support"
|
||||||
Protected Event ProgressChanged As IPluginContentProvider.ProgressChangedEventHandler Implements IPluginContentProvider.ProgressChanged
|
Protected Event ProgressChanged As IPluginContentProvider.ProgressChangedEventHandler Implements IPluginContentProvider.ProgressChanged
|
||||||
Protected Event TotalCountChanged As IPluginContentProvider.TotalCountChangedEventHandler Implements IPluginContentProvider.TotalCountChanged
|
Protected Event TotalCountChanged As IPluginContentProvider.TotalCountChangedEventHandler Implements IPluginContentProvider.TotalCountChanged
|
||||||
Friend Property HOST As SettingsHost Implements IUserData.HOST
|
|
||||||
Private Property IPluginContentProvider_Settings As ISiteSettings Implements IPluginContentProvider.Settings
|
Private Property IPluginContentProvider_Settings As ISiteSettings Implements IPluginContentProvider.Settings
|
||||||
Get
|
Get
|
||||||
Return HOST.Source
|
Return HOST.Source
|
||||||
@@ -510,37 +562,16 @@ BlockNullPicture:
|
|||||||
Return Destination.Groups.Item(LabelsKeeper.NoLabeledName)
|
Return Destination.Groups.Item(LabelsKeeper.NoLabeledName)
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Friend Overridable Function GetUserInformation() As String
|
|
||||||
Dim OutStr$ = $"User: {Name}"
|
|
||||||
OutStr.StringAppendLine($"Path: {MyFile.CutPath.Path}")
|
|
||||||
OutStr.StringAppendLine($"Total downloaded ({DownloadedTotal(True).NumToString(ANumbers.Formats.Number, 3)}):")
|
|
||||||
OutStr.StringAppendLine($"Pictures: {DownloadedPictures(True).NumToString(ANumbers.Formats.Number, 3)}")
|
|
||||||
OutStr.StringAppendLine($"Videos: {DownloadedVideos(True).NumToString(ANumbers.Formats.Number, 3)}")
|
|
||||||
If Not UserDescription.IsEmptyString Then
|
|
||||||
OutStr.StringAppendLine(String.Empty)
|
|
||||||
OutStr.StringAppendLine(UserDescription)
|
|
||||||
End If
|
|
||||||
OutStr.StringAppendLine(String.Empty)
|
|
||||||
OutStr.StringAppendLine($"Last updated at: {AConvert(Of String)(LastUpdated, ADateTime.Formats.BaseDateTime, "not yet")}")
|
|
||||||
If _DataParsed Then
|
|
||||||
OutStr.StringAppendLine("Downloaded now:")
|
|
||||||
OutStr.StringAppendLine($"Pictures: {DownloadedTotal(False).NumToString(ANumbers.Formats.Number, 3)}")
|
|
||||||
OutStr.StringAppendLine($"Videos: {DownloadedVideos(False).NumToString(ANumbers.Formats.Number, 3)}")
|
|
||||||
End If
|
|
||||||
Return OutStr
|
|
||||||
End Function
|
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Initializer"
|
#Region "Initializer"
|
||||||
Private ReadOnly _InvokeImageHandler As Boolean
|
|
||||||
''' <summary>By using this constructor you must set UserName and MyFile manually</summary>
|
''' <summary>By using this constructor you must set UserName and MyFile manually</summary>
|
||||||
Friend Sub New(Optional ByVal InvokeImageHandler As Boolean = True)
|
Friend Sub New(Optional ByVal InvokeImageHandler As Boolean = True)
|
||||||
_InvokeImageHandler = InvokeImageHandler
|
|
||||||
_ContentList = New List(Of UserMedia)
|
_ContentList = New List(Of UserMedia)
|
||||||
_ContentNew = New List(Of UserMedia)
|
_ContentNew = New List(Of UserMedia)
|
||||||
_TempMediaList = New List(Of UserMedia)
|
_TempMediaList = New List(Of UserMedia)
|
||||||
_TempPostsList = New List(Of String)
|
_TempPostsList = New List(Of String)
|
||||||
Labels = New List(Of String)
|
Labels = New List(Of String)
|
||||||
_OnUserUpdatedHandlers = New List(Of IUserData.OnUserUpdatedEventHandler)
|
UserUpdatedEventHandlers = New List(Of IUserData.UserUpdatedEventHandler)
|
||||||
If InvokeImageHandler Then ImageHandler(Me)
|
If InvokeImageHandler Then ImageHandler(Me)
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub SetEnvironment(ByRef h As SettingsHost, ByVal u As UserInfo, ByVal _LoadUserInformation As Boolean,
|
Friend Sub SetEnvironment(ByRef h As SettingsHost, ByVal u As UserInfo, ByVal _LoadUserInformation As Boolean,
|
||||||
@@ -653,17 +684,8 @@ BlockNullPicture:
|
|||||||
x.LoadData()
|
x.LoadData()
|
||||||
If x.Count > 0 Then
|
If x.Count > 0 Then
|
||||||
Dim fs$ = MyFile.CutPath.PathWithSeparator
|
Dim fs$ = MyFile.CutPath.PathWithSeparator
|
||||||
Dim gfn As Func(Of String, String) = Function(ByVal Input As String) As String
|
Dim gfn As Func(Of String, String) = Function(Input) If(Input.IsEmptyString, String.Empty,
|
||||||
If Input.IsEmptyString Then
|
If(Input.Contains("\"), Input.CSFile.File, Input))
|
||||||
Return String.Empty
|
|
||||||
Else
|
|
||||||
If Input.Contains("\") Then
|
|
||||||
Return New SFile(Input).File
|
|
||||||
Else
|
|
||||||
Return Input
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End Function
|
|
||||||
For Each v As EContainer In x
|
For Each v As EContainer In x
|
||||||
_ContentList.Add(New UserMedia With {
|
_ContentList.Add(New UserMedia With {
|
||||||
.Type = AConvert(Of Integer)(v.Attribute(Name_MediaType).Value, 0),
|
.Type = AConvert(Of Integer)(v.Attribute(Name_MediaType).Value, 0),
|
||||||
@@ -673,7 +695,8 @@ BlockNullPicture:
|
|||||||
.File = fs & gfn.Invoke(v.Attribute(Name_MediaFile).Value),
|
.File = fs & gfn.Invoke(v.Attribute(Name_MediaFile).Value),
|
||||||
.Post = New UserPost With {
|
.Post = New UserPost With {
|
||||||
.ID = v.Attribute(Name_MediaPostID).Value,
|
.ID = v.Attribute(Name_MediaPostID).Value,
|
||||||
.[Date] = AConvert(Of Date)(v.Attribute(Name_MediaPostDate).Value, ParsersDataDateProvider, Nothing)}
|
.[Date] = AConvert(Of Date)(v.Attribute(Name_MediaPostDate).Value, ParsersDataDateProvider, Nothing)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
@@ -691,14 +714,15 @@ BlockNullPicture:
|
|||||||
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Data"}
|
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Data"}
|
||||||
If _ContentList.Count > 0 Then
|
If _ContentList.Count > 0 Then
|
||||||
For Each i As UserMedia In _ContentList
|
For Each i As UserMedia In _ContentList
|
||||||
x.Add(New EContainer("MediaData", i.URL_BASE,
|
x.Add(New EContainer("MediaData", i.URL_BASE, {New EAttribute(Name_MediaType, CInt(i.Type)),
|
||||||
{New EAttribute(Name_MediaType, CInt(i.Type)),
|
|
||||||
New EAttribute(Name_MediaURL, i.URL),
|
New EAttribute(Name_MediaURL, i.URL),
|
||||||
New EAttribute(Name_MediaHash, i.MD5),
|
New EAttribute(Name_MediaHash, i.MD5),
|
||||||
New EAttribute(Name_MediaFile, i.File.File),
|
New EAttribute(Name_MediaFile, i.File.File),
|
||||||
New EAttribute(Name_MediaPostID, i.Post.ID),
|
New EAttribute(Name_MediaPostID, i.Post.ID),
|
||||||
New EAttribute(Name_MediaPostDate, AConvert(Of String)(i.Post.Date, ParsersDataDateProvider, String.Empty))
|
New EAttribute(Name_MediaPostDate, AConvert(Of String)(i.Post.Date, ParsersDataDateProvider, String.Empty))
|
||||||
}))
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
x.Save(MyFileData)
|
x.Save(MyFileData)
|
||||||
@@ -716,7 +740,7 @@ BlockNullPicture:
|
|||||||
If Not URL.IsEmptyString Then Process.Start(URL)
|
If Not URL.IsEmptyString Then Process.Start(URL)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If Not e.Exists Then e = New ErrorsDescriber(EDP.ShowAllMsg)
|
If Not e.Exists Then e = New ErrorsDescriber(EDP.ShowAllMsg)
|
||||||
MsgBoxE($"Error on trying to open [{Site}] page of user [{Name}]", MsgBoxStyle.Critical, e)
|
MsgBoxE({$"Error when trying to open [{Site}] page of user [{Name}]", $"User [{ToString()}]"}, MsgBoxStyle.Critical, e, ex)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overridable Sub OpenFolder() Implements IUserData.OpenFolder
|
Friend Overridable Sub OpenFolder() Implements IUserData.OpenFolder
|
||||||
@@ -737,7 +761,7 @@ BlockNullPicture:
|
|||||||
Responser = New Response
|
Responser = New Response
|
||||||
If Not HOST.Responser Is Nothing Then Responser.Copy(HOST.Responser)
|
If Not HOST.Responser Is Nothing Then Responser.Copy(HOST.Responser)
|
||||||
|
|
||||||
Dim UpPic As Boolean = Settings.ViewModeIsPicture AndAlso GetPicture(False) Is Nothing
|
Dim UpPic As Boolean = Settings.ViewModeIsPicture AndAlso GetPicture(Of Image)(False) Is Nothing
|
||||||
Dim sEnvir() As Boolean = {UserExists, UserSuspended}
|
Dim sEnvir() As Boolean = {UserExists, UserSuspended}
|
||||||
Dim EnvirChanged As Func(Of Boolean) = Function() Not sEnvir(0) = UserExists Or Not sEnvir(1) = UserSuspended
|
Dim EnvirChanged As Func(Of Boolean) = Function() Not sEnvir(0) = UserExists Or Not sEnvir(1) = UserSuspended
|
||||||
UserExists = True
|
UserExists = True
|
||||||
@@ -789,7 +813,7 @@ BlockNullPicture:
|
|||||||
If _CollectionButtonsExists AndAlso EnvirChanged.Invoke Then UpdateButtonsColor()
|
If _CollectionButtonsExists AndAlso EnvirChanged.Invoke Then UpdateButtonsColor()
|
||||||
End If
|
End If
|
||||||
ThrowIfDisposed()
|
ThrowIfDisposed()
|
||||||
If UpPic Or EnvirChanged.Invoke Then RaiseEvent_OnUserUpdated()
|
If UpPic Or EnvirChanged.Invoke Then OnUserUpdated()
|
||||||
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
||||||
MyMainLOG = $"{Site} - {Name}: downloading canceled"
|
MyMainLOG = $"{Site} - {Name}: downloading canceled"
|
||||||
Canceled = True
|
Canceled = True
|
||||||
@@ -800,7 +824,7 @@ BlockNullPicture:
|
|||||||
HasError = True
|
HasError = True
|
||||||
Finally
|
Finally
|
||||||
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 ': LastUpdated = Now
|
If Not Canceled Then _DataParsed = True
|
||||||
_ContentNew.Clear()
|
_ContentNew.Clear()
|
||||||
DownloadTopCount = Nothing
|
DownloadTopCount = Nothing
|
||||||
DownloadToDate = Nothing
|
DownloadToDate = Nothing
|
||||||
@@ -825,7 +849,7 @@ BlockNullPicture:
|
|||||||
MyFilePosts.Name &= "_Posts"
|
MyFilePosts.Name &= "_Posts"
|
||||||
MyFilePosts.Extension = "txt"
|
MyFilePosts.Extension = "txt"
|
||||||
Else
|
Else
|
||||||
Throw New ArgumentNullException("User.File", "User file does not detected")
|
Throw New ArgumentNullException("User.File", "User file not detected")
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Protected MustOverride Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected MustOverride Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
@@ -872,6 +896,8 @@ BlockNullPicture:
|
|||||||
Case UTypes.Video : f.Extension = "mp4"
|
Case UTypes.Video : f.Extension = "mp4"
|
||||||
Case UTypes.GIF : f.Extension = "gif"
|
Case UTypes.GIF : f.Extension = "gif"
|
||||||
End Select
|
End Select
|
||||||
|
ElseIf f.Extension = "webp" And Settings.DownloadNativeImageFormat Then
|
||||||
|
f.Extension = "jpg"
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If Not v.SpecialFolder.IsEmptyString Then
|
If Not v.SpecialFolder.IsEmptyString Then
|
||||||
@@ -933,8 +959,8 @@ BlockNullPicture:
|
|||||||
Protected Function ChangeFileNameByProvider(ByVal f As SFile, ByVal m As UserMedia) As SFile
|
Protected Function ChangeFileNameByProvider(ByVal f As SFile, ByVal m As UserMedia) As SFile
|
||||||
Dim ff As SFile = Nothing
|
Dim ff As SFile = Nothing
|
||||||
Try
|
Try
|
||||||
If Not f.IsEmptyString AndAlso f.Exists Then
|
If f.Exists Then
|
||||||
If Settings.FileReplaceNameByDate Or Settings.FileAddTimeToFileName Then
|
If Not Settings.FileReplaceNameByDate.Value = FileNameReplaceMode.None Then
|
||||||
ff = f
|
ff = f
|
||||||
ff.Name = String.Format(FileDateAppenderPattern, f.Name, CStr(AConvert(Of String)(If(m.Post.Date, Now), FileDateAppenderProvider, String.Empty)))
|
ff.Name = String.Format(FileDateAppenderPattern, f.Name, CStr(AConvert(Of String)(If(m.Post.Date, Now), FileDateAppenderProvider, String.Empty)))
|
||||||
ff = SFile.Indexed_IndexFile(ff,, New NumberedFile(ff))
|
ff = SFile.Indexed_IndexFile(ff,, New NumberedFile(ff))
|
||||||
@@ -1187,7 +1213,7 @@ BlockNullPicture:
|
|||||||
If Not BTT_CONTEXT_DELETE Is Nothing Then BTT_CONTEXT_DELETE.Dispose()
|
If Not BTT_CONTEXT_DELETE Is Nothing Then BTT_CONTEXT_DELETE.Dispose()
|
||||||
If Not BTT_CONTEXT_OPEN_PATH Is Nothing Then BTT_CONTEXT_OPEN_PATH.Dispose()
|
If Not BTT_CONTEXT_OPEN_PATH Is Nothing Then BTT_CONTEXT_OPEN_PATH.Dispose()
|
||||||
If Not BTT_CONTEXT_OPEN_SITE Is Nothing Then BTT_CONTEXT_OPEN_SITE.Dispose()
|
If Not BTT_CONTEXT_OPEN_SITE Is Nothing Then BTT_CONTEXT_OPEN_SITE.Dispose()
|
||||||
_OnUserUpdatedHandlers.Clear()
|
UserUpdatedEventHandlers.Clear()
|
||||||
End If
|
End If
|
||||||
disposedValue = True
|
disposedValue = True
|
||||||
End If
|
End If
|
||||||
@@ -1214,7 +1240,7 @@ BlockNullPicture:
|
|||||||
Sub DownloadData(ByVal Token As CancellationToken)
|
Sub DownloadData(ByVal Token As CancellationToken)
|
||||||
End Interface
|
End Interface
|
||||||
Friend Interface IUserData : Inherits IContentProvider, IComparable(Of UserDataBase), IComparable, IEquatable(Of UserDataBase), IIndexable, IDisposable
|
Friend Interface IUserData : Inherits IContentProvider, IComparable(Of UserDataBase), IComparable, IEquatable(Of UserDataBase), IIndexable, IDisposable
|
||||||
Event OnUserUpdated(ByVal User As IUserData)
|
Event UserUpdated(ByVal User As IUserData)
|
||||||
Property ParseUserMediaOnly As Boolean
|
Property ParseUserMediaOnly As Boolean
|
||||||
#Region "Images"
|
#Region "Images"
|
||||||
Function GetPicture() As Image
|
Function GetPicture() As Image
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ Imports PersonalUtilities.Functions.XML
|
|||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
||||||
Imports System.Net
|
Imports System.Net
|
||||||
Imports SCrawler.API.Imgur.Declarations
|
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
|
Imports SCrawler.API.Imgur.Declarations
|
||||||
Namespace API.Imgur
|
Namespace API.Imgur
|
||||||
Namespace Declarations
|
Namespace Declarations
|
||||||
Friend Module Imgur_Declarations
|
Friend Module Imgur_Declarations
|
||||||
@@ -79,7 +79,7 @@ Namespace API.Imgur
|
|||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Imgur standalone downloader: fetch media error")
|
Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog + EDP.ReturnValue, ex, "Imgur standalone downloader: fetch media error")
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Private Shared Function DownloadingException(ByVal ex As Exception, ByVal Message As String,
|
Private Shared Function DownloadingException(ByVal ex As Exception, ByVal Message As String,
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
' Copyright (C) 2022 Andy
|
|
||||||
' This program is free software: you can redistribute it and/or modify
|
|
||||||
' it under the terms of the GNU General Public License as published by
|
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
|
||||||
' (at your option) any later version.
|
|
||||||
'
|
|
||||||
' This program is distributed in the hope that it will be useful,
|
|
||||||
' but WITHOUT ANY WARRANTY
|
|
||||||
Imports Sections = SCrawler.API.Instagram.UserData.Sections
|
|
||||||
Namespace API.Instagram
|
|
||||||
Friend Class AuthNullException : Inherits ArgumentNullException
|
|
||||||
Public Overrides ReadOnly Property ParamName As String
|
|
||||||
Public Overrides ReadOnly Property Message As String
|
|
||||||
Friend Sub New(ByVal s As Sections, ByVal IsSavedPosts As Boolean)
|
|
||||||
If IsSavedPosts Then
|
|
||||||
ParamName = "HashSavedPosts"
|
|
||||||
ElseIf s = Sections.Timeline Then
|
|
||||||
ParamName = "Hash"
|
|
||||||
Else
|
|
||||||
ParamName = "IG_APP_ID, IG_WWW_CLAIM"
|
|
||||||
End If
|
|
||||||
Message = $"Instagram auth for [{s}] is not set"
|
|
||||||
End Sub
|
|
||||||
Friend Shared Sub ThrowIfNull(ByVal s As Sections, ByVal IsSavedPosts As Boolean, ByVal Host As SiteSettings)
|
|
||||||
Dim b As Boolean = False
|
|
||||||
If IsSavedPosts Then
|
|
||||||
If Not ACheck(Host.HashSavedPosts.Value) Then b = True
|
|
||||||
ElseIf s = Sections.Timeline Then
|
|
||||||
If Not ACheck(Host.Hash.Value) Then Host.HashUpdateRequired.Value = True : b = True
|
|
||||||
Else
|
|
||||||
If Not Host.StoriesAndTaggedReady Then b = True
|
|
||||||
End If
|
|
||||||
If b Then Throw New AuthNullException(s, IsSavedPosts)
|
|
||||||
End Sub
|
|
||||||
End Class
|
|
||||||
End Namespace
|
|
||||||
@@ -11,15 +11,6 @@ Namespace API.Instagram
|
|||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
Friend Const InstagramSite As String = "Instagram"
|
Friend Const InstagramSite As String = "Instagram"
|
||||||
Friend ReadOnly FilesPattern As RParams = RParams.DMS(".+?([^/\?]+?\.[\w\d]{3,4})(?=(\?|\Z))", 1, EDP.ReturnValue)
|
Friend ReadOnly FilesPattern As RParams = RParams.DMS(".+?([^/\?]+?\.[\w\d]{3,4})(?=(\?|\Z))", 1, EDP.ReturnValue)
|
||||||
Friend ReadOnly Property DateProvider As New JsonDate
|
Friend ReadOnly Property DateProvider As New CustomProvider(Function(v, d, p, n, e) ADateTime.ParseUnicode(v))
|
||||||
Friend Class JsonDate : Implements ICustomProvider
|
|
||||||
Friend Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
|
||||||
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
|
||||||
Return ADateTime.ParseUnicode(Value)
|
|
||||||
End Function
|
|
||||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
|
||||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -11,10 +11,8 @@ Namespace API.Instagram
|
|||||||
Friend Class EditorExchangeOptions
|
Friend Class EditorExchangeOptions
|
||||||
Friend Property GetStories As Boolean
|
Friend Property GetStories As Boolean
|
||||||
Friend Property GetTagged As Boolean
|
Friend Property GetTagged As Boolean
|
||||||
Private ReadOnly Property MySiteSettings As SiteSettings
|
|
||||||
Friend Sub New(ByVal h As ISiteSettings)
|
Friend Sub New(ByVal h As ISiteSettings)
|
||||||
MySiteSettings = DirectCast(h, SiteSettings)
|
With DirectCast(h, SiteSettings)
|
||||||
With MySiteSettings
|
|
||||||
GetStories = CBool(.GetStories.Value)
|
GetStories = CBool(.GetStories.Value)
|
||||||
GetTagged = CBool(.GetTagged.Value)
|
GetTagged = CBool(.GetTagged.Value)
|
||||||
End With
|
End With
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
' Copyright (C) 2022 Andy
|
|
||||||
' This program is free software: you can redistribute it and/or modify
|
|
||||||
' it under the terms of the GNU General Public License as published by
|
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
|
||||||
' (at your option) any later version.
|
|
||||||
'
|
|
||||||
' This program is distributed in the hope that it will be useful,
|
|
||||||
' but WITHOUT ANY WARRANTY
|
|
||||||
Namespace API.Instagram
|
|
||||||
Friend Class ExitException : Inherits Exception
|
|
||||||
Friend Sub New(ByRef CompleteArg As Boolean)
|
|
||||||
CompleteArg = True
|
|
||||||
End Sub
|
|
||||||
End Class
|
|
||||||
End Namespace
|
|
||||||
@@ -7,22 +7,19 @@
|
|||||||
' 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.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
|
||||||
Namespace API.Instagram
|
Namespace API.Instagram
|
||||||
Friend Class OptionsForm : Implements IOkCancelToolbar
|
Friend Class OptionsForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Private ReadOnly Property MyExchangeOptions As EditorExchangeOptions
|
Private ReadOnly Property MyExchangeOptions As EditorExchangeOptions
|
||||||
Friend Sub New(ByRef ExchangeOptions As EditorExchangeOptions)
|
Friend Sub New(ByRef ExchangeOptions As EditorExchangeOptions)
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyExchangeOptions = ExchangeOptions
|
MyExchangeOptions = ExchangeOptions
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub OptionsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub OptionsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
|
||||||
.AppendDetectors()
|
|
||||||
With MyExchangeOptions
|
With MyExchangeOptions
|
||||||
CH_GET_STORIES.Checked = .GetStories
|
CH_GET_STORIES.Checked = .GetStories
|
||||||
CH_GET_TAGGED.Checked = .GetTagged
|
CH_GET_TAGGED.Checked = .GetTagged
|
||||||
@@ -30,15 +27,12 @@ Namespace API.Instagram
|
|||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
With MyExchangeOptions
|
With MyExchangeOptions
|
||||||
.GetStories = CH_GET_STORIES.Checked
|
.GetStories = CH_GET_STORIES.Checked
|
||||||
.GetTagged = CH_GET_TAGGED.Checked
|
.GetTagged = CH_GET_TAGGED.Checked
|
||||||
End With
|
End With
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -10,7 +10,7 @@ Imports SCrawler.API.Base
|
|||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
@@ -18,7 +18,8 @@ Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
|||||||
Namespace API.Instagram
|
Namespace API.Instagram
|
||||||
<Manifest("AndyProgram_Instagram"), UseClassAsIs, SeparatedTasks(1), SavedPosts, SpecialForm(False)>
|
<Manifest("AndyProgram_Instagram"), UseClassAsIs, SeparatedTasks(1), SavedPosts, SpecialForm(False)>
|
||||||
Friend Class SiteSettings : Inherits SiteSettingsBase
|
Friend Class SiteSettings : Inherits SiteSettingsBase
|
||||||
#Region "Interface Declarations"
|
#Region "Declarations"
|
||||||
|
#Region "Images"
|
||||||
Friend Overrides ReadOnly Property Icon As Icon
|
Friend Overrides ReadOnly Property Icon As Icon
|
||||||
Get
|
Get
|
||||||
Return My.Resources.InstagramIcon
|
Return My.Resources.InstagramIcon
|
||||||
@@ -54,7 +55,25 @@ Namespace API.Instagram
|
|||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||||
Throw New NotImplementedException()
|
Throw New NotImplementedException("[GetFormat] is not available in the context of [TimersChecker]")
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
Private Class TaggedNotifyLimitChecker : 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
|
||||||
|
Dim v% = AConvert(Of Integer)(Value, -10)
|
||||||
|
If v > 0 Or v = -1 Then
|
||||||
|
Return Value
|
||||||
|
Else
|
||||||
|
ErrorMessage = $"The value of [{Name}] field must be greater than 0 or equal to -1"
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
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 [TaggedNotifyLimitChecker]")
|
||||||
End Function
|
End Function
|
||||||
End Class
|
End Class
|
||||||
#End Region
|
#End Region
|
||||||
@@ -71,14 +90,31 @@ Namespace API.Instagram
|
|||||||
Friend Property IG_WWW_CLAIM As PropertyValue
|
Friend Property IG_WWW_CLAIM As PropertyValue
|
||||||
<PropertyOption(ControlText:="Saved posts user", IsAuth:=True), PXML("SavedPostsUserName"), ControlNumber(5)>
|
<PropertyOption(ControlText:="Saved posts user", IsAuth:=True), PXML("SavedPostsUserName"), ControlNumber(5)>
|
||||||
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
||||||
Friend ReadOnly Property StoriesAndTaggedReady As Boolean
|
Friend ReadOnly Property BaseAuthExists As Boolean
|
||||||
Get
|
Get
|
||||||
Return ACheck(IG_APP_ID.Value) And ACheck(IG_WWW_CLAIM.Value) And ACheck(CSRF_TOKEN.Value)
|
Return Responser.Cookies.Count > 0 And ACheck(IG_APP_ID.Value) And ACheck(IG_WWW_CLAIM.Value) And ACheck(CSRF_TOKEN.Value)
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Private Const Header_IG_APP_ID As String = "x-ig-app-id"
|
||||||
|
Private Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim"
|
||||||
|
Private Const Header_CSRF_TOKEN As String = "x-csrftoken"
|
||||||
|
Private Sub ChangeResponserFields(ByVal PropName As String, ByVal Value As Object)
|
||||||
|
If Not PropName.IsEmptyString Then
|
||||||
|
Dim f$ = String.Empty
|
||||||
|
Select Case PropName
|
||||||
|
Case NameOf(IG_APP_ID) : f = Header_IG_APP_ID
|
||||||
|
Case NameOf(IG_WWW_CLAIM) : f = Header_IG_WWW_CLAIM
|
||||||
|
Case NameOf(CSRF_TOKEN) : f = Header_CSRF_TOKEN
|
||||||
|
End Select
|
||||||
|
If Not f.IsEmptyString Then
|
||||||
|
If Responser.Headers.Count > 0 AndAlso Responser.Headers.ContainsKey(f) Then Responser.Headers.Remove(f)
|
||||||
|
If Not CStr(Value).IsEmptyString Then Responser.Headers.Add(f, CStr(Value))
|
||||||
|
Responser.SaveSettings()
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download properties"
|
#Region "Download properties"
|
||||||
Friend ReadOnly Property HashUpdateRequired As XMLValue(Of Boolean)
|
|
||||||
<PropertyOption(ControlText:="Request timer", AllowNull:=False), PXML("RequestsWaitTimer"), ControlNumber(6)>
|
<PropertyOption(ControlText:="Request timer", AllowNull:=False), PXML("RequestsWaitTimer"), ControlNumber(6)>
|
||||||
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
||||||
@@ -95,9 +131,15 @@ Namespace API.Instagram
|
|||||||
Friend ReadOnly Property GetStories As PropertyValue
|
Friend ReadOnly Property GetStories As PropertyValue
|
||||||
<PropertyOption(ControlText:="Get tagged photos"), PXML, ControlNumber(10)>
|
<PropertyOption(ControlText:="Get tagged photos"), PXML, ControlNumber(10)>
|
||||||
Friend ReadOnly Property GetTagged As PropertyValue
|
Friend ReadOnly Property GetTagged As PropertyValue
|
||||||
|
<PropertyOption(ControlText:="Tagged notify limit",
|
||||||
|
ControlToolTip:="If the number of tagged posts exceeds this number you will be notified." & vbCr &
|
||||||
|
"-1 to disable"), PXML, ControlNumber(11)>
|
||||||
|
Friend ReadOnly Property TaggedNotifyLimit As PropertyValue
|
||||||
|
<Provider(NameOf(TaggedNotifyLimit), FieldsChecker:=True)>
|
||||||
|
Private ReadOnly Property TaggedNotifyLimitProvider As IFormatProvider
|
||||||
#End Region
|
#End Region
|
||||||
#Region "429 bypass"
|
#Region "429 bypass"
|
||||||
Friend ReadOnly Property DownloadingErrorDate As XMLValue(Of Date)
|
Private ReadOnly Property DownloadingErrorDate As XMLValue(Of Date)
|
||||||
Friend Property LastApplyingValue As Integer? = Nothing
|
Friend Property LastApplyingValue As Integer? = Nothing
|
||||||
Friend ReadOnly Property ReadyForDownload As Boolean
|
Friend ReadOnly Property ReadyForDownload As Boolean
|
||||||
Get
|
Get
|
||||||
@@ -110,8 +152,11 @@ Namespace API.Instagram
|
|||||||
End With
|
End With
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend ReadOnly Property LastDownloadDate As XMLValue(Of Date)
|
Private ReadOnly Property LastDownloadDate As XMLValue(Of Date)
|
||||||
Friend ReadOnly Property LastRequestsCount As XMLValue(Of Integer)
|
Private ReadOnly Property LastRequestsCount As XMLValue(Of Integer)
|
||||||
|
<PropertyOption(IsInformationLabel:=True), ControlNumber(100)>
|
||||||
|
Private Property LastRequestsCountLabel As PropertyValue
|
||||||
|
Private ReadOnly LastRequestsCountLabelStr As Func(Of Integer, String) = Function(r) $"Number of spent requests: {r.NumToGroupIntegral}"
|
||||||
Private TooManyRequestsReadyForCatch As Boolean = True
|
Private TooManyRequestsReadyForCatch As Boolean = True
|
||||||
Friend Function GetWaitDate() As Date
|
Friend Function GetWaitDate() As Date
|
||||||
With DownloadingErrorDate
|
With DownloadingErrorDate
|
||||||
@@ -141,10 +186,13 @@ Namespace API.Instagram
|
|||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
Friend Overrides ReadOnly Property Responser As WEB.Response
|
Friend Overrides ReadOnly Property Responser As Response
|
||||||
|
Private Initialized As Boolean = False
|
||||||
|
#End Region
|
||||||
|
#Region "Initializer"
|
||||||
Friend Sub New(ByRef _XML As XmlFile, ByVal GlobalPath As SFile)
|
Friend Sub New(ByRef _XML As XmlFile, ByVal GlobalPath As SFile)
|
||||||
MyBase.New(InstagramSite)
|
MyBase.New(InstagramSite)
|
||||||
Responser = New WEB.Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
Responser = New Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
||||||
|
|
||||||
Dim app_id$ = String.Empty
|
Dim app_id$ = String.Empty
|
||||||
Dim www_claim$ = String.Empty
|
Dim www_claim$ = String.Empty
|
||||||
@@ -160,6 +208,7 @@ Namespace API.Instagram
|
|||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
.CookiesDomain = "instagram.com"
|
.CookiesDomain = "instagram.com"
|
||||||
|
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||||
.SaveSettings()
|
.SaveSettings()
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
@@ -168,7 +217,6 @@ Namespace API.Instagram
|
|||||||
|
|
||||||
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
||||||
|
|
||||||
HashUpdateRequired = New XMLValue(Of Boolean)("InstaHashUpdateRequired", True, _XML, n)
|
|
||||||
Hash = New PropertyValue(String.Empty, GetType(String))
|
Hash = New PropertyValue(String.Empty, GetType(String))
|
||||||
HashSavedPosts = New PropertyValue(String.Empty, GetType(String))
|
HashSavedPosts = 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))
|
||||||
@@ -184,45 +232,27 @@ Namespace API.Instagram
|
|||||||
|
|
||||||
GetStories = New PropertyValue(False)
|
GetStories = New PropertyValue(False)
|
||||||
GetTagged = New PropertyValue(False)
|
GetTagged = New PropertyValue(False)
|
||||||
|
TaggedNotifyLimit = New PropertyValue(200)
|
||||||
|
TaggedNotifyLimitProvider = New TaggedNotifyLimitChecker
|
||||||
|
|
||||||
DownloadingErrorDate = New XMLValue(Of Date) With {
|
DownloadingErrorDate = New XMLValue(Of Date) With {.Provider = New XMLValueConversionProvider(Function(ss, vv) AConvert(Of String)(vv, AModes.Var, Nothing))}
|
||||||
.Provider = New XMLValueConversionProvider(Function(ss, vv) 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))
|
||||||
|
AddHandler LastRequestsCount.OnValueChanged, Sub(sender, __name, __value) LastRequestsCountLabel.Value = LastRequestsCountLabelStr.Invoke(__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
|
||||||
Friend Overrides Function GetInstance(ByVal What As Download) As IPluginContentProvider
|
Friend Overrides Sub BeginInit()
|
||||||
Select Case What
|
|
||||||
Case Download.Main : Return New UserData
|
|
||||||
Case Download.SavedPosts
|
|
||||||
Dim u As New UserData
|
|
||||||
DirectCast(u, UserDataBase).User = New UserInfo With {.Name = CStr(AConvert(Of String)(SavedPostsUserName.Value, String.Empty))}
|
|
||||||
Return u
|
|
||||||
End Select
|
|
||||||
Return Nothing
|
|
||||||
End Function
|
|
||||||
Private Const Header_IG_APP_ID As String = "x-ig-app-id"
|
|
||||||
Private Const Header_IG_WWW_CLAIM As String = "x-ig-www-claim"
|
|
||||||
Private Const Header_CSRF_TOKEN As String = "x-csrftoken"
|
|
||||||
Private Sub ChangeResponserFields(ByVal PropName As String, ByVal Value As Object)
|
|
||||||
If Not PropName.IsEmptyString Then
|
|
||||||
Dim f$ = String.Empty
|
|
||||||
Select Case PropName
|
|
||||||
Case NameOf(IG_APP_ID) : f = Header_IG_APP_ID
|
|
||||||
Case NameOf(IG_WWW_CLAIM) : f = Header_IG_WWW_CLAIM
|
|
||||||
Case NameOf(CSRF_TOKEN) : f = Header_CSRF_TOKEN
|
|
||||||
End Select
|
|
||||||
If Not f.IsEmptyString Then
|
|
||||||
If Responser.Headers.Count > 0 AndAlso Responser.Headers.ContainsKey(f) Then Responser.Headers.Remove(f)
|
|
||||||
If Not CStr(Value).IsEmptyString Then Responser.Headers.Add(f, CStr(Value))
|
|
||||||
Responser.SaveSettings()
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End Sub
|
End Sub
|
||||||
|
Friend Overrides Sub EndInit()
|
||||||
|
Initialized = True
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "PropertiesDataChecker"
|
||||||
<PropertiesDataChecker({NameOf(Hash), NameOf(HashSavedPosts)})>
|
<PropertiesDataChecker({NameOf(Hash), NameOf(HashSavedPosts)})>
|
||||||
Private Function CheckHashControls(ByVal p As IEnumerable(Of PropertyData)) As Boolean
|
Private Function CheckHashControls(ByVal p As IEnumerable(Of PropertyData)) As Boolean
|
||||||
If p.ListExists(2) Then
|
If p.ListExists(2) Then
|
||||||
@@ -248,24 +278,58 @@ Namespace API.Instagram
|
|||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
Friend Overrides Sub BeginInit()
|
<PropertiesDataChecker({NameOf(TaggedNotifyLimit)})>
|
||||||
End Sub
|
Private Function CheckNotifyLimit(ByVal p As IEnumerable(Of PropertyData)) As Boolean
|
||||||
Friend Overrides Sub EndInit()
|
If p.ListExists Then
|
||||||
If (CStr(Hash.Value).IsEmptyString Or HashUpdateRequired) AndAlso Responser.Cookies.ListExists Then GatherInstaHash()
|
Dim pi% = p.ListIndexOf(Function(pp) pp.Name = NameOf(TaggedNotifyLimit))
|
||||||
End Sub
|
If pi >= 0 Then
|
||||||
Friend Overrides Function ReadyToDownload(ByVal What As Download) As Boolean
|
Dim v% = AConvert(Of Integer)(p(pi).Value, -10)
|
||||||
Return ActiveJobs < 2 AndAlso ReadyForDownload
|
If v > 0 Then
|
||||||
|
Return True
|
||||||
|
ElseIf v = -1 Then
|
||||||
|
Return MsgBoxE({"You turn off notifications for tagged posts. This is highly undesirable. Do you still want to do it?",
|
||||||
|
"Disabling tagged notification limits"}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Plugin functions"
|
||||||
|
Friend Overrides Function GetInstance(ByVal What As Download) As IPluginContentProvider
|
||||||
|
Select Case What
|
||||||
|
Case Download.Main : Return New UserData
|
||||||
|
Case Download.SavedPosts
|
||||||
|
Dim u As New UserData
|
||||||
|
DirectCast(u, UserDataBase).User = New UserInfo With {.Name = CStr(AConvert(Of String)(SavedPostsUserName.Value, String.Empty))}
|
||||||
|
Return u
|
||||||
|
End Select
|
||||||
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
#Region "Downloading"
|
#Region "Downloading"
|
||||||
|
Friend Overrides Function ReadyToDownload(ByVal What As Download) As Boolean
|
||||||
|
If ActiveJobs < 2 AndAlso ReadyForDownload AndAlso BaseAuthExists Then
|
||||||
|
Select Case What
|
||||||
|
Case Download.Main : Return ACheck(Hash.Value)
|
||||||
|
Case Download.SavedPosts : Return ACheck(HashSavedPosts.Value)
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
Private ActiveJobs As Integer = 0
|
Private ActiveJobs As Integer = 0
|
||||||
Private _NextWNM As UserData.WNM = UserData.WNM.Notify
|
Private _NextWNM As UserData.WNM = UserData.WNM.Notify
|
||||||
|
Private _NextTagged As Boolean = True
|
||||||
Friend Overrides Sub DownloadStarted(ByVal What As Download)
|
Friend Overrides Sub DownloadStarted(ByVal What As Download)
|
||||||
If CStr(Hash.Value).IsEmptyString Or HashUpdateRequired Then GatherInstaHash()
|
|
||||||
ActiveJobs += 1
|
ActiveJobs += 1
|
||||||
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)
|
||||||
If What = Download.Main Then .WaitNotificationMode = _NextWNM
|
If What = Download.Main Then
|
||||||
|
.WaitNotificationMode = _NextWNM
|
||||||
|
.TaggedCheckSession = _NextTagged
|
||||||
|
End If
|
||||||
If LastDownloadDate.Value.AddMinutes(60) > Now Then
|
If LastDownloadDate.Value.AddMinutes(60) > Now Then
|
||||||
.RequestsCount = LastRequestsCount
|
.RequestsCount = LastRequestsCount
|
||||||
Else
|
Else
|
||||||
@@ -278,47 +342,18 @@ Namespace API.Instagram
|
|||||||
With DirectCast(User, UserData)
|
With DirectCast(User, UserData)
|
||||||
_NextWNM = .WaitNotificationMode
|
_NextWNM = .WaitNotificationMode
|
||||||
If _NextWNM = UserData.WNM.SkipTemp Or _NextWNM = UserData.WNM.SkipCurrent Then _NextWNM = UserData.WNM.Notify
|
If _NextWNM = UserData.WNM.SkipTemp Or _NextWNM = UserData.WNM.SkipCurrent Then _NextWNM = UserData.WNM.Notify
|
||||||
|
_NextTagged = .TaggedCheckSession
|
||||||
LastDownloadDate.Value = Now
|
LastDownloadDate.Value = Now
|
||||||
LastRequestsCount.Value = .RequestsCount
|
LastRequestsCount.Value = .RequestsCount
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overrides Sub DownloadDone(ByVal What As Download)
|
Friend Overrides Sub DownloadDone(ByVal What As Download)
|
||||||
_NextWNM = UserData.WNM.Notify
|
_NextWNM = UserData.WNM.Notify
|
||||||
|
_NextTagged = True
|
||||||
LastDownloadDate.Value = Now
|
LastDownloadDate.Value = Now
|
||||||
ActiveJobs -= 1
|
ActiveJobs -= 1
|
||||||
If HashUpdateRequired Then MyMainLOG = "Check your Instagram credentials"
|
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
<PropertyUpdater(NameOf(Hash))>
|
|
||||||
Friend Function GatherInstaHash() As Boolean
|
|
||||||
Try
|
|
||||||
If Not Responser.Cookies.ListExists Then Throw New Exception("Instagram cookies does not set")
|
|
||||||
Dim rs As New RParams("=""([^""]+?ConsumerLibCommons[^""]+?.js)""", Nothing, 1) With {.MatchTimeOut = 10}
|
|
||||||
Dim r$ = Responser.GetResponse("https://instagram.com",, EDP.ThrowException)
|
|
||||||
If Not r.IsEmptyString Then
|
|
||||||
Dim hStr$ = RegexReplace(r, rs)
|
|
||||||
If Not hStr.IsEmptyString Then
|
|
||||||
Do While Left(hStr, 1) = "/" : hStr = Right(hStr, hStr.Length - 1) : Loop
|
|
||||||
hStr = $"https://instagram.com/{hStr}"
|
|
||||||
r = Responser.GetResponse(hStr,, EDP.ThrowException)
|
|
||||||
If Not r.IsEmptyString Then
|
|
||||||
rs = New RParams("generatePaginationActionCreators.+?.profilePosts.byUserId.get.+?queryId:.([\d\w\S]+?)""", Nothing, 1) With {.MatchTimeOut = 10}
|
|
||||||
Dim h$ = RegexReplace(r, rs)
|
|
||||||
If Not h.IsEmptyString Then
|
|
||||||
Hash.Value = h
|
|
||||||
HashUpdateRequired.Value = False
|
|
||||||
Return True
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
Return False
|
|
||||||
Catch ex As Exception
|
|
||||||
HashUpdateRequired.Value = True
|
|
||||||
Hash.Value = String.Empty
|
|
||||||
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[SiteSettings.GaterInstaHash]", False)
|
|
||||||
End Try
|
|
||||||
End Function
|
|
||||||
Friend Overrides Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia)
|
Friend Overrides Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia)
|
||||||
Return UserData.GetVideoInfo(URL, Responser, Me)
|
Return UserData.GetVideoInfo(URL, Responser, Me)
|
||||||
End Function
|
End Function
|
||||||
@@ -328,5 +363,6 @@ Namespace API.Instagram
|
|||||||
Using f As New OptionsForm(Options) : f.ShowDialog() : End Using
|
Using f As New OptionsForm(Options) : f.ShowDialog() : End Using
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -12,18 +12,20 @@ Imports PersonalUtilities.Functions.RegularExpressions
|
|||||||
Imports PersonalUtilities.Tools.WEB
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports System.Threading
|
|
||||||
Imports System.Net
|
Imports System.Net
|
||||||
|
Imports System.Threading
|
||||||
Imports System.Reflection
|
Imports System.Reflection
|
||||||
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
||||||
Namespace API.Instagram
|
Namespace API.Instagram
|
||||||
Friend Class UserData : Inherits UserDataBase
|
Friend Class UserData : Inherits UserDataBase
|
||||||
Private Const MaxPostsCount As Integer = 200
|
#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_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"
|
||||||
|
#End Region
|
||||||
|
#Region "Declarations"
|
||||||
Private ReadOnly Property MySiteSettings As SiteSettings
|
Private ReadOnly Property MySiteSettings As SiteSettings
|
||||||
Get
|
Get
|
||||||
Return DirectCast(HOST.Source, SiteSettings)
|
Return DirectCast(HOST.Source, SiteSettings)
|
||||||
@@ -34,6 +36,8 @@ Namespace API.Instagram
|
|||||||
Private FirstLoadingDone As Boolean = False
|
Private FirstLoadingDone As Boolean = False
|
||||||
Friend Property GetStories As Boolean
|
Friend Property GetStories As Boolean
|
||||||
Friend Property GetTaggedData As Boolean
|
Friend Property GetTaggedData As Boolean
|
||||||
|
#End Region
|
||||||
|
#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 {.GetStories = GetStories, .GetTagged = GetTaggedData}
|
||||||
End Function
|
End Function
|
||||||
@@ -45,6 +49,8 @@ Namespace API.Instagram
|
|||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Initializer, loader"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean)
|
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean)
|
||||||
@@ -62,7 +68,13 @@ Namespace API.Instagram
|
|||||||
Container.Add(Name_TaggedChecked, TaggedChecked.BoolToInteger)
|
Container.Add(Name_TaggedChecked, TaggedChecked.BoolToInteger)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "Download data"
|
#Region "Download data"
|
||||||
|
Private Class ExitException : Inherits Exception
|
||||||
|
Friend Sub New(ByRef CompleteArg As Boolean)
|
||||||
|
CompleteArg = True
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
Try
|
Try
|
||||||
_InstaHash = String.Empty
|
_InstaHash = String.Empty
|
||||||
@@ -80,7 +92,8 @@ Namespace API.Instagram
|
|||||||
If FirstLoadingDone Then LastCursor = String.Empty
|
If FirstLoadingDone Then LastCursor = String.Empty
|
||||||
If IsSavedPosts Then
|
If IsSavedPosts Then
|
||||||
DownloadPosts(Token)
|
DownloadPosts(Token)
|
||||||
ElseIf MySiteSettings.StoriesAndTaggedReady Then
|
ElseIf MySiteSettings.BaseAuthExists Then
|
||||||
|
DownloadedTags = 0
|
||||||
If GetStories Then DownloadData(String.Empty, Sections.Stories, Token)
|
If GetStories Then DownloadData(String.Empty, Sections.Stories, Token)
|
||||||
If GetTaggedData Then DownloadData(String.Empty, Sections.Tagged, Token)
|
If GetTaggedData Then DownloadData(String.Empty, Sections.Tagged, Token)
|
||||||
End If
|
End If
|
||||||
@@ -91,12 +104,11 @@ Namespace API.Instagram
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private _InstaHash As String = String.Empty
|
Private _InstaHash As String = String.Empty
|
||||||
Friend Enum Sections
|
Private Enum Sections : Timeline : Tagged : Stories : End Enum
|
||||||
Timeline
|
Private Const StoriesFolder As String = "Stories"
|
||||||
Tagged
|
Private Const TaggedFolder As String = "Tagged"
|
||||||
Stories
|
|
||||||
End Enum
|
|
||||||
#Region "429 bypass"
|
#Region "429 bypass"
|
||||||
|
Private Const MaxPostsCount As Integer = 200
|
||||||
Friend Property RequestsCount As Integer = 0
|
Friend Property RequestsCount As Integer = 0
|
||||||
Friend Enum WNM As Integer
|
Friend Enum WNM As Integer
|
||||||
Notify = 0
|
Notify = 0
|
||||||
@@ -149,9 +161,77 @@ Namespace API.Instagram
|
|||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
Private Const StoriesFolder As String = "Stories"
|
#Region "Tags"
|
||||||
Private Const TaggedFolder As String = "Tagged"
|
|
||||||
Private TaggedChecked As Boolean = False
|
Private TaggedChecked As Boolean = False
|
||||||
|
Friend TaggedCheckSession As Boolean = True
|
||||||
|
Private DownloadedTags As Integer = 0
|
||||||
|
Private DownloadTagsLimit As Integer? = Nothing
|
||||||
|
Private ReadOnly Property TaggedLimitsNotifications(Optional ByVal v As Integer? = Nothing) As Boolean
|
||||||
|
Get
|
||||||
|
Return Not TaggedChecked AndAlso TaggedCheckSession AndAlso
|
||||||
|
CInt(MySiteSettings.TaggedNotifyLimit.Value) > 0 AndAlso
|
||||||
|
(Not v.HasValue OrElse v.Value > CInt(MySiteSettings.TaggedNotifyLimit.Value))
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Private Function SetTagsLimit(ByVal Max As Integer, ByVal p As ANumbers) As DialogResult
|
||||||
|
Dim v%?
|
||||||
|
Dim aStr$ = $"Enter the number of posts from user {ToString()} that you want to download{vbCr}" &
|
||||||
|
$"(Max: {Max.NumToString(p)}; Requests: {(Max / 12).RoundUp.NumToString(p)})"
|
||||||
|
Dim tryBtt As New MsgBoxButton("Try again") With {.ToolTip = "You will be asked again about the limit"}
|
||||||
|
Dim cancelBtt As New MsgBoxButton("Cancel") With {.ToolTip = "Cancel tagged posts download operation"}
|
||||||
|
Dim selectBtt As New MsgBoxButton("Other options") With {.ToolTip = "The main message with options will be displayed again"}
|
||||||
|
Dim m As New MMessage("You have not entered a valid posts limit", "Tagged posts download limit", {tryBtt, selectBtt, cancelBtt})
|
||||||
|
Dim mh As New MMessage("", "Tagged posts download limit", {"Confirm", tryBtt, selectBtt, cancelBtt}) With {.ButtonsPerRow = 2}
|
||||||
|
Do
|
||||||
|
v = AConvert(Of Integer)(InputBoxE(aStr, "Tagged posts download limit", CInt(MySiteSettings.TaggedNotifyLimit.Value)), AModes.Var, Nothing)
|
||||||
|
If v.HasValue Then
|
||||||
|
mh.Text = $"You have entered a limit of {v.Value.NumToString(p)} posts"
|
||||||
|
Select Case MsgBoxE(mh).Index
|
||||||
|
Case 0 : DownloadTagsLimit = v : Return DialogResult.OK
|
||||||
|
Case 1 : v = Nothing
|
||||||
|
Case 2 : Return DialogResult.Retry
|
||||||
|
Case 3 : Return DialogResult.Cancel
|
||||||
|
End Select
|
||||||
|
Else
|
||||||
|
Select Case MsgBoxE(m).Index
|
||||||
|
Case 1 : Return DialogResult.Retry
|
||||||
|
Case 2 : Return DialogResult.Cancel
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
Loop While Not v.HasValue
|
||||||
|
Return DialogResult.Retry
|
||||||
|
End Function
|
||||||
|
Private Function TaggedContinue(ByVal TaggedCount As Integer) As DialogResult
|
||||||
|
Dim agi As New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}
|
||||||
|
Dim msg As New MMessage($"The number of tagged posts by user [{ToString()}] is {TaggedCount.NumToString(agi)}" & vbCr &
|
||||||
|
$"This is about {(TaggedCount / 12).RoundUp.NumToString(agi)} requests." & vbCr &
|
||||||
|
"The tagged data download operation can take a long time.",
|
||||||
|
"Too much tagged data",
|
||||||
|
{
|
||||||
|
"Continue",
|
||||||
|
New MsgBoxButton("Continue unnotified") With {
|
||||||
|
.ToolTip = "Continue downloading and cancel further notifications in the current downloading session."},
|
||||||
|
New MsgBoxButton("Limit") With {
|
||||||
|
.ToolTip = "Enter the limit of posts you want to download."},
|
||||||
|
New MsgBoxButton("Disable and cancel") With {
|
||||||
|
.ToolTip = "Disable downloading tagged data and cancel downloading tagged data."},
|
||||||
|
"Cancel"
|
||||||
|
}, MsgBoxStyle.Exclamation) With {.DefaultButton = 0, .CancelButton = 4, .ButtonsPerRow = 2}
|
||||||
|
Do
|
||||||
|
Select Case MsgBoxE(msg).Index
|
||||||
|
Case 0 : Return DialogResult.OK
|
||||||
|
Case 1 : TaggedCheckSession = False : Return DialogResult.OK
|
||||||
|
Case 2
|
||||||
|
Select Case SetTagsLimit(TaggedCount, agi)
|
||||||
|
Case DialogResult.OK : Return DialogResult.OK
|
||||||
|
Case DialogResult.Cancel : Return DialogResult.Cancel
|
||||||
|
End Select
|
||||||
|
Case 3 : GetTaggedData = False : Return DialogResult.Cancel
|
||||||
|
Case 4 : Return DialogResult.Cancel
|
||||||
|
End Select
|
||||||
|
Loop
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
Private Overloads Sub DownloadData(ByVal Cursor As String, ByVal Section As Sections, ByVal Token As CancellationToken)
|
Private Overloads Sub DownloadData(ByVal Cursor As String, ByVal Section As Sections, ByVal Token As CancellationToken)
|
||||||
Dim URL$ = String.Empty
|
Dim URL$ = String.Empty
|
||||||
Dim StoriesList As List(Of String) = Nothing
|
Dim StoriesList As List(Of String) = Nothing
|
||||||
@@ -176,7 +256,6 @@ Namespace API.Instagram
|
|||||||
'Check environment
|
'Check environment
|
||||||
If Cursor.IsEmptyString And _InstaHash.IsEmptyString Then _
|
If Cursor.IsEmptyString And _InstaHash.IsEmptyString Then _
|
||||||
_InstaHash = CStr(If(IsSavedPosts, MySiteSettings.HashSavedPosts, MySiteSettings.Hash).Value)
|
_InstaHash = CStr(If(IsSavedPosts, MySiteSettings.HashSavedPosts, MySiteSettings.Hash).Value)
|
||||||
AuthNullException.ThrowIfNull(Section, IsSavedPosts, MySiteSettings)
|
|
||||||
If ID.IsEmptyString Then GetUserId()
|
If ID.IsEmptyString Then GetUserId()
|
||||||
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")
|
||||||
|
|
||||||
@@ -258,23 +337,14 @@ Namespace API.Instagram
|
|||||||
If Not PostID.IsEmptyString And _TempPostsList.Contains(PostID) Then Throw New ExitException(_DownloadComplete)
|
If Not PostID.IsEmptyString And _TempPostsList.Contains(PostID) Then Throw New ExitException(_DownloadComplete)
|
||||||
_TempPostsList.Add(PostID)
|
_TempPostsList.Add(PostID)
|
||||||
ObtainMedia2(nn, PostID, SpecFolder)
|
ObtainMedia2(nn, PostID, SpecFolder)
|
||||||
|
DownloadedTags += 1
|
||||||
|
If DownloadTagsLimit.HasValue AndAlso DownloadedTags >= DownloadTagsLimit.Value Then Throw New ExitException(_DownloadComplete)
|
||||||
Next
|
Next
|
||||||
If Not TaggedChecked Then
|
If TaggedLimitsNotifications Then
|
||||||
TaggedCount = j.Value("total_count").FromXML(Of Integer)(0)
|
TaggedCount = j.Value("total_count").FromXML(Of Integer)(0)
|
||||||
TaggedChecked = True
|
TaggedChecked = True
|
||||||
If TaggedCount > 200 Then
|
If TaggedLimitsNotifications(TaggedCount) AndAlso
|
||||||
Dim a% = MsgBoxE({$"The number of tagged posts by user [{ToString()}] is { _
|
TaggedContinue(TaggedCount) = DialogResult.Cancel Then Throw New ExitException(_DownloadComplete)
|
||||||
TaggedCount.NumToString(New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral})}" & vbCr &
|
|
||||||
"The tagged data download operation can take a long time.", "Too much tagged data"}, vbExclamation,,,
|
|
||||||
{"Continue",
|
|
||||||
New MsgBoxButton("Disable and cancel") With {
|
|
||||||
.ToolTip = "Disable downloading tagged data and cancel downloading tagged data."},
|
|
||||||
"Cancel"})
|
|
||||||
If a > 0 Then
|
|
||||||
If a = 1 Then GetTaggedData = False
|
|
||||||
Throw New ExitException(_DownloadComplete)
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
End If
|
End If
|
||||||
End Select
|
End Select
|
||||||
Else
|
Else
|
||||||
@@ -288,9 +358,6 @@ Namespace API.Instagram
|
|||||||
End If
|
End If
|
||||||
_DownloadComplete = True
|
_DownloadComplete = True
|
||||||
If HasNextPage And Not EndCursor.IsEmptyString Then DownloadData(EndCursor, Section, Token)
|
If HasNextPage And Not EndCursor.IsEmptyString Then DownloadData(EndCursor, Section, Token)
|
||||||
Catch iane As AuthNullException
|
|
||||||
ErrorsDescriber.Execute(EDP.SendInLog, iane)
|
|
||||||
Throw New ExitException(_DownloadComplete)
|
|
||||||
Catch eex As ExitException
|
Catch eex As ExitException
|
||||||
Throw eex
|
Throw eex
|
||||||
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
Catch oex As OperationCanceledException When Token.IsCancellationRequested
|
||||||
@@ -370,6 +437,8 @@ Namespace API.Instagram
|
|||||||
ProcessException(DoEx, Token, $"downloading saved posts error [{URL}]")
|
ProcessException(DoEx, Token, $"downloading saved posts error [{URL}]")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Obtain Media"
|
#Region "Obtain Media"
|
||||||
Private Sub ObtainMedia(ByVal node As EContainer, ByVal PostID As String, ByVal PostDate As String, ByVal SpecFolder As String)
|
Private Sub ObtainMedia(ByVal node As EContainer, ByVal PostID As String, ByVal PostDate As String, ByVal SpecFolder As String)
|
||||||
@@ -473,7 +542,8 @@ Namespace API.Instagram
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
Private Sub GetUserId()
|
#Region "GetUserId"
|
||||||
|
<Obsolete> Private Sub GetUserId_Old()
|
||||||
Try
|
Try
|
||||||
Dim r$ = Responser.GetResponse($"https://www.instagram.com/{Name}/?__a=1",, EDP.ThrowException)
|
Dim r$ = Responser.GetResponse($"https://www.instagram.com/{Name}/?__a=1",, EDP.ThrowException)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
@@ -489,6 +559,23 @@ Namespace API.Instagram
|
|||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub GetUserId()
|
||||||
|
Try
|
||||||
|
Dim r$ = Responser.GetResponse($"https://i.instagram.com/api/v1/users/web_profile_info/?username={Name}",, EDP.ThrowException)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Using j As EContainer = JsonDocument.Parse(r).XmlIfNothing
|
||||||
|
ID = j({"data", "user"}, "id").XmlIfNothingValue
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
If Responser.StatusCode = HttpStatusCode.NotFound Or Responser.StatusCode = HttpStatusCode.BadRequest Then
|
||||||
|
Throw ex
|
||||||
|
Else
|
||||||
|
LogError(ex, "get Instagram user id")
|
||||||
|
End If
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "Pinned stories"
|
#Region "Pinned stories"
|
||||||
Private Sub GetStoriesData(ByRef StoriesList As List(Of String), ByVal Token As CancellationToken)
|
Private Sub GetStoriesData(ByRef StoriesList As List(Of String), ByVal Token As CancellationToken)
|
||||||
Const ReqUrl$ = "https://i.instagram.com/api/v1/feed/reels_media/?{0}"
|
Const ReqUrl$ = "https://i.instagram.com/api/v1/feed/reels_media/?{0}"
|
||||||
@@ -549,11 +636,12 @@ Namespace API.Instagram
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
#Region "Download content"
|
||||||
End Sub
|
|
||||||
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
|
||||||
DownloadContentDefault(Token)
|
DownloadContentDefault(Token)
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Exceptions"
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' <inheritdoc cref="UserDataBase.DownloadingException(Exception, String)"/><br/>
|
''' <inheritdoc cref="UserDataBase.DownloadingException(Exception, String)"/><br/>
|
||||||
''' 1 - continue
|
''' 1 - continue
|
||||||
@@ -566,8 +654,7 @@ Namespace API.Instagram
|
|||||||
UserExists = False
|
UserExists = False
|
||||||
ElseIf Responser.StatusCode = HttpStatusCode.BadRequest Then
|
ElseIf Responser.StatusCode = HttpStatusCode.BadRequest Then
|
||||||
HasError = True
|
HasError = True
|
||||||
MyMainLOG = $"Instagram credentials have expired: {ToString()} [{s}]"
|
MyMainLOG = $"Instagram credentials have expired [{CInt(Responser.StatusCode)}]: {ToString()} [{s}]"
|
||||||
MySiteSettings.HashUpdateRequired.Value = True
|
|
||||||
ElseIf Responser.StatusCode = HttpStatusCode.Forbidden And s = Sections.Tagged Then
|
ElseIf Responser.StatusCode = HttpStatusCode.Forbidden And s = Sections.Tagged Then
|
||||||
Return 3
|
Return 3
|
||||||
ElseIf Responser.StatusCode = 429 Then
|
ElseIf Responser.StatusCode = 429 Then
|
||||||
@@ -580,13 +667,14 @@ Namespace API.Instagram
|
|||||||
MyMainLOG = $"Number of requests before error 429: {RequestsCount}"
|
MyMainLOG = $"Number of requests before error 429: {RequestsCount}"
|
||||||
Return 1
|
Return 1
|
||||||
Else
|
Else
|
||||||
MySiteSettings.HashUpdateRequired.Value = True
|
MyMainLOG = $"Instagram hash requested [{CInt(Responser.StatusCode)}]: {ToString()} [{s}]"
|
||||||
MyMainLOG = $"Instagram hash requested: {ToString()} [{s}]"
|
|
||||||
If Not FromPE Then LogError(ex, Message) : HasError = True
|
If Not FromPE Then LogError(ex, Message) : HasError = True
|
||||||
Return 0
|
Return 0
|
||||||
End If
|
End If
|
||||||
Return 2
|
Return 2
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Create media"
|
||||||
Private Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
Private Shared Function MediaFromData(ByVal t As UTypes, ByVal _URL As String, ByVal PostID As String, ByVal PostDate As String,
|
||||||
Optional ByVal SpecialFolder As String = Nothing) As UserMedia
|
Optional ByVal SpecialFolder As String = Nothing) As UserMedia
|
||||||
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
_URL = LinkFormatterSecure(RegexReplace(_URL.Replace("\", String.Empty), LinkPattern))
|
||||||
@@ -596,6 +684,8 @@ Namespace API.Instagram
|
|||||||
m.SpecialFolder = SpecialFolder
|
m.SpecialFolder = SpecialFolder
|
||||||
Return m
|
Return m
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Standalone downloader"
|
||||||
Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal r As Response, ByVal _Settings As SiteSettings) As IEnumerable(Of UserMedia)
|
Friend Shared Function GetVideoInfo(ByVal URL As String, ByVal r As Response, ByVal _Settings As SiteSettings) As IEnumerable(Of UserMedia)
|
||||||
Try
|
Try
|
||||||
If Not URL.IsEmptyString AndAlso URL.Contains("instagram.com") Then
|
If Not URL.IsEmptyString AndAlso URL.Contains("instagram.com") Then
|
||||||
@@ -616,9 +706,12 @@ Namespace API.Instagram
|
|||||||
Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Instagram standalone downloader: fetch media error")
|
Return ErrorsDescriber.Execute(EDP.ShowMainMsg + EDP.SendInLog, ex, "Instagram standalone downloader: fetch media error")
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
|
#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 _SavedPostsIDs.Clear()
|
If Not disposedValue And disposing Then _SavedPostsIDs.Clear()
|
||||||
MyBase.Dispose(disposing)
|
MyBase.Dispose(disposing)
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -9,9 +9,9 @@
|
|||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports System.Threading
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.Plugin.Hosts
|
Imports SCrawler.Plugin.Hosts
|
||||||
Imports System.Threading
|
|
||||||
Imports SCrawler.API.Reddit.RedditViewExchange
|
Imports SCrawler.API.Reddit.RedditViewExchange
|
||||||
Imports View = SCrawler.API.Reddit.IRedditView.View
|
Imports View = SCrawler.API.Reddit.IRedditView.View
|
||||||
Imports Period = SCrawler.API.Reddit.IRedditView.Period
|
Imports Period = SCrawler.API.Reddit.IRedditView.Period
|
||||||
@@ -44,10 +44,12 @@ Namespace API.Reddit
|
|||||||
Return ListAddList(Nothing, Posts).ListAddList(PostsLatest).ListSort
|
Return ListAddList(Nothing, Posts).ListAddList(PostsLatest).ListSort
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Private ReadOnly Property Source As IEnumerable(Of UserPost) Implements IRangeSwitcherContainer(Of UserPost).Source
|
Private Property Source As IEnumerable(Of UserPost) Implements IRangeSwitcherContainer(Of UserPost).Source
|
||||||
Get
|
Get
|
||||||
Return Posts
|
Return Posts
|
||||||
End Get
|
End Get
|
||||||
|
Set(ByVal s As IEnumerable(Of UserPost))
|
||||||
|
End Set
|
||||||
End Property
|
End Property
|
||||||
Friend Property LatestParsedDate As Date? = Nothing
|
Friend Property LatestParsedDate As Date? = Nothing
|
||||||
Private _Downloading As Boolean = False
|
Private _Downloading As Boolean = False
|
||||||
@@ -110,7 +112,7 @@ Namespace API.Reddit
|
|||||||
ChannelExistentUserNames.ListAddList((From p As UserPost In PostsAll
|
ChannelExistentUserNames.ListAddList((From p As UserPost In PostsAll
|
||||||
Where Not p.UserID.IsEmptyString AndAlso
|
Where Not p.UserID.IsEmptyString AndAlso
|
||||||
Settings.UsersList.Exists(Function(u) u.Site = Site And u.Name = p.UserID)
|
Settings.UsersList.Exists(Function(u) u.Site = Site And u.Name = p.UserID)
|
||||||
Select p.UserID), LAP.NotContainsOnly)
|
Select p.UserID), LNC)
|
||||||
ChannelExistentUserNames.RemoveAll(Function(u) Not Settings.UsersList.Exists(Function(uu) uu.Site = Site And uu.Name = u))
|
ChannelExistentUserNames.RemoveAll(Function(u) Not Settings.UsersList.Exists(Function(uu) uu.Site = Site And uu.Name = u))
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
@@ -163,7 +165,7 @@ Namespace API.Reddit
|
|||||||
If Not ViewMode = View.New And AutoGetLimits Then
|
If Not ViewMode = View.New And AutoGetLimits Then
|
||||||
Return _DownloadLimitPost
|
Return _DownloadLimitPost
|
||||||
Else
|
Else
|
||||||
Dim PID$ = ListAddList(Nothing, Posts, LAP.NotContainsOnly).ListAddList(PostsLatest, LAP.NotContainsOnly).ListSort.FirstOrDefault.ID
|
Dim PID$ = ListAddList(Nothing, Posts, LNC).ListAddList(PostsLatest, LNC).ListSort.FirstOrDefault.ID
|
||||||
If AutoGetLimits And Not PID.IsEmptyString Then
|
If AutoGetLimits And Not PID.IsEmptyString Then
|
||||||
Return PID
|
Return PID
|
||||||
Else
|
Else
|
||||||
@@ -231,11 +233,7 @@ Namespace API.Reddit
|
|||||||
Return New Channel(f)
|
Return New Channel(f)
|
||||||
End Operator
|
End Operator
|
||||||
Public Overrides Function ToString() As String
|
Public Overrides Function ToString() As String
|
||||||
If Not Name.IsEmptyString Then
|
Return If(Name.IsEmptyString, ID, Name)
|
||||||
Return Name
|
|
||||||
Else
|
|
||||||
Return ID
|
|
||||||
End If
|
|
||||||
End Function
|
End Function
|
||||||
Friend Sub Delete()
|
Friend Sub Delete()
|
||||||
File.Delete(, SFODelete.DeleteToRecycleBin)
|
File.Delete(, SFODelete.DeleteToRecycleBin)
|
||||||
@@ -259,7 +257,7 @@ Namespace API.Reddit
|
|||||||
.DownloadData(Token)
|
.DownloadData(Token)
|
||||||
End With
|
End With
|
||||||
Dim b% = Posts.Count
|
Dim b% = Posts.Count
|
||||||
Posts.ListAddList(d.GetNewChannelPosts(), LAP.NotContainsOnly)
|
Posts.ListAddList(d.GetNewChannelPosts(), LNC)
|
||||||
If Posts.Count - b > 0 Then CountOfLoadedPostsPerSession.Add(Posts.Count - b)
|
If Posts.Count - b > 0 Then CountOfLoadedPostsPerSession.Add(Posts.Count - b)
|
||||||
Posts.Sort()
|
Posts.Sort()
|
||||||
LatestParsedDate = If(Posts.FirstOrDefault(Function(pp) pp.Date.HasValue).Date, LatestParsedDate)
|
LatestParsedDate = If(Posts.FirstOrDefault(Function(pp) pp.Date.HasValue).Date, LatestParsedDate)
|
||||||
@@ -362,8 +360,8 @@ Namespace API.Reddit
|
|||||||
UpdateUsersStats()
|
UpdateUsersStats()
|
||||||
If Not ViewMode = View.New Then
|
If Not ViewMode = View.New Then
|
||||||
Dim l As New List(Of String)
|
Dim l As New List(Of String)
|
||||||
If Posts.Count > 0 Or PostsLatest.Count > 0 Then l.ListAddList((From p In PostsAll Where Not p.ID.IsEmptyString Select p.ID), LAP.NotContainsOnly)
|
If Posts.Count > 0 Or PostsLatest.Count > 0 Then l.ListAddList((From p In PostsAll Where Not p.ID.IsEmptyString Select p.ID), LNC)
|
||||||
l.ListAddList(PostsNames, LAP.NotContainsOnly)
|
l.ListAddList(PostsNames, LNC)
|
||||||
If l.Count > 0 Then TextSaver.SaveTextToFile(l.ListToString("|"), FilePosts, True,, EDP.SendInLog)
|
If l.Count > 0 Then TextSaver.SaveTextToFile(l.ListToString("|"), FilePosts, True,, EDP.SendInLog)
|
||||||
End If
|
End If
|
||||||
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Channel"}
|
Using x As New XmlFile With {.AllowSameNames = True, .Name = "Channel"}
|
||||||
|
|||||||
@@ -12,8 +12,16 @@ Imports SCrawler.API.Base
|
|||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
Namespace API.Reddit
|
Namespace API.Reddit
|
||||||
Friend Class ChannelsCollection : Implements ICollection(Of Channel), IMyEnumerator(Of Channel), IChannelLimits, IDisposable
|
Friend Class ChannelsCollection : Implements ICollection(Of Channel), IMyEnumerator(Of Channel), IChannelLimits, IDisposable
|
||||||
Friend Shared ReadOnly Property ChannelsPath As SFile = $"{SettingsFolderName}\Channels\"
|
Friend Shared ReadOnly Property ChannelsPath As SFile
|
||||||
Friend Shared ReadOnly Property ChannelsPathCache As SFile = $"{Settings.GlobalPath.Value.PathWithSeparator}_CachedData\"
|
Get
|
||||||
|
Return $"{SettingsFolderName}\Channels\"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Shared ReadOnly Property ChannelsPathCache As SFile
|
||||||
|
Get
|
||||||
|
Return $"{Settings.GlobalPath.Value.PathWithSeparator}_CachedData\"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
Private ReadOnly Channels As List(Of Channel)
|
Private ReadOnly Channels As List(Of Channel)
|
||||||
Friend Structure ChannelImage : Implements IEquatable(Of ChannelImage)
|
Friend Structure ChannelImage : Implements IEquatable(Of ChannelImage)
|
||||||
Friend File As SFile
|
Friend File As SFile
|
||||||
@@ -42,7 +50,7 @@ Namespace API.Reddit
|
|||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex)
|
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[API.Reddit.ChannelsCollection.GetUserFiles]")
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Friend Sub UpdateUsersStats()
|
Friend Sub UpdateUsersStats()
|
||||||
@@ -97,7 +105,7 @@ Namespace API.Reddit
|
|||||||
If Item(i).ID = ChannelID Then Return Item(i)
|
If Item(i).ID = ChannelID Then Return Item(i)
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
Throw New ArgumentException($"Channel ID [{ChannelID}] does not found in channels collection", "ChannelID") With {.HelpLink = 1}
|
Throw New ArgumentException($"Channel ID [{ChannelID}] not found in channel collection", "ChannelID") With {.HelpLink = 1}
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend Sub DownloadData(ByVal Token As CancellationToken, Optional ByVal SkipExists As Boolean = True,
|
Friend Sub DownloadData(ByVal Token As CancellationToken, Optional ByVal SkipExists As Boolean = True,
|
||||||
|
|||||||
@@ -17,26 +17,8 @@ Namespace API.Reddit
|
|||||||
New NodeParams("children", True, True, True)}
|
New NodeParams("children", True, True, True)}
|
||||||
Friend ReadOnly UrlBasePattern As RParams = RParams.DM("(?<=/)([^/]+?\.[\w]{3,4})(?=(\?|\Z))", 0)
|
Friend ReadOnly UrlBasePattern As RParams = RParams.DM("(?<=/)([^/]+?\.[\w]{3,4})(?=(\?|\Z))", 0)
|
||||||
Friend ReadOnly VideoRegEx As RParams = RParams.DM("http.{0,1}://[^" & Chr(34) & "]+?mp4", 0)
|
Friend ReadOnly VideoRegEx As RParams = RParams.DM("http.{0,1}://[^" & Chr(34) & "]+?mp4", 0)
|
||||||
Friend ReadOnly DateProvider As New JsonDate
|
|
||||||
Friend ReadOnly DateProviderChannel As New JsonDateChannel
|
|
||||||
Private ReadOnly EUR_PROVIDER As New ANumbers(ANumbers.Cultures.EUR)
|
Private ReadOnly EUR_PROVIDER As New ANumbers(ANumbers.Cultures.EUR)
|
||||||
Friend Class JsonDate : Implements ICustomProvider
|
Friend ReadOnly DateProvider As New CustomProvider(Function(v, d, p, n, e) ADateTime.ParseUnicodeJS(v, n, e))
|
||||||
Friend Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
Friend ReadOnly DateProviderChannel As New CustomProvider(Function(v, d, p, n, e) ADateTime.ParseUnicode(AConvert(Of Integer)(v, EUR_PROVIDER, v), n, e))
|
||||||
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
|
||||||
Return ADateTime.ParseUnicodeJS(Value, NothingArg, e)
|
|
||||||
End Function
|
|
||||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
|
||||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
Friend Class JsonDateChannel : Implements ICustomProvider
|
|
||||||
Friend Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
|
||||||
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
|
||||||
Return ADateTime.ParseUnicode(AConvert(Of Integer)(Value, EUR_PROVIDER, Value), NothingArg, e)
|
|
||||||
End Function
|
|
||||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
|
||||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -14,23 +14,30 @@ Namespace API.Reddit
|
|||||||
Namespace M3U8_Declarations
|
Namespace M3U8_Declarations
|
||||||
Friend Module M3U8_Declarations
|
Friend Module M3U8_Declarations
|
||||||
Friend ReadOnly BaseUrlPattern As RParams = RParams.DM("([htps:/]{7,8}.+?/.+?)(?=/)", 0, EDP.ReturnValue)
|
Friend ReadOnly BaseUrlPattern As RParams = RParams.DM("([htps:/]{7,8}.+?/.+?)(?=/)", 0, EDP.ReturnValue)
|
||||||
Friend ReadOnly PlayListRegEx_1 As RParams = RParams.DM("(#EXT-X-STREAM-INF)(.+)(RESOLUTION=)(\d+)(.+?[\r\n]{1,2})(.+?)([\r\n]{1,2})", 0,
|
''' <summary>Video</summary>
|
||||||
RegexReturn.List, EDP.SendInLog, EDP.ReturnValue)
|
Friend ReadOnly PlayListRegEx_1 As RParams = RParams.DM("(#EXT-X-STREAM-INF)(.+)(RESOLUTION=)(\d+)(.+?[\r\n]{1,2})(.+?)([\r\n]{1,2})", 0, RegexReturn.List)
|
||||||
Friend ReadOnly PlayListRegEx_2 As RParams = RParams.DM("(?<=#EXT-X-BYTERANGE.+?[\r\n]{1,2})(.+)(?=[\r\n]{0,2})", 0,
|
''' <summary>Audio, Video</summary>
|
||||||
RegexReturn.List, EDP.SendInLog, EDP.ReturnValue)
|
Friend ReadOnly PlayListRegEx_2 As RParams = RParams.DM("(?<=#EXT-X-BYTERANGE.+?[\r\n]{1,2})(.+)(?=[\r\n]{0,2})", 0, RegexReturn.List)
|
||||||
|
Friend ReadOnly PlayListAudioRegEx As RParams = RParams.DM("(HLS_AUDIO_(\d+)[^""]+)", 0, RegexReturn.List)
|
||||||
Friend ReadOnly DPED As New ErrorsDescriber(EDP.SendInLog + EDP.ReturnValue)
|
Friend ReadOnly DPED As New ErrorsDescriber(EDP.SendInLog + EDP.ReturnValue)
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
Friend NotInheritable Class M3U8
|
Friend NotInheritable Class M3U8 : Implements IDisposable
|
||||||
Private Sub New()
|
#Region "Declarations"
|
||||||
End Sub
|
Private Enum Types : Video : Audio : End Enum
|
||||||
Private Structure Resolution : Implements IRegExCreator, IComparable(Of Resolution)
|
Private Structure Resolution : Implements IRegExCreator, IComparable(Of Resolution)
|
||||||
Friend File As String
|
Friend File As String
|
||||||
Friend Resolution As Integer
|
Friend Resolution As Integer
|
||||||
|
Friend HasError As Boolean
|
||||||
Friend Function CreateFromArray(ByVal ParamsArray() As String) As Object Implements IRegExCreator.CreateFromArray
|
Friend Function CreateFromArray(ByVal ParamsArray() As String) As Object Implements IRegExCreator.CreateFromArray
|
||||||
If ParamsArray.ArrayExists Then
|
If ParamsArray.ArrayExists Then
|
||||||
File = ParamsArray(0)
|
File = ParamsArray(0)
|
||||||
If ParamsArray.Length > 1 Then Resolution = AConvert(Of Integer)(ParamsArray(1), 0)
|
Try
|
||||||
|
If ParamsArray.Length > 1 Then Resolution = AConvert(Of Integer)(ParamsArray(1), EDP.ThrowException)
|
||||||
|
Catch ex As Exception
|
||||||
|
HasError = True
|
||||||
|
Resolution = 0
|
||||||
|
End Try
|
||||||
End If
|
End If
|
||||||
Return Me
|
Return Me
|
||||||
End Function
|
End Function
|
||||||
@@ -38,20 +45,59 @@ Namespace API.Reddit
|
|||||||
Return Resolution.CompareTo(Other.Resolution) * -1
|
Return Resolution.CompareTo(Other.Resolution) * -1
|
||||||
End Function
|
End Function
|
||||||
End Structure
|
End Structure
|
||||||
Private Shared Function GetPlaylistUrls(ByVal PlayListURL As String, ByVal BaseUrl As String) As List(Of String)
|
Private ReadOnly PlayListURL As String
|
||||||
|
Private ReadOnly BaseURL As String
|
||||||
|
Private ReadOnly Video As List(Of String)
|
||||||
|
Private ReadOnly Audio As List(Of String)
|
||||||
|
Private OutFile As SFile
|
||||||
|
Private VideoFile As SFile
|
||||||
|
Private AudioFile As SFile
|
||||||
|
Private CachePath As SFile
|
||||||
|
#End Region
|
||||||
|
Private Sub New(ByVal URL As String, ByVal OutFile As SFile)
|
||||||
|
PlayListURL = URL
|
||||||
|
BaseURL = RegexReplace(URL, BaseUrlPattern)
|
||||||
|
Video = New List(Of String)
|
||||||
|
Audio = New List(Of String)
|
||||||
|
Me.OutFile = OutFile
|
||||||
|
Me.OutFile.Name = "PlayListFile"
|
||||||
|
Me.OutFile.Extension = "mp4"
|
||||||
|
CachePath = $"{OutFile.PathWithSeparator}_Cache\{SFile.GetDirectories($"{OutFile.PathWithSeparator}_Cache\",,, EDP.ReturnValue).ListIfNothing.Count + 1}\"
|
||||||
|
End Sub
|
||||||
|
#Region "Internal functions"
|
||||||
|
#Region "GetPlaylistUrls"
|
||||||
|
Private Overloads Sub GetPlaylistUrls()
|
||||||
|
Video.ListAddList(GetPlaylistUrls(PlayListURL, Types.Video))
|
||||||
|
Audio.ListAddList(GetPlaylistUrls(PlayListURL, Types.Audio))
|
||||||
|
End Sub
|
||||||
|
Private Overloads Function GetPlaylistUrls(ByVal PlayListURL As String, ByVal Type As Types) As List(Of String)
|
||||||
Try
|
Try
|
||||||
If Not BaseUrl.IsEmptyString Then
|
If Not BaseURL.IsEmptyString Then
|
||||||
Using w As New WebClient
|
Using w As New WebClient
|
||||||
Dim r$ = w.DownloadString(PlayListURL)
|
Dim r$ = w.DownloadString(PlayListURL)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Dim l As List(Of Resolution) = FNF.RegexFields(Of Resolution)(r, {PlayListRegEx_1}, {6, 4})
|
Dim l As New List(Of Resolution)
|
||||||
|
If Type = Types.Video Then
|
||||||
|
l = RegexFields(Of Resolution)(r, {PlayListRegEx_1}, {6, 4})
|
||||||
|
Else
|
||||||
|
Try
|
||||||
|
l = RegexFields(Of Resolution)(r, {PlayListAudioRegEx}, {1, 2})
|
||||||
|
Catch anull As RegexFieldsTextBecameNullException
|
||||||
|
l.Clear()
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
If l.ListExists Then
|
If l.ListExists Then
|
||||||
|
Dim plError As Predicate(Of Resolution) = Function(lr) lr.HasError
|
||||||
|
If l.Exists(plError) Then
|
||||||
|
l.RemoveAll(plError)
|
||||||
|
If l.Count = 0 Then Return New List(Of String)
|
||||||
|
End If
|
||||||
l.Sort()
|
l.Sort()
|
||||||
Dim pls$ = $"{BaseUrl}/{l.First.File}"
|
Dim pls$ = $"{BaseURL}/{l.First.File}"
|
||||||
r = w.DownloadString(pls)
|
r = w.DownloadString(pls)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Dim lp As New ListAddParams(LAP.NotContainsOnly) With {
|
Dim lp As New ListAddParams(LAP.NotContainsOnly) With {
|
||||||
.Converter = Function(input) $"{BaseUrl}/{input}",
|
.Converter = Function(input) $"{BaseURL}/{input}",
|
||||||
.Error = New ErrorsDescriber(False, False, True, New List(Of String))}
|
.Error = New ErrorsDescriber(False, False, True, New List(Of String))}
|
||||||
Return ListAddList(Of String, List(Of String))(Nothing, DirectCast(RegexReplace(r, PlayListRegEx_2), List(Of String)), lp).ListIfNothing
|
Return ListAddList(Of String, List(Of String))(Nothing, DirectCast(RegexReplace(r, PlayListRegEx_2), List(Of String)), lp).ListIfNothing
|
||||||
End If
|
End If
|
||||||
@@ -61,47 +107,94 @@ Namespace API.Reddit
|
|||||||
End If
|
End If
|
||||||
Return New List(Of String)
|
Return New List(Of String)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(DPED, ex, "[M3U8.GetPlaylistUrls]", New List(Of String))
|
Return ErrorsDescriber.Execute(DPED, ex, $"[M3U8.GetPlaylistUrls({Type}): {PlayListURL}]", New List(Of String))
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Private Shared Function Save(ByVal URLs As List(Of String), ByVal f As SFile) As SFile
|
#End Region
|
||||||
Dim CachePath As SFile = Nothing
|
#Region "ConcatData"
|
||||||
|
Private Overloads Sub ConcatData()
|
||||||
|
ConcatData(Video, Types.Video, VideoFile)
|
||||||
|
ConcatData(Audio, Types.Audio, AudioFile)
|
||||||
|
MergeFiles()
|
||||||
|
End Sub
|
||||||
|
Private Overloads Sub ConcatData(ByVal Urls As List(Of String), ByVal Type As Types, ByRef TFile As SFile)
|
||||||
Try
|
Try
|
||||||
If URLs.ListExists Then
|
If Urls.ListExists Then
|
||||||
Dim ConcatFile As SFile = f
|
Dim ConcatFile As SFile = OutFile
|
||||||
ConcatFile.Name = "PlayListFile"
|
If Type = Types.Audio Then
|
||||||
|
ConcatFile.Name &= "_AUDIO"
|
||||||
|
ConcatFile.Extension = "aac"
|
||||||
|
Else
|
||||||
|
If Audio.Count > 0 Then ConcatFile.Name &= "_VIDEO"
|
||||||
ConcatFile.Extension = "mp4"
|
ConcatFile.Extension = "mp4"
|
||||||
CachePath = $"{f.PathWithSeparator}_Cache\{SFile.GetDirectories($"{f.PathWithSeparator}_Cache\",,, EDP.ReturnValue).ListIfNothing.Count + 1}\"
|
End If
|
||||||
If CachePath.Exists(SFO.Path) Then
|
If CachePath.Exists(SFO.Path) Then
|
||||||
Dim p As New SFileNumbers(ConcatFile.Name,,, New ANumbers With {.Format = ANumbers.Formats.General})
|
Dim p As New SFileNumbers(ConcatFile.Name,,, New ANumbers With {.Format = ANumbers.Formats.General})
|
||||||
ConcatFile = SFile.Indexed_IndexFile(ConcatFile,, p, EDP.ReturnValue)
|
ConcatFile = SFile.Indexed_IndexFile(ConcatFile,, p, EDP.ThrowException) 'EDP.ReturnValue
|
||||||
Dim i%
|
Dim i%
|
||||||
Dim eFiles As New List(Of SFile)
|
Dim eFiles As New List(Of SFile)
|
||||||
Dim dFile As SFile = CachePath
|
Dim dFile As SFile = CachePath
|
||||||
dFile.Extension = New SFile(URLs(0)).Extension
|
dFile.Extension = New SFile(Urls(0)).Extension
|
||||||
If dFile.Extension.IsEmptyString Then dFile.Extension = "ts"
|
If dFile.Extension.IsEmptyString Then dFile.Extension = "ts"
|
||||||
Using w As New WebClient
|
Using w As New WebClient
|
||||||
For i = 0 To URLs.Count - 1
|
For i = 0 To Urls.Count - 1
|
||||||
dFile.Name = $"ConPart_{i}"
|
dFile.Name = $"ConPart_{i}"
|
||||||
w.DownloadFile(URLs(i), dFile)
|
w.DownloadFile(Urls(i), dFile)
|
||||||
eFiles.Add(dFile)
|
eFiles.Add(dFile)
|
||||||
Next
|
Next
|
||||||
End Using
|
End Using
|
||||||
f = FFMPEG.ConcatenateFiles(eFiles, Settings.FfmpegFile, ConcatFile, p, DPED)
|
TFile = FFMPEG.ConcatenateFiles(eFiles, Settings.FfmpegFile, ConcatFile, p, DPED)
|
||||||
eFiles.Clear()
|
eFiles.Clear()
|
||||||
Return f
|
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Return Nothing
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(DPED, ex, "[M3U8.Save]", New SFile)
|
ErrorsDescriber.Execute(DPED, ex, $"[M3U8.Save({Type})]")
|
||||||
Finally
|
|
||||||
CachePath.Delete(SFO.Path, SFODelete.None, DPED)
|
|
||||||
End Try
|
End Try
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
Private Sub MergeFiles()
|
||||||
|
Try
|
||||||
|
If Not VideoFile.IsEmptyString And Not AudioFile.IsEmptyString Then
|
||||||
|
Dim p As New SFileNumbers(OutFile.Name,, RParams.DMS("PlayListFile_(\d*)", 1), New ANumbers With {.Format = ANumbers.Formats.General})
|
||||||
|
OutFile = FFMPEG.MergeFiles({VideoFile, AudioFile}, Settings.FfmpegFile, OutFile, p, DPED)
|
||||||
|
Else
|
||||||
|
OutFile = VideoFile
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(DPED, ex, $"[M3U8.MergeFiles]")
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Friend Function Download() As SFile
|
||||||
|
GetPlaylistUrls()
|
||||||
|
ConcatData()
|
||||||
|
Return OutFile
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Statics"
|
||||||
Friend Shared Function Download(ByVal URL As String, ByVal f As SFile) As SFile
|
Friend Shared Function Download(ByVal URL As String, ByVal f As SFile) As SFile
|
||||||
Dim BaseUrl$ = RegexReplace(URL, BaseUrlPattern)
|
Using m As New M3U8(URL, f) : Return m.Download() : End Using
|
||||||
Return Save(GetPlaylistUrls(URL, BaseUrl), f)
|
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
Private Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then
|
||||||
|
Video.Clear()
|
||||||
|
Audio.Clear()
|
||||||
|
CachePath.Delete(SFO.Path, SFODelete.None, DPED)
|
||||||
|
End If
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -7,17 +7,16 @@
|
|||||||
' 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.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
|
||||||
Imports CView = SCrawler.API.Reddit.IRedditView.View
|
Imports CView = SCrawler.API.Reddit.IRedditView.View
|
||||||
Imports CPeriod = SCrawler.API.Reddit.IRedditView.Period
|
Imports CPeriod = SCrawler.API.Reddit.IRedditView.Period
|
||||||
Namespace API.Reddit
|
Namespace API.Reddit
|
||||||
Friend Class RedditViewSettingsForm : Implements IOkCancelToolbar
|
Friend Class RedditViewSettingsForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Private ReadOnly Property MyOptions As IRedditView
|
Private ReadOnly Property MyOptions As IRedditView
|
||||||
Friend Sub New(ByRef opt As IRedditView)
|
Friend Sub New(ByRef opt As IRedditView)
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyOptions = opt
|
MyOptions = opt
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ChannelSettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub ChannelSettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
Try
|
||||||
@@ -29,10 +28,8 @@ Namespace API.Reddit
|
|||||||
End If
|
End If
|
||||||
If Not n.IsEmptyString Then Text = n
|
If Not n.IsEmptyString Then Text = n
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.AppendDetectors()
|
|
||||||
.DelegateClosingChecker()
|
|
||||||
Select Case MyOptions.ViewMode
|
Select Case MyOptions.ViewMode
|
||||||
Case CView.Hot : OPT_VIEW_MODE_HOT.Checked = True
|
Case CView.Hot : OPT_VIEW_MODE_HOT.Checked = True
|
||||||
Case CView.Top : OPT_VIEW_MODE_TOP.Checked = True
|
Case CView.Top : OPT_VIEW_MODE_TOP.Checked = True
|
||||||
@@ -53,7 +50,7 @@ Namespace API.Reddit
|
|||||||
MyDefs.InvokeLoaderError(ex)
|
MyDefs.InvokeLoaderError(ex)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
With MyOptions
|
With MyOptions
|
||||||
Select Case True
|
Select Case True
|
||||||
Case OPT_VIEW_MODE_HOT.Checked : .ViewMode = CView.Hot
|
Case OPT_VIEW_MODE_HOT.Checked : .ViewMode = CView.Hot
|
||||||
@@ -71,9 +68,6 @@ Namespace API.Reddit
|
|||||||
End With
|
End With
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub OPT_VIEW_MODE_NEW_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_VIEW_MODE_NEW.CheckedChanged
|
Private Sub OPT_VIEW_MODE_NEW_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_VIEW_MODE_NEW.CheckedChanged
|
||||||
ChangePeriodEnabled()
|
ChangePeriodEnabled()
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports DownDetector = SCrawler.API.Base.DownDetector
|
Imports DownDetector = SCrawler.API.Base.DownDetector
|
||||||
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
||||||
@@ -28,21 +28,25 @@ Namespace API.Reddit
|
|||||||
End Property
|
End Property
|
||||||
<PropertyOption(ControlText:="Saved posts user"), PXML("SavedPostsUserName")>
|
<PropertyOption(ControlText:="Saved posts user"), PXML("SavedPostsUserName")>
|
||||||
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
||||||
Friend Overrides ReadOnly Property Responser As WEB.Response
|
<PropertyOption(ControlText:="Use M3U8", ControlToolTip:="Use M3U8 or mp4 for Reddit videos"), PXML>
|
||||||
|
Friend ReadOnly Property UseM3U8 As PropertyValue
|
||||||
|
Friend Overrides ReadOnly Property Responser As Response
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
MyBase.New(RedditSite)
|
MyBase.New(RedditSite)
|
||||||
Responser = New WEB.Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
Responser = New Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
||||||
|
|
||||||
With Responser
|
With Responser
|
||||||
If .File.Exists Then
|
If .File.Exists Then
|
||||||
.LoadSettings()
|
.LoadSettings()
|
||||||
Else
|
Else
|
||||||
.CookiesDomain = "reddit.com"
|
.CookiesDomain = "reddit.com"
|
||||||
|
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||||
.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
||||||
.SaveSettings()
|
.SaveSettings()
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
SavedPostsUserName = New PropertyValue(String.Empty, GetType(String))
|
||||||
|
UseM3U8 = New PropertyValue(True)
|
||||||
UrlPatternUser = "https://www.reddit.com/user/{0}/"
|
UrlPatternUser = "https://www.reddit.com/user/{0}/"
|
||||||
UrlPatternChannel = "https://www.reddit.com/r/{0}/"
|
UrlPatternChannel = "https://www.reddit.com/r/{0}/"
|
||||||
ImageVideoContains = "redgifs"
|
ImageVideoContains = "redgifs"
|
||||||
@@ -75,19 +79,23 @@ Namespace API.Reddit
|
|||||||
Next
|
Next
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
Friend Overrides Function Available(ByVal What As Download) As Boolean
|
Friend Overrides Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean
|
||||||
Try
|
Try
|
||||||
Dim dl As List(Of DownDetector.Data) = DownDetector.GetData("reddit")
|
Dim dl As List(Of DownDetector.Data) = DownDetector.GetData("reddit")
|
||||||
If dl.ListExists Then
|
If dl.ListExists Then
|
||||||
dl = dl.Take(4).ToList
|
dl = dl.Take(4).ToList
|
||||||
Dim avg% = dl.Average(Function(d) d.Value)
|
Dim avg% = dl.Average(Function(d) d.Value)
|
||||||
If avg > 100 Then
|
If avg > 100 Then
|
||||||
|
If Silent Then
|
||||||
|
Return False
|
||||||
|
Else
|
||||||
Return MsgBoxE({"Over the past hour, Reddit has received an average of " &
|
Return MsgBoxE({"Over the past hour, Reddit has received an average of " &
|
||||||
avg.NumToString(New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}) & " outage reports:" & vbCr &
|
avg.NumToString(New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}) & " outage reports:" & vbCr &
|
||||||
dl.ListToString(vbCr) & vbCr & vbCr &
|
dl.ListToString(vbCr) & vbCr & vbCr &
|
||||||
"Do you want to continue parsing Reddit data?", "There are outage reports on Reddit"}, vbYesNo) = vbYes
|
"Do you want to continue parsing Reddit data?", "There are outage reports on Reddit"}, vbYesNo) = vbYes
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
End If
|
||||||
Return True
|
Return True
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[API.Reddit.SiteSettings.Available]", True)
|
Return ErrorsDescriber.Execute(EDP.SendInLog + EDP.ReturnValue, ex, "[API.Reddit.SiteSettings.Available]", True)
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ Namespace API.Reddit
|
|||||||
Return If(IsChannel, DateProviderChannel, DateProvider)
|
Return If(IsChannel, DateProviderChannel, DateProvider)
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Private ReadOnly Property UseM3U8 As Boolean
|
||||||
|
Get
|
||||||
|
Return Settings.UseM3U8 And CBool(DirectCast(HOST.Source, SiteSettings).UseM3U8.Value)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
#Region "Channels Support"
|
#Region "Channels Support"
|
||||||
#Region "IChannelLimits Support"
|
#Region "IChannelLimits Support"
|
||||||
Friend Property DownloadLimitCount As Integer? Implements IChannelLimits.DownloadLimitCount
|
Friend Property DownloadLimitCount As Integer? Implements IChannelLimits.DownloadLimitCount
|
||||||
@@ -53,7 +58,7 @@ Namespace API.Reddit
|
|||||||
Friend Property AutoGetLimits As Boolean = True Implements IChannelLimits.AutoGetLimits
|
Friend Property AutoGetLimits As Boolean = True Implements IChannelLimits.AutoGetLimits
|
||||||
#End Region
|
#End Region
|
||||||
Friend Property ChannelInfo As Channel
|
Friend Property ChannelInfo As Channel
|
||||||
Private ReadOnly ChannelPostsNames As New List(Of String)
|
Private ReadOnly ChannelPostsNames As List(Of String)
|
||||||
Friend Property SkipExistsUsers As Boolean = True Implements IChannelData.SkipExistsUsers
|
Friend Property SkipExistsUsers As Boolean = True Implements IChannelData.SkipExistsUsers
|
||||||
Private ReadOnly _ExistsUsersNames As List(Of String)
|
Private ReadOnly _ExistsUsersNames As List(Of String)
|
||||||
Friend Property SaveToCache As Boolean = False Implements IChannelData.SaveToCache
|
Friend Property SaveToCache As Boolean = False Implements IChannelData.SaveToCache
|
||||||
@@ -242,9 +247,12 @@ Namespace API.Reddit
|
|||||||
added = False
|
added = False
|
||||||
End If
|
End If
|
||||||
Case "video"
|
Case "video"
|
||||||
If Settings.UseM3U8 AndAlso s("hlsUrl").XmlIfNothingValue("/").ToLower.Contains("m3u8") Then
|
If UseM3U8 AndAlso s("hlsUrl").XmlIfNothingValue("/").ToLower.Contains("m3u8") Then
|
||||||
_TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, s.Value("hlsUrl"),
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, s.Value("hlsUrl"),
|
||||||
_PostID(), PostDate,, IsChannel), LNC)
|
_PostID(), PostDate,, IsChannel), LNC)
|
||||||
|
ElseIf Not UseM3U8 AndAlso s("fallback_url").XmlIfNothingValue("/").ToLower.Contains("mp4") Then
|
||||||
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.Video, s.Value("fallback_url"),
|
||||||
|
_PostID(), PostDate,, IsChannel), LNC)
|
||||||
Else
|
Else
|
||||||
added = False
|
added = False
|
||||||
End If
|
End If
|
||||||
@@ -367,8 +375,12 @@ Namespace API.Reddit
|
|||||||
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.Picture, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
|
||||||
_TotalPostsDownloaded += 1
|
_TotalPostsDownloaded += 1
|
||||||
End If
|
End If
|
||||||
|
ElseIf UseM3U8 AndAlso Not s.Value({"media", "reddit_video"}, "hls_url").IsEmptyString Then
|
||||||
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.m3u8, s.Value({"media", "reddit_video"}, "hls_url"),
|
||||||
|
PostID, PostDate, _UserID, IsChannel), LNC)
|
||||||
Else
|
Else
|
||||||
_TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre + UTypes.m3u8, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
|
'_TempMediaList.ListAddValue(MediaFromData(UTypes.VideoPre + UTypes.m3u8, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
|
||||||
|
_TempMediaList.ListAddValue(MediaFromData(UTypes.Video, tmpUrl, PostID, PostDate, _UserID, IsChannel), LNC)
|
||||||
_TotalPostsDownloaded += 1
|
_TotalPostsDownloaded += 1
|
||||||
End If
|
End If
|
||||||
ElseIf CreateImgurMedia(tmpUrl, PostID, PostDate, _UserID, IsChannel) Then
|
ElseIf CreateImgurMedia(tmpUrl, PostID, PostDate, _UserID, IsChannel) Then
|
||||||
@@ -652,6 +664,7 @@ Namespace API.Reddit
|
|||||||
f = SFile.Indexed_IndexFile(f,,, EDP.ReturnValue)
|
f = SFile.Indexed_IndexFile(f,,, EDP.ReturnValue)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
If f.Extension = "webp" And Settings.DownloadNativeImageFormat Then f.Extension = "jpg"
|
||||||
f.Path = MyDir
|
f.Path = MyDir
|
||||||
Try
|
Try
|
||||||
If (v.Type = UTypes.Video Or v.Type = UTypes.m3u8 Or (ImgurUrls.Count > 0 AndAlso f.Extension = "mp4")) And
|
If (v.Type = UTypes.Video Or v.Type = UTypes.m3u8 Or (ImgurUrls.Count > 0 AndAlso f.Extension = "mp4")) And
|
||||||
@@ -716,9 +729,10 @@ Namespace API.Reddit
|
|||||||
ElseIf Responser.StatusCode = HttpStatusCode.Forbidden Then
|
ElseIf Responser.StatusCode = HttpStatusCode.Forbidden Then
|
||||||
UserSuspended = True
|
UserSuspended = True
|
||||||
ElseIf Responser.StatusCode = HttpStatusCode.BadGateway Or
|
ElseIf Responser.StatusCode = HttpStatusCode.BadGateway Or
|
||||||
Responser.StatusCode = HttpStatusCode.ServiceUnavailable Or
|
Responser.StatusCode = HttpStatusCode.ServiceUnavailable Then
|
||||||
Responser.StatusCode = HttpStatusCode.GatewayTimeout Then
|
MyMainLOG = $"[{CInt(Responser.StatusCode)}] Reddit is currently unavailable ({ToString()})"
|
||||||
MyMainLOG = "Reddit is currently unavailable"
|
ElseIf Responser.StatusCode = HttpStatusCode.GatewayTimeout Then
|
||||||
|
Return 1
|
||||||
Else
|
Else
|
||||||
If Not FromPE Then LogError(ex, Message) : HasError = True
|
If Not FromPE Then LogError(ex, Message) : HasError = True
|
||||||
Return 0
|
Return 0
|
||||||
|
|||||||
@@ -9,15 +9,6 @@
|
|||||||
Namespace API.RedGifs
|
Namespace API.RedGifs
|
||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
Friend Const RedGifsSite As String = "RedGifs"
|
Friend Const RedGifsSite As String = "RedGifs"
|
||||||
Friend ReadOnly DateProvider As New JsonDate
|
Friend ReadOnly DateProvider As New CustomProvider(Function(v, d, p, n, e) ADateTime.ParseUnicode(v, n, e))
|
||||||
Friend Class JsonDate : Implements ICustomProvider
|
|
||||||
Friend Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
|
||||||
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
|
||||||
Return ADateTime.ParseUnicode(Value, NothingArg, e)
|
|
||||||
End Function
|
|
||||||
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
|
||||||
Throw New NotImplementedException("GetFormat is not available in this context")
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
End Module
|
End Module
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -9,8 +9,8 @@
|
|||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
||||||
Imports System.Threading
|
|
||||||
Imports System.Net
|
Imports System.Net
|
||||||
|
Imports System.Threading
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
Imports UTypes = SCrawler.API.Base.UserMedia.Types
|
||||||
Namespace API.RedGifs
|
Namespace API.RedGifs
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
'
|
'
|
||||||
' 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 SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Tools
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports SCrawler.API.Base
|
|
||||||
Namespace API.Twitter
|
Namespace API.Twitter
|
||||||
<Manifest("AndyProgram_Twitter"), SavedPosts, UseClassAsIs>
|
<Manifest("AndyProgram_Twitter"), SavedPosts, UseClassAsIs>
|
||||||
Friend Class SiteSettings : Inherits SiteSettingsBase
|
Friend Class SiteSettings : Inherits SiteSettingsBase
|
||||||
@@ -33,10 +33,10 @@ Namespace API.Twitter
|
|||||||
Private ReadOnly Property Token As PropertyValue
|
Private ReadOnly Property Token As PropertyValue
|
||||||
<PropertyOption(ControlText:="Saved posts user name", ControlToolTip:="Personal profile username", LeftOffset:=120), PXML>
|
<PropertyOption(ControlText:="Saved posts user name", ControlToolTip:="Personal profile username", LeftOffset:=120), PXML>
|
||||||
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
Friend ReadOnly Property SavedPostsUserName As PropertyValue
|
||||||
Friend Overrides ReadOnly Property Responser As WEB.Response
|
Friend Overrides ReadOnly Property Responser As Response
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
MyBase.New(TwitterSite)
|
MyBase.New(TwitterSite)
|
||||||
Responser = New WEB.Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
Responser = New Response($"{SettingsFolderName}\Responser_{Site}.xml")
|
||||||
|
|
||||||
Dim a$ = String.Empty
|
Dim a$ = String.Empty
|
||||||
Dim t$ = String.Empty
|
Dim t$ = String.Empty
|
||||||
@@ -52,11 +52,10 @@ Namespace API.Twitter
|
|||||||
.ContentType = "application/json"
|
.ContentType = "application/json"
|
||||||
.Accept = "*/*"
|
.Accept = "*/*"
|
||||||
.CookiesDomain = "twitter.com"
|
.CookiesDomain = "twitter.com"
|
||||||
|
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||||
.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
.Decoders.Add(SymbolsConverter.Converters.Unicode)
|
||||||
With .Headers
|
With .Headers
|
||||||
.Add("sec-ch-ua", " Not;A Brand" & Chr(34) & ";v=" & Chr(34) & "99" & Chr(34) & ", " & Chr(34) &
|
.Add("sec-ch-ua", " Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91""")
|
||||||
"Google Chrome" & Chr(34) & ";v=" & Chr(34) & "91" & Chr(34) & ", " & Chr(34) & "Chromium" &
|
|
||||||
Chr(34) & ";v=" & Chr(34) & "91" & Chr(34))
|
|
||||||
.Add("sec-ch-ua-mobile", "?0")
|
.Add("sec-ch-ua-mobile", "?0")
|
||||||
.Add("sec-fetch-dest", "empty")
|
.Add("sec-fetch-dest", "empty")
|
||||||
.Add("sec-fetch-mode", "cors")
|
.Add("sec-fetch-mode", "cors")
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ Namespace API.Twitter
|
|||||||
Dim r$ = Responser.GetResponse(URL,, EDP.ThrowException)
|
Dim r$ = Responser.GetResponse(URL,, EDP.ThrowException)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Using w As EContainer = JsonDocument.Parse(r)
|
Using w As EContainer = JsonDocument.Parse(r)
|
||||||
If Not w Is Nothing AndAlso w.Count > 0 Then
|
If w.ListExists Then
|
||||||
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
|
||||||
@@ -141,8 +141,7 @@ Namespace API.Twitter
|
|||||||
If URL.Contains("twitter") Then
|
If URL.Contains("twitter") Then
|
||||||
Dim PostID$ = RegexReplace(URL, RParams.DM("(?<=/)\d+", 0))
|
Dim PostID$ = RegexReplace(URL, RParams.DM("(?<=/)\d+", 0))
|
||||||
If Not PostID.IsEmptyString Then
|
If Not PostID.IsEmptyString Then
|
||||||
Dim r$ = DirectCast(resp.Copy(), Response).
|
Dim r$ = DirectCast(resp.Copy(), Response).GetResponse($"https://api.twitter.com/1.1/statuses/show.json?id={PostID}",, EDP.ReturnValue)
|
||||||
GetResponse($"https://api.twitter.com/1.1/statuses/show.json?id={PostID}",, EDP.ReturnValue)
|
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Using j As EContainer = JsonDocument.Parse(r)
|
Using j As EContainer = JsonDocument.Parse(r)
|
||||||
If j.ListExists Then
|
If j.ListExists Then
|
||||||
@@ -163,7 +162,7 @@ Namespace API.Twitter
|
|||||||
Const P4K As String = "4096x4096"
|
Const P4K As String = "4096x4096"
|
||||||
Try
|
Try
|
||||||
Dim ww As EContainer = w("sizes")
|
Dim ww As EContainer = w("sizes")
|
||||||
If Not ww Is Nothing AndAlso ww.Count > 0 Then
|
If ww.ListExists Then
|
||||||
Dim l As New List(Of Sizes)
|
Dim l As New List(Of Sizes)
|
||||||
Dim Orig As Sizes? = New Sizes(w.Value({"original_info"}, "height").FromXML(Of Integer)(-1), P4K)
|
Dim Orig As Sizes? = New Sizes(w.Value({"original_info"}, "height").FromXML(Of Integer)(-1), P4K)
|
||||||
If Orig.Value.Value = -1 Then Orig = Nothing
|
If Orig.Value.Value = -1 Then Orig = Nothing
|
||||||
@@ -176,7 +175,7 @@ Namespace API.Twitter
|
|||||||
If Orig.HasValue AndAlso l(0).Value < Orig.Value.Value Then
|
If Orig.HasValue AndAlso l(0).Value < Orig.Value.Value Then
|
||||||
Return P4K
|
Return P4K
|
||||||
ElseIf l(0).Data.IsEmptyString Then
|
ElseIf l(0).Data.IsEmptyString Then
|
||||||
If LargeContained Then Return "large" Else Return P4K
|
Return P4K
|
||||||
Else
|
Else
|
||||||
Return l(0).Data
|
Return l(0).Data
|
||||||
End If
|
End If
|
||||||
@@ -197,6 +196,7 @@ Namespace API.Twitter
|
|||||||
#Region "Video options"
|
#Region "Video options"
|
||||||
Private Function CheckVideoNode(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String) As Boolean
|
Private Function CheckVideoNode(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String) As Boolean
|
||||||
Try
|
Try
|
||||||
|
If CheckForGif(w, PostID, PostDate) Then Return True
|
||||||
Dim URL$ = GetVideoNodeURL(w)
|
Dim URL$ = GetVideoNodeURL(w)
|
||||||
If Not URL.IsEmptyString Then
|
If Not URL.IsEmptyString Then
|
||||||
Dim f$ = UrlFile(URL)
|
Dim f$ = UrlFile(URL)
|
||||||
@@ -212,9 +212,44 @@ Namespace API.Twitter
|
|||||||
Return False
|
Return False
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
Private Function CheckForGif(ByVal w As EContainer, ByVal PostID As String, ByVal PostDate As String) As Boolean
|
||||||
|
Try
|
||||||
|
Dim gifUrl As Predicate(Of EContainer) = Function(e) Not e.Value("content_type").IsEmptyString AndAlso
|
||||||
|
e.Value("content_type").Contains("mp4") AndAlso
|
||||||
|
Not e.Value("url").IsEmptyString
|
||||||
|
Dim url$, ff$
|
||||||
|
Dim f As SFile
|
||||||
|
Dim m As UserMedia
|
||||||
|
With w({"extended_entities", "media"})
|
||||||
|
If .ListExists Then
|
||||||
|
For Each n As EContainer In .Self
|
||||||
|
If n.Value("type") = "animated_gif" Then
|
||||||
|
With n({"video_info", "variants"}).XmlIfNothing.ItemF({gifUrl}).XmlIfNothing
|
||||||
|
url = .Value("url")
|
||||||
|
ff = UrlFile(url)
|
||||||
|
If Not ff.IsEmptyString Then
|
||||||
|
If Not _DataNames.Contains(ff) Then
|
||||||
|
m = MediaFromData(url, PostID, PostDate)
|
||||||
|
f = m.File
|
||||||
|
If Not f.IsEmptyString Then f.Name = $"GIF_{f.Name}" : m.File = f
|
||||||
|
_TempMediaList.ListAddValue(m, LNC)
|
||||||
|
End If
|
||||||
|
Return True
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Return False
|
||||||
|
Catch ex As Exception
|
||||||
|
LogError(ex, "[API.Twitter.UserData.CheckForGif]")
|
||||||
|
Return False
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
Private Shared Function GetVideoNodeURL(ByVal w As EContainer) As String
|
Private Shared Function GetVideoNodeURL(ByVal w As EContainer) As String
|
||||||
Dim v As EContainer = w.GetNode(VideoNode)
|
Dim v As EContainer = w.GetNode(VideoNode)
|
||||||
If Not v Is Nothing AndAlso v.Count > 0 Then
|
If v.ListExists Then
|
||||||
Dim l As New List(Of Sizes)
|
Dim l As New List(Of Sizes)
|
||||||
Dim u$
|
Dim u$
|
||||||
Dim nn As EContainer
|
Dim nn As EContainer
|
||||||
@@ -266,6 +301,8 @@ Namespace API.Twitter
|
|||||||
UserSuspended = True
|
UserSuspended = True
|
||||||
ElseIf Responser.StatusCode = HttpStatusCode.BadRequest Then
|
ElseIf Responser.StatusCode = HttpStatusCode.BadRequest Then
|
||||||
MyMainLOG = "Twitter has invalid credentials"
|
MyMainLOG = "Twitter has invalid credentials"
|
||||||
|
ElseIf Responser.StatusCode = HttpStatusCode.ServiceUnavailable Then
|
||||||
|
MyMainLOG = $"Twitter is currently unavailable ({ToString()})"
|
||||||
Else
|
Else
|
||||||
If Not FromPE Then LogError(ex, Message) : HasError = True
|
If Not FromPE Then LogError(ex, Message) : HasError = True
|
||||||
Return 0
|
Return 0
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ Namespace API
|
|||||||
If Count > 0 Then
|
If Count > 0 Then
|
||||||
Return Collections(0).GetPicture
|
Return Collections(0).GetPicture
|
||||||
Else
|
Else
|
||||||
Return GetNullPicture(Settings.MaxLargeImageHeigh)
|
Return GetNullPicture(Settings.MaxLargeImageHeight)
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
@@ -191,10 +191,10 @@ Namespace API
|
|||||||
Friend Overrides Property LastUpdated As Date?
|
Friend Overrides Property LastUpdated As Date?
|
||||||
Get
|
Get
|
||||||
If Count > 0 Then
|
If Count > 0 Then
|
||||||
With If((From c As IUserData In Collections
|
With (From c As IUserData In Collections
|
||||||
Where DirectCast(c, UserDataBase).LastUpdated.HasValue
|
Where DirectCast(c, UserDataBase).LastUpdated.HasValue
|
||||||
Select DirectCast(c, UserDataBase).LastUpdated.Value).ToList, New List(Of Date))
|
Select DirectCast(c, UserDataBase).LastUpdated.Value).ToList
|
||||||
If .Count > 0 Then Return .Max
|
If .ListExists Then Return .Max
|
||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
@@ -267,6 +267,7 @@ Namespace API
|
|||||||
End Property
|
End Property
|
||||||
#End Region
|
#End Region
|
||||||
#End Region
|
#End Region
|
||||||
|
#Region "Initializers"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
_IsCollection = True
|
_IsCollection = True
|
||||||
Collections = New List(Of IUserData)
|
Collections = New List(Of IUserData)
|
||||||
@@ -276,6 +277,8 @@ Namespace API
|
|||||||
Me.New
|
Me.New
|
||||||
CollectionName = _Name
|
CollectionName = _Name
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Load, Update"
|
||||||
Friend Overrides Sub LoadUserInformation()
|
Friend Overrides Sub LoadUserInformation()
|
||||||
If Count > 0 Then Collections.ForEach(Sub(c) c.LoadUserInformation())
|
If Count > 0 Then Collections.ForEach(Sub(c) c.LoadUserInformation())
|
||||||
End Sub
|
End Sub
|
||||||
@@ -287,6 +290,8 @@ Namespace API
|
|||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean)
|
Protected Overrides Sub LoadUserInformation_OptionalFields(ByRef Container As XmlFile, ByVal Loading As Boolean)
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Download"
|
||||||
Friend Overrides Property DownloadTopCount As Integer?
|
Friend Overrides Property DownloadTopCount As Integer?
|
||||||
Get
|
Get
|
||||||
If Count > 0 Then
|
If Count > 0 Then
|
||||||
@@ -312,8 +317,10 @@ Namespace API
|
|||||||
Return 0
|
Return 0
|
||||||
End Function
|
End Function
|
||||||
Private Sub User_OnUserUpdated(ByVal User As IUserData)
|
Private Sub User_OnUserUpdated(ByVal User As IUserData)
|
||||||
RaiseEvent_OnUserUpdated()
|
OnUserUpdated()
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Open site, folder"
|
||||||
Friend Overrides Sub OpenSite(Optional ByVal e As ErrorsDescriber = Nothing)
|
Friend Overrides Sub OpenSite(Optional ByVal e As ErrorsDescriber = Nothing)
|
||||||
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))
|
||||||
@@ -321,9 +328,10 @@ Namespace API
|
|||||||
Friend Overrides Sub OpenFolder()
|
Friend Overrides Sub OpenFolder()
|
||||||
Try
|
Try
|
||||||
If Count > 0 Then GlobalOpenPath(Collections(0).File.CutPath(2))
|
If Count > 0 Then GlobalOpenPath(Collections(0).File.CutPath(2))
|
||||||
Catch ex As Exception
|
Catch
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "ICollection Support"
|
#Region "ICollection Support"
|
||||||
Default Friend ReadOnly Property Item(ByVal Index As Integer) As IUserData Implements IMyEnumerator(Of IUserData).MyEnumeratorObject
|
Default Friend ReadOnly Property Item(ByVal Index As Integer) As IUserData Implements IMyEnumerator(Of IUserData).MyEnumeratorObject
|
||||||
Get
|
Get
|
||||||
@@ -353,7 +361,7 @@ Namespace API
|
|||||||
End If
|
End If
|
||||||
ImageHandler(_Item, False)
|
ImageHandler(_Item, False)
|
||||||
AddRemoveBttDeleteHandler(.Self, True)
|
AddRemoveBttDeleteHandler(.Self, True)
|
||||||
AddHandler .Self.OnUserUpdated, AddressOf User_OnUserUpdated
|
AddHandler .Self.UserUpdated, AddressOf User_OnUserUpdated
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
Throw New InvalidOperationException("User data was not moved to the collection folder")
|
Throw New InvalidOperationException("User data was not moved to the collection folder")
|
||||||
@@ -367,7 +375,7 @@ Namespace API
|
|||||||
With Collections.Last
|
With Collections.Last
|
||||||
If _CollectionName.IsEmptyString Then _CollectionName = .CollectionName
|
If _CollectionName.IsEmptyString Then _CollectionName = .CollectionName
|
||||||
AddRemoveBttDeleteHandler(.Self, True)
|
AddRemoveBttDeleteHandler(.Self, True)
|
||||||
AddHandler .OnUserUpdated, AddressOf User_OnUserUpdated
|
AddHandler .UserUpdated, AddressOf User_OnUserUpdated
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
Collections.RemoveAt(Count - 1)
|
Collections.RemoveAt(Count - 1)
|
||||||
@@ -398,7 +406,7 @@ Namespace API
|
|||||||
If Count > 1 AndAlso ScriptUse Then Collections.ForEach(Sub(c) c.ScriptUse = True)
|
If Count > 1 AndAlso ScriptUse Then Collections.ForEach(Sub(c) c.ScriptUse = True)
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub AddRange(ByVal _Items As IEnumerable(Of IUserData))
|
Friend Sub AddRange(ByVal _Items As IEnumerable(Of IUserData))
|
||||||
If Not _Items Is Nothing AndAlso _Items.Count > 0 Then
|
If _Items.ListExists Then
|
||||||
For i% = 0 To _Items.Count - 1 : Add(_Items(i)) : Next
|
For i% = 0 To _Items.Count - 1 : Add(_Items(i)) : Next
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
@@ -433,7 +441,7 @@ Namespace API
|
|||||||
Collections.ListClearDispose
|
Collections.ListClearDispose
|
||||||
End Sub
|
End Sub
|
||||||
Friend Function Contains(ByVal _Item As IUserData) As Boolean Implements ICollection(Of IUserData).Contains
|
Friend Function Contains(ByVal _Item As IUserData) As Boolean Implements ICollection(Of IUserData).Contains
|
||||||
Return Collections.Contains(_Item)
|
Return Count > 0 AndAlso Collections.Contains(_Item)
|
||||||
End Function
|
End Function
|
||||||
Private Sub CopyTo(ByVal _Array() As IUserData, ByVal _ArrayIndex As Integer) Implements ICollection(Of IUserData).CopyTo
|
Private Sub CopyTo(ByVal _Array() As IUserData, ByVal _ArrayIndex As Integer) Implements ICollection(Of IUserData).CopyTo
|
||||||
Throw New NotImplementedException("[CopyTo] method does not supported in collections context")
|
Throw New NotImplementedException("[CopyTo] method does not supported in collections context")
|
||||||
|
|||||||
42
SCrawler/Channels/ChannelViewForm.Designer.vb
generated
@@ -15,8 +15,6 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form
|
|||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Me.components = New System.ComponentModel.Container()
|
Me.components = New System.ComponentModel.Container()
|
||||||
Dim SEP_1 As System.Windows.Forms.ToolStripSeparator
|
Dim SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim SEP_2 As System.Windows.Forms.ToolStripSeparator
|
|
||||||
Dim SEP_3 As System.Windows.Forms.ToolStripSeparator
|
|
||||||
Dim CONTEXT_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
Dim CONTEXT_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim CONTEXT_SEP_2 As System.Windows.Forms.ToolStripSeparator
|
Dim CONTEXT_SEP_2 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ChannelViewForm))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ChannelViewForm))
|
||||||
@@ -34,11 +32,9 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_C_OPEN_POST = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_C_OPEN_POST = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_C_OPEN_PICTURE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_C_OPEN_PICTURE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_C_OPEN_FOLDER = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_C_OPEN_FOLDER = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_C_ADD_TO_BLACKLIST = New System.Windows.Forms.ToolStripMenuItem()
|
|
||||||
Me.BTT_C_REMOVE_FROM_SELECTED = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_C_REMOVE_FROM_SELECTED = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_C_ADD_TO_BLACKLIST = 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_3 = New System.Windows.Forms.ToolStripSeparator()
|
|
||||||
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
CONTEXT_SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
CONTEXT_SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
Me.ToolbarTOP.SuspendLayout()
|
Me.ToolbarTOP.SuspendLayout()
|
||||||
@@ -51,25 +47,20 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form
|
|||||||
SEP_1.Name = "SEP_1"
|
SEP_1.Name = "SEP_1"
|
||||||
SEP_1.Size = New System.Drawing.Size(6, 25)
|
SEP_1.Size = New System.Drawing.Size(6, 25)
|
||||||
'
|
'
|
||||||
'SEP_2
|
|
||||||
'
|
|
||||||
SEP_2.Name = "SEP_2"
|
|
||||||
SEP_2.Size = New System.Drawing.Size(6, 25)
|
|
||||||
'
|
|
||||||
'SEP_3
|
|
||||||
'
|
|
||||||
SEP_3.Name = "SEP_3"
|
|
||||||
SEP_3.Size = New System.Drawing.Size(6, 25)
|
|
||||||
'
|
|
||||||
'CONTEXT_SEP_1
|
'CONTEXT_SEP_1
|
||||||
'
|
'
|
||||||
CONTEXT_SEP_1.Name = "CONTEXT_SEP_1"
|
CONTEXT_SEP_1.Name = "CONTEXT_SEP_1"
|
||||||
CONTEXT_SEP_1.Size = New System.Drawing.Size(302, 6)
|
CONTEXT_SEP_1.Size = New System.Drawing.Size(302, 6)
|
||||||
'
|
'
|
||||||
|
'CONTEXT_SEP_2
|
||||||
|
'
|
||||||
|
CONTEXT_SEP_2.Name = "CONTEXT_SEP_2"
|
||||||
|
CONTEXT_SEP_2.Size = New System.Drawing.Size(302, 6)
|
||||||
|
'
|
||||||
'ToolbarTOP
|
'ToolbarTOP
|
||||||
'
|
'
|
||||||
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
||||||
Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_DOWNLOAD, Me.BTT_STOP, SEP_1, Me.BTT_ADD_USERS, SEP_2, SEP_3})
|
Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_DOWNLOAD, Me.BTT_STOP, SEP_1, Me.BTT_ADD_USERS})
|
||||||
Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0)
|
Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.ToolbarTOP.Name = "ToolbarTOP"
|
Me.ToolbarTOP.Name = "ToolbarTOP"
|
||||||
Me.ToolbarTOP.Size = New System.Drawing.Size(744, 25)
|
Me.ToolbarTOP.Size = New System.Drawing.Size(744, 25)
|
||||||
@@ -138,7 +129,7 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form
|
|||||||
'
|
'
|
||||||
Me.LCONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_C_OPEN_USER, Me.BTT_C_OPEN_POST, Me.BTT_C_OPEN_PICTURE, Me.BTT_C_OPEN_FOLDER, CONTEXT_SEP_1, Me.BTT_C_REMOVE_FROM_SELECTED, CONTEXT_SEP_2, Me.BTT_C_ADD_TO_BLACKLIST})
|
Me.LCONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_C_OPEN_USER, Me.BTT_C_OPEN_POST, Me.BTT_C_OPEN_PICTURE, Me.BTT_C_OPEN_FOLDER, CONTEXT_SEP_1, Me.BTT_C_REMOVE_FROM_SELECTED, CONTEXT_SEP_2, Me.BTT_C_ADD_TO_BLACKLIST})
|
||||||
Me.LCONTEXT.Name = "LCONTEXT"
|
Me.LCONTEXT.Name = "LCONTEXT"
|
||||||
Me.LCONTEXT.Size = New System.Drawing.Size(306, 170)
|
Me.LCONTEXT.Size = New System.Drawing.Size(306, 148)
|
||||||
'
|
'
|
||||||
'BTT_C_OPEN_USER
|
'BTT_C_OPEN_USER
|
||||||
'
|
'
|
||||||
@@ -164,17 +155,6 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_C_OPEN_FOLDER.Size = New System.Drawing.Size(305, 22)
|
Me.BTT_C_OPEN_FOLDER.Size = New System.Drawing.Size(305, 22)
|
||||||
Me.BTT_C_OPEN_FOLDER.Text = "Open folder"
|
Me.BTT_C_OPEN_FOLDER.Text = "Open folder"
|
||||||
'
|
'
|
||||||
'BTT_C_ADD_TO_BLACKLIST
|
|
||||||
'
|
|
||||||
Me.BTT_C_ADD_TO_BLACKLIST.Name = "BTT_C_ADD_TO_BLACKLIST"
|
|
||||||
Me.BTT_C_ADD_TO_BLACKLIST.Size = New System.Drawing.Size(305, 22)
|
|
||||||
Me.BTT_C_ADD_TO_BLACKLIST.Text = "Add/Remove this user to/from the BlackList"
|
|
||||||
'
|
|
||||||
'CONTEXT_SEP_2
|
|
||||||
'
|
|
||||||
CONTEXT_SEP_2.Name = "CONTEXT_SEP_2"
|
|
||||||
CONTEXT_SEP_2.Size = New System.Drawing.Size(302, 6)
|
|
||||||
'
|
|
||||||
'BTT_C_REMOVE_FROM_SELECTED
|
'BTT_C_REMOVE_FROM_SELECTED
|
||||||
'
|
'
|
||||||
Me.BTT_C_REMOVE_FROM_SELECTED.AutoToolTip = True
|
Me.BTT_C_REMOVE_FROM_SELECTED.AutoToolTip = True
|
||||||
@@ -183,6 +163,12 @@ Partial Friend Class ChannelViewForm : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_C_REMOVE_FROM_SELECTED.Text = "Remove user from selected"
|
Me.BTT_C_REMOVE_FROM_SELECTED.Text = "Remove user from selected"
|
||||||
Me.BTT_C_REMOVE_FROM_SELECTED.ToolTipText = "Remove this user from selected users if user was added to"
|
Me.BTT_C_REMOVE_FROM_SELECTED.ToolTipText = "Remove this user from selected users if user was added to"
|
||||||
'
|
'
|
||||||
|
'BTT_C_ADD_TO_BLACKLIST
|
||||||
|
'
|
||||||
|
Me.BTT_C_ADD_TO_BLACKLIST.Name = "BTT_C_ADD_TO_BLACKLIST"
|
||||||
|
Me.BTT_C_ADD_TO_BLACKLIST.Size = New System.Drawing.Size(305, 22)
|
||||||
|
Me.BTT_C_ADD_TO_BLACKLIST.Text = "Add/Remove this user to/from the BlackList"
|
||||||
|
'
|
||||||
'ChannelViewForm
|
'ChannelViewForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
|||||||
@@ -120,15 +120,12 @@
|
|||||||
<metadata name="SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="SEP_2.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
|
||||||
<value>False</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="SEP_3.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
|
||||||
<value>False</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="CONTEXT_SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="CONTEXT_SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="CONTEXT_SEP_2.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">
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>241, 17</value>
|
<value>241, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
@@ -141,9 +138,6 @@
|
|||||||
<metadata name="LCONTEXT.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="LCONTEXT.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>342, 17</value>
|
<value>342, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="CONTEXT_SEP_2.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" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ Imports System.Threading
|
|||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.API.Reddit
|
Imports SCrawler.API.Reddit
|
||||||
Imports SCrawler.Plugin.Hosts
|
Imports SCrawler.Plugin.Hosts
|
||||||
Imports CmbDefaultButtons = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons
|
Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons
|
||||||
Imports RButton = PersonalUtilities.Tools.RangeSwitcherButton.Types
|
Imports RButton = PersonalUtilities.Forms.Toolbars.RangeSwitcherToolbar.ControlItem
|
||||||
Friend Class ChannelViewForm : Implements IChannelLimits
|
Friend Class ChannelViewForm : Implements IChannelLimits
|
||||||
Friend Event OnUsersAdded(ByVal StartIndex As Integer)
|
Friend Event OnUsersAdded(ByVal StartIndex As Integer)
|
||||||
Friend Event OnDownloadDone(ByVal Message As String)
|
Friend Event OnDownloadDone As NotificationEventHandler
|
||||||
#Region "Appended user structure"
|
#Region "Appended user structure"
|
||||||
Private Structure PendingUser
|
Private Structure PendingUser
|
||||||
Friend ID As String
|
Friend ID As String
|
||||||
@@ -49,7 +49,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
End Structure
|
End Structure
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Declarations"
|
#Region "Declarations"
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private ReadOnly MyDefs As DefaultFormOptions
|
||||||
#Region "Controls"
|
#Region "Controls"
|
||||||
Private WithEvents CMB_CHANNELS As ComboBoxExtended
|
Private WithEvents CMB_CHANNELS As ComboBoxExtended
|
||||||
Private WithEvents CH_HIDE_EXISTS_USERS As CheckBox
|
Private WithEvents CH_HIDE_EXISTS_USERS As CheckBox
|
||||||
@@ -125,7 +125,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
Private ReadOnly HOST As SettingsHost
|
Private ReadOnly HOST As SettingsHost
|
||||||
Private ReadOnly PendingUsers As List(Of PendingUser)
|
Private ReadOnly PendingUsers As List(Of PendingUser)
|
||||||
Private ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
|
Private ReadOnly LNC As New ListAddParams(LAP.NotContainsOnly)
|
||||||
Private WithEvents MyRange As RangeSwitcher(Of UserPost)
|
Private WithEvents MyRange As RangeSwitcherToolbar(Of UserPost)
|
||||||
Private ReadOnly SelectorExpression As Predicate(Of UserPost) = Function(ByVal Post As UserPost) As Boolean
|
Private ReadOnly SelectorExpression As Predicate(Of UserPost) = Function(ByVal Post As UserPost) As Boolean
|
||||||
If Post.UserID.ToLower = "[deleted]" Or Settings.BlackList.Contains(Post.UserID) Then
|
If Post.UserID.ToLower = "[deleted]" Or Settings.BlackList.Contains(Post.UserID) Then
|
||||||
Return False
|
Return False
|
||||||
@@ -141,7 +141,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
#Region "Initializer and form methods"
|
#Region "Initializer and form methods"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions
|
||||||
CProgress = New MyProgress(ToolbarBOTTOM, PR_CN, LBL_STATUS, "Downloading data") With {.PerformMod = 10, .DropCurrentProgressOnTotalChange = False}
|
CProgress = New MyProgress(ToolbarBOTTOM, PR_CN, LBL_STATUS, "Downloading data") With {.PerformMod = 10, .DropCurrentProgressOnTotalChange = False}
|
||||||
CProvider = New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}
|
CProvider = New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}
|
||||||
LimitProvider = New ADateTime("dd.MM.yyyy HH:mm")
|
LimitProvider = New ADateTime("dd.MM.yyyy HH:mm")
|
||||||
@@ -157,10 +157,10 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
.ListMaxDropDownItems = 15,
|
.ListMaxDropDownItems = 15,
|
||||||
.CaptionPadding = New Padding(0, 3, 0, 0)
|
.CaptionPadding = New Padding(0, 3, 0, 0)
|
||||||
}
|
}
|
||||||
CMB_CHANNELS.Buttons.AddRange({CmbDefaultButtons.Refresh, CmbDefaultButtons.Add, CmbDefaultButtons.Delete,
|
CMB_CHANNELS.Buttons.AddRange({ADB.Refresh, ADB.Add, ADB.Delete,
|
||||||
New ActionButton(CmbDefaultButtons.Up) With {.ToolTipText = "Previous item (F1)"},
|
New ActionButton(ADB.Up) With {.ToolTipText = "Previous item (F1)"},
|
||||||
New ActionButton(CmbDefaultButtons.Down) With {.ToolTipText = "Next item (F4)"},
|
New ActionButton(ADB.Down) With {.ToolTipText = "Next item (F4)"},
|
||||||
CmbDefaultButtons.Edit, CmbDefaultButtons.Info})
|
ADB.Edit, ADB.Info})
|
||||||
TXT_LIMIT = New TextBoxExtended With {
|
TXT_LIMIT = New TextBoxExtended With {
|
||||||
.CaptionText = "Limit",
|
.CaptionText = "Limit",
|
||||||
.Margin = New Padding(2),
|
.Margin = New Padding(2),
|
||||||
@@ -186,6 +186,16 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
TT_MAIN.SetToolTip(CH_HIDE_EXISTS_USERS, "Hide users which already exists in collection")
|
TT_MAIN.SetToolTip(CH_HIDE_EXISTS_USERS, "Hide users which already exists in collection")
|
||||||
TT_MAIN.SetToolTip(OPT_LIMITS_COUNT, "Total posts count limit")
|
TT_MAIN.SetToolTip(OPT_LIMITS_COUNT, "Total posts count limit")
|
||||||
TT_MAIN.SetToolTip(OPT_LIMITS_POST, "Looking limit till post(-s) (comma separated)")
|
TT_MAIN.SetToolTip(OPT_LIMITS_POST, "Looking limit till post(-s) (comma separated)")
|
||||||
|
MyRange = New RangeSwitcherToolbar(Of UserPost)(ToolbarTOP)
|
||||||
|
With MyRange
|
||||||
|
.Switcher = New RangeSwitcher(Of UserPost) With {.Selector = SelectorExpression}
|
||||||
|
.Buttons = {RButton.First, RButton.Previous, RButton.Label, RButton.Next, RButton.Last, RButton.Separator}
|
||||||
|
.AutoToolTip = True
|
||||||
|
.ButtonKey(RButton.Previous) = Keys.F2
|
||||||
|
.ButtonKey(RButton.Next) = Keys.F3
|
||||||
|
.LabelNumbersProvider = CProvider
|
||||||
|
.AddThisToolbar()
|
||||||
|
End With
|
||||||
ToolbarTOP.Items.AddRange({CMB_CHANNELS.GetControlHost,
|
ToolbarTOP.Items.AddRange({CMB_CHANNELS.GetControlHost,
|
||||||
New ToolStripSeparator,
|
New ToolStripSeparator,
|
||||||
LBL_LIMITS,
|
LBL_LIMITS,
|
||||||
@@ -198,17 +208,6 @@ 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})
|
||||||
MyRange = New RangeSwitcher(Of UserPost) With {.Selector = SelectorExpression}
|
|
||||||
With MyRange
|
|
||||||
.Limit = ImagesInRow * ImagesRows
|
|
||||||
.InsertButtons(ToolbarTOP,, 5)
|
|
||||||
.SetButtonKey(RButton.Previous, Keys.F2)
|
|
||||||
.SetButtonKey(RButton.Next, Keys.F3)
|
|
||||||
.BindForm(Me)
|
|
||||||
.LabelNumbersProvider = CProvider
|
|
||||||
.LabelShowAbsolutIndexes = False
|
|
||||||
.UpdateControls()
|
|
||||||
End With
|
|
||||||
AddHandler Settings.ChannelsImagesColumns.OnValueChanged, AddressOf ImagesCountChanged
|
AddHandler Settings.ChannelsImagesColumns.OnValueChanged, AddressOf ImagesCountChanged
|
||||||
AddHandler Settings.ChannelsImagesRows.OnValueChanged, AddressOf ImagesCountChanged
|
AddHandler Settings.ChannelsImagesRows.OnValueChanged, AddressOf ImagesCountChanged
|
||||||
End Sub
|
End Sub
|
||||||
@@ -217,14 +216,15 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
RefillChannels(Settings.LatestSelectedChannel.Value)
|
RefillChannels(Settings.LatestSelectedChannel.Value)
|
||||||
ChangeComboIndex(0)
|
ChangeComboIndex(0)
|
||||||
MyRange.LabelText = String.Empty
|
MyRange.LabelText = String.Empty
|
||||||
CMB_CHANNELS_ActionOnCheckedChange(CMB_CHANNELS.Checked)
|
CMB_CHANNELS_ActionOnCheckedChange(Nothing, Nothing, CMB_CHANNELS.Checked)
|
||||||
With LIST_POSTS
|
With LIST_POSTS
|
||||||
Dim s As Size = GetImageSize()
|
Dim s As Size = GetImageSize()
|
||||||
.LargeImageList = New ImageList With {.ColorDepth = ColorDepth.Depth32Bit, .ImageSize = s}
|
.LargeImageList = New ImageList With {.ColorDepth = ColorDepth.Depth32Bit, .ImageSize = s}
|
||||||
.SmallImageList = New ImageList With {.ColorDepth = ColorDepth.Depth32Bit, .ImageSize = s}
|
.SmallImageList = New ImageList With {.ColorDepth = ColorDepth.Depth32Bit, .ImageSize = s}
|
||||||
End With
|
End With
|
||||||
CMB_CHANNELS.Enabled(False) = Not CMB_CHANNELS.Checked
|
CMB_CHANNELS.Enabled(False) = Not CMB_CHANNELS.Checked
|
||||||
MyDefs.EndLoaderOperations()
|
MyDefs.DelegateClosingChecker = False
|
||||||
|
MyDefs.EndLoaderOperations(False)
|
||||||
SetLimitsByChannel(, False)
|
SetLimitsByChannel(, False)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ChannelViewForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
Private Sub ChannelViewForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
||||||
@@ -296,8 +296,8 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
Const mhw% = 256
|
Const mhw% = 256
|
||||||
Dim s As Size = LIST_POSTS.Size
|
Dim s As Size = LIST_POSTS.Size
|
||||||
With LIST_POSTS
|
With LIST_POSTS
|
||||||
s.Width -= (.Margin.Left + .Margin.Right)
|
s.Width -= .Margin.Horizontal
|
||||||
s.Height -= (.Margin.Top + .Margin.Bottom)
|
s.Height -= .Margin.Vertical
|
||||||
s.Width = s.Width / ImagesInRow - .Padding.Left * ImagesInRow - .Padding.Right * ImagesInRow
|
s.Width = s.Width / ImagesInRow - .Padding.Left * ImagesInRow - .Padding.Right * ImagesInRow
|
||||||
s.Height = s.Height / ImagesRows - .Padding.Top * ImagesRows - .Padding.Bottom * ImagesRows
|
s.Height = s.Height / ImagesRows - .Padding.Top * ImagesRows - .Padding.Bottom * ImagesRows
|
||||||
If s.Width = 0 Then s.Width = 50
|
If s.Width = 0 Then s.Width = 50
|
||||||
@@ -326,7 +326,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
Private Async Sub BTT_DOWNLOAD_Click(sender As Object, e As EventArgs) Handles BTT_DOWNLOAD.Click
|
Private Async Sub BTT_DOWNLOAD_Click(sender As Object, e As EventArgs) Handles BTT_DOWNLOAD.Click
|
||||||
Try
|
Try
|
||||||
AppendPendingUsers()
|
AppendPendingUsers()
|
||||||
If Not TokenSource Is Nothing OrElse Not HOST.Source.Available(Plugin.ISiteSettings.Download.Channel) Then Exit Sub
|
If Not TokenSource Is Nothing OrElse Not HOST.Source.Available(Plugin.ISiteSettings.Download.Channel, False) Then Exit Sub
|
||||||
Dim InvokeToken As Action = Sub()
|
Dim InvokeToken As Action = Sub()
|
||||||
If TokenSource Is Nothing Then
|
If TokenSource Is Nothing Then
|
||||||
CProgress.TotalCount = 0
|
CProgress.TotalCount = 0
|
||||||
@@ -343,8 +343,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
CH_HIDE_EXISTS_USERS.Enabled = False
|
CH_HIDE_EXISTS_USERS.Enabled = False
|
||||||
CMB_CHANNELS.Enabled(True) = False
|
CMB_CHANNELS.Enabled(True) = False
|
||||||
BTT_SHOW_STATS.Enabled = False
|
BTT_SHOW_STATS.Enabled = False
|
||||||
MyRange.EnableButton(RButton.Previous, False)
|
MyRange.Enabled = False
|
||||||
MyRange.EnableButton(RButton.Next, False)
|
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Dim c As Channel
|
Dim c As Channel
|
||||||
@@ -373,7 +372,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
End If
|
End If
|
||||||
If Not c Is Nothing Then
|
If Not c Is Nothing Then
|
||||||
SetLimitsByChannel(c)
|
SetLimitsByChannel(c)
|
||||||
MyRange.ChangeSource(c)
|
MyRange.Source = c
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
MsgBoxE("No one channels detected", MsgBoxStyle.Exclamation)
|
MsgBoxE("No one channels detected", MsgBoxStyle.Exclamation)
|
||||||
@@ -401,11 +400,9 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
CH_HIDE_EXISTS_USERS.Enabled = True
|
CH_HIDE_EXISTS_USERS.Enabled = True
|
||||||
CMB_CHANNELS.Enabled(True) = True
|
CMB_CHANNELS.Enabled(True) = True
|
||||||
BTT_SHOW_STATS.Enabled = True
|
BTT_SHOW_STATS.Enabled = True
|
||||||
CMB_CHANNELS_ActionOnCheckedChange(CMB_CHANNELS.Checked)
|
CMB_CHANNELS_ActionOnCheckedChange(Nothing, Nothing, CMB_CHANNELS.Checked)
|
||||||
With MyRange
|
MyRange.Enabled = True
|
||||||
.EnableButton(RButton.Previous, .Count > 0 AndAlso .CurrentIndex > 0)
|
MyRange.UpdateControls()
|
||||||
.EnableButton(RButton.Next, .Count > 0 AndAlso .CurrentIndex < .Max)
|
|
||||||
End With
|
|
||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
@@ -552,7 +549,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
If d.HasValue Then
|
If d.HasValue Then
|
||||||
LBL_LIMIT_TEXT.Text = $"to date {AConvert(Of String)(d, ADateTime.Formats.BaseDateTime, String.Empty)}"
|
LBL_LIMIT_TEXT.Text = $"to date {AConvert(Of String)(d, ADateTime.Formats.BaseDateTime, String.Empty)}"
|
||||||
Else
|
Else
|
||||||
LBL_LIMIT_TEXT.Text = $"to post [{c.First(Function(p) Not p.ID.IsEmptyString).ID}]"
|
LBL_LIMIT_TEXT.Text = $"to post [{c.FirstOrDefault(Function(p) Not p.ID.IsEmptyString).ID}]"
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
OPT_LIMITS_COUNT.Checked = True
|
OPT_LIMITS_COUNT.Checked = True
|
||||||
@@ -572,26 +569,26 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
Private Sub CMB_CHANNELS_ActionSelectedItemChanged(ByVal _Item As ListViewItem) Handles CMB_CHANNELS.ActionSelectedItemChanged
|
Private Sub CMB_CHANNELS_ActionSelectedItemChanged(ByVal _Item As ListViewItem) Handles CMB_CHANNELS.ActionSelectedItemChanged
|
||||||
SetLimitsByChannel()
|
SetLimitsByChannel()
|
||||||
Dim c As Channel = GetCurrentChannel()
|
Dim c As Channel = GetCurrentChannel()
|
||||||
If Not c Is Nothing Then MyRange.ChangeSource(c, EDP.SendInLog)
|
If Not c Is Nothing Then MyRange.Source = c
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CMB_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles CMB_CHANNELS.ActionOnButtonClick
|
Private Sub CMB_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles CMB_CHANNELS.ActionOnButtonClick
|
||||||
Dim c As Channel
|
Dim c As Channel
|
||||||
Select Case Sender.DefaultButton
|
Select Case Sender.DefaultButton
|
||||||
Case CmbDefaultButtons.Refresh : RefillChannels()
|
Case ADB.Refresh : RefillChannels()
|
||||||
Case CmbDefaultButtons.Add : AddNewChannel()
|
Case ADB.Add : AddNewChannel()
|
||||||
Case CmbDefaultButtons.Delete
|
Case ADB.Delete
|
||||||
Try
|
Try
|
||||||
c = GetCurrentChannel()
|
c = GetCurrentChannel()
|
||||||
If Not c Is Nothing AndAlso MsgBoxE($"Do you really want to delete channel [{c}]?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = 0 Then
|
If Not c Is Nothing AndAlso MsgBoxE($"Are you sure you want to delete the channel [{c}]?", vbExclamation + vbYesNo) = vbYes Then
|
||||||
Settings.Channels.Remove(c)
|
Settings.Channels.Remove(c)
|
||||||
RefillChannels()
|
RefillChannels()
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch del_ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on trying to delete channel")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, del_ex, "An error occurred while trying to delete a channel")
|
||||||
End Try
|
End Try
|
||||||
Case CmbDefaultButtons.Up : ChangeComboIndex(-1)
|
Case ADB.Up : ChangeComboIndex(-1)
|
||||||
Case CmbDefaultButtons.Down : ChangeComboIndex(1)
|
Case ADB.Down : ChangeComboIndex(1)
|
||||||
Case CmbDefaultButtons.Edit
|
Case ADB.Edit
|
||||||
Try
|
Try
|
||||||
c = GetCurrentChannel()
|
c = GetCurrentChannel()
|
||||||
If Not c Is Nothing Then
|
If Not c Is Nothing Then
|
||||||
@@ -600,19 +597,19 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
If f.DialogResult = DialogResult.OK Then c.Save()
|
If f.DialogResult = DialogResult.OK Then c.Save()
|
||||||
End Using
|
End Using
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch edit_ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on trying to edit channel")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, edit_ex, "An error occurred while trying to edit a channel")
|
||||||
End Try
|
End Try
|
||||||
Case CmbDefaultButtons.Info
|
Case ADB.Info
|
||||||
Try
|
Try
|
||||||
c = GetCurrentChannel()
|
c = GetCurrentChannel()
|
||||||
If Not c Is Nothing Then MsgBoxE({c.GetChannelStats(True), "Channel statistics"})
|
If Not c Is Nothing Then MsgBoxE({c.GetChannelStats(True), "Channel statistics"})
|
||||||
Catch info_ex As Exception
|
Catch info_ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, info_ex, "Error on trying to show channel info")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, info_ex, "An error occurred while trying to display channel information")
|
||||||
End Try
|
End Try
|
||||||
End Select
|
End Select
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CMB_CHANNELS_ActionOnCheckedChange(ByVal Mode As Boolean) Handles CMB_CHANNELS.ActionOnCheckedChange
|
Private Sub CMB_CHANNELS_ActionOnCheckedChange(ByVal Sender As Object, ByVal e As EventArgs, ByVal Checked As Boolean) Handles CMB_CHANNELS.ActionOnCheckedChange
|
||||||
Dim OneChannel As Boolean = Not CMB_CHANNELS.Checked
|
Dim OneChannel As Boolean = Not CMB_CHANNELS.Checked
|
||||||
CMB_CHANNELS.Enabled(False) = OneChannel
|
CMB_CHANNELS.Enabled(False) = OneChannel
|
||||||
If OneChannel Then
|
If OneChannel Then
|
||||||
@@ -620,8 +617,8 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
LBL_LIMIT_TEXT.Text = String.Empty
|
LBL_LIMIT_TEXT.Text = String.Empty
|
||||||
ChangeComboIndex(0)
|
ChangeComboIndex(0)
|
||||||
Else
|
Else
|
||||||
CMB_CHANNELS.Button(ActionButton.BTT_UP_NAME).Enabled = False
|
CMB_CHANNELS.Button(ADB.Up).Enabled = False
|
||||||
CMB_CHANNELS.Button(ActionButton.BTT_DOWN_NAME).Enabled = False
|
CMB_CHANNELS.Button(ADB.Down).Enabled = False
|
||||||
SetLimitsByChannel()
|
SetLimitsByChannel()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
@@ -660,8 +657,8 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
_ComboUpEnabled = i > 0 And c > 0
|
_ComboUpEnabled = i > 0 And c > 0
|
||||||
_ComboDownEnabled = i < c And c > 0
|
_ComboDownEnabled = i < c And c > 0
|
||||||
End If
|
End If
|
||||||
CMB_CHANNELS.Button(ActionButton.BTT_UP_NAME).Enabled = _ComboUpEnabled
|
CMB_CHANNELS.Button(ADB.Up).Enabled = _ComboUpEnabled
|
||||||
CMB_CHANNELS.Button(ActionButton.BTT_DOWN_NAME).Enabled = _ComboDownEnabled
|
CMB_CHANNELS.Button(ADB.Down).Enabled = _ComboDownEnabled
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "ComboBox index changing")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "ComboBox index changing")
|
||||||
End Try
|
End Try
|
||||||
@@ -686,7 +683,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
Try
|
Try
|
||||||
If Not p.UserID.IsEmptyString Then Process.Start($"https://www.reddit.com/user/{p.UserID}")
|
If Not p.UserID.IsEmptyString Then Process.Start($"https://www.reddit.com/user/{p.UserID}")
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, $"Error on opening user by [https://www.reddit.com/user/{p.UserID}]")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, $"Error opening user by [https://www.reddit.com/user/{p.UserID}]")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_C_OPEN_POST_Click(sender As Object, e As EventArgs) Handles BTT_C_OPEN_POST.Click
|
Private Sub BTT_C_OPEN_POST_Click(sender As Object, e As EventArgs) Handles BTT_C_OPEN_POST.Click
|
||||||
@@ -696,7 +693,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
URL = $"https://www.reddit.com/r/{CMB_CHANNELS.Value}/comments/{p.ID.Split("_").Last}"
|
URL = $"https://www.reddit.com/r/{CMB_CHANNELS.Value}/comments/{p.ID.Split("_").Last}"
|
||||||
If Not p.ID.IsEmptyString Then Process.Start(URL)
|
If Not p.ID.IsEmptyString Then Process.Start(URL)
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, $"Error on opening post by [{URL}]")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, $"Error opening post by [{URL}]")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_C_OPEN_PICTURE_Click(sender As Object, e As EventArgs) Handles BTT_C_OPEN_PICTURE.Click
|
Private Sub BTT_C_OPEN_PICTURE_Click(sender As Object, e As EventArgs) Handles BTT_C_OPEN_PICTURE.Click
|
||||||
@@ -737,14 +734,14 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
MsgBoxE("User does not selected", MsgBoxStyle.Exclamation)
|
MsgBoxE("User does not selected", MsgBoxStyle.Exclamation)
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on removing user from selected")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error removing user from selected")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_C_ADD_TO_BLACKLIST_Click(sender As Object, e As EventArgs) Handles BTT_C_ADD_TO_BLACKLIST.Click
|
Private Sub BTT_C_ADD_TO_BLACKLIST_Click(sender As Object, e As EventArgs) Handles BTT_C_ADD_TO_BLACKLIST.Click
|
||||||
Try
|
Try
|
||||||
Dim u$ = GetPostBySelected().UserID
|
Dim u$ = GetPostBySelected().UserID
|
||||||
If Not u.IsEmptyString Then
|
If Not u.IsEmptyString Then
|
||||||
Dim result% = MsgBoxE(New MMessage($"Do you really want to add user [{u}] to the BlackList?",
|
Dim result% = MsgBoxE(New MMessage($"Are you sure you want to add user [{u}] to the BlackList?",
|
||||||
"Adding user to the BlackList",
|
"Adding user to the BlackList",
|
||||||
{"Add", "Add and update ranges",
|
{"Add", "Add and update ranges",
|
||||||
"Add with the reason", "Add with the reason and update ranges",
|
"Add with the reason", "Add with the reason and update ranges",
|
||||||
@@ -774,7 +771,7 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
#End Region
|
#End Region
|
||||||
Private Sub OpenPostPicture()
|
Private Sub OpenPostPicture()
|
||||||
Dim f As SFile = GetPostBySelected().CachedFile
|
Dim f As SFile = GetPostBySelected().CachedFile
|
||||||
If f.Exists Then f.Open() Else MsgBoxE($"Picture file [{f}] does not found", MsgBoxStyle.Critical)
|
If f.Exists Then f.Open() Else MsgBoxE($"Picture file [{f}] not found", MsgBoxStyle.Critical)
|
||||||
End Sub
|
End Sub
|
||||||
Private Function GetPostBySelected(Optional ByVal SpecificTag As String = Nothing) As UserPost
|
Private Function GetPostBySelected(Optional ByVal SpecificTag As String = Nothing) As UserPost
|
||||||
Dim p As UserPost = Nothing
|
Dim p As UserPost = Nothing
|
||||||
@@ -798,10 +795,10 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
#Region "MyRange"
|
#Region "MyRange"
|
||||||
Private Sub ImagesCountChanged(ByVal Sender As Object, ByVal _Name As String, ByVal _Value As Object)
|
Private Sub ImagesCountChanged(ByVal Sender As Object, ByVal _Name As String, ByVal _Value As Object)
|
||||||
AppendPendingUsers()
|
AppendPendingUsers()
|
||||||
MyRange.Update(ImagesInRow * ImagesRows)
|
MyRange.Limit = ImagesInRow * ImagesRows
|
||||||
MyRange.GoTo(0, EDP.SendInLog)
|
MyRange.GoTo(0)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub MyRange_IndexChanged(ByVal Index As Integer) Handles MyRange.IndexChanged
|
Private Sub MyRange_IndexChanged(ByVal Sender As Object, ByVal e As EventArgs) Handles MyRange.IndexChanged
|
||||||
Try
|
Try
|
||||||
If MyDefs.Initializing Then Exit Sub
|
If MyDefs.Initializing Then Exit Sub
|
||||||
AppendPendingUsers()
|
AppendPendingUsers()
|
||||||
@@ -831,8 +828,8 @@ Friend Class ChannelViewForm : Implements IChannelLimits
|
|||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex)
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub MyRange_RangesChanged(ByVal Sender As RangeSwitcher(Of UserPost)) Handles MyRange.RangesChanged
|
Private Sub MyRange_RangesChanged(ByVal Sender As IRangeSwitcherProvider, ByVal e As EventArgs) Handles MyRange.RangesChanged
|
||||||
If Sender.Count > 0 Then MyRange_IndexChanged(0)
|
If Sender.Count > 0 Then Sender.CurrentIndex = 0
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
11
SCrawler/Channels/ChannelsStatsForm.Designer.vb
generated
@@ -55,15 +55,12 @@ Partial Friend Class ChannelsStatsForm : Inherits System.Windows.Forms.Form
|
|||||||
'CMB_CHANNELS
|
'CMB_CHANNELS
|
||||||
'
|
'
|
||||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton1.Index = 0
|
ActionButton1.Name = "Clear"
|
||||||
ActionButton1.Name = "BTT_COMBOBOX_ARROW"
|
|
||||||
ActionButton1.Visible = False
|
|
||||||
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton2.Index = 1
|
ActionButton2.Name = "Delete"
|
||||||
ActionButton2.Name = "BTT_CLEAR"
|
|
||||||
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton3.Index = 2
|
ActionButton3.Name = "ArrowDown"
|
||||||
ActionButton3.Name = "BTT_DELETE"
|
ActionButton3.Visible = False
|
||||||
Me.CMB_CHANNELS.Buttons.Add(ActionButton1)
|
Me.CMB_CHANNELS.Buttons.Add(ActionButton1)
|
||||||
Me.CMB_CHANNELS.Buttons.Add(ActionButton2)
|
Me.CMB_CHANNELS.Buttons.Add(ActionButton2)
|
||||||
Me.CMB_CHANNELS.Buttons.Add(ActionButton3)
|
Me.CMB_CHANNELS.Buttons.Add(ActionButton3)
|
||||||
|
|||||||
@@ -122,6 +122,43 @@
|
|||||||
</metadata>
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton1.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="ActionButton2.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
||||||
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
||||||
@@ -209,43 +246,6 @@
|
|||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
||||||
AAAASUVORK5CYII=
|
AAAASUVORK5CYII=
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="ActionButton2.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="ActionButton3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
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
|
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
|||||||
@@ -6,38 +6,22 @@
|
|||||||
'
|
'
|
||||||
' 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.ComponentModel
|
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Friend Class ChannelsStatsForm
|
||||||
Friend Class ChannelsStatsForm : Implements IOkCancelDeleteToolbar
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
|
||||||
Friend Property DeletedChannels As Integer = 0
|
Friend Property DeletedChannels As Integer = 0
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ChannelsStatsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub ChannelsStatsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design)
|
.MyViewInitialize()
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
If Settings.Channels.Count > 0 Then RefillList() Else MsgBoxE("Channels not found", vbExclamation)
|
||||||
.MyOkCancel.EnableDelete = False
|
|
||||||
If Settings.Channels.Count > 0 Then
|
|
||||||
RefillList()
|
|
||||||
Else
|
|
||||||
MsgBoxE("Channels not found", vbExclamation)
|
|
||||||
End If
|
|
||||||
.AppendDetectors()
|
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
Catch ex As Exception
|
|
||||||
MyDefs.InvokeLoaderError(ex)
|
|
||||||
End Try
|
|
||||||
End Sub
|
|
||||||
Private Sub ChannelsStatsForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
|
||||||
MyDefs.Dispose()
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub RefillList()
|
Private Sub RefillList()
|
||||||
CMB_CHANNELS.Items.Clear()
|
CMB_CHANNELS.Items.Clear()
|
||||||
@@ -47,13 +31,7 @@ Friend Class ChannelsStatsForm : Implements IOkCancelDeleteToolbar
|
|||||||
CMB_CHANNELS.EndUpdate()
|
CMB_CHANNELS.EndUpdate()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonDeleteClickOC(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonDeleteClickOC
|
||||||
MyDefs.CloseForm()
|
|
||||||
End Sub
|
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub ToolbarBttDelete() Implements IOkCancelDeleteToolbar.ToolbarBttDelete
|
|
||||||
Try
|
Try
|
||||||
Dim c As List(Of String) = CMB_CHANNELS.Items.CheckedItems.Select(Function(cc) CStr(cc.Value(1))).ListIfNothing
|
Dim c As List(Of String) = CMB_CHANNELS.Items.CheckedItems.Select(Function(cc) CStr(cc.Value(1))).ListIfNothing
|
||||||
If c.ListExists Then
|
If c.ListExists Then
|
||||||
@@ -78,7 +56,7 @@ Friend Class ChannelsStatsForm : Implements IOkCancelDeleteToolbar
|
|||||||
Private Sub CMB_CHANNELS_ActionOnChangeDetected(ByVal c As Boolean) Handles CMB_CHANNELS.ActionOnChangeDetected
|
Private Sub CMB_CHANNELS_ActionOnChangeDetected(ByVal c As Boolean) Handles CMB_CHANNELS.ActionOnChangeDetected
|
||||||
If Not MyDefs.Initializing Then MyDefs.MyOkCancel.EnableDelete = CMB_CHANNELS.ListCheckedIndexes.Count > 0
|
If Not MyDefs.Initializing Then MyDefs.MyOkCancel.EnableDelete = CMB_CHANNELS.ListCheckedIndexes.Count > 0
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CMB_CHANNELS_ActionOnButtonClearClick() Handles CMB_CHANNELS.ActionOnButtonClearClick
|
Private Sub CMB_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles CMB_CHANNELS.ActionOnButtonClick
|
||||||
CMB_CHANNELS.ListCheckedIndexes = Nothing
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Clear Then CMB_CHANNELS.ListCheckedIndexes = Nothing
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
BIN
SCrawler/Content/Pictures/Pause_Blue_16.png
Normal file
|
After Width: | Height: | Size: 345 B |
@@ -36,8 +36,8 @@ Namespace DownloadObjects
|
|||||||
Me.TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
Me.TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.TP_MAIN.Name = "TP_MAIN"
|
Me.TP_MAIN.Name = "TP_MAIN"
|
||||||
Me.TP_MAIN.RowCount = 1
|
Me.TP_MAIN.RowCount = 1
|
||||||
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 62.0!))
|
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 64.0!))
|
||||||
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 62.0!))
|
Me.TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 64.0!))
|
||||||
Me.TP_MAIN.Size = New System.Drawing.Size(434, 61)
|
Me.TP_MAIN.Size = New System.Drawing.Size(434, 61)
|
||||||
Me.TP_MAIN.TabIndex = 0
|
Me.TP_MAIN.TabIndex = 0
|
||||||
'
|
'
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ Namespace DownloadObjects
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub Downloader_OnReconfigured()
|
Private Sub Downloader_OnReconfigured()
|
||||||
Const RowHeight% = 30
|
Const RowHeight% = 30
|
||||||
|
Dim a As Action = Sub()
|
||||||
With TP_MAIN
|
With TP_MAIN
|
||||||
If .Controls.Count > 0 Then
|
If .Controls.Count > 0 Then
|
||||||
For Each c As Control In .Controls
|
For Each c As Control In .Controls
|
||||||
@@ -71,6 +72,8 @@ Namespace DownloadObjects
|
|||||||
End With
|
End With
|
||||||
TP_MAIN.Refresh()
|
TP_MAIN.Refresh()
|
||||||
End Sub
|
End Sub
|
||||||
|
If TP_MAIN.InvokeRequired Then TP_MAIN.Invoke(a) Else a.Invoke
|
||||||
|
End Sub
|
||||||
Private Sub Jobs_OnTotalCountChange()
|
Private Sub Jobs_OnTotalCountChange()
|
||||||
If JobsList.Count > 0 And Not DisableProgressChange Then
|
If JobsList.Count > 0 And Not DisableProgressChange Then
|
||||||
MainProgress.TotalCount = JobsList.Sum(Function(j) CLng(j.Job.Progress.TotalCount))
|
MainProgress.TotalCount = JobsList.Sum(Function(j) CLng(j.Job.Progress.TotalCount))
|
||||||
|
|||||||
471
SCrawler/Download/AutoDownloader.vb
Normal file
@@ -0,0 +1,471 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports System.Threading
|
||||||
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
|
Imports PersonalUtilities.Tools
|
||||||
|
Imports PersonalUtilities.Tools.Notifications
|
||||||
|
Imports SCrawler.DownloadObjects.Groups
|
||||||
|
Imports SCrawler.API
|
||||||
|
Imports SCrawler.API.Base
|
||||||
|
Namespace DownloadObjects
|
||||||
|
Friend Class AutoDownloader : Inherits GroupParameters : Implements IEContainerProvider
|
||||||
|
Friend Event UserFind(ByVal Key As String, ByVal Activate As Boolean)
|
||||||
|
Friend Shared ReadOnly Property CachePath As SFile
|
||||||
|
Get
|
||||||
|
Return "_Cache\"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Enum Modes As Integer
|
||||||
|
None = 0
|
||||||
|
[Default] = 1
|
||||||
|
All = 2
|
||||||
|
Specified = 3
|
||||||
|
Groups = 4
|
||||||
|
End Enum
|
||||||
|
Friend Const DefaultTimer As Integer = 60
|
||||||
|
#Region "Notifications"
|
||||||
|
Private Const KeyOpenFolder As String = "_____OPEN_FOLDER_SCRAWLER_AUTOMATION"
|
||||||
|
Private Const KeyOpenSite As String = "_____OPEN_SITE_SCRAWLER_AUTOMATION"
|
||||||
|
Private Const KeyBttDismiss As String = "_____DISMISS_SCRAWLER_AUTOMATION"
|
||||||
|
Private Const KeyBttPhoto As String = "_____PHOTO_SCRAWLER_AUTOMATION"
|
||||||
|
Private ReadOnly UserKeys As List(Of NotifiedUser)
|
||||||
|
Private Class NotifiedUser : Implements IDisposable
|
||||||
|
Private ReadOnly Property User As IUserData
|
||||||
|
Friend ReadOnly Property IUserDataKey As String
|
||||||
|
Private ReadOnly Property Key As String
|
||||||
|
Private ReadOnly Property KeyFolder As String
|
||||||
|
Private ReadOnly Property KeySite As String
|
||||||
|
Private ReadOnly Property KeyDismiss As String
|
||||||
|
Private ReadOnly Property Images As Dictionary(Of String, SFile)
|
||||||
|
Private ReadOnly Property AutoDownloaderSource As AutoDownloader
|
||||||
|
Private Sub New()
|
||||||
|
Images = New Dictionary(Of String, SFile)
|
||||||
|
End Sub
|
||||||
|
Private Sub New(ByVal _Key As String)
|
||||||
|
Me.New
|
||||||
|
Key = _Key
|
||||||
|
KeyFolder = $"{Key}{KeyOpenFolder}"
|
||||||
|
KeySite = $"{Key}{KeyOpenSite}"
|
||||||
|
KeyDismiss = $"{Key}{KeyBttDismiss}"
|
||||||
|
End Sub
|
||||||
|
Friend Sub New(ByVal _Key As String, ByRef _User As IUserData, ByRef Source As AutoDownloader)
|
||||||
|
Me.New(_Key)
|
||||||
|
User = _User
|
||||||
|
IUserDataKey = _User.Key
|
||||||
|
AutoDownloaderSource = Source
|
||||||
|
If _User.IncludedInCollection Then
|
||||||
|
Dim cn$ = _User.CollectionName
|
||||||
|
Dim i% = Settings.Users.FindIndex(Function(u) u.IsCollection And u.Name = cn)
|
||||||
|
If i >= 0 Then IUserDataKey = Settings.Users(i).Key
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Public Shared Widening Operator CType(ByVal Key As String) As NotifiedUser
|
||||||
|
Return New NotifiedUser(Key)
|
||||||
|
End Operator
|
||||||
|
Friend Sub ShowNotification()
|
||||||
|
Try
|
||||||
|
If Not AutoDownloaderSource Is Nothing Then
|
||||||
|
If AutoDownloaderSource.ShowNotifications Then
|
||||||
|
If Not User Is Nothing Then
|
||||||
|
Dim Text$ = $"{User.Site} - {User.Name}{vbNewLine}" &
|
||||||
|
$"Downloaded: {User.DownloadedPictures(False)} images, {User.DownloadedVideos(False)} videos"
|
||||||
|
Dim Title$
|
||||||
|
If Not User.CollectionName.IsEmptyString Then
|
||||||
|
Title = User.CollectionName
|
||||||
|
Else
|
||||||
|
Title = User.ToString
|
||||||
|
End If
|
||||||
|
Using Notify As New Notification(Text, Title) With {.Key = Key}
|
||||||
|
Dim uPic As SFile = Nothing
|
||||||
|
Dim uif As SFile = Nothing
|
||||||
|
Dim uif_compressed As SFile = Nothing
|
||||||
|
Dim uifKey$ = String.Empty
|
||||||
|
If AutoDownloaderSource.ShowPictureUser Then uPic = DirectCast(User, UserDataBase).GetUserPictureToastAddress
|
||||||
|
If AutoDownloaderSource.ShowPictureUser AndAlso uPic.Exists Then Notify.Images = {New ToastImage(uPic)}
|
||||||
|
If AutoDownloaderSource.ShowPictureDownloaded And User.DownloadedPictures(False) > 0 Then
|
||||||
|
uif = DirectCast(User, UserDataBase).GetLastImageAddress
|
||||||
|
If uif.Exists Then
|
||||||
|
uif_compressed = uif
|
||||||
|
uif_compressed.Path = CachePath.Path
|
||||||
|
uif_compressed.Name = $"360_{uif.Name}"
|
||||||
|
Using imgR As New ImageRenderer(uif, EDP.SendInLog)
|
||||||
|
Try : imgR.FitToWidth(360).Save(uif_compressed) : Catch : End Try
|
||||||
|
End Using
|
||||||
|
If uif_compressed.Exists Then uif = uif_compressed
|
||||||
|
If uif.Exists Then
|
||||||
|
Notify.Images = {New ToastImage(uif, IImage.Modes.Inline)}
|
||||||
|
uifKey = $"{Key}_{Images.Keys.Count + 1}_{KeyBttPhoto}"
|
||||||
|
If Not Images.ContainsKey(uifKey) Then Images.Add(uifKey, uif)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Notify.Buttons = {
|
||||||
|
New ToastButton(KeyFolder, "Folder"),
|
||||||
|
New ToastButton(KeySite, "Site")
|
||||||
|
}
|
||||||
|
If Not uifKey.IsEmptyString Then Notify.Buttons = {New ToastButton(uifKey, "Photo")}
|
||||||
|
Notify.Buttons = {New ToastButton(KeyDismiss, "Dismiss")}
|
||||||
|
Notify.Show()
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[AutoDownloader.NotifiedUser.ShowNotification]")
|
||||||
|
If Not User Is Nothing Then
|
||||||
|
MainFrameObj.ShowNotification($"Downloaded: {User.DownloadedPictures(False)} images, {User.DownloadedVideos(False)} videos",
|
||||||
|
User.ToString, IIf(User.HasError, ToolTipIcon.Warning, ToolTipIcon.Info))
|
||||||
|
End If
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
''' <returns>True to activate</returns>
|
||||||
|
Friend Function Open(ByVal _Key As String) As Boolean
|
||||||
|
If Not User Is Nothing Then
|
||||||
|
If Key = _Key Then
|
||||||
|
Return True
|
||||||
|
ElseIf KeyFolder = _Key Then
|
||||||
|
User.OpenFolder()
|
||||||
|
ElseIf KeySite = _Key Then
|
||||||
|
User.OpenSite()
|
||||||
|
ElseIf Images.ContainsKey(_Key) Then
|
||||||
|
Images(_Key).Open(, EDP.None)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
Public Overrides Function Equals(ByVal Obj As Object) As Boolean
|
||||||
|
With CType(Obj, NotifiedUser)
|
||||||
|
Return .Key = Key Or .Key = KeyFolder Or .Key = KeySite Or .Key = KeyDismiss Or Images.ContainsKey(.Key)
|
||||||
|
End With
|
||||||
|
End Function
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then Images.Clear()
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
#End Region
|
||||||
|
#Region "XML Names"
|
||||||
|
Private Const Name_Mode As String = "Mode"
|
||||||
|
Private Const Name_Groups As String = "Groups"
|
||||||
|
Private Const Name_Labels As String = "Labels"
|
||||||
|
Private Const Name_Timer As String = "Timer"
|
||||||
|
Private Const Name_StartupDelay As String = "StartupDelay"
|
||||||
|
Private Const Name_LastDownloadDate As String = "LastDownloadDate"
|
||||||
|
Private Const Name_ShowNotifications As String = "Notify"
|
||||||
|
Private Const Name_ShowPictureDown As String = "ShowDownloadedPicture"
|
||||||
|
Private Const Name_ShowPictureUser As String = "ShowUserPicture"
|
||||||
|
#End Region
|
||||||
|
#Region "Declarations"
|
||||||
|
Friend Property Source As Scheduler
|
||||||
|
Private _Mode As Modes = Modes.None
|
||||||
|
Friend Property Mode As Modes
|
||||||
|
Get
|
||||||
|
Return _Mode
|
||||||
|
End Get
|
||||||
|
Set(ByVal m As Modes)
|
||||||
|
_Mode = m
|
||||||
|
If _Mode = Modes.None Then [Stop]()
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property Groups As List(Of String)
|
||||||
|
Friend Property Timer As Integer = DefaultTimer
|
||||||
|
Friend Property StartupDelay As Integer = 0
|
||||||
|
Friend Property ShowNotifications As Boolean = True
|
||||||
|
Friend Property ShowPictureDownloaded As Boolean = True
|
||||||
|
Friend Property ShowPictureUser As Boolean = True
|
||||||
|
#Region "Date"
|
||||||
|
Private ReadOnly LastDownloadDateXML As Date? = Nothing
|
||||||
|
Private _LastDownloadDate As Date = Now.AddYears(-1)
|
||||||
|
Private _LastDownloadDateChanged As Boolean = False
|
||||||
|
Friend Property LastDownloadDate As Date
|
||||||
|
Get
|
||||||
|
Return _LastDownloadDate
|
||||||
|
End Get
|
||||||
|
Set(ByVal d As Date)
|
||||||
|
_LastDownloadDate = d
|
||||||
|
If Not Initialization Then _LastDownloadDateChanged = True
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Private ReadOnly DateProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
|
||||||
|
Private Function GetLastDateString() As String
|
||||||
|
If LastDownloadDateXML.HasValue Or _LastDownloadDateChanged Then
|
||||||
|
Return LastDownloadDate.ToStringDate(ADateTime.Formats.BaseDateTime)
|
||||||
|
Else
|
||||||
|
Return "never"
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Private Function GetNextDateString() As String
|
||||||
|
If _LastDownloadDateChanged Then
|
||||||
|
Return LastDownloadDate.AddMinutes(Timer).ToStringDate(ADateTime.Formats.BaseDateTime)
|
||||||
|
Else
|
||||||
|
Return _StartTime.AddMinutes(StartupDelay).ToStringDate(ADateTime.Formats.BaseDateTime)
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Information"
|
||||||
|
Friend ReadOnly Property Information As String
|
||||||
|
Get
|
||||||
|
Return $"Last download date: {GetLastDateString()} ({GetWorkingState()})"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Private Function GetWorkingState() As String
|
||||||
|
Dim OutStr$
|
||||||
|
If Working Then
|
||||||
|
If StartupDelay > 0 And _StartTime.AddMinutes(StartupDelay) > Now Then
|
||||||
|
OutStr = $"delayed until {_StartTime.AddMinutes(StartupDelay).ToStringDate(ADateTime.Formats.BaseDateTime)}"
|
||||||
|
ElseIf _StopRequested Then
|
||||||
|
OutStr = "stopping"
|
||||||
|
Else
|
||||||
|
OutStr = "working"
|
||||||
|
End If
|
||||||
|
If Pause Then OutStr &= ", paused"
|
||||||
|
Else
|
||||||
|
OutStr = "stopped"
|
||||||
|
End If
|
||||||
|
Return OutStr
|
||||||
|
End Function
|
||||||
|
Public Overrides Function ToString() As String
|
||||||
|
Return $"{Name} ({GetWorkingState()}): last download date: {GetLastDateString()}; next run: {GetNextDateString()}"
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#End Region
|
||||||
|
#Region "Initializer"
|
||||||
|
Private ReadOnly Initialization As Boolean = True
|
||||||
|
Private _IsNewPlan As Boolean = False
|
||||||
|
Friend ReadOnly Property IsNewPlan As Boolean
|
||||||
|
Get
|
||||||
|
Return _IsNewPlan
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Sub New(Optional ByVal IsNewPlan As Boolean = False)
|
||||||
|
Groups = New List(Of String)
|
||||||
|
UserKeys = New List(Of NotifiedUser)
|
||||||
|
_IsNewPlan = IsNewPlan
|
||||||
|
End Sub
|
||||||
|
Friend Sub New(ByVal x As EContainer)
|
||||||
|
Me.New
|
||||||
|
Name = x.Value(Name_Name).FromXML(Of String)("Default")
|
||||||
|
Mode = x.Value(Name_Mode).FromXML(Of Integer)(Modes.None)
|
||||||
|
Groups.ListAddList(x.Value(Name_Groups).StringToList(Of String)("|"), LAP.NotContainsOnly)
|
||||||
|
Labels.ListAddList(x.Value(Name_Labels).StringToList(Of String)("|"), LAP.NotContainsOnly)
|
||||||
|
Temporary = x.Value(Name_Temporary).FromXML(Of Integer)(CheckState.Indeterminate)
|
||||||
|
Favorite = x.Value(Name_Favorite).FromXML(Of Integer)(CheckState.Indeterminate)
|
||||||
|
ReadyForDownload = x.Value(Name_ReadyForDownload).FromXML(Of Boolean)(True)
|
||||||
|
ReadyForDownloadIgnore = x.Value(Name_ReadyForDownloadIgnore).FromXML(Of Boolean)(False)
|
||||||
|
Timer = x.Value(Name_Timer).FromXML(Of Integer)(DefaultTimer)
|
||||||
|
If Timer <= 0 Then Timer = DefaultTimer
|
||||||
|
StartupDelay = x.Value(Name_StartupDelay).FromXML(Of Integer)(0)
|
||||||
|
If StartupDelay < 0 Then StartupDelay = 0
|
||||||
|
ShowNotifications = x.Value(Name_ShowNotifications).FromXML(Of Boolean)(True)
|
||||||
|
ShowPictureDownloaded = x.Value(Name_ShowPictureDown).FromXML(Of Boolean)(True)
|
||||||
|
ShowPictureUser = x.Value(Name_ShowPictureUser).FromXML(Of Boolean)(True)
|
||||||
|
LastDownloadDateXML = AConvert(Of Date)(x.Value(Name_LastDownloadDate), DateProvider, Nothing)
|
||||||
|
If LastDownloadDateXML.HasValue Then
|
||||||
|
LastDownloadDate = LastDownloadDateXML.Value
|
||||||
|
Else
|
||||||
|
LastDownloadDate = Now.AddYears(-1)
|
||||||
|
End If
|
||||||
|
Initialization = False
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Groups Support"
|
||||||
|
Friend Sub GROUPS_Updated(ByVal Sender As DownloadGroup)
|
||||||
|
If Groups.Count > 0 Then
|
||||||
|
Dim i% = Groups.IndexOf(Sender.NameBefore)
|
||||||
|
If i >= 0 Then Groups(i) = Sender.Name : Update()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Friend Sub GROUPS_Deleted(ByVal Sender As DownloadGroup)
|
||||||
|
If Groups.Count > 0 Then
|
||||||
|
Dim i% = Groups.IndexOf(Sender.Name)
|
||||||
|
If i >= 0 Then Groups.RemoveAt(i) : Update()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Update"
|
||||||
|
Friend Sub Update()
|
||||||
|
If Not Source Is Nothing Then Source.Update()
|
||||||
|
End Sub
|
||||||
|
Private Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer
|
||||||
|
Return New EContainer(Scheduler.Name_Plan, String.Empty) From {
|
||||||
|
New EContainer(Name_Name, Name),
|
||||||
|
New EContainer(Name_Mode, CInt(Mode)),
|
||||||
|
New EContainer(Name_Groups, Groups.ListToString("|")),
|
||||||
|
New EContainer(Name_Labels, Labels.ListToString("|")),
|
||||||
|
New EContainer(Name_Temporary, CInt(Temporary)),
|
||||||
|
New EContainer(Name_Favorite, CInt(Favorite)),
|
||||||
|
New EContainer(Name_ReadyForDownload, ReadyForDownload.BoolToInteger),
|
||||||
|
New EContainer(Name_ReadyForDownloadIgnore, ReadyForDownloadIgnore.BoolToInteger),
|
||||||
|
New EContainer(Name_Timer, Timer),
|
||||||
|
New EContainer(Name_StartupDelay, StartupDelay),
|
||||||
|
New EContainer(Name_ShowNotifications, ShowNotifications.BoolToInteger),
|
||||||
|
New EContainer(Name_ShowPictureDown, ShowPictureDownloaded.BoolToInteger),
|
||||||
|
New EContainer(Name_ShowPictureUser, ShowPictureUser.BoolToInteger),
|
||||||
|
New EContainer(Name_LastDownloadDate, CStr(AConvert(Of String)(If(LastDownloadDateXML.HasValue Or _LastDownloadDateChanged,
|
||||||
|
CObj(LastDownloadDate), Nothing), DateProvider, String.Empty)))
|
||||||
|
}
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Execution"
|
||||||
|
Private AThread As Thread
|
||||||
|
Friend ReadOnly Property Working As Boolean
|
||||||
|
Get
|
||||||
|
Return If(AThread?.IsAlive, False)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Private _StartTime As Date = Now
|
||||||
|
Friend Sub Start(ByVal Init As Boolean)
|
||||||
|
If Init Then _StartTime = Now
|
||||||
|
_IsNewPlan = False
|
||||||
|
If Not Working And Not Mode = Modes.None Then
|
||||||
|
AThread = New Thread(New ThreadStart(AddressOf Checker))
|
||||||
|
AThread.SetApartmentState(ApartmentState.MTA)
|
||||||
|
AThread.Start()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private _StopRequested As Boolean = False
|
||||||
|
Friend Property Pause As Boolean = False
|
||||||
|
Friend Sub [Stop]()
|
||||||
|
If Working Then _StopRequested = True
|
||||||
|
End Sub
|
||||||
|
Friend Sub Skip()
|
||||||
|
If LastDownloadDate.AddMinutes(Timer) <= Now Then
|
||||||
|
LastDownloadDate = Now.AddMinutes(Timer)
|
||||||
|
Else
|
||||||
|
LastDownloadDate = LastDownloadDate.AddMinutes(Timer)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub Checker()
|
||||||
|
Try
|
||||||
|
While (Not _StopRequested Or Downloader.Working) And Not Mode = Modes.None
|
||||||
|
If LastDownloadDate.AddMinutes(Timer) < Now And _StartTime.AddMinutes(StartupDelay) < Now And
|
||||||
|
Not Downloader.Working And Not Pause And Not _StopRequested And Not Mode = Modes.None Then Download()
|
||||||
|
Thread.Sleep(500)
|
||||||
|
End While
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[AutoDownloader.Checker]")
|
||||||
|
Finally
|
||||||
|
_StopRequested = False
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private _Downloading As Boolean = False
|
||||||
|
Friend ReadOnly Property Downloading As Boolean
|
||||||
|
Get
|
||||||
|
Return _Downloading
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Private Sub Download()
|
||||||
|
_Downloading = True
|
||||||
|
Dim Keys As New List(Of String)
|
||||||
|
Try
|
||||||
|
Dim users As New List(Of IUserData)
|
||||||
|
Dim GName$
|
||||||
|
Dim i%
|
||||||
|
Dim l As New ListAddParams(LAP.IgnoreICopier + LAP.NotContainsOnly)
|
||||||
|
Dim notify As Action = Sub()
|
||||||
|
With Downloader.Downloaded
|
||||||
|
If ShowNotifications And .Count > 0 Then .ForEach(Sub(ByVal u As IUserData)
|
||||||
|
If Keys.Contains(u.Key) Then
|
||||||
|
ShowNotification(u)
|
||||||
|
Keys.Remove(u.Key)
|
||||||
|
End If
|
||||||
|
End Sub)
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Select Case Mode
|
||||||
|
Case Modes.All : users.ListAddList(Settings.Users)
|
||||||
|
Case Modes.Default
|
||||||
|
Using g As New GroupParameters : users.ListAddList(DownloadGroup.GetUsers(g, True)) : End Using
|
||||||
|
Case Modes.Specified : users.ListAddList(DownloadGroup.GetUsers(Me, True))
|
||||||
|
Case Modes.Groups
|
||||||
|
If Groups.Count > 0 And Settings.Groups.Count > 0 Then
|
||||||
|
For Each GName In Groups
|
||||||
|
i = Settings.Groups.IndexOf(GName)
|
||||||
|
If i >= 0 Then users.ListAddList(Settings.Groups(i).GetUsers, l)
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End Select
|
||||||
|
If users.Count > 0 Then
|
||||||
|
Keys.ListAddList(users.SelectMany(Of String)(Function(ByVal user As IUserData) As IEnumerable(Of String)
|
||||||
|
If user.IsCollection Then
|
||||||
|
With DirectCast(user, UserDataBind)
|
||||||
|
If .Count > 0 Then
|
||||||
|
Return .Collections.Select(Function(u) u.Key)
|
||||||
|
Else
|
||||||
|
Return New String() {}
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Else
|
||||||
|
Return {user.Key}
|
||||||
|
End If
|
||||||
|
End Function))
|
||||||
|
With Downloader
|
||||||
|
.AutoDownloaderWorking = True
|
||||||
|
If .Downloaded.Count > 0 Then .Downloaded.RemoveAll(Function(u) Keys.Contains(u.Key)) : .InvokeDownloadsChangeEvent()
|
||||||
|
.AddRange(users)
|
||||||
|
While .Working Or .Count > 0 : notify.Invoke() : Thread.Sleep(200) : End While
|
||||||
|
.AutoDownloaderWorking = False
|
||||||
|
notify.Invoke
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "[AutoDownloader.Download]")
|
||||||
|
Finally
|
||||||
|
Keys.Clear()
|
||||||
|
LastDownloadDate = Now
|
||||||
|
Update()
|
||||||
|
_Downloading = False
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private Sub ShowNotification(ByVal u As IUserData)
|
||||||
|
Dim k$ = $"{Name}_{u.Key}"
|
||||||
|
Dim i% = UserKeys.IndexOf(k)
|
||||||
|
If i >= 0 Then
|
||||||
|
UserKeys(i).ShowNotification()
|
||||||
|
Else
|
||||||
|
UserKeys.Add(New NotifiedUser(k, TDownloader.GetUserFromMainCollection(u), Me))
|
||||||
|
UserKeys.Last.ShowNotification()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Friend Function NotificationClicked(ByVal Key As String) As Boolean
|
||||||
|
Dim i% = UserKeys.IndexOf(Key)
|
||||||
|
If i >= 0 Then
|
||||||
|
RaiseEvent UserFind(UserKeys(i).IUserDataKey, UserKeys(i).Open(Key))
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue And disposing Then
|
||||||
|
[Stop]()
|
||||||
|
UserKeys.ListClearDispose()
|
||||||
|
Groups.Clear()
|
||||||
|
End If
|
||||||
|
MyBase.Dispose(disposing)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
357
SCrawler/Download/AutoDownloaderEditorForm.Designer.vb
generated
Normal file
@@ -0,0 +1,357 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Namespace DownloadObjects
|
||||||
|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||||
|
Partial Friend Class AutoDownloaderEditorForm : 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 ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(AutoDownloaderEditorForm))
|
||||||
|
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim TP_MODE As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim TP_NOTIFY As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim TT_MAIN As System.Windows.Forms.ToolTip
|
||||||
|
Me.DEF_GROUP = New SCrawler.DownloadObjects.Groups.GroupDefaults()
|
||||||
|
Me.TXT_GROUPS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.OPT_ALL = New System.Windows.Forms.RadioButton()
|
||||||
|
Me.OPT_DEFAULT = New System.Windows.Forms.RadioButton()
|
||||||
|
Me.OPT_SPEC = New System.Windows.Forms.RadioButton()
|
||||||
|
Me.OPT_DISABLED = New System.Windows.Forms.RadioButton()
|
||||||
|
Me.OPT_GROUP = New System.Windows.Forms.RadioButton()
|
||||||
|
Me.TXT_TIMER = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.LBL_LAST_TIME_UP = New System.Windows.Forms.Label()
|
||||||
|
Me.NUM_DELAY = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.CH_NOTIFY = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_SHOW_PIC = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_SHOW_PIC_USER = New System.Windows.Forms.CheckBox()
|
||||||
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
|
TP_MODE = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TP_NOTIFY = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
|
||||||
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
|
Me.DEF_GROUP.SuspendLayout()
|
||||||
|
CType(Me.TXT_GROUPS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
TP_MODE.SuspendLayout()
|
||||||
|
CType(Me.TXT_TIMER, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.NUM_DELAY, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
TP_NOTIFY.SuspendLayout()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN
|
||||||
|
'
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN.ContentPanel
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.DEF_GROUP)
|
||||||
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(476, 301)
|
||||||
|
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(476, 301)
|
||||||
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
|
'
|
||||||
|
'DEF_GROUP
|
||||||
|
'
|
||||||
|
Me.DEF_GROUP.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
|
Me.DEF_GROUP.ColumnCount = 1
|
||||||
|
Me.DEF_GROUP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
Me.DEF_GROUP.Controls.Add(Me.TXT_GROUPS, 0, 5)
|
||||||
|
Me.DEF_GROUP.Controls.Add(TP_MODE, 0, 0)
|
||||||
|
Me.DEF_GROUP.Controls.Add(Me.TXT_TIMER, 0, 7)
|
||||||
|
Me.DEF_GROUP.Controls.Add(Me.LBL_LAST_TIME_UP, 0, 9)
|
||||||
|
Me.DEF_GROUP.Controls.Add(Me.NUM_DELAY, 0, 8)
|
||||||
|
Me.DEF_GROUP.Controls.Add(TP_NOTIFY, 0, 6)
|
||||||
|
Me.DEF_GROUP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.DEF_GROUP.Location = New System.Drawing.Point(0, 0)
|
||||||
|
Me.DEF_GROUP.Name = "DEF_GROUP"
|
||||||
|
Me.DEF_GROUP.RowCount = 11
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
Me.DEF_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
||||||
|
Me.DEF_GROUP.Size = New System.Drawing.Size(476, 301)
|
||||||
|
Me.DEF_GROUP.TabIndex = 0
|
||||||
|
'
|
||||||
|
'TXT_GROUPS
|
||||||
|
'
|
||||||
|
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton1.Name = "Edit"
|
||||||
|
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton2.Name = "Clear"
|
||||||
|
Me.TXT_GROUPS.Buttons.Add(ActionButton1)
|
||||||
|
Me.TXT_GROUPS.Buttons.Add(ActionButton2)
|
||||||
|
Me.TXT_GROUPS.CaptionText = "Groups"
|
||||||
|
Me.TXT_GROUPS.CaptionWidth = 50.0R
|
||||||
|
Me.TXT_GROUPS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_GROUPS.Location = New System.Drawing.Point(4, 140)
|
||||||
|
Me.TXT_GROUPS.Name = "TXT_GROUPS"
|
||||||
|
Me.TXT_GROUPS.Size = New System.Drawing.Size(468, 22)
|
||||||
|
Me.TXT_GROUPS.TabIndex = 2
|
||||||
|
'
|
||||||
|
'TP_MODE
|
||||||
|
'
|
||||||
|
TP_MODE.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
|
TP_MODE.ColumnCount = 5
|
||||||
|
TP_MODE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
|
||||||
|
TP_MODE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
|
||||||
|
TP_MODE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
|
||||||
|
TP_MODE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
|
||||||
|
TP_MODE.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
|
||||||
|
TP_MODE.Controls.Add(Me.OPT_ALL, 1, 0)
|
||||||
|
TP_MODE.Controls.Add(Me.OPT_DEFAULT, 2, 0)
|
||||||
|
TP_MODE.Controls.Add(Me.OPT_SPEC, 3, 0)
|
||||||
|
TP_MODE.Controls.Add(Me.OPT_DISABLED, 0, 0)
|
||||||
|
TP_MODE.Controls.Add(Me.OPT_GROUP, 4, 0)
|
||||||
|
TP_MODE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_MODE.Location = New System.Drawing.Point(1, 1)
|
||||||
|
TP_MODE.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
TP_MODE.Name = "TP_MODE"
|
||||||
|
TP_MODE.RowCount = 1
|
||||||
|
TP_MODE.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_MODE.Size = New System.Drawing.Size(474, 25)
|
||||||
|
TP_MODE.TabIndex = 0
|
||||||
|
'
|
||||||
|
'OPT_ALL
|
||||||
|
'
|
||||||
|
Me.OPT_ALL.AutoSize = True
|
||||||
|
Me.OPT_ALL.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.OPT_ALL.Location = New System.Drawing.Point(98, 4)
|
||||||
|
Me.OPT_ALL.Name = "OPT_ALL"
|
||||||
|
Me.OPT_ALL.Size = New System.Drawing.Size(87, 17)
|
||||||
|
Me.OPT_ALL.TabIndex = 1
|
||||||
|
Me.OPT_ALL.TabStop = True
|
||||||
|
Me.OPT_ALL.Text = "ALL"
|
||||||
|
TT_MAIN.SetToolTip(Me.OPT_ALL, "Download all users")
|
||||||
|
Me.OPT_ALL.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'OPT_DEFAULT
|
||||||
|
'
|
||||||
|
Me.OPT_DEFAULT.AutoSize = True
|
||||||
|
Me.OPT_DEFAULT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.OPT_DEFAULT.Location = New System.Drawing.Point(192, 4)
|
||||||
|
Me.OPT_DEFAULT.Name = "OPT_DEFAULT"
|
||||||
|
Me.OPT_DEFAULT.Size = New System.Drawing.Size(87, 17)
|
||||||
|
Me.OPT_DEFAULT.TabIndex = 2
|
||||||
|
Me.OPT_DEFAULT.TabStop = True
|
||||||
|
Me.OPT_DEFAULT.Text = "Default"
|
||||||
|
TT_MAIN.SetToolTip(Me.OPT_DEFAULT, "All users marked ""Ready for download""")
|
||||||
|
Me.OPT_DEFAULT.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'OPT_SPEC
|
||||||
|
'
|
||||||
|
Me.OPT_SPEC.AutoSize = True
|
||||||
|
Me.OPT_SPEC.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.OPT_SPEC.Location = New System.Drawing.Point(286, 4)
|
||||||
|
Me.OPT_SPEC.Name = "OPT_SPEC"
|
||||||
|
Me.OPT_SPEC.Size = New System.Drawing.Size(87, 17)
|
||||||
|
Me.OPT_SPEC.TabIndex = 3
|
||||||
|
Me.OPT_SPEC.TabStop = True
|
||||||
|
Me.OPT_SPEC.Text = "Specified"
|
||||||
|
TT_MAIN.SetToolTip(Me.OPT_SPEC, "Select parameters")
|
||||||
|
Me.OPT_SPEC.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'OPT_DISABLED
|
||||||
|
'
|
||||||
|
Me.OPT_DISABLED.AutoSize = True
|
||||||
|
Me.OPT_DISABLED.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.OPT_DISABLED.Location = New System.Drawing.Point(4, 4)
|
||||||
|
Me.OPT_DISABLED.Name = "OPT_DISABLED"
|
||||||
|
Me.OPT_DISABLED.Size = New System.Drawing.Size(87, 17)
|
||||||
|
Me.OPT_DISABLED.TabIndex = 0
|
||||||
|
Me.OPT_DISABLED.TabStop = True
|
||||||
|
Me.OPT_DISABLED.Text = "Disabled"
|
||||||
|
TT_MAIN.SetToolTip(Me.OPT_DISABLED, "Automation disabled")
|
||||||
|
Me.OPT_DISABLED.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'OPT_GROUP
|
||||||
|
'
|
||||||
|
Me.OPT_GROUP.AutoSize = True
|
||||||
|
Me.OPT_GROUP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.OPT_GROUP.Location = New System.Drawing.Point(380, 4)
|
||||||
|
Me.OPT_GROUP.Name = "OPT_GROUP"
|
||||||
|
Me.OPT_GROUP.Size = New System.Drawing.Size(90, 17)
|
||||||
|
Me.OPT_GROUP.TabIndex = 4
|
||||||
|
Me.OPT_GROUP.TabStop = True
|
||||||
|
Me.OPT_GROUP.Text = "Groups"
|
||||||
|
TT_MAIN.SetToolTip(Me.OPT_GROUP, "Download groups")
|
||||||
|
Me.OPT_GROUP.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'TXT_TIMER
|
||||||
|
'
|
||||||
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton3.Name = "Refresh"
|
||||||
|
Me.TXT_TIMER.Buttons.Add(ActionButton3)
|
||||||
|
Me.TXT_TIMER.CaptionText = "Timer"
|
||||||
|
Me.TXT_TIMER.CaptionWidth = 50.0R
|
||||||
|
Me.TXT_TIMER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_TIMER.Location = New System.Drawing.Point(4, 195)
|
||||||
|
Me.TXT_TIMER.Name = "TXT_TIMER"
|
||||||
|
Me.TXT_TIMER.Size = New System.Drawing.Size(468, 22)
|
||||||
|
Me.TXT_TIMER.TabIndex = 2
|
||||||
|
'
|
||||||
|
'LBL_LAST_TIME_UP
|
||||||
|
'
|
||||||
|
Me.LBL_LAST_TIME_UP.AutoSize = True
|
||||||
|
Me.LBL_LAST_TIME_UP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LBL_LAST_TIME_UP.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
|
||||||
|
Me.LBL_LAST_TIME_UP.Location = New System.Drawing.Point(4, 250)
|
||||||
|
Me.LBL_LAST_TIME_UP.Name = "LBL_LAST_TIME_UP"
|
||||||
|
Me.LBL_LAST_TIME_UP.Size = New System.Drawing.Size(468, 25)
|
||||||
|
Me.LBL_LAST_TIME_UP.TabIndex = 4
|
||||||
|
Me.LBL_LAST_TIME_UP.Text = "Last download date: "
|
||||||
|
Me.LBL_LAST_TIME_UP.TextAlign = System.Drawing.ContentAlignment.TopCenter
|
||||||
|
'
|
||||||
|
'NUM_DELAY
|
||||||
|
'
|
||||||
|
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton4.Name = "Refresh"
|
||||||
|
Me.NUM_DELAY.Buttons.Add(ActionButton4)
|
||||||
|
Me.NUM_DELAY.CaptionText = "Delay"
|
||||||
|
Me.NUM_DELAY.CaptionToolTipEnabled = True
|
||||||
|
Me.NUM_DELAY.CaptionToolTipText = "Startup delay"
|
||||||
|
Me.NUM_DELAY.CaptionWidth = 50.0R
|
||||||
|
Me.NUM_DELAY.ClearTextByButtonClear = False
|
||||||
|
Me.NUM_DELAY.ControlMode = PersonalUtilities.Forms.Controls.TextBoxExtended.ControlModes.NumericUpDown
|
||||||
|
Me.NUM_DELAY.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.NUM_DELAY.Location = New System.Drawing.Point(4, 224)
|
||||||
|
Me.NUM_DELAY.Name = "NUM_DELAY"
|
||||||
|
Me.NUM_DELAY.NumberMaximum = New Decimal(New Integer() {1440, 0, 0, 0})
|
||||||
|
Me.NUM_DELAY.NumberUpDownAlign = System.Windows.Forms.LeftRightAlignment.Left
|
||||||
|
Me.NUM_DELAY.Size = New System.Drawing.Size(468, 22)
|
||||||
|
Me.NUM_DELAY.TabIndex = 3
|
||||||
|
Me.NUM_DELAY.Text = "0"
|
||||||
|
'
|
||||||
|
'TP_NOTIFY
|
||||||
|
'
|
||||||
|
TP_NOTIFY.ColumnCount = 3
|
||||||
|
TP_NOTIFY.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
|
||||||
|
TP_NOTIFY.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
|
||||||
|
TP_NOTIFY.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333!))
|
||||||
|
TP_NOTIFY.Controls.Add(Me.CH_NOTIFY, 0, 0)
|
||||||
|
TP_NOTIFY.Controls.Add(Me.CH_SHOW_PIC, 1, 0)
|
||||||
|
TP_NOTIFY.Controls.Add(Me.CH_SHOW_PIC_USER, 2, 0)
|
||||||
|
TP_NOTIFY.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_NOTIFY.Location = New System.Drawing.Point(1, 166)
|
||||||
|
TP_NOTIFY.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
TP_NOTIFY.Name = "TP_NOTIFY"
|
||||||
|
TP_NOTIFY.RowCount = 1
|
||||||
|
TP_NOTIFY.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_NOTIFY.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_NOTIFY.Size = New System.Drawing.Size(474, 25)
|
||||||
|
TP_NOTIFY.TabIndex = 1
|
||||||
|
'
|
||||||
|
'CH_NOTIFY
|
||||||
|
'
|
||||||
|
Me.CH_NOTIFY.AutoSize = True
|
||||||
|
Me.CH_NOTIFY.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_NOTIFY.Location = New System.Drawing.Point(3, 3)
|
||||||
|
Me.CH_NOTIFY.Name = "CH_NOTIFY"
|
||||||
|
Me.CH_NOTIFY.Size = New System.Drawing.Size(152, 19)
|
||||||
|
Me.CH_NOTIFY.TabIndex = 0
|
||||||
|
Me.CH_NOTIFY.Text = "Show notifications"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_NOTIFY, "Show notification when some data has been downloaded")
|
||||||
|
Me.CH_NOTIFY.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_SHOW_PIC
|
||||||
|
'
|
||||||
|
Me.CH_SHOW_PIC.AutoSize = True
|
||||||
|
Me.CH_SHOW_PIC.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_SHOW_PIC.Location = New System.Drawing.Point(161, 3)
|
||||||
|
Me.CH_SHOW_PIC.Name = "CH_SHOW_PIC"
|
||||||
|
Me.CH_SHOW_PIC.Size = New System.Drawing.Size(152, 19)
|
||||||
|
Me.CH_SHOW_PIC.TabIndex = 1
|
||||||
|
Me.CH_SHOW_PIC.Text = "Show download picture"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_SHOW_PIC, "Show downloaded image in notification")
|
||||||
|
Me.CH_SHOW_PIC.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_SHOW_PIC_USER
|
||||||
|
'
|
||||||
|
Me.CH_SHOW_PIC_USER.AutoSize = True
|
||||||
|
Me.CH_SHOW_PIC_USER.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_SHOW_PIC_USER.Location = New System.Drawing.Point(319, 3)
|
||||||
|
Me.CH_SHOW_PIC_USER.Name = "CH_SHOW_PIC_USER"
|
||||||
|
Me.CH_SHOW_PIC_USER.Size = New System.Drawing.Size(152, 19)
|
||||||
|
Me.CH_SHOW_PIC_USER.TabIndex = 2
|
||||||
|
Me.CH_SHOW_PIC_USER.Text = "Show user picture"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_SHOW_PIC_USER, "Show user image in notification")
|
||||||
|
Me.CH_SHOW_PIC_USER.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'AutoDownloaderEditorForm
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.ClientSize = New System.Drawing.Size(476, 301)
|
||||||
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
|
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||||
|
Me.KeyPreview = True
|
||||||
|
Me.MaximizeBox = False
|
||||||
|
Me.MaximumSize = New System.Drawing.Size(492, 340)
|
||||||
|
Me.MinimizeBox = False
|
||||||
|
Me.MinimumSize = New System.Drawing.Size(492, 340)
|
||||||
|
Me.Name = "AutoDownloaderEditorForm"
|
||||||
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
|
Me.Text = "AutoDownloader settings"
|
||||||
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.PerformLayout()
|
||||||
|
Me.DEF_GROUP.ResumeLayout(False)
|
||||||
|
Me.DEF_GROUP.PerformLayout()
|
||||||
|
CType(Me.TXT_GROUPS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
TP_MODE.ResumeLayout(False)
|
||||||
|
TP_MODE.PerformLayout()
|
||||||
|
CType(Me.TXT_TIMER, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.NUM_DELAY, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
TP_NOTIFY.ResumeLayout(False)
|
||||||
|
TP_NOTIFY.PerformLayout()
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
Private WithEvents DEF_GROUP As DownloadObjects.Groups.GroupDefaults
|
||||||
|
Private WithEvents TXT_GROUPS As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents OPT_ALL As RadioButton
|
||||||
|
Private WithEvents OPT_DEFAULT As RadioButton
|
||||||
|
Private WithEvents OPT_SPEC As RadioButton
|
||||||
|
Private WithEvents OPT_DISABLED As RadioButton
|
||||||
|
Private WithEvents CH_NOTIFY As CheckBox
|
||||||
|
Friend WithEvents TXT_TIMER As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents OPT_GROUP As RadioButton
|
||||||
|
Private WithEvents LBL_LAST_TIME_UP As Label
|
||||||
|
Private WithEvents NUM_DELAY As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents CH_SHOW_PIC As CheckBox
|
||||||
|
Private WithEvents CH_SHOW_PIC_USER As CheckBox
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
737
SCrawler/Download/AutoDownloaderEditorForm.resx
Normal file
@@ -0,0 +1,737 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
AAAASUVORK5CYII=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton2.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_MODE.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</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>
|
||||||
|
<data name="ActionButton3.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="ActionButton4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
||||||
|
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE
|
||||||
|
QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb
|
||||||
|
ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb
|
||||||
|
+eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv
|
||||||
|
qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN
|
||||||
|
v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA
|
||||||
|
prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ
|
||||||
|
qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY
|
||||||
|
HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74
|
||||||
|
qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG
|
||||||
|
VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="TP_NOTIFY.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA
|
||||||
|
BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ
|
||||||
|
AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm
|
||||||
|
AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
|
||||||
|
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjsjgAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAIbOh4AAAAAAAAAAAAAAAAAAAAAAAAAAAH5mfsgAAAAAAAAAAAAAAAAAAAAAAAAAB+
|
||||||
|
xs54YAAAAAAAAAAAAAAAAAAAAAAAAAfsbmxo5wAAAAAAAAAAAAAAAAAAAAAAAIbObObOeMAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAACG5+zmzsaOgAAAAAAAAAAAAAAAAAAAAABn7ObOZmbneAAAAAAAAAAAAAAAAAAAAAfs5s
|
||||||
|
5+zs7I7AAAAAAAAAAAAAAAAAAAAH7Ofm7G7GbGiOAAAAAAAAAAAAAAAAAAB+fs7Ofs5+zmzngAAAAAAA
|
||||||
|
AAAAAAAAAAhn7Ojs5uzm7OZ4yAAAAAAAAAAAAAAAAAaOfm7Obsfsbs7OjnAAAAAAAAAAAAAAAH7Ojs7n
|
||||||
|
7O7ObOZs54AAAAAAAAAAAAAABn6Ozuduzn5uznzmyOcAAAAAAAAAAAAAfn7I6M7s5+zn7Obs5oyAAAAA
|
||||||
|
AAAAAAAIZ+jujuzo7Obs5uxubOjnAAAAAAAAAAAG586M5+js7n7OfOfs5s54cAAAAAAAAABnzo7o5+zu
|
||||||
|
fs5+5uzmzmzowAAAAAAAAAdujn5+fu7Ozuzs7Ofs5+bI6AAAAAAAAHzn7OjOjI5+5+jufs5uzs5ueOAA
|
||||||
|
AAAAAG6M6O6O7n7Ofs7Ozo7Ofmzs53gAAAAAB+zo7IznyOzuzufufs6Ofo6Ofn4AAAAACEdsZ2Z87o5+
|
||||||
|
js7O7O5cjHx8jIgAAAAAAAAAAAAAfOfs7Ojs6OfgAAAAAAAAAAAAAAAAAAAAbo7O6O7O7OfAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAfsjm7Obo7s6AAAAAAAAAAAAAAAAAAAAAaO5+zo7OyO5wAAAAAAAAAAAAAAAAAAAAzn7O
|
||||||
|
js7n7sjAAAAAAAAAAAAAAAAAAAAAaM6Ozuzuzu5wAAAAAAAAAAAAAAAAAAAAbn7Obn5+jshgAAAAAAAA
|
||||||
|
AAAAAAAAAAAAbOjn7Ozs7O5wAAAAAAAAAAAAAAAAAAAAfnzn5+bn7n7AAAAAAAAAAAAAAAAAAAAAbOjs
|
||||||
|
7OzuzshgAAAAAAAAAAAAAAAAAAAAaOyOfn7I5+5wAAAAAAAAAAAAAAAAAAAAbOfs7Ozm7OfAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAbnzn5+bs5u5wAAAAAAAAAAAAAAAAAAAAfOfsjOx+zn7AAAAAAAAAAAAAAAAAAAAAbnzn
|
||||||
|
5o7OfshgAAAAAAAAAAAAAAAAAAAAx+Z+zs5uzm5gAAAAAAAAAAAAAAAAAAAAbs7H5+fObsjAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAZ2js585s7O5wAAAAAAAAAAAAAAAAAAAAjOyH5+jn53aAAAAAAAAAAAAAAAAAAAAACGZs
|
||||||
|
bHxsfGgAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP///
|
||||||
|
AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4
|
||||||
|
AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/
|
||||||
|
AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//
|
||||||
|
AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
|
||||||
|
AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5+AAAAAAAAAAAAAAAAAA
|
||||||
|
BoyHAAAAAAAAAAAAAAAAAOfn7AAAAAAAAAAAAAAAAAjIzn6AAAAAAAAAAAAAAAAO5uxo7AAAAAAAAAAA
|
||||||
|
AAAAaM7ObI6AAAAAAAAAAAAADn5ubOboyAAAAAAAAAAAAH7Ozs5sbo4AAAAAAAAAAAjI5+fn7saM4AAA
|
||||||
|
AAAAAAAO7n7Ozsbs6OcAAAAAAAAAaH7O5+bn5s6MgAAAAAAABo7o5+zs7Ozm6OAAAAAAAH7I7Ozufn5u
|
||||||
|
zsfsAAAAAAjOjn6Ofs7s5+bsjnAAAAAG6Ozo7O7n5+zs5ujnAAAAaOyOjo587Ozo6I7IjIAAAGxmxsZ+
|
||||||
|
7o7uzsbG7O4AAAAAAAAM587OyOhgAAAAAAAAAAAABo7n5+7OYAAAAAAAAAAAAAzozuzujsAAAAAAAAAA
|
||||||
|
AAAGjufuzs5wAAAAAAAAAAAADOfOyOfowAAAAAAAAAAAAAaOfm7O7mAAAAAAAAAAAAAM7Ofs5sjAAAAA
|
||||||
|
AAAAAAAABn585+7oYAAAAAAAAAAAAAyM6Oxs58AAAAAAAAAAAAAG5+zm5+5gAAAAAAAAAAAABOx+fs7I
|
||||||
|
wAAAAAAAAAAAAAZ+Z8hs7kAAAAAAAAAAAAAMjOjm52fAAAAAAAAAAAAAAGbExsbOAAAAAAAA///////8
|
||||||
|
f///+D////A////gH///4A///8AH//+AA///AAP//gAB//4AAP/8AAB/+AAAf/AAAD/gAAAf4AAAD8AA
|
||||||
|
AAfAAAAP/4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH///A
|
||||||
|
D/8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
|
||||||
|
AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAABgAAAAAAAAAAAAAAeOAAAAAAAAAAAAAG7IcAAAAAAAAAAAB+fujgAAAAAAAAAAbs7OyHAAAAAAAA
|
||||||
|
AGjufm7oYAAAAAAABo7OzsfOhwAAAAAAaO5+5+7s6GAAAAAG5+zs7Ozn7PYAAABo6Ojo7n6IjojgAAAM
|
||||||
|
bGzs7OyOx+wAAAAAAAfo7o7nAAAAAAAAAAaM7OyGAAAAAAAAAAbufu6MAAAAAAAAAAd+zn6GAAAAAAAA
|
||||||
|
AAzn7OznAAAAAAAAAAaOzuiGAAAAAAAAAAbn587sAAAAAAAAAAZ87m6GAAAAAAAAAAzozs6MAAAAAAAA
|
||||||
|
AAaOh+eGAAAAAAAAAABsbGxgAAAAAAAAAAAAAAAAAAAAAP///wD/7/8A/8f/AP+D/wD/Af8A/gD/APwA
|
||||||
|
fwD4AD8A8AAfAOAADwDAAAcA4AAPAP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A
|
||||||
|
/wD/Af8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
|
||||||
|
AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAABgAA
|
||||||
|
AAAAAABoYAAAAAAABo6MAAAAAABozshgAAAABo5uboYAAABo7OfOeGAABo5+fn6OhgB2xs7O6MfHgAAA
|
||||||
|
aOfIYAAAAABuzujgAAAAAGjn6MAAAAAAzs5+cAAAAABo5+jAAAAAAG7OyOAAAAAAaI6OcAAAAAAMbGYA
|
||||||
|
AAD+/wAA/H8AAPg/AADwHwAA4A8AAMAHAACAAwAAAAEAAPAfAADwHwAA8B8AAPAfAADwHwAA8B8AAPAf
|
||||||
|
AAD4PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAACjaB0ApmsgAKlt
|
||||||
|
IwCrcCYArXMqALF1LACzeC4ArHYwALR6MQC4fTQAt385AMh1AADJdwQAy3gAAM17AADOfQEAy3oHAM5/
|
||||||
|
CQDMfA0A0H4BAMt/GQC7gDcAvoI6ALmBPADRgAIA0oIEANSDBADVhQUA1ogGANaMBwDZiQYA3I0GANKE
|
||||||
|
CgDWhwkA0YIMANaMCwDZiggA2o0JANyOCQDbkgsA3pAKAN6UCwDekg0A3ZQNAM+EGgDRhhUA1YkSANiN
|
||||||
|
EgDajhcA2pISANqSHgDalh4A3ZgaAOGUCgDgkg0A4ZUOAOSWDgDhmA4A5ZgPAOicDgDklxAA45cVAOGY
|
||||||
|
EADlmRAA5ZwRAOSdFwDonRIA550YAOmfGwDpoBIA6qEUAO2iFADrpBQA7qUWAO6mGADvqBgA8KUXAPCm
|
||||||
|
GADxqRgA9KsZAPKsGgD0rBoA9a0cAPiuGgD1sBsA+bEbAPixHADOhycAzo0lAMqKKwDRjCIA0Y8lANSP
|
||||||
|
JgDTji0A05ImANiRIwDdnScA1JQpANmVKwDXmCoA25stAMGJNQDAhj0A0I84AM2VPwDTmTYA3JwyANKR
|
||||||
|
OQDSlDgA2Js6AOGeIADknS8A3qAxANyiPwDopCAA7qogAOKiLQDtqykA8asjAPOxJwD6syAA+LMkAPq1
|
||||||
|
JwD2tSoA+rYsAPq4LgDiozEA6qUzAOepNQDpqTEA66wyAOmrNwDtqjUA6qw2AO2vNQDjpjoA6aw4AOir
|
||||||
|
PwDwrDgA67A3AO2xOQDssT8A8rIwAPazMwD2tzEA8bE2APq7NgDytDoA+Lc6APW5PAD5uToA+bw7APi7
|
||||||
|
PQD5vD0A/L49APzAPgCxgEMAv4VAALaFSAC5h0sAvJZmALyacgC5mnYAxYlBAMOLRgDHi0QAyY1GAMaO
|
||||||
|
SgDJj0oAyZBEAMyQSgDPlEkAypFNAM6TTADNlE4A0pVHANebQwDUnUUA0JRNANaaSgDDkVUAzpZWAM2X
|
||||||
|
WwDOmVsAzZpdANGZVgDUmlcA0ppaANOcWwDQnF4A16BHANqiSADapUkA3adLAN2lTQDbo1QA1KFeANql
|
||||||
|
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
|
||||||
|
AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP///
|
||||||
|
AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4
|
||||||
|
AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/
|
||||||
|
AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//
|
||||||
|
AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
|
||||||
|
AAAAAAAAAAAAAAABAAAAAQAAAAAAAKdIAACpSgAArU0AALBSAACxVQAAtFYAALdYAAC5WwAAuVwAALxe
|
||||||
|
AAC/YQAAvGgNALllFwC5Zx8AtWUpAMJkAADFaAAAyGsAAMxuAgDOcQYA0nYJANR5DQDFdREAz34aANd8
|
||||||
|
EADafxMA0IAGANSDBQDThAYA1YUFANiJBwDThg8A2YoIANqNCQDcjQoA25AKAN2QCgDekQ0A35UNAN2A
|
||||||
|
FgDXjxAA2Y4UAN6DGQDWjBsA3ZEQAN6UFgDdmBgA4JMKAOCSDQDhlQ4A5ZcPAOSZDgDghhsA44geAOSW
|
||||||
|
EADjmxEA5ZoQAOScEQDnnxQA6Z0SAOWcGgDpoBIA6aEUAO2iFADtpBYA5qAZAO+oGgDwphcA8acYAPGp
|
||||||
|
GAD0qxkA86waAPSsGgD1rhwA9rAbAPawHAD4sBoA+LEcAMyAIADXhSMA0IUnAN+NKgDRkScA2pYhAN2b
|
||||||
|
IwDcmyUA05MoANWWKQDali8A2ZksANucLQDcnS4A3Z0xAN2TOwDblT8A1po7ANKYPADVmj0A154+AOaO
|
||||||
|
JADjkCoA5ZIuAOqTKgDtkysA7ZQrAOiTLQDulSwA4pIxAOmWMQDrlzUA6J02AOOaOQDgnTwA6pw5APCa
|
||||||
|
NADynj0A36AvAN6hMADdoDgA2aE/AOSgIQDioSYA7KchAO2oJgDgoCkA6agrAPewIAD5tCIA+bQnAPOx
|
||||||
|
KAD5tigA+bcvAOOmMgDjpjQA5KU0AOepNQDnrD8A6Ko4AOyvOADprj8A86A/AO+zOgDysjAA8LE3APe4
|
||||||
|
NgD7ujEA8rY7APCzPQDytj4A9Lg6APW6PQD7vDoA+b0+AMWARADPkEUA3ZlEANmbTQDPnF8A0phUAOqe
|
||||||
|
QgDdoEEA2aJGAN2kRADep0kA3aVOANuiUADdplQA4ahGAO2qRwDooEgA4alKAOOtTQDzoUAA869EAPap
|
||||||
|
TgDsskAA77JGAOewTgDusUoA6rBMAPC1QwD0ukUA9rxGAPm9QQDwskkA8rVNAPe+SAD1uk8A+L5IAPWp
|
||||||
|
UADyqlQA6rRRAO22UgDuuFQA47BbAPCyUQD0vFAA8r5WAPC2XAD4sV0AyZ5nAMSlfwDfr3MA2K19AOWt
|
||||||
|
YgDltmcA67NgAOm5YQDsu2oA77ptAPW+awDwvm0A+bhpAOizcQDiu34A7Lt9APS9cAD7wEIA+8FGAPnA
|
||||||
|
SAD4wk4A+MNZAPnEWgD6w2AA/ctkAMOnhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAABta58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbc2/a8oAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKpvpabIawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWcqgdHaa/awAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAG2JLR8dIM6tXgAAAAAAAAAAAAAAAAAAAAAAAAAAAABlsT0xIx8dLNJzngAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAUq58PDMxIyMdWdVr4gAAAAAAAAAAAAAAAAAAAAAAAJypj0REMzMxJSMdochr
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAADLcN9KRURERDMxJSMjw69lAAAAAAAAAAAAAAAAAAAAAFDhuH9KSkQzRDMx
|
||||||
|
JSMq0o1fAAAAAAAAAAAAAAAAAAAY4Nu4gUdHQ0VEM0QlJSNU2XPJAAAAAAAAAAAAAAAAT8TcuNuSTUpK
|
||||||
|
R0REMzsxJSNd1WsAAAAAAAAAAAAAAJtw3bi425hNTUpKSkRERDMzMSOryGsAAAAAAAAAAADMUd2Vl7i4
|
||||||
|
mIFNTU1KSkRERDMzMSXQr2wAAAAAAAAAABfBsJOXmLi4g01NTU1KSkRERDk5MS3ZdJ0AAAAAAAAMz7S0
|
||||||
|
urrFxbiETYFNTU1KSo+xlbq6tMfTa9gAAAAAAJoGBgYGCQkL35FLTU2BTU1KthkZKys1NmSgAAAAAAAA
|
||||||
|
AAAAAAAAAAnfl0pLTU1NgU29FgAAAAAAAAAAAAAAAAAAAAAAAAAABt2VgkpNgU1NTdwVAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAGxrGPSkpKTU2B2xQAAAAAAAAAAAAAAAAAAAAAAAAAAAbCi5BDREpLTU3cEwAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAABMGIi3xAR0pLTdwTAAAAAAAAAAAAAAAAAAAAAAAAAAADsoWKjzlEQ0pL3BEA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAOrhYWFOztEREq7EQAAAAAAAAAAAAAAAAAAAAAAAAAAA6tdXIV5OTtE
|
||||||
|
Q7YLAAAAAAAAAAAAAAAAAAAAAAAAAAABpVxcdn0nMztEtgkAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWFpd
|
||||||
|
di8nMzu1CQAAAAAAAAAAAAAAAAAAAAAAAAAAAaVTWFxdViUnJ7EGAAAAAAAAAAAAAAAAAAAAAAAAAAAB
|
||||||
|
YFNYWFhcKSQnsAYAAAAAAAAAAAAAAAAAAAAAAAAAAA/XYWBjoaF3VFZWDQAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAA8BAQEBAQEEBA4AAAAAAAAAAAAAAAD///////x////4P///8D///+Af///gD///wAf//4AD//8A
|
||||||
|
A//+AAH//gAA//wAAH/4AAB/8AAAP+AAAB/gAAAPwAAAB8AAAA//gAf//4AH//+AB///gAf//4AH//+A
|
||||||
|
B///gAf//4AH//+AB///gAf//4AH//+AB///gAf//8AP/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
|
||||||
|
AAAAAAAAAAEAAAABAAAAAAAApWYWAKhpGQCqbBsAqm0dAKxuHgCucCEAsHMjALJ2JgC2eioAuH4uALyC
|
||||||
|
MgC9gzQAvoU1AN+YEwDklw8A5ZkQAOmdEgDooBIA6aEUAO2hFQDtpRYA8KYXAPGqFwDxpxgA8qoZAPSr
|
||||||
|
GgD0rRoA86wcAPauHAD3sBoA97AcAPmwGgD4sRwAwIY3AMGJOQDDizwAxIs8AMWNPgDjnSUA5J4nAN6g
|
||||||
|
MADnoyAA5aAnAOSjKQDgoi8A7awpAPCsIwD6syIA+rcrAOKlMwDqqzIA6Kk3AOSpOgDpqz0A+rozAPq6
|
||||||
|
NADytjsA97s+APe8PAD5uzgA36VCAN+sVADgqUQA5axHAOmuQADkrUoA6bNKAO63TgDws0EA9btDAPS6
|
||||||
|
RQD6vkEA9LxMAPm+SADhrlUA5LJZAPK7UAD7wEMA+8NOAPbBUAD6xFIA+8VUAPDDaQD0xmwA9shtAPjK
|
||||||
|
bgD6zW8A8cmCAPPMhAD0zoYA99CHAPDPmQDw0JkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAACZcJgAAAAAAAAAAAAAAAAAAAAAAAAAAJjYnXSYAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAiRREPJ10mAAAAAAAAAAAAAAAAAAAAAAtHFhYQECddJgAAAAAAAAAAAAAAAAAACkobGxYRERAnXSYA
|
||||||
|
AAAAAAAAAAAAAAAJUjAbGxgbFhEQKF0mAAAAAAAAAAAAAAhSTjEgGxsbFhYRECtdJgAAAAAAAAAABjpI
|
||||||
|
SDggICAbGBgWERAnXSYAAAAAAAAFOVBSUk84IDAgGxtUW1paWlwmAAAAAAAABQUGBgg8IDAgMBtWCwsL
|
||||||
|
IiIAAAAAAAAAAAAAAAY6HiAgMCBXCgAAAAAAAAAAAAAAAAAAAAVHGx4wICBXCgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAVJGxseMCBXCQAAAAAAAAAAAAAAAAAAAAVJLxsbHjBXCAAAAAAAAAAAAAAAAAAAAAFELhYcGx5XCAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAFDMxMVGxtXBgAAAAAAAAAAAAAAAAAAAAFANCsWFhxVBgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAE/MisOEBZVBQAAAAAAAAAAAAAAAAAAAAE9KS0OEBNUAwAAAAAAAAAAAAAAAAAAAAE+S0xAND9TAwAA
|
||||||
|
AAAAAAAAAAAAAAAAAAABAQEBAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP/v
|
||||||
|
/wD/x/8A/4P/AP8B/wD+AP8A/AB/APgAPwDwAB8A4AAPAMAABwDgAA8A/gD/AP4A/wD+AP8A/gD/AP4A
|
||||||
|
/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP8B/wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
|
||||||
|
AAAAAQAAAAEAAAAAAAClZhYAsnYmALN4KQC4fi8A1Y0XANWOGADXkBkA2pUbANuVHADclhwA3poeAOCc
|
||||||
|
HwDgmyAA46EiAOaiIwDmpiMA56cnAOilIwDppiUA66omAO2rJwDuricA46YsAOyrKADurikA7q4sAPCv
|
||||||
|
KQDvsS4A8LAqAO2vMQDkpjgA5q8+AOqwOADwszIA4qtBAOi0TwDyvEoA7LlSAOSyXADnt18Aw5ljAMui
|
||||||
|
bQDqumEA5LhoAOa7cADpv3MA78FlAPDFdgDyyXkA88x6APXNegD20IAA6MeQAOnIkQDpyZcAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAP///wAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAzcCAAAAAAAAAAAAAAAAAycFNQIAAAAA
|
||||||
|
AAAAAAAAAysLCAY1BAAAAAAAAAAAAy8SDg0IBjUEAAAAAAAAAzMaFBIODQgINQQAAAAAAzQlIhQaEg4f
|
||||||
|
Li01BAAAKQEBAQEbGhQUMAQEBAQqAAAAAAABGxsbFDMEAAAAAAAAAAAAARwbGxszBAAAAAAAAAAAAAEe
|
||||||
|
FBsbMwQAAAAAAAAAAAABIRQcHDMEAAAAAAAAAAAAASARFBQzBAAAAAAAAAAAAAEjFw4WMwQAAAAAAAAA
|
||||||
|
AAABLCgkJjMDAAAAAAAAAAAAAAEBAQEBAAAAAAAA/v8AAPx/AAD4PwAA8B8AAOAPAADABwAAgAMAAAAB
|
||||||
|
AADwHwAA8B8AAPAfAADwHwAA8B8AAPAfAADwHwAA+D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABgAAAAgAAAAGAAAAAwAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFgAA
|
||||||
|
ABsAAAAWAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
|
||||||
|
AAwAAAAfAAAAMwAAADwAAAAyAAAAHQAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAACAAAACSccDyHPllLiypFQ4M2UUesdFQtZAAAANQAAABoAAAAJAAAAAgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAEAAAAHAAAAF8aOTb/RlU3z0pVH/82UU/K/iUvcAAAAUAAAADAAAAAWAAAABgAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAATs4BGjtOXUfXLfxn/0pE5/9ikYP7Rl1T3pXdBvQAA
|
||||||
|
AEoAAAAqAAAAEgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA+RaDhc0ZdR+M6HJv3Legf/yHUA/9aa
|
||||||
|
Sv/Tn1v51JlU+nxZMZcAAABDAAAAJAAAAA4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADFg/ITLPlE/1z4wz+NGC
|
||||||
|
DP/NewD/y3gA/8l3BP/apVv/zZdV89OYU/hHMxxzAAAAPAAAAB8AAAALAAAAAgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJJxwOIMiO
|
||||||
|
SuHNj0Dy1YkR/9ODBf/QfwH/zXsA/8t4AP/MfA3/3apl/8yXV/DLklDuHBQLXQAAADYAAAAaAAAACAAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
|
||||||
|
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
|
||||||
|
HP/1rRv/9Kwa//OqGf/xqBj/76QX/+6iFf/roBP/6JwS/+aZEP/klg//4JMN/96OC//bjQn/2YkI/9WF
|
||||||
|
Bv/fpkz/06Zp8s2TUPY/LRhtAAAAOQAAABwAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAEGRAFFKRqI9mwdibx56o3//G0Ov/ztjv/9bo8//a7Pv/5vED/+r1A//q+Qf/7wEP/+rgu//mx
|
||||||
|
G//5sh3/+bId//ixHP/2sBz/9a0b//SrGv/yqhn/8agY//CmF//uoxX/6qAT/+mdEf/mmRD/5JYP/+CT
|
||||||
|
Dv/ejwr/3IwK/9mJB//Whwn/4q5d/9GiZ+7Hj0znEg0HSAAAACcAAAAPAAAAAwAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAGoGcgpaluIvLdoDP/6q03/++yOf/xtDr/87Y7//S4PP/2uz3/+bw+//m9
|
||||||
|
QP/6vkL/+rs3//myHP/5sh3/+bId//myHf/5sR3/+LAc//WtHP/0rRv/9KsZ//KpGP/wphf/7qMV/+ug
|
||||||
|
E//onhL/55oR/+SXD//hlA3/3pAL/9yNCf/Zigf/2I0S/+S0aP/ToGPwvolJxAAAACcAAAARAAAABQAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiaB9ppmsg9dKVL//nqjX/67A3/+6yOP/wtDr/87Y7//W4
|
||||||
|
PP/4uz3/+b0+//m9QP/5vUD/+rw7//myHv/5sh3/+bId//myHf/5sh3/+LEd//iwHP/2rhv/9awb//Or
|
||||||
|
Gv/xqBn/8KYY/+6jFf/roBP/6p4Q/+icDv/llw3/4ZQK/9+QCf/cjQb/2okF/9mRHf/ismj40ZVQ9MGK
|
||||||
|
SogAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaR7PyYgn+uSdL//loDD/56Iy/+qk
|
||||||
|
M//rpjT/7qk3//CrOP/xrTn/8a05//CxOP/4vD7/+bxA//izJP/4sRz/+bId//myHf/5sh3/+bId//mx
|
||||||
|
Hf/4sBz/9q4c//WsG//zqxr/8qkY//GrI//xsDr/8bFF//W0Sf/2s0n/9LJI//OwSP/yr0f/8a1G//Cs
|
||||||
|
R//urEv/5ahV6dGVT+AAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkaR2XpGoe/6Vq
|
||||||
|
H/+mayD/pmwh/6hsIv+pbSP/qW4k/6twJf+scCf/rXIn/65zKf/6vDz/+LxA//a1Kv/2sBr/+bEd//my
|
||||||
|
Hf/5sh3/+bId//myHf/5sR3/+LAc//auHP/1rRv/9Ksa//a3Ov/EiED/xYlB/8aKQ//Hi0T/yY1G/8qO
|
||||||
|
R//Lj0n/zJBK/82RS//Ok0z/0JRN/9GVTpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1yJ//5uzv/9rs+//a3
|
||||||
|
Mf/1rhr/9rAc//iyHf/5sh3/+bId//myHf/5sh3/+bEd//iwHP/2rhz/9a0b//m5Ov/Chj//AAAAKwAA
|
||||||
|
AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKtw
|
||||||
|
Jf/4tzr/9Lg9//W3OP/0rRz/9a4b//awHP/4sh3/+bId//myHf/5sh3/+bId//mxHf/4sBz/9q4c//q8
|
||||||
|
O//AhT3/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKpvJP/0tTn/8rU8//O2Pf/zsSf/86wZ//WuG//2sBz/+LEd//myHf/5sh3/+bId//my
|
||||||
|
Hf/5sh3/+LEc//u9PP+/gzv/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
139
SCrawler/Download/AutoDownloaderEditorForm.vb
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
|
Imports DModes = SCrawler.DownloadObjects.AutoDownloader.Modes
|
||||||
|
Namespace DownloadObjects
|
||||||
|
Friend Class AutoDownloaderEditorForm
|
||||||
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
|
Private ReadOnly MyGroups As List(Of String)
|
||||||
|
Private ReadOnly Property Plan As AutoDownloader
|
||||||
|
Friend Sub New(ByRef _Plan As AutoDownloader)
|
||||||
|
InitializeComponent()
|
||||||
|
Plan = _Plan
|
||||||
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
|
MyGroups.ListAddList(Plan.Groups, LAP.NotContainsOnly)
|
||||||
|
End Sub
|
||||||
|
Private Class AutomationTimerChecker : Implements IFieldsCheckerProvider
|
||||||
|
Private Property ErrorMessage As String = "The timer value must be greater than 0" 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
|
||||||
|
If CInt(AConvert(Of Integer)(Value, -10)) > 0 Then
|
||||||
|
Return Value
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Private Function GetFormat(ByVal FormatType As Type) As Object Implements IFormatProvider.GetFormat
|
||||||
|
Throw New NotImplementedException()
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
|
Private Sub AutoDownloaderEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
|
With MyDefs
|
||||||
|
.MyViewInitialize(True)
|
||||||
|
.AddOkCancelToolbar()
|
||||||
|
With Plan
|
||||||
|
Select Case .Mode
|
||||||
|
Case DModes.None : OPT_DISABLED.Checked = True
|
||||||
|
Case DModes.All : OPT_ALL.Checked = True
|
||||||
|
Case DModes.Default : OPT_DEFAULT.Checked = True
|
||||||
|
Case DModes.Specified : OPT_SPEC.Checked = True
|
||||||
|
Case DModes.Groups : OPT_GROUP.Checked = True
|
||||||
|
End Select
|
||||||
|
DEF_GROUP.Set(Plan)
|
||||||
|
If MyGroups.Count > 0 Then TXT_GROUPS.Text = MyGroups.ListToString
|
||||||
|
If Settings.Groups.Count = 0 Then TXT_GROUPS.Clear() : TXT_GROUPS.Enabled = False
|
||||||
|
CH_NOTIFY.Checked = .ShowNotifications
|
||||||
|
CH_SHOW_PIC.Checked = .ShowPictureDownloaded
|
||||||
|
CH_SHOW_PIC_USER.Checked = .ShowPictureUser
|
||||||
|
TXT_TIMER.Text = .Timer
|
||||||
|
NUM_DELAY.Value = .StartupDelay
|
||||||
|
LBL_LAST_TIME_UP.Text = .Information
|
||||||
|
ChangeEnabled()
|
||||||
|
End With
|
||||||
|
.MyFieldsChecker = New FieldsChecker
|
||||||
|
With .MyFieldsCheckerE
|
||||||
|
.AddControl(Of String)(DEF_GROUP.TXT_NAME, DEF_GROUP.TXT_NAME.CaptionText,,
|
||||||
|
New Groups.GroupEditorForm.NameChecker(Plan.Name, Settings.Automation, "Plan"))
|
||||||
|
.AddControl(Of Integer)(TXT_TIMER, TXT_TIMER.CaptionText,, New AutomationTimerChecker)
|
||||||
|
.EndLoaderOperations()
|
||||||
|
End With
|
||||||
|
.EndLoaderOperations()
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Private Sub AutoDownloaderEditorForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
|
MyGroups.Clear()
|
||||||
|
End Sub
|
||||||
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
|
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
||||||
|
With Plan
|
||||||
|
Select Case True
|
||||||
|
Case OPT_DISABLED.Checked : .Mode = DModes.None
|
||||||
|
Case OPT_ALL.Checked : .Mode = DModes.All
|
||||||
|
Case OPT_DEFAULT.Checked : .Mode = DModes.Default
|
||||||
|
Case OPT_SPEC.Checked : .Mode = DModes.Specified
|
||||||
|
Case OPT_GROUP.Checked : .Mode = DModes.Groups
|
||||||
|
End Select
|
||||||
|
DEF_GROUP.Get(Plan)
|
||||||
|
.Groups.Clear()
|
||||||
|
.Groups.ListAddList(MyGroups)
|
||||||
|
.ShowNotifications = CH_NOTIFY.Checked
|
||||||
|
.ShowPictureDownloaded = CH_SHOW_PIC.Checked
|
||||||
|
.ShowPictureUser = CH_SHOW_PIC_USER.Checked
|
||||||
|
.Timer = AConvert(Of Integer)(TXT_TIMER.Text, AutoDownloader.DefaultTimer)
|
||||||
|
.StartupDelay = NUM_DELAY.Value
|
||||||
|
.Update()
|
||||||
|
End With
|
||||||
|
MyDefs.CloseForm()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub TXT_GROUPS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_GROUPS.ActionOnButtonClick
|
||||||
|
Select Case Sender.DefaultButton
|
||||||
|
Case ActionButton.DefaultButtons.Edit
|
||||||
|
Using f As New LabelsForm(MyGroups, Settings.Groups.Select(Function(g) g.Name)) With {.Text = "Groups"}
|
||||||
|
f.ShowDialog()
|
||||||
|
If f.DialogResult = DialogResult.OK Then MyGroups.ListAddList(f.LabelsList, LAP.ClearBeforeAdd) : TXT_GROUPS.Text = MyGroups.ListToString
|
||||||
|
End Using
|
||||||
|
Case ActionButton.DefaultButtons.Clear : MyGroups.Clear()
|
||||||
|
End Select
|
||||||
|
End Sub
|
||||||
|
Private Sub OPT_DISABLED_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_DISABLED.CheckedChanged
|
||||||
|
ChangeEnabled()
|
||||||
|
End Sub
|
||||||
|
Private Sub OPT_ALL_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_ALL.CheckedChanged
|
||||||
|
ChangeEnabled()
|
||||||
|
End Sub
|
||||||
|
Private Sub OPT_DEFAULT_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_DEFAULT.CheckedChanged
|
||||||
|
ChangeEnabled()
|
||||||
|
End Sub
|
||||||
|
Private Sub OPT_SPEC_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_SPEC.CheckedChanged
|
||||||
|
ChangeEnabled()
|
||||||
|
End Sub
|
||||||
|
Private Sub OPT_GROUP_CheckedChanged(sender As Object, e As EventArgs) Handles OPT_GROUP.CheckedChanged
|
||||||
|
ChangeEnabled()
|
||||||
|
End Sub
|
||||||
|
Private Sub CH_NOTIFY_CheckedChanged(sender As Object, e As EventArgs) Handles CH_NOTIFY.CheckedChanged
|
||||||
|
ChangeEnabled()
|
||||||
|
End Sub
|
||||||
|
Private Sub ChangeEnabled()
|
||||||
|
DEF_GROUP.Enabled = OPT_SPEC.Checked
|
||||||
|
TXT_GROUPS.Enabled = OPT_GROUP.Checked
|
||||||
|
TXT_TIMER.Enabled = Not OPT_DISABLED.Checked
|
||||||
|
NUM_DELAY.Enabled = Not OPT_DISABLED.Checked
|
||||||
|
CH_NOTIFY.Enabled = Not OPT_DISABLED.Checked
|
||||||
|
CH_SHOW_PIC.Enabled = CH_NOTIFY.Checked And Not OPT_DISABLED.Checked
|
||||||
|
CH_SHOW_PIC_USER.Enabled = CH_NOTIFY.Checked And Not OPT_DISABLED.Checked
|
||||||
|
End Sub
|
||||||
|
Private Sub NUM_DELAY_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles NUM_DELAY.ActionOnButtonClick
|
||||||
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Clear Then NUM_DELAY.Value = 0
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -11,7 +11,7 @@ Imports PersonalUtilities.Forms
|
|||||||
Imports SCrawler.DownloadObjects
|
Imports SCrawler.DownloadObjects
|
||||||
Imports SCrawler.Plugin.Hosts
|
Imports SCrawler.Plugin.Hosts
|
||||||
Friend Class DownloadSavedPostsForm
|
Friend Class DownloadSavedPostsForm
|
||||||
Friend Event OnDownloadDone(ByVal Message As String)
|
Friend Event OnDownloadDone As NotificationEventHandler
|
||||||
Private MyView As FormsView
|
Private MyView As FormsView
|
||||||
Private ReadOnly JobsList As List(Of DownloadProgress)
|
Private ReadOnly JobsList As List(Of DownloadProgress)
|
||||||
Friend ReadOnly Property Working As Boolean
|
Friend ReadOnly Property Working As Boolean
|
||||||
|
|||||||
2
SCrawler/Download/DownloadedInfoForm.Designer.vb
generated
@@ -152,10 +152,10 @@
|
|||||||
Me.Controls.Add(Me.LIST_DOWN)
|
Me.Controls.Add(Me.LIST_DOWN)
|
||||||
Me.Controls.Add(Me.ToolbarBOTTOM)
|
Me.Controls.Add(Me.ToolbarBOTTOM)
|
||||||
Me.Controls.Add(Me.ToolbarTOP)
|
Me.Controls.Add(Me.ToolbarTOP)
|
||||||
|
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MinimumSize = New System.Drawing.Size(570, 450)
|
Me.MinimumSize = New System.Drawing.Size(570, 450)
|
||||||
Me.Name = "DownloadedInfoForm"
|
Me.Name = "DownloadedInfoForm"
|
||||||
Me.ShowIcon = False
|
|
||||||
Me.Text = "Downloaded items"
|
Me.Text = "Downloaded items"
|
||||||
Me.ToolbarTOP.ResumeLayout(False)
|
Me.ToolbarTOP.ResumeLayout(False)
|
||||||
Me.ToolbarTOP.PerformLayout()
|
Me.ToolbarTOP.PerformLayout()
|
||||||
|
|||||||
@@ -198,4 +198,507 @@
|
|||||||
<metadata name="ToolbarBOTTOM.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ToolbarBOTTOM.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>133, 17</value>
|
<value>133, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAwAMDAQAAEABABoBgAAxgAAACAgEAABAAQA6AIAAC4HAAAYGBAAAQAEAOgBAAAWCgAAEBAQAAEA
|
||||||
|
BAAoAQAA/gsAADAwAAABAAgAqA4AACYNAAAgIAAAAQAIAKgIAADOGwAAGBgAAAEACADIBgAAdiQAABAQ
|
||||||
|
AAABAAgAaAUAAD4rAAAwMAAAAQAgAKglAACmMAAAICAAAAEAIACoEAAATlYAABgYAAABACAAiAkAAPZm
|
||||||
|
AAAQEAAAAQAgAGgEAAB+cAAAKAAAADAAAABgAAAAAQAEAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP//
|
||||||
|
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjsjgAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAIbOh4AAAAAAAAAAAAAAAAAAAAAAAAAAAH5mfsgAAAAAAAAAAAAAAAAAAAAAAAAAB+
|
||||||
|
xs54YAAAAAAAAAAAAAAAAAAAAAAAAAfsbmxo5wAAAAAAAAAAAAAAAAAAAAAAAIbObObOeMAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAACG5+zmzsaOgAAAAAAAAAAAAAAAAAAAAABn7ObOZmbneAAAAAAAAAAAAAAAAAAAAAfs5s
|
||||||
|
5+zs7I7AAAAAAAAAAAAAAAAAAAAH7Ofm7G7GbGiOAAAAAAAAAAAAAAAAAAB+fs7Ofs5+zmzngAAAAAAA
|
||||||
|
AAAAAAAAAAhn7Ojs5uzm7OZ4yAAAAAAAAAAAAAAAAAaOfm7Obsfsbs7OjnAAAAAAAAAAAAAAAH7Ojs7n
|
||||||
|
7O7ObOZs54AAAAAAAAAAAAAABn6Ozuduzn5uznzmyOcAAAAAAAAAAAAAfn7I6M7s5+zn7Obs5oyAAAAA
|
||||||
|
AAAAAAAIZ+jujuzo7Obs5uxubOjnAAAAAAAAAAAG586M5+js7n7OfOfs5s54cAAAAAAAAABnzo7o5+zu
|
||||||
|
fs5+5uzmzmzowAAAAAAAAAdujn5+fu7Ozuzs7Ofs5+bI6AAAAAAAAHzn7OjOjI5+5+jufs5uzs5ueOAA
|
||||||
|
AAAAAG6M6O6O7n7Ofs7Ozo7Ofmzs53gAAAAAB+zo7IznyOzuzufufs6Ofo6Ofn4AAAAACEdsZ2Z87o5+
|
||||||
|
js7O7O5cjHx8jIgAAAAAAAAAAAAAfOfs7Ojs6OfgAAAAAAAAAAAAAAAAAAAAbo7O6O7O7OfAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAfsjm7Obo7s6AAAAAAAAAAAAAAAAAAAAAaO5+zo7OyO5wAAAAAAAAAAAAAAAAAAAAzn7O
|
||||||
|
js7n7sjAAAAAAAAAAAAAAAAAAAAAaM6Ozuzuzu5wAAAAAAAAAAAAAAAAAAAAbn7Obn5+jshgAAAAAAAA
|
||||||
|
AAAAAAAAAAAAbOjn7Ozs7O5wAAAAAAAAAAAAAAAAAAAAfnzn5+bn7n7AAAAAAAAAAAAAAAAAAAAAbOjs
|
||||||
|
7OzuzshgAAAAAAAAAAAAAAAAAAAAaOyOfn7I5+5wAAAAAAAAAAAAAAAAAAAAbOfs7Ozm7OfAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAbnzn5+bs5u5wAAAAAAAAAAAAAAAAAAAAfOfsjOx+zn7AAAAAAAAAAAAAAAAAAAAAbnzn
|
||||||
|
5o7OfshgAAAAAAAAAAAAAAAAAAAAx+Z+zs5uzm5gAAAAAAAAAAAAAAAAAAAAbs7H5+fObsjAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAZ2js585s7O5wAAAAAAAAAAAAAAAAAAAAjOyH5+jn53aAAAAAAAAAAAAAAAAAAAAACGZs
|
||||||
|
bHxsfGgAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP///
|
||||||
|
AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4
|
||||||
|
AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/
|
||||||
|
AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//
|
||||||
|
AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAC
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
|
||||||
|
AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5+AAAAAAAAAAAAAAAAAA
|
||||||
|
BoyHAAAAAAAAAAAAAAAAAOfn7AAAAAAAAAAAAAAAAAjIzn6AAAAAAAAAAAAAAAAO5uxo7AAAAAAAAAAA
|
||||||
|
AAAAaM7ObI6AAAAAAAAAAAAADn5ubOboyAAAAAAAAAAAAH7Ozs5sbo4AAAAAAAAAAAjI5+fn7saM4AAA
|
||||||
|
AAAAAAAO7n7Ozsbs6OcAAAAAAAAAaH7O5+bn5s6MgAAAAAAABo7o5+zs7Ozm6OAAAAAAAH7I7Ozufn5u
|
||||||
|
zsfsAAAAAAjOjn6Ofs7s5+bsjnAAAAAG6Ozo7O7n5+zs5ujnAAAAaOyOjo587Ozo6I7IjIAAAGxmxsZ+
|
||||||
|
7o7uzsbG7O4AAAAAAAAM587OyOhgAAAAAAAAAAAABo7n5+7OYAAAAAAAAAAAAAzozuzujsAAAAAAAAAA
|
||||||
|
AAAGjufuzs5wAAAAAAAAAAAADOfOyOfowAAAAAAAAAAAAAaOfm7O7mAAAAAAAAAAAAAM7Ofs5sjAAAAA
|
||||||
|
AAAAAAAABn585+7oYAAAAAAAAAAAAAyM6Oxs58AAAAAAAAAAAAAG5+zm5+5gAAAAAAAAAAAABOx+fs7I
|
||||||
|
wAAAAAAAAAAAAAZ+Z8hs7kAAAAAAAAAAAAAMjOjm52fAAAAAAAAAAAAAAGbExsbOAAAAAAAA///////8
|
||||||
|
f///+D////A////gH///4A///8AH//+AA///AAP//gAB//4AAP/8AAB/+AAAf/AAAD/gAAAf4AAAD8AA
|
||||||
|
AAfAAAAP/4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH//+AB///gAf//4AH///A
|
||||||
|
D/8oAAAAGAAAADAAAAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA
|
||||||
|
AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAABgAAAAAAAAAAAAAAeOAAAAAAAAAAAAAG7IcAAAAAAAAAAAB+fujgAAAAAAAAAAbs7OyHAAAAAAAA
|
||||||
|
AGjufm7oYAAAAAAABo7OzsfOhwAAAAAAaO5+5+7s6GAAAAAG5+zs7Ozn7PYAAABo6Ojo7n6IjojgAAAM
|
||||||
|
bGzs7OyOx+wAAAAAAAfo7o7nAAAAAAAAAAaM7OyGAAAAAAAAAAbufu6MAAAAAAAAAAd+zn6GAAAAAAAA
|
||||||
|
AAzn7OznAAAAAAAAAAaOzuiGAAAAAAAAAAbn587sAAAAAAAAAAZ87m6GAAAAAAAAAAzozs6MAAAAAAAA
|
||||||
|
AAaOh+eGAAAAAAAAAABsbGxgAAAAAAAAAAAAAAAAAAAAAP///wD/7/8A/8f/AP+D/wD/Af8A/gD/APwA
|
||||||
|
fwD4AD8A8AAfAOAADwDAAAcA4AAPAP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP4A
|
||||||
|
/wD/Af8A////ACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACA
|
||||||
|
AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAABgAA
|
||||||
|
AAAAAABoYAAAAAAABo6MAAAAAABozshgAAAABo5uboYAAABo7OfOeGAABo5+fn6OhgB2xs7O6MfHgAAA
|
||||||
|
aOfIYAAAAABuzujgAAAAAGjn6MAAAAAAzs5+cAAAAABo5+jAAAAAAG7OyOAAAAAAaI6OcAAAAAAMbGYA
|
||||||
|
AAD+/wAA/H8AAPg/AADwHwAA4A8AAMAHAACAAwAAAAEAAPAfAADwHwAA8B8AAPAfAADwHwAA8B8AAPAf
|
||||||
|
AAD4PwAAKAAAADAAAABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAACjaB0ApmsgAKlt
|
||||||
|
IwCrcCYArXMqALF1LACzeC4ArHYwALR6MQC4fTQAt385AMh1AADJdwQAy3gAAM17AADOfQEAy3oHAM5/
|
||||||
|
CQDMfA0A0H4BAMt/GQC7gDcAvoI6ALmBPADRgAIA0oIEANSDBADVhQUA1ogGANaMBwDZiQYA3I0GANKE
|
||||||
|
CgDWhwkA0YIMANaMCwDZiggA2o0JANyOCQDbkgsA3pAKAN6UCwDekg0A3ZQNAM+EGgDRhhUA1YkSANiN
|
||||||
|
EgDajhcA2pISANqSHgDalh4A3ZgaAOGUCgDgkg0A4ZUOAOSWDgDhmA4A5ZgPAOicDgDklxAA45cVAOGY
|
||||||
|
EADlmRAA5ZwRAOSdFwDonRIA550YAOmfGwDpoBIA6qEUAO2iFADrpBQA7qUWAO6mGADvqBgA8KUXAPCm
|
||||||
|
GADxqRgA9KsZAPKsGgD0rBoA9a0cAPiuGgD1sBsA+bEbAPixHADOhycAzo0lAMqKKwDRjCIA0Y8lANSP
|
||||||
|
JgDTji0A05ImANiRIwDdnScA1JQpANmVKwDXmCoA25stAMGJNQDAhj0A0I84AM2VPwDTmTYA3JwyANKR
|
||||||
|
OQDSlDgA2Js6AOGeIADknS8A3qAxANyiPwDopCAA7qogAOKiLQDtqykA8asjAPOxJwD6syAA+LMkAPq1
|
||||||
|
JwD2tSoA+rYsAPq4LgDiozEA6qUzAOepNQDpqTEA66wyAOmrNwDtqjUA6qw2AO2vNQDjpjoA6aw4AOir
|
||||||
|
PwDwrDgA67A3AO2xOQDssT8A8rIwAPazMwD2tzEA8bE2APq7NgDytDoA+Lc6APW5PAD5uToA+bw7APi7
|
||||||
|
PQD5vD0A/L49APzAPgCxgEMAv4VAALaFSAC5h0sAvJZmALyacgC5mnYAxYlBAMOLRgDHi0QAyY1GAMaO
|
||||||
|
SgDJj0oAyZBEAMyQSgDPlEkAypFNAM6TTADNlE4A0pVHANebQwDUnUUA0JRNANaaSgDDkVUAzpZWAM2X
|
||||||
|
WwDOmVsAzZpdANGZVgDUmlcA0ppaANOcWwDQnF4A16BHANqiSADapUkA3adLAN2lTQDbo1QA1KFeANql
|
||||||
|
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
|
||||||
|
AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///j///8AAP//8H///wAA///gP///
|
||||||
|
AAD//+Af//8AAP//wB///wAA//+AD///AAD//wAH//8AAP/+AAP//wAA//4AAf//AAD//AAB//8AAP/4
|
||||||
|
AAD//wAA//AAAH//AAD/4AAAP/8AAP/gAAAf/wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/
|
||||||
|
AAD+AAAAAf8AAPwAAAAB/wAA+AAAAAD/AADwAAAAAH8AAPAAAAAAPwAA4AAAAAA/AADgAAAAAD8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//
|
||||||
|
AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//wAAf//AAD//AAB//8AAP/8
|
||||||
|
AAH//wAA//wAAf//AAD//AAB//8AAP/8AAH//wAA//4AA///AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
|
||||||
|
AAAAAAAAAAAAAAABAAAAAQAAAAAAAKdIAACpSgAArU0AALBSAACxVQAAtFYAALdYAAC5WwAAuVwAALxe
|
||||||
|
AAC/YQAAvGgNALllFwC5Zx8AtWUpAMJkAADFaAAAyGsAAMxuAgDOcQYA0nYJANR5DQDFdREAz34aANd8
|
||||||
|
EADafxMA0IAGANSDBQDThAYA1YUFANiJBwDThg8A2YoIANqNCQDcjQoA25AKAN2QCgDekQ0A35UNAN2A
|
||||||
|
FgDXjxAA2Y4UAN6DGQDWjBsA3ZEQAN6UFgDdmBgA4JMKAOCSDQDhlQ4A5ZcPAOSZDgDghhsA44geAOSW
|
||||||
|
EADjmxEA5ZoQAOScEQDnnxQA6Z0SAOWcGgDpoBIA6aEUAO2iFADtpBYA5qAZAO+oGgDwphcA8acYAPGp
|
||||||
|
GAD0qxkA86waAPSsGgD1rhwA9rAbAPawHAD4sBoA+LEcAMyAIADXhSMA0IUnAN+NKgDRkScA2pYhAN2b
|
||||||
|
IwDcmyUA05MoANWWKQDali8A2ZksANucLQDcnS4A3Z0xAN2TOwDblT8A1po7ANKYPADVmj0A154+AOaO
|
||||||
|
JADjkCoA5ZIuAOqTKgDtkysA7ZQrAOiTLQDulSwA4pIxAOmWMQDrlzUA6J02AOOaOQDgnTwA6pw5APCa
|
||||||
|
NADynj0A36AvAN6hMADdoDgA2aE/AOSgIQDioSYA7KchAO2oJgDgoCkA6agrAPewIAD5tCIA+bQnAPOx
|
||||||
|
KAD5tigA+bcvAOOmMgDjpjQA5KU0AOepNQDnrD8A6Ko4AOyvOADprj8A86A/AO+zOgDysjAA8LE3APe4
|
||||||
|
NgD7ujEA8rY7APCzPQDytj4A9Lg6APW6PQD7vDoA+b0+AMWARADPkEUA3ZlEANmbTQDPnF8A0phUAOqe
|
||||||
|
QgDdoEEA2aJGAN2kRADep0kA3aVOANuiUADdplQA4ahGAO2qRwDooEgA4alKAOOtTQDzoUAA869EAPap
|
||||||
|
TgDsskAA77JGAOewTgDusUoA6rBMAPC1QwD0ukUA9rxGAPm9QQDwskkA8rVNAPe+SAD1uk8A+L5IAPWp
|
||||||
|
UADyqlQA6rRRAO22UgDuuFQA47BbAPCyUQD0vFAA8r5WAPC2XAD4sV0AyZ5nAMSlfwDfr3MA2K19AOWt
|
||||||
|
YgDltmcA67NgAOm5YQDsu2oA77ptAPW+awDwvm0A+bhpAOizcQDiu34A7Lt9APS9cAD7wEIA+8FGAPnA
|
||||||
|
SAD4wk4A+MNZAPnEWgD6w2AA/ctkAMOnhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAABta58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbc2/a8oAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKpvpabIawAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWcqgdHaa/awAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAG2JLR8dIM6tXgAAAAAAAAAAAAAAAAAAAAAAAAAAAABlsT0xIx8dLNJzngAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAUq58PDMxIyMdWdVr4gAAAAAAAAAAAAAAAAAAAAAAAJypj0REMzMxJSMdochr
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAADLcN9KRURERDMxJSMjw69lAAAAAAAAAAAAAAAAAAAAAFDhuH9KSkQzRDMx
|
||||||
|
JSMq0o1fAAAAAAAAAAAAAAAAAAAY4Nu4gUdHQ0VEM0QlJSNU2XPJAAAAAAAAAAAAAAAAT8TcuNuSTUpK
|
||||||
|
R0REMzsxJSNd1WsAAAAAAAAAAAAAAJtw3bi425hNTUpKSkRERDMzMSOryGsAAAAAAAAAAADMUd2Vl7i4
|
||||||
|
mIFNTU1KSkRERDMzMSXQr2wAAAAAAAAAABfBsJOXmLi4g01NTU1KSkRERDk5MS3ZdJ0AAAAAAAAMz7S0
|
||||||
|
urrFxbiETYFNTU1KSo+xlbq6tMfTa9gAAAAAAJoGBgYGCQkL35FLTU2BTU1KthkZKys1NmSgAAAAAAAA
|
||||||
|
AAAAAAAAAAnfl0pLTU1NgU29FgAAAAAAAAAAAAAAAAAAAAAAAAAABt2VgkpNgU1NTdwVAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAGxrGPSkpKTU2B2xQAAAAAAAAAAAAAAAAAAAAAAAAAAAbCi5BDREpLTU3cEwAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAABMGIi3xAR0pLTdwTAAAAAAAAAAAAAAAAAAAAAAAAAAADsoWKjzlEQ0pL3BEA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAOrhYWFOztEREq7EQAAAAAAAAAAAAAAAAAAAAAAAAAAA6tdXIV5OTtE
|
||||||
|
Q7YLAAAAAAAAAAAAAAAAAAAAAAAAAAABpVxcdn0nMztEtgkAAAAAAAAAAAAAAAAAAAAAAAAAAAGhWFpd
|
||||||
|
di8nMzu1CQAAAAAAAAAAAAAAAAAAAAAAAAAAAaVTWFxdViUnJ7EGAAAAAAAAAAAAAAAAAAAAAAAAAAAB
|
||||||
|
YFNYWFhcKSQnsAYAAAAAAAAAAAAAAAAAAAAAAAAAAA/XYWBjoaF3VFZWDQAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAA8BAQEBAQEEBA4AAAAAAAAAAAAAAAD///////x////4P///8D///+Af///gD///wAf//4AD//8A
|
||||||
|
A//+AAH//gAA//wAAH/4AAB/8AAAP+AAAB/gAAAPwAAAB8AAAA//gAf//4AH//+AB///gAf//4AH//+A
|
||||||
|
B///gAf//4AH//+AB///gAf//4AH//+AB///gAf//8AP/ygAAAAYAAAAMAAAAAEACAAAAAAAQAIAAAAA
|
||||||
|
AAAAAAAAAAEAAAABAAAAAAAApWYWAKhpGQCqbBsAqm0dAKxuHgCucCEAsHMjALJ2JgC2eioAuH4uALyC
|
||||||
|
MgC9gzQAvoU1AN+YEwDklw8A5ZkQAOmdEgDooBIA6aEUAO2hFQDtpRYA8KYXAPGqFwDxpxgA8qoZAPSr
|
||||||
|
GgD0rRoA86wcAPauHAD3sBoA97AcAPmwGgD4sRwAwIY3AMGJOQDDizwAxIs8AMWNPgDjnSUA5J4nAN6g
|
||||||
|
MADnoyAA5aAnAOSjKQDgoi8A7awpAPCsIwD6syIA+rcrAOKlMwDqqzIA6Kk3AOSpOgDpqz0A+rozAPq6
|
||||||
|
NADytjsA97s+APe8PAD5uzgA36VCAN+sVADgqUQA5axHAOmuQADkrUoA6bNKAO63TgDws0EA9btDAPS6
|
||||||
|
RQD6vkEA9LxMAPm+SADhrlUA5LJZAPK7UAD7wEMA+8NOAPbBUAD6xFIA+8VUAPDDaQD0xmwA9shtAPjK
|
||||||
|
bgD6zW8A8cmCAPPMhAD0zoYA99CHAPDPmQDw0JkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAACZcJgAAAAAAAAAAAAAAAAAAAAAAAAAAJjYnXSYAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAiRREPJ10mAAAAAAAAAAAAAAAAAAAAAAtHFhYQECddJgAAAAAAAAAAAAAAAAAACkobGxYRERAnXSYA
|
||||||
|
AAAAAAAAAAAAAAAJUjAbGxgbFhEQKF0mAAAAAAAAAAAAAAhSTjEgGxsbFhYRECtdJgAAAAAAAAAABjpI
|
||||||
|
SDggICAbGBgWERAnXSYAAAAAAAAFOVBSUk84IDAgGxtUW1paWlwmAAAAAAAABQUGBgg8IDAgMBtWCwsL
|
||||||
|
IiIAAAAAAAAAAAAAAAY6HiAgMCBXCgAAAAAAAAAAAAAAAAAAAAVHGx4wICBXCgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAVJGxseMCBXCQAAAAAAAAAAAAAAAAAAAAVJLxsbHjBXCAAAAAAAAAAAAAAAAAAAAAFELhYcGx5XCAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAFDMxMVGxtXBgAAAAAAAAAAAAAAAAAAAAFANCsWFhxVBgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAE/MisOEBZVBQAAAAAAAAAAAAAAAAAAAAE9KS0OEBNUAwAAAAAAAAAAAAAAAAAAAAE+S0xAND9TAwAA
|
||||||
|
AAAAAAAAAAAAAAAAAAABAQEBAwEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP/v
|
||||||
|
/wD/x/8A/4P/AP8B/wD+AP8A/AB/APgAPwDwAB8A4AAPAMAABwDgAA8A/gD/AP4A/wD+AP8A/gD/AP4A
|
||||||
|
/wD+AP8A/gD/AP4A/wD+AP8A/gD/AP8B/wD///8AKAAAABAAAAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAA
|
||||||
|
AAAAAQAAAAEAAAAAAAClZhYAsnYmALN4KQC4fi8A1Y0XANWOGADXkBkA2pUbANuVHADclhwA3poeAOCc
|
||||||
|
HwDgmyAA46EiAOaiIwDmpiMA56cnAOilIwDppiUA66omAO2rJwDuricA46YsAOyrKADurikA7q4sAPCv
|
||||||
|
KQDvsS4A8LAqAO2vMQDkpjgA5q8+AOqwOADwszIA4qtBAOi0TwDyvEoA7LlSAOSyXADnt18Aw5ljAMui
|
||||||
|
bQDqumEA5LhoAOa7cADpv3MA78FlAPDFdgDyyXkA88x6APXNegD20IAA6MeQAOnIkQDpyZcAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAP///wAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAzcCAAAAAAAAAAAAAAAAAycFNQIAAAAA
|
||||||
|
AAAAAAAAAysLCAY1BAAAAAAAAAAAAy8SDg0IBjUEAAAAAAAAAzMaFBIODQgINQQAAAAAAzQlIhQaEg4f
|
||||||
|
Li01BAAAKQEBAQEbGhQUMAQEBAQqAAAAAAABGxsbFDMEAAAAAAAAAAAAARwbGxszBAAAAAAAAAAAAAEe
|
||||||
|
FBsbMwQAAAAAAAAAAAABIRQcHDMEAAAAAAAAAAAAASARFBQzBAAAAAAAAAAAAAEjFw4WMwQAAAAAAAAA
|
||||||
|
AAABLCgkJjMDAAAAAAAAAAAAAAEBAQEBAAAAAAAA/v8AAPx/AAD4PwAA8B8AAOAPAADABwAAgAMAAAAB
|
||||||
|
AADwHwAA8B8AAPAfAADwHwAA8B8AAPAfAADwHwAA+D8AACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABgAAAAgAAAAGAAAAAwAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAFgAA
|
||||||
|
ABsAAAAWAAAACwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
|
||||||
|
AAwAAAAfAAAAMwAAADwAAAAyAAAAHQAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAACAAAACSccDyHPllLiypFQ4M2UUesdFQtZAAAANQAAABoAAAAJAAAAAgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAEAAAAHAAAAF8aOTb/RlU3z0pVH/82UU/K/iUvcAAAAUAAAADAAAAAWAAAABgAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAATs4BGjtOXUfXLfxn/0pE5/9ikYP7Rl1T3pXdBvQAA
|
||||||
|
AEoAAAAqAAAAEgAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA+RaDhc0ZdR+M6HJv3Legf/yHUA/9aa
|
||||||
|
Sv/Tn1v51JlU+nxZMZcAAABDAAAAJAAAAA4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADFg/ITLPlE/1z4wz+NGC
|
||||||
|
DP/NewD/y3gA/8l3BP/apVv/zZdV89OYU/hHMxxzAAAAPAAAAB8AAAALAAAAAgAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJJxwOIMiO
|
||||||
|
SuHNj0Dy1YkR/9ODBf/QfwH/zXsA/8t4AP/MfA3/3apl/8yXV/DLklDuHBQLXQAAADYAAAAaAAAACAAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
|
||||||
|
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
|
||||||
|
HP/1rRv/9Kwa//OqGf/xqBj/76QX/+6iFf/roBP/6JwS/+aZEP/klg//4JMN/96OC//bjQn/2YkI/9WF
|
||||||
|
Bv/fpkz/06Zp8s2TUPY/LRhtAAAAOQAAABwAAAAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAEGRAFFKRqI9mwdibx56o3//G0Ov/ztjv/9bo8//a7Pv/5vED/+r1A//q+Qf/7wEP/+rgu//mx
|
||||||
|
G//5sh3/+bId//ixHP/2sBz/9a0b//SrGv/yqhn/8agY//CmF//uoxX/6qAT/+mdEf/mmRD/5JYP/+CT
|
||||||
|
Dv/ejwr/3IwK/9mJB//Whwn/4q5d/9GiZ+7Hj0znEg0HSAAAACcAAAAPAAAAAwAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAGoGcgpaluIvLdoDP/6q03/++yOf/xtDr/87Y7//S4PP/2uz3/+bw+//m9
|
||||||
|
QP/6vkL/+rs3//myHP/5sh3/+bId//myHf/5sR3/+LAc//WtHP/0rRv/9KsZ//KpGP/wphf/7qMV/+ug
|
||||||
|
E//onhL/55oR/+SXD//hlA3/3pAL/9yNCf/Zigf/2I0S/+S0aP/ToGPwvolJxAAAACcAAAARAAAABQAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiaB9ppmsg9dKVL//nqjX/67A3/+6yOP/wtDr/87Y7//W4
|
||||||
|
PP/4uz3/+b0+//m9QP/5vUD/+rw7//myHv/5sh3/+bId//myHf/5sh3/+LEd//iwHP/2rhv/9awb//Or
|
||||||
|
Gv/xqBn/8KYY/+6jFf/roBP/6p4Q/+icDv/llw3/4ZQK/9+QCf/cjQb/2okF/9mRHf/ismj40ZVQ9MGK
|
||||||
|
SogAAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaR7PyYgn+uSdL//loDD/56Iy/+qk
|
||||||
|
M//rpjT/7qk3//CrOP/xrTn/8a05//CxOP/4vD7/+bxA//izJP/4sRz/+bId//myHf/5sh3/+bId//mx
|
||||||
|
Hf/4sBz/9q4c//WsG//zqxr/8qkY//GrI//xsDr/8bFF//W0Sf/2s0n/9LJI//OwSP/yr0f/8a1G//Cs
|
||||||
|
R//urEv/5ahV6dGVT+AAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkaR2XpGoe/6Vq
|
||||||
|
H/+mayD/pmwh/6hsIv+pbSP/qW4k/6twJf+scCf/rXIn/65zKf/6vDz/+LxA//a1Kv/2sBr/+bEd//my
|
||||||
|
Hf/5sh3/+bId//myHf/5sR3/+LAc//auHP/1rRv/9Ksa//a3Ov/EiED/xYlB/8aKQ//Hi0T/yY1G/8qO
|
||||||
|
R//Lj0n/zJBK/82RS//Ok0z/0JRN/9GVTpcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1yJ//5uzv/9rs+//a3
|
||||||
|
Mf/1rhr/9rAc//iyHf/5sh3/+bId//myHf/5sh3/+bEd//iwHP/2rhz/9a0b//m5Ov/Chj//AAAAKwAA
|
||||||
|
AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKtw
|
||||||
|
Jf/4tzr/9Lg9//W3OP/0rRz/9a4b//awHP/4sh3/+bId//myHf/5sh3/+bId//mxHf/4sBz/9q4c//q8
|
||||||
|
O//AhT3/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAKpvJP/0tTn/8rU8//O2Pf/zsSf/86wZ//WuG//2sBz/+LEd//myHf/5sh3/+bId//my
|
||||||
|
Hf/5sh3/+LEc//u9PP+/gzv/AAAAKwAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
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
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -11,7 +11,7 @@ Imports PersonalUtilities.Forms
|
|||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Namespace DownloadObjects
|
Namespace DownloadObjects
|
||||||
Friend Class DownloadedInfoForm
|
Friend Class DownloadedInfoForm
|
||||||
Friend Event OnUserLooking(ByVal Key As String)
|
Friend Event UserFind(ByVal Key As String)
|
||||||
Private MyView As FormsView
|
Private MyView As FormsView
|
||||||
Private ReadOnly LParams As New ListAddParams(LAP.IgnoreICopier) With {.Error = EDP.None}
|
Private ReadOnly LParams As New ListAddParams(LAP.IgnoreICopier) With {.Error = EDP.None}
|
||||||
Private Opened As Boolean = False
|
Private Opened As Boolean = False
|
||||||
@@ -55,7 +55,7 @@ Namespace DownloadObjects
|
|||||||
End If
|
End If
|
||||||
BTT_CLEAR.Visible = ViewMode = ViewModes.Session
|
BTT_CLEAR.Visible = ViewMode = ViewModes.Session
|
||||||
RefillList()
|
RefillList()
|
||||||
Catch ex As Exception
|
Catch
|
||||||
Finally
|
Finally
|
||||||
Opened = True
|
Opened = True
|
||||||
End Try
|
End Try
|
||||||
@@ -143,7 +143,7 @@ Namespace DownloadObjects
|
|||||||
Try
|
Try
|
||||||
If _LatestSelected.ValueBetween(0, LIST_DOWN.Items.Count - 1) AndAlso _LatestSelected.ValueBetween(0, Downloader.Downloaded.Count - 1) Then
|
If _LatestSelected.ValueBetween(0, LIST_DOWN.Items.Count - 1) AndAlso _LatestSelected.ValueBetween(0, Downloader.Downloaded.Count - 1) Then
|
||||||
Dim i% = Settings.Users.IndexOf(_TempUsersList(_LatestSelected))
|
Dim i% = Settings.Users.IndexOf(_TempUsersList(_LatestSelected))
|
||||||
If i >= 0 Then RaiseEvent OnUserLooking(Settings.Users(i).Key)
|
If i >= 0 Then RaiseEvent UserFind(Settings.Users(i).Key)
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
End Try
|
End Try
|
||||||
@@ -161,9 +161,9 @@ Namespace DownloadObjects
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub LIST_DOWN_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_DOWN.MouseDoubleClick
|
Private Sub LIST_DOWN_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_DOWN.MouseDoubleClick
|
||||||
Try
|
Try
|
||||||
If _LatestSelected >= 0 AndAlso _LatestSelected <= _TempUsersList.Count - 1 AndAlso
|
If _LatestSelected.ValueBetween(0, _TempUsersList.Count - 1) AndAlso
|
||||||
Not DirectCast(_TempUsersList(_LatestSelected), UserDataBase).Disposed Then _TempUsersList(_LatestSelected).OpenFolder()
|
Not DirectCast(_TempUsersList(_LatestSelected), UserDataBase).Disposed Then _TempUsersList(_LatestSelected).OpenFolder()
|
||||||
Catch ex As Exception
|
Catch
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub Downloader_OnDownloadCountChange()
|
Friend Sub Downloader_OnDownloadCountChange()
|
||||||
|
|||||||
@@ -11,28 +11,17 @@ Imports PersonalUtilities.Functions.XML.Base
|
|||||||
Imports SCrawler.API
|
Imports SCrawler.API
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Namespace DownloadObjects.Groups
|
Namespace DownloadObjects.Groups
|
||||||
Friend Class DownloadGroup : Implements IIndexable, IEContainerProvider, IDisposable
|
Friend Class DownloadGroup : Inherits GroupParameters : Implements IIndexable, IEContainerProvider
|
||||||
Friend Delegate Sub GroupEventHandler(ByVal Sender As DownloadGroup)
|
Friend Delegate Sub GroupEventHandler(ByVal Sender As DownloadGroup)
|
||||||
Friend Event Deleted As GroupEventHandler
|
Friend Event Deleted As GroupEventHandler
|
||||||
Friend Event Updated As GroupEventHandler
|
Friend Event Updated As GroupEventHandler
|
||||||
#Region "XML Names"
|
|
||||||
Private Const Name_Name As String = "Name"
|
|
||||||
Private Const Name_Temporary As String = "Temporary"
|
|
||||||
Private Const Name_Favorite As String = "Favorite"
|
|
||||||
Private Const Name_ReadyForDownload As String = "RFD"
|
|
||||||
Private Const Name_ReadyForDownloadIgnore As String = "RFDI"
|
|
||||||
#End Region
|
|
||||||
Private WithEvents BTT_EDIT As ToolStripMenuItem
|
Private WithEvents BTT_EDIT As ToolStripMenuItem
|
||||||
Private WithEvents BTT_DELETE As ToolStripMenuItem
|
Private WithEvents BTT_DELETE As ToolStripMenuItem
|
||||||
Private WithEvents BTT_DOWNLOAD As ToolStripMenuItem
|
Private WithEvents BTT_DOWNLOAD As ToolStripMenuItem
|
||||||
Private WithEvents BTT_DOWNLOAD_FULL As ToolStripMenuItem
|
Private WithEvents BTT_DOWNLOAD_FULL As ToolStripMenuItem
|
||||||
Private ReadOnly SEP_1 As ToolStripSeparator
|
Private ReadOnly SEP_1 As ToolStripSeparator
|
||||||
Private WithEvents BTT_MENU As ToolStripMenuItem
|
Private WithEvents BTT_MENU As ToolStripMenuItem
|
||||||
Friend Property Temporary As CheckState = CheckState.Indeterminate
|
Friend Property NameBefore As String = String.Empty
|
||||||
Friend Property Favorite As CheckState = CheckState.Indeterminate
|
|
||||||
Friend Property ReadyForDownload As Boolean = True
|
|
||||||
Friend Property ReadyForDownloadIgnore As Boolean = False
|
|
||||||
Friend Property Name As String
|
|
||||||
Private _Key As String = String.Empty
|
Private _Key As String = String.Empty
|
||||||
Friend ReadOnly Property Key As String
|
Friend ReadOnly Property Key As String
|
||||||
Get
|
Get
|
||||||
@@ -51,14 +40,7 @@ Namespace DownloadObjects.Groups
|
|||||||
If b Then RaiseEvent Updated(Me)
|
If b Then RaiseEvent Updated(Me)
|
||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
Friend ReadOnly Property Labels As List(Of String)
|
|
||||||
Friend ReadOnly Property Count As Integer
|
|
||||||
Get
|
|
||||||
Return Labels.Count
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
Labels = New List(Of String)
|
|
||||||
BTT_MENU = New ToolStripMenuItem With {
|
BTT_MENU = New ToolStripMenuItem With {
|
||||||
.ToolTipText = "Download users of this group",
|
.ToolTipText = "Download users of this group",
|
||||||
.AutoToolTip = True,
|
.AutoToolTip = True,
|
||||||
@@ -105,7 +87,7 @@ Namespace DownloadObjects.Groups
|
|||||||
If Not e.Value.IsEmptyString Then Labels.ListAddList(e.Value.Split("|"), LAP.NotContainsOnly)
|
If Not e.Value.IsEmptyString Then Labels.ListAddList(e.Value.Split("|"), LAP.NotContainsOnly)
|
||||||
End Sub
|
End Sub
|
||||||
Public Overrides Function ToString() As String
|
Public Overrides Function ToString() As String
|
||||||
Return $"{IIf(Index >= 0 And Index <= 8, $"#{Index + 1}: ", String.Empty)}{Name}"
|
Return $"{IIf(Index.ValueBetween(0, 8), $"#{Index + 1}: ", String.Empty)}{Name}"
|
||||||
End Function
|
End Function
|
||||||
Private _ControlSent As Boolean = False
|
Private _ControlSent As Boolean = False
|
||||||
Friend Function GetControl() As ToolStripMenuItem
|
Friend Function GetControl() As ToolStripMenuItem
|
||||||
@@ -142,26 +124,42 @@ Namespace DownloadObjects.Groups
|
|||||||
Private Sub BTT_DOWNLOAD_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWNLOAD_FULL.Click
|
Private Sub BTT_DOWNLOAD_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWNLOAD_FULL.Click
|
||||||
DownloadUsers(False)
|
DownloadUsers(False)
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub DownloadUsers(ByVal UseReadyOption As Boolean)
|
Friend Overloads Function GetUsers() As IEnumerable(Of IUserData)
|
||||||
|
Return GetUsers(Me, True)
|
||||||
|
End Function
|
||||||
|
Friend Overloads Shared Function GetUsers(ByVal Instance As IGroup, ByVal UseReadyOption As Boolean) As IEnumerable(Of IUserData)
|
||||||
Try
|
Try
|
||||||
If Settings.Users.Count > 0 Then
|
If Settings.Users.Count > 0 Then
|
||||||
|
With Instance
|
||||||
Dim CheckParams As Predicate(Of IUserData) = Function(user) _
|
Dim CheckParams As Predicate(Of IUserData) = Function(user) _
|
||||||
(Temporary = CheckState.Indeterminate Or user.Temporary = CBool(Temporary)) And
|
(.Temporary = CheckState.Indeterminate Or user.Temporary = CBool(.Temporary)) And
|
||||||
(Favorite = CheckState.Indeterminate Or (user.Favorite = CBool(Favorite))) And
|
(.Favorite = CheckState.Indeterminate Or (user.Favorite = CBool(.Favorite))) And
|
||||||
(Not UseReadyOption Or ReadyForDownloadIgnore Or user.ReadyForDownload = ReadyForDownload)
|
(Not UseReadyOption Or .ReadyForDownloadIgnore Or user.ReadyForDownload = .ReadyForDownload)
|
||||||
Dim f As Func(Of IUserData, IEnumerable(Of IUserData)) = Function(ByVal user As IUserData) As IEnumerable(Of IUserData)
|
Dim f As Func(Of IUserData, IEnumerable(Of IUserData)) = Function(ByVal user As IUserData) As IEnumerable(Of IUserData)
|
||||||
If user.IsCollection Then
|
If user.IsCollection Then
|
||||||
With DirectCast(user, UserDataBind)
|
With DirectCast(user, UserDataBind)
|
||||||
If Count > 0 Then Return .Collections.SelectMany(f)
|
If .Count > 0 Then Return .Collections.SelectMany(f)
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
If Labels.Count = 0 OrElse user.Labels.ListContains(Labels) Then
|
If .Labels.Count = 0 OrElse user.Labels.ListContains(.Labels) Then
|
||||||
If CheckParams.Invoke(user) Then Return {user}
|
If CheckParams.Invoke(user) Then Return {user}
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
Return New IUserData() {}
|
Return New IUserData() {}
|
||||||
End Function
|
End Function
|
||||||
Dim u As IEnumerable(Of IUserData) = Settings.Users.SelectMany(f)
|
Return Settings.Users.SelectMany(f)
|
||||||
|
End With
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
Return ErrorsDescriber.Execute(EDP.SendInLog, ex, "[DownloadGroup.GetUsers]")
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
Friend Sub DownloadUsers(ByVal UseReadyOption As Boolean)
|
||||||
|
Try
|
||||||
|
If Settings.Users.Count > 0 Then
|
||||||
|
Dim u As IEnumerable(Of IUserData) = GetUsers(Me, UseReadyOption)
|
||||||
If u.ListExists Then
|
If u.ListExists Then
|
||||||
Downloader.AddRange(u)
|
Downloader.AddRange(u)
|
||||||
Else
|
Else
|
||||||
@@ -174,7 +172,7 @@ Namespace DownloadObjects.Groups
|
|||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "IEContainerProvider Support"
|
#Region "IEContainerProvider Support"
|
||||||
Public Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer
|
Private Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer
|
||||||
Return New EContainer("Group", Labels.ListToString("|"), {New EAttribute(Name_Name, Name),
|
Return New EContainer("Group", Labels.ListToString("|"), {New EAttribute(Name_Name, Name),
|
||||||
New EAttribute(Name_Temporary, CInt(Temporary)),
|
New EAttribute(Name_Temporary, CInt(Temporary)),
|
||||||
New EAttribute(Name_Favorite, CInt(Favorite)),
|
New EAttribute(Name_Favorite, CInt(Favorite)),
|
||||||
@@ -183,11 +181,8 @@ Namespace DownloadObjects.Groups
|
|||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "IDisposable Support"
|
#Region "IDisposable Support"
|
||||||
Private disposedValue As Boolean = False
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
If Not disposedValue And disposing Then
|
||||||
If Not disposedValue Then
|
|
||||||
If disposing Then
|
|
||||||
Labels.Clear()
|
|
||||||
BTT_DELETE.Dispose()
|
BTT_DELETE.Dispose()
|
||||||
BTT_EDIT.Dispose()
|
BTT_EDIT.Dispose()
|
||||||
BTT_MENU.Dispose()
|
BTT_MENU.Dispose()
|
||||||
@@ -195,16 +190,7 @@ Namespace DownloadObjects.Groups
|
|||||||
BTT_DOWNLOAD.Dispose()
|
BTT_DOWNLOAD.Dispose()
|
||||||
BTT_DOWNLOAD_FULL.Dispose()
|
BTT_DOWNLOAD_FULL.Dispose()
|
||||||
End If
|
End If
|
||||||
disposedValue = True
|
MyBase.Dispose(disposing)
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
Protected Overrides Sub Finalize()
|
|
||||||
Dispose(False)
|
|
||||||
MyBase.Finalize()
|
|
||||||
End Sub
|
|
||||||
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
|
||||||
Dispose(True)
|
|
||||||
GC.SuppressFinalize(Me)
|
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -44,10 +44,7 @@ Namespace DownloadObjects.Groups
|
|||||||
End Property
|
End Property
|
||||||
Friend Sub Update()
|
Friend Sub Update()
|
||||||
If Count > 0 Then
|
If Count > 0 Then
|
||||||
Using x As New XmlFile With {.Name = "Groups", .AllowSameNames = True}
|
Using x As New XmlFile With {.Name = "Groups", .AllowSameNames = True} : x.AddRange(GroupsList) : x.Save(GroupFile) : End Using
|
||||||
x.AddRange(GroupsList)
|
|
||||||
x.Save(GroupFile)
|
|
||||||
End Using
|
|
||||||
Else
|
Else
|
||||||
GroupFile.Delete()
|
GroupFile.Delete()
|
||||||
End If
|
End If
|
||||||
@@ -80,6 +77,13 @@ Namespace DownloadObjects.Groups
|
|||||||
Friend Function DownloadGroupIfExists(ByVal Index As Integer) As Boolean
|
Friend Function DownloadGroupIfExists(ByVal Index As Integer) As Boolean
|
||||||
If Index.ValueBetween(0, Count - 1) Then Item(Index).DownloadUsers(True) : Return True Else Return False
|
If Index.ValueBetween(0, Count - 1) Then Item(Index).DownloadUsers(True) : Return True Else Return False
|
||||||
End Function
|
End Function
|
||||||
|
Friend Function IndexOf(ByVal Name As String) As Integer
|
||||||
|
If Count > 0 Then
|
||||||
|
Return GroupsList.FindIndex(Function(g) g.Name = Name)
|
||||||
|
Else
|
||||||
|
Return -1
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
Private Function GetEnumerator() As IEnumerator(Of DownloadGroup) Implements IEnumerable(Of DownloadGroup).GetEnumerator
|
Private Function GetEnumerator() As IEnumerator(Of DownloadGroup) Implements IEnumerable(Of DownloadGroup).GetEnumerator
|
||||||
Return New MyEnumerator(Of DownloadGroup)(Me)
|
Return New MyEnumerator(Of DownloadGroup)(Me)
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
156
SCrawler/Download/Groups/GroupDefaults.vb
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports PersonalUtilities.Forms.Controls
|
||||||
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
|
Imports ADB = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons
|
||||||
|
Namespace DownloadObjects.Groups
|
||||||
|
Public Class GroupDefaults : Inherits TableLayoutPanel
|
||||||
|
Private ReadOnly TP_1 As TableLayoutPanel
|
||||||
|
Private ReadOnly TP_2 As TableLayoutPanel
|
||||||
|
Private ReadOnly CH_TEMPORARY As CheckBox
|
||||||
|
Private ReadOnly CH_FAV As CheckBox
|
||||||
|
Private ReadOnly CH_READY_FOR_DOWN As CheckBox
|
||||||
|
Private ReadOnly CH_READY_FOR_DOWN_IGNORE As CheckBox
|
||||||
|
Private WithEvents TXT_LABELS As TextBoxExtended
|
||||||
|
Friend WithEvents TXT_NAME As TextBoxExtended
|
||||||
|
Private ReadOnly Labels As List(Of String)
|
||||||
|
Public Sub New()
|
||||||
|
Labels = New List(Of String)
|
||||||
|
TXT_LABELS = New TextBoxExtended
|
||||||
|
With TXT_LABELS
|
||||||
|
.BeginInit()
|
||||||
|
.Buttons.AddRange({ADB.Edit, ADB.Clear})
|
||||||
|
.CaptionText = "Labels"
|
||||||
|
.CaptionWidth = 50
|
||||||
|
.Dock = DockStyle.Fill
|
||||||
|
.EndInit()
|
||||||
|
End With
|
||||||
|
TXT_NAME = New TextBoxExtended
|
||||||
|
With TXT_NAME
|
||||||
|
.BeginInit()
|
||||||
|
.Buttons.Add(ADB.Clear)
|
||||||
|
.CaptionText = "Name"
|
||||||
|
.CaptionWidth = 50
|
||||||
|
.Dock = DockStyle.Fill
|
||||||
|
.EndInit()
|
||||||
|
End With
|
||||||
|
CH_TEMPORARY = New CheckBox With {.Text = "Temporary", .Name = "CH_TEMPORARY", .ThreeState = True, .CheckState = CheckState.Indeterminate, .Dock = DockStyle.Fill}
|
||||||
|
CH_FAV = New CheckBox With {.Text = "Favorite", .Name = "CH_FAV", .ThreeState = True, .CheckState = CheckState.Indeterminate, .Dock = DockStyle.Fill}
|
||||||
|
CH_READY_FOR_DOWN = New CheckBox With {.Text = "Ready for download", .Name = "CH_READY_FOR_DOWN", .Checked = True, .Dock = DockStyle.Fill}
|
||||||
|
CH_READY_FOR_DOWN_IGNORE = New CheckBox With {.Text = "Ignore ready for download", .Name = "CH_READY_FOR_DOWN_IGNORE", .Checked = False, .Dock = DockStyle.Fill}
|
||||||
|
TP_1 = New TableLayoutPanel With {.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single, .Margin = New Padding(0), .Dock = DockStyle.Fill}
|
||||||
|
FillTP(TP_1, CH_TEMPORARY, CH_FAV)
|
||||||
|
TP_2 = New TableLayoutPanel With {.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single, .Margin = New Padding(0), .Dock = DockStyle.Fill}
|
||||||
|
FillTP(TP_2, CH_READY_FOR_DOWN, CH_READY_FOR_DOWN_IGNORE)
|
||||||
|
End Sub
|
||||||
|
Private Sub FillTP(ByRef TP As TableLayoutPanel, ByVal CNT1 As Control, ByVal CNT2 As Control)
|
||||||
|
With TP
|
||||||
|
.ColumnCount = 2
|
||||||
|
.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 50))
|
||||||
|
.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 50))
|
||||||
|
.RowCount = 1
|
||||||
|
.RowStyles.Add(New RowStyle(SizeType.Percent, 100))
|
||||||
|
With .Controls : .Add(CNT1, 0, 0) : .Add(CNT2, 1, 0) : End With
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Private Sub GroupDefaults_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
|
Labels.Clear()
|
||||||
|
CH_TEMPORARY.Dispose()
|
||||||
|
CH_FAV.Dispose()
|
||||||
|
CH_READY_FOR_DOWN.Dispose()
|
||||||
|
CH_READY_FOR_DOWN_IGNORE.Dispose()
|
||||||
|
TXT_LABELS.Dispose()
|
||||||
|
With TP_1
|
||||||
|
.Controls.Clear()
|
||||||
|
.RowStyles.Clear()
|
||||||
|
.ColumnStyles.Clear()
|
||||||
|
.Dispose()
|
||||||
|
End With
|
||||||
|
With TP_2
|
||||||
|
.Controls.Clear()
|
||||||
|
.RowStyles.Clear()
|
||||||
|
.ColumnStyles.Clear()
|
||||||
|
.Dispose()
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub InitLayout()
|
||||||
|
MyBase.InitLayout()
|
||||||
|
If ColumnStyles.Count = 2 Or RowStyles.Count = 2 Then
|
||||||
|
ColumnStyles.Clear()
|
||||||
|
RowStyles.Clear()
|
||||||
|
CellBorderStyle = TableLayoutPanelCellBorderStyle.Single
|
||||||
|
ColumnCount = 1
|
||||||
|
ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 100))
|
||||||
|
RowCount = 6
|
||||||
|
RowStyles.Add(New RowStyle(SizeType.Absolute, 25))
|
||||||
|
RowStyles.Add(New RowStyle(SizeType.Absolute, 28))
|
||||||
|
RowStyles.Add(New RowStyle(SizeType.Absolute, 25))
|
||||||
|
RowStyles.Add(New RowStyle(SizeType.Absolute, 25))
|
||||||
|
RowStyles.Add(New RowStyle(SizeType.Absolute, 28))
|
||||||
|
RowStyles.Add(New RowStyle(SizeType.Percent, 100))
|
||||||
|
End If
|
||||||
|
Controls.Add(TXT_NAME, 0, 1)
|
||||||
|
Controls.Add(TP_1, 0, 2)
|
||||||
|
Controls.Add(TP_2, 0, 3)
|
||||||
|
Controls.Add(TXT_LABELS, 0, 4)
|
||||||
|
End Sub
|
||||||
|
Private Sub TXT_LABELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_LABELS.ActionOnButtonClick
|
||||||
|
Select Case Sender.DefaultButton
|
||||||
|
Case ADB.Edit
|
||||||
|
Using f As New LabelsForm(Labels)
|
||||||
|
f.ShowDialog()
|
||||||
|
If f.DialogResult = DialogResult.OK Then
|
||||||
|
Labels.ListAddList(f.LabelsList, LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
||||||
|
TXT_LABELS.Clear()
|
||||||
|
TXT_LABELS.Text = Labels.ListToString
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
Case ADB.Clear : Labels.Clear()
|
||||||
|
End Select
|
||||||
|
End Sub
|
||||||
|
Friend Sub [Get](ByRef Instance As IGroup)
|
||||||
|
If Not Instance Is Nothing Then
|
||||||
|
With Instance
|
||||||
|
.Name = TXT_NAME.Text
|
||||||
|
.Temporary = CH_TEMPORARY.CheckState
|
||||||
|
.Favorite = CH_FAV.CheckState
|
||||||
|
.ReadyForDownload = CH_READY_FOR_DOWN.Checked
|
||||||
|
.ReadyForDownloadIgnore = CH_READY_FOR_DOWN_IGNORE.Checked
|
||||||
|
.Labels.Clear()
|
||||||
|
.Labels.ListAddList(Labels)
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Friend Sub [Set](ByVal Instance As IGroup)
|
||||||
|
If Not Instance Is Nothing Then
|
||||||
|
With Instance
|
||||||
|
TXT_NAME.Text = .Name
|
||||||
|
CH_TEMPORARY.CheckState = .Temporary
|
||||||
|
CH_FAV.CheckState = .Favorite
|
||||||
|
CH_READY_FOR_DOWN.Checked = .ReadyForDownload
|
||||||
|
CH_READY_FOR_DOWN_IGNORE.Checked = .ReadyForDownloadIgnore
|
||||||
|
Labels.ListAddList(.Labels)
|
||||||
|
TXT_LABELS.Text = Labels.ListToString
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private _Enabled As Boolean = True
|
||||||
|
Friend Shadows Property Enabled As Boolean
|
||||||
|
Get
|
||||||
|
Return _Enabled
|
||||||
|
End Get
|
||||||
|
Set(ByVal e As Boolean)
|
||||||
|
_Enabled = e
|
||||||
|
TP_1.Enabled = e
|
||||||
|
TP_2.Enabled = e
|
||||||
|
TXT_LABELS.Enabled = e
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
210
SCrawler/Download/Groups/GroupEditorForm.Designer.vb
generated
@@ -23,30 +23,10 @@ Namespace DownloadObjects.Groups
|
|||||||
<System.Diagnostics.DebuggerStepThrough()>
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
Me.DEFS_GROUP = New SCrawler.DownloadObjects.Groups.GroupDefaults()
|
||||||
Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(GroupEditorForm))
|
|
||||||
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 TP_TEMP_FAV As System.Windows.Forms.TableLayoutPanel
|
|
||||||
Dim TP_READY_FOR_DOWN As System.Windows.Forms.TableLayoutPanel
|
|
||||||
Me.TXT_NAME = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
|
||||||
Me.TXT_LABELS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
|
||||||
Me.CH_TEMPORARY = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.CH_FAV = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.CH_READY_FOR_DOWN = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE = 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_TEMP_FAV = New System.Windows.Forms.TableLayoutPanel()
|
|
||||||
TP_READY_FOR_DOWN = New System.Windows.Forms.TableLayoutPanel()
|
|
||||||
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
CONTAINER_MAIN.SuspendLayout()
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
TP_MAIN.SuspendLayout()
|
|
||||||
CType(Me.TXT_NAME, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).BeginInit()
|
|
||||||
TP_TEMP_FAV.SuspendLayout()
|
|
||||||
TP_READY_FOR_DOWN.SuspendLayout()
|
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN
|
'CONTAINER_MAIN
|
||||||
@@ -54,177 +34,47 @@ Namespace DownloadObjects.Groups
|
|||||||
'
|
'
|
||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.DEFS_GROUP)
|
||||||
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(476, 111)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(476, 109)
|
||||||
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(476, 136)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(476, 134)
|
||||||
CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
'TP_MAIN
|
'DEFS_GROUP
|
||||||
'
|
'
|
||||||
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
Me.DEFS_GROUP.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
TP_MAIN.ColumnCount = 1
|
Me.DEFS_GROUP.ColumnCount = 1
|
||||||
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
Me.DEFS_GROUP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_MAIN.Controls.Add(TP_READY_FOR_DOWN, 0, 2)
|
Me.DEFS_GROUP.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
TP_MAIN.Controls.Add(Me.TXT_NAME, 0, 0)
|
Me.DEFS_GROUP.Location = New System.Drawing.Point(0, 0)
|
||||||
TP_MAIN.Controls.Add(Me.TXT_LABELS, 0, 3)
|
Me.DEFS_GROUP.Name = "DEFS_GROUP"
|
||||||
TP_MAIN.Controls.Add(TP_TEMP_FAV, 0, 1)
|
Me.DEFS_GROUP.RowCount = 6
|
||||||
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.DEFS_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 0!))
|
||||||
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
Me.DEFS_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
TP_MAIN.Name = "TP_MAIN"
|
Me.DEFS_GROUP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_MAIN.RowCount = 5
|
Me.DEFS_GROUP.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!))
|
Me.DEFS_GROUP.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!))
|
Me.DEFS_GROUP.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.Absolute, 25.0!))
|
Me.DEFS_GROUP.Size = New System.Drawing.Size(476, 109)
|
||||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
Me.DEFS_GROUP.TabIndex = 1
|
||||||
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.Absolute, 20.0!))
|
|
||||||
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
|
||||||
TP_MAIN.Size = New System.Drawing.Size(476, 111)
|
|
||||||
TP_MAIN.TabIndex = 0
|
|
||||||
'
|
|
||||||
'TXT_NAME
|
|
||||||
'
|
|
||||||
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
|
||||||
ActionButton7.Index = 0
|
|
||||||
ActionButton7.Name = "BTT_CLEAR"
|
|
||||||
Me.TXT_NAME.Buttons.Add(ActionButton7)
|
|
||||||
Me.TXT_NAME.CaptionText = "Name"
|
|
||||||
Me.TXT_NAME.CaptionToolTipEnabled = True
|
|
||||||
Me.TXT_NAME.CaptionToolTipText = "Group name"
|
|
||||||
Me.TXT_NAME.CaptionWidth = 50.0R
|
|
||||||
Me.TXT_NAME.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.TXT_NAME.Location = New System.Drawing.Point(4, 4)
|
|
||||||
Me.TXT_NAME.Name = "TXT_NAME"
|
|
||||||
Me.TXT_NAME.Size = New System.Drawing.Size(468, 22)
|
|
||||||
Me.TXT_NAME.TabIndex = 0
|
|
||||||
'
|
|
||||||
'TXT_LABELS
|
|
||||||
'
|
|
||||||
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
|
||||||
ActionButton8.Index = 0
|
|
||||||
ActionButton8.Name = "BTT_EDIT"
|
|
||||||
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
|
||||||
ActionButton9.Index = 1
|
|
||||||
ActionButton9.Name = "BTT_CLEAR"
|
|
||||||
Me.TXT_LABELS.Buttons.Add(ActionButton8)
|
|
||||||
Me.TXT_LABELS.Buttons.Add(ActionButton9)
|
|
||||||
Me.TXT_LABELS.CaptionText = "Labels"
|
|
||||||
Me.TXT_LABELS.CaptionToolTipEnabled = True
|
|
||||||
Me.TXT_LABELS.CaptionToolTipText = "Group labels"
|
|
||||||
Me.TXT_LABELS.CaptionWidth = 50.0R
|
|
||||||
Me.TXT_LABELS.ClearTextByButtonClear = False
|
|
||||||
Me.TXT_LABELS.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.TXT_LABELS.Location = New System.Drawing.Point(4, 85)
|
|
||||||
Me.TXT_LABELS.Name = "TXT_LABELS"
|
|
||||||
Me.TXT_LABELS.Size = New System.Drawing.Size(468, 22)
|
|
||||||
Me.TXT_LABELS.TabIndex = 1
|
|
||||||
'
|
|
||||||
'TP_TEMP_FAV
|
|
||||||
'
|
|
||||||
TP_TEMP_FAV.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
|
||||||
TP_TEMP_FAV.ColumnCount = 2
|
|
||||||
TP_TEMP_FAV.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_TEMP_FAV.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_TEMP_FAV.Controls.Add(Me.CH_TEMPORARY, 0, 0)
|
|
||||||
TP_TEMP_FAV.Controls.Add(Me.CH_FAV, 1, 0)
|
|
||||||
TP_TEMP_FAV.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
TP_TEMP_FAV.Location = New System.Drawing.Point(1, 30)
|
|
||||||
TP_TEMP_FAV.Margin = New System.Windows.Forms.Padding(0)
|
|
||||||
TP_TEMP_FAV.Name = "TP_TEMP_FAV"
|
|
||||||
TP_TEMP_FAV.RowCount = 1
|
|
||||||
TP_TEMP_FAV.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
|
||||||
TP_TEMP_FAV.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
|
||||||
TP_TEMP_FAV.Size = New System.Drawing.Size(474, 25)
|
|
||||||
TP_TEMP_FAV.TabIndex = 2
|
|
||||||
'
|
|
||||||
'TP_READY_FOR_DOWN
|
|
||||||
'
|
|
||||||
TP_READY_FOR_DOWN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
|
||||||
TP_READY_FOR_DOWN.ColumnCount = 2
|
|
||||||
TP_READY_FOR_DOWN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_READY_FOR_DOWN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_READY_FOR_DOWN.Controls.Add(Me.CH_READY_FOR_DOWN, 0, 0)
|
|
||||||
TP_READY_FOR_DOWN.Controls.Add(Me.CH_READY_FOR_DOWN_IGNORE, 1, 0)
|
|
||||||
TP_READY_FOR_DOWN.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
TP_READY_FOR_DOWN.Location = New System.Drawing.Point(1, 56)
|
|
||||||
TP_READY_FOR_DOWN.Margin = New System.Windows.Forms.Padding(0)
|
|
||||||
TP_READY_FOR_DOWN.Name = "TP_READY_FOR_DOWN"
|
|
||||||
TP_READY_FOR_DOWN.RowCount = 1
|
|
||||||
TP_READY_FOR_DOWN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
|
||||||
TP_READY_FOR_DOWN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
|
||||||
TP_READY_FOR_DOWN.Size = New System.Drawing.Size(474, 25)
|
|
||||||
TP_READY_FOR_DOWN.TabIndex = 3
|
|
||||||
'
|
|
||||||
'CH_TEMPORARY
|
|
||||||
'
|
|
||||||
Me.CH_TEMPORARY.AutoSize = True
|
|
||||||
Me.CH_TEMPORARY.Checked = True
|
|
||||||
Me.CH_TEMPORARY.CheckState = System.Windows.Forms.CheckState.Indeterminate
|
|
||||||
Me.CH_TEMPORARY.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.CH_TEMPORARY.Location = New System.Drawing.Point(4, 4)
|
|
||||||
Me.CH_TEMPORARY.Name = "CH_TEMPORARY"
|
|
||||||
Me.CH_TEMPORARY.Size = New System.Drawing.Size(229, 17)
|
|
||||||
Me.CH_TEMPORARY.TabIndex = 0
|
|
||||||
Me.CH_TEMPORARY.Text = "Temporary"
|
|
||||||
Me.CH_TEMPORARY.ThreeState = True
|
|
||||||
Me.CH_TEMPORARY.UseVisualStyleBackColor = True
|
|
||||||
'
|
|
||||||
'CH_FAV
|
|
||||||
'
|
|
||||||
Me.CH_FAV.AutoSize = True
|
|
||||||
Me.CH_FAV.Checked = True
|
|
||||||
Me.CH_FAV.CheckState = System.Windows.Forms.CheckState.Indeterminate
|
|
||||||
Me.CH_FAV.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.CH_FAV.Location = New System.Drawing.Point(240, 4)
|
|
||||||
Me.CH_FAV.Name = "CH_FAV"
|
|
||||||
Me.CH_FAV.Size = New System.Drawing.Size(230, 17)
|
|
||||||
Me.CH_FAV.TabIndex = 1
|
|
||||||
Me.CH_FAV.Text = "Favorite"
|
|
||||||
Me.CH_FAV.ThreeState = True
|
|
||||||
Me.CH_FAV.UseVisualStyleBackColor = True
|
|
||||||
'
|
|
||||||
'CH_READY_FOR_DOWN
|
|
||||||
'
|
|
||||||
Me.CH_READY_FOR_DOWN.AutoSize = True
|
|
||||||
Me.CH_READY_FOR_DOWN.Checked = True
|
|
||||||
Me.CH_READY_FOR_DOWN.CheckState = System.Windows.Forms.CheckState.Checked
|
|
||||||
Me.CH_READY_FOR_DOWN.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.CH_READY_FOR_DOWN.Location = New System.Drawing.Point(4, 4)
|
|
||||||
Me.CH_READY_FOR_DOWN.Name = "CH_READY_FOR_DOWN"
|
|
||||||
Me.CH_READY_FOR_DOWN.Size = New System.Drawing.Size(229, 17)
|
|
||||||
Me.CH_READY_FOR_DOWN.TabIndex = 0
|
|
||||||
Me.CH_READY_FOR_DOWN.Text = "Ready for download"
|
|
||||||
Me.CH_READY_FOR_DOWN.UseVisualStyleBackColor = True
|
|
||||||
'
|
|
||||||
'CH_READY_FOR_DOWN_IGNORE
|
|
||||||
'
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.AutoSize = True
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.Location = New System.Drawing.Point(240, 4)
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.Name = "CH_READY_FOR_DOWN_IGNORE"
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.Size = New System.Drawing.Size(230, 17)
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.TabIndex = 1
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.Text = "Ignore ready for download"
|
|
||||||
Me.CH_READY_FOR_DOWN_IGNORE.UseVisualStyleBackColor = True
|
|
||||||
'
|
'
|
||||||
'GroupEditorForm
|
'GroupEditorForm
|
||||||
'
|
'
|
||||||
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(476, 136)
|
Me.ClientSize = New System.Drawing.Size(476, 134)
|
||||||
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.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MaximizeBox = False
|
Me.MaximizeBox = False
|
||||||
Me.MaximumSize = New System.Drawing.Size(492, 175)
|
Me.MaximumSize = New System.Drawing.Size(492, 173)
|
||||||
Me.MinimizeBox = False
|
Me.MinimizeBox = False
|
||||||
Me.MinimumSize = New System.Drawing.Size(492, 175)
|
Me.MinimumSize = New System.Drawing.Size(492, 173)
|
||||||
Me.Name = "GroupEditorForm"
|
Me.Name = "GroupEditorForm"
|
||||||
Me.ShowIcon = False
|
Me.ShowIcon = False
|
||||||
Me.ShowInTaskbar = False
|
Me.ShowInTaskbar = False
|
||||||
@@ -233,21 +83,9 @@ Namespace DownloadObjects.Groups
|
|||||||
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
CONTAINER_MAIN.ResumeLayout(False)
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
CONTAINER_MAIN.PerformLayout()
|
CONTAINER_MAIN.PerformLayout()
|
||||||
TP_MAIN.ResumeLayout(False)
|
|
||||||
CType(Me.TXT_NAME, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
CType(Me.TXT_LABELS, System.ComponentModel.ISupportInitialize).EndInit()
|
|
||||||
TP_TEMP_FAV.ResumeLayout(False)
|
|
||||||
TP_TEMP_FAV.PerformLayout()
|
|
||||||
TP_READY_FOR_DOWN.ResumeLayout(False)
|
|
||||||
TP_READY_FOR_DOWN.PerformLayout()
|
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
Private WithEvents TXT_NAME As PersonalUtilities.Forms.Controls.TextBoxExtended
|
Private WithEvents DEFS_GROUP As GroupDefaults
|
||||||
Private WithEvents TXT_LABELS As PersonalUtilities.Forms.Controls.TextBoxExtended
|
|
||||||
Private WithEvents CH_READY_FOR_DOWN As CheckBox
|
|
||||||
Private WithEvents CH_READY_FOR_DOWN_IGNORE As CheckBox
|
|
||||||
Private WithEvents CH_TEMPORARY As CheckBox
|
|
||||||
Private WithEvents CH_FAV As CheckBox
|
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -120,88 +120,4 @@
|
|||||||
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="TP_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
|
||||||
<value>False</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="TP_READY_FOR_DOWN.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="ActionButton7.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="ActionButton8.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
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
|
|
||||||
AAAASUVORK5CYII=
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="ActionButton9.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_TEMP_FAV.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
|
||||||
<value>False</value>
|
|
||||||
</metadata>
|
|
||||||
</root>
|
</root>
|
||||||
@@ -7,36 +7,35 @@
|
|||||||
' 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.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
|
||||||
Namespace DownloadObjects.Groups
|
Namespace DownloadObjects.Groups
|
||||||
Friend Class GroupEditorForm : Implements IOkCancelToolbar
|
Friend Class GroupEditorForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Friend Property MyGroup As DownloadGroup
|
Friend Property MyGroup As DownloadGroup
|
||||||
Private ReadOnly MyLabels As List(Of String)
|
|
||||||
Friend Sub New(ByRef g As DownloadGroup)
|
Friend Sub New(ByRef g As DownloadGroup)
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyGroup = g
|
MyGroup = g
|
||||||
MyLabels = New List(Of String)
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
If Not MyGroup Is Nothing Then MyLabels.ListAddList(MyGroup.Labels)
|
|
||||||
MyDefs = New DefaultFormProps
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Class NameChecker : Implements IFieldsCheckerProvider
|
Friend Class NameChecker : Implements IFieldsCheckerProvider
|
||||||
Private Property ErrorMessage As String Implements IFieldsCheckerProvider.ErrorMessage
|
Private Property ErrorMessage As String Implements IFieldsCheckerProvider.ErrorMessage
|
||||||
Private Property Name As String Implements IFieldsCheckerProvider.Name
|
Private Property Name As String Implements IFieldsCheckerProvider.Name
|
||||||
Private Property TypeError As Boolean Implements IFieldsCheckerProvider.TypeError
|
Private Property TypeError As Boolean Implements IFieldsCheckerProvider.TypeError
|
||||||
Private ReadOnly ExistingGroupName As String
|
Private ReadOnly ExistingGroupName As String
|
||||||
Friend Sub New(ByVal _ExistingGroupName As String)
|
Private ReadOnly Property Source As IEnumerable(Of IGroup)
|
||||||
|
Private ReadOnly ParamName As String
|
||||||
|
Friend Sub New(ByVal _ExistingGroupName As String, ByRef _Source As IEnumerable(Of IGroup), ByVal Param As String)
|
||||||
ExistingGroupName = _ExistingGroupName
|
ExistingGroupName = _ExistingGroupName
|
||||||
|
Source = _Source
|
||||||
|
ParamName = Param
|
||||||
End Sub
|
End Sub
|
||||||
Private Function Convert(ByVal Value As Object, ByVal DestinationType As Type, ByVal Provider As IFormatProvider,
|
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
|
Optional ByVal NothingArg As Object = Nothing, Optional ByVal e As ErrorsDescriber = Nothing) As Object Implements ICustomProvider.Convert
|
||||||
If Not ACheck(Value) Then
|
If Not ACheck(Value) Then
|
||||||
ErrorMessage = "Group name cannot be empty"
|
ErrorMessage = $"{ParamName} name cannot be empty"
|
||||||
ElseIf Not ExistingGroupName.IsEmptyString AndAlso CStr(Value) = ExistingGroupName Then
|
ElseIf Not ExistingGroupName.IsEmptyString AndAlso CStr(Value) = ExistingGroupName Then
|
||||||
Return Value
|
Return Value
|
||||||
ElseIf Settings.Groups.Count > 0 AndAlso Settings.Groups.LongCount(Function(g) g.Name = CStr(Value)) > 0 Then
|
ElseIf Source.Count > 0 AndAlso Source.LongCount(Function(g) g.Name = CStr(Value)) > 0 Then
|
||||||
ErrorMessage = "A group with the same name already exists"
|
ErrorMessage = $"A {ParamName.ToLower} with the same name already exists"
|
||||||
Else
|
Else
|
||||||
Return Value
|
Return Value
|
||||||
End If
|
End If
|
||||||
@@ -48,64 +47,32 @@ Namespace DownloadObjects.Groups
|
|||||||
End Class
|
End Class
|
||||||
Private Sub GroupEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub GroupEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
|
||||||
If Not MyGroup Is Nothing Then
|
If Not MyGroup Is Nothing Then
|
||||||
With MyGroup
|
With MyGroup
|
||||||
TXT_NAME.Text = .Name
|
DEFS_GROUP.Set(MyGroup)
|
||||||
CH_TEMPORARY.CheckState = .Temporary
|
|
||||||
CH_FAV.CheckState = .Favorite
|
|
||||||
CH_READY_FOR_DOWN.Checked = .ReadyForDownload
|
|
||||||
CH_READY_FOR_DOWN_IGNORE.Checked = .ReadyForDownloadIgnore
|
|
||||||
TXT_LABELS.Text = MyLabels.ListToString
|
|
||||||
Text &= $" { .Name}"
|
Text &= $" { .Name}"
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
Text = "New Group"
|
Text = "New Group"
|
||||||
End If
|
End If
|
||||||
.MyFieldsChecker = New FieldsChecker
|
.MyFieldsChecker = New FieldsChecker
|
||||||
DirectCast(.MyFieldsChecker, FieldsChecker).AddControl(Of String)(TXT_NAME, TXT_NAME.CaptionText,, New NameChecker(If(MyGroup?.Name, String.Empty)))
|
.MyFieldsCheckerE.AddControl(Of String)(DEFS_GROUP.TXT_NAME, DEFS_GROUP.TXT_NAME.CaptionText,,
|
||||||
|
New NameChecker(If(MyGroup?.Name, String.Empty), Settings.Groups, "Group"))
|
||||||
.MyFieldsChecker.EndLoaderOperations()
|
.MyFieldsChecker.EndLoaderOperations()
|
||||||
.AppendDetectors()
|
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub GroupEditorForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
MyLabels.Clear()
|
|
||||||
End Sub
|
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
|
||||||
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
||||||
If MyGroup Is Nothing Then MyGroup = New DownloadGroup
|
If MyGroup Is Nothing Then MyGroup = New DownloadGroup
|
||||||
With MyGroup
|
With MyGroup
|
||||||
.Name = TXT_NAME.Text
|
.NameBefore = .Name
|
||||||
.Temporary = CH_TEMPORARY.CheckState
|
DEFS_GROUP.Get(MyGroup)
|
||||||
.Favorite = CH_FAV.CheckState
|
|
||||||
.ReadyForDownload = CH_READY_FOR_DOWN.Checked
|
|
||||||
.ReadyForDownloadIgnore = CH_READY_FOR_DOWN_IGNORE.Checked
|
|
||||||
.Labels.ListAddList(MyLabels, LAP.ClearBeforeAdd, LAP.NotContainsOnly)
|
|
||||||
End With
|
End With
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub TXT_LABELS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_LABELS.ActionOnButtonClick
|
|
||||||
Select Case Sender.DefaultButton
|
|
||||||
Case ActionButton.DefaultButtons.Edit
|
|
||||||
Using f As New LabelsForm(MyLabels)
|
|
||||||
f.ShowDialog()
|
|
||||||
If f.DialogResult = DialogResult.OK Then
|
|
||||||
MyLabels.ListAddList(f.LabelsList, LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
|
||||||
TXT_LABELS.Clear()
|
|
||||||
TXT_LABELS.Text = MyLabels.ListToString
|
|
||||||
End If
|
|
||||||
End Using
|
|
||||||
Case ActionButton.DefaultButtons.Clear
|
|
||||||
MyLabels.Clear()
|
|
||||||
TXT_LABELS.Clear()
|
|
||||||
End Select
|
|
||||||
End Sub
|
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
51
SCrawler/Download/Groups/GroupParameters.vb
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Namespace DownloadObjects.Groups
|
||||||
|
Friend Interface IGroup
|
||||||
|
Property Name As String
|
||||||
|
ReadOnly Property Labels As List(Of String)
|
||||||
|
Property Temporary As CheckState
|
||||||
|
Property Favorite As CheckState
|
||||||
|
Property ReadyForDownload As Boolean
|
||||||
|
Property ReadyForDownloadIgnore As Boolean
|
||||||
|
End Interface
|
||||||
|
Friend Class GroupParameters : Implements IGroup, IDisposable
|
||||||
|
Protected Const Name_Name As String = "Name"
|
||||||
|
Protected Const Name_Temporary As String = "Temporary"
|
||||||
|
Protected Const Name_Favorite As String = "Favorite"
|
||||||
|
Protected Const Name_ReadyForDownload As String = "RFD"
|
||||||
|
Protected Const Name_ReadyForDownloadIgnore As String = "RFDI"
|
||||||
|
Friend Property Name As String Implements IGroup.Name
|
||||||
|
Friend ReadOnly Property Labels As List(Of String) Implements IGroup.Labels
|
||||||
|
Friend Property Temporary As CheckState = CheckState.Indeterminate Implements IGroup.Temporary
|
||||||
|
Friend Property Favorite As CheckState = CheckState.Indeterminate Implements IGroup.Favorite
|
||||||
|
Friend Property ReadyForDownload As Boolean = True Implements IGroup.ReadyForDownload
|
||||||
|
Friend Property ReadyForDownloadIgnore As Boolean = False Implements IGroup.ReadyForDownloadIgnore
|
||||||
|
Friend Sub New()
|
||||||
|
Labels = New List(Of String)
|
||||||
|
End Sub
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Protected disposedValue As Boolean = False
|
||||||
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then Labels.Clear()
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
149
SCrawler/Download/Scheduler.vb
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Tools
|
||||||
|
Imports SCrawler.DownloadObjects.Groups
|
||||||
|
Imports System.Threading
|
||||||
|
Namespace DownloadObjects
|
||||||
|
Friend Class Scheduler : Implements IEnumerable(Of AutoDownloader), IMyEnumerator(Of AutoDownloader), IDisposable
|
||||||
|
Friend Const Name_Plan As String = "Plan"
|
||||||
|
Friend Event UserFind As AutoDownloader.UserFindEventHandler
|
||||||
|
Private Sub OnUserFind(ByVal Key As String, ByVal Activate As Boolean)
|
||||||
|
RaiseEvent UserFind(Key, Activate)
|
||||||
|
End Sub
|
||||||
|
Private ReadOnly Plans As List(Of AutoDownloader)
|
||||||
|
Private ReadOnly File As SFile = $"Settings\AutoDownload.xml"
|
||||||
|
Private ReadOnly PlanWorking As Predicate(Of AutoDownloader) = Function(Plan) Plan.Working
|
||||||
|
Private ReadOnly PlanDownloading As Predicate(Of AutoDownloader) = Function(Plan) Plan.Downloading
|
||||||
|
Private ReadOnly PlansWaiter As Action(Of Predicate(Of AutoDownloader)) = Sub(ByVal Predicate As Predicate(Of AutoDownloader))
|
||||||
|
While Plans.Exists(Predicate) : Thread.Sleep(200) : End While
|
||||||
|
End Sub
|
||||||
|
Friend Sub New()
|
||||||
|
Plans = New List(Of AutoDownloader)
|
||||||
|
If File.Exists Then
|
||||||
|
Using x As New XmlFile(File,, False) With {.AllowSameNames = True}
|
||||||
|
x.LoadData()
|
||||||
|
If x.Contains(Name_Plan) Then
|
||||||
|
For Each e In x : Plans.Add(New AutoDownloader(e)) : Next
|
||||||
|
Else
|
||||||
|
Plans.Add(New AutoDownloader(x))
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
If Plans.Count > 0 Then Plans.ForEach(Sub(p)
|
||||||
|
p.Source = Me
|
||||||
|
AddHandler p.UserFind, AddressOf OnUserFind
|
||||||
|
End Sub)
|
||||||
|
End Sub
|
||||||
|
Default Friend ReadOnly Property Item(ByVal Index As Integer) As AutoDownloader Implements IMyEnumerator(Of AutoDownloader).MyEnumeratorObject
|
||||||
|
Get
|
||||||
|
Return Plans(Index)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property Count As Integer Implements IMyEnumerator(Of AutoDownloader).MyEnumeratorCount
|
||||||
|
Get
|
||||||
|
Return Plans.Count
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Function NotificationClicked(ByVal Key As String) As Boolean
|
||||||
|
Return Count > 0 AndAlso Plans.Exists(Function(p) p.NotificationClicked(Key))
|
||||||
|
End Function
|
||||||
|
Friend Sub Add(ByVal Plan As AutoDownloader)
|
||||||
|
Plan.Source = Me
|
||||||
|
AddHandler Plan.UserFind, AddressOf OnUserFind
|
||||||
|
Plans.Add(Plan)
|
||||||
|
Update()
|
||||||
|
End Sub
|
||||||
|
Friend Async Function RemoveAt(ByVal Index As Integer) As Task
|
||||||
|
If Index.ValueBetween(0, Count - 1) Then
|
||||||
|
With Plans(Index)
|
||||||
|
.Stop()
|
||||||
|
If .Working Then
|
||||||
|
Await Task.Run(Sub()
|
||||||
|
While .Working : Thread.Sleep(510) : End While
|
||||||
|
End Sub)
|
||||||
|
End If
|
||||||
|
.Dispose()
|
||||||
|
End With
|
||||||
|
Plans.RemoveAt(Index)
|
||||||
|
Update()
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Private _UpdateRequired As Boolean = False
|
||||||
|
Friend Sub Update()
|
||||||
|
_UpdateRequired = True
|
||||||
|
Try
|
||||||
|
If Plans.Count > 0 Then
|
||||||
|
Using x As New XmlFile With {.Name = "Scheduler", .AllowSameNames = True} : x.AddRange(Plans) : x.Save(File) : End Using
|
||||||
|
Else
|
||||||
|
File.Delete()
|
||||||
|
End If
|
||||||
|
_UpdateRequired = False
|
||||||
|
Catch
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
#Region "Groups Support"
|
||||||
|
Friend Sub GROUPS_Updated(ByVal Sender As DownloadGroup)
|
||||||
|
If Count > 0 Then Plans.ForEach(Sub(p) p.GROUPS_Updated(Sender))
|
||||||
|
End Sub
|
||||||
|
Friend Sub GROUPS_Deleted(ByVal Sender As DownloadGroup)
|
||||||
|
If Count > 0 Then Plans.ForEach(Sub(p) p.GROUPS_Deleted(Sender))
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Execution"
|
||||||
|
Friend Async Sub Start(ByVal Init As Boolean)
|
||||||
|
If Count > 0 Then
|
||||||
|
If Plans.Exists(PlanDownloading) Then Await Task.Run(Sub() PlansWaiter(PlanDownloading))
|
||||||
|
For Each Plan In Plans : Plan.Start(Init) : Thread.Sleep(200) : Next
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Friend Sub [Stop]()
|
||||||
|
If Count > 0 Then Plans.ForEach(Sub(p) p.Stop())
|
||||||
|
End Sub
|
||||||
|
Friend Property Pause As Boolean
|
||||||
|
Get
|
||||||
|
If Count > 0 Then Return Plans(0).Pause Else Return False
|
||||||
|
End Get
|
||||||
|
Set(ByVal p As Boolean)
|
||||||
|
If Count > 0 Then Plans.ForEach(Sub(pp) pp.Pause = p)
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "IEnumerable Support"
|
||||||
|
Private Function GetEnumerator() As IEnumerator(Of AutoDownloader) Implements IEnumerable(Of AutoDownloader).GetEnumerator
|
||||||
|
Return New MyEnumerator(Of AutoDownloader)(Me)
|
||||||
|
End Function
|
||||||
|
Private Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
|
||||||
|
Return GetEnumerator()
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then
|
||||||
|
[Stop]()
|
||||||
|
If Plans.Exists(PlanWorking) Then Task.WaitAll(Task.Run(Sub() PlansWaiter(PlanWorking)))
|
||||||
|
If _UpdateRequired Then Update()
|
||||||
|
Plans.ListClearDispose
|
||||||
|
End If
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
76
SCrawler/Download/SchedulerEditorForm.Designer.vb
generated
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Namespace DownloadObjects
|
||||||
|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||||
|
Partial Friend Class SchedulerEditorForm : Inherits System.Windows.Forms.Form
|
||||||
|
<System.Diagnostics.DebuggerNonUserCode()>
|
||||||
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
Try
|
||||||
|
If disposing AndAlso components IsNot Nothing Then
|
||||||
|
components.Dispose()
|
||||||
|
End If
|
||||||
|
Finally
|
||||||
|
MyBase.Dispose(disposing)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private components As System.ComponentModel.IContainer
|
||||||
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
|
Private Sub InitializeComponent()
|
||||||
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
|
Me.LIST_PLANS = New System.Windows.Forms.ListBox()
|
||||||
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.BottomToolStripPanelVisible = False
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN.ContentPanel
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_PLANS)
|
||||||
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(414, 316)
|
||||||
|
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(414, 341)
|
||||||
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
|
'
|
||||||
|
'LIST_PLANS
|
||||||
|
'
|
||||||
|
Me.LIST_PLANS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LIST_PLANS.FormattingEnabled = True
|
||||||
|
Me.LIST_PLANS.Location = New System.Drawing.Point(0, 0)
|
||||||
|
Me.LIST_PLANS.Name = "LIST_PLANS"
|
||||||
|
Me.LIST_PLANS.Size = New System.Drawing.Size(414, 316)
|
||||||
|
Me.LIST_PLANS.TabIndex = 0
|
||||||
|
'
|
||||||
|
'SchedulerEditorForm
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.ClientSize = New System.Drawing.Size(414, 341)
|
||||||
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
|
Me.KeyPreview = True
|
||||||
|
Me.MinimumSize = New System.Drawing.Size(430, 380)
|
||||||
|
Me.Name = "SchedulerEditorForm"
|
||||||
|
Me.ShowIcon = False
|
||||||
|
Me.Text = "Scheduler"
|
||||||
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.PerformLayout()
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
Private WithEvents LIST_PLANS As ListBox
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
123
SCrawler/Download/SchedulerEditorForm.resx
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<?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>
|
||||||
|
</root>
|
||||||
115
SCrawler/Download/SchedulerEditorForm.vb
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
|
Namespace DownloadObjects
|
||||||
|
Friend Class SchedulerEditorForm
|
||||||
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
|
Private WithEvents BTT_SKIP As ToolStripButton
|
||||||
|
Private WithEvents BTT_START As ToolStripButton
|
||||||
|
Friend Sub New()
|
||||||
|
InitializeComponent()
|
||||||
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
|
BTT_SKIP = New ToolStripButton With {
|
||||||
|
.Text = "Skip",
|
||||||
|
.ToolTipText = "Skip next run",
|
||||||
|
.AutoToolTip = True,
|
||||||
|
.DisplayStyle = ToolStripItemDisplayStyle.Text
|
||||||
|
}
|
||||||
|
BTT_START = New ToolStripButton With {
|
||||||
|
.Text = "Start",
|
||||||
|
.Image = My.Resources.StartPic_01_Green_16,
|
||||||
|
.ToolTipText = "Run selected plan",
|
||||||
|
.AutoToolTip = True
|
||||||
|
}
|
||||||
|
End Sub
|
||||||
|
Private Sub SchedulerEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
|
With MyDefs
|
||||||
|
.MyViewInitialize()
|
||||||
|
.AddEditToolbarPlus({BTT_START, BTT_SKIP})
|
||||||
|
Refill()
|
||||||
|
.EndLoaderOperations(False)
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Private Sub SchedulerEditorForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
||||||
|
If e.KeyCode = Keys.Escape Then Close()
|
||||||
|
End Sub
|
||||||
|
Private Sub Refill() Handles MyDefs.ButtonUpdateClick
|
||||||
|
Try
|
||||||
|
LIST_PLANS.Items.Clear()
|
||||||
|
If Settings.Automation.Count > 0 Then
|
||||||
|
LIST_PLANS.Items.AddRange(Settings.Automation.Select(Function(a) a.ToString()).Cast(Of Object).ToArray)
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then LIST_PLANS.SelectedIndex = _LatestSelected
|
||||||
|
Else
|
||||||
|
_LatestSelected = -1
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(EDP.SendInLog, ex)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbar.EditToolbarEventArgs) Handles MyDefs.ButtonAddClick
|
||||||
|
Dim a As New AutoDownloader(True)
|
||||||
|
Using f As New AutoDownloaderEditorForm(a)
|
||||||
|
f.ShowDialog()
|
||||||
|
If f.DialogResult = DialogResult.OK Then
|
||||||
|
Settings.Automation.Add(a)
|
||||||
|
Refill()
|
||||||
|
Else
|
||||||
|
a.Dispose()
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
End Sub
|
||||||
|
Private Sub Edit() Handles MyDefs.ButtonEditClick
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then
|
||||||
|
Using f As New AutoDownloaderEditorForm(Settings.Automation(_LatestSelected)) : f.ShowDialog() : End Using
|
||||||
|
Refill()
|
||||||
|
Else
|
||||||
|
MsgBoxE("You have not selected a plan to edit.", vbExclamation)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private _DeleteInProgress As Boolean = False
|
||||||
|
Private Async Sub MyDefs_ButtonDeleteClickE(ByVal Sender As Object, ByVal e As EditToolbar.EditToolbarEventArgs) Handles MyDefs.ButtonDeleteClickE
|
||||||
|
If Not _DeleteInProgress Then
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then
|
||||||
|
_DeleteInProgress = True
|
||||||
|
Dim n$ = Settings.Automation(_LatestSelected).Name
|
||||||
|
If MsgBoxE({$"Are you sure you want to delete the [{n}] plan?", "Deleting a plan..."}, vbExclamation + vbYesNo) = vbYes Then
|
||||||
|
Await Settings.Automation.RemoveAt(_LatestSelected)
|
||||||
|
Refill()
|
||||||
|
MsgBoxE($"Plan [{n}] deleted")
|
||||||
|
End If
|
||||||
|
_DeleteInProgress = False
|
||||||
|
Else
|
||||||
|
MsgBoxE("You have not selected a plan to delete.", vbExclamation)
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
MsgBoxE({"One of the plans is currently in progress. Wait until this plan is stopped and deleted.", "Deleting a plan"}, vbExclamation)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private _LatestSelected As Integer = -1
|
||||||
|
Private Sub LIST_PLANS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_PLANS.SelectedIndexChanged
|
||||||
|
_LatestSelected = LIST_PLANS.SelectedIndex
|
||||||
|
End Sub
|
||||||
|
Private Sub LIST_PLANS_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles LIST_PLANS.MouseDoubleClick
|
||||||
|
Edit()
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_START_Click(sender As Object, e As EventArgs) Handles BTT_START.Click
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then
|
||||||
|
With Settings.Automation(_LatestSelected) : .Start(.IsNewPlan) : End With
|
||||||
|
Refill()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_SKIP_Click(sender As Object, e As EventArgs) Handles BTT_SKIP.Click
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_PLANS.Items.Count - 1) Then
|
||||||
|
Settings.Automation(_LatestSelected).Skip()
|
||||||
|
Refill()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -7,48 +7,57 @@
|
|||||||
' 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.Threading
|
Imports System.Threading
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Tools
|
||||||
Imports EOptions = PersonalUtilities.Forms.Toolbars.IMyProgress.EnableOptions
|
|
||||||
Imports SCrawler.API
|
Imports SCrawler.API
|
||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.Plugin.Hosts
|
Imports SCrawler.Plugin.Hosts
|
||||||
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
||||||
|
Imports EOptions = PersonalUtilities.Forms.Toolbars.IMyProgress.EnableOptions
|
||||||
Namespace DownloadObjects
|
Namespace DownloadObjects
|
||||||
Friend Class TDownloader : Implements IDisposable
|
Friend Class TDownloader : Implements IDisposable
|
||||||
|
#Region "Events"
|
||||||
Friend Event OnJobsChange(ByVal JobsCount As Integer)
|
Friend Event OnJobsChange(ByVal JobsCount As Integer)
|
||||||
Friend Event OnDownloadCountChange()
|
Friend Event OnDownloadCountChange()
|
||||||
Friend Event OnDownloading(ByVal Value As Boolean)
|
Friend Event OnDownloading(ByVal Value As Boolean)
|
||||||
Friend Event SendNotification(ByVal Message As String)
|
Friend Event SendNotification As NotificationEventHandler
|
||||||
Friend Event OnReconfigured()
|
Friend Event OnReconfigured()
|
||||||
|
#End Region
|
||||||
|
#Region "Declarations"
|
||||||
Friend ReadOnly Property Downloaded As List(Of IUserData)
|
Friend ReadOnly Property Downloaded As List(Of IUserData)
|
||||||
Private ReadOnly NProv As IFormatProvider
|
Private ReadOnly NProv As IFormatProvider
|
||||||
|
#End Region
|
||||||
|
#Region "Working, Count"
|
||||||
Friend ReadOnly Property Working As Boolean
|
Friend ReadOnly Property Working As Boolean
|
||||||
Get
|
Get
|
||||||
Return Pool.Count > 0 AndAlso Pool.Exists(Function(j) j.Working)
|
Return Pool.Count > 0 AndAlso Pool.Exists(Function(j) j.Working)
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Friend ReadOnly Property Count As Integer
|
||||||
|
Get
|
||||||
|
Return If(Pool.Count = 0, 0, Pool.Sum(Function(j) j.Count))
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "Automation Support"
|
||||||
|
Private _AutoDownloaderTasks As Integer = 0
|
||||||
|
Friend Property AutoDownloaderWorking As Boolean
|
||||||
|
Private Get
|
||||||
|
Return _AutoDownloaderTasks > 0
|
||||||
|
End Get
|
||||||
|
Set(ByVal adw As Boolean)
|
||||||
|
_AutoDownloaderTasks += IIf(adw, 1, -1)
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
Friend Sub InvokeDownloadsChangeEvent()
|
||||||
|
RaiseEvent OnDownloadCountChange()
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "Jobs"
|
#Region "Jobs"
|
||||||
Friend Class Job : Implements IDisposable
|
Friend Class Job : Inherits JobThread(Of IUserData)
|
||||||
Friend Event OnItemsCountChange(ByVal Sender As Job, ByVal Count As Integer)
|
|
||||||
Private ReadOnly Hosts As List(Of SettingsHost)
|
Private ReadOnly Hosts As List(Of SettingsHost)
|
||||||
Private ReadOnly Keys As List(Of String)
|
Private ReadOnly Keys As List(Of String)
|
||||||
Private ReadOnly RemovingKeys As List(Of String)
|
Private ReadOnly RemovingKeys As List(Of String)
|
||||||
Private TokenSource As CancellationTokenSource
|
|
||||||
Friend Token As CancellationToken
|
|
||||||
Private [Thread] As Thread
|
|
||||||
Private _Working As Boolean
|
|
||||||
Friend ReadOnly Property Items As List(Of IUserData)
|
|
||||||
Friend ReadOnly Property [Type] As Download
|
Friend ReadOnly Property [Type] As Download
|
||||||
Friend ReadOnly Property Count As Integer
|
|
||||||
Get
|
|
||||||
Return Items.Count
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
Friend ReadOnly Property Working As Boolean
|
|
||||||
Get
|
|
||||||
Return _Working OrElse If(Thread?.IsAlive, False)
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
Friend ReadOnly Property IsSeparated As Boolean
|
Friend ReadOnly Property IsSeparated As Boolean
|
||||||
Get
|
Get
|
||||||
Return Hosts.Count = 1 AndAlso Hosts(0).IsSeparatedTasks
|
Return Hosts.Count = 1 AndAlso Hosts(0).IsSeparatedTasks
|
||||||
@@ -74,21 +83,19 @@ Namespace DownloadObjects
|
|||||||
Return Nothing
|
Return Nothing
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend Property Progress As MyProgress
|
|
||||||
Friend Sub New(ByVal JobType As Download)
|
Friend Sub New(ByVal JobType As Download)
|
||||||
Hosts = New List(Of SettingsHost)
|
Hosts = New List(Of SettingsHost)
|
||||||
RemovingKeys = New List(Of String)
|
RemovingKeys = New List(Of String)
|
||||||
Keys = New List(Of String)
|
Keys = New List(Of String)
|
||||||
Items = New List(Of IUserData)
|
|
||||||
[Type] = JobType
|
[Type] = JobType
|
||||||
End Sub
|
End Sub
|
||||||
Friend Function Add(ByVal User As IUserData) As Boolean
|
Public Overrides Function Add(ByVal User As IUserData) As Boolean
|
||||||
With DirectCast(User, UserDataBase)
|
With DirectCast(User, UserDataBase)
|
||||||
If Keys.Count > 0 Then
|
If Keys.Count > 0 Then
|
||||||
Dim i% = Keys.IndexOf(.User.Plugin)
|
Dim i% = Keys.IndexOf(.User.Plugin)
|
||||||
If i >= 0 Then
|
If i >= 0 Then
|
||||||
Items.Add(User)
|
Items.Add(User)
|
||||||
RaiseEvent OnItemsCountChange(Me, Count)
|
OnItemsCountChange(Me, Count)
|
||||||
Return True
|
Return True
|
||||||
Else
|
Else
|
||||||
If RemovingKeys.Count > 0 Then Return RemovingKeys.IndexOf(.User.Plugin) >= 0
|
If RemovingKeys.Count > 0 Then Return RemovingKeys.IndexOf(.User.Plugin) >= 0
|
||||||
@@ -105,11 +112,11 @@ Namespace DownloadObjects
|
|||||||
Dim i% = Keys.IndexOf(DirectCast(User, UserDataBase).User.Plugin)
|
Dim i% = Keys.IndexOf(DirectCast(User, UserDataBase).User.Plugin)
|
||||||
If i >= 0 Then Return Hosts(i) Else Throw New KeyNotFoundException($"Plugin key [{DirectCast(User, UserDataBase).User.Plugin}] not found")
|
If i >= 0 Then Return Hosts(i) Else Throw New KeyNotFoundException($"Plugin key [{DirectCast(User, UserDataBase).User.Plugin}] not found")
|
||||||
End Function
|
End Function
|
||||||
Friend Function Available() As Boolean
|
Friend Function Available(ByVal Silent As Boolean) As Boolean
|
||||||
If Hosts.Count > 0 Then
|
If Hosts.Count > 0 Then
|
||||||
Dim k$
|
Dim k$
|
||||||
For i% = Hosts.Count - 1 To 0 Step -1
|
For i% = Hosts.Count - 1 To 0 Step -1
|
||||||
If Not Hosts(i).Available(Type) Then
|
If Not Hosts(i).Available(Type, Silent) Then
|
||||||
k = Hosts(i).Key
|
k = Hosts(i).Key
|
||||||
If Not RemovingKeys.Contains(k) Then RemovingKeys.Add(k)
|
If Not RemovingKeys.Contains(k) Then RemovingKeys.Add(k)
|
||||||
Hosts(i).DownloadDone(Type)
|
Hosts(i).DownloadDone(Type)
|
||||||
@@ -123,29 +130,13 @@ Namespace DownloadObjects
|
|||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
Friend Sub ThrowIfCancellationRequested()
|
Public Overrides Sub Start()
|
||||||
Token.ThrowIfCancellationRequested()
|
|
||||||
End Sub
|
|
||||||
Friend ReadOnly Property IsCancellationRequested As Boolean
|
|
||||||
Get
|
|
||||||
Return Token.IsCancellationRequested
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
Friend Sub [Start](ByVal [ThreadStart] As ThreadStart)
|
|
||||||
Thread = New Thread(ThreadStart) With {.IsBackground = True}
|
|
||||||
Thread.SetApartmentState(ApartmentState.MTA)
|
|
||||||
Thread.Start()
|
|
||||||
End Sub
|
|
||||||
Friend Sub [Start]()
|
|
||||||
If Hosts.Count > 0 Then Hosts.ForEach(Sub(h) h.DownloadStarted([Type]))
|
If Hosts.Count > 0 Then Hosts.ForEach(Sub(h) h.DownloadStarted([Type]))
|
||||||
TokenSource = New CancellationTokenSource
|
TokenSource = New CancellationTokenSource
|
||||||
Token = TokenSource.Token
|
Token = TokenSource.Token
|
||||||
_Working = True
|
_Working = True
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub [Stop]()
|
Public Overrides Sub Stopped()
|
||||||
If Not TokenSource Is Nothing Then TokenSource.Cancel()
|
|
||||||
End Sub
|
|
||||||
Friend Sub Stopped()
|
|
||||||
_Working = False
|
_Working = False
|
||||||
TokenSource = Nothing
|
TokenSource = Nothing
|
||||||
Try
|
Try
|
||||||
@@ -158,35 +149,26 @@ Namespace DownloadObjects
|
|||||||
If Hosts.Count > 0 Then Hosts.ForEach(Sub(h) h.DownloadDone([Type]))
|
If Hosts.Count > 0 Then Hosts.ForEach(Sub(h) h.DownloadDone([Type]))
|
||||||
End Sub
|
End Sub
|
||||||
#Region "IDisposable Support"
|
#Region "IDisposable Support"
|
||||||
Private disposedValue As Boolean = False
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
If Not disposedValue And disposing Then
|
||||||
If Not disposedValue Then
|
|
||||||
If disposing Then
|
|
||||||
Hosts.Clear()
|
Hosts.Clear()
|
||||||
Keys.Clear()
|
Keys.Clear()
|
||||||
RemovingKeys.Clear()
|
RemovingKeys.Clear()
|
||||||
Items.Clear()
|
|
||||||
End If
|
End If
|
||||||
disposedValue = True
|
MyBase.Dispose(disposing)
|
||||||
End If
|
|
||||||
End Sub
|
|
||||||
Protected Overrides Sub Finalize()
|
|
||||||
Dispose(False)
|
|
||||||
MyBase.Finalize()
|
|
||||||
End Sub
|
|
||||||
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
|
||||||
Dispose(True)
|
|
||||||
GC.SuppressFinalize(Me)
|
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
Friend ReadOnly Pool As List(Of Job)
|
Friend ReadOnly Pool As List(Of Job)
|
||||||
#End Region
|
#End Region
|
||||||
|
#Region "Initializer"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
Downloaded = New List(Of IUserData)
|
Downloaded = New List(Of IUserData)
|
||||||
NProv = New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}
|
NProv = New ANumbers With {.FormatOptions = ANumbers.Options.GroupIntegral}
|
||||||
Pool = New List(Of Job)
|
Pool = New List(Of Job)
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Pool"
|
||||||
Friend Sub ReconfPool()
|
Friend Sub ReconfPool()
|
||||||
If Pool.Count = 0 OrElse Not Pool.Exists(Function(j) j.Working Or j.Count > 0) Then
|
If Pool.Count = 0 OrElse Not Pool.Exists(Function(j) j.Working Or j.Count > 0) Then
|
||||||
Pool.ListClearDispose
|
Pool.ListClearDispose
|
||||||
@@ -204,18 +186,21 @@ Namespace DownloadObjects
|
|||||||
RaiseEvent OnReconfigured()
|
RaiseEvent OnReconfigured()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Thread"
|
||||||
Private CheckerThread As Thread
|
Private CheckerThread As Thread
|
||||||
Private Sub [Start]()
|
Private Sub [Start]()
|
||||||
If MyProgressForm.ReadyToOpen AndAlso Pool.LongCount(Function(p) p.Count > 0) > 1 Then MyProgressForm.Show() : MainFrameObj.Focus()
|
If Not AutoDownloaderWorking AndAlso MyProgressForm.ReadyToOpen AndAlso Pool.LongCount(Function(p) p.Count > 0) > 1 Then MyProgressForm.Show() : MainFrameObj.Focus()
|
||||||
If Not If(CheckerThread?.IsAlive, False) Then
|
If Not If(CheckerThread?.IsAlive, False) Then
|
||||||
MainProgress.Enabled = True
|
MainProgress.Enabled = True
|
||||||
If InfoForm.ReadyToOpen Then InfoForm.Show() : MainFrameObj.Focus()
|
If Not AutoDownloaderWorking AndAlso InfoForm.ReadyToOpen Then InfoForm.Show() : MainFrameObj.Focus()
|
||||||
CheckerThread = New Thread(New ThreadStart(AddressOf JobsChecker))
|
CheckerThread = New Thread(New ThreadStart(AddressOf JobsChecker))
|
||||||
CheckerThread.SetApartmentState(ApartmentState.MTA)
|
CheckerThread.SetApartmentState(ApartmentState.MTA)
|
||||||
CheckerThread.Start()
|
CheckerThread.Start()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub JobsChecker()
|
Private Sub JobsChecker()
|
||||||
|
RaiseEvent OnDownloading(True)
|
||||||
Try
|
Try
|
||||||
MainProgress.TotalCount = 0
|
MainProgress.TotalCount = 0
|
||||||
MainProgress.CurrentCounter = 0
|
MainProgress.CurrentCounter = 0
|
||||||
@@ -226,7 +211,7 @@ Namespace DownloadObjects
|
|||||||
Next
|
Next
|
||||||
Thread.Sleep(200)
|
Thread.Sleep(200)
|
||||||
Loop
|
Loop
|
||||||
Catch ex As Exception
|
Catch
|
||||||
Finally
|
Finally
|
||||||
With MainProgress
|
With MainProgress
|
||||||
.TotalCount = 0
|
.TotalCount = 0
|
||||||
@@ -237,15 +222,16 @@ Namespace DownloadObjects
|
|||||||
MyProgressForm.DisableProgressChange = True
|
MyProgressForm.DisableProgressChange = True
|
||||||
If Pool.Count > 0 Then Pool.ForEach(Sub(p) If Not p.Progress Is Nothing Then p.Progress.TotalCount = 0)
|
If Pool.Count > 0 Then Pool.ForEach(Sub(p) If Not p.Progress Is Nothing Then p.Progress.TotalCount = 0)
|
||||||
ExecuteCommand(Settings.DownloadsCompleteCommand)
|
ExecuteCommand(Settings.DownloadsCompleteCommand)
|
||||||
|
UpdateJobsLabel()
|
||||||
|
RaiseEvent OnDownloading(False)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub StartDownloading(ByRef _Job As Job)
|
Private Sub StartDownloading(ByRef _Job As Job)
|
||||||
RaiseEvent OnDownloading(True)
|
|
||||||
Dim isSeparated As Boolean = _Job.IsSeparated
|
Dim isSeparated As Boolean = _Job.IsSeparated
|
||||||
Dim n$ = _Job.Name
|
Dim n$ = _Job.Name
|
||||||
Dim pt As Func(Of String, String) = Function(ByVal t As String) As String
|
Dim pt As Func(Of String, String) = Function(ByVal t As String) As String
|
||||||
Dim _t$ = If(isSeparated, $"{n} {Left(t, 1).ToLower}{Right(t, t.Length - 1)}", t)
|
Dim _t$ = If(isSeparated, $"{n} {Left(t, 1).ToLower}{Right(t, t.Length - 1)}", t)
|
||||||
RaiseEvent SendNotification(_t)
|
If Not AutoDownloaderWorking Then RaiseEvent SendNotification(_t)
|
||||||
Return _t
|
Return _t
|
||||||
End Function
|
End Function
|
||||||
Try
|
Try
|
||||||
@@ -256,7 +242,7 @@ Namespace DownloadObjects
|
|||||||
Dim SiteChecked As Boolean = False
|
Dim SiteChecked As Boolean = False
|
||||||
Do While _Job.Count > 0
|
Do While _Job.Count > 0
|
||||||
_Job.ThrowIfCancellationRequested()
|
_Job.ThrowIfCancellationRequested()
|
||||||
If Not SiteChecked Then _Job.Available() : SiteChecked = True : Continue Do
|
If Not SiteChecked Then _Job.Available(AutoDownloaderWorking) : SiteChecked = True : Continue Do
|
||||||
UpdateJobsLabel()
|
UpdateJobsLabel()
|
||||||
DownloadData(_Job, _Job.Token)
|
DownloadData(_Job, _Job.Token)
|
||||||
_Job.ThrowIfCancellationRequested()
|
_Job.ThrowIfCancellationRequested()
|
||||||
@@ -269,20 +255,15 @@ Namespace DownloadObjects
|
|||||||
_Job.Progress.InformationTemporary = pt("Downloading error")
|
_Job.Progress.InformationTemporary = pt("Downloading error")
|
||||||
ErrorsDescriber.Execute(EDP.SendInLog, ex, "TDownloader.Start")
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "TDownloader.Start")
|
||||||
Finally
|
Finally
|
||||||
|
If _Job.Count > 0 Then _Job.Clear()
|
||||||
_Job.Stopped()
|
_Job.Stopped()
|
||||||
UpdateJobsLabel()
|
|
||||||
RaiseEvent OnDownloading(False)
|
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub [Stop]()
|
Friend Sub [Stop]()
|
||||||
If Pool.Count > 0 Then
|
If Pool.Count > 0 Then Pool.ForEach(Sub(j) If j.Working Then j.Stop())
|
||||||
For Each j As Job In Pool
|
|
||||||
If j.Working Then j.Stop()
|
|
||||||
Next
|
|
||||||
End If
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub UpdateJobsLabel()
|
Private Sub UpdateJobsLabel()
|
||||||
RaiseEvent OnJobsChange(Pool.Sum(Function(j) j.Count))
|
RaiseEvent OnJobsChange(Count)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub DownloadData(ByRef _Job As Job, ByVal Token As CancellationToken)
|
Private Sub DownloadData(ByRef _Job As Job, ByVal Token As CancellationToken)
|
||||||
Try
|
Try
|
||||||
@@ -351,7 +332,7 @@ Namespace DownloadObjects
|
|||||||
End Sub))
|
End Sub))
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Function GetUserFromMainCollection(ByVal User As IUserData) As IUserData
|
Friend Shared Function GetUserFromMainCollection(ByVal User As IUserData) As IUserData
|
||||||
Dim uSimple As Predicate(Of IUserData) = Function(u) u.Equals(DirectCast(User, UserDataBase))
|
Dim uSimple As Predicate(Of IUserData) = Function(u) u.Equals(DirectCast(User, UserDataBase))
|
||||||
Dim uCol As Predicate(Of IUserData) = Function(ByVal u As IUserData) As Boolean
|
Dim uCol As Predicate(Of IUserData) = Function(ByVal u As IUserData) As Boolean
|
||||||
If u.IsCollection Then
|
If u.IsCollection Then
|
||||||
@@ -375,6 +356,8 @@ Namespace DownloadObjects
|
|||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Add"
|
||||||
Private Sub AddItem(ByVal Item As IUserData, ByVal _UpdateJobsLabel As Boolean)
|
Private Sub AddItem(ByVal Item As IUserData, ByVal _UpdateJobsLabel As Boolean)
|
||||||
ReconfPool()
|
ReconfPool()
|
||||||
If Item.IsCollection Then
|
If Item.IsCollection Then
|
||||||
@@ -401,6 +384,8 @@ Namespace DownloadObjects
|
|||||||
End If
|
End If
|
||||||
Start()
|
Start()
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Contains, Remove"
|
||||||
Private Function Contains(ByVal _Item As IUserData)
|
Private Function Contains(ByVal _Item As IUserData)
|
||||||
If Pool.Count > 0 Then
|
If Pool.Count > 0 Then
|
||||||
For Each j As Job In Pool
|
For Each j As Job In Pool
|
||||||
@@ -412,6 +397,7 @@ Namespace DownloadObjects
|
|||||||
Friend Sub UserRemove(ByVal _Item As IUserData)
|
Friend Sub UserRemove(ByVal _Item As IUserData)
|
||||||
If Downloaded.Count > 0 AndAlso Downloaded.Contains(_Item) Then Downloaded.Remove(_Item) : RaiseEvent OnDownloadCountChange()
|
If Downloaded.Count > 0 AndAlso Downloaded.Contains(_Item) Then Downloaded.Remove(_Item) : RaiseEvent OnDownloadCountChange()
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
#Region "IDisposable Support"
|
#Region "IDisposable Support"
|
||||||
Private disposedValue As Boolean = False
|
Private disposedValue As Boolean = False
|
||||||
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
|||||||
15
SCrawler/Download/VideosDownloaderForm.Designer.vb
generated
@@ -16,11 +16,13 @@
|
|||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Dim SEP_1 As System.Windows.Forms.ToolStripSeparator
|
Dim SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim SEP_2 As System.Windows.Forms.ToolStripSeparator
|
Dim SEP_2 As System.Windows.Forms.ToolStripSeparator
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(VideosDownloaderForm))
|
||||||
Me.ToolbarTOP = New System.Windows.Forms.ToolStrip()
|
Me.ToolbarTOP = New System.Windows.Forms.ToolStrip()
|
||||||
Me.BTT_ADD = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_ADD = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_ADD_LIST = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_ADD_LIST = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DELETE = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DELETE = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DOWN = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DOWN = New System.Windows.Forms.ToolStripButton()
|
||||||
|
Me.BTT_STOP = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_OPEN_PATH = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_OPEN_PATH = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.ToolbarBOTTOM = New System.Windows.Forms.StatusStrip()
|
Me.ToolbarBOTTOM = New System.Windows.Forms.StatusStrip()
|
||||||
Me.PR_V = New System.Windows.Forms.ToolStripProgressBar()
|
Me.PR_V = New System.Windows.Forms.ToolStripProgressBar()
|
||||||
@@ -45,7 +47,7 @@
|
|||||||
'ToolbarTOP
|
'ToolbarTOP
|
||||||
'
|
'
|
||||||
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
||||||
Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_ADD, Me.BTT_ADD_LIST, Me.BTT_DELETE, SEP_1, Me.BTT_DOWN, SEP_2, Me.BTT_OPEN_PATH})
|
Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_ADD, Me.BTT_ADD_LIST, Me.BTT_DELETE, SEP_1, Me.BTT_DOWN, Me.BTT_STOP, SEP_2, Me.BTT_OPEN_PATH})
|
||||||
Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0)
|
Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.ToolbarTOP.Name = "ToolbarTOP"
|
Me.ToolbarTOP.Name = "ToolbarTOP"
|
||||||
Me.ToolbarTOP.Size = New System.Drawing.Size(524, 25)
|
Me.ToolbarTOP.Size = New System.Drawing.Size(524, 25)
|
||||||
@@ -87,6 +89,16 @@
|
|||||||
Me.BTT_DOWN.Size = New System.Drawing.Size(104, 22)
|
Me.BTT_DOWN.Size = New System.Drawing.Size(104, 22)
|
||||||
Me.BTT_DOWN.Text = "Download (F5)"
|
Me.BTT_DOWN.Text = "Download (F5)"
|
||||||
'
|
'
|
||||||
|
'BTT_STOP
|
||||||
|
'
|
||||||
|
Me.BTT_STOP.AutoToolTip = False
|
||||||
|
Me.BTT_STOP.Enabled = False
|
||||||
|
Me.BTT_STOP.Image = CType(resources.GetObject("BTT_STOP.Image"), System.Drawing.Image)
|
||||||
|
Me.BTT_STOP.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||||
|
Me.BTT_STOP.Name = "BTT_STOP"
|
||||||
|
Me.BTT_STOP.Size = New System.Drawing.Size(51, 22)
|
||||||
|
Me.BTT_STOP.Text = "Stop"
|
||||||
|
'
|
||||||
'BTT_OPEN_PATH
|
'BTT_OPEN_PATH
|
||||||
'
|
'
|
||||||
Me.BTT_OPEN_PATH.AutoToolTip = False
|
Me.BTT_OPEN_PATH.AutoToolTip = False
|
||||||
@@ -156,5 +168,6 @@
|
|||||||
Private WithEvents LIST_VIDEOS As ListBox
|
Private WithEvents LIST_VIDEOS As ListBox
|
||||||
Private WithEvents BTT_DOWN As ToolStripButton
|
Private WithEvents BTT_DOWN As ToolStripButton
|
||||||
Private WithEvents BTT_OPEN_PATH As ToolStripButton
|
Private WithEvents BTT_OPEN_PATH As ToolStripButton
|
||||||
|
Private WithEvents BTT_STOP As ToolStripButton
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -126,6 +126,36 @@
|
|||||||
<metadata name="ToolbarTOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ToolbarTOP.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>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="BTT_STOP.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
/QAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
<metadata name="ToolbarBOTTOM.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="ToolbarBOTTOM.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>124, 17</value>
|
<value>124, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|||||||
@@ -8,27 +8,26 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports System.ComponentModel
|
Imports System.ComponentModel
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
|
Imports PersonalUtilities.Tools
|
||||||
Namespace DownloadObjects
|
Namespace DownloadObjects
|
||||||
Friend Class VideosDownloaderForm
|
Friend Class VideosDownloaderForm
|
||||||
|
#Region "Declarations"
|
||||||
Private MyView As FormsView
|
Private MyView As FormsView
|
||||||
Private ReadOnly MyPR As Toolbars.MyProgress
|
|
||||||
Private ReadOnly UrlList As List(Of String)
|
|
||||||
Private ReadOnly DownloadingUrlsFile As SFile = $"{SettingsFolderName}\VideosUrls.txt"
|
Private ReadOnly DownloadingUrlsFile As SFile = $"{SettingsFolderName}\VideosUrls.txt"
|
||||||
|
Private ReadOnly MyJob As JobThread(Of String)
|
||||||
|
#End Region
|
||||||
|
#Region "Initializer"
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
UrlList = New List(Of String)
|
MyJob = New JobThread(Of String) With {.Progress = New Toolbars.MyProgress(ToolbarBOTTOM, PR_V, LBL_STATUS, "Downloading video")}
|
||||||
MyPR = New Toolbars.MyProgress(ToolbarBOTTOM, PR_V, LBL_STATUS, "Downloading video")
|
|
||||||
If DownloadingUrlsFile.Exists Then _
|
If DownloadingUrlsFile.Exists Then _
|
||||||
UrlList.ListAddList(DownloadingUrlsFile.GetText.StringToList(Of String, List(Of String))(Environment.NewLine), LAP.NotContainsOnly)
|
MyJob.Items.ListAddList(DownloadingUrlsFile.GetText.StringToList(Of String, List(Of String))(Environment.NewLine), LAP.NotContainsOnly)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub VideosDownloaderForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub VideosDownloaderForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
|
||||||
MyView = New FormsView(Me)
|
MyView = New FormsView(Me)
|
||||||
MyView.ImportFromXML(Settings.Design)
|
MyView.ImportFromXML(Settings.Design)
|
||||||
MyView.SetMeSize()
|
MyView.SetMeSize()
|
||||||
RefillList(False)
|
RefillList(False)
|
||||||
Catch ex As Exception
|
|
||||||
End Try
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub VideosDownloaderForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
Private Sub VideosDownloaderForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
||||||
e.Cancel = True
|
e.Cancel = True
|
||||||
@@ -36,95 +35,120 @@ Namespace DownloadObjects
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub VideosDownloaderForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
Private Sub VideosDownloaderForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
If Not MyView Is Nothing Then MyView.Dispose(Settings.Design)
|
If Not MyView Is Nothing Then MyView.Dispose(Settings.Design)
|
||||||
If UrlList.Count > 0 Then UpdateUrlsFile()
|
If MyJob.Count > 0 Then UpdateUrlsFile()
|
||||||
UrlList.Clear()
|
MyJob.Dispose()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub VideosDownloaderForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
Private Sub VideosDownloaderForm_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
|
||||||
Case Keys.Insert : AddVideo()
|
Case Keys.Insert : AddItem()
|
||||||
Case Keys.F5 : DownloadVideos()
|
Case Keys.F5 : StartDownloading()
|
||||||
Case Keys.F8 : BTT_DELETE_Click(Nothing, EventArgs.Empty)
|
Case Keys.F8 : DeleteItem()
|
||||||
Case Else : b = False
|
Case Else : b = False
|
||||||
End Select
|
End Select
|
||||||
If b Then e.Handled = True
|
If b Then e.Handled = True
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Refill, Update file"
|
||||||
Private Sub RefillList(Optional ByVal Update As Boolean = True)
|
Private Sub RefillList(Optional ByVal Update As Boolean = True)
|
||||||
Try
|
Try
|
||||||
|
Dim a As Action = Sub()
|
||||||
With LIST_VIDEOS
|
With LIST_VIDEOS
|
||||||
.Items.Clear()
|
.Items.Clear()
|
||||||
If UrlList.Count > 0 Then UrlList.ForEach(Sub(u) .Items.Add(u))
|
If MyJob.Count > 0 Then MyJob.Items.ForEach(Sub(u) .Items.Add(u))
|
||||||
If .Items.Count > 0 And _LatestSelected >= 0 And _LatestSelected <= .Items.Count - 1 Then .SelectedIndex = _LatestSelected
|
If _LatestSelected.ValueBetween(0, .Items.Count - 1) Then .SelectedIndex = _LatestSelected
|
||||||
If Update Then UpdateUrlsFile()
|
If Update Then UpdateUrlsFile()
|
||||||
End With
|
End With
|
||||||
|
End Sub
|
||||||
|
If LIST_VIDEOS.InvokeRequired Then LIST_VIDEOS.Invoke(a) Else a.Invoke
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Error on list refill")
|
ErrorsDescriber.Execute(EDP.SendInLog, ex, "Error on list refill")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub UpdateUrlsFile()
|
Private Sub UpdateUrlsFile()
|
||||||
If UrlList.Count > 0 Then
|
If MyJob.Count > 0 Then
|
||||||
TextSaver.SaveTextToFile(UrlList.ListToString(Environment.NewLine), DownloadingUrlsFile, True,, EDP.SendInLog)
|
TextSaver.SaveTextToFile(MyJob.ListToString(Environment.NewLine), DownloadingUrlsFile, True,, EDP.SendInLog)
|
||||||
Else
|
Else
|
||||||
DownloadingUrlsFile.Delete(, Settings.DeleteMode, EDP.SendInLog)
|
DownloadingUrlsFile.Delete(, Settings.DeleteMode, EDP.SendInLog)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_ADD_Click(sender As Object, e As EventArgs) Handles BTT_ADD.Click
|
#End Region
|
||||||
AddVideo()
|
#Region "Add, Delete"
|
||||||
End Sub
|
Private Sub AddItem() Handles BTT_ADD.Click
|
||||||
Private Sub AddVideo()
|
|
||||||
Dim URL$ = GetNewVideoURL()
|
Dim URL$ = GetNewVideoURL()
|
||||||
If Not URL.IsEmptyString Then
|
If Not URL.IsEmptyString Then
|
||||||
If Not UrlList.Contains(URL) Then
|
If Not MyJob.Contains(URL) Then
|
||||||
UrlList.Add(URL)
|
MyJob.Add(URL)
|
||||||
RefillList()
|
RefillList()
|
||||||
Else
|
Else
|
||||||
MsgBoxE("This URL already added to list")
|
MsgBoxE("This URL has already been added to the list")
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_ADD_LIST_Click(sender As Object, e As EventArgs) Handles BTT_ADD_LIST.Click
|
Private Sub AddItemsRange() Handles BTT_ADD_LIST.Click
|
||||||
Dim l$ = InputBoxE("Enter URLs (new line as delimiter):", "URLs list", GetCurrentBuffer(),,,,,, True)
|
Dim l$ = InputBoxE("Enter URLs (new line as delimiter):", "URLs list", GetCurrentBuffer(),,,,,, True)
|
||||||
If Not l.IsEmptyString Then
|
If Not l.IsEmptyString Then
|
||||||
Dim ub% = UrlList.Count
|
Dim ub% = MyJob.Count
|
||||||
UrlList.ListAddList(l.StringFormatLines.StringToList(Of String, List(Of String))(vbCrLf).ListForEach(Function(u, i) u.Trim,, False))
|
MyJob.Items.ListAddList(l.StringFormatLines.StringToList(Of String, List(Of String))(vbCrLf).ListForEach(Function(u, i) u.Trim,, False))
|
||||||
If Not UrlList.Count = ub Then RefillList()
|
If Not MyJob.Count = ub Then RefillList()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_DELETE_Click(sender As Object, e As EventArgs) Handles BTT_DELETE.Click
|
Private Sub DeleteItem() Handles BTT_DELETE.Click
|
||||||
If _LatestSelected >= 0 And _LatestSelected <= UrlList.Count - 1 Then
|
If _LatestSelected.ValueBetween(0, MyJob.Count - 1) Then
|
||||||
If MsgBoxE({$"Do you really want to delete video URL:{vbCr}{UrlList(_LatestSelected)}", "Deleting URL..."},
|
If MsgBoxE({$"Are you sure you want to delete the video URL:{vbCr}{MyJob(_LatestSelected)}", "Deleting URL..."}, vbExclamation + vbYesNo) = vbYes Then
|
||||||
MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
MyJob.Items.RemoveAt(_LatestSelected)
|
||||||
UrlList.RemoveAt(_LatestSelected)
|
|
||||||
RefillList()
|
RefillList()
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
MsgBoxE("URL does not selected", MsgBoxStyle.Exclamation)
|
MsgBoxE("URL not selected", MsgBoxStyle.Exclamation)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Start, Stop"
|
||||||
Private Sub BTT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_DOWN.Click
|
Private Sub BTT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_DOWN.Click
|
||||||
DownloadVideos()
|
StartDownloading()
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_STOP_Click(sender As Object, e As EventArgs) Handles BTT_STOP.Click
|
||||||
|
SetControlValueInvoke(ToolbarTOP, BTT_STOP, Sub() BTT_STOP.Enabled = False)
|
||||||
|
MyJob.Stop()
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Downloading"
|
||||||
|
Private Sub StartDownloading()
|
||||||
|
If Not MyJob.Working And MyJob.Count > 0 Then
|
||||||
|
SetControlValueInvoke(ToolbarTOP, BTT_DOWN, Sub() BTT_DOWN.Enabled = False)
|
||||||
|
SetControlValueInvoke(ToolbarTOP, BTT_STOP, Sub() BTT_STOP.Enabled = True)
|
||||||
|
MyJob.Start(AddressOf DownloadVideos, Threading.ApartmentState.STA)
|
||||||
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub DownloadVideos()
|
Private Sub DownloadVideos()
|
||||||
If UrlList.Count > 0 Then
|
MyJob.Start()
|
||||||
MyPR.TotalCount = UrlList.Count
|
If MyJob.Count > 0 Then
|
||||||
MyPR.Enabled = True
|
MyJob.Progress.TotalCount = MyJob.Count
|
||||||
|
MyJob.Progress.Enabled = True
|
||||||
Dim IsFirst As Boolean = True
|
Dim IsFirst As Boolean = True
|
||||||
For i% = UrlList.Count - 1 To 0 Step -1
|
For i% = MyJob.Count - 1 To 0 Step -1
|
||||||
If DownloadVideoByURL(UrlList(i), IsFirst, True) Then UrlList.RemoveAt(i)
|
If MyJob.IsCancellationRequested Then Exit For
|
||||||
MyPR.Perform()
|
If DownloadVideoByURL(MyJob(i), IsFirst, True) Then MyJob.Items.RemoveAt(i)
|
||||||
|
MyJob.Progress.Perform()
|
||||||
IsFirst = False
|
IsFirst = False
|
||||||
Next
|
Next
|
||||||
MyPR.Done()
|
MyJob.Progress.Done()
|
||||||
RefillList()
|
RefillList()
|
||||||
MyPR.Enabled = False
|
MyJob.Progress.Enabled = False
|
||||||
Else
|
|
||||||
MsgBoxE("No one video added", MsgBoxStyle.Exclamation)
|
|
||||||
End If
|
End If
|
||||||
|
SetControlValueInvoke(ToolbarTOP, BTT_DOWN, Sub() BTT_DOWN.Enabled = True)
|
||||||
|
SetControlValueInvoke(ToolbarTOP, BTT_STOP, Sub() BTT_STOP.Enabled = False)
|
||||||
|
MyJob.Stopped()
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "List handlers"
|
||||||
Private _LatestSelected As Integer = -1
|
Private _LatestSelected As Integer = -1
|
||||||
Private Sub LIST_VIDEOS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_VIDEOS.SelectedIndexChanged
|
Private Sub LIST_VIDEOS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_VIDEOS.SelectedIndexChanged
|
||||||
_LatestSelected = LIST_VIDEOS.SelectedIndex
|
_LatestSelected = LIST_VIDEOS.SelectedIndex
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Open path"
|
||||||
Private Sub BTT_OPEN_PATH_Click(sender As Object, e As EventArgs) Handles BTT_OPEN_PATH.Click
|
Private Sub BTT_OPEN_PATH_Click(sender As Object, e As EventArgs) Handles BTT_OPEN_PATH.Click
|
||||||
With Settings.LatestSavingPath
|
With Settings.LatestSavingPath
|
||||||
If Not .Value.IsEmptyString Then
|
If Not .Value.IsEmptyString Then
|
||||||
@@ -134,9 +158,10 @@ Namespace DownloadObjects
|
|||||||
MsgBoxE($"Path [{ .Value}] does not exists!", MsgBoxStyle.Exclamation)
|
MsgBoxE($"Path [{ .Value}] does not exists!", MsgBoxStyle.Exclamation)
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
MsgBoxE("Saving path does not set!", MsgBoxStyle.Exclamation)
|
MsgBoxE("Save path not specified!", MsgBoxStyle.Exclamation)
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
|
#End Region
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
61
SCrawler/Editors/CollectionEditorForm.Designer.vb
generated
@@ -14,13 +14,14 @@
|
|||||||
Private components As System.ComponentModel.IContainer
|
Private components As System.ComponentModel.IContainer
|
||||||
<System.Diagnostics.DebuggerStepThrough()>
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
|
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(CollectionEditorForm))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(CollectionEditorForm))
|
||||||
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton4 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
|
||||||
Me.CMB_COLLECTIONS = New PersonalUtilities.Forms.Controls.ComboBoxExtended()
|
Me.CMB_COLLECTIONS = New PersonalUtilities.Forms.Controls.ComboBoxExtended()
|
||||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
Me.CONTAINER_MAIN.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
CType(Me.CMB_COLLECTIONS, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.CMB_COLLECTIONS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
@@ -29,30 +30,28 @@
|
|||||||
'
|
'
|
||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_COLLECTIONS)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_COLLECTIONS)
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Padding = New System.Windows.Forms.Padding(2, 0, 2, 0)
|
CONTAINER_MAIN.ContentPanel.Padding = New System.Windows.Forms.Padding(2, 0, 2, 0)
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(454, 251)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(454, 251)
|
||||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(454, 251)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(454, 251)
|
||||||
Me.CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
'CMB_COLLECTIONS
|
'CMB_COLLECTIONS
|
||||||
'
|
'
|
||||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton1.Index = 0
|
ActionButton3.Name = "Add"
|
||||||
ActionButton1.Name = "BTT_COMBOBOX_ARROW"
|
ActionButton3.ToolTipText = "Add new collection"
|
||||||
ActionButton1.Visible = False
|
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
ActionButton4.Name = "ArrowDown"
|
||||||
ActionButton2.Index = 1
|
ActionButton4.Visible = False
|
||||||
ActionButton2.Name = "BTT_ADD"
|
Me.CMB_COLLECTIONS.Buttons.Add(ActionButton3)
|
||||||
ActionButton2.ToolTipText = "Add new collection"
|
Me.CMB_COLLECTIONS.Buttons.Add(ActionButton4)
|
||||||
Me.CMB_COLLECTIONS.Buttons.Add(ActionButton1)
|
|
||||||
Me.CMB_COLLECTIONS.Buttons.Add(ActionButton2)
|
|
||||||
Me.CMB_COLLECTIONS.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CMB_COLLECTIONS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CMB_COLLECTIONS.ListDropDownStyle = PersonalUtilities.Forms.Controls.ComboBoxExtended.ListMode.Simple
|
Me.CMB_COLLECTIONS.ListDropDownStyle = PersonalUtilities.Forms.Controls.ComboBoxExtended.ListMode.Simple
|
||||||
Me.CMB_COLLECTIONS.Location = New System.Drawing.Point(2, 0)
|
Me.CMB_COLLECTIONS.Location = New System.Drawing.Point(2, 0)
|
||||||
@@ -65,7 +64,7 @@
|
|||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
Me.ClientSize = New System.Drawing.Size(454, 251)
|
Me.ClientSize = New System.Drawing.Size(454, 251)
|
||||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MinimizeBox = False
|
Me.MinimizeBox = False
|
||||||
Me.MinimumSize = New System.Drawing.Size(470, 290)
|
Me.MinimumSize = New System.Drawing.Size(470, 290)
|
||||||
@@ -73,15 +72,13 @@
|
|||||||
Me.ShowIcon = False
|
Me.ShowIcon = False
|
||||||
Me.ShowInTaskbar = False
|
Me.ShowInTaskbar = False
|
||||||
Me.Text = "Collection"
|
Me.Text = "Collection"
|
||||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.PerformLayout()
|
CONTAINER_MAIN.PerformLayout()
|
||||||
CType(Me.CMB_COLLECTIONS, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.CMB_COLLECTIONS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private WithEvents CONTAINER_MAIN As ToolStripContainer
|
|
||||||
Private WithEvents CMB_COLLECTIONS As PersonalUtilities.Forms.Controls.ComboBoxExtended
|
Private WithEvents CMB_COLLECTIONS As PersonalUtilities.Forms.Controls.ComboBoxExtended
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -117,8 +117,33 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
||||||
|
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlE
|
||||||
|
QVRIS62WWWxMURjHL220JW1HausmlFrDFKUhnUGH6bRFzJ2idImlC0Vp2mlji1A8iNhCPIjIRES8EU+W
|
||||||
|
h2oEtbSDTk3HNNM7S01VKsXjkb/vXBo3k1Ee7sMvmZzzzf//ne/+z50RAAxL1MUIG4G/YAv3HSVhF5Vw
|
||||||
|
IYNdz3LadVj9RgdTB+HQYYPHIJuE1ocSdlEJFzG+1bPRLQLinglIeCkg+XUkKvz56hnkOfQs/rmA8S9H
|
||||||
|
YEp7FDI64tAQtKhnsMapZ7zzNHsUFnbGY4VzIk70l6hnIH4wsDR7NBZ3apDrSqL5T8eFgUr1DLZ78lim
|
||||||
|
Q4N8VzK29MxEpZSBa4M16hnU+c3M9CEFpdJsVHsXos63DDcHrf9nQEXD5VymwW/5USLNwl5vJhp7dTgW
|
||||||
|
NML2pR7jbsUMS+KdMTa5Q8NQxinfBU4dRFcOyjy52OtbhwOBDTgZLKPPmTgY0ON4MBdNfSbYBupxY8Aq
|
||||||
|
G10dqMG5/nIc7ytGQ6CQRliAamkTN/g1Ai4e95Qy3iogpX0UtBRDnhRzdxq2SXOxz5eFQ70rScCEU335
|
||||||
|
ssGxj0YS06HSm4GN3ekwdE2C1hGH1LZR0JDOJof5jwHvnIvzTa0jlooTYfktvt+fhcOBHDQFTWRgxJGP
|
||||||
|
ObAGsulZLMLWnjlY756K5c4JmNcRi6T2SGheCIihS2l5ozAo6NRhMolnUAcGV6IcwwqvFrX+JTjYuwKH
|
||||||
|
SfRAYDms/mzs9y1GFe2VSnOw1j0FejqpLN4WCX4ZufiIBwLMLxQGm12rsLQzgWKYgmLPLNTQw6ynpDSS
|
||||||
|
IBet8y+TqaVRVdFIeJrWuCcj+/0EzH43BomvIhBLI45uFiDcJ+6QwROFwa6+Amb9bGFNg6Xs9Ncd7Oy3
|
||||||
|
Knb2eyU7/20nu9y/m136tIvEl6BC0qKoZwby3alo9JVhj7T5R7m/kJVIIityi8zyXmTiW+I10SqyIQNb
|
||||||
|
uIgNwYuuf25kFd75KPKkI49OmUWnrfYWyXv/wBb2cijhhVf6a9lGei65XclYRDd6mj0GWz2iLBJaH0rY
|
||||||
|
RSVc5Eywmhm7kuQXHX+bJlBStrh+zTi0PpSwi0q4yNFAOVvgiEcKJWUsxZn/NhT+znlofShhF5VwkRpv
|
||||||
|
MUtti4KGYjj6sYCIh5QSu4oG27stjItHU+cjeQzvkcFzFQ2KnSKLoc4FukDCXeI2GbSoaFD4ziyPxNxK
|
||||||
|
0AUyNxOP1DOwcaG/8I+/LRB+At7psBnyDBG0AAAAAElFTkSuQmCC
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
||||||
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
||||||
@@ -206,28 +231,6 @@
|
|||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
||||||
AAAASUVORK5CYII=
|
AAAASUVORK5CYII=
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="ActionButton2.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
|
||||||
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlE
|
|
||||||
QVRIS62WWWxMURjHL220JW1HausmlFrDFKUhnUGH6bRFzJ2idImlC0Vp2mlji1A8iNhCPIjIRES8EU+W
|
|
||||||
h2oEtbSDTk3HNNM7S01VKsXjkb/vXBo3k1Ee7sMvmZzzzf//ne/+z50RAAxL1MUIG4G/YAv3HSVhF5Vw
|
|
||||||
IYNdz3LadVj9RgdTB+HQYYPHIJuE1ocSdlEJFzG+1bPRLQLinglIeCkg+XUkKvz56hnkOfQs/rmA8S9H
|
|
||||||
YEp7FDI64tAQtKhnsMapZ7zzNHsUFnbGY4VzIk70l6hnIH4wsDR7NBZ3apDrSqL5T8eFgUr1DLZ78lim
|
|
||||||
Q4N8VzK29MxEpZSBa4M16hnU+c3M9CEFpdJsVHsXos63DDcHrf9nQEXD5VymwW/5USLNwl5vJhp7dTgW
|
|
||||||
NML2pR7jbsUMS+KdMTa5Q8NQxinfBU4dRFcOyjy52OtbhwOBDTgZLKPPmTgY0ON4MBdNfSbYBupxY8Aq
|
|
||||||
G10dqMG5/nIc7ytGQ6CQRliAamkTN/g1Ai4e95Qy3iogpX0UtBRDnhRzdxq2SXOxz5eFQ70rScCEU335
|
|
||||||
ssGxj0YS06HSm4GN3ekwdE2C1hGH1LZR0JDOJof5jwHvnIvzTa0jlooTYfktvt+fhcOBHDQFTWRgxJGP
|
|
||||||
ObAGsulZLMLWnjlY756K5c4JmNcRi6T2SGheCIihS2l5ozAo6NRhMolnUAcGV6IcwwqvFrX+JTjYuwKH
|
|
||||||
SfRAYDms/mzs9y1GFe2VSnOw1j0FejqpLN4WCX4ZufiIBwLMLxQGm12rsLQzgWKYgmLPLNTQw6ynpDSS
|
|
||||||
IBet8y+TqaVRVdFIeJrWuCcj+/0EzH43BomvIhBLI45uFiDcJ+6QwROFwa6+Amb9bGFNg6Xs9Ncd7Oy3
|
|
||||||
Knb2eyU7/20nu9y/m136tIvEl6BC0qKoZwby3alo9JVhj7T5R7m/kJVIIityi8zyXmTiW+I10SqyIQNb
|
|
||||||
uIgNwYuuf25kFd75KPKkI49OmUWnrfYWyXv/wBb2cijhhVf6a9lGei65XclYRDd6mj0GWz2iLBJaH0rY
|
|
||||||
RSVc5Eywmhm7kuQXHX+bJlBStrh+zTi0PpSwi0q4yNFAOVvgiEcKJWUsxZn/NhT+znlofShhF5VwkRpv
|
|
||||||
MUtti4KGYjj6sYCIh5QSu4oG27stjItHU+cjeQzvkcFzFQ2KnSKLoc4FukDCXeI2GbSoaFD4ziyPxNxK
|
|
||||||
0AUyNxOP1DOwcaG/8I+/LRB+At7psBnyDBG0AAAAAElFTkSuQmCC
|
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -8,15 +8,14 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
|
||||||
Namespace Editors
|
Namespace Editors
|
||||||
Friend Class CollectionEditorForm : Implements IOkCancelToolbar
|
Friend Class CollectionEditorForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Private ReadOnly Collections As List(Of String)
|
Private ReadOnly Collections As List(Of String)
|
||||||
Friend Property [Collection] As String = String.Empty
|
Friend Property [Collection] As String = String.Empty
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
Collections = New List(Of String)
|
Collections = New List(Of String)
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub New(ByVal CollectionName As String)
|
Friend Sub New(ByVal CollectionName As String)
|
||||||
@@ -26,12 +25,13 @@ Namespace Editors
|
|||||||
Private Sub CollectionEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub CollectionEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
Try
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design)
|
.MyViewInitialize()
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
|
||||||
Collections.ListAddList((From c In Settings.Users Where c.IsCollection Select c.CollectionName), LAP.NotContainsOnly, EDP.ThrowException)
|
Collections.ListAddList((From c In Settings.Users Where c.IsCollection Select c.CollectionName), LAP.NotContainsOnly, EDP.ThrowException)
|
||||||
If Collections.ListExists Then Collections.Sort() : CMB_COLLECTIONS.Items.AddRange(From c In Collections Select New ListItem(c))
|
If Collections.ListExists Then Collections.Sort() : CMB_COLLECTIONS.Items.AddRange(From c In Collections Select New ListItem(c))
|
||||||
If Not Collection.IsEmptyString And Collections.Contains(Collection) Then CMB_COLLECTIONS.SelectedIndex = Collections.IndexOf(Collection)
|
If Not Collection.IsEmptyString And Collections.Contains(Collection) Then CMB_COLLECTIONS.SelectedIndex = Collections.IndexOf(Collection)
|
||||||
|
.DelegateClosingChecker = False
|
||||||
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MyDefs.InvokeLoaderError(ex)
|
MyDefs.InvokeLoaderError(ex)
|
||||||
@@ -43,7 +43,7 @@ Namespace Editors
|
|||||||
Private Sub CollectionEditorForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
Private Sub CollectionEditorForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
||||||
If e.KeyCode = Keys.Insert Then AddNewCollection() : e.Handled = True Else e.Handled = False
|
If e.KeyCode = Keys.Insert Then AddNewCollection() : e.Handled = True Else e.Handled = False
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick() Handles MyDefs.ButtonOkClick
|
||||||
If CMB_COLLECTIONS.SelectedIndex >= 0 Then
|
If CMB_COLLECTIONS.SelectedIndex >= 0 Then
|
||||||
Collection = CMB_COLLECTIONS.Value.ToString
|
Collection = CMB_COLLECTIONS.Value.ToString
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
@@ -51,15 +51,12 @@ Namespace Editors
|
|||||||
MsgBoxE("Collection not selected", MsgBoxStyle.Exclamation)
|
MsgBoxE("Collection not selected", MsgBoxStyle.Exclamation)
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
Private Sub CMB_COLLECTIONS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles CMB_COLLECTIONS.ActionOnButtonClick
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub CMB_COLLECTIONS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles CMB_COLLECTIONS.ActionOnButtonClick
|
|
||||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Add Then AddNewCollection()
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Add Then AddNewCollection()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CMB_COLLECTIONS_ActionOnListDoubleClick(ByVal _Item As ListViewItem) Handles CMB_COLLECTIONS.ActionOnListDoubleClick
|
Private Sub CMB_COLLECTIONS_ActionOnListDoubleClick(ByVal _Item As ListViewItem) Handles CMB_COLLECTIONS.ActionOnListDoubleClick
|
||||||
_Item.Selected = True
|
_Item.Selected = True
|
||||||
ToolbarBttOK()
|
MyDefs_ButtonOkClick()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub AddNewCollection()
|
Private Sub AddNewCollection()
|
||||||
Dim c$ = InputBoxE("Enter new collection name:", "Collection name")
|
Dim c$ = InputBoxE("Enter new collection name:", "Collection name")
|
||||||
|
|||||||
263
SCrawler/Editors/GlobalSettingsForm.Designer.vb
generated
@@ -37,12 +37,13 @@
|
|||||||
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 ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim TAB_DOWN As System.Windows.Forms.TabPage
|
|
||||||
Dim TP_DOWNLOADING As System.Windows.Forms.TableLayoutPanel
|
|
||||||
Dim ActionButton8 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 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 TP_DOWNLOADING As System.Windows.Forms.TableLayoutPanel
|
||||||
|
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()
|
||||||
Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_GLOBAL_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_IMAGE_LARGE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_IMAGE_SMALL = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
@@ -69,23 +70,24 @@
|
|||||||
Me.CH_CHANNELS_USERS_TEMP = New System.Windows.Forms.CheckBox()
|
Me.CH_CHANNELS_USERS_TEMP = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_COPY_CHANNEL_USER_IMAGE_ALL = New System.Windows.Forms.CheckBox()
|
Me.CH_COPY_CHANNEL_USER_IMAGE_ALL = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_UDESCR_UP = New System.Windows.Forms.CheckBox()
|
Me.CH_UDESCR_UP = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND = 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.TXT_CHANNEL_USER_POST_LIMIT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_CHANNEL_USER_POST_LIMIT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_FOLDER_CMD = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_FOLDER_CMD = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.CH_EXIT_CONFIRM = New System.Windows.Forms.CheckBox()
|
Me.CH_EXIT_CONFIRM = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_CLOSE_TO_TRAY = New System.Windows.Forms.CheckBox()
|
Me.CH_CLOSE_TO_TRAY = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_SHOW_NOTIFY = New System.Windows.Forms.CheckBox()
|
Me.CH_SHOW_NOTIFY = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_RECYCLE_DEL = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.CH_DOWN_OPEN_INFO = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.TXT_CLOSE_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_CLOSE_SCRIPT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.CH_DOWN_OPEN_INFO = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_RECYCLE_DEL = 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.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()
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND = New System.Windows.Forms.CheckBox()
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND = New System.Windows.Forms.CheckBox()
|
|
||||||
TP_BASIS = New System.Windows.Forms.TableLayoutPanel()
|
TP_BASIS = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TP_IMAGES = New System.Windows.Forms.TableLayoutPanel()
|
TP_IMAGES = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TP_FILE_NAME = New System.Windows.Forms.TableLayoutPanel()
|
TP_FILE_NAME = New System.Windows.Forms.TableLayoutPanel()
|
||||||
@@ -100,10 +102,10 @@
|
|||||||
TP_CHANNELS = New System.Windows.Forms.TableLayoutPanel()
|
TP_CHANNELS = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TAB_BEHAVIOR = New System.Windows.Forms.TabPage()
|
TAB_BEHAVIOR = New System.Windows.Forms.TabPage()
|
||||||
TP_BEHAVIOR = New System.Windows.Forms.TableLayoutPanel()
|
TP_BEHAVIOR = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TAB_DOWN = New System.Windows.Forms.TabPage()
|
|
||||||
TP_DOWNLOADING = New System.Windows.Forms.TableLayoutPanel()
|
|
||||||
TP_OPEN_INFO = New System.Windows.Forms.TableLayoutPanel()
|
TP_OPEN_INFO = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TP_OPEN_PROGRESS = New System.Windows.Forms.TableLayoutPanel()
|
TP_OPEN_PROGRESS = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TAB_DOWN = New System.Windows.Forms.TabPage()
|
||||||
|
TP_DOWNLOADING = New System.Windows.Forms.TableLayoutPanel()
|
||||||
TP_BASIS.SuspendLayout()
|
TP_BASIS.SuspendLayout()
|
||||||
CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_GLOBAL_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
TP_IMAGES.SuspendLayout()
|
TP_IMAGES.SuspendLayout()
|
||||||
@@ -128,6 +130,8 @@
|
|||||||
TP_BEHAVIOR.SuspendLayout()
|
TP_BEHAVIOR.SuspendLayout()
|
||||||
CType(Me.TXT_FOLDER_CMD, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_FOLDER_CMD, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.TXT_CLOSE_SCRIPT, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_CLOSE_SCRIPT, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
TP_OPEN_INFO.SuspendLayout()
|
||||||
|
TP_OPEN_PROGRESS.SuspendLayout()
|
||||||
TAB_DOWN.SuspendLayout()
|
TAB_DOWN.SuspendLayout()
|
||||||
TP_DOWNLOADING.SuspendLayout()
|
TP_DOWNLOADING.SuspendLayout()
|
||||||
CType(Me.TXT_SCRIPT, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_SCRIPT, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
@@ -135,8 +139,6 @@
|
|||||||
Me.TAB_MAIN.SuspendLayout()
|
Me.TAB_MAIN.SuspendLayout()
|
||||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
Me.CONTAINER_MAIN.SuspendLayout()
|
Me.CONTAINER_MAIN.SuspendLayout()
|
||||||
TP_OPEN_INFO.SuspendLayout()
|
|
||||||
TP_OPEN_PROGRESS.SuspendLayout()
|
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'TP_BASIS
|
'TP_BASIS
|
||||||
@@ -167,17 +169,15 @@
|
|||||||
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, 253)
|
TP_BASIS.Size = New System.Drawing.Size(570, 278)
|
||||||
TP_BASIS.TabIndex = 0
|
TP_BASIS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TXT_GLOBAL_PATH
|
'TXT_GLOBAL_PATH
|
||||||
'
|
'
|
||||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton1.Index = 0
|
ActionButton1.Name = "Open"
|
||||||
ActionButton1.Name = "BTT_OPEN"
|
|
||||||
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton2.Index = 1
|
ActionButton2.Name = "Clear"
|
||||||
ActionButton2.Name = "BTT_CLEAR"
|
|
||||||
Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton1)
|
Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton1)
|
||||||
Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton2)
|
Me.TXT_GLOBAL_PATH.Buttons.Add(ActionButton2)
|
||||||
Me.TXT_GLOBAL_PATH.CaptionText = "Data Path"
|
Me.TXT_GLOBAL_PATH.CaptionText = "Data Path"
|
||||||
@@ -215,7 +215,7 @@
|
|||||||
Me.TXT_IMAGE_LARGE.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.TXT_IMAGE_LARGE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.TXT_IMAGE_LARGE.Location = New System.Drawing.Point(3, 3)
|
Me.TXT_IMAGE_LARGE.Location = New System.Drawing.Point(3, 3)
|
||||||
Me.TXT_IMAGE_LARGE.Name = "TXT_IMAGE_LARGE"
|
Me.TXT_IMAGE_LARGE.Name = "TXT_IMAGE_LARGE"
|
||||||
Me.TXT_IMAGE_LARGE.NumberMaximum = New Decimal(New Integer() {1000, 0, 0, 0})
|
Me.TXT_IMAGE_LARGE.NumberMaximum = New Decimal(New Integer() {256, 0, 0, 0})
|
||||||
Me.TXT_IMAGE_LARGE.NumberMinimum = New Decimal(New Integer() {50, 0, 0, 0})
|
Me.TXT_IMAGE_LARGE.NumberMinimum = New Decimal(New Integer() {50, 0, 0, 0})
|
||||||
Me.TXT_IMAGE_LARGE.Size = New System.Drawing.Size(278, 22)
|
Me.TXT_IMAGE_LARGE.Size = New System.Drawing.Size(278, 22)
|
||||||
Me.TXT_IMAGE_LARGE.TabIndex = 0
|
Me.TXT_IMAGE_LARGE.TabIndex = 0
|
||||||
@@ -231,7 +231,7 @@
|
|||||||
Me.TXT_IMAGE_SMALL.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.TXT_IMAGE_SMALL.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.TXT_IMAGE_SMALL.Location = New System.Drawing.Point(287, 3)
|
Me.TXT_IMAGE_SMALL.Location = New System.Drawing.Point(287, 3)
|
||||||
Me.TXT_IMAGE_SMALL.Name = "TXT_IMAGE_SMALL"
|
Me.TXT_IMAGE_SMALL.Name = "TXT_IMAGE_SMALL"
|
||||||
Me.TXT_IMAGE_SMALL.NumberMaximum = New Decimal(New Integer() {500, 0, 0, 0})
|
Me.TXT_IMAGE_SMALL.NumberMaximum = New Decimal(New Integer() {256, 0, 0, 0})
|
||||||
Me.TXT_IMAGE_SMALL.NumberMinimum = New Decimal(New Integer() {10, 0, 0, 0})
|
Me.TXT_IMAGE_SMALL.NumberMinimum = New Decimal(New Integer() {10, 0, 0, 0})
|
||||||
Me.TXT_IMAGE_SMALL.Size = New System.Drawing.Size(278, 22)
|
Me.TXT_IMAGE_SMALL.Size = New System.Drawing.Size(278, 22)
|
||||||
Me.TXT_IMAGE_SMALL.TabIndex = 1
|
Me.TXT_IMAGE_SMALL.TabIndex = 1
|
||||||
@@ -241,8 +241,7 @@
|
|||||||
'TXT_COLLECTIONS_PATH
|
'TXT_COLLECTIONS_PATH
|
||||||
'
|
'
|
||||||
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton3.Index = 0
|
ActionButton3.Name = "Clear"
|
||||||
ActionButton3.Name = "BTT_CLEAR"
|
|
||||||
Me.TXT_COLLECTIONS_PATH.Buttons.Add(ActionButton3)
|
Me.TXT_COLLECTIONS_PATH.Buttons.Add(ActionButton3)
|
||||||
Me.TXT_COLLECTIONS_PATH.CaptionText = "Collections folder"
|
Me.TXT_COLLECTIONS_PATH.CaptionText = "Collections folder"
|
||||||
Me.TXT_COLLECTIONS_PATH.CaptionToolTipEnabled = True
|
Me.TXT_COLLECTIONS_PATH.CaptionToolTipEnabled = True
|
||||||
@@ -256,8 +255,7 @@
|
|||||||
'TXT_MAX_JOBS_USERS
|
'TXT_MAX_JOBS_USERS
|
||||||
'
|
'
|
||||||
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton4.Index = 0
|
ActionButton4.Name = "Refresh"
|
||||||
ActionButton4.Name = "BTT_REFRESH"
|
|
||||||
ActionButton4.ToolTipText = "Set to default"
|
ActionButton4.ToolTipText = "Set to default"
|
||||||
Me.TXT_MAX_JOBS_USERS.Buttons.Add(ActionButton4)
|
Me.TXT_MAX_JOBS_USERS.Buttons.Add(ActionButton4)
|
||||||
Me.TXT_MAX_JOBS_USERS.CaptionSizeType = System.Windows.Forms.SizeType.Percent
|
Me.TXT_MAX_JOBS_USERS.CaptionSizeType = System.Windows.Forms.SizeType.Percent
|
||||||
@@ -276,8 +274,7 @@
|
|||||||
'TXT_MAX_JOBS_CHANNELS
|
'TXT_MAX_JOBS_CHANNELS
|
||||||
'
|
'
|
||||||
ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
|
ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton5.Index = 0
|
ActionButton5.Name = "Refresh"
|
||||||
ActionButton5.Name = "BTT_REFRESH"
|
|
||||||
ActionButton5.ToolTipText = "Set to default"
|
ActionButton5.ToolTipText = "Set to default"
|
||||||
Me.TXT_MAX_JOBS_CHANNELS.Buttons.Add(ActionButton5)
|
Me.TXT_MAX_JOBS_CHANNELS.Buttons.Add(ActionButton5)
|
||||||
Me.TXT_MAX_JOBS_CHANNELS.CaptionSizeType = System.Windows.Forms.SizeType.Percent
|
Me.TXT_MAX_JOBS_CHANNELS.CaptionSizeType = System.Windows.Forms.SizeType.Percent
|
||||||
@@ -307,8 +304,7 @@
|
|||||||
'TXT_IMGUR_CLIENT_ID
|
'TXT_IMGUR_CLIENT_ID
|
||||||
'
|
'
|
||||||
ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image)
|
ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton6.Index = 0
|
ActionButton6.Name = "Clear"
|
||||||
ActionButton6.Name = "BTT_CLEAR"
|
|
||||||
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
|
||||||
@@ -586,6 +582,30 @@
|
|||||||
" will be added via a new line")
|
" will be added via a new line")
|
||||||
Me.CH_UDESCR_UP.UseVisualStyleBackColor = True
|
Me.CH_UDESCR_UP.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'CH_DOWN_OPEN_INFO_SUSPEND
|
||||||
|
'
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.AutoSize = True
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.Location = New System.Drawing.Point(290, 4)
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.Name = "CH_DOWN_OPEN_INFO_SUSPEND"
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.Size = New System.Drawing.Size(280, 17)
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.TabIndex = 1
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.Text = "Don't open again"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_DOWN_OPEN_INFO_SUSPEND, "Do not open the form automatically if it was once closed")
|
||||||
|
Me.CH_DOWN_OPEN_INFO_SUSPEND.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_DOWN_OPEN_PROGRESS_SUSPEND
|
||||||
|
'
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.AutoSize = True
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Location = New System.Drawing.Point(290, 4)
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Name = "CH_DOWN_OPEN_PROGRESS_SUSPEND"
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Size = New System.Drawing.Size(280, 17)
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.TabIndex = 1
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Text = "Don't open again"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_DOWN_OPEN_PROGRESS_SUSPEND, "Do not open the form automatically if it was once closed")
|
||||||
|
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
'TP_CHANNELS_IMGS
|
'TP_CHANNELS_IMGS
|
||||||
'
|
'
|
||||||
TP_CHANNELS_IMGS.ColumnCount = 2
|
TP_CHANNELS_IMGS.ColumnCount = 2
|
||||||
@@ -637,7 +657,7 @@
|
|||||||
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, 259)
|
TAB_BASIS.Size = New System.Drawing.Size(576, 284)
|
||||||
TAB_BASIS.TabIndex = 0
|
TAB_BASIS.TabIndex = 0
|
||||||
TAB_BASIS.Text = "Basis"
|
TAB_BASIS.Text = "Basis"
|
||||||
'
|
'
|
||||||
@@ -660,19 +680,31 @@
|
|||||||
TP_DEFS.Controls.Add(Me.CH_DOWN_VIDEOS, 0, 3)
|
TP_DEFS.Controls.Add(Me.CH_DOWN_VIDEOS, 0, 3)
|
||||||
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.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 = 5
|
TP_DEFS.RowCount = 6
|
||||||
|
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.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
|
||||||
TP_DEFS.Size = New System.Drawing.Size(570, 278)
|
TP_DEFS.Size = New System.Drawing.Size(570, 278)
|
||||||
TP_DEFS.TabIndex = 0
|
TP_DEFS.TabIndex = 0
|
||||||
'
|
'
|
||||||
|
'CH_DOWN_IMAGES_NATIVE
|
||||||
|
'
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.AutoSize = True
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.Location = New System.Drawing.Point(4, 108)
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.Name = "CH_DOWN_IMAGES_NATIVE"
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.Size = New System.Drawing.Size(562, 19)
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.TabIndex = 4
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.Text = "Download 'jpg' instead of 'webp'"
|
||||||
|
Me.CH_DOWN_IMAGES_NATIVE.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
'TAB_DEFS_CHANNELS
|
'TAB_DEFS_CHANNELS
|
||||||
'
|
'
|
||||||
TAB_DEFS_CHANNELS.Controls.Add(TP_CHANNELS)
|
TAB_DEFS_CHANNELS.Controls.Add(TP_CHANNELS)
|
||||||
@@ -772,8 +804,7 @@
|
|||||||
Me.TXT_FOLDER_CMD.AutoShowClearButton = True
|
Me.TXT_FOLDER_CMD.AutoShowClearButton = True
|
||||||
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton7.Enabled = False
|
ActionButton7.Enabled = False
|
||||||
ActionButton7.Index = 0
|
ActionButton7.Name = "Clear"
|
||||||
ActionButton7.Name = "BTT_CLEAR"
|
|
||||||
ActionButton7.Visible = False
|
ActionButton7.Visible = False
|
||||||
Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton7)
|
Me.TXT_FOLDER_CMD.Buttons.Add(ActionButton7)
|
||||||
Me.TXT_FOLDER_CMD.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
Me.TXT_FOLDER_CMD.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
||||||
@@ -822,16 +853,44 @@
|
|||||||
Me.CH_SHOW_NOTIFY.Text = "Show notifications"
|
Me.CH_SHOW_NOTIFY.Text = "Show notifications"
|
||||||
Me.CH_SHOW_NOTIFY.UseVisualStyleBackColor = True
|
Me.CH_SHOW_NOTIFY.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
'CH_RECYCLE_DEL
|
'TXT_CLOSE_SCRIPT
|
||||||
'
|
'
|
||||||
Me.CH_RECYCLE_DEL.AutoSize = True
|
Me.TXT_CLOSE_SCRIPT.AutoShowClearButton = True
|
||||||
Me.CH_RECYCLE_DEL.Dock = System.Windows.Forms.DockStyle.Fill
|
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
||||||
Me.CH_RECYCLE_DEL.Location = New System.Drawing.Point(4, 108)
|
ActionButton8.Enabled = False
|
||||||
Me.CH_RECYCLE_DEL.Name = "CH_RECYCLE_DEL"
|
ActionButton8.Name = "Clear"
|
||||||
Me.CH_RECYCLE_DEL.Size = New System.Drawing.Size(568, 19)
|
ActionButton8.Visible = False
|
||||||
Me.CH_RECYCLE_DEL.TabIndex = 4
|
Me.TXT_CLOSE_SCRIPT.Buttons.Add(ActionButton8)
|
||||||
Me.CH_RECYCLE_DEL.Text = "Delete data to recycle bin"
|
Me.TXT_CLOSE_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
||||||
Me.CH_RECYCLE_DEL.UseVisualStyleBackColor = True
|
Me.TXT_CLOSE_SCRIPT.CaptionText = "Close cmd"
|
||||||
|
Me.TXT_CLOSE_SCRIPT.CaptionToolTipEnabled = True
|
||||||
|
Me.TXT_CLOSE_SCRIPT.CaptionToolTipText = "This command will be executed when SCrawler is closed"
|
||||||
|
Me.TXT_CLOSE_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_CLOSE_SCRIPT.LeaveDefaultButtons = True
|
||||||
|
Me.TXT_CLOSE_SCRIPT.Location = New System.Drawing.Point(4, 215)
|
||||||
|
Me.TXT_CLOSE_SCRIPT.Name = "TXT_CLOSE_SCRIPT"
|
||||||
|
Me.TXT_CLOSE_SCRIPT.PlaceholderEnabled = True
|
||||||
|
Me.TXT_CLOSE_SCRIPT.PlaceholderText = "Enter command here..."
|
||||||
|
Me.TXT_CLOSE_SCRIPT.Size = New System.Drawing.Size(568, 22)
|
||||||
|
Me.TXT_CLOSE_SCRIPT.TabIndex = 8
|
||||||
|
'
|
||||||
|
'TP_OPEN_INFO
|
||||||
|
'
|
||||||
|
TP_OPEN_INFO.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
|
TP_OPEN_INFO.ColumnCount = 2
|
||||||
|
TP_OPEN_INFO.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
||||||
|
TP_OPEN_INFO.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
||||||
|
TP_OPEN_INFO.Controls.Add(Me.CH_DOWN_OPEN_INFO, 0, 0)
|
||||||
|
TP_OPEN_INFO.Controls.Add(Me.CH_DOWN_OPEN_INFO_SUSPEND, 1, 0)
|
||||||
|
TP_OPEN_INFO.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_OPEN_INFO.Location = New System.Drawing.Point(1, 131)
|
||||||
|
TP_OPEN_INFO.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
TP_OPEN_INFO.Name = "TP_OPEN_INFO"
|
||||||
|
TP_OPEN_INFO.RowCount = 1
|
||||||
|
TP_OPEN_INFO.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_OPEN_INFO.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24.0!))
|
||||||
|
TP_OPEN_INFO.Size = New System.Drawing.Size(574, 25)
|
||||||
|
TP_OPEN_INFO.TabIndex = 5
|
||||||
'
|
'
|
||||||
'CH_DOWN_OPEN_INFO
|
'CH_DOWN_OPEN_INFO
|
||||||
'
|
'
|
||||||
@@ -844,6 +903,35 @@
|
|||||||
Me.CH_DOWN_OPEN_INFO.Text = "Open the 'Info' form when the download starts"
|
Me.CH_DOWN_OPEN_INFO.Text = "Open the 'Info' form when the download starts"
|
||||||
Me.CH_DOWN_OPEN_INFO.UseVisualStyleBackColor = True
|
Me.CH_DOWN_OPEN_INFO.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'CH_RECYCLE_DEL
|
||||||
|
'
|
||||||
|
Me.CH_RECYCLE_DEL.AutoSize = True
|
||||||
|
Me.CH_RECYCLE_DEL.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_RECYCLE_DEL.Location = New System.Drawing.Point(4, 108)
|
||||||
|
Me.CH_RECYCLE_DEL.Name = "CH_RECYCLE_DEL"
|
||||||
|
Me.CH_RECYCLE_DEL.Size = New System.Drawing.Size(568, 19)
|
||||||
|
Me.CH_RECYCLE_DEL.TabIndex = 4
|
||||||
|
Me.CH_RECYCLE_DEL.Text = "Delete data to recycle bin"
|
||||||
|
Me.CH_RECYCLE_DEL.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'TP_OPEN_PROGRESS
|
||||||
|
'
|
||||||
|
TP_OPEN_PROGRESS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
|
TP_OPEN_PROGRESS.ColumnCount = 2
|
||||||
|
TP_OPEN_PROGRESS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
||||||
|
TP_OPEN_PROGRESS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
||||||
|
TP_OPEN_PROGRESS.Controls.Add(Me.CH_DOWN_OPEN_PROGRESS, 0, 0)
|
||||||
|
TP_OPEN_PROGRESS.Controls.Add(Me.CH_DOWN_OPEN_PROGRESS_SUSPEND, 1, 0)
|
||||||
|
TP_OPEN_PROGRESS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_OPEN_PROGRESS.Location = New System.Drawing.Point(1, 157)
|
||||||
|
TP_OPEN_PROGRESS.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
TP_OPEN_PROGRESS.Name = "TP_OPEN_PROGRESS"
|
||||||
|
TP_OPEN_PROGRESS.RowCount = 1
|
||||||
|
TP_OPEN_PROGRESS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_OPEN_PROGRESS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24.0!))
|
||||||
|
TP_OPEN_PROGRESS.Size = New System.Drawing.Size(574, 25)
|
||||||
|
TP_OPEN_PROGRESS.TabIndex = 6
|
||||||
|
'
|
||||||
'CH_DOWN_OPEN_PROGRESS
|
'CH_DOWN_OPEN_PROGRESS
|
||||||
'
|
'
|
||||||
Me.CH_DOWN_OPEN_PROGRESS.AutoSize = True
|
Me.CH_DOWN_OPEN_PROGRESS.AutoSize = True
|
||||||
@@ -855,20 +943,6 @@
|
|||||||
Me.CH_DOWN_OPEN_PROGRESS.Text = "Open the 'Progress' form when the download starts"
|
Me.CH_DOWN_OPEN_PROGRESS.Text = "Open the 'Progress' form when the download starts"
|
||||||
Me.CH_DOWN_OPEN_PROGRESS.UseVisualStyleBackColor = True
|
Me.CH_DOWN_OPEN_PROGRESS.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
'TXT_CLOSE_SCRIPT
|
|
||||||
'
|
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.CheckBox
|
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionText = "Close cmd"
|
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionToolTipEnabled = True
|
|
||||||
Me.TXT_CLOSE_SCRIPT.CaptionToolTipText = "This command will be executed when SCrawler is closed"
|
|
||||||
Me.TXT_CLOSE_SCRIPT.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.TXT_CLOSE_SCRIPT.Location = New System.Drawing.Point(4, 215)
|
|
||||||
Me.TXT_CLOSE_SCRIPT.Name = "TXT_CLOSE_SCRIPT"
|
|
||||||
Me.TXT_CLOSE_SCRIPT.PlaceholderEnabled = True
|
|
||||||
Me.TXT_CLOSE_SCRIPT.PlaceholderText = "Enter command here..."
|
|
||||||
Me.TXT_CLOSE_SCRIPT.Size = New System.Drawing.Size(568, 22)
|
|
||||||
Me.TXT_CLOSE_SCRIPT.TabIndex = 8
|
|
||||||
'
|
|
||||||
'TAB_DOWN
|
'TAB_DOWN
|
||||||
'
|
'
|
||||||
TAB_DOWN.Controls.Add(TP_DOWNLOADING)
|
TAB_DOWN.Controls.Add(TP_DOWNLOADING)
|
||||||
@@ -903,14 +977,12 @@
|
|||||||
'
|
'
|
||||||
'TXT_SCRIPT
|
'TXT_SCRIPT
|
||||||
'
|
'
|
||||||
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
|
||||||
ActionButton8.Index = 0
|
|
||||||
ActionButton8.Name = "BTT_OPEN"
|
|
||||||
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton9.Index = 1
|
ActionButton9.Name = "Open"
|
||||||
ActionButton9.Name = "BTT_CLEAR"
|
ActionButton10.BackgroundImage = CType(resources.GetObject("ActionButton10.BackgroundImage"), System.Drawing.Image)
|
||||||
Me.TXT_SCRIPT.Buttons.Add(ActionButton8)
|
ActionButton10.Name = "Clear"
|
||||||
Me.TXT_SCRIPT.Buttons.Add(ActionButton9)
|
Me.TXT_SCRIPT.Buttons.Add(ActionButton9)
|
||||||
|
Me.TXT_SCRIPT.Buttons.Add(ActionButton10)
|
||||||
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
|
||||||
@@ -970,66 +1042,6 @@
|
|||||||
Me.CONTAINER_MAIN.TabIndex = 0
|
Me.CONTAINER_MAIN.TabIndex = 0
|
||||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
'TP_OPEN_INFO
|
|
||||||
'
|
|
||||||
TP_OPEN_INFO.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
|
||||||
TP_OPEN_INFO.ColumnCount = 2
|
|
||||||
TP_OPEN_INFO.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_OPEN_INFO.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_OPEN_INFO.Controls.Add(Me.CH_DOWN_OPEN_INFO, 0, 0)
|
|
||||||
TP_OPEN_INFO.Controls.Add(Me.CH_DOWN_OPEN_INFO_SUSPEND, 1, 0)
|
|
||||||
TP_OPEN_INFO.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
TP_OPEN_INFO.Location = New System.Drawing.Point(1, 131)
|
|
||||||
TP_OPEN_INFO.Margin = New System.Windows.Forms.Padding(0)
|
|
||||||
TP_OPEN_INFO.Name = "TP_OPEN_INFO"
|
|
||||||
TP_OPEN_INFO.RowCount = 1
|
|
||||||
TP_OPEN_INFO.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
|
||||||
TP_OPEN_INFO.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
|
||||||
TP_OPEN_INFO.Size = New System.Drawing.Size(574, 25)
|
|
||||||
TP_OPEN_INFO.TabIndex = 5
|
|
||||||
'
|
|
||||||
'TP_OPEN_PROGRESS
|
|
||||||
'
|
|
||||||
TP_OPEN_PROGRESS.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
|
||||||
TP_OPEN_PROGRESS.ColumnCount = 2
|
|
||||||
TP_OPEN_PROGRESS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_OPEN_PROGRESS.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
|
|
||||||
TP_OPEN_PROGRESS.Controls.Add(Me.CH_DOWN_OPEN_PROGRESS, 0, 0)
|
|
||||||
TP_OPEN_PROGRESS.Controls.Add(Me.CH_DOWN_OPEN_PROGRESS_SUSPEND, 1, 0)
|
|
||||||
TP_OPEN_PROGRESS.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
TP_OPEN_PROGRESS.Location = New System.Drawing.Point(1, 157)
|
|
||||||
TP_OPEN_PROGRESS.Margin = New System.Windows.Forms.Padding(0)
|
|
||||||
TP_OPEN_PROGRESS.Name = "TP_OPEN_PROGRESS"
|
|
||||||
TP_OPEN_PROGRESS.RowCount = 1
|
|
||||||
TP_OPEN_PROGRESS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
|
||||||
TP_OPEN_PROGRESS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!))
|
|
||||||
TP_OPEN_PROGRESS.Size = New System.Drawing.Size(574, 25)
|
|
||||||
TP_OPEN_PROGRESS.TabIndex = 6
|
|
||||||
'
|
|
||||||
'CH_DOWN_OPEN_INFO_SUSPEND
|
|
||||||
'
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.AutoSize = True
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.Location = New System.Drawing.Point(290, 4)
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.Name = "CH_DOWN_OPEN_INFO_SUSPEND"
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.Size = New System.Drawing.Size(280, 17)
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.TabIndex = 1
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.Text = "Don't open again"
|
|
||||||
TT_MAIN.SetToolTip(Me.CH_DOWN_OPEN_INFO_SUSPEND, "Do not open the form automatically if it was once closed")
|
|
||||||
Me.CH_DOWN_OPEN_INFO_SUSPEND.UseVisualStyleBackColor = True
|
|
||||||
'
|
|
||||||
'CH_DOWN_OPEN_PROGRESS_SUSPEND
|
|
||||||
'
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.AutoSize = True
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Dock = System.Windows.Forms.DockStyle.Fill
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Location = New System.Drawing.Point(290, 4)
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Name = "CH_DOWN_OPEN_PROGRESS_SUSPEND"
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Size = New System.Drawing.Size(280, 17)
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.TabIndex = 1
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.Text = "Don't open again"
|
|
||||||
TT_MAIN.SetToolTip(Me.CH_DOWN_OPEN_PROGRESS_SUSPEND, "Do not open the form automatically if it was once closed")
|
|
||||||
Me.CH_DOWN_OPEN_PROGRESS_SUSPEND.UseVisualStyleBackColor = True
|
|
||||||
'
|
|
||||||
'GlobalSettingsForm
|
'GlobalSettingsForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
@@ -1077,6 +1089,10 @@
|
|||||||
TP_BEHAVIOR.PerformLayout()
|
TP_BEHAVIOR.PerformLayout()
|
||||||
CType(Me.TXT_FOLDER_CMD, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_FOLDER_CMD, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.TXT_CLOSE_SCRIPT, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_CLOSE_SCRIPT, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
TP_OPEN_INFO.ResumeLayout(False)
|
||||||
|
TP_OPEN_INFO.PerformLayout()
|
||||||
|
TP_OPEN_PROGRESS.ResumeLayout(False)
|
||||||
|
TP_OPEN_PROGRESS.PerformLayout()
|
||||||
TAB_DOWN.ResumeLayout(False)
|
TAB_DOWN.ResumeLayout(False)
|
||||||
TP_DOWNLOADING.ResumeLayout(False)
|
TP_DOWNLOADING.ResumeLayout(False)
|
||||||
TP_DOWNLOADING.PerformLayout()
|
TP_DOWNLOADING.PerformLayout()
|
||||||
@@ -1086,10 +1102,6 @@
|
|||||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
Me.CONTAINER_MAIN.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.PerformLayout()
|
Me.CONTAINER_MAIN.PerformLayout()
|
||||||
TP_OPEN_INFO.ResumeLayout(False)
|
|
||||||
TP_OPEN_INFO.PerformLayout()
|
|
||||||
TP_OPEN_PROGRESS.ResumeLayout(False)
|
|
||||||
TP_OPEN_PROGRESS.PerformLayout()
|
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
@@ -1137,5 +1149,6 @@
|
|||||||
Private WithEvents TXT_DOWN_COMPLETE_SCRIPT As PersonalUtilities.Forms.Controls.TextBoxExtended
|
Private WithEvents TXT_DOWN_COMPLETE_SCRIPT As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
Private WithEvents CH_DOWN_OPEN_INFO_SUSPEND As CheckBox
|
Private WithEvents CH_DOWN_OPEN_INFO_SUSPEND As CheckBox
|
||||||
Private WithEvents CH_DOWN_OPEN_PROGRESS_SUSPEND As CheckBox
|
Private WithEvents CH_DOWN_OPEN_PROGRESS_SUSPEND As CheckBox
|
||||||
|
Private WithEvents CH_DOWN_IMAGES_NATIVE As CheckBox
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -241,6 +241,14 @@ If checked, videos will be stored in separate folder; otherwise, videos will be
|
|||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX
|
tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX
|
||||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
|
</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>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="TP_OPEN_INFO.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="TP_OPEN_INFO.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
@@ -255,7 +263,7 @@ If checked, videos will be stored in separate folder; otherwise, videos will be
|
|||||||
<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="ActionButton8.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton9.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
|
||||||
@@ -266,7 +274,7 @@ If checked, videos will be stored in separate folder; otherwise, videos will be
|
|||||||
cMaRN0UdBBkAAAAASUVORK5CYII=
|
cMaRN0UdBBkAAAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton9.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton10.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
|
||||||
|
|||||||
@@ -8,25 +8,23 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
|
||||||
Namespace Editors
|
Namespace Editors
|
||||||
Friend Class GlobalSettingsForm : Implements IOkCancelToolbar
|
Friend Class GlobalSettingsForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub GlobalSettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub GlobalSettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
Try
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
|
||||||
With Settings
|
With Settings
|
||||||
'Basis
|
'Basis
|
||||||
TXT_GLOBAL_PATH.Text = .GlobalPath.Value
|
TXT_GLOBAL_PATH.Text = .GlobalPath.Value
|
||||||
TXT_IMAGE_LARGE.Value = .MaxLargeImageHeigh.Value
|
TXT_IMAGE_LARGE.Value = .MaxLargeImageHeight.Value
|
||||||
TXT_IMAGE_SMALL.Value = .MaxSmallImageHeigh.Value
|
TXT_IMAGE_SMALL.Value = .MaxSmallImageHeight.Value
|
||||||
TXT_COLLECTIONS_PATH.Text = .CollectionsPath
|
TXT_COLLECTIONS_PATH.Text = .CollectionsPath
|
||||||
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
|
||||||
@@ -53,6 +51,7 @@ Namespace Editors
|
|||||||
CH_DEF_TEMP.Checked = .DefaultTemporary
|
CH_DEF_TEMP.Checked = .DefaultTemporary
|
||||||
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
|
||||||
'Downloading
|
'Downloading
|
||||||
CH_UDESCR_UP.Checked = .UpdateUserDescriptionEveryTime
|
CH_UDESCR_UP.Checked = .UpdateUserDescriptionEveryTime
|
||||||
TXT_SCRIPT.Checked = .ScriptData.Attribute
|
TXT_SCRIPT.Checked = .ScriptData.Attribute
|
||||||
@@ -60,9 +59,9 @@ Namespace Editors
|
|||||||
TXT_DOWN_COMPLETE_SCRIPT.Text = .DownloadsCompleteCommand
|
TXT_DOWN_COMPLETE_SCRIPT.Text = .DownloadsCompleteCommand
|
||||||
TXT_DOWN_COMPLETE_SCRIPT.Checked = .DownloadsCompleteCommand.Attribute
|
TXT_DOWN_COMPLETE_SCRIPT.Checked = .DownloadsCompleteCommand.Attribute
|
||||||
'Downloading: file names
|
'Downloading: file names
|
||||||
CH_FILE_NAME_CHANGE.Checked = .FileReplaceNameByDate Or .FileAddDateToFileName Or .FileAddTimeToFileName
|
CH_FILE_NAME_CHANGE.Checked = Not .FileReplaceNameByDate.Value = FileNameReplaceMode.None
|
||||||
OPT_FILE_NAME_REPLACE.Checked = .FileReplaceNameByDate
|
OPT_FILE_NAME_REPLACE.Checked = .FileReplaceNameByDate.Value = FileNameReplaceMode.Replace
|
||||||
OPT_FILE_NAME_ADD_DATE.Checked = Not .FileReplaceNameByDate
|
OPT_FILE_NAME_ADD_DATE.Checked = .FileReplaceNameByDate.Value = FileNameReplaceMode.Add
|
||||||
CH_FILE_DATE.Checked = .FileAddDateToFileName
|
CH_FILE_DATE.Checked = .FileAddDateToFileName
|
||||||
CH_FILE_TIME.Checked = .FileAddTimeToFileName
|
CH_FILE_TIME.Checked = .FileAddTimeToFileName
|
||||||
OPT_FILE_DATE_START.Checked = Not .FileDateTimePositionEnd
|
OPT_FILE_DATE_START.Checked = Not .FileDateTimePositionEnd
|
||||||
@@ -78,20 +77,19 @@ Namespace Editors
|
|||||||
CH_CHANNELS_USERS_TEMP.Checked = .ChannelsDefaultTemporary
|
CH_CHANNELS_USERS_TEMP.Checked = .ChannelsDefaultTemporary
|
||||||
End With
|
End With
|
||||||
.MyFieldsChecker = New FieldsChecker
|
.MyFieldsChecker = New FieldsChecker
|
||||||
With DirectCast(.MyFieldsChecker, FieldsChecker)
|
With .MyFieldsCheckerE
|
||||||
.AddControl(Of String)(TXT_GLOBAL_PATH, TXT_GLOBAL_PATH.CaptionText)
|
.AddControl(Of String)(TXT_GLOBAL_PATH, TXT_GLOBAL_PATH.CaptionText)
|
||||||
.AddControl(Of String)(TXT_COLLECTIONS_PATH, TXT_COLLECTIONS_PATH.CaptionText)
|
.AddControl(Of String)(TXT_COLLECTIONS_PATH, TXT_COLLECTIONS_PATH.CaptionText)
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
.AppendDetectors()
|
|
||||||
.EndLoaderOperations()
|
|
||||||
ChangeFileNameChangersEnabling()
|
ChangeFileNameChangersEnabling()
|
||||||
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
MyDefs.InvokeLoaderError(ex)
|
MyDefs.InvokeLoaderError(ex)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
||||||
With Settings
|
With Settings
|
||||||
Dim a As Func(Of String, Object, Integer) =
|
Dim a As Func(Of String, Object, Integer) =
|
||||||
@@ -125,8 +123,8 @@ Namespace Editors
|
|||||||
|
|
||||||
'Basis
|
'Basis
|
||||||
.GlobalPath.Value = TXT_GLOBAL_PATH.Text
|
.GlobalPath.Value = TXT_GLOBAL_PATH.Text
|
||||||
.MaxLargeImageHeigh.Value = CInt(TXT_IMAGE_LARGE.Value)
|
.MaxLargeImageHeight.Value = CInt(TXT_IMAGE_LARGE.Value)
|
||||||
.MaxSmallImageHeigh.Value = CInt(TXT_IMAGE_SMALL.Value)
|
.MaxSmallImageHeight.Value = CInt(TXT_IMAGE_SMALL.Value)
|
||||||
.CollectionsPath.Value = TXT_COLLECTIONS_PATH.Text
|
.CollectionsPath.Value = TXT_COLLECTIONS_PATH.Text
|
||||||
.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
|
||||||
@@ -153,6 +151,7 @@ Namespace Editors
|
|||||||
.DefaultTemporary.Value = CH_DEF_TEMP.Checked
|
.DefaultTemporary.Value = CH_DEF_TEMP.Checked
|
||||||
.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
|
||||||
'Downloading
|
'Downloading
|
||||||
.UpdateUserDescriptionEveryTime.Value = CH_UDESCR_UP.Checked
|
.UpdateUserDescriptionEveryTime.Value = CH_UDESCR_UP.Checked
|
||||||
.ScriptData.Value = TXT_SCRIPT.Text
|
.ScriptData.Value = TXT_SCRIPT.Text
|
||||||
@@ -161,14 +160,14 @@ Namespace Editors
|
|||||||
.DownloadsCompleteCommand.Attribute.Value = TXT_DOWN_COMPLETE_SCRIPT.Checked
|
.DownloadsCompleteCommand.Attribute.Value = TXT_DOWN_COMPLETE_SCRIPT.Checked
|
||||||
'Downloading: file names
|
'Downloading: file names
|
||||||
If CH_FILE_NAME_CHANGE.Checked Then
|
If CH_FILE_NAME_CHANGE.Checked Then
|
||||||
.FileReplaceNameByDate.Value = OPT_FILE_NAME_REPLACE.Checked
|
.FileReplaceNameByDate.Value = If(OPT_FILE_NAME_REPLACE.Checked, FileNameReplaceMode.Replace, FileNameReplaceMode.Add)
|
||||||
.FileAddDateToFileName.Value = CH_FILE_DATE.Checked
|
.FileAddDateToFileName.Value = CH_FILE_DATE.Checked
|
||||||
.FileAddTimeToFileName.Value = CH_FILE_TIME.Checked
|
.FileAddTimeToFileName.Value = CH_FILE_TIME.Checked
|
||||||
.FileDateTimePositionEnd.Value = OPT_FILE_DATE_END.Checked
|
.FileDateTimePositionEnd.Value = OPT_FILE_DATE_END.Checked
|
||||||
Else
|
Else
|
||||||
.FileAddDateToFileName.Value = False
|
.FileAddDateToFileName.Value = False
|
||||||
.FileAddTimeToFileName.Value = False
|
.FileAddTimeToFileName.Value = False
|
||||||
.FileReplaceNameByDate.Value = False
|
.FileReplaceNameByDate.Value = FileNameReplaceMode.None
|
||||||
End If
|
End If
|
||||||
'Channels
|
'Channels
|
||||||
.ChannelsImagesRows.Value = CInt(TXT_CHANNELS_ROWS.Value)
|
.ChannelsImagesRows.Value = CInt(TXT_CHANNELS_ROWS.Value)
|
||||||
@@ -184,19 +183,16 @@ Namespace Editors
|
|||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
Private Sub TXT_GLOBAL_PATH_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_GLOBAL_PATH.ActionOnButtonClick
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub TXT_GLOBAL_PATH_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_GLOBAL_PATH.ActionOnButtonClick
|
|
||||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Open Then
|
||||||
Dim f As SFile = SFile.SelectPath(Settings.GlobalPath.Value)
|
Dim f As SFile = SFile.SelectPath(Settings.GlobalPath.Value)
|
||||||
If Not f.IsEmptyString Then TXT_GLOBAL_PATH.Text = f
|
If Not f.IsEmptyString Then TXT_GLOBAL_PATH.Text = f
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub TXT_MAX_JOBS_USERS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_MAX_JOBS_USERS.ActionOnButtonClick
|
Private Sub TXT_MAX_JOBS_USERS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_MAX_JOBS_USERS.ActionOnButtonClick
|
||||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Refresh Then TXT_MAX_JOBS_USERS.Value = SettingsCLS.DefaultMaxDownloadingTasks
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Refresh Then TXT_MAX_JOBS_USERS.Value = SettingsCLS.DefaultMaxDownloadingTasks
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub TXT_MAX_JOBS_CHANNELS_ActionOnButtonClick(ByVal Sender As ActionButton) 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 = ActionButton.DefaultButtons.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Refresh Then TXT_MAX_JOBS_CHANNELS.Value = SettingsCLS.DefaultMaxDownloadingTasks
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CH_FILE_NAME_CHANGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_FILE_NAME_CHANGE.CheckedChanged
|
Private Sub CH_FILE_NAME_CHANGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_FILE_NAME_CHANGE.CheckedChanged
|
||||||
@@ -217,11 +213,12 @@ Namespace Editors
|
|||||||
Dim b As Boolean = CH_FILE_NAME_CHANGE.Checked
|
Dim b As Boolean = CH_FILE_NAME_CHANGE.Checked
|
||||||
OPT_FILE_NAME_REPLACE.Enabled = b
|
OPT_FILE_NAME_REPLACE.Enabled = b
|
||||||
OPT_FILE_NAME_ADD_DATE.Enabled = b
|
OPT_FILE_NAME_ADD_DATE.Enabled = b
|
||||||
|
If Not OPT_FILE_NAME_REPLACE.Checked And Not OPT_FILE_NAME_ADD_DATE.Checked Then OPT_FILE_NAME_REPLACE.Checked = True
|
||||||
CH_FILE_DATE.Enabled = b
|
CH_FILE_DATE.Enabled = b
|
||||||
CH_FILE_TIME.Enabled = b
|
CH_FILE_TIME.Enabled = b
|
||||||
ChangePositionControlsEnabling()
|
ChangePositionControlsEnabling()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub TXT_SCRIPT_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_SCRIPT.ActionOnButtonClick
|
Private Sub TXT_SCRIPT_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles TXT_SCRIPT.ActionOnButtonClick
|
||||||
SettingsCLS.ScriptTextBoxButtonClick(TXT_SCRIPT, Sender)
|
SettingsCLS.ScriptTextBoxButtonClick(TXT_SCRIPT, Sender)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CH_COPY_CHANNEL_USER_IMAGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_COPY_CHANNEL_USER_IMAGE.CheckedChanged
|
Private Sub CH_COPY_CHANNEL_USER_IMAGE_CheckedChanged(sender As Object, e As EventArgs) Handles CH_COPY_CHANNEL_USER_IMAGE.CheckedChanged
|
||||||
|
|||||||
52
SCrawler/Editors/LabelsForm.Designer.vb
generated
@@ -13,14 +13,15 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
|
|||||||
Private components As System.ComponentModel.IContainer
|
Private components As System.ComponentModel.IContainer
|
||||||
<System.Diagnostics.DebuggerStepThrough()>
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LabelsForm))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LabelsForm))
|
||||||
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
|
||||||
Me.CMB_LABELS = New PersonalUtilities.Forms.Controls.ComboBoxExtended()
|
Me.CMB_LABELS = New PersonalUtilities.Forms.Controls.ComboBoxExtended()
|
||||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
Me.CONTAINER_MAIN.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
CType(Me.CMB_LABELS, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.CMB_LABELS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
@@ -29,31 +30,28 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
|
|||||||
'
|
'
|
||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_LABELS)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.CMB_LABELS)
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(374, 421)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(374, 421)
|
||||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(374, 421)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(374, 421)
|
||||||
Me.CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
'CMB_LABELS
|
'CMB_LABELS
|
||||||
'
|
'
|
||||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton1.Index = 0
|
ActionButton1.Name = "Add"
|
||||||
ActionButton1.Name = "BTT_COMBOBOX_ARROW"
|
ActionButton1.ToolTipText = "Add new label (Insert)"
|
||||||
ActionButton1.Visible = False
|
|
||||||
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton2.Index = 1
|
ActionButton2.Name = "Clear"
|
||||||
ActionButton2.Name = "BTT_ADD"
|
ActionButton2.ToolTipText = "Clear checked labels"
|
||||||
ActionButton2.ToolTipText = "Add new label (Insert)"
|
|
||||||
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton3.Index = 2
|
ActionButton3.Name = "ArrowDown"
|
||||||
ActionButton3.Name = "BTT_CLEAR"
|
ActionButton3.Visible = False
|
||||||
ActionButton3.ToolTipText = "Clear checked labels"
|
|
||||||
Me.CMB_LABELS.Buttons.Add(ActionButton1)
|
Me.CMB_LABELS.Buttons.Add(ActionButton1)
|
||||||
Me.CMB_LABELS.Buttons.Add(ActionButton2)
|
Me.CMB_LABELS.Buttons.Add(ActionButton2)
|
||||||
Me.CMB_LABELS.Buttons.Add(ActionButton3)
|
Me.CMB_LABELS.Buttons.Add(ActionButton3)
|
||||||
@@ -72,7 +70,7 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
|
|||||||
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(374, 421)
|
Me.ClientSize = New System.Drawing.Size(374, 421)
|
||||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MinimizeBox = False
|
Me.MinimizeBox = False
|
||||||
Me.MinimumSize = New System.Drawing.Size(390, 460)
|
Me.MinimumSize = New System.Drawing.Size(390, 460)
|
||||||
@@ -80,14 +78,12 @@ Partial Friend Class LabelsForm : Inherits System.Windows.Forms.Form
|
|||||||
Me.ShowIcon = False
|
Me.ShowIcon = False
|
||||||
Me.ShowInTaskbar = False
|
Me.ShowInTaskbar = False
|
||||||
Me.Text = "Labels"
|
Me.Text = "Labels"
|
||||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.PerformLayout()
|
CONTAINER_MAIN.PerformLayout()
|
||||||
CType(Me.CMB_LABELS, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.CMB_LABELS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private WithEvents CONTAINER_MAIN As ToolStripContainer
|
|
||||||
Private WithEvents CMB_LABELS As PersonalUtilities.Forms.Controls.ComboBoxExtended
|
Private WithEvents CMB_LABELS As PersonalUtilities.Forms.Controls.ComboBoxExtended
|
||||||
End Class
|
End Class
|
||||||
@@ -117,8 +117,41 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
||||||
|
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlE
|
||||||
|
QVRIS62WWWxMURjHL220JW1HausmlFrDFKUhnUGH6bRFzJ2idImlC0Vp2mlji1A8iNhCPIjIRES8EU+W
|
||||||
|
h2oEtbSDTk3HNNM7S01VKsXjkb/vXBo3k1Ee7sMvmZzzzf//ne/+z50RAAxL1MUIG4G/YAv3HSVhF5Vw
|
||||||
|
IYNdz3LadVj9RgdTB+HQYYPHIJuE1ocSdlEJFzG+1bPRLQLinglIeCkg+XUkKvz56hnkOfQs/rmA8S9H
|
||||||
|
YEp7FDI64tAQtKhnsMapZ7zzNHsUFnbGY4VzIk70l6hnIH4wsDR7NBZ3apDrSqL5T8eFgUr1DLZ78lim
|
||||||
|
Q4N8VzK29MxEpZSBa4M16hnU+c3M9CEFpdJsVHsXos63DDcHrf9nQEXD5VymwW/5USLNwl5vJhp7dTgW
|
||||||
|
NML2pR7jbsUMS+KdMTa5Q8NQxinfBU4dRFcOyjy52OtbhwOBDTgZLKPPmTgY0ON4MBdNfSbYBupxY8Aq
|
||||||
|
G10dqMG5/nIc7ytGQ6CQRliAamkTN/g1Ai4e95Qy3iogpX0UtBRDnhRzdxq2SXOxz5eFQ70rScCEU335
|
||||||
|
ssGxj0YS06HSm4GN3ekwdE2C1hGH1LZR0JDOJof5jwHvnIvzTa0jlooTYfktvt+fhcOBHDQFTWRgxJGP
|
||||||
|
ObAGsulZLMLWnjlY756K5c4JmNcRi6T2SGheCIihS2l5ozAo6NRhMolnUAcGV6IcwwqvFrX+JTjYuwKH
|
||||||
|
SfRAYDms/mzs9y1GFe2VSnOw1j0FejqpLN4WCX4ZufiIBwLMLxQGm12rsLQzgWKYgmLPLNTQw6ynpDSS
|
||||||
|
IBet8y+TqaVRVdFIeJrWuCcj+/0EzH43BomvIhBLI45uFiDcJ+6QwROFwa6+Amb9bGFNg6Xs9Ncd7Oy3
|
||||||
|
Knb2eyU7/20nu9y/m136tIvEl6BC0qKoZwby3alo9JVhj7T5R7m/kJVIIityi8zyXmTiW+I10SqyIQNb
|
||||||
|
uIgNwYuuf25kFd75KPKkI49OmUWnrfYWyXv/wBb2cijhhVf6a9lGei65XclYRDd6mj0GWz2iLBJaH0rY
|
||||||
|
RSVc5Eywmhm7kuQXHX+bJlBStrh+zTi0PpSwi0q4yNFAOVvgiEcKJWUsxZn/NhT+znlofShhF5VwkRpv
|
||||||
|
MUtti4KGYjj6sYCIh5QSu4oG27stjItHU+cjeQzvkcFzFQ2KnSKLoc4FukDCXeI2GbSoaFD4ziyPxNxK
|
||||||
|
0AUyNxOP1DOwcaG/8I+/LRB+At7psBnyDBG0AAAAAElFTkSuQmCC
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton2.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="ActionButton3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAE65JREFUeF7t
|
||||||
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
3X2sJWddB/DdLi2lQG2hdOHuvfM887J7Cxca4ELTQMDWKigIFpBAEAgi9g+CJpJo9Q8NJhgBiYZIYspL
|
||||||
@@ -206,36 +239,6 @@
|
|||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6LEtW/4flgYiLD1qeX0A
|
||||||
AAAASUVORK5CYII=
|
AAAASUVORK5CYII=
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="ActionButton2.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
|
||||||
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlE
|
|
||||||
QVRIS62WWWxMURjHL220JW1HausmlFrDFKUhnUGH6bRFzJ2idImlC0Vp2mlji1A8iNhCPIjIRES8EU+W
|
|
||||||
h2oEtbSDTk3HNNM7S01VKsXjkb/vXBo3k1Ee7sMvmZzzzf//ne/+z50RAAxL1MUIG4G/YAv3HSVhF5Vw
|
|
||||||
IYNdz3LadVj9RgdTB+HQYYPHIJuE1ocSdlEJFzG+1bPRLQLinglIeCkg+XUkKvz56hnkOfQs/rmA8S9H
|
|
||||||
YEp7FDI64tAQtKhnsMapZ7zzNHsUFnbGY4VzIk70l6hnIH4wsDR7NBZ3apDrSqL5T8eFgUr1DLZ78lim
|
|
||||||
Q4N8VzK29MxEpZSBa4M16hnU+c3M9CEFpdJsVHsXos63DDcHrf9nQEXD5VymwW/5USLNwl5vJhp7dTgW
|
|
||||||
NML2pR7jbsUMS+KdMTa5Q8NQxinfBU4dRFcOyjy52OtbhwOBDTgZLKPPmTgY0ON4MBdNfSbYBupxY8Aq
|
|
||||||
G10dqMG5/nIc7ytGQ6CQRliAamkTN/g1Ai4e95Qy3iogpX0UtBRDnhRzdxq2SXOxz5eFQ70rScCEU335
|
|
||||||
ssGxj0YS06HSm4GN3ekwdE2C1hGH1LZR0JDOJof5jwHvnIvzTa0jlooTYfktvt+fhcOBHDQFTWRgxJGP
|
|
||||||
ObAGsulZLMLWnjlY756K5c4JmNcRi6T2SGheCIihS2l5ozAo6NRhMolnUAcGV6IcwwqvFrX+JTjYuwKH
|
|
||||||
SfRAYDms/mzs9y1GFe2VSnOw1j0FejqpLN4WCX4ZufiIBwLMLxQGm12rsLQzgWKYgmLPLNTQw6ynpDSS
|
|
||||||
IBet8y+TqaVRVdFIeJrWuCcj+/0EzH43BomvIhBLI45uFiDcJ+6QwROFwa6+Amb9bGFNg6Xs9Ncd7Oy3
|
|
||||||
Knb2eyU7/20nu9y/m136tIvEl6BC0qKoZwby3alo9JVhj7T5R7m/kJVIIityi8zyXmTiW+I10SqyIQNb
|
|
||||||
uIgNwYuuf25kFd75KPKkI49OmUWnrfYWyXv/wBb2cijhhVf6a9lGei65XclYRDd6mj0GWz2iLBJaH0rY
|
|
||||||
RSVc5Eywmhm7kuQXHX+bJlBStrh+zTi0PpSwi0q4yNFAOVvgiEcKJWUsxZn/NhT+znlofShhF5VwkRpv
|
|
||||||
MUtti4KGYjj6sYCIh5QSu4oG27stjItHU+cjeQzvkcFzFQ2KnSKLoc4FukDCXeI2GbSoaFD4ziyPxNxK
|
|
||||||
0AUyNxOP1DOwcaG/8I+/LRB+At7psBnyDBG0AAAAAElFTkSuQmCC
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<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>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -7,13 +7,22 @@
|
|||||||
' 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.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
|
||||||
Imports PersonalUtilities.Forms.Controls
|
Imports PersonalUtilities.Forms.Controls
|
||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
Imports PersonalUtilities.Functions.Messaging
|
Imports PersonalUtilities.Functions.Messaging
|
||||||
Friend Class LabelsForm : Implements IOkCancelDeleteToolbar
|
Friend Class LabelsForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Friend ReadOnly Property LabelsList As List(Of String)
|
Friend ReadOnly Property LabelsList As List(Of String)
|
||||||
|
Private ReadOnly _Source As IEnumerable(Of String) = Nothing
|
||||||
|
Private ReadOnly Property Source As IEnumerable(Of String)
|
||||||
|
Get
|
||||||
|
If Not _Source Is Nothing Then
|
||||||
|
Return _Source
|
||||||
|
Else
|
||||||
|
Return Settings.Labels
|
||||||
|
End If
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
Private _AnyLabelAdd As Boolean = False
|
Private _AnyLabelAdd As Boolean = False
|
||||||
Friend Property MultiUser As Boolean = False
|
Friend Property MultiUser As Boolean = False
|
||||||
Friend Property MultiUserClearExists As Boolean = False
|
Friend Property MultiUserClearExists As Boolean = False
|
||||||
@@ -22,25 +31,29 @@ Friend Class LabelsForm : Implements IOkCancelDeleteToolbar
|
|||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
LabelsList = New List(Of String)
|
LabelsList = New List(Of String)
|
||||||
LabelsList.ListAddList(LabelsArr)
|
LabelsList.ListAddList(LabelsArr)
|
||||||
MyDefs = New DefaultFormProps
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
|
End Sub
|
||||||
|
Friend Sub New(ByVal Current As IEnumerable(Of String), ByVal Source As IEnumerable(Of String))
|
||||||
|
Me.New(Current)
|
||||||
|
_Source = Source
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub LabelsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub LabelsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
Try
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design)
|
.MyViewInitialize()
|
||||||
.AddOkCancelToolbar(, WithDeleteButton)
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
.MyOkCancel.BTT_DELETE.Visible = WithDeleteButton
|
||||||
If Settings.Labels.Count > 0 Then
|
If Source.Count > 0 Then
|
||||||
Dim items As New List(Of Integer)
|
Dim items As New List(Of Integer)
|
||||||
CMB_LABELS.BeginUpdate()
|
CMB_LABELS.BeginUpdate()
|
||||||
For i% = 0 To Settings.Labels.Count - 1
|
For i% = 0 To Source.Count - 1
|
||||||
If LabelsList.Contains(Settings.Labels(i)) Then items.Add(i)
|
If LabelsList.Contains(Source(i)) Then items.Add(i)
|
||||||
CMB_LABELS.Items.Add(Settings.Labels(i))
|
CMB_LABELS.Items.Add(Source(i))
|
||||||
Next
|
Next
|
||||||
|
If Not _Source Is Nothing Then CMB_LABELS.Buttons.Clear()
|
||||||
CMB_LABELS.EndUpdate()
|
CMB_LABELS.EndUpdate()
|
||||||
CMB_LABELS.ListCheckedIndexes = items
|
CMB_LABELS.ListCheckedIndexes = items
|
||||||
End If
|
End If
|
||||||
.AppendDetectors()
|
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
@@ -48,12 +61,12 @@ Friend Class LabelsForm : Implements IOkCancelDeleteToolbar
|
|||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub LabelsForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
Private Sub LabelsForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
|
||||||
If e.KeyCode = Keys.Insert Then AddNewLabel() : e.Handled = True
|
If e.KeyCode = Keys.Insert And _Source Is Nothing Then AddNewLabel() : e.Handled = True
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub LabelsForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
Private Sub LabelsForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
LabelsList.Clear()
|
LabelsList.Clear()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
Try
|
Try
|
||||||
If MultiUser Then
|
If MultiUser Then
|
||||||
Dim m As New MMessage("You are changing labels for more one user" & vbNewLine & "What do you want to do?",
|
Dim m As New MMessage("You are changing labels for more one user" & vbNewLine & "What do you want to do?",
|
||||||
@@ -69,24 +82,21 @@ Friend Class LabelsForm : Implements IOkCancelDeleteToolbar
|
|||||||
End Select
|
End Select
|
||||||
End If
|
End If
|
||||||
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 Then Settings.Labels.Update()
|
If _AnyLabelAdd And _Source Is Nothing Then Settings.Labels.Update()
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Choosing labels")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Choosing labels")
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
Private Sub MyDefs_ButtonDeleteClickOC(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonDeleteClickOC
|
||||||
MyDefs.CloseForm(DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub ToolbarBttDelete() Implements IOkCancelDeleteToolbar.ToolbarBttDelete
|
|
||||||
LabelsList.Clear()
|
LabelsList.Clear()
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub CMB_LABELS_ActionOnButtonClick(ByVal Sender As ActionButton) Handles CMB_LABELS.ActionOnButtonClick
|
Private Sub CMB_LABELS_ActionOnButtonClick(ByVal Sender As ActionButton, ByVal e As EventArgs) Handles CMB_LABELS.ActionOnButtonClick
|
||||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Add Then AddNewLabel()
|
Select Case Sender.DefaultButton
|
||||||
End Sub
|
Case ActionButton.DefaultButtons.Add : AddNewLabel()
|
||||||
Private Sub CMB_LABELS_ActionOnButtonClearClick() Handles CMB_LABELS.ActionOnButtonClearClick
|
Case ActionButton.DefaultButtons.Clear : CMB_LABELS.Clear(ComboBoxExtended.ClearMode.CheckedIndexes)
|
||||||
CMB_LABELS.Clear(ComboBoxExtended.ClearMode.CheckedIndexes)
|
End Select
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub AddNewLabel()
|
Private Sub AddNewLabel()
|
||||||
Dim nl$ = InputBoxE("Enter new label name:", "New label")
|
Dim nl$ = InputBoxE("Enter new label name:", "New label")
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ Namespace Editors
|
|||||||
Private Sub InitCheckBox(ByRef CH As CheckBox, ByVal Caption As String)
|
Private Sub InitCheckBox(ByRef CH As CheckBox, ByVal Caption As String)
|
||||||
CH = New CheckBox With {.Text = Caption, .Dock = DockStyle.Fill, .UseVisualStyleBackColor = True,
|
CH = New CheckBox With {.Text = Caption, .Dock = DockStyle.Fill, .UseVisualStyleBackColor = True,
|
||||||
.ThreeState = True, .CheckState = CheckState.Indeterminate}
|
.ThreeState = True, .CheckState = CheckState.Indeterminate}
|
||||||
AddHandler CH.CheckedChanged, AddressOf Checker_CheckedChanged
|
|
||||||
AddHandler CH.CheckStateChanged, AddressOf Checker_CheckedChanged
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SiteDefaults_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
Private Sub SiteDefaults_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
CH_TEMP.Dispose()
|
CH_TEMP.Dispose()
|
||||||
@@ -64,11 +62,6 @@ Namespace Editors
|
|||||||
Private Function ShouldSerializeBaseControlsPadding() As Boolean
|
Private Function ShouldSerializeBaseControlsPadding() As Boolean
|
||||||
Return Not _BaseControlsPadding.Equals(New Padding(0))
|
Return Not _BaseControlsPadding.Equals(New Padding(0))
|
||||||
End Function
|
End Function
|
||||||
<Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
|
|
||||||
Public Property ChangesDetected As Boolean = False
|
|
||||||
Private Sub Checker_CheckedChanged(sender As Object, e As EventArgs)
|
|
||||||
ChangesDetected = True
|
|
||||||
End Sub
|
|
||||||
<Browsable(True), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
|
<Browsable(True), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
|
||||||
Category("Values"), DefaultValue(CheckState.Indeterminate), DisplayName("Temporary"), Description("Temporary profile")>
|
Category("Values"), DefaultValue(CheckState.Indeterminate), DisplayName("Temporary"), Description("Temporary profile")>
|
||||||
Public Property MyTemporary As CheckState
|
Public Property MyTemporary As CheckState
|
||||||
|
|||||||
94
SCrawler/Editors/SiteEditorForm.Designer.vb
generated
@@ -14,26 +14,29 @@
|
|||||||
Private components As System.ComponentModel.IContainer
|
Private components As System.ComponentModel.IContainer
|
||||||
<System.Diagnostics.DebuggerStepThrough()>
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Me.components = New System.ComponentModel.Container()
|
||||||
|
Dim ActionButton1 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SiteEditorForm))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SiteEditorForm))
|
||||||
Dim ActionButton8 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton2 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim ActionButton9 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
Dim ActionButton3 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
Dim ActionButton10 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 ActionButton11 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 ActionButton12 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 CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
Me.TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
Me.TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
Me.TXT_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_PATH = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TXT_COOKIES = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_COOKIES = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.TP_SITE_PROPS = New SCrawler.Editors.SiteDefaults()
|
Me.TP_SITE_PROPS = New SCrawler.Editors.SiteDefaults()
|
||||||
Me.TXT_PATH_SAVED_POSTS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_PATH_SAVED_POSTS = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
Me.CH_GET_USER_MEDIA_ONLY = New System.Windows.Forms.CheckBox()
|
Me.CH_GET_USER_MEDIA_ONLY = New System.Windows.Forms.CheckBox()
|
||||||
Me.CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
Me.TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
|
||||||
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
Me.TP_MAIN.SuspendLayout()
|
Me.TP_MAIN.SuspendLayout()
|
||||||
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
CType(Me.TXT_PATH_SAVED_POSTS, System.ComponentModel.ISupportInitialize).BeginInit()
|
CType(Me.TXT_PATH_SAVED_POSTS, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
Me.CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
Me.CONTAINER_MAIN.SuspendLayout()
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'TP_MAIN
|
'TP_MAIN
|
||||||
@@ -59,14 +62,12 @@
|
|||||||
'
|
'
|
||||||
'TXT_PATH
|
'TXT_PATH
|
||||||
'
|
'
|
||||||
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton7.Index = 0
|
ActionButton1.Name = "Open"
|
||||||
ActionButton7.Name = "BTT_OPEN"
|
ActionButton2.BackgroundImage = CType(resources.GetObject("ActionButton2.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
ActionButton2.Name = "Clear"
|
||||||
ActionButton8.Index = 1
|
Me.TXT_PATH.Buttons.Add(ActionButton1)
|
||||||
ActionButton8.Name = "BTT_CLEAR"
|
Me.TXT_PATH.Buttons.Add(ActionButton2)
|
||||||
Me.TXT_PATH.Buttons.Add(ActionButton7)
|
|
||||||
Me.TXT_PATH.Buttons.Add(ActionButton8)
|
|
||||||
Me.TXT_PATH.CaptionText = "Path"
|
Me.TXT_PATH.CaptionText = "Path"
|
||||||
Me.TXT_PATH.CaptionToolTipEnabled = True
|
Me.TXT_PATH.CaptionToolTipEnabled = True
|
||||||
Me.TXT_PATH.CaptionToolTipText = "Specific path to store Twitter files"
|
Me.TXT_PATH.CaptionToolTipText = "Specific path to store Twitter files"
|
||||||
@@ -78,14 +79,12 @@
|
|||||||
'
|
'
|
||||||
'TXT_COOKIES
|
'TXT_COOKIES
|
||||||
'
|
'
|
||||||
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton9.Index = 0
|
ActionButton3.Name = "Edit"
|
||||||
ActionButton9.Name = "BTT_EDIT"
|
ActionButton4.BackgroundImage = CType(resources.GetObject("ActionButton4.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton10.BackgroundImage = CType(resources.GetObject("ActionButton10.BackgroundImage"), System.Drawing.Image)
|
ActionButton4.Name = "Clear"
|
||||||
ActionButton10.Index = 1
|
Me.TXT_COOKIES.Buttons.Add(ActionButton3)
|
||||||
ActionButton10.Name = "BTT_CLEAR"
|
Me.TXT_COOKIES.Buttons.Add(ActionButton4)
|
||||||
Me.TXT_COOKIES.Buttons.Add(ActionButton9)
|
|
||||||
Me.TXT_COOKIES.Buttons.Add(ActionButton10)
|
|
||||||
Me.TXT_COOKIES.CaptionText = "Cookies"
|
Me.TXT_COOKIES.CaptionText = "Cookies"
|
||||||
Me.TXT_COOKIES.ClearTextByButtonClear = False
|
Me.TXT_COOKIES.ClearTextByButtonClear = False
|
||||||
Me.TXT_COOKIES.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.TXT_COOKIES.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
@@ -114,14 +113,12 @@
|
|||||||
'
|
'
|
||||||
'TXT_PATH_SAVED_POSTS
|
'TXT_PATH_SAVED_POSTS
|
||||||
'
|
'
|
||||||
ActionButton11.BackgroundImage = CType(resources.GetObject("ActionButton11.BackgroundImage"), System.Drawing.Image)
|
ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton11.Index = 0
|
ActionButton5.Name = "Open"
|
||||||
ActionButton11.Name = "BTT_OPEN"
|
ActionButton6.BackgroundImage = CType(resources.GetObject("ActionButton6.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton12.BackgroundImage = CType(resources.GetObject("ActionButton12.BackgroundImage"), System.Drawing.Image)
|
ActionButton6.Name = "Clear"
|
||||||
ActionButton12.Index = 1
|
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton5)
|
||||||
ActionButton12.Name = "BTT_CLEAR"
|
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton6)
|
||||||
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton11)
|
|
||||||
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton12)
|
|
||||||
Me.TXT_PATH_SAVED_POSTS.CaptionText = "Saved posts path"
|
Me.TXT_PATH_SAVED_POSTS.CaptionText = "Saved posts path"
|
||||||
Me.TXT_PATH_SAVED_POSTS.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.TXT_PATH_SAVED_POSTS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.TXT_PATH_SAVED_POSTS.Location = New System.Drawing.Point(3, 31)
|
Me.TXT_PATH_SAVED_POSTS.Location = New System.Drawing.Point(3, 31)
|
||||||
@@ -146,23 +143,23 @@
|
|||||||
'
|
'
|
||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TP_MAIN)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TP_MAIN)
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(544, 219)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(544, 219)
|
||||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
Me.CONTAINER_MAIN.RightToolStripPanelVisible = False
|
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Size = New System.Drawing.Size(544, 219)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(544, 219)
|
||||||
Me.CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
'SiteEditorForm
|
'SiteEditorForm
|
||||||
'
|
'
|
||||||
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(544, 219)
|
Me.ClientSize = New System.Drawing.Size(544, 219)
|
||||||
Me.Controls.Add(Me.CONTAINER_MAIN)
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
Me.KeyPreview = True
|
Me.KeyPreview = True
|
||||||
Me.MaximizeBox = False
|
Me.MaximizeBox = False
|
||||||
@@ -178,19 +175,18 @@
|
|||||||
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_PATH, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_COOKIES, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
CType(Me.TXT_PATH_SAVED_POSTS, System.ComponentModel.ISupportInitialize).EndInit()
|
CType(Me.TXT_PATH_SAVED_POSTS, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
Me.CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.ResumeLayout(False)
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
Me.CONTAINER_MAIN.PerformLayout()
|
CONTAINER_MAIN.PerformLayout()
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private WithEvents CONTAINER_MAIN As ToolStripContainer
|
|
||||||
Private WithEvents TXT_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended
|
Private WithEvents TXT_PATH As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
Private WithEvents TXT_COOKIES As PersonalUtilities.Forms.Controls.TextBoxExtended
|
Private WithEvents TXT_COOKIES As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
Private WithEvents TP_MAIN As TableLayoutPanel
|
Private WithEvents TP_MAIN As TableLayoutPanel
|
||||||
Private WithEvents TXT_PATH_SAVED_POSTS As PersonalUtilities.Forms.Controls.TextBoxExtended
|
Private WithEvents TXT_PATH_SAVED_POSTS As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
Private WithEvents TP_SITE_PROPS As SiteDefaults
|
Private WithEvents TP_SITE_PROPS As SiteDefaults
|
||||||
Private WithEvents CH_GET_USER_MEDIA_ONLY As CheckBox
|
Private WithEvents CH_GET_USER_MEDIA_ONLY As CheckBox
|
||||||
|
Private WithEvents TT_MAIN As ToolTip
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -118,7 +118,7 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="ActionButton7.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton1.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
|
||||||
@@ -129,7 +129,7 @@
|
|||||||
cMaRN0UdBBkAAAAASUVORK5CYII=
|
cMaRN0UdBBkAAAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton8.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton2.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
|
||||||
@@ -137,7 +137,7 @@
|
|||||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton9.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
||||||
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
|
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
AAAASUVORK5CYII=
|
AAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton10.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton11.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton5.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
cMaRN0UdBBkAAAAASUVORK5CYII=
|
cMaRN0UdBBkAAAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton12.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton6.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
@@ -222,4 +222,10 @@
|
|||||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
|
<metadata name="CONTAINER_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>
|
</root>
|
||||||