mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-15 00:02:17 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
975d46715c | ||
|
|
726fc486ce | ||
|
|
ede81f9d05 | ||
|
|
fccb786e55 | ||
|
|
2be52c7c56 | ||
|
|
dd7f071e1a | ||
|
|
617a7f702b |
40
Changelog.md
40
Changelog.md
@@ -1,3 +1,43 @@
|
|||||||
|
# 3.0.0.4
|
||||||
|
|
||||||
|
- Fixed
|
||||||
|
- External plugins do not save information about downloaded files
|
||||||
|
- The user cannot be added to the collection if a special path has been specified.
|
||||||
|
|
||||||
|
# 3.0.0.3
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- Download all by specific sites
|
||||||
|
- Download all, ignoring the ```Ready for download``` option
|
||||||
|
- Download all by specific sites, ignoring the ```Ready for download``` option
|
||||||
|
- Fixed
|
||||||
|
- (Issue #19) Typo in default Instagram settings (Post limit timer)
|
||||||
|
- Typo when applying "Download UHD" in XVIDEOS plugin
|
||||||
|
- The sites filter does not work unless the "Fast profiles loading" option is enabled.
|
||||||
|
|
||||||
|
# 3.0.0.2
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- **LPSG** site plugin
|
||||||
|
- **XVIDEOS** site plugin
|
||||||
|
- Updated
|
||||||
|
- Plugin provider
|
||||||
|
- Fixed
|
||||||
|
- Minor bugs
|
||||||
|
|
||||||
|
# 3.0.0.1
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- Download data up to a specific date
|
||||||
|
- Update and Reset functions in the plugin (ISiteSettings)
|
||||||
|
- PostsDateLimit propperty in the plugin (IPluginContentProvider)
|
||||||
|
- Fixed
|
||||||
|
- The donation button redirects to a broken link
|
||||||
|
- In some cases, an error occurs when fast loading images
|
||||||
|
- In some cases, cookies are not saved
|
||||||
|
- Some design fixes
|
||||||
|
- Minor bugs
|
||||||
|
|
||||||
# 3.0.0.0
|
# 3.0.0.0
|
||||||
|
|
||||||
**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).**
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ Your support is very valuable to me. Any support is greatly appreciated. Your su
|
|||||||
|
|
||||||
You can support the program by:
|
You can support the program by:
|
||||||
- **Bitcoin**: bitcoin:BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET
|
- **Bitcoin**: bitcoin:BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET
|
||||||
- :heavy_dollar_sign: making donaion making donations on this site: https://ko-fi.com/andyprogram
|
- :heavy_dollar_sign: make a donation on this site: https://ko-fi.com/andyprogram
|
||||||
- :repeat: make a post about my program on your profile (Reddit, Twitter, Instagram and any other social networks)
|
- :repeat: make a post about my program on your profile (Reddit, Twitter, Instagram and any other social networks)
|
||||||
- :speech_balloon: tell your friends about the program
|
- :speech_balloon: tell your friends about the program
|
||||||
- :heart: like the program on this site: https://alternativeto.net/software/scrawler/about/
|
- :heart: like the program on this site: https://alternativeto.net/software/scrawler/about/
|
||||||
- suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before
|
- suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before
|
||||||
|
|
||||||
I would be very grateful for any support! :blush:
|
I would be very grateful for any support! :blush:
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
List of available plugins
|
List of available plugins:
|
||||||
|
- LPSG
|
||||||
|
- XVIDEOS
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 21 KiB |
@@ -41,7 +41,7 @@ https://www.4kdownload.com/products/product-stogram
|
|||||||
|
|
||||||
https://github.com/RipMeApp/ripme
|
https://github.com/RipMeApp/ripme
|
||||||
|
|
||||||
| Option | SCrawler | 4K Stogram |
|
| Option | SCrawler | RipMeApp |
|
||||||
| ---- | ---- | ---- |
|
| ---- | ---- | ---- |
|
||||||
| User managament | **Advanced** | No |
|
| User managament | **Advanced** | No |
|
||||||
| Labeling users | **Yes** | No |
|
| Labeling users | **Yes** | No |
|
||||||
@@ -66,4 +66,13 @@ https://github.com/RipMeApp/ripme
|
|||||||
| Select want content type to download | Yes | Yes |
|
| Select want content type to download | Yes | Yes |
|
||||||
| Suported sites | 3 internal and any site using plugins | 86+ sites (declared) |
|
| Suported sites | 3 internal and any site using plugins | 86+ sites (declared) |
|
||||||
| Other sites support | **Yes** | No |
|
| Other sites support | **Yes** | No |
|
||||||
| Still supported | **Yes** | **No (last release date May 4, 2021)** |
|
| Still supported | **Yes** | **No (last release date May 4, 2021)** |
|
||||||
|
|
||||||
|
# gallery-dl
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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.
|
||||||
10
README.md
10
README.md
@@ -51,6 +51,8 @@ Do you like this program? Consider adding to my coffee fund by making a donation
|
|||||||
- RedGifs
|
- RedGifs
|
||||||
- Imgur
|
- Imgur
|
||||||
- Gfycat
|
- Gfycat
|
||||||
|
- LPSG
|
||||||
|
- XVIDEOS
|
||||||
- [Other sites](Plugins.md)
|
- [Other sites](Plugins.md)
|
||||||
|
|
||||||
# How does it works:
|
# How does it works:
|
||||||
@@ -74,8 +76,8 @@ 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
|
- Windows 7, 8, 9, 10, 11 with NET Framework 4.6.1 or higher
|
||||||
- Authorization cookies and tokens for Twitter (if you want to download data from Twitter)
|
- Authorization [cookies](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 Instagram (if you want to download data from Instagram)
|
- 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.**
|
||||||
|
|
||||||
# Guide
|
# Guide
|
||||||
@@ -110,6 +112,10 @@ Read more about how to support the program [here](HowToSupport.md).
|
|||||||
|
|
||||||
The program has an intuitive interface.
|
The program has an intuitive interface.
|
||||||
|
|
||||||
|
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 [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**
|
||||||
|
|
||||||
Just add a user profile and click the ```Start downloading``` button.
|
Just add a user profile and click the ```Start downloading``` button.
|
||||||
|
|
||||||
You can add users by patterns:
|
You can add users by patterns:
|
||||||
|
|||||||
3
SCrawler.Plugin.LPSG/.editorconfig
Normal file
3
SCrawler.Plugin.LPSG/.editorconfig
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[*.vb]
|
||||||
|
# Modifier preferences
|
||||||
|
file_header_template = Copyright (C) 2022 Andy\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
BIN
SCrawler.Plugin.LPSG/Content/Icons/Icon32.ico
Normal file
BIN
SCrawler.Plugin.LPSG/Content/Icons/Icon32.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
SCrawler.Plugin.LPSG/Content/Pictures/IconPic_32.png
Normal file
BIN
SCrawler.Plugin.LPSG/Content/Pictures/IconPic_32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 656 B |
26
SCrawler.Plugin.LPSG/Declarations.vb
Normal file
26
SCrawler.Plugin.LPSG/Declarations.vb
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
' 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.RegularExpressions
|
||||||
|
Friend Module Declarations
|
||||||
|
Friend ReadOnly Property PhotoRegEx As RParams = RParams.DM("(https://www.lpsg.com/attachments)(.+?)(?="")", 0, RegexReturn.List)
|
||||||
|
Friend ReadOnly Property NextPageRegex As RParams = RParams.DMS("<link rel=""next"" href=""(.+?/page-(\d+))""", 2)
|
||||||
|
Private Const FileUrlRegexDefault As String = "(.+[^/]+?)(jpg|jpeg|gif|png)"
|
||||||
|
Friend ReadOnly Property FileRegEx As New RParams(FileUrlRegexDefault, Nothing, 0) With {
|
||||||
|
.Converter = Function(ByVal Input As String) As String
|
||||||
|
If Not Input.IsEmptyString Then
|
||||||
|
Dim lv$ = Input.Split("-").LastOrDefault
|
||||||
|
If Not lv.IsEmptyString Then
|
||||||
|
Input = Input.Replace($"-{lv}", String.Empty)
|
||||||
|
Input &= $".{lv}"
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return Input
|
||||||
|
End Function}
|
||||||
|
Friend ReadOnly Property FileExistsRegEx As RParams = RParams.DMS(FileUrlRegexDefault, 2)
|
||||||
|
End Module
|
||||||
13
SCrawler.Plugin.LPSG/My Project/Application.Designer.vb
generated
Normal file
13
SCrawler.Plugin.LPSG/My Project/Application.Designer.vb
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
'------------------------------------------------------------------------------
|
||||||
|
' <auto-generated>
|
||||||
|
' This code was generated by a tool.
|
||||||
|
' Runtime Version:4.0.30319.42000
|
||||||
|
'
|
||||||
|
' Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
' the code is regenerated.
|
||||||
|
' </auto-generated>
|
||||||
|
'------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Option Strict On
|
||||||
|
Option Explicit On
|
||||||
|
|
||||||
10
SCrawler.Plugin.LPSG/My Project/Application.myapp
Normal file
10
SCrawler.Plugin.LPSG/My Project/Application.myapp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<MySubMain>false</MySubMain>
|
||||||
|
<SingleInstance>false</SingleInstance>
|
||||||
|
<ShutdownMode>0</ShutdownMode>
|
||||||
|
<EnableVisualStyles>true</EnableVisualStyles>
|
||||||
|
<AuthenticationMode>0</AuthenticationMode>
|
||||||
|
<ApplicationType>1</ApplicationType>
|
||||||
|
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
|
||||||
|
</MyApplicationData>
|
||||||
37
SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb
Normal file
37
SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
Imports System.Resources
|
||||||
|
Imports System
|
||||||
|
Imports System.Reflection
|
||||||
|
Imports System.Runtime.InteropServices
|
||||||
|
|
||||||
|
' General Information about an assembly is controlled through the following
|
||||||
|
' set of attributes. Change these attribute values to modify the information
|
||||||
|
' associated with an assembly.
|
||||||
|
|
||||||
|
' Review the values of the assembly attributes
|
||||||
|
|
||||||
|
<Assembly: AssemblyTitle("LPSG")>
|
||||||
|
<Assembly: AssemblyDescription("LPSG plugin for SCrawler")>
|
||||||
|
<Assembly: AssemblyCompany("AndyProgram")>
|
||||||
|
<Assembly: AssemblyProduct("LPSG")>
|
||||||
|
<Assembly: AssemblyCopyright("Copyright © 2022")>
|
||||||
|
<Assembly: AssemblyTrademark("AndyProgram")>
|
||||||
|
|
||||||
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
|
'The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
<Assembly: Guid("4beaf92d-0566-4331-ad29-034d09a7326f")>
|
||||||
|
|
||||||
|
' Version information for an assembly consists of the following four values:
|
||||||
|
'
|
||||||
|
' Major Version
|
||||||
|
' Minor Version
|
||||||
|
' Build Number
|
||||||
|
' Revision
|
||||||
|
'
|
||||||
|
' You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
' by using the '*' as shown below:
|
||||||
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
|
<Assembly: AssemblyVersion("1.0.0.1")>
|
||||||
|
<Assembly: AssemblyFileVersion("1.0.0.1")>
|
||||||
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
83
SCrawler.Plugin.LPSG/My Project/Resources.Designer.vb
generated
Normal file
83
SCrawler.Plugin.LPSG/My Project/Resources.Designer.vb
generated
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
'------------------------------------------------------------------------------
|
||||||
|
' <auto-generated>
|
||||||
|
' This code was generated by a tool.
|
||||||
|
' Runtime Version:4.0.30319.42000
|
||||||
|
'
|
||||||
|
' Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
' the code is regenerated.
|
||||||
|
' </auto-generated>
|
||||||
|
'------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Option Strict On
|
||||||
|
Option Explicit On
|
||||||
|
|
||||||
|
Imports System
|
||||||
|
|
||||||
|
Namespace My.Resources
|
||||||
|
|
||||||
|
'This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
'class via a tool like ResGen or Visual Studio.
|
||||||
|
'To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
'with the /str option, or rebuild your VS project.
|
||||||
|
'''<summary>
|
||||||
|
''' A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
'''</summary>
|
||||||
|
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"), _
|
||||||
|
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||||
|
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
|
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
|
||||||
|
Friend Module Resources
|
||||||
|
|
||||||
|
Private resourceMan As Global.System.Resources.ResourceManager
|
||||||
|
|
||||||
|
Private resourceCulture As Global.System.Globalization.CultureInfo
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Returns the cached ResourceManager instance used by this class.
|
||||||
|
'''</summary>
|
||||||
|
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
|
||||||
|
Get
|
||||||
|
If Object.ReferenceEquals(resourceMan, Nothing) Then
|
||||||
|
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LPSG.Resources", GetType(Resources).Assembly)
|
||||||
|
resourceMan = temp
|
||||||
|
End If
|
||||||
|
Return resourceMan
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Overrides the current thread's CurrentUICulture property for all
|
||||||
|
''' resource lookups using this strongly typed resource class.
|
||||||
|
'''</summary>
|
||||||
|
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Friend Property Culture() As Global.System.Globalization.CultureInfo
|
||||||
|
Get
|
||||||
|
Return resourceCulture
|
||||||
|
End Get
|
||||||
|
Set
|
||||||
|
resourceCulture = value
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property Icon32() As System.Drawing.Icon
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("Icon32", resourceCulture)
|
||||||
|
Return CType(obj,System.Drawing.Icon)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property IconPic_32() As System.Drawing.Bitmap
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("IconPic_32", resourceCulture)
|
||||||
|
Return CType(obj,System.Drawing.Bitmap)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
End Module
|
||||||
|
End Namespace
|
||||||
127
SCrawler.Plugin.LPSG/My Project/Resources.resx
Normal file
127
SCrawler.Plugin.LPSG/My Project/Resources.resx
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<?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>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="Icon32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Content\Icons\Icon32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="IconPic_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Content\Pictures\IconPic_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
73
SCrawler.Plugin.LPSG/My Project/Settings.Designer.vb
generated
Normal file
73
SCrawler.Plugin.LPSG/My Project/Settings.Designer.vb
generated
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
'------------------------------------------------------------------------------
|
||||||
|
' <auto-generated>
|
||||||
|
' This code was generated by a tool.
|
||||||
|
' Runtime Version:4.0.30319.42000
|
||||||
|
'
|
||||||
|
' Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
' the code is regenerated.
|
||||||
|
' </auto-generated>
|
||||||
|
'------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Option Strict On
|
||||||
|
Option Explicit On
|
||||||
|
|
||||||
|
|
||||||
|
Namespace My
|
||||||
|
|
||||||
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0"), _
|
||||||
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Partial Friend NotInheritable Class MySettings
|
||||||
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|
||||||
|
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
|
||||||
|
|
||||||
|
#Region "My.Settings Auto-Save Functionality"
|
||||||
|
#If _MyType = "WindowsForms" Then
|
||||||
|
Private Shared addedHandler As Boolean
|
||||||
|
|
||||||
|
Private Shared addedHandlerLockObject As New Object
|
||||||
|
|
||||||
|
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
|
||||||
|
If My.Application.SaveMySettingsOnExit Then
|
||||||
|
My.Settings.Save()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#End If
|
||||||
|
#End Region
|
||||||
|
|
||||||
|
Public Shared ReadOnly Property [Default]() As MySettings
|
||||||
|
Get
|
||||||
|
|
||||||
|
#If _MyType = "WindowsForms" Then
|
||||||
|
If Not addedHandler Then
|
||||||
|
SyncLock addedHandlerLockObject
|
||||||
|
If Not addedHandler Then
|
||||||
|
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
|
||||||
|
addedHandler = True
|
||||||
|
End If
|
||||||
|
End SyncLock
|
||||||
|
End If
|
||||||
|
#End If
|
||||||
|
Return defaultInstance
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
|
|
||||||
|
Namespace My
|
||||||
|
|
||||||
|
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
|
||||||
|
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||||
|
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
|
||||||
|
Friend Module MySettingsProperty
|
||||||
|
|
||||||
|
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
|
||||||
|
Friend ReadOnly Property Settings() As Global.LPSG.My.MySettings
|
||||||
|
Get
|
||||||
|
Return Global.LPSG.My.MySettings.Default
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
End Module
|
||||||
|
End Namespace
|
||||||
7
SCrawler.Plugin.LPSG/My Project/Settings.settings
Normal file
7
SCrawler.Plugin.LPSG/My Project/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
||||||
166
SCrawler.Plugin.LPSG/SCrawler.Plugin.LPSG.vbproj
Normal file
166
SCrawler.Plugin.LPSG/SCrawler.Plugin.LPSG.vbproj
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>LPSG</RootNamespace>
|
||||||
|
<AssemblyName>SCrawler.Plugin.LPSG</AssemblyName>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<MyType>Windows</MyType>
|
||||||
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DocumentationFile>
|
||||||
|
</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<DefineDebug>false</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DocumentationFile>
|
||||||
|
</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionExplicit>On</OptionExplicit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionCompare>Binary</OptionCompare>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionStrict>Off</OptionStrict>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionInfer>On</OptionInfer>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x86\Release\</OutputPath>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Import Include="Microsoft.VisualBasic" />
|
||||||
|
<Import Include="PersonalUtilities.Functions" />
|
||||||
|
<Import Include="PersonalUtilities.Tools.WEB" />
|
||||||
|
<Import Include="SCrawler.Plugin" />
|
||||||
|
<Import Include="SCrawler.Plugin.Attributes" />
|
||||||
|
<Import Include="System" />
|
||||||
|
<Import Include="System.Collections" />
|
||||||
|
<Import Include="System.Collections.Generic" />
|
||||||
|
<Import Include="System.Data" />
|
||||||
|
<Import Include="System.Diagnostics" />
|
||||||
|
<Import Include="System.Linq" />
|
||||||
|
<Import Include="System.Xml.Linq" />
|
||||||
|
<Import Include="System.Threading.Tasks" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Declarations.vb" />
|
||||||
|
<Compile Include="My Project\AssemblyInfo.vb" />
|
||||||
|
<Compile Include="My Project\Application.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Application.myapp</DependentUpon>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Resources.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Settings.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="SiteSettings.vb" />
|
||||||
|
<Compile Include="UserData.vb" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="My Project\Resources.resx">
|
||||||
|
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||||
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include=".editorconfig" />
|
||||||
|
<None Include="My Project\Application.myapp">
|
||||||
|
<Generator>MyApplicationCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<None Include="My Project\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<CustomToolNamespace>My</CustomToolNamespace>
|
||||||
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\MyUtilities\PersonalUtilities\PersonalUtilities.vbproj">
|
||||||
|
<Project>{8405896b-2685-4916-bc93-1fb514c323a9}</Project>
|
||||||
|
<Name>PersonalUtilities</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\SCrawler.PluginProvider\SCrawler.PluginProvider.vbproj">
|
||||||
|
<Project>{d4650f6b-5a54-44b6-999b-6c675b7116b1}</Project>
|
||||||
|
<Name>SCrawler.PluginProvider</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Content\Icons\Icon32.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Content\Pictures\IconPic_32.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
|
</Project>
|
||||||
100
SCrawler.Plugin.LPSG/SiteSettings.vb
Normal file
100
SCrawler.Plugin.LPSG/SiteSettings.vb
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
' 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.Drawing
|
||||||
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
|
<Manifest("AndyProgram_LPSG")>
|
||||||
|
Public Class SiteSettings : Implements ISiteSettings
|
||||||
|
Public ReadOnly Property Icon As Icon Implements ISiteSettings.Icon
|
||||||
|
Get
|
||||||
|
Return My.Resources.Icon32
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public ReadOnly Property Image As Image Implements ISiteSettings.Image
|
||||||
|
Get
|
||||||
|
Return My.Resources.IconPic_32
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public ReadOnly Property Site As String = "LPSG" Implements ISiteSettings.Site
|
||||||
|
Public Property Logger As ILogProvider Implements ISiteSettings.Logger
|
||||||
|
Friend ReadOnly Property Responser As Response
|
||||||
|
Public Sub New()
|
||||||
|
Responser = New Response($"Settings\Responser_LPSG.xml")
|
||||||
|
With Responser
|
||||||
|
If .File.Exists Then
|
||||||
|
.LoadSettings()
|
||||||
|
Else
|
||||||
|
.CookiesDomain = "www.lpsg.com"
|
||||||
|
.Cookies = New CookieKeeper("www.lpsg.com")
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Public Sub BeginInit() Implements ISiteSettings.BeginInit
|
||||||
|
End Sub
|
||||||
|
Public Sub EndInit() Implements ISiteSettings.EndInit
|
||||||
|
End Sub
|
||||||
|
Public Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider Implements ISiteSettings.GetInstance
|
||||||
|
Return New UserData
|
||||||
|
End Function
|
||||||
|
Public Sub Load(ByVal XMLValues As IEnumerable(Of KeyValuePair(Of String, String))) Implements ISiteSettings.Load
|
||||||
|
End Sub
|
||||||
|
#Region "Download functions"
|
||||||
|
Public Sub DownloadStarted(ByVal What As ISiteSettings.Download) Implements ISiteSettings.DownloadStarted
|
||||||
|
End Sub
|
||||||
|
Public Sub BeforeStartDownload(ByVal User As Object, ByVal What As ISiteSettings.Download) Implements ISiteSettings.BeforeStartDownload
|
||||||
|
End Sub
|
||||||
|
Public Sub AfterDownload(ByVal User As Object, ByVal What As ISiteSettings.Download) Implements ISiteSettings.AfterDownload
|
||||||
|
End Sub
|
||||||
|
Public Sub DownloadDone(ByVal What As ISiteSettings.Download) Implements ISiteSettings.DownloadDone
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Update"
|
||||||
|
Public Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
||||||
|
End Sub
|
||||||
|
Public Sub EndUpdate() Implements ISiteSettings.EndUpdate
|
||||||
|
End Sub
|
||||||
|
Public Sub Update() Implements ISiteSettings.Update
|
||||||
|
Responser.SaveSettings()
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
Public Sub Reset() Implements ISiteSettings.Reset
|
||||||
|
End Sub
|
||||||
|
Public Sub OpenSettingsForm() Implements ISiteSettings.OpenSettingsForm
|
||||||
|
End Sub
|
||||||
|
Public Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
||||||
|
Options = Nothing
|
||||||
|
End Sub
|
||||||
|
Public Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String Implements ISiteSettings.GetUserUrl
|
||||||
|
Return $"https://www.lpsg.com/threads/{UserName}/"
|
||||||
|
End Function
|
||||||
|
Private ReadOnly UserRegEx As RParams = RParams.DMS(".+?lpsg.com/threads/([^/]+)", 1)
|
||||||
|
Public Function IsMyUser(ByVal UserURL As String) As ExchangeOptions Implements ISiteSettings.IsMyUser
|
||||||
|
Try
|
||||||
|
Dim r$ = RegexReplace(UserURL, UserRegEx)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Return New ExchangeOptions(Site, r)
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
Return Nothing
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
Public Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions Implements ISiteSettings.IsMyImageVideo
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
Public Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
Public Function Available(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.Available
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
160
SCrawler.Plugin.LPSG/UserData.vb
Normal file
160
SCrawler.Plugin.LPSG/UserData.vb
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
' 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.RegularExpressions
|
||||||
|
Imports UStates = SCrawler.Plugin.PluginUserMedia.States
|
||||||
|
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
||||||
|
Public Class UserData : Implements IPluginContentProvider
|
||||||
|
#Region "XML names"
|
||||||
|
Private Const Name_LatestPage As String = "LatestPage"
|
||||||
|
#End Region
|
||||||
|
#Region "Interface declarations"
|
||||||
|
Public Event ProgressChanged(ByVal Count As Integer) Implements IPluginContentProvider.ProgressChanged
|
||||||
|
Public Event TotalCountChanged(ByVal Count As Integer) Implements IPluginContentProvider.TotalCountChanged
|
||||||
|
Public Property Thrower As IThrower Implements IPluginContentProvider.Thrower
|
||||||
|
Public Property LogProvider As ILogProvider Implements IPluginContentProvider.LogProvider
|
||||||
|
Public Property ESettings As ISiteSettings Implements IPluginContentProvider.Settings
|
||||||
|
Private ReadOnly Property Settings As SiteSettings
|
||||||
|
Get
|
||||||
|
Return DirectCast(ESettings, SiteSettings)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public Property Name As String Implements IPluginContentProvider.Name
|
||||||
|
Public Property ID As String Implements IPluginContentProvider.ID
|
||||||
|
Public Property ParseUserMediaOnly As Boolean Implements IPluginContentProvider.ParseUserMediaOnly
|
||||||
|
Public Property UserDescription As String Implements IPluginContentProvider.UserDescription
|
||||||
|
Public Property ExistingContentList As List(Of PluginUserMedia) Implements IPluginContentProvider.ExistingContentList
|
||||||
|
Public Property TempPostsList As List(Of String) Implements IPluginContentProvider.TempPostsList
|
||||||
|
Public Property TempMediaList As List(Of PluginUserMedia) Implements IPluginContentProvider.TempMediaList
|
||||||
|
Public Property UserExists As Boolean Implements IPluginContentProvider.UserExists
|
||||||
|
Public Property UserSuspended As Boolean Implements IPluginContentProvider.UserSuspended
|
||||||
|
Public Property IsSavedPosts As Boolean Implements IPluginContentProvider.IsSavedPosts
|
||||||
|
Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
||||||
|
Public Property DataPath As String Implements IPluginContentProvider.DataPath
|
||||||
|
Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit
|
||||||
|
Public Property PostsDateLimit As Date? Implements IPluginContentProvider.PostsDateLimit
|
||||||
|
#End Region
|
||||||
|
#Region "Interface exchange options"
|
||||||
|
Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet
|
||||||
|
End Sub
|
||||||
|
Public Function ExchangeOptionsGet() As Object Implements IPluginContentProvider.ExchangeOptionsGet
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Interface XML"
|
||||||
|
Public Sub XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String))) Implements IPluginContentProvider.XmlFieldsSet
|
||||||
|
If Fields.ListExists Then
|
||||||
|
For Each f As KeyValuePair(Of String, String) In Fields
|
||||||
|
If f.Key = Name_LatestPage Then LatestPage = f.Value
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Public Function XmlFieldsGet() As List(Of KeyValuePair(Of String, String)) Implements IPluginContentProvider.XmlFieldsGet
|
||||||
|
Return New List(Of KeyValuePair(Of String, String)) From {New KeyValuePair(Of String, String)(Name_LatestPage, LatestPage)}
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
Private Property LatestPage As String = String.Empty
|
||||||
|
Private Property Responser As Response = Nothing
|
||||||
|
Public Sub GetMedia() Implements IPluginContentProvider.GetMedia
|
||||||
|
Try
|
||||||
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
|
Responser = New Response
|
||||||
|
With Responser : .Copy(Settings.Responser) : .Error = EDP.ThrowException : End With
|
||||||
|
|
||||||
|
Dim l As List(Of String) = Nothing
|
||||||
|
Dim NextPage$
|
||||||
|
Dim r$
|
||||||
|
Dim _LPage As Func(Of String) = Function() If(LatestPage.IsEmptyString, String.Empty, $"page-{LatestPage}")
|
||||||
|
|
||||||
|
Do
|
||||||
|
r = Responser.GetResponse($"https://www.lpsg.com/threads/{Name}/{_LPage.Invoke}")
|
||||||
|
UserExists = True
|
||||||
|
UserSuspended = False
|
||||||
|
Thrower.ThrowAny()
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
NextPage = RegexReplace(r, NextPageRegex)
|
||||||
|
l.ListAddList(RegexReplace(r, PhotoRegEx), LAP.NotContainsOnly)
|
||||||
|
If NextPage = LatestPage Or NextPage.IsEmptyString Then Exit Do Else LatestPage = NextPage
|
||||||
|
Else
|
||||||
|
Exit Do
|
||||||
|
End If
|
||||||
|
Loop
|
||||||
|
|
||||||
|
If l.ListExists Then
|
||||||
|
Dim f As SFile
|
||||||
|
For Each u$ In l
|
||||||
|
If Not IsEmptyString(RegexReplace(u, FileExistsRegEx)) Then
|
||||||
|
f = CStr(RegexReplace(u, FileRegEx))
|
||||||
|
f.Path = DataPath.CSFilePSN
|
||||||
|
f.Separator = "\"
|
||||||
|
TempMediaList.Add(New PluginUserMedia With {.ContentType = UTypes.Picture, .URL = u, .File = f})
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If TempMediaList.ListExists And ExistingContentList.ListExists Then _
|
||||||
|
TempMediaList.RemoveAll(Function(m) ExistingContentList.Exists(Function(mm) mm.URL = m.URL))
|
||||||
|
End If
|
||||||
|
Catch oex As OperationCanceledException
|
||||||
|
Catch dex As ObjectDisposedException
|
||||||
|
Catch ex As Exception
|
||||||
|
LogProvider.Add(ex, "[LPSG.UserData.GetMedia]")
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Public Sub Download() Implements IPluginContentProvider.Download
|
||||||
|
Try
|
||||||
|
With Responser : .UseWebClient = True : .UseWebClientCookies = True : End With
|
||||||
|
If TempMediaList.ListExists Then
|
||||||
|
Dim m As PluginUserMedia
|
||||||
|
Dim eweb As ErrorsDescriber = EDP.ThrowException
|
||||||
|
RaiseEvent TotalCountChanged(TempMediaList.Count)
|
||||||
|
For i% = 0 To TempMediaList.Count - 1
|
||||||
|
Thrower.ThrowAny()
|
||||||
|
m = TempMediaList(i)
|
||||||
|
m.DownloadState = UStates.Tried
|
||||||
|
Try
|
||||||
|
If Not m.URL.IsEmptyString And Not m.File.IsEmptyString Then
|
||||||
|
Responser.DownloadFile(m.URL, m.File, eweb)
|
||||||
|
m.DownloadState = UStates.Downloaded
|
||||||
|
Else
|
||||||
|
m.DownloadState = UStates.Skipped
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
m.DownloadState = UStates.Skipped
|
||||||
|
End Try
|
||||||
|
RaiseEvent ProgressChanged(1)
|
||||||
|
TempMediaList(i) = m
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Catch oex As OperationCanceledException
|
||||||
|
Catch dex As ObjectDisposedException
|
||||||
|
Catch ex As Exception
|
||||||
|
LogProvider.Add(ex, "[LPSG.UserData.Download]")
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then
|
||||||
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
|
If ExistingContentList.ListExists Then ExistingContentList.Clear()
|
||||||
|
If TempPostsList.ListExists Then TempPostsList.Clear()
|
||||||
|
If TempMediaList.ListExists Then TempMediaList.Clear()
|
||||||
|
End If
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Public Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
3
SCrawler.Plugin.XVIDEOS/.editorconfig
Normal file
3
SCrawler.Plugin.XVIDEOS/.editorconfig
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[*.vb]
|
||||||
|
# Modifier preferences
|
||||||
|
file_header_template = Copyright (C) 2022 Andy\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
BIN
SCrawler.Plugin.XVIDEOS/Content/Icons/Icon32.ico
Normal file
BIN
SCrawler.Plugin.XVIDEOS/Content/Icons/Icon32.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
SCrawler.Plugin.XVIDEOS/Content/Pictures/IconPic32.png
Normal file
BIN
SCrawler.Plugin.XVIDEOS/Content/Pictures/IconPic32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1016 B |
16
SCrawler.Plugin.XVIDEOS/Declarations.vb
Normal file
16
SCrawler.Plugin.XVIDEOS/Declarations.vb
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
' 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.RegularExpressions
|
||||||
|
Friend Module Declarations
|
||||||
|
Friend ReadOnly Property M3U8Regex As RParams = RParams.DM("http.+?.m3u8.*?(?=')", 0)
|
||||||
|
Friend ReadOnly Property VideoTitleRegex As RParams = RParams.DMS("html5player.setVideoTitle\('(.+)(?='\);)", 1)
|
||||||
|
Friend ReadOnly Property VideoID As RParams = RParams.DMS(".*?www.xvideos.com/(video\d+).*", 1)
|
||||||
|
Friend ReadOnly Property M3U8Reparse As RParams = RParams.DM("NAME=""(\d+).*?""[\r\n]*?(.+)(?=(|[\r\n]+?))", 0, RegexReturn.List)
|
||||||
|
Friend ReadOnly Property M3U8Appender As RParams = RParams.DM("(.+)(?=/.+?\.m3u8.*?)", 0)
|
||||||
|
End Module
|
||||||
69
SCrawler.Plugin.XVIDEOS/M3U8.vb
Normal file
69
SCrawler.Plugin.XVIDEOS/M3U8.vb
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
' Copyright (C) 2022 Andy
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Imports System.Net
|
||||||
|
Imports PersonalUtilities.Tools.WEB
|
||||||
|
Friend NotInheritable Class M3U8
|
||||||
|
Private Sub New()
|
||||||
|
End Sub
|
||||||
|
Private Shared Function Save(ByVal URLs As List(Of String), ByVal ffmpegFile As SFile, ByVal f As SFile, ByRef Logger As ILogProvider) As SFile
|
||||||
|
Dim CachePath As SFile = Nothing
|
||||||
|
Try
|
||||||
|
If URLs.ListExists Then
|
||||||
|
Dim ConcatFile As SFile = f
|
||||||
|
If ConcatFile.Name.IsEmptyString Then ConcatFile.Name = "PlayListFile"
|
||||||
|
ConcatFile.Extension = "mp4"
|
||||||
|
CachePath = $"{f.PathWithSeparator}_Cache\{SFile.GetDirectories($"{f.PathWithSeparator}_Cache\",,, EDP.ReturnValue).ListIfNothing.Count + 1}\"
|
||||||
|
If CachePath.Exists(SFO.Path) Then
|
||||||
|
Dim p As New SFileNumbers(ConcatFile.Name,,, New ANumbers With {.Format = ANumbers.Formats.General})
|
||||||
|
ConcatFile = SFile.Indexed_IndexFile(ConcatFile,, p, EDP.ReturnValue)
|
||||||
|
Dim i%
|
||||||
|
Dim eFiles As New List(Of SFile)
|
||||||
|
Dim dFile As SFile = CachePath
|
||||||
|
dFile.Extension = "ts"
|
||||||
|
Using w As New WebClient
|
||||||
|
For i = 0 To URLs.Count - 1
|
||||||
|
dFile.Name = $"ConPart_{i}"
|
||||||
|
w.DownloadFile(URLs(i), dFile)
|
||||||
|
eFiles.Add(dFile)
|
||||||
|
Next
|
||||||
|
End Using
|
||||||
|
f = FFMPEG.ConcatenateFiles(eFiles, ffmpegFile, ConcatFile, p, EDP.ThrowException)
|
||||||
|
eFiles.Clear()
|
||||||
|
Return f
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Add(ex, "[M3U8.Save]")
|
||||||
|
ex.HelpLink = 1
|
||||||
|
Throw ex
|
||||||
|
Finally
|
||||||
|
CachePath.Delete(SFO.Path, SFODelete.None, EDP.None)
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
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
|
||||||
|
Try
|
||||||
|
If Not URL.IsEmptyString Then
|
||||||
|
Using w As New WebClient
|
||||||
|
Dim r$ = w.DownloadString(URL)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Dim l As List(Of String) = ListAddList(Nothing, r.StringFormatLines.StringToList(Of String)(vbNewLine).ListWithRemove(Function(v) v.Trim.StartsWith("#")),
|
||||||
|
New ListAddParams With {.Converter = Function(Input) $"{Appender}/{Input.ToString.Trim}"})
|
||||||
|
If l.ListExists Then Return Save(l, ffmpegFile, f, Logger)
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
Catch ex As Exception
|
||||||
|
If Not ex.HelpLink = 1 Then Logger.Add(ex, "[M3U8.Download]")
|
||||||
|
Throw ex
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
13
SCrawler.Plugin.XVIDEOS/My Project/Application.Designer.vb
generated
Normal file
13
SCrawler.Plugin.XVIDEOS/My Project/Application.Designer.vb
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
'------------------------------------------------------------------------------
|
||||||
|
' <auto-generated>
|
||||||
|
' This code was generated by a tool.
|
||||||
|
' Runtime Version:4.0.30319.42000
|
||||||
|
'
|
||||||
|
' Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
' the code is regenerated.
|
||||||
|
' </auto-generated>
|
||||||
|
'------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Option Strict On
|
||||||
|
Option Explicit On
|
||||||
|
|
||||||
10
SCrawler.Plugin.XVIDEOS/My Project/Application.myapp
Normal file
10
SCrawler.Plugin.XVIDEOS/My Project/Application.myapp
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<MySubMain>false</MySubMain>
|
||||||
|
<SingleInstance>false</SingleInstance>
|
||||||
|
<ShutdownMode>0</ShutdownMode>
|
||||||
|
<EnableVisualStyles>true</EnableVisualStyles>
|
||||||
|
<AuthenticationMode>0</AuthenticationMode>
|
||||||
|
<ApplicationType>1</ApplicationType>
|
||||||
|
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
|
||||||
|
</MyApplicationData>
|
||||||
37
SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb
Normal file
37
SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
Imports System.Resources
|
||||||
|
Imports System
|
||||||
|
Imports System.Reflection
|
||||||
|
Imports System.Runtime.InteropServices
|
||||||
|
|
||||||
|
' General Information about an assembly is controlled through the following
|
||||||
|
' set of attributes. Change these attribute values to modify the information
|
||||||
|
' associated with an assembly.
|
||||||
|
|
||||||
|
' Review the values of the assembly attributes
|
||||||
|
|
||||||
|
<Assembly: AssemblyTitle("XVIDEOS")>
|
||||||
|
<Assembly: AssemblyDescription("XVIDEOS plugin for SCrawler")>
|
||||||
|
<Assembly: AssemblyCompany("AndyProgram")>
|
||||||
|
<Assembly: AssemblyProduct("XVIDEOS")>
|
||||||
|
<Assembly: AssemblyCopyright("Copyright © 2022")>
|
||||||
|
<Assembly: AssemblyTrademark("AndyProgram")>
|
||||||
|
|
||||||
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
|
'The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
<Assembly: Guid("d31a0e3b-081d-4155-9a41-4c0a641c87b6")>
|
||||||
|
|
||||||
|
' Version information for an assembly consists of the following four values:
|
||||||
|
'
|
||||||
|
' Major Version
|
||||||
|
' Minor Version
|
||||||
|
' Build Number
|
||||||
|
' Revision
|
||||||
|
'
|
||||||
|
' You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
' by using the '*' as shown below:
|
||||||
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
|
<Assembly: AssemblyVersion("1.0.0.2")>
|
||||||
|
<Assembly: AssemblyFileVersion("1.0.0.2")>
|
||||||
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
83
SCrawler.Plugin.XVIDEOS/My Project/Resources.Designer.vb
generated
Normal file
83
SCrawler.Plugin.XVIDEOS/My Project/Resources.Designer.vb
generated
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
'------------------------------------------------------------------------------
|
||||||
|
' <auto-generated>
|
||||||
|
' This code was generated by a tool.
|
||||||
|
' Runtime Version:4.0.30319.42000
|
||||||
|
'
|
||||||
|
' Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
' the code is regenerated.
|
||||||
|
' </auto-generated>
|
||||||
|
'------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Option Strict On
|
||||||
|
Option Explicit On
|
||||||
|
|
||||||
|
Imports System
|
||||||
|
|
||||||
|
Namespace My.Resources
|
||||||
|
|
||||||
|
'This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
'class via a tool like ResGen or Visual Studio.
|
||||||
|
'To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
'with the /str option, or rebuild your VS project.
|
||||||
|
'''<summary>
|
||||||
|
''' A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
'''</summary>
|
||||||
|
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0"), _
|
||||||
|
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||||
|
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
|
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
|
||||||
|
Friend Module Resources
|
||||||
|
|
||||||
|
Private resourceMan As Global.System.Resources.ResourceManager
|
||||||
|
|
||||||
|
Private resourceCulture As Global.System.Globalization.CultureInfo
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Returns the cached ResourceManager instance used by this class.
|
||||||
|
'''</summary>
|
||||||
|
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
|
||||||
|
Get
|
||||||
|
If Object.ReferenceEquals(resourceMan, Nothing) Then
|
||||||
|
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("XVIDEOS.Resources", GetType(Resources).Assembly)
|
||||||
|
resourceMan = temp
|
||||||
|
End If
|
||||||
|
Return resourceMan
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Overrides the current thread's CurrentUICulture property for all
|
||||||
|
''' resource lookups using this strongly typed resource class.
|
||||||
|
'''</summary>
|
||||||
|
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Friend Property Culture() As Global.System.Globalization.CultureInfo
|
||||||
|
Get
|
||||||
|
Return resourceCulture
|
||||||
|
End Get
|
||||||
|
Set
|
||||||
|
resourceCulture = value
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property Icon32() As System.Drawing.Icon
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("Icon32", resourceCulture)
|
||||||
|
Return CType(obj,System.Drawing.Icon)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
'''</summary>
|
||||||
|
Friend ReadOnly Property IconPic32() As System.Drawing.Bitmap
|
||||||
|
Get
|
||||||
|
Dim obj As Object = ResourceManager.GetObject("IconPic32", resourceCulture)
|
||||||
|
Return CType(obj,System.Drawing.Bitmap)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
End Module
|
||||||
|
End Namespace
|
||||||
127
SCrawler.Plugin.XVIDEOS/My Project/Resources.resx
Normal file
127
SCrawler.Plugin.XVIDEOS/My Project/Resources.resx
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<?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>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="Icon32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Content\Icons\Icon32.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="IconPic32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Content\Pictures\IconPic32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
73
SCrawler.Plugin.XVIDEOS/My Project/Settings.Designer.vb
generated
Normal file
73
SCrawler.Plugin.XVIDEOS/My Project/Settings.Designer.vb
generated
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
'------------------------------------------------------------------------------
|
||||||
|
' <auto-generated>
|
||||||
|
' This code was generated by a tool.
|
||||||
|
' Runtime Version:4.0.30319.42000
|
||||||
|
'
|
||||||
|
' Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
' the code is regenerated.
|
||||||
|
' </auto-generated>
|
||||||
|
'------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Option Strict On
|
||||||
|
Option Explicit On
|
||||||
|
|
||||||
|
|
||||||
|
Namespace My
|
||||||
|
|
||||||
|
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
|
||||||
|
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0"), _
|
||||||
|
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Partial Friend NotInheritable Class MySettings
|
||||||
|
Inherits Global.System.Configuration.ApplicationSettingsBase
|
||||||
|
|
||||||
|
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
|
||||||
|
|
||||||
|
#Region "My.Settings Auto-Save Functionality"
|
||||||
|
#If _MyType = "WindowsForms" Then
|
||||||
|
Private Shared addedHandler As Boolean
|
||||||
|
|
||||||
|
Private Shared addedHandlerLockObject As New Object
|
||||||
|
|
||||||
|
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
|
||||||
|
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
|
||||||
|
If My.Application.SaveMySettingsOnExit Then
|
||||||
|
My.Settings.Save()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#End If
|
||||||
|
#End Region
|
||||||
|
|
||||||
|
Public Shared ReadOnly Property [Default]() As MySettings
|
||||||
|
Get
|
||||||
|
|
||||||
|
#If _MyType = "WindowsForms" Then
|
||||||
|
If Not addedHandler Then
|
||||||
|
SyncLock addedHandlerLockObject
|
||||||
|
If Not addedHandler Then
|
||||||
|
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
|
||||||
|
addedHandler = True
|
||||||
|
End If
|
||||||
|
End SyncLock
|
||||||
|
End If
|
||||||
|
#End If
|
||||||
|
Return defaultInstance
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
|
|
||||||
|
Namespace My
|
||||||
|
|
||||||
|
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
|
||||||
|
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||||
|
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
|
||||||
|
Friend Module MySettingsProperty
|
||||||
|
|
||||||
|
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
|
||||||
|
Friend ReadOnly Property Settings() As Global.XVIDEOS.My.MySettings
|
||||||
|
Get
|
||||||
|
Return Global.XVIDEOS.My.MySettings.Default
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
End Module
|
||||||
|
End Namespace
|
||||||
7
SCrawler.Plugin.XVIDEOS/My Project/Settings.settings
Normal file
7
SCrawler.Plugin.XVIDEOS/My Project/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
||||||
175
SCrawler.Plugin.XVIDEOS/SCrawler.Plugin.XVIDEOS.vbproj
Normal file
175
SCrawler.Plugin.XVIDEOS/SCrawler.Plugin.XVIDEOS.vbproj
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<RootNamespace>XVIDEOS</RootNamespace>
|
||||||
|
<AssemblyName>SCrawler.Plugin.XVIDEOS</AssemblyName>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<MyType>Windows</MyType>
|
||||||
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DocumentationFile>
|
||||||
|
</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<DefineDebug>false</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DocumentationFile>
|
||||||
|
</DocumentationFile>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionExplicit>On</OptionExplicit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionCompare>Binary</OptionCompare>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionStrict>Off</OptionStrict>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<OptionInfer>On</OptionInfer>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DefineDebug>true</DefineDebug>
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
|
<DefineTrace>true</DefineTrace>
|
||||||
|
<OutputPath>bin\x86\Release\</OutputPath>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Import Include="Microsoft.VisualBasic" />
|
||||||
|
<Import Include="PersonalUtilities.Functions" />
|
||||||
|
<Import Include="SCrawler.Plugin" />
|
||||||
|
<Import Include="SCrawler.Plugin.Attributes" />
|
||||||
|
<Import Include="System" />
|
||||||
|
<Import Include="System.Collections" />
|
||||||
|
<Import Include="System.Collections.Generic" />
|
||||||
|
<Import Include="System.Data" />
|
||||||
|
<Import Include="System.Diagnostics" />
|
||||||
|
<Import Include="System.Linq" />
|
||||||
|
<Import Include="System.Xml.Linq" />
|
||||||
|
<Import Include="System.Threading.Tasks" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Declarations.vb" />
|
||||||
|
<Compile Include="M3U8.vb" />
|
||||||
|
<Compile Include="My Project\AssemblyInfo.vb" />
|
||||||
|
<Compile Include="My Project\Application.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Application.myapp</DependentUpon>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Resources.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="My Project\Settings.Designer.vb">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="SettingsForm.Designer.vb">
|
||||||
|
<DependentUpon>SettingsForm.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="SettingsForm.vb">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="SiteSettings.vb" />
|
||||||
|
<Compile Include="UserData.vb" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="My Project\Resources.resx">
|
||||||
|
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||||
|
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="SettingsForm.resx">
|
||||||
|
<DependentUpon>SettingsForm.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include=".editorconfig" />
|
||||||
|
<None Include="My Project\Application.myapp">
|
||||||
|
<Generator>MyApplicationCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Application.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<None Include="My Project\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<CustomToolNamespace>My</CustomToolNamespace>
|
||||||
|
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\MyUtilities\PersonalUtilities\PersonalUtilities.vbproj">
|
||||||
|
<Project>{8405896b-2685-4916-bc93-1fb514c323a9}</Project>
|
||||||
|
<Name>PersonalUtilities</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\SCrawler.PluginProvider\SCrawler.PluginProvider.vbproj">
|
||||||
|
<Project>{d4650f6b-5a54-44b6-999b-6c675b7116b1}</Project>
|
||||||
|
<Name>SCrawler.PluginProvider</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Content\Pictures\IconPic32.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Content\Icons\Icon32.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
|
</Project>
|
||||||
129
SCrawler.Plugin.XVIDEOS/SettingsForm.Designer.vb
generated
Normal file
129
SCrawler.Plugin.XVIDEOS/SettingsForm.Designer.vb
generated
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
' 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
|
||||||
|
|
||||||
|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||||
|
Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
||||||
|
<System.Diagnostics.DebuggerNonUserCode()>
|
||||||
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
Try
|
||||||
|
If disposing AndAlso components IsNot Nothing Then
|
||||||
|
components.Dispose()
|
||||||
|
End If
|
||||||
|
Finally
|
||||||
|
MyBase.Dispose(disposing)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private components As System.ComponentModel.IContainer
|
||||||
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
|
Private Sub InitializeComponent()
|
||||||
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SettingsForm))
|
||||||
|
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.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.TopToolStripPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
|
Me.ToolbarTOP.SuspendLayout()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN
|
||||||
|
'
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN.ContentPanel
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_DOMAINS)
|
||||||
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 266)
|
||||||
|
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(384, 291)
|
||||||
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN.TopToolStripPanel
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.TopToolStripPanel.Controls.Add(Me.ToolbarTOP)
|
||||||
|
'
|
||||||
|
'LIST_DOMAINS
|
||||||
|
'
|
||||||
|
Me.LIST_DOMAINS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LIST_DOMAINS.FormattingEnabled = True
|
||||||
|
Me.LIST_DOMAINS.Location = New System.Drawing.Point(0, 0)
|
||||||
|
Me.LIST_DOMAINS.Name = "LIST_DOMAINS"
|
||||||
|
Me.LIST_DOMAINS.Size = New System.Drawing.Size(384, 266)
|
||||||
|
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
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.ClientSize = New System.Drawing.Size(384, 291)
|
||||||
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
|
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
|
||||||
|
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||||
|
Me.MaximizeBox = False
|
||||||
|
Me.MaximumSize = New System.Drawing.Size(400, 330)
|
||||||
|
Me.MinimizeBox = False
|
||||||
|
Me.MinimumSize = New System.Drawing.Size(400, 330)
|
||||||
|
Me.Name = "SettingsForm"
|
||||||
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
|
Me.Text = "Settings"
|
||||||
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.TopToolStripPanel.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.TopToolStripPanel.PerformLayout()
|
||||||
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.PerformLayout()
|
||||||
|
Me.ToolbarTOP.ResumeLayout(False)
|
||||||
|
Me.ToolbarTOP.PerformLayout()
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
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
|
||||||
477
SCrawler.Plugin.XVIDEOS/SettingsForm.resx
Normal file
477
SCrawler.Plugin.XVIDEOS/SettingsForm.resx
Normal file
@@ -0,0 +1,477 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="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" />
|
||||||
|
<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>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||||
|
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAVFSURBVEhLjZVrTJNXGMcLQmdHO6Sdt6ygAyYgN+1bS+uE
|
||||||
|
4ASlxVfSUkFkRMyouILinShGYzTRKCZL9mH7sH3YMj+YzUSXZXNeQOcEFkFhysbVQWlL6dsLvMwtWaBn
|
||||||
|
/1OKl1A2nuSX8p7znP/z5znnPa+ARntubkRjXNxnd5Ys6b2xbNmn+XL5WxgO80/+T/SoVOo/YmLu9S9d
|
||||||
|
+uhqfLwRQxEgxD9J44nZLH6Qm/tNT20tGbh4kTw9dMh3Q6NpyJBI3sF0+FRW8OhimHX2kpJB/vx5Ml5f
|
||||||
|
TwaKitwfJyZWxURGRmF6qkhDXNwn3QcOkKenTpGBkyeJFcmWI0fIdbX6XppEsgIpQYv0aTTvQdzCX7hA
|
||||||
|
eKzl6+rI+IkTpJdlPd/K5R8hRQrCBHdkMisVh3MyeOwYsSJp+OxZYq2t9d1QqX5OlUgSkPhKEbRlo724
|
||||||
|
2EqdU/FxiPOHD5NxGPOWlZHGxYs7kaYGEsGt6OhLvRUVZAAFLMB69CixY8HImTPEjnbdVqubU8TiRCT7
|
||||||
|
i/QoFBuHi4qsY+fOER5mxmGKx7rx/fvJ6O7dpEGl4splsq+RqgNSgWH58mXXlcp7/Tt3+oaQZAPDcDOC
|
||||||
|
PXGhZc6DB8kdFFktFic9ZJhcm9FoHzt92t8SHo55tJevqSFjEL+rUrkTRKIvIWwCaYBuuCCckckSUaTZ
|
||||||
|
smMHse/ZQxzV1WRk3z7CoZiH/jfV1b4WjaZjsKDAyh8/7nfMY45HLl9VNSWuVLqTRKJL0KsAyQHxUOAP
|
||||||
|
4WqpNOlHhaJpqLTU56isJE7gMpuJGwJeFPPu3UvG4HaMCuOZx7NfHO1t0mg86WIxFafOV4L54MVRDYRQ
|
||||||
|
JZWuvJWe3mzfupU4y8uJC3hMJuKFw1EUHMUGjhYUEO/69cSr0RA3aMrI8K6WSC5j/S5AnYvADPHpEK6J
|
||||||
|
ikpuSEtrtrHshHvbNuLSaomLYQgnlxNOIiFceDjh5s0jI2Kx73ZsrEcdFUU3tBKkgNfBrOLT4W/Xg/T0
|
||||||
|
9mEIOqgYcAIq7CcsjPzOMH8bExO/R/6HIBXMSdwf9rIys33dOotDJJopDuiYNT5+opFl+5OiowuwJBLM
|
||||||
|
TdxrMh3kNmzgHHA/m7gNDAJLcjJ5VFjYuX3t2lVY+p/Xij9cJlMdt2mTyxERMUPcid7TdlHxAdAbGkqe
|
||||||
|
gO5Vq3zthYW/GdVq2qbZi3h27TrG5eW5gzl3ymRkKC/vH3tCgo+K9wTE20ATeMwwk+1GY+f22YrgKNZx
|
||||||
|
Wq3HIRb7hV9py6JFpEun+/N0VlZL2+bNw5akJPIYoq3gPvgJNIL2NWsmW43Gjg1pafSCfHHVuysqajmd
|
||||||
|
zoNjN1N84ULSk5//rIphbiG1Oi8l5f1Ovb6/C72fFm8AN8F10KpSTbYUFrZ9wbJ044UgROA2GKwjCxYE
|
||||||
|
dU7FKxWKm0g0A7qR0n3Z2e92GAx9Hampz8V/AN+Ba6A9K2ui1WDoRu5yIBQ4jcYud0xMUOdmhrmNpKqA
|
||||||
|
+PSXSrg/J0eNje1rS031vSx+JSSEtGZmTtxlWRvyckGUoKW0tGSYZV0uiL7k/K89wcWnQ1iTnZ2Bje3F
|
||||||
|
C0muBsRxbUxe1mqHdCtWfI6cqQKI+TeLio5bt2zxONVqX49O96xGqWzA+Gzi0yE0ZWYqaDtase4XjWby
|
||||||
|
ilZre0MkqsecHky1CBHCxMZGPjQYvnqq1zsv5+Tg9IXWYJwBYjpPk2YJ4bXi4g9+1ett91mW0yYk0G+B
|
||||||
|
AcgBPa7P19I/FgAlyA/8zvX1fw3Qo0lPzmbwNgj6ws0D1DH9WNNf+jyXoCbo/f9mAFowYEwg+Bc5Ntw7
|
||||||
|
FHW1qQAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAIAKgIAABGDgAAMDAAAAEA
|
||||||
|
IACoJQAA7hYAACAgAAABAAgAqAgAAJY8AAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAIO/wADF/8AAxb/AAEJ/wAAAP8AAAD/AAAA/wAAAP8AAQb/AAMV/wAD
|
||||||
|
F/8AAhL/AAAC/wAAAP8AAAD/AAAA/wAHMv8AFoz/ABiW/wAQaf8AAQz/AAAA/wAAAP8AAAT/AAxU/wAY
|
||||||
|
lP8AGJP/AAtJ/wAAAv8AAAD/AAAA/wAAAP8AAQ3/ABOQ/wAh3v8AH9T/AAtb/wAAAf8AAAD/AAc7/wAc
|
||||||
|
x/8AIeD/ABis/wADHv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAFK/8AG73/ACLk/wAbvf8ABSr/AAIV/wAW
|
||||||
|
o/8AIuP/AB7P/wAIRv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAH/AAtZ/wAf1v8AIeH/ABSU/wAQ
|
||||||
|
e/8AINz/ACDe/wAPdv8AAAX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wABC/8AE4z/ACHg/wAg
|
||||||
|
2/8AINn/ACHi/wAXpf8AAhn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAQm/wAa
|
||||||
|
t/8AIeH/ACHh/wAdyP8ABzr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAB
|
||||||
|
C/8AFZj/ACHi/wAh4f8AG7r/AAQh/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AClH/AB7S/wAh4P8AIeD/ACHe/wAQfP8AAAb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8ABCX/ABq2/wAi4/8AGrn/ABag/wAh4P8AHtD/AAlH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAQr/ABKI/wAh4f8AH9X/AApQ/wAEKP8AG7v/ACLk/wAYrv8AAx7/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/Ag1W/wIi1/8CJOP/ABOL/wABCv8AAAD/AAxc/wIi2f8CJOL/AhN//wABB/8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/CQ0h/ylBsv8vTt7/Iz67/wMJKv8AAAD/AAAA/wACEP8aMJr/L07e/y1Iyv8RGD//AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wUHEP8RFzL/Ehg0/wwQI/8BAQL/AAAA/wAAAP8AAAD/CAsY/xIYM/8SGDT/CAsZ/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAEM/wADG/8AAxr/AAMa/wADFv8AAQT/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAB/wACEf8AAxv/AAMa/wADG/8AAhT/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAQk/wAT
|
||||||
|
dv8AF4b/ABeF/wAVgP8ACT7/AAAC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAQl/wATdP8AF4X/ABeF/wAW
|
||||||
|
gf8ACUD/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAI/wAOav8AHcX/AB/K/wAfyv8AGaz/AAQv/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AART/ABKL/wAeyf8AH8r/AB/L/wAVkv8AAhr/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wADJP8AF6v/ACHi/wAh4P8AIeD/ABKR/wABE/8AAAD/AAAA/wAAA/8ADGH/AB/W/wAh
|
||||||
|
4f8AIuL/ABzJ/wAISf8AAAH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AB0b/AB3K/wAh
|
||||||
|
4P8AIeD/AB7U/wALYP8AAAT/AAAA/wAFN/8AGr3/ACHi/wAh4P8AINr/AA5y/wAAB/8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAf/AA53/wAg2v8AIeD/ACHh/wAauv8ABTL/AAIT/wAT
|
||||||
|
k/8AId//ACHf/wAh4P8AFaD/AAIb/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAIg/wAVpP8AIeH/ACHg/wAh3v8AE5X/AA1z/wAf1P8AIeD/ACHh/wAbwf8ABjz/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAHQf8AHMX/ACHh/wAh
|
||||||
|
3/8AINr/AB/W/wAh4P8AIeD/AB/W/wAMZ/8AAAb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAACP8ADXD/ACDZ/wAh4P8AId//ACHg/wAh3/8AId//ABSU/wAB
|
||||||
|
Fv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAhj/ABWe/wAh3/8AId//ACHf/wAh4P8AGrz/AAUx/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAT/AAxr/wAg3P8AId//ACHf/wAh
|
||||||
|
4f8AFqP/AAIT/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAyX/ABiv/wAh4P8AId//ACHf/wAh4P8AH9L/AApb/wAAAv8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wABDf8AEYL/ACDd/wAh
|
||||||
|
3/8AIeD/ACHg/wAh3/8AIeH/ABm3/wAFL/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAC/wAKU/8AHs7/ACHh/wAh4P8AHMX/ABeo/wAg3P8AIeD/ACHf/wAS
|
||||||
|
jv8AARL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAQq/wAY
|
||||||
|
sP8AIeH/ACHg/wAf1/8ADGj/AAQy/wAYtP8AIeH/ACHg/wAe0v8AC1v/AAAD/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAQv/ABGG/wAg3f8AIeD/ACHh/wAVnf8AAhr/AAAB/wAL
|
||||||
|
XP8AH9P/ACHg/wAh4P8AGrn/AAQu/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
Av8ACVX/AB3R/wAg4P8AIOH/ABvE/wAHPv8AAAD/AAAA/wABE/8AE5L/ACDf/wAg3/8AIN//ABGO/wAB
|
||||||
|
Ef8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wULLv8NKbj/DjHn/w4x5f8MLt//ARFz/wAA
|
||||||
|
CP8AAAD/AAAA/wAAAP8ABTT/ByXD/w4x5v8OMeb/Di7Y/wgWYf8BAQT/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/BAYN/yg5hf9BXuH/QF7i/0Ff4/8tRa7/Awgd/wAAAP8AAAD/AAAA/wAAAP8AAQX/GChx/z9b
|
||||||
|
3f9BX+L/QV/k/zZOt/8MECj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgMJ/w8VMf8VHT//FRw9/xUc
|
||||||
|
Pv8KDiH/AAEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/BQcP/xMZOP8VHD7/FRw+/xMbPP8FBxL/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAA
|
||||||
|
AABAAAAAAQAIAAAAAAAABAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAIDigAFBxBABMbPwADBhQADRMxABQb
|
||||||
|
QAASGj0AAQEGABsnWgBSbewAVXHyAFRx8QBVcvQANUqlAAABAwANFz8ATmjiAFVy8gA+U7UAAQIKAAAA
|
||||||
|
AgAULJcAG0LsABtB6gAZP+QAAQ1bAAAACAALKawAHELtABtB6wAbPtgABg46AAABHgAAGb0AACDhAAAg
|
||||||
|
3wAAIeEAABq/AAABIAAACGcAACDeAAAKcAAABlEAACDYAAAh4AAAId8AACHiAAARjQAAAAEAAAIpAAAc
|
||||||
|
xwAAIuIAABWoAAAACgAAEIsAAAZPAAAAAwAAE5cAAB7OAAADNgAAARsAABq7AAAZugAAARkAAAZXAAAg
|
||||||
|
2wAAC3AAAAVNAAAg1wAADoMAAAEiAAAavQAAEIcAAB/TAAAYtAAAARgAABm4AAAFSQAAH9YAAA6CAAAe
|
||||||
|
zAAAAzUAAAIzAAAQiAAAEIkAAAZSAAAg2gAAEpIAACDcAAAbwgAAASUAAAZbAAATmwAAB2EAABOZAAAA
|
||||||
|
BQAAAScAABvEAAACKgAAEY4AACHdAAAIZAAAAAQAAAhjAAABHwAAGr4AABzKAAACMQAACGIAACHcAAAT
|
||||||
|
nAAABlMAACDZAAAVpgAAAi0AABzIAAALcgAAAAYAABSgAAAe0AAAAzwAAAdOAAAcsQAAHLMAAB61AAAR
|
||||||
|
gQAABUcAABuvAAActAAAE4cAAAEVAAAUdQAAGIEAABeAAAAXgQAAE3MAAAtTAAAHQwAAAAcAAAIaAAAC
|
||||||
|
GQAAAQ4AAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAi4yNjY2MjgAAAAAAAAAAAAA5jY2NjYyPAAAAAAAAAACDhIWGhoeIgwAA
|
||||||
|
AAAAAAAAMYmFhoaGhYoAAAAAAAAAAAB6e3x8fH1+ZwAAAAAAAAB/gIF8fH2CGwAAAAAAAAAAAHZ3Ly4u
|
||||||
|
LlleAAAAAAAAaUglLi4teHkAAAAAAAAAAAAAAHN0JS4uJTNjAAAAABVkLy4uLi51AAAAAAAAAAAAAAAA
|
||||||
|
AG1uLi4uL29gAAAAcHEtLi40cjYAAAAAAAAAAAAAAAAAZ18vLi4uZWgAAGlqJS4uJWtsAAAAAAAAAAAA
|
||||||
|
AAAAAAAAYWIlLi4lM2MxZC8uLi5lZgAAAAAAAAAAAAAAAAAAAAAAXEItLi40XV4sLS4uL19gAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAVWC8uLi5ZTy0uLiVaWwAAAAAAAAAAAAAAAAAAAAAAAAAnJiUuLi4tLi4tV0EAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAABWLC0uLi4uLiUwFQAAAAAAAAAAAAAAAAAAAAAAAAAAADFVLS4uLi4lTT0A
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNKLS4uLjRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxUC4uLi4u
|
||||||
|
LVFSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PLS4uLi4uNDU2AAAAAAAAAAAAAAAAAAAAAAAAAABMTS8u
|
||||||
|
Li0lLi4uLkMAAAAAAAAAAAAAAAAAAAAAAAAAMUklLi4tSksuLi4tOzwAAAAAAAAAAAAAAAAAAAAAAABE
|
||||||
|
RS0uLiVGR0glLi40NTYAAAAAAAAAAAAAAAAAAAAAPT4lLi4lP0AAQUIuLi4uQwAAAAAAAAAAAAAAAAAA
|
||||||
|
ADE3JS4uLSw4AAA5OjQuLi07PAAAAAAAAAAAAAAAAAAAKywtLi4vMDEAAAAyMyUuLjQ1NgAAAAAAAAAA
|
||||||
|
AAAAACEiIyQkJSYnAAAAAAAoKSQkJCQqAAAAAAAAAAAAAAAVFhcYGBgZGgAAAAAAABscHRgYHh8gAAAA
|
||||||
|
AAAAAAAAAAkKCwwMDQ4PAAAAAAAAABAREgwMDRMUAAAAAAAAAAAAAQIDAwMDBAAAAAAAAAAAAAUGAwMD
|
||||||
|
BwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAMAAAAGAA
|
||||||
|
AAABACAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAC/wAAB/8AAAr/AAAJ/wAA
|
||||||
|
Cf8AAAn/AAAJ/wAACf8AAAj/AAAF/wAAAv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAH/AAAH/wAACf8AAAn/AAAJ/wAACf8AAAn/AAAJ/wAA
|
||||||
|
Cf8AAAf/AAAB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAH/AAAI/wAD
|
||||||
|
Gv8ABSr/AAYq/wAGKv8ABSr/AAUq/wAGK/8ABSn/AAQh/wACEP8AAAL/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wABB/8AAhT/AAUm/wAGK/8ABSr/AAUq/wAF
|
||||||
|
Kv8ABir/AAYr/wAEJf8AAhj/AAAF/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAP/AAEP/wAJPf8AEmj/ABRv/wAUb/8AE2//ABNv/wAUcP8AE27/ABFl/wAIOf8AAQ3/AAAC/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAEIf8AC03/ABJp/wAU
|
||||||
|
cP8AE2//ABNv/wATb/8AFG//ABRw/wANWP8ABTH/AAEK/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAH/AAAJ/wAHOP8AEXH/ABmV/wAbnv8AGpv/ABqc/wAanP8AGpz/ABmY/wAR
|
||||||
|
cv8ABzz/AAEM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAX/AAEa/wAK
|
||||||
|
Uf8AFYf/ABmZ/wAbnf8AGpz/ABqc/wAbnf8AG5v/ABiO/wANWv8AAyD/AAAG/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wACHf8ACVT/ABed/wAduf8AHbv/AB27/wAd
|
||||||
|
u/8AHbv/AB68/wAaq/8AEHz/AAQo/wAABf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AARL/AAdM/wATjP8AHLn/AB28/wAdu/8AHbv/AB27/wAevf8AHLH/ABOG/wAIP/8AAAT/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAABP8ABCr/ABKL/wAc
|
||||||
|
xP8AINv/ACDZ/wAg2P8AINj/ACHY/wAg1/8AGrn/AApm/wACJP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAACP8ABDH/ABOR/wAcxv8AINn/ACDZ/wAg2P8AINj/ACDZ/wAg1/8AGrf/AApf/wAC
|
||||||
|
IP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAhH/AAlV/wAVpP8AINz/ACHh/wAh4f8AIeH/ACHg/wAi5P8AH9b/ABSk/wAIUv8AAA3/AAAC/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAEJv8ADGv/ABu//wAg3/8AIeL/ACHh/wAh4P8AIeH/ACLj/wAc
|
||||||
|
yf8AEY7/AAQy/wAACf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAX/AAEe/wANbv8AGr//ACDb/wAh4f8AId//ACHf/wAh4f8AId7/AB7R/wAR
|
||||||
|
hv8ABDL/AAEJ/wAAAP8AAAD/AAAA/wAAAP8AAAH/AAEL/wAKU/8AFqj/AB/X/wAh4/8AId//ACHf/wAh
|
||||||
|
4P8AId//ACDZ/wAUnv8AB0//AAEP/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAF/wAFOv8AD4b/AB7M/wAi4v8AId//ACHf/wAh
|
||||||
|
3/8AIeD/ACHf/wAZuP8ADXL/AAMZ/wAAAP8AAAD/AAAA/wAAAP8AAQv/AAQ4/wARi/8AHtH/ACHe/wAh
|
||||||
|
4P8AId//ACHf/wAi4v8AINv/ABm6/wAMZf8AARX/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wABE/8AB0j/ABem/wAf
|
||||||
|
1f8AIeH/ACHg/wAh3/8AIeD/ACHh/wAf1v8AF6j/AAdJ/wABE/8AAAD/AAAA/wAAAf8AAyD/AA10/wAZ
|
||||||
|
uf8AIeD/ACHg/wAh3/8AId//ACHg/wAh4f8AHMj/AA9+/wAFM/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAxj/AA1v/wAZtv8AIN//ACHg/wAh3/8AId//ACHf/wAi4v8AHs3/AA+H/wAFOv8AAAT/AAAA/wAB
|
||||||
|
E/8ACEr/ABes/wAf2P8AIeH/ACHf/wAh3/8AIeD/ACHh/wAe0v8AFaH/AAVA/wAAD/8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAn/AAMv/wAQg/8AHc//ACDe/wAh4f8AId//ACHf/wAh4f8AINv/ABq//wAN
|
||||||
|
bP8AARv/AAAE/wAGOf8AEYz/AB3N/wAh4f8AId//ACHf/wAh3/8AIeD/ACHf/wAXrv8ACWL/AAIZ/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAL/AAAM/wAITv8AE6D/AB7U/wAi4/8AId//ACHf/wAh
|
||||||
|
4P8AIeD/ACDa/wAVnv8ACVf/AAQ0/wANbv8AG7//ACDc/wAh4v8AId//ACHf/wAh4f8AIN3/ABzG/wAP
|
||||||
|
ef8AAyj/AAAH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wACIf8ACWL/ABq6/wAg
|
||||||
|
3f8AIeD/ACHf/wAh3/8AIeD/ACLi/wAcxv8AE53/AA18/wAVpv8AIdv/ACHg/wAh4P8AId//ACHf/wAh
|
||||||
|
4f8AHtD/ABOV/wAHQv8AAAL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
A/8ABCj/ABGH/wAbxf8AIeL/ACHg/wAh3/8AId//ACHg/wAg2f8AHc//ABvF/wAe0f8AId//ACHf/wAh
|
||||||
|
3/8AId//ACHh/wAf2f8AGLD/AAhQ/wABF/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAQ7/AAdI/wAUmf8AH9f/ACHf/wAh4P8AId//ACHf/wAh3/8AIeD/ACHf/wAh
|
||||||
|
3/8AIeD/ACHf/wAh3/8AIeD/ACHh/wAZvP8ADnj/AAMj/wAAA/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAP/AAAV/wALY/8AGbf/AB/Z/wAh4f8AId//ACHf/wAh
|
||||||
|
3/8AId//ACHg/wAh3/8AId//ACHf/wAh4P8AId7/AB7S/wARjf8ABDv/AAEL/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAD/wAEMf8ADXn/ABzH/wAh
|
||||||
|
4f8AIeD/ACHf/wAh3/8AId//ACHf/wAh3/8AId//ACHf/wAh4v8AH9b/ABan/wAKU/8AAQz/AAAC/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
Dv8ABj3/ABWb/wAez/8AIeH/ACHg/wAh3/8AId//ACHf/wAh3/8AId//ACHg/wAg2/8AGrr/AAxn/wAE
|
||||||
|
Jf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAhT/AAtl/wAYsP8AId//ACHg/wAh3/8AId//ACHf/wAh3/8AIeD/ACHh/wAd
|
||||||
|
zv8AE5X/AAQv/wAABf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAr/AAM1/wASjf8AINj/ACHf/wAh4P8AId//ACHf/wAh
|
||||||
|
3/8AIeD/ACLi/wAavv8ADnf/AAMa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAQ3/AAZG/wAUmf8AINv/ACHf/wAh
|
||||||
|
4P8AId//ACHf/wAh3/8AIeD/ACLh/wAdyf8AE4//AAQu/wAABv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAv8AAyL/AA56/wAa
|
||||||
|
vP8AIeD/ACHg/wAh3/8AId//ACHf/wAh3/8AId//ACHg/wAh3f8AG7r/AApf/wACIP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAB
|
||||||
|
Gf8ACFT/ABix/wAf2f8AIeD/ACHf/wAh3/8AId//ACHf/wAh3/8AId//ACHf/wAi4v8AH9P/ABWi/wAI
|
||||||
|
TP8AAAX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAG/wAHQv8AEpL/AB7Q/wAh4/8AId//ACHf/wAh3/8AIeD/ACHh/wAh4P8AId//ACHf/wAi
|
||||||
|
4f8AId7/AB3N/wAQgv8ABC//AAEJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAb/AAMi/wAPdf8AHMb/ACDd/wAh4f8AId//ACHf/wAh3/8AId7/ACDb/wAg
|
||||||
|
3f8AId//ACHf/wAh3/8AIeD/ACHg/wAYtP8ADGz/AAMc/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAhP/AAtg/wAXq/8AINz/ACHg/wAh3/8AId//ACHg/wAg
|
||||||
|
3P8AHtH/ABvA/wAdzf8AId//ACHf/wAh3/8AId//ACHg/wAf1f8AF6b/AAZF/wAAEf8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAADf8ABjv/ABWa/wAez/8AIeL/ACHg/wAh
|
||||||
|
3/8AIeD/ACHi/wAcy/8AFaL/AA51/wAVm/8AH9X/ACHf/wAh4P8AId//ACHf/wAi4f8AHcr/AA+C/wAF
|
||||||
|
NP8AAAH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAC/wADLv8ADXX/ABzF/wAh
|
||||||
|
4f8AIeD/ACHf/wAh3/8AIeD/ACDd/wAWqf8ACmH/AAIo/wALX/8AGbb/AB/Z/wAh4v8AId//ACHf/wAi
|
||||||
|
4v8AINv/ABm7/wAMZf8AARX/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAP/AAAR/wAL
|
||||||
|
Xv8AGLP/AB/Y/wAh4f8AId//ACHf/wAh4f8AIN3/ABzI/wAPdv8AAiL/AAAJ/wAEMf8ADXz/ABzK/wAh
|
||||||
|
4v8AId//ACHf/wAh4P8AId//ACDZ/wAUnf8AB07/AAEP/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAQ3/AAZD/wATlP8AH9X/ACHf/wAh4P8AId//ACHf/wAi4v8AHtH/ABKW/wAHRf8AAAb/AAAA/wAA
|
||||||
|
D/8ABkL/ABak/wAf1P8AIuH/ACHg/wAh3/8AIeD/ACHh/wAcx/8AEYr/AAQu/wAAB/8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAv8ABCT/ABCB/wAbwv8AIeH/ACHg/wAh3/8AId//ACHg/wAg2/8AGbX/AAlZ/wAC
|
||||||
|
HP8AAAD/AAAA/wAAAP8AAxf/AA1u/wAZtv8AId//ACHg/wAh3/8AId//ACHg/wAh3v8AG7v/AApg/wAC
|
||||||
|
IP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wACHf8ACVr/ABm1/wAg2/8AIeD/ACHf/wAh3/8AIeD/ACHi/wAb
|
||||||
|
w/8AEIL/AAQk/wAAAv8AAAD/AAAA/wAAAP8AAQn/AAQw/wARhf8AHtH/ACHe/wAh4f8AId//ACHf/wAi
|
||||||
|
4v8AH9T/ABWi/wAITP8AAAX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAH/AAAI/wAHR/8AEZf/AB3R/wAg4v8AH9//AB/f/wAg
|
||||||
|
4P8AIN//AB7X/wATl/8AB0b/AAEN/wAAAP8AAAD/AAAA/wAAAP8AAAL/AAAN/wAJU/8AFab/AB7W/wAg
|
||||||
|
4v8AH97/AB/f/wAg4f8AH97/ABvM/wAOgf8AAy//AAAJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAQf/AgYp/wQUfP8EIcv/BCTf/wQl
|
||||||
|
4/8EJeH/BCXh/wQm4/8DJNr/ARq4/wAMY/8AABX/AAAD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAC
|
||||||
|
J/8AC2z/Ah3C/wMk4P8EJeH/BCXh/wQl4f8EJeL/BCXi/wQctv8EEG3/AQQc/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8DBhb/DR5s/xQx
|
||||||
|
uP8WO+b/Fjvp/xY76P8WO+j/Fjvo/xY86v8RM9H/BBaB/wAGNP8AAAP/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAABv8BBzH/CCGa/xAz1f8XPOv/Fjvp/xY76P8WO+n/Fjvp/xc63v8TLq7/CBJJ/wIE
|
||||||
|
Ev8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wYI
|
||||||
|
Ev8VH0r/L0ey/zpZ5/87Xvf/O131/ztd9P87XfX/O172/zRV5f8jPa//BxFG/wABEP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CBRP/Chti/yM+tv85WvD/O130/zte9f87XfT/O131/zxe
|
||||||
|
9v84Vt7/KDqS/xEZPv8AAQT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/woPJf8gLmj/QFa8/0tk1/9KY9T/SmPU/0pj1P9KZNX/SmTW/z1Ttv8lNHX/BwsZ/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAwj/CQ8q/yc3ff9FXMj/SmPT/0pk
|
||||||
|
1f9KY9T/SmPU/0tk1/9IYM//O0+s/xslVP8AAQf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUIF/8PFzn/HCZX/x8rYP8fKl3/Hipd/x4qXf8fKl7/Hype/xYe
|
||||||
|
Rv8KDiT/AgMH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAH/AgMI/w0T
|
||||||
|
LP8aI1L/Hilc/x8qXv8eKl3/Hipd/x8qXv8eKV3/GyVV/w0TLP8BAQX/AAAB/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIDCf8EBxT/BwoZ/wgLGv8HCxn/BwsZ/wcL
|
||||||
|
Gf8HCxn/BwsZ/wQGD/8AAAT/AAAB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wIDCf8FBxT/BwoZ/wgLGv8HCxn/BwsZ/wcKGf8HCxr/Bwsa/wQGD/8AAAL/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAIAAAAAAAABAAAAAAAAAAA
|
||||||
|
AAAAAQAAAAEAAAAAAAAIDigAFBxBABMbPwADBhQADRMxABQbQAASGj0AAQEGABsnWgBSbewAVXHyAFRx
|
||||||
|
8QBVcvQANUqlAAABAwANFz8ATmjiAFVy8gA+U7UAAQIKAAAAAgAULJcAG0LsABtB6gAZP+QAAQ1bAAAA
|
||||||
|
CAALKawAHELtABtB6wAbPtgABg46AAABHgAAGb0AACDhAAAg3wAAIeEAABq/AAABIAAACGcAACDeAAAK
|
||||||
|
cAAABlEAACDYAAAh4AAAId8AACHiAAARjQAAAAEAAAIpAAAcxwAAIuIAABWoAAAACgAAEIsAAAZPAAAA
|
||||||
|
AwAAE5cAAB7OAAADNgAAARsAABq7AAAZugAAARkAAAZXAAAg2wAAC3AAAAVNAAAg1wAADoMAAAEiAAAa
|
||||||
|
vQAAEIcAAB/TAAAYtAAAARgAABm4AAAFSQAAH9YAAA6CAAAezAAAAzUAAAIzAAAQiAAAEIkAAAZSAAAg
|
||||||
|
2gAAEpIAACDcAAAbwgAAASUAAAZbAAATmwAAB2EAABOZAAAABQAAAScAABvEAAACKgAAEY4AACHdAAAI
|
||||||
|
ZAAAAAQAAAhjAAABHwAAGr4AABzKAAACMQAACGIAACHcAAATnAAABlMAACDZAAAVpgAAAi0AABzIAAAL
|
||||||
|
cgAAAAYAABSgAAAe0AAAAzwAAAdOAAAcsQAAHLMAAB61AAARgQAABUcAABuvAAActAAAE4cAAAEVAAAU
|
||||||
|
dQAAGIEAABeAAAAXgQAAE3MAAAtTAAAHQwAAAAcAAAIaAAACGQAAAQ4AAAEUAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi4yNjY2M
|
||||||
|
jgAAAAAAAAAAAAA5jY2NjYyPAAAAAAAAAACDhIWGhoeIgwAAAAAAAAAAMYmFhoaGhYoAAAAAAAAAAAB6
|
||||||
|
e3x8fH1+ZwAAAAAAAAB/gIF8fH2CGwAAAAAAAAAAAHZ3Ly4uLlleAAAAAAAAaUglLi4teHkAAAAAAAAA
|
||||||
|
AAAAAHN0JS4uJTNjAAAAABVkLy4uLi51AAAAAAAAAAAAAAAAAG1uLi4uL29gAAAAcHEtLi40cjYAAAAA
|
||||||
|
AAAAAAAAAAAAZ18vLi4uZWgAAGlqJS4uJWtsAAAAAAAAAAAAAAAAAAAAYWIlLi4lM2MxZC8uLi5lZgAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAXEItLi40XV4sLS4uL19gAAAAAAAAAAAAAAAAAAAAAAAVWC8uLi5ZTy0uLiVa
|
||||||
|
WwAAAAAAAAAAAAAAAAAAAAAAAAAnJiUuLi4tLi4tV0EAAAAAAAAAAAAAAAAAAAAAAAAAAABWLC0uLi4u
|
||||||
|
LiUwFQAAAAAAAAAAAAAAAAAAAAAAAAAAADFVLS4uLi4lTT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNK
|
||||||
|
LS4uLjRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxUC4uLi4uLVFSAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AE5PLS4uLi4uNDU2AAAAAAAAAAAAAAAAAAAAAAAAAABMTS8uLi0lLi4uLkMAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAMUklLi4tSksuLi4tOzwAAAAAAAAAAAAAAAAAAAAAAABERS0uLiVGR0glLi40NTYAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAPT4lLi4lP0AAQUIuLi4uQwAAAAAAAAAAAAAAAAAAADE3JS4uLSw4AAA5OjQuLi07PAAAAAAA
|
||||||
|
AAAAAAAAAAAAKywtLi4vMDEAAAAyMyUuLjQ1NgAAAAAAAAAAAAAAACEiIyQkJSYnAAAAAAAoKSQkJCQq
|
||||||
|
AAAAAAAAAAAAAAAVFhcYGBgZGgAAAAAAABscHRgYHh8gAAAAAAAAAAAAAAkKCwwMDQ4PAAAAAAAAABAR
|
||||||
|
EgwMDRMUAAAAAAAAAAAAAQIDAwMDBAAAAAAAAAAAAAUGAwMDBwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
73
SCrawler.Plugin.XVIDEOS/SettingsForm.vb
Normal file
73
SCrawler.Plugin.XVIDEOS/SettingsForm.vb
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
' 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.Toolbars
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
|
Public Class SettingsForm : Implements IOkCancelToolbar
|
||||||
|
Private ReadOnly MyDefs As DefaultFormProps
|
||||||
|
Private ReadOnly Property Settings As SiteSettings
|
||||||
|
Friend Sub New(ByRef s As SiteSettings)
|
||||||
|
InitializeComponent()
|
||||||
|
MyDefs = New DefaultFormProps
|
||||||
|
Settings = s
|
||||||
|
End Sub
|
||||||
|
Private Sub SettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
|
Try
|
||||||
|
With MyDefs
|
||||||
|
.MyViewInitialize(Me, Settings.Design, True)
|
||||||
|
.AddOkCancelToolbar()
|
||||||
|
.DelegateClosingChecker()
|
||||||
|
If Settings.Domains.Count > 0 Then Settings.Domains.ForEach(Sub(d) LIST_DOMAINS.Items.Add(d))
|
||||||
|
.EndLoaderOperations()
|
||||||
|
End With
|
||||||
|
Catch ex As Exception
|
||||||
|
MyDefs.InvokeLoaderError(ex)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
||||||
|
Settings.Domains.Clear()
|
||||||
|
With LIST_DOMAINS
|
||||||
|
If .Items.Count > 0 Then
|
||||||
|
For Each i In .Items : Settings.Domains.Add(i.ToString) : Next
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Settings.UpdateDomains()
|
||||||
|
MyDefs.CloseForm()
|
||||||
|
End Sub
|
||||||
|
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
||||||
|
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")
|
||||||
|
If Not nd.IsEmptyString Then
|
||||||
|
If Not LIST_DOMAINS.Items.Contains(nd) Then
|
||||||
|
LIST_DOMAINS.Items.Add(nd)
|
||||||
|
Else
|
||||||
|
MsgBoxE($"The domain [{nd}] already added")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_DELETE_Click(sender As Object, e As EventArgs) Handles BTT_DELETE.Click
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_DOMAINS.Items.Count - 1) Then
|
||||||
|
Dim n$ = LIST_DOMAINS.Items(_LatestSelected)
|
||||||
|
If MsgBoxE({$"Are you sure you want to delete the [{n}] domain?",
|
||||||
|
"Removing domains"}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||||
|
LIST_DOMAINS.Items.RemoveAt(_LatestSelected)
|
||||||
|
MsgBoxE($"Domain [{n}] removed")
|
||||||
|
Else
|
||||||
|
MsgBoxE("Operation canceled")
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
MsgBoxE("No domain selected", vbExclamation)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private _LatestSelected As Integer = -1
|
||||||
|
Private Sub LIST_DOMENS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_DOMAINS.SelectedIndexChanged
|
||||||
|
_LatestSelected = LIST_DOMAINS.SelectedIndex
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
185
SCrawler.Plugin.XVIDEOS/SiteSettings.vb
Normal file
185
SCrawler.Plugin.XVIDEOS/SiteSettings.vb
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
' 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.Drawing
|
||||||
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
|
Imports PersonalUtilities.Tools.WEB
|
||||||
|
<Manifest("AndyProgram_XVIDEOS"), SpecialForm(True)>
|
||||||
|
Public Class SiteSettings : Implements ISiteSettings
|
||||||
|
Public ReadOnly Property Icon As Icon Implements ISiteSettings.Icon
|
||||||
|
Get
|
||||||
|
Return My.Resources.Icon32
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public ReadOnly Property Image As Image Implements ISiteSettings.Image
|
||||||
|
Get
|
||||||
|
Return My.Resources.IconPic32
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public ReadOnly Property Site As String = "XVIDEOS" Implements ISiteSettings.Site
|
||||||
|
Public Property Logger As ILogProvider Implements ISiteSettings.Logger
|
||||||
|
#Region "M3U8"
|
||||||
|
Private ReadOnly OS64 As Boolean
|
||||||
|
Private ReadOnly FfmpegExists As Boolean
|
||||||
|
Friend ReadOnly FfmpegFile As SFile
|
||||||
|
Friend ReadOnly Property UseM3U8 As Boolean
|
||||||
|
Get
|
||||||
|
Return OS64 And FfmpegExists
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
<PXML("Domains")> Private Property SiteDomains As PropertyValue
|
||||||
|
<PropertyOption(ControlText:="Download UHD", ControlToolTip:="Download UHD (4K) content"), PXML>
|
||||||
|
Public Property DownloadUHD As PropertyValue
|
||||||
|
Friend ReadOnly Property Domains As List(Of String)
|
||||||
|
Public ReadOnly Property Responser As Response
|
||||||
|
Private Const DomainsDefault As String = "xvideos.com|xnxx.com"
|
||||||
|
Private _Initialized As Boolean = False
|
||||||
|
Friend Design As XmlFile
|
||||||
|
Public Sub New()
|
||||||
|
Responser = New Response($"Settings\Responser_{Site}.xml")
|
||||||
|
With Responser
|
||||||
|
If .File.Exists Then
|
||||||
|
.LoadSettings()
|
||||||
|
Else
|
||||||
|
.CookiesDomain = "www.xvideos.com"
|
||||||
|
.SaveSettings()
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
OS64 = Environment.Is64BitOperatingSystem
|
||||||
|
FfmpegFile = "ffmpeg.exe"
|
||||||
|
FfmpegExists = FfmpegFile.Exists
|
||||||
|
Domains = New List(Of String)
|
||||||
|
SiteDomains = New PropertyValue(DomainsDefault, GetType(String), Sub(s) UpdateDomains())
|
||||||
|
DownloadUHD = New PropertyValue(False)
|
||||||
|
End Sub
|
||||||
|
Public Function GetInstance(ByVal What As ISiteSettings.Download) As IPluginContentProvider Implements ISiteSettings.GetInstance
|
||||||
|
Return New UserData
|
||||||
|
End Function
|
||||||
|
Public Sub BeginInit() Implements ISiteSettings.BeginInit
|
||||||
|
End Sub
|
||||||
|
Public Sub EndInit() Implements ISiteSettings.EndInit
|
||||||
|
_Initialized = True
|
||||||
|
UpdateDomains()
|
||||||
|
End Sub
|
||||||
|
Public Sub Load(ByVal XMLValues As IEnumerable(Of KeyValuePair(Of String, String))) Implements ISiteSettings.Load
|
||||||
|
End Sub
|
||||||
|
Private _DomainsUpdateInProgress As Boolean = False
|
||||||
|
Friend Sub UpdateDomains()
|
||||||
|
If Not _Initialized Then Exit Sub
|
||||||
|
If Not _DomainsUpdateInProgress Then
|
||||||
|
_DomainsUpdateInProgress = True
|
||||||
|
If Not ACheck(SiteDomains.Value) Then SiteDomains.Value = DomainsDefault
|
||||||
|
Domains.ListAddList(CStr(SiteDomains.Value).Split("|"), LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
||||||
|
Domains.ListAddList(DomainsDefault.Split("|"), LAP.NotContainsOnly)
|
||||||
|
SiteDomains.Value = Domains.ListToString(, "|")
|
||||||
|
_DomainsUpdateInProgress = False
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#Region "Downloading"
|
||||||
|
Public Function Available(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.Available
|
||||||
|
Return UseM3U8
|
||||||
|
End Function
|
||||||
|
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
|
Return UseM3U8
|
||||||
|
End Function
|
||||||
|
Public Sub DownloadStarted(ByVal What As ISiteSettings.Download) Implements ISiteSettings.DownloadStarted
|
||||||
|
End Sub
|
||||||
|
Public Sub BeforeStartDownload(ByVal User As Object, ByVal What As ISiteSettings.Download) Implements ISiteSettings.BeforeStartDownload
|
||||||
|
End Sub
|
||||||
|
Public Sub AfterDownload(ByVal User As Object, ByVal What As ISiteSettings.Download) Implements ISiteSettings.AfterDownload
|
||||||
|
End Sub
|
||||||
|
Public Sub DownloadDone(ByVal What As ISiteSettings.Download) Implements ISiteSettings.DownloadDone
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
Public Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
||||||
|
End Sub
|
||||||
|
Public Sub EndUpdate() Implements ISiteSettings.EndUpdate
|
||||||
|
End Sub
|
||||||
|
Public Sub Update() Implements ISiteSettings.Update
|
||||||
|
UpdateDomains()
|
||||||
|
Responser.SaveSettings()
|
||||||
|
End Sub
|
||||||
|
Public Sub Reset() Implements ISiteSettings.Reset
|
||||||
|
End Sub
|
||||||
|
Public Sub OpenSettingsForm() Implements ISiteSettings.OpenSettingsForm
|
||||||
|
Using f As New SettingsForm(Me)
|
||||||
|
Design = New XmlFile("Settings\Design_XVIDEOS.xml")
|
||||||
|
f.ShowDialog()
|
||||||
|
Design.Dispose()
|
||||||
|
End Using
|
||||||
|
End Sub
|
||||||
|
Public Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
||||||
|
Options = Nothing
|
||||||
|
End Sub
|
||||||
|
Public Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String Implements ISiteSettings.GetUserUrl
|
||||||
|
Dim user$ = UserName.Split("_").FirstOrDefault
|
||||||
|
user &= $"/{UserName.Replace($"{user}_", String.Empty)}"
|
||||||
|
Return user
|
||||||
|
End Function
|
||||||
|
Private Const UserRegexDefault As String = "/(profiles|[\w]*?[-]{0,1}channels)/([^/]+)(\Z|.*?)"
|
||||||
|
Private Const URD As String = ".*?{0}{1}"
|
||||||
|
Public Function IsMyUser(ByVal UserURL As String) As ExchangeOptions Implements ISiteSettings.IsMyUser
|
||||||
|
If Not UserURL.IsEmptyString Then
|
||||||
|
If Domains.Count > 0 Then
|
||||||
|
Dim uName$, uOpt$, fStr$
|
||||||
|
For i% = 0 To Domains.Count - 1
|
||||||
|
fStr = String.Format(URD, Domains(i), UserRegexDefault)
|
||||||
|
uName = RegexReplace(UserURL, RParams.DMS(fStr, 2))
|
||||||
|
If Not uName.IsEmptyString Then
|
||||||
|
uOpt = RegexReplace(UserURL, RParams.DMS(fStr, 1))
|
||||||
|
If Not uOpt.IsEmptyString Then Return New ExchangeOptions(Site, $"{uOpt}_{uName}")
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
Public Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions Implements ISiteSettings.IsMyImageVideo
|
||||||
|
If Not URL.IsEmptyString And Domains.Count > 0 Then
|
||||||
|
If Domains.Exists(Function(d) URL.Contains(d)) Then Return New ExchangeOptions With {.UserName = URL, .Exists = True}
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
Private Class TempThrower : Implements IThrower
|
||||||
|
Private Sub ThrowAny() Implements IThrower.ThrowAny
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
Public Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData
|
||||||
|
If Not URL.IsEmptyString And UseM3U8 Then
|
||||||
|
Dim f As SFile = Path.CSFileP
|
||||||
|
f.Name = "video"
|
||||||
|
f.Extension = "mp4"
|
||||||
|
#Disable Warning BC40000
|
||||||
|
If AskForPath Then f = SFile.SaveAs(f,, True, "mp4")
|
||||||
|
#Enable Warning
|
||||||
|
If Not f.IsEmptyString Then
|
||||||
|
Using user As New UserData With {
|
||||||
|
.LogProvider = Logger,
|
||||||
|
.Thrower = New TempThrower,
|
||||||
|
.ESettings = Me,
|
||||||
|
.DataPath = f.Path
|
||||||
|
}
|
||||||
|
With user
|
||||||
|
.TempMediaList = New List(Of PluginUserMedia) From {UserData.GetVideoData(URL, Responser.Copy, DownloadUHD.Value, String.Empty, Logger)}
|
||||||
|
If Not .TempMediaList(0).URL.IsEmptyString Then
|
||||||
|
.Download()
|
||||||
|
If .TempMediaList(0).DownloadState = PluginUserMedia.States.Downloaded Then
|
||||||
|
Dim p As PluginUserMedia = .TempMediaList(0)
|
||||||
|
p.SpecialFolder = p.File
|
||||||
|
Return {p}
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
End Class
|
||||||
240
SCrawler.Plugin.XVIDEOS/UserData.vb
Normal file
240
SCrawler.Plugin.XVIDEOS/UserData.vb
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
' 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.RegularExpressions
|
||||||
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Tools.WEB
|
||||||
|
Imports PersonalUtilities.Tools.WebDocuments.JSON
|
||||||
|
Imports UStates = SCrawler.Plugin.PluginUserMedia.States
|
||||||
|
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
||||||
|
Public Class UserData : Implements IPluginContentProvider
|
||||||
|
#Region "Interface declarations"
|
||||||
|
Public Event ProgressChanged(Count As Integer) Implements IPluginContentProvider.ProgressChanged
|
||||||
|
Public Event TotalCountChanged(Count As Integer) Implements IPluginContentProvider.TotalCountChanged
|
||||||
|
Public Property Thrower As IThrower Implements IPluginContentProvider.Thrower
|
||||||
|
Public Property LogProvider As ILogProvider Implements IPluginContentProvider.LogProvider
|
||||||
|
Public Property ESettings As ISiteSettings Implements IPluginContentProvider.Settings
|
||||||
|
Private ReadOnly Property Settings As SiteSettings
|
||||||
|
Get
|
||||||
|
Return DirectCast(ESettings, SiteSettings)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public Property Name As String Implements IPluginContentProvider.Name
|
||||||
|
Public Property ID As String Implements IPluginContentProvider.ID
|
||||||
|
Public Property ParseUserMediaOnly As Boolean Implements IPluginContentProvider.ParseUserMediaOnly
|
||||||
|
Public Property UserDescription As String Implements IPluginContentProvider.UserDescription
|
||||||
|
Public Property ExistingContentList As List(Of PluginUserMedia) Implements IPluginContentProvider.ExistingContentList
|
||||||
|
Public Property TempPostsList As List(Of String) Implements IPluginContentProvider.TempPostsList
|
||||||
|
Public Property TempMediaList As List(Of PluginUserMedia) Implements IPluginContentProvider.TempMediaList
|
||||||
|
Public Property UserExists As Boolean Implements IPluginContentProvider.UserExists
|
||||||
|
Public Property UserSuspended As Boolean Implements IPluginContentProvider.UserSuspended
|
||||||
|
Public Property IsSavedPosts As Boolean Implements IPluginContentProvider.IsSavedPosts
|
||||||
|
Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
||||||
|
Public Property DataPath As String Implements IPluginContentProvider.DataPath
|
||||||
|
Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit
|
||||||
|
Public Property PostsDateLimit As Date? Implements IPluginContentProvider.PostsDateLimit
|
||||||
|
#End Region
|
||||||
|
#Region "Interface exchange options"
|
||||||
|
Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet
|
||||||
|
End Sub
|
||||||
|
Public Function ExchangeOptionsGet() As Object Implements IPluginContentProvider.ExchangeOptionsGet
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Interface XML"
|
||||||
|
Public Sub XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String))) Implements IPluginContentProvider.XmlFieldsSet
|
||||||
|
End Sub
|
||||||
|
Public Function XmlFieldsGet() As List(Of KeyValuePair(Of String, String)) Implements IPluginContentProvider.XmlFieldsGet
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
Private Property Responser As Response
|
||||||
|
Public Sub GetMedia() Implements IPluginContentProvider.GetMedia
|
||||||
|
Try
|
||||||
|
If Not Settings.UseM3U8 Then LogProvider.Add("File [ffmpeg.exe] not found") : Exit Sub
|
||||||
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
|
Responser = New Response
|
||||||
|
Responser.Copy(Settings.Responser)
|
||||||
|
|
||||||
|
Dim NextPage% = 0
|
||||||
|
Dim r$
|
||||||
|
Dim j As EContainer, jj As EContainer
|
||||||
|
Dim e As ErrorsDescriber = EDP.ThrowException
|
||||||
|
Dim user$ = Settings.GetUserUrl(Name, False)
|
||||||
|
Dim p As PluginUserMedia
|
||||||
|
Dim EnvirSet As Boolean = False
|
||||||
|
|
||||||
|
Do
|
||||||
|
Thrower.ThrowAny()
|
||||||
|
r = Responser.GetResponse($"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}",, e)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
||||||
|
j = JsonDocument.Parse(r).XmlIfNothing
|
||||||
|
With j
|
||||||
|
If .Contains("videos") Then
|
||||||
|
With .Item("videos")
|
||||||
|
If .Count > 0 Then
|
||||||
|
NextPage += 1
|
||||||
|
For Each jj In .Self
|
||||||
|
p = New PluginUserMedia With {
|
||||||
|
.PostID = jj.Value("id"),
|
||||||
|
.URL = $"https://www.xvideos.com{jj.Value("u")}"
|
||||||
|
}
|
||||||
|
If Not p.PostID.IsEmptyString And Not jj.Value("u").IsEmptyString Then
|
||||||
|
If Not TempPostsList.Contains(p.PostID) Then TempPostsList.Add(p.PostID) : TempMediaList.Add(p) Else Exit Do
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Else
|
||||||
|
.Dispose()
|
||||||
|
Exit Do
|
||||||
|
End If
|
||||||
|
.Dispose()
|
||||||
|
End With
|
||||||
|
Else
|
||||||
|
Exit Do
|
||||||
|
End If
|
||||||
|
Loop
|
||||||
|
|
||||||
|
If TempMediaList.Count > 0 Then
|
||||||
|
For i% = 0 To TempMediaList.Count - 1
|
||||||
|
Thrower.ThrowAny()
|
||||||
|
With TempMediaList(i)
|
||||||
|
TempMediaList(i) = GetVideoData(.URL, Responser, Settings.DownloadUHD.Value, .PostID, LogProvider)
|
||||||
|
End With
|
||||||
|
Next
|
||||||
|
TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
||||||
|
End If
|
||||||
|
Catch oex As OperationCanceledException
|
||||||
|
Catch dex As ObjectDisposedException
|
||||||
|
Catch ex As Exception
|
||||||
|
If Responser.StatusCode = Net.HttpStatusCode.NotFound Then
|
||||||
|
UserExists = False
|
||||||
|
Else
|
||||||
|
LogProvider.Add(ex, "[XVIDEOS.UserData.GetMedia]")
|
||||||
|
End If
|
||||||
|
Finally
|
||||||
|
If TempMediaList.ListExists Then TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private Structure VSize : Implements IRegExCreator, IComparable(Of VSize)
|
||||||
|
Friend Size As Integer
|
||||||
|
Friend Value As String
|
||||||
|
Private Function CreateFromArray(ByVal ParamsArray() As String) As Object Implements IRegExCreator.CreateFromArray
|
||||||
|
If ParamsArray.ListExists(2) Then
|
||||||
|
Size = AConvert(Of Integer)(ParamsArray(0), 0)
|
||||||
|
Value = ParamsArray(1)
|
||||||
|
End If
|
||||||
|
Return Me
|
||||||
|
End Function
|
||||||
|
Private Function CompareTo(ByVal Other As VSize) As Integer Implements IComparable(Of VSize).CompareTo
|
||||||
|
Return Size.CompareTo(Other.Size) * -1
|
||||||
|
End Function
|
||||||
|
End Structure
|
||||||
|
Friend Shared Function GetVideoData(ByVal URL As String, ByVal resp As Response, ByVal DownloadUHD As Boolean,
|
||||||
|
ByVal ID As String, ByRef Logger As ILogProvider) As PluginUserMedia
|
||||||
|
Try
|
||||||
|
If Not URL.IsEmptyString Then
|
||||||
|
Dim r$ = resp.GetResponse(URL,, EDP.ThrowException)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Dim m$ = RegexReplace(r, M3U8Regex)
|
||||||
|
If Not m.IsEmptyString Then
|
||||||
|
Dim appender$ = RegexReplace(m, M3U8Appender)
|
||||||
|
Dim t$ = RegexReplace(r, VideoTitleRegex)
|
||||||
|
r = resp.GetResponse(m,, EDP.ThrowException)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Dim ls As List(Of VSize) = FNF.RegexFields(Of VSize)(r, {M3U8Reparse}, {1, 2})
|
||||||
|
If ls.ListExists And Not DownloadUHD Then ls.RemoveAll(Function(v) v.Size > 1080)
|
||||||
|
If ls.ListExists Then
|
||||||
|
ls.Sort()
|
||||||
|
m = $"{appender}/{ls(0).Value}"
|
||||||
|
ls.Clear()
|
||||||
|
Dim pID$ = ID
|
||||||
|
If pID.IsEmptyString Then pID = RegexReplace(r, VideoID)
|
||||||
|
If pID.IsEmptyString Then pID = "0"
|
||||||
|
|
||||||
|
If Not t.IsEmptyString Then t = t.StringRemoveWinForbiddenSymbols(" ")
|
||||||
|
If t.IsEmptyString Then
|
||||||
|
t = pID
|
||||||
|
Else
|
||||||
|
If t.Length > 100 Then t = Left(t, 100)
|
||||||
|
End If
|
||||||
|
If Not m.IsEmptyString Then
|
||||||
|
Return New PluginUserMedia With {
|
||||||
|
.ContentType = UTypes.m3u8,
|
||||||
|
.PostID = pID,
|
||||||
|
.URL = m,
|
||||||
|
.File = $"{t}.mp4",
|
||||||
|
.SpecialFolder = appender
|
||||||
|
}
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
Catch ex As Exception
|
||||||
|
Logger.Add(ex, $"[XVIDEOS.UserData.GetVideoData({URL})]")
|
||||||
|
Return Nothing
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
|
Public Sub Download() Implements IPluginContentProvider.Download
|
||||||
|
Try
|
||||||
|
If TempMediaList.Count > 0 Then
|
||||||
|
RaiseEvent TotalCountChanged(TempMediaList.Count - 1)
|
||||||
|
Dim m As PluginUserMedia
|
||||||
|
Dim f As SFile
|
||||||
|
Dim DefPath As String = DataPath.CSFilePSN
|
||||||
|
For i% = 0 To TempMediaList.Count - 1
|
||||||
|
Thrower.ThrowAny()
|
||||||
|
m = TempMediaList(i)
|
||||||
|
f = m.File
|
||||||
|
f.Path = DefPath
|
||||||
|
m.DownloadState = UStates.Tried
|
||||||
|
Try
|
||||||
|
f = M3U8.Download(m.URL, m.SpecialFolder, Settings.FfmpegFile, f, LogProvider)
|
||||||
|
m.File = f
|
||||||
|
m.DownloadState = UStates.Downloaded
|
||||||
|
Catch ex As Exception
|
||||||
|
m.DownloadState = UStates.Skipped
|
||||||
|
End Try
|
||||||
|
TempMediaList(i) = m
|
||||||
|
RaiseEvent ProgressChanged(1)
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Catch oex As OperationCanceledException
|
||||||
|
Catch dex As ObjectDisposedException
|
||||||
|
Catch ex As Exception
|
||||||
|
LogProvider.Add(ex, $"[XVIDEOS.UserData.Download]")
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then
|
||||||
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
|
If TempMediaList.ListExists Then TempMediaList.Clear()
|
||||||
|
If TempPostsList.ListExists Then TempPostsList.Clear()
|
||||||
|
If ExistingContentList.ListExists Then ExistingContentList.Clear()
|
||||||
|
End If
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Public Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Namespace Plugin
|
Namespace Plugin
|
||||||
Public Interface IPluginContentProvider
|
Public Interface IPluginContentProvider : Inherits IDisposable
|
||||||
Event ProgressChanged(ByVal Count As Integer)
|
Event ProgressChanged(ByVal Count As Integer)
|
||||||
Event TotalCountChanged(ByVal Count As Integer)
|
Event TotalCountChanged(ByVal Count As Integer)
|
||||||
Property Thrower As IThrower
|
Property Thrower As IThrower
|
||||||
@@ -19,13 +19,14 @@ Namespace Plugin
|
|||||||
Property UserDescription As String
|
Property UserDescription As String
|
||||||
Property ExistingContentList As List(Of PluginUserMedia)
|
Property ExistingContentList As List(Of PluginUserMedia)
|
||||||
Property TempPostsList As List(Of String)
|
Property TempPostsList As List(Of String)
|
||||||
Property TempMediaList As List(Of IPluginUserMedia)
|
Property TempMediaList As List(Of PluginUserMedia)
|
||||||
Property UserExists As Boolean
|
Property UserExists As Boolean
|
||||||
Property UserSuspended As Boolean
|
Property UserSuspended As Boolean
|
||||||
Property IsSavedPosts As Boolean
|
Property IsSavedPosts As Boolean
|
||||||
Property SeparateVideoFolder As Boolean
|
Property SeparateVideoFolder As Boolean
|
||||||
Property DataPath As String
|
Property DataPath As String
|
||||||
Property PostsNumberLimit As Integer?
|
Property PostsNumberLimit As Integer?
|
||||||
|
Property PostsDateLimit As Date?
|
||||||
Function ExchangeOptionsGet() As Object
|
Function ExchangeOptionsGet() As Object
|
||||||
Sub ExchangeOptionsSet(ByVal Obj As Object)
|
Sub ExchangeOptionsSet(ByVal Obj As Object)
|
||||||
Sub XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String)))
|
Sub XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String)))
|
||||||
|
|||||||
@@ -17,10 +17,11 @@ Namespace Plugin
|
|||||||
ReadOnly Property Icon As Icon
|
ReadOnly Property Icon As Icon
|
||||||
ReadOnly Property Image As Image
|
ReadOnly Property Image As Image
|
||||||
ReadOnly Property Site As String
|
ReadOnly Property Site As String
|
||||||
|
Property Logger As ILogProvider
|
||||||
Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String
|
Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String
|
||||||
Function IsMyUser(ByVal UserURL As String) As ExchangeOptions
|
Function IsMyUser(ByVal UserURL As String) As ExchangeOptions
|
||||||
Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions
|
Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions
|
||||||
Function GetSpecialData(ByVal URL As String) As IEnumerable(Of IPluginUserMedia)
|
Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia)
|
||||||
Function GetInstance(ByVal What As Download) As IPluginContentProvider
|
Function GetInstance(ByVal What As Download) As IPluginContentProvider
|
||||||
#Region "XML Support"
|
#Region "XML Support"
|
||||||
Sub Load(ByVal XMLValues As IEnumerable(Of KeyValuePair(Of String, String)))
|
Sub Load(ByVal XMLValues As IEnumerable(Of KeyValuePair(Of String, String)))
|
||||||
@@ -41,6 +42,8 @@ Namespace Plugin
|
|||||||
Sub AfterDownload(ByVal User As Object, ByVal What As Download)
|
Sub AfterDownload(ByVal User As Object, ByVal What As Download)
|
||||||
Sub DownloadDone(ByVal What As Download)
|
Sub DownloadDone(ByVal What As Download)
|
||||||
#End Region
|
#End Region
|
||||||
|
Sub Update()
|
||||||
|
Sub Reset()
|
||||||
Sub OpenSettingsForm()
|
Sub OpenSettingsForm()
|
||||||
Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean)
|
Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean)
|
||||||
End Interface
|
End Interface
|
||||||
|
|||||||
@@ -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.0")>
|
<Assembly: AssemblyVersion("3.0.0.2")>
|
||||||
<Assembly: AssemblyFileVersion("3.0.0.0")>
|
<Assembly: AssemblyFileVersion("3.0.0.2")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -1,40 +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 Plugin
|
|
||||||
Public Structure PluginUserMedia : Implements IPluginUserMedia
|
|
||||||
Public Property ContentType As Integer Implements IPluginUserMedia.ContentType
|
|
||||||
Public Property URL As String Implements IPluginUserMedia.URL
|
|
||||||
Public Property MD5 As String Implements IPluginUserMedia.MD5
|
|
||||||
Public Property File As String Implements IPluginUserMedia.File
|
|
||||||
Public Property DownloadState As Integer Implements IPluginUserMedia.DownloadState
|
|
||||||
Public Property PostID As String Implements IPluginUserMedia.PostID
|
|
||||||
Public Property PostDate As Date? Implements IPluginUserMedia.PostDate
|
|
||||||
Public Property SpecialFolder As String Implements IPluginUserMedia.SpecialFolder
|
|
||||||
End Structure
|
|
||||||
Public Interface IPluginUserMedia
|
|
||||||
Enum Types As Integer
|
|
||||||
Undefined = 0
|
|
||||||
[Picture] = 1
|
|
||||||
[Video] = 2
|
|
||||||
[Text] = 3
|
|
||||||
VideoPre = 10
|
|
||||||
GIF = 50
|
|
||||||
m3u8 = 100
|
|
||||||
End Enum
|
|
||||||
Enum States As Integer : Unknown = 0 : Tried = 1 : Downloaded = 2 : Skipped = 3 : End Enum
|
|
||||||
Property ContentType As Integer
|
|
||||||
Property URL As String
|
|
||||||
Property MD5 As String
|
|
||||||
Property File As String
|
|
||||||
Property DownloadState As Integer
|
|
||||||
Property PostID As String
|
|
||||||
Property PostDate As Date?
|
|
||||||
Property SpecialFolder As String
|
|
||||||
End Interface
|
|
||||||
End Namespace
|
|
||||||
30
SCrawler.PluginProvider/Objects/PluginUserMedia.vb
Normal file
30
SCrawler.PluginProvider/Objects/PluginUserMedia.vb
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
' 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 Plugin
|
||||||
|
Public Structure PluginUserMedia
|
||||||
|
Enum Types As Integer
|
||||||
|
Undefined = 0
|
||||||
|
[Picture] = 1
|
||||||
|
[Video] = 2
|
||||||
|
[Text] = 3
|
||||||
|
VideoPre = 10
|
||||||
|
GIF = 50
|
||||||
|
m3u8 = 100
|
||||||
|
End Enum
|
||||||
|
Enum States As Integer : Unknown = 0 : Tried = 1 : Downloaded = 2 : Skipped = 3 : End Enum
|
||||||
|
Public ContentType As Integer
|
||||||
|
Public URL As String
|
||||||
|
Public MD5 As String
|
||||||
|
Public File As String
|
||||||
|
Public DownloadState As Integer
|
||||||
|
Public PostID As String
|
||||||
|
Public PostDate As Date?
|
||||||
|
Public SpecialFolder As String
|
||||||
|
End Structure
|
||||||
|
End Namespace
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
<Compile Include="Objects\ExchangeOptions.vb" />
|
<Compile Include="Objects\ExchangeOptions.vb" />
|
||||||
<Compile Include="ObjectInterfaces\ILogProvider.vb" />
|
<Compile Include="ObjectInterfaces\ILogProvider.vb" />
|
||||||
<Compile Include="Interfaces\IPluginContentProvider.vb" />
|
<Compile Include="Interfaces\IPluginContentProvider.vb" />
|
||||||
<Compile Include="ObjectInterfaces\IPluginUserMedia.vb" />
|
<Compile Include="Objects\PluginUserMedia.vb" />
|
||||||
<Compile Include="Interfaces\ISiteSettings.vb" />
|
<Compile Include="Interfaces\ISiteSettings.vb" />
|
||||||
<Compile Include="ObjectInterfaces\IThrower.vb" />
|
<Compile Include="ObjectInterfaces\IThrower.vb" />
|
||||||
<Compile Include="My Project\AssemblyInfo.vb" />
|
<Compile Include="My Project\AssemblyInfo.vb" />
|
||||||
|
|||||||
28
SCrawler.sln
28
SCrawler.sln
@@ -17,6 +17,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.PluginProvider", "SCrawler.PluginProvider\SCrawler.PluginProvider.vbproj", "{D4650F6B-5A54-44B6-999B-6C675B7116B1}"
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.PluginProvider", "SCrawler.PluginProvider\SCrawler.PluginProvider.vbproj", "{D4650F6B-5A54-44B6-999B-6C675B7116B1}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.LPSG", "SCrawler.Plugin.LPSG\SCrawler.Plugin.LPSG.vbproj", "{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}"
|
||||||
|
EndProject
|
||||||
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SCrawler.Plugin.XVIDEOS", "SCrawler.Plugin.XVIDEOS\SCrawler.Plugin.XVIDEOS.vbproj", "{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -63,6 +67,30 @@ Global
|
|||||||
{D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x64.Build.0 = Release|x64
|
{D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x64.Build.0 = Release|x64
|
||||||
{D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x86.ActiveCfg = Release|x86
|
{D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x86.ActiveCfg = Release|x86
|
||||||
{D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x86.Build.0 = Release|x86
|
{D4650F6B-5A54-44B6-999B-6C675B7116B1}.Release|x86.Build.0 = Release|x86
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x64.Build.0 = Release|x64
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{22A130B2-DDF4-4FB5-BA38-E5DB4CF1B8A2}.Release|x86.Build.0 = Release|x86
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{CCCF47F4-C97C-4193-AC4B-C56DF2F9AA8A}.Release|x64.ActiveCfg = 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.Build.0 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -11,11 +11,12 @@ Imports PersonalUtilities.Functions.RegularExpressions
|
|||||||
Imports PersonalUtilities.Tools.WEB
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
||||||
Namespace API.Base
|
Namespace API.Base
|
||||||
Friend MustInherit Class SiteSettingsBase : Implements ISiteSettings, IResponserContainer
|
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 = Nothing Implements ISiteSettings.Icon
|
||||||
Friend Overridable ReadOnly Property Image As Image = Nothing Implements ISiteSettings.Image
|
Friend Overridable ReadOnly Property Image As Image = Nothing Implements ISiteSettings.Image
|
||||||
Friend Overridable ReadOnly Property Responser As Response Implements IResponserContainer.Responser
|
Private Property Logger As ILogProvider = LogConnector Implements ISiteSettings.Logger
|
||||||
|
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
|
||||||
Friend Sub New(ByVal SiteName As String)
|
Friend Sub New(ByVal SiteName As String)
|
||||||
Site = SiteName
|
Site = SiteName
|
||||||
@@ -82,7 +83,7 @@ Namespace API.Base
|
|||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
Friend Overridable Function GetSpecialData(ByVal URL As String) As IEnumerable(Of IPluginUserMedia) Implements ISiteSettings.GetSpecialData
|
Friend Overridable 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
|
||||||
Friend Overridable Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia)
|
Friend Overridable Function GetSpecialDataF(ByVal URL As String) As IEnumerable(Of UserMedia)
|
||||||
@@ -97,6 +98,11 @@ Namespace API.Base
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
|
Friend Overridable Sub Update() Implements ISiteSettings.Update
|
||||||
|
If Not Responser Is Nothing Then Responser.SaveSettings()
|
||||||
|
End Sub
|
||||||
|
Friend Overridable Sub Reset() Implements ISiteSettings.Reset
|
||||||
|
End Sub
|
||||||
Friend Overridable Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
Friend Overridable Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
||||||
Options = Nothing
|
Options = Nothing
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ Namespace API.Base
|
|||||||
Me.New(_URL)
|
Me.New(_URL)
|
||||||
[Type] = _Type
|
[Type] = _Type
|
||||||
End Sub
|
End Sub
|
||||||
Friend Sub New(ByVal m As Plugin.IPluginUserMedia)
|
Friend Sub New(ByVal m As Plugin.PluginUserMedia)
|
||||||
If Not IsNothing(m) Then
|
If Not IsNothing(m) Then
|
||||||
[Type] = m.ContentType
|
[Type] = m.ContentType
|
||||||
URL = m.URL
|
URL = m.URL
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
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 System.IO
|
Imports System.IO
|
||||||
Imports System.Net
|
Imports System.Net
|
||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
@@ -421,7 +422,7 @@ BlockNullPicture:
|
|||||||
Friend Property ExternalPlugin As IPluginContentProvider
|
Friend Property ExternalPlugin As IPluginContentProvider
|
||||||
Private Property IPluginContentProvider_ExistingContentList As List(Of PluginUserMedia) Implements IPluginContentProvider.ExistingContentList
|
Private Property IPluginContentProvider_ExistingContentList As List(Of PluginUserMedia) Implements IPluginContentProvider.ExistingContentList
|
||||||
Private Property IPluginContentProvider_TempPostsList As List(Of String) Implements IPluginContentProvider.TempPostsList
|
Private Property IPluginContentProvider_TempPostsList As List(Of String) Implements IPluginContentProvider.TempPostsList
|
||||||
Private Property IPluginContentProvider_TempMediaList As List(Of IPluginUserMedia) Implements IPluginContentProvider.TempMediaList
|
Private Property IPluginContentProvider_TempMediaList As List(Of PluginUserMedia) Implements IPluginContentProvider.TempMediaList
|
||||||
Private Property IPluginContentProvider_SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
Private Property IPluginContentProvider_SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
||||||
Private Property IPluginContentProvider_DataPath As String Implements IPluginContentProvider.DataPath
|
Private Property IPluginContentProvider_DataPath As String Implements IPluginContentProvider.DataPath
|
||||||
Private Sub IPluginContentProvider_XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String))) Implements IPluginContentProvider.XmlFieldsSet
|
Private Sub IPluginContentProvider_XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String))) Implements IPluginContentProvider.XmlFieldsSet
|
||||||
@@ -711,7 +712,8 @@ BlockNullPicture:
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "Download functions and options"
|
#Region "Download functions and options"
|
||||||
Friend Overridable Property DownloadTopCount As Integer? = Nothing Implements IUserData.DownloadTopCount, IPluginContentProvider.PostsNumberLimit
|
Friend Overridable Property DownloadTopCount As Integer? = Nothing Implements IUserData.DownloadTopCount, IPluginContentProvider.PostsNumberLimit
|
||||||
Protected Responser As PersonalUtilities.Tools.WEB.Response
|
Friend Overridable Property DownloadToDate As Date? = Nothing Implements IUserData.DownloadToDate, IPluginContentProvider.PostsDateLimit
|
||||||
|
Protected Responser As Response
|
||||||
Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData
|
Friend Overridable Sub DownloadData(ByVal Token As CancellationToken) Implements IContentProvider.DownloadData
|
||||||
Dim Canceled As Boolean = False
|
Dim Canceled As Boolean = False
|
||||||
_ExternalCompatibilityToken = Token
|
_ExternalCompatibilityToken = Token
|
||||||
@@ -719,12 +721,8 @@ BlockNullPicture:
|
|||||||
UpdateDataFiles()
|
UpdateDataFiles()
|
||||||
UserDescriptionReset()
|
UserDescriptionReset()
|
||||||
If Not Responser Is Nothing Then Responser.Dispose()
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
Responser = New PersonalUtilities.Tools.WEB.Response
|
Responser = New Response
|
||||||
If TypeOf HOST.Source Is IResponserContainer Then
|
If Not HOST.Responser Is Nothing Then Responser.Copy(HOST.Responser)
|
||||||
With DirectCast(HOST.Source, IResponserContainer)
|
|
||||||
If Not .Responser Is Nothing Then Responser.Copy(.Responser)
|
|
||||||
End With
|
|
||||||
End If
|
|
||||||
|
|
||||||
Dim UpPic As Boolean = Settings.ViewModeIsPicture AndAlso GetPicture(False) Is Nothing
|
Dim UpPic As Boolean = Settings.ViewModeIsPicture AndAlso GetPicture(False) Is Nothing
|
||||||
Dim sEnvir() As Boolean = {UserExists, UserSuspended}
|
Dim sEnvir() As Boolean = {UserExists, UserSuspended}
|
||||||
@@ -791,8 +789,20 @@ BlockNullPicture:
|
|||||||
If Not Canceled Then _DataParsed = True ': LastUpdated = Now
|
If Not Canceled Then _DataParsed = True ': LastUpdated = Now
|
||||||
_ContentNew.Clear()
|
_ContentNew.Clear()
|
||||||
DownloadTopCount = Nothing
|
DownloadTopCount = Nothing
|
||||||
|
DownloadToDate = Nothing
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
Protected Function CheckDatesLimit(ByVal DateString As String, ByVal DateProvider As IFormatProvider) As Boolean
|
||||||
|
Try
|
||||||
|
If DownloadToDate.HasValue And Not DateString.IsEmptyString Then
|
||||||
|
Dim td As Date? = AConvert(Of Date)(DateString, DateProvider, Nothing)
|
||||||
|
If td.HasValue Then Return td.Value < DownloadToDate.Value
|
||||||
|
End If
|
||||||
|
Return True
|
||||||
|
Catch ex As Exception
|
||||||
|
Return ErrorsDescriber.Execute(EDP.SendInLog, ex, $"[UserDataBase.CheckDatesLimit({DateString})]", True)
|
||||||
|
End Try
|
||||||
|
End Function
|
||||||
Protected Sub UpdateDataFiles()
|
Protected Sub UpdateDataFiles()
|
||||||
If Not User.File.IsEmptyString Then
|
If Not User.File.IsEmptyString Then
|
||||||
MyFileData = User.File
|
MyFileData = User.File
|
||||||
@@ -931,16 +941,13 @@ BlockNullPicture:
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "Delete, Move, Merge"
|
#Region "Delete, Move, Merge"
|
||||||
Friend Overridable Function Delete() As Integer Implements IUserData.Delete
|
Friend Overridable Function Delete() As Integer Implements IUserData.Delete
|
||||||
Return DeleteF(Me)
|
|
||||||
End Function
|
|
||||||
Friend Function DeleteF(ByVal Instance As IUserData) As Integer
|
|
||||||
Dim f As SFile = SFile.GetPath(MyFile.CutPath.Path)
|
Dim f As SFile = SFile.GetPath(MyFile.CutPath.Path)
|
||||||
If f.Exists(SFO.Path, False) AndAlso (User.Merged OrElse f.Delete(SFO.Path, Settings.DeleteMode)) Then
|
If f.Exists(SFO.Path, False) AndAlso (User.Merged OrElse f.Delete(SFO.Path, Settings.DeleteMode)) Then
|
||||||
ImageHandler(Me, False)
|
ImageHandler(Me, False)
|
||||||
Settings.UsersList.Remove(User)
|
Settings.UsersList.Remove(User)
|
||||||
Settings.UpdateUsersList()
|
Settings.UpdateUsersList()
|
||||||
Settings.Users.Remove(Instance)
|
Settings.Users.Remove(Me)
|
||||||
Downloader.UserRemove(Instance)
|
Downloader.UserRemove(Me)
|
||||||
Dispose(True)
|
Dispose(True)
|
||||||
Return 1
|
Return 1
|
||||||
Else
|
Else
|
||||||
@@ -948,24 +955,22 @@ BlockNullPicture:
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
Friend Overridable Function MoveFiles(ByVal __CollectionName As String) As Boolean Implements IUserData.MoveFiles
|
Friend Overridable Function MoveFiles(ByVal __CollectionName As String) As Boolean Implements IUserData.MoveFiles
|
||||||
Return MoveFilesF(Me, __CollectionName)
|
|
||||||
End Function
|
|
||||||
Friend Function MoveFilesF(ByRef Instance As IUserData, ByVal __CollectionName As String) As Boolean
|
|
||||||
Dim UserBefore As UserInfo = User
|
Dim UserBefore As UserInfo = User
|
||||||
Dim Removed As Boolean = True
|
Dim Removed As Boolean = True
|
||||||
Dim _TurnBack As Boolean = False
|
Dim _TurnBack As Boolean = False
|
||||||
Try
|
Try
|
||||||
Dim f As SFile
|
Dim f As SFile
|
||||||
If IncludedInCollection Then
|
If IncludedInCollection Then
|
||||||
Settings.Users.Add(Instance)
|
Settings.Users.Add(Me)
|
||||||
Removed = False
|
Removed = False
|
||||||
User.CollectionName = String.Empty
|
User.CollectionName = String.Empty
|
||||||
User.IncludedInCollection = False
|
User.IncludedInCollection = False
|
||||||
Else
|
Else
|
||||||
Settings.Users.Remove(Instance)
|
Settings.Users.Remove(Me)
|
||||||
Removed = True
|
Removed = True
|
||||||
User.CollectionName = __CollectionName
|
User.CollectionName = __CollectionName
|
||||||
User.IncludedInCollection = True
|
User.IncludedInCollection = True
|
||||||
|
User.SpecialPath = Nothing
|
||||||
End If
|
End If
|
||||||
_TurnBack = True
|
_TurnBack = True
|
||||||
User.UpdateUserFile()
|
User.UpdateUserFile()
|
||||||
@@ -977,7 +982,7 @@ BlockNullPicture:
|
|||||||
"Destination directory is not empty!"}, MsgBoxStyle.Exclamation,,, {"Delete", "Cancel"}) = 1 Then
|
"Destination directory is not empty!"}, MsgBoxStyle.Exclamation,,, {"Delete", "Cancel"}) = 1 Then
|
||||||
MsgBoxE("Operation canceled", MsgBoxStyle.Exclamation)
|
MsgBoxE("Operation canceled", MsgBoxStyle.Exclamation)
|
||||||
User = UserBefore
|
User = UserBefore
|
||||||
If Removed Then Settings.Users.Add(Instance) Else Settings.Users.Remove(Instance)
|
If Removed Then Settings.Users.Add(Me) Else Settings.Users.Remove(Me)
|
||||||
_TurnBack = False
|
_TurnBack = False
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
@@ -993,7 +998,7 @@ BlockNullPicture:
|
|||||||
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Files moving error")
|
ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Files moving error")
|
||||||
User = UserBefore
|
User = UserBefore
|
||||||
If _TurnBack Then
|
If _TurnBack Then
|
||||||
If Removed Then Settings.Users.Add(Instance) Else Settings.Users.Remove(Instance)
|
If Removed Then Settings.Users.Add(Me) Else Settings.Users.Remove(Me)
|
||||||
End If
|
End If
|
||||||
Return False
|
Return False
|
||||||
End Try
|
End Try
|
||||||
@@ -1236,6 +1241,7 @@ BlockNullPicture:
|
|||||||
Sub OpenFolder()
|
Sub OpenFolder()
|
||||||
ReadOnly Property Self As IUserData
|
ReadOnly Property Self As IUserData
|
||||||
Property DownloadTopCount As Integer?
|
Property DownloadTopCount As Integer?
|
||||||
|
Property DownloadToDate As Date?
|
||||||
Sub SetEnvironment(ByRef h As SettingsHost, ByVal u As UserInfo, ByVal _LoadUserInformation As Boolean,
|
Sub SetEnvironment(ByRef h As SettingsHost, ByVal u As UserInfo, ByVal _LoadUserInformation As Boolean,
|
||||||
Optional ByVal AttachUserInfo As Boolean = True)
|
Optional ByVal AttachUserInfo As Boolean = True)
|
||||||
ReadOnly Property Disposed As Boolean
|
ReadOnly Property Disposed As Boolean
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ Namespace API.Instagram
|
|||||||
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimer As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimer), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider
|
Private ReadOnly Property RequestsWaitTimerProvider As IFormatProvider
|
||||||
<PropertyOption(ControlText:="Request timer counter", AllowNull:=False), PXML("RequestsWaitTimerTaskCount"), ControlNumber(6)>
|
<PropertyOption(ControlText:="Request timer counter", AllowNull:=False, LeftOffset:=120), PXML("RequestsWaitTimerTaskCount"), ControlNumber(6)>
|
||||||
Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue
|
Friend ReadOnly Property RequestsWaitTimerTaskCount As PropertyValue
|
||||||
<Provider(NameOf(RequestsWaitTimerTaskCount), FieldsChecker:=True)>
|
<Provider(NameOf(RequestsWaitTimerTaskCount), FieldsChecker:=True)>
|
||||||
Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider
|
Private ReadOnly Property RequestsWaitTimerTaskCountProvider As IFormatProvider
|
||||||
@@ -164,7 +164,7 @@ Namespace API.Instagram
|
|||||||
RequestsWaitTimerProvider = New TimersChecker(100)
|
RequestsWaitTimerProvider = New TimersChecker(100)
|
||||||
RequestsWaitTimerTaskCount = New PropertyValue(1)
|
RequestsWaitTimerTaskCount = New PropertyValue(1)
|
||||||
RequestsWaitTimerTaskCountProvider = New TimersChecker(1)
|
RequestsWaitTimerTaskCountProvider = New TimersChecker(1)
|
||||||
SleepTimerOnPostsLimit = New PropertyValue(6000)
|
SleepTimerOnPostsLimit = New PropertyValue(60000)
|
||||||
SleepTimerOnPostsLimitProvider = New TimersChecker(10000)
|
SleepTimerOnPostsLimitProvider = New TimersChecker(10000)
|
||||||
|
|
||||||
GetStories = New PropertyValue(False)
|
GetStories = New PropertyValue(False)
|
||||||
@@ -261,6 +261,7 @@ 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
|
||||||
|
LastDownloadDate.Value = Now
|
||||||
LastRequestsCount.Value = .RequestsCount
|
LastRequestsCount.Value = .RequestsCount
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ 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)
|
||||||
PostDate = node.Value("taken_at_timestamp")
|
PostDate = node.Value("taken_at_timestamp")
|
||||||
|
If Not CheckDatesLimit(PostDate, DateProvider) Then Throw New ExitException(_DownloadComplete)
|
||||||
ObtainMedia(node, PostID, PostDate, SpecFolder)
|
ObtainMedia(node, PostID, PostDate, SpecFolder)
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -259,7 +260,7 @@ Namespace API.Instagram
|
|||||||
If Not TaggedChecked Then
|
If Not TaggedChecked Then
|
||||||
TaggedCount = j.Value("total_count").FromXML(Of Integer)(0)
|
TaggedCount = j.Value("total_count").FromXML(Of Integer)(0)
|
||||||
TaggedChecked = True
|
TaggedChecked = True
|
||||||
If TaggedChecked > 200 Then
|
If TaggedCount > 200 Then
|
||||||
Dim a% = MsgBoxE({$"The number of tagged posts is {TaggedCount.NumToString(New ANumbers With {
|
Dim a% = MsgBoxE({$"The number of tagged posts is {TaggedCount.NumToString(New ANumbers With {
|
||||||
.FormatOptions = ANumbers.Options.GroupIntegral})}" & vbCr &
|
.FormatOptions = ANumbers.Options.GroupIntegral})}" & vbCr &
|
||||||
"The tagged data download operation can take a long time.", "Too much tagged data"}, vbExclamation,,,
|
"The tagged data download operation can take a long time.", "Too much tagged data"}, vbExclamation,,,
|
||||||
|
|||||||
@@ -23,6 +23,11 @@ Namespace API.Reddit
|
|||||||
Return DirectCast(HOST.Source, SiteSettings)
|
Return DirectCast(HOST.Source, SiteSettings)
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Private Shared ReadOnly Property DateTrueProvider(ByVal IsChannel As Boolean) As IFormatProvider
|
||||||
|
Get
|
||||||
|
Return If(IsChannel, DateProviderChannel, DateProvider)
|
||||||
|
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
|
||||||
@@ -163,6 +168,7 @@ Namespace API.Reddit
|
|||||||
Continue For
|
Continue For
|
||||||
End If
|
End If
|
||||||
If nn.Contains("created") Then PostDate = nn("created").Value Else PostDate = String.Empty
|
If nn.Contains("created") Then PostDate = nn("created").Value Else PostDate = String.Empty
|
||||||
|
If DownloadToDate.HasValue AndAlso Not CheckDatesLimit(PostDate, DateTrueProvider(IsChannel)) Then Exit Sub
|
||||||
|
|
||||||
_ItemsBefore = _TempMediaList.Count
|
_ItemsBefore = _TempMediaList.Count
|
||||||
added = True
|
added = True
|
||||||
@@ -455,7 +461,7 @@ Namespace API.Reddit
|
|||||||
Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}}
|
Dim m As New UserMedia(_URL, t) With {.Post = New UserPost With {.ID = PostID, .UserID = _UserID}}
|
||||||
If t = UTypes.Picture Or t = UTypes.GIF Then m.File = UrlToFile(m.URL) Else m.File = Nothing
|
If t = UTypes.Picture Or t = UTypes.GIF Then m.File = UrlToFile(m.URL) Else m.File = Nothing
|
||||||
If m.URL.Contains("preview") Then m.URL = $"https://i.redd.it/{m.File.File}"
|
If m.URL.Contains("preview") Then m.URL = $"https://i.redd.it/{m.File.File}"
|
||||||
If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, If(IsChannel, DateProviderChannel, DateProvider), Nothing) Else m.Post.Date = Nothing
|
If Not PostDate.IsEmptyString Then m.Post.Date = AConvert(Of Date)(PostDate, DateTrueProvider(IsChannel), Nothing) Else m.Post.Date = Nothing
|
||||||
Return m
|
Return m
|
||||||
End Function
|
End Function
|
||||||
Private Function TryFile(ByVal URL As String) As Boolean
|
Private Function TryFile(ByVal URL As String) As Boolean
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ Namespace API.RedGifs
|
|||||||
pTotal = j.Value("pages").FromXML(Of Integer)(0)
|
pTotal = j.Value("pages").FromXML(Of Integer)(0)
|
||||||
For Each g As EContainer In j("gifs")
|
For Each g As EContainer In j("gifs")
|
||||||
postDate = g.Value("createDate")
|
postDate = g.Value("createDate")
|
||||||
|
If Not CheckDatesLimit(postDate, DateProvider) Then Exit Sub
|
||||||
postID = g.Value("id")
|
postID = g.Value("id")
|
||||||
If Not _TempPostsList.Contains(postID) Then _TempPostsList.Add(postID) Else Exit For
|
If Not _TempPostsList.Contains(postID) Then _TempPostsList.Add(postID) Else Exit For
|
||||||
With g("urls")
|
With g("urls")
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ Namespace API.Twitter
|
|||||||
'Date Pattern:
|
'Date Pattern:
|
||||||
'Sat Jan 01 01:10:15 +0000 2000
|
'Sat Jan 01 01:10:15 +0000 2000
|
||||||
If nn.Contains("created_at") Then PostDate = nn("created_at").Value Else PostDate = String.Empty
|
If nn.Contains("created_at") Then PostDate = nn("created_at").Value Else PostDate = String.Empty
|
||||||
|
If Not CheckDatesLimit(PostDate, Declarations.DateProvider) Then Exit Sub
|
||||||
|
|
||||||
If Not _TempPostsList.Contains(PostID) Then
|
If Not _TempPostsList.Contains(PostID) Then
|
||||||
NewPostDetected = True
|
NewPostDetected = True
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ Namespace DownloadObjects
|
|||||||
Private MyView As FormsView
|
Private MyView As FormsView
|
||||||
Friend Property Opened As Boolean = False
|
Friend Property Opened As Boolean = False
|
||||||
Private ReadOnly JobsList As List(Of DownloadProgress)
|
Private ReadOnly JobsList As List(Of DownloadProgress)
|
||||||
|
Friend Property DisableProgressChange As Boolean = False
|
||||||
Friend Sub New()
|
Friend Sub New()
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
JobsList = New List(Of DownloadProgress)
|
JobsList = New List(Of DownloadProgress)
|
||||||
@@ -66,7 +67,11 @@ Namespace DownloadObjects
|
|||||||
TP_MAIN.Refresh()
|
TP_MAIN.Refresh()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub Jobs_OnTotalCountChange()
|
Private Sub Jobs_OnTotalCountChange()
|
||||||
If JobsList.Count > 0 Then MainProgress.TotalCount = JobsList.Sum(Function(j) CLng(j.Job.Progress.TotalCount))
|
If JobsList.Count > 0 And Not DisableProgressChange Then
|
||||||
|
MainProgress.TotalCount = JobsList.Sum(Function(j) CLng(j.Job.Progress.TotalCount))
|
||||||
|
MainProgress.CurrentCounter = Math.Max(JobsList.Sum(Function(j) CLng(j.Job.Progress.CurrentCounter)) - 1, 0)
|
||||||
|
If MainProgress.CurrentCounter > 0 Then MainProgress.Perform()
|
||||||
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -217,7 +217,9 @@ Namespace DownloadObjects
|
|||||||
Private Sub JobsChecker()
|
Private Sub JobsChecker()
|
||||||
Try
|
Try
|
||||||
MainProgress.TotalCount = 0
|
MainProgress.TotalCount = 0
|
||||||
Do While Pool.Exists(Function(p) p.Count > 0)
|
MainProgress.CurrentCounter = 0
|
||||||
|
MyProgressForm.DisableProgressChange = False
|
||||||
|
Do While Pool.Exists(Function(p) p.Count > 0 Or p.Working)
|
||||||
For Each j As Job In Pool
|
For Each j As Job In Pool
|
||||||
If j.Count > 0 And Not j.Working Then j.Start(New ThreadStart(Sub() StartDownloading(j)))
|
If j.Count > 0 And Not j.Working Then j.Start(New ThreadStart(Sub() StartDownloading(j)))
|
||||||
Next
|
Next
|
||||||
@@ -231,6 +233,7 @@ Namespace DownloadObjects
|
|||||||
.InformationTemporary = "All data downloaded"
|
.InformationTemporary = "All data downloaded"
|
||||||
.Enabled(EOptions.ProgressBar) = False
|
.Enabled(EOptions.ProgressBar) = False
|
||||||
End With
|
End With
|
||||||
|
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)
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
40
SCrawler/Editors/GlobalSettingsForm.Designer.vb
generated
40
SCrawler/Editors/GlobalSettingsForm.Designer.vb
generated
@@ -55,6 +55,7 @@
|
|||||||
Me.CH_SHOW_NOTIFY = New System.Windows.Forms.CheckBox()
|
Me.CH_SHOW_NOTIFY = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_FAST_LOAD = New System.Windows.Forms.CheckBox()
|
Me.CH_FAST_LOAD = New System.Windows.Forms.CheckBox()
|
||||||
Me.TXT_FOLDER_CMD = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_FOLDER_CMD = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.CH_RECYCLE_DEL = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_COPY_CHANNEL_USER_IMAGE = New System.Windows.Forms.CheckBox()
|
Me.CH_COPY_CHANNEL_USER_IMAGE = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_DEF_TEMP = New System.Windows.Forms.CheckBox()
|
Me.CH_DEF_TEMP = New System.Windows.Forms.CheckBox()
|
||||||
Me.CH_DOWN_IMAGES = New System.Windows.Forms.CheckBox()
|
Me.CH_DOWN_IMAGES = New System.Windows.Forms.CheckBox()
|
||||||
@@ -68,7 +69,6 @@
|
|||||||
Me.TXT_CHANNEL_USER_POST_LIMIT = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
Me.TXT_CHANNEL_USER_POST_LIMIT = 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_RECYCLE_DEL = 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()
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_BASIS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.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, 422)
|
TP_BASIS.Size = New System.Drawing.Size(570, 447)
|
||||||
TP_BASIS.TabIndex = 0
|
TP_BASIS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TXT_GLOBAL_PATH
|
'TXT_GLOBAL_PATH
|
||||||
@@ -499,6 +499,17 @@
|
|||||||
Me.TXT_FOLDER_CMD.Size = New System.Drawing.Size(562, 22)
|
Me.TXT_FOLDER_CMD.Size = New System.Drawing.Size(562, 22)
|
||||||
Me.TXT_FOLDER_CMD.TabIndex = 13
|
Me.TXT_FOLDER_CMD.TabIndex = 13
|
||||||
'
|
'
|
||||||
|
'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, 399)
|
||||||
|
Me.CH_RECYCLE_DEL.Name = "CH_RECYCLE_DEL"
|
||||||
|
Me.CH_RECYCLE_DEL.Size = New System.Drawing.Size(562, 19)
|
||||||
|
Me.CH_RECYCLE_DEL.TabIndex = 14
|
||||||
|
Me.CH_RECYCLE_DEL.Text = "Delete data to recycle bin"
|
||||||
|
Me.CH_RECYCLE_DEL.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
'CH_COPY_CHANNEL_USER_IMAGE
|
'CH_COPY_CHANNEL_USER_IMAGE
|
||||||
'
|
'
|
||||||
Me.CH_COPY_CHANNEL_USER_IMAGE.AutoSize = True
|
Me.CH_COPY_CHANNEL_USER_IMAGE.AutoSize = True
|
||||||
@@ -648,7 +659,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, 428)
|
TAB_BASIS.Size = New System.Drawing.Size(576, 453)
|
||||||
TAB_BASIS.TabIndex = 0
|
TAB_BASIS.TabIndex = 0
|
||||||
TAB_BASIS.Text = "Basis"
|
TAB_BASIS.Text = "Basis"
|
||||||
'
|
'
|
||||||
@@ -658,7 +669,7 @@
|
|||||||
TAB_DEFAULTS.Location = New System.Drawing.Point(4, 22)
|
TAB_DEFAULTS.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_DEFAULTS.Name = "TAB_DEFAULTS"
|
TAB_DEFAULTS.Name = "TAB_DEFAULTS"
|
||||||
TAB_DEFAULTS.Padding = New System.Windows.Forms.Padding(3)
|
TAB_DEFAULTS.Padding = New System.Windows.Forms.Padding(3)
|
||||||
TAB_DEFAULTS.Size = New System.Drawing.Size(576, 426)
|
TAB_DEFAULTS.Size = New System.Drawing.Size(576, 453)
|
||||||
TAB_DEFAULTS.TabIndex = 1
|
TAB_DEFAULTS.TabIndex = 1
|
||||||
TAB_DEFAULTS.Text = "Defaults"
|
TAB_DEFAULTS.Text = "Defaults"
|
||||||
'
|
'
|
||||||
@@ -682,7 +693,7 @@
|
|||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_DEFS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_DEFS.Size = New System.Drawing.Size(570, 420)
|
TP_DEFS.Size = New System.Drawing.Size(570, 447)
|
||||||
TP_DEFS.TabIndex = 0
|
TP_DEFS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TAB_DEFS_CHANNELS
|
'TAB_DEFS_CHANNELS
|
||||||
@@ -691,7 +702,7 @@
|
|||||||
TAB_DEFS_CHANNELS.Location = New System.Drawing.Point(4, 22)
|
TAB_DEFS_CHANNELS.Location = New System.Drawing.Point(4, 22)
|
||||||
TAB_DEFS_CHANNELS.Name = "TAB_DEFS_CHANNELS"
|
TAB_DEFS_CHANNELS.Name = "TAB_DEFS_CHANNELS"
|
||||||
TAB_DEFS_CHANNELS.Padding = New System.Windows.Forms.Padding(3)
|
TAB_DEFS_CHANNELS.Padding = New System.Windows.Forms.Padding(3)
|
||||||
TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(576, 426)
|
TAB_DEFS_CHANNELS.Size = New System.Drawing.Size(576, 453)
|
||||||
TAB_DEFS_CHANNELS.TabIndex = 4
|
TAB_DEFS_CHANNELS.TabIndex = 4
|
||||||
TAB_DEFS_CHANNELS.Text = "Channels"
|
TAB_DEFS_CHANNELS.Text = "Channels"
|
||||||
'
|
'
|
||||||
@@ -715,7 +726,7 @@
|
|||||||
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
TP_CHANNELS.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
TP_CHANNELS.Size = New System.Drawing.Size(570, 420)
|
TP_CHANNELS.Size = New System.Drawing.Size(570, 447)
|
||||||
TP_CHANNELS.TabIndex = 0
|
TP_CHANNELS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'TXT_CHANNEL_USER_POST_LIMIT
|
'TXT_CHANNEL_USER_POST_LIMIT
|
||||||
@@ -747,7 +758,7 @@
|
|||||||
Me.TAB_MAIN.Location = New System.Drawing.Point(0, 0)
|
Me.TAB_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.TAB_MAIN.Name = "TAB_MAIN"
|
Me.TAB_MAIN.Name = "TAB_MAIN"
|
||||||
Me.TAB_MAIN.SelectedIndex = 0
|
Me.TAB_MAIN.SelectedIndex = 0
|
||||||
Me.TAB_MAIN.Size = New System.Drawing.Size(584, 454)
|
Me.TAB_MAIN.Size = New System.Drawing.Size(584, 479)
|
||||||
Me.TAB_MAIN.TabIndex = 1
|
Me.TAB_MAIN.TabIndex = 1
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN
|
'CONTAINER_MAIN
|
||||||
@@ -756,7 +767,7 @@
|
|||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TAB_MAIN)
|
Me.CONTAINER_MAIN.ContentPanel.Controls.Add(Me.TAB_MAIN)
|
||||||
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 454)
|
Me.CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(584, 479)
|
||||||
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
Me.CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
Me.CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
@@ -766,17 +777,6 @@
|
|||||||
Me.CONTAINER_MAIN.TabIndex = 0
|
Me.CONTAINER_MAIN.TabIndex = 0
|
||||||
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
Me.CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
'
|
'
|
||||||
'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, 399)
|
|
||||||
Me.CH_RECYCLE_DEL.Name = "CH_RECYCLE_DEL"
|
|
||||||
Me.CH_RECYCLE_DEL.Size = New System.Drawing.Size(562, 19)
|
|
||||||
Me.CH_RECYCLE_DEL.TabIndex = 14
|
|
||||||
Me.CH_RECYCLE_DEL.Text = "Delete data to recycle bin"
|
|
||||||
Me.CH_RECYCLE_DEL.UseVisualStyleBackColor = True
|
|
||||||
'
|
|
||||||
'GlobalSettingsForm
|
'GlobalSettingsForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
|||||||
60
SCrawler/Editors/SiteEditorForm.Designer.vb
generated
60
SCrawler/Editors/SiteEditorForm.Designer.vb
generated
@@ -14,13 +14,13 @@
|
|||||||
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 ActionButton7 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 ActionButton2 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 ActionButton3 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 ActionButton4 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 ActionButton5 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 ActionButton6 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()
|
||||||
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()
|
||||||
@@ -59,14 +59,14 @@
|
|||||||
'
|
'
|
||||||
'TXT_PATH
|
'TXT_PATH
|
||||||
'
|
'
|
||||||
ActionButton1.BackgroundImage = CType(resources.GetObject("ActionButton1.BackgroundImage"), System.Drawing.Image)
|
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton1.Index = 0
|
ActionButton7.Index = 0
|
||||||
ActionButton1.Name = "BTT_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.Index = 1
|
ActionButton8.Index = 1
|
||||||
ActionButton2.Name = "BTT_CLEAR"
|
ActionButton8.Name = "BTT_CLEAR"
|
||||||
Me.TXT_PATH.Buttons.Add(ActionButton1)
|
Me.TXT_PATH.Buttons.Add(ActionButton7)
|
||||||
Me.TXT_PATH.Buttons.Add(ActionButton2)
|
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 +78,14 @@
|
|||||||
'
|
'
|
||||||
'TXT_COOKIES
|
'TXT_COOKIES
|
||||||
'
|
'
|
||||||
ActionButton3.BackgroundImage = CType(resources.GetObject("ActionButton3.BackgroundImage"), System.Drawing.Image)
|
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton3.Index = 0
|
ActionButton9.Index = 0
|
||||||
ActionButton3.Name = "BTT_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.Index = 1
|
ActionButton10.Index = 1
|
||||||
ActionButton4.Name = "BTT_CLEAR"
|
ActionButton10.Name = "BTT_CLEAR"
|
||||||
Me.TXT_COOKIES.Buttons.Add(ActionButton3)
|
Me.TXT_COOKIES.Buttons.Add(ActionButton9)
|
||||||
Me.TXT_COOKIES.Buttons.Add(ActionButton4)
|
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 +114,14 @@
|
|||||||
'
|
'
|
||||||
'TXT_PATH_SAVED_POSTS
|
'TXT_PATH_SAVED_POSTS
|
||||||
'
|
'
|
||||||
ActionButton5.BackgroundImage = CType(resources.GetObject("ActionButton5.BackgroundImage"), System.Drawing.Image)
|
ActionButton11.BackgroundImage = CType(resources.GetObject("ActionButton11.BackgroundImage"), System.Drawing.Image)
|
||||||
ActionButton5.Index = 0
|
ActionButton11.Index = 0
|
||||||
ActionButton5.Name = "BTT_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.Index = 1
|
ActionButton12.Index = 1
|
||||||
ActionButton6.Name = "BTT_CLEAR"
|
ActionButton12.Name = "BTT_CLEAR"
|
||||||
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton5)
|
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton11)
|
||||||
Me.TXT_PATH_SAVED_POSTS.Buttons.Add(ActionButton6)
|
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)
|
||||||
|
|||||||
@@ -118,7 +118,7 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="ActionButton1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton7.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="ActionButton2.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton8.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="ActionButton3.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/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
||||||
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
|
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
AAAASUVORK5CYII=
|
AAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton4.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
|
||||||
@@ -203,7 +203,7 @@
|
|||||||
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton5.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton11.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
wwAADsMBx2+oZAAAAR5JREFUOE+VkjFqwzAUhn2D9iShRyi+QhYbGujg3ZATZPKYdC6FQhPwlAMkg3dP
|
||||||
@@ -214,7 +214,7 @@
|
|||||||
cMaRN0UdBBkAAAAASUVORK5CYII=
|
cMaRN0UdBBkAAAAASUVORK5CYII=
|
||||||
</value>
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ActionButton6.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ActionButton12.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Imports PersonalUtilities.Forms.Controls
|
|||||||
Imports PersonalUtilities.Forms.Controls.Base
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Tools.WEB
|
Imports PersonalUtilities.Tools.WEB
|
||||||
|
Imports CookieControl = PersonalUtilities.Tools.WEB.CookieListForm.CookieControl
|
||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Imports SCrawler.Plugin.Hosts
|
Imports SCrawler.Plugin.Hosts
|
||||||
Namespace Editors
|
Namespace Editors
|
||||||
@@ -18,7 +19,7 @@ Namespace Editors
|
|||||||
Private ReadOnly LBL_AUTH As Label
|
Private ReadOnly LBL_AUTH As Label
|
||||||
Private ReadOnly LBL_OTHER As Label
|
Private ReadOnly LBL_OTHER As Label
|
||||||
Private ReadOnly MyDefs As DefaultFormProps(Of FieldsChecker)
|
Private ReadOnly MyDefs As DefaultFormProps(Of FieldsChecker)
|
||||||
Private SpecialButton As Button
|
Private WithEvents SpecialButton As Button
|
||||||
#Region "Providers"
|
#Region "Providers"
|
||||||
Private Class SavedPostsChecker : Implements ICustomProvider
|
Private Class SavedPostsChecker : Implements ICustomProvider
|
||||||
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,
|
||||||
@@ -43,8 +44,6 @@ Namespace Editors
|
|||||||
LBL_OTHER = New Label With {.Text = "Other Parameters", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill}
|
LBL_OTHER = New Label With {.Text = "Other Parameters", .TextAlign = ContentAlignment.MiddleCenter, .Dock = DockStyle.Fill}
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SiteEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub SiteEditorForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Const LBorder% = 3
|
|
||||||
Const DOffset% = 100
|
|
||||||
Try
|
Try
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(Me, Settings.Design, True)
|
||||||
@@ -71,24 +70,27 @@ Namespace Editors
|
|||||||
.AddControl(Of String)(TXT_PATH_SAVED_POSTS, TXT_PATH_SAVED_POSTS.CaptionText, True, New SavedPostsChecker)
|
.AddControl(Of String)(TXT_PATH_SAVED_POSTS, TXT_PATH_SAVED_POSTS.CaptionText, True, New SavedPostsChecker)
|
||||||
End With
|
End With
|
||||||
|
|
||||||
|
Dim offset% = PropertyValueHost.LeftOffsetDefault
|
||||||
|
Dim h% = 0, c% = 0
|
||||||
|
Dim AddTpControl As Action(Of Control, Integer) = Sub(ByVal cnt As Control, ByVal _height As Integer)
|
||||||
|
TP_SITE_PROPS.RowStyles.Add(New RowStyle(SizeType.Absolute, _height))
|
||||||
|
TP_SITE_PROPS.RowCount += 1
|
||||||
|
TP_SITE_PROPS.Controls.Add(cnt, 0, TP_SITE_PROPS.RowStyles.Count - 1)
|
||||||
|
h += _height
|
||||||
|
c += 1
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
If Host.Responser Is Nothing Then
|
||||||
|
h -= 28
|
||||||
|
TXT_COOKIES.Enabled = False
|
||||||
|
TXT_COOKIES.Visible = False
|
||||||
|
TP_MAIN.RowStyles(2).Height = 0
|
||||||
|
End If
|
||||||
|
|
||||||
|
|
||||||
If .PropList.Count > 0 Then
|
If .PropList.Count > 0 Then
|
||||||
Dim offset% = DOffset
|
|
||||||
Dim h% = 0, c% = 0
|
|
||||||
Dim laAdded As Boolean = False
|
Dim laAdded As Boolean = False
|
||||||
Dim loAdded As Boolean = False
|
Dim loAdded As Boolean = False
|
||||||
If Not Host.IsMyClass Then
|
|
||||||
h -= 28
|
|
||||||
TXT_COOKIES.Enabled = False
|
|
||||||
TXT_COOKIES.Visible = False
|
|
||||||
TP_MAIN.RowStyles(2).Height = 0
|
|
||||||
End If
|
|
||||||
Dim AddTpControl As Action(Of Control, Integer) = Sub(ByVal cnt As Control, ByVal _height As Integer)
|
|
||||||
TP_SITE_PROPS.RowStyles.Add(New RowStyle(SizeType.Absolute, _height))
|
|
||||||
TP_SITE_PROPS.RowCount += 1
|
|
||||||
TP_SITE_PROPS.Controls.Add(cnt, 0, TP_SITE_PROPS.RowStyles.Count - 1)
|
|
||||||
h += _height
|
|
||||||
c += 1
|
|
||||||
End Sub
|
|
||||||
Dim pArr() As Boolean
|
Dim pArr() As Boolean
|
||||||
If .PropList.Exists(Function(p) If(p.Options?.IsAuth, False)) Then pArr = {True, False} Else pArr = {False}
|
If .PropList.Exists(Function(p) If(p.Options?.IsAuth, False)) Then pArr = {True, False} Else pArr = {False}
|
||||||
.PropList.Sort()
|
.PropList.Sort()
|
||||||
@@ -109,7 +111,7 @@ Namespace Editors
|
|||||||
|
|
||||||
.CreateControl()
|
.CreateControl()
|
||||||
AddTpControl(.Control, .ControlHeight)
|
AddTpControl(.Control, .ControlHeight)
|
||||||
If .Options.LeftOffset > offset Then offset = .Options.LeftOffset
|
If .LeftOffset > offset Then offset = .LeftOffset
|
||||||
If Not .Options.AllowNull Or Not .ProviderFieldsChecker Is Nothing Then
|
If Not .Options.AllowNull Or Not .ProviderFieldsChecker Is Nothing Then
|
||||||
MyDefs.MyFieldsChecker.AddControl(.Control, .Options.ControlText, .Type, .Options.AllowNull, .ProviderFieldsChecker)
|
MyDefs.MyFieldsChecker.AddControl(.Control, .Options.ControlText, .Type, .Options.AllowNull, .ProviderFieldsChecker)
|
||||||
End If
|
End If
|
||||||
@@ -118,21 +120,21 @@ Namespace Editors
|
|||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
Next
|
Next
|
||||||
SpecialButton = .GetSettingsButtonInternal
|
End If
|
||||||
If Not SpecialButton Is Nothing Then AddTpControl(SpecialButton, 28)
|
|
||||||
offset -= LBorder
|
SpecialButton = .GetSettingsButtonInternal
|
||||||
TP_SITE_PROPS.BaseControlsPadding = New Padding(offset, 0, 0, 0)
|
If Not SpecialButton Is Nothing Then AddTpControl(SpecialButton, 28)
|
||||||
If offset > DOffset - LBorder Then
|
TP_SITE_PROPS.BaseControlsPadding = New Padding(offset, 0, 0, 0)
|
||||||
TXT_PATH.CaptionWidth = offset
|
offset += PaddingE.GetOf({TP_SITE_PROPS}).Left
|
||||||
TXT_PATH_SAVED_POSTS.CaptionWidth = offset
|
TXT_PATH.CaptionWidth = offset
|
||||||
TXT_COOKIES.CaptionWidth = offset
|
TXT_PATH_SAVED_POSTS.CaptionWidth = offset
|
||||||
End If
|
TXT_COOKIES.CaptionWidth = offset
|
||||||
If c > 0 Or Not Host.IsMyClass Then
|
CH_GET_USER_MEDIA_ONLY.Padding = New PaddingE(CH_GET_USER_MEDIA_ONLY.Padding) With {.Left = offset}
|
||||||
Dim ss As New Size(Size.Width, Size.Height + h + c)
|
If c > 0 Or Not Host.IsMyClass Then
|
||||||
MinimumSize = ss
|
Dim ss As New Size(Size.Width, Size.Height + h + c)
|
||||||
Size = ss
|
MinimumSize = ss
|
||||||
MaximumSize = ss
|
Size = ss
|
||||||
End If
|
MaximumSize = ss
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
|
|
||||||
@@ -183,6 +185,8 @@ Namespace Editors
|
|||||||
.GetUserMediaOnly.Value = CH_GET_USER_MEDIA_ONLY.Checked
|
.GetUserMediaOnly.Value = CH_GET_USER_MEDIA_ONLY.Checked
|
||||||
|
|
||||||
If .PropList.Count > 0 Then .PropList.ForEach(Sub(p) If Not p.Options Is Nothing Then p.UpdateValueByControl())
|
If .PropList.Count > 0 Then .PropList.ForEach(Sub(p) If Not p.Options Is Nothing Then p.UpdateValueByControl())
|
||||||
|
|
||||||
|
.Source.Update()
|
||||||
End With
|
End With
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -208,15 +212,20 @@ Namespace Editors
|
|||||||
End Sub
|
End Sub
|
||||||
Private Sub TXT_COOKIES_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_COOKIES.ActionOnButtonClick
|
Private Sub TXT_COOKIES_ActionOnButtonClick(ByVal Sender As ActionButton) Handles TXT_COOKIES.ActionOnButtonClick
|
||||||
If Sender.DefaultButton = ActionButton.DefaultButtons.Edit Then
|
If Sender.DefaultButton = ActionButton.DefaultButtons.Edit Then
|
||||||
If TypeOf Host.Source Is IResponserContainer Then
|
If Not Host.Responser Is Nothing Then
|
||||||
Using f As New CookieListForm(DirectCast(Host.Source, IResponserContainer).Responser.Cookies) With {.MyDesignXML = Settings.Design} : f.ShowDialog() : End Using
|
Using f As New CookieListForm(Host.Responser) With {
|
||||||
|
.MyDesignXML = Settings.Design,
|
||||||
|
.DisableControls = CookieControl.AddFromInternal + CookieControl.AuthorizeProgram + CookieControl.OpenBrowser
|
||||||
|
}
|
||||||
|
f.ShowDialog()
|
||||||
|
End Using
|
||||||
SetCookieText()
|
SetCookieText()
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub TXT_COOKIES_ActionOnButtonClearClick() Handles TXT_COOKIES.ActionOnButtonClearClick
|
Private Sub TXT_COOKIES_ActionOnButtonClearClick() Handles TXT_COOKIES.ActionOnButtonClearClick
|
||||||
If TypeOf Host.Source Is IResponserContainer Then
|
If Not Host.Responser Is Nothing Then
|
||||||
With DirectCast(Host.Source, IResponserContainer).Responser
|
With Host.Responser
|
||||||
If Not .Cookies Is Nothing Then .Cookies.Dispose()
|
If Not .Cookies Is Nothing Then .Cookies.Dispose()
|
||||||
.Cookies = New CookieKeeper(.CookiesDomain)
|
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||||
End With
|
End With
|
||||||
@@ -224,8 +233,10 @@ Namespace Editors
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SetCookieText()
|
Private Sub SetCookieText()
|
||||||
If TypeOf Host.Source Is IResponserContainer Then _
|
If Not Host.Responser Is Nothing Then TXT_COOKIES.Text = $"{If(Host.Responser.Cookies?.Count, 0)} cookies"
|
||||||
TXT_COOKIES.Text = $"{If(DirectCast(Host.Source, IResponserContainer).Responser.Cookies?.Count, 0)} cookies"
|
End Sub
|
||||||
|
Private Sub SpecialButton_Click(sender As Object, e As EventArgs) Handles SpecialButton.Click
|
||||||
|
MyDefs.Detector()
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -15,8 +15,10 @@ Friend Class FDatePickerForm : Implements IOkCancelDeleteToolbar
|
|||||||
If DT.Checked Then Return DT.Value.Date Else Return Nothing
|
If DT.Checked Then Return DT.Value.Date Else Return Nothing
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend Sub New()
|
Private ReadOnly _InitialValue As Date?
|
||||||
|
Friend Sub New(ByVal d As Date?)
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
|
_InitialValue = d
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub FDatePickerForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub FDatePickerForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
Try
|
||||||
@@ -25,9 +27,9 @@ Friend Class FDatePickerForm : Implements IOkCancelDeleteToolbar
|
|||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(Me, Settings.Design, True)
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
.DelegateClosingChecker()
|
||||||
If Settings.LastUpdatedDate.HasValue Then
|
If _InitialValue.HasValue Then
|
||||||
DT.Checked = True
|
DT.Checked = True
|
||||||
DT.Value = Settings.LastUpdatedDate.Value.Date
|
DT.Value = _InitialValue.Value.Date
|
||||||
Else
|
Else
|
||||||
DT.Checked = False
|
DT.Checked = False
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -94,10 +94,12 @@ Friend Class ListImagesLoader
|
|||||||
Else
|
Else
|
||||||
Dim t As New List(Of Task)
|
Dim t As New List(Of Task)
|
||||||
For Each User As IUserData In Settings.Users
|
For Each User As IUserData In Settings.Users
|
||||||
If Settings.ViewModeIsPicture Then
|
If User.FitToAddParams Then
|
||||||
t.Add(Task.Run(Sub() UpdateUser(User, True)))
|
If Settings.ViewModeIsPicture Then
|
||||||
Else
|
t.Add(Task.Run(Sub() UpdateUser(User, True)))
|
||||||
UpdateUser(User, True)
|
Else
|
||||||
|
UpdateUser(User, True)
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
If t.Count > 0 Then Task.WhenAll(t.ToArray) : t.Clear()
|
If t.Count > 0 Then Task.WhenAll(t.ToArray) : t.Clear()
|
||||||
@@ -171,17 +173,24 @@ Friend Class ListImagesLoader
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
Private Function GetUsersWithImages() As List(Of UserOption)
|
Private Function GetUsersWithImages() As List(Of UserOption)
|
||||||
Dim t As New List(Of Task)
|
Try
|
||||||
Dim l As New List(Of UserOption)
|
Dim t As New List(Of Task)
|
||||||
For Each u As IUserData In Settings.Users
|
Dim l As New List(Of UserOption)
|
||||||
If u.FitToAddParams Then t.Add(Task.Run(Sub() l.Add(New UserOption(u, MyList, True))))
|
For Each u As IUserData In Settings.Users
|
||||||
Next
|
If u.FitToAddParams Then t.Add(Task.Run(Sub() l.Add(New UserOption(u, MyList, True))))
|
||||||
If t.Count > 0 Then Task.WaitAll(t.ToArray) : t.Clear()
|
|
||||||
If l.Count > 0 Then
|
|
||||||
For i% = 0 To l.Count - 1
|
|
||||||
If l(i).Image Is Nothing Then l(i).UpdateImage()
|
|
||||||
Next
|
Next
|
||||||
End If
|
If t.Count > 0 Then Task.WaitAll(t.ToArray) : t.Clear()
|
||||||
Return l
|
If l.Count > 0 Then
|
||||||
|
For i% = 0 To l.Count - 1
|
||||||
|
If l(i).Image Is Nothing Then l(i).UpdateImage()
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
Return l
|
||||||
|
Catch ex As Exception
|
||||||
|
Return ErrorsDescriber.Execute(EDP.LogMessageValue, ex,
|
||||||
|
"Image fast loading error." & vbCr &
|
||||||
|
"Click the ""Refresh"" button to manually refresh the user list." & vbCr &
|
||||||
|
"[ListImagesLoader.GetUsersWithImages]")
|
||||||
|
End Try
|
||||||
End Function
|
End Function
|
||||||
End Class
|
End Class
|
||||||
97
SCrawler/MainFrame.Designer.vb
generated
97
SCrawler/MainFrame.Designer.vb
generated
@@ -29,6 +29,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Dim MENU_VIEW_SEP_2 As System.Windows.Forms.ToolStripSeparator
|
Dim MENU_VIEW_SEP_2 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim TRAY_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
Dim TRAY_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim MENU_VIEW_SEP_4 As System.Windows.Forms.ToolStripSeparator
|
Dim MENU_VIEW_SEP_4 As System.Windows.Forms.ToolStripSeparator
|
||||||
|
Dim MENU_DOWN_ALL_SEP_1 As System.Windows.Forms.ToolStripSeparator
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainFrame))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainFrame))
|
||||||
Me.MENU_SETTINGS = New System.Windows.Forms.ToolStripDropDownButton()
|
Me.MENU_SETTINGS = New System.Windows.Forms.ToolStripDropDownButton()
|
||||||
Me.BTT_SETTINGS = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_SETTINGS = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
@@ -41,7 +42,11 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_CHANNELS = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_CHANNELS = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DOWN_SAVED = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DOWN_SAVED = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DOWN_SELECTED = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DOWN_SELECTED = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DOWN_ALL = New System.Windows.Forms.ToolStripButton()
|
Me.MENU_DOWN_ALL = New System.Windows.Forms.ToolStripDropDownButton()
|
||||||
|
Me.BTT_DOWN_ALL = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_DOWN_SITE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_DOWN_ALL_FULL = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_DOWN_SITE_FULL = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_DOWN_VIDEO = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DOWN_VIDEO = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DOWN_STOP = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DOWN_STOP = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.MENU_VIEW = New System.Windows.Forms.ToolStripDropDownButton()
|
Me.MENU_VIEW = New System.Windows.Forms.ToolStripDropDownButton()
|
||||||
@@ -65,6 +70,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_VERSION_INFO = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_VERSION_INFO = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.BTT_DONATE = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_DONATE = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.Toolbar_BOTTOM = New System.Windows.Forms.StatusStrip()
|
Me.Toolbar_BOTTOM = New System.Windows.Forms.StatusStrip()
|
||||||
|
Me.BTT_PR_INFO = New System.Windows.Forms.ToolStripStatusLabel()
|
||||||
Me.PR_MAIN = New System.Windows.Forms.ToolStripProgressBar()
|
Me.PR_MAIN = New System.Windows.Forms.ToolStripProgressBar()
|
||||||
Me.LBL_JOBS_COUNT = New System.Windows.Forms.ToolStripStatusLabel()
|
Me.LBL_JOBS_COUNT = New System.Windows.Forms.ToolStripStatusLabel()
|
||||||
Me.LBL_STATUS = New System.Windows.Forms.ToolStripStatusLabel()
|
Me.LBL_STATUS = New System.Windows.Forms.ToolStripStatusLabel()
|
||||||
@@ -73,6 +79,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.USER_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
Me.USER_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||||
Me.BTT_CONTEXT_DOWN = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CONTEXT_DOWN = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CONTEXT_DOWN_LIMITED = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CONTEXT_DOWN_LIMITED = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_CONTEXT_DOWN_DATE_LIMIT = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CONTEXT_EDIT = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CONTEXT_EDIT = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CONTEXT_DELETE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CONTEXT_DELETE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CONTEXT_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CONTEXT_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
@@ -90,7 +97,6 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.TRAY_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
Me.TRAY_CONTEXT = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||||
Me.BTT_TRAY_SHOW_HIDE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_SHOW_HIDE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_TRAY_CLOSE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_TRAY_CLOSE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_PR_INFO = New System.Windows.Forms.ToolStripStatusLabel()
|
|
||||||
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
CONTEXT_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
@@ -106,6 +112,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
MENU_VIEW_SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
MENU_VIEW_SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
TRAY_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
TRAY_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
MENU_VIEW_SEP_4 = New System.Windows.Forms.ToolStripSeparator()
|
MENU_VIEW_SEP_4 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
|
MENU_DOWN_ALL_SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
Me.Toolbar_TOP.SuspendLayout()
|
Me.Toolbar_TOP.SuspendLayout()
|
||||||
Me.Toolbar_BOTTOM.SuspendLayout()
|
Me.Toolbar_BOTTOM.SuspendLayout()
|
||||||
Me.USER_CONTEXT.SuspendLayout()
|
Me.USER_CONTEXT.SuspendLayout()
|
||||||
@@ -187,6 +194,11 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
MENU_VIEW_SEP_4.Name = "MENU_VIEW_SEP_4"
|
MENU_VIEW_SEP_4.Name = "MENU_VIEW_SEP_4"
|
||||||
MENU_VIEW_SEP_4.Size = New System.Drawing.Size(141, 6)
|
MENU_VIEW_SEP_4.Size = New System.Drawing.Size(141, 6)
|
||||||
'
|
'
|
||||||
|
'MENU_DOWN_ALL_SEP_1
|
||||||
|
'
|
||||||
|
MENU_DOWN_ALL_SEP_1.Name = "MENU_DOWN_ALL_SEP_1"
|
||||||
|
MENU_DOWN_ALL_SEP_1.Size = New System.Drawing.Size(228, 6)
|
||||||
|
'
|
||||||
'MENU_SETTINGS
|
'MENU_SETTINGS
|
||||||
'
|
'
|
||||||
Me.MENU_SETTINGS.AutoToolTip = False
|
Me.MENU_SETTINGS.AutoToolTip = False
|
||||||
@@ -206,7 +218,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
'Toolbar_TOP
|
'Toolbar_TOP
|
||||||
'
|
'
|
||||||
Me.Toolbar_TOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
Me.Toolbar_TOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
||||||
Me.Toolbar_TOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MENU_SETTINGS, SEP_1, Me.BTT_ADD_USER, Me.BTT_EDIT_USER, Me.BTT_DELETE_USER, Me.BTT_REFRESH, Me.BTT_SHOW_INFO, Me.BTT_CHANNELS, Me.BTT_DOWN_SAVED, SEP_2, Me.BTT_DOWN_SELECTED, Me.BTT_DOWN_ALL, Me.BTT_DOWN_VIDEO, Me.BTT_DOWN_STOP, SEP_3, Me.MENU_VIEW, SEP_4, Me.BTT_LOG, Me.BTT_VERSION_INFO, Me.BTT_DONATE})
|
Me.Toolbar_TOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MENU_SETTINGS, SEP_1, Me.BTT_ADD_USER, Me.BTT_EDIT_USER, Me.BTT_DELETE_USER, Me.BTT_REFRESH, Me.BTT_SHOW_INFO, Me.BTT_CHANNELS, Me.BTT_DOWN_SAVED, SEP_2, Me.BTT_DOWN_SELECTED, Me.MENU_DOWN_ALL, Me.BTT_DOWN_VIDEO, Me.BTT_DOWN_STOP, SEP_3, Me.MENU_VIEW, SEP_4, Me.BTT_LOG, Me.BTT_VERSION_INFO, Me.BTT_DONATE})
|
||||||
Me.Toolbar_TOP.Location = New System.Drawing.Point(0, 0)
|
Me.Toolbar_TOP.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.Toolbar_TOP.Name = "Toolbar_TOP"
|
Me.Toolbar_TOP.Name = "Toolbar_TOP"
|
||||||
Me.Toolbar_TOP.Size = New System.Drawing.Size(934, 25)
|
Me.Toolbar_TOP.Size = New System.Drawing.Size(934, 25)
|
||||||
@@ -284,14 +296,53 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_DOWN_SELECTED.Text = "Download selected (F5)"
|
Me.BTT_DOWN_SELECTED.Text = "Download selected (F5)"
|
||||||
Me.BTT_DOWN_SELECTED.ToolTipText = "Download selected user"
|
Me.BTT_DOWN_SELECTED.ToolTipText = "Download selected user"
|
||||||
'
|
'
|
||||||
|
'MENU_DOWN_ALL
|
||||||
|
'
|
||||||
|
Me.MENU_DOWN_ALL.AutoToolTip = False
|
||||||
|
Me.MENU_DOWN_ALL.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_DOWN_ALL, Me.BTT_DOWN_SITE, MENU_DOWN_ALL_SEP_1, Me.BTT_DOWN_ALL_FULL, Me.BTT_DOWN_SITE_FULL})
|
||||||
|
Me.MENU_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
|
Me.MENU_DOWN_ALL.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||||
|
Me.MENU_DOWN_ALL.Name = "MENU_DOWN_ALL"
|
||||||
|
Me.MENU_DOWN_ALL.Size = New System.Drawing.Size(128, 22)
|
||||||
|
Me.MENU_DOWN_ALL.Text = "Download all (F6)"
|
||||||
|
'
|
||||||
'BTT_DOWN_ALL
|
'BTT_DOWN_ALL
|
||||||
'
|
'
|
||||||
|
Me.BTT_DOWN_ALL.AutoToolTip = True
|
||||||
Me.BTT_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
Me.BTT_DOWN_ALL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
Me.BTT_DOWN_ALL.ImageTransparentColor = System.Drawing.Color.Magenta
|
|
||||||
Me.BTT_DOWN_ALL.Name = "BTT_DOWN_ALL"
|
Me.BTT_DOWN_ALL.Name = "BTT_DOWN_ALL"
|
||||||
Me.BTT_DOWN_ALL.Size = New System.Drawing.Size(119, 22)
|
Me.BTT_DOWN_ALL.Size = New System.Drawing.Size(231, 22)
|
||||||
Me.BTT_DOWN_ALL.Text = "Download all (F6)"
|
Me.BTT_DOWN_ALL.Text = "Download all (F6)"
|
||||||
Me.BTT_DOWN_ALL.ToolTipText = "Download all users"
|
Me.BTT_DOWN_ALL.ToolTipText = "Download all users marked 'Ready for download' from all sites."
|
||||||
|
'
|
||||||
|
'BTT_DOWN_SITE
|
||||||
|
'
|
||||||
|
Me.BTT_DOWN_SITE.AutoToolTip = True
|
||||||
|
Me.BTT_DOWN_SITE.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
|
Me.BTT_DOWN_SITE.Name = "BTT_DOWN_SITE"
|
||||||
|
Me.BTT_DOWN_SITE.Size = New System.Drawing.Size(231, 22)
|
||||||
|
Me.BTT_DOWN_SITE.Text = "Download all site users"
|
||||||
|
Me.BTT_DOWN_SITE.ToolTipText = "Download all users marked 'Ready for download' from specific sites."
|
||||||
|
'
|
||||||
|
'BTT_DOWN_ALL_FULL
|
||||||
|
'
|
||||||
|
Me.BTT_DOWN_ALL_FULL.AutoToolTip = True
|
||||||
|
Me.BTT_DOWN_ALL_FULL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
|
Me.BTT_DOWN_ALL_FULL.Name = "BTT_DOWN_ALL_FULL"
|
||||||
|
Me.BTT_DOWN_ALL_FULL.Size = New System.Drawing.Size(231, 22)
|
||||||
|
Me.BTT_DOWN_ALL_FULL.Text = "Download all [FULL]"
|
||||||
|
Me.BTT_DOWN_ALL_FULL.ToolTipText = "Download all users from all sites. The 'Ready for download' option will be ignore" &
|
||||||
|
"d."
|
||||||
|
'
|
||||||
|
'BTT_DOWN_SITE_FULL
|
||||||
|
'
|
||||||
|
Me.BTT_DOWN_SITE_FULL.AutoToolTip = True
|
||||||
|
Me.BTT_DOWN_SITE_FULL.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
|
Me.BTT_DOWN_SITE_FULL.Name = "BTT_DOWN_SITE_FULL"
|
||||||
|
Me.BTT_DOWN_SITE_FULL.Size = New System.Drawing.Size(231, 22)
|
||||||
|
Me.BTT_DOWN_SITE_FULL.Text = "Download all site users [FULL]"
|
||||||
|
Me.BTT_DOWN_SITE_FULL.ToolTipText = "Download all users from specific sites. The 'Ready for download' option will be i" &
|
||||||
|
"gnored."
|
||||||
'
|
'
|
||||||
'BTT_DOWN_VIDEO
|
'BTT_DOWN_VIDEO
|
||||||
'
|
'
|
||||||
@@ -466,6 +517,14 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.Toolbar_BOTTOM.Size = New System.Drawing.Size(934, 22)
|
Me.Toolbar_BOTTOM.Size = New System.Drawing.Size(934, 22)
|
||||||
Me.Toolbar_BOTTOM.TabIndex = 2
|
Me.Toolbar_BOTTOM.TabIndex = 2
|
||||||
'
|
'
|
||||||
|
'BTT_PR_INFO
|
||||||
|
'
|
||||||
|
Me.BTT_PR_INFO.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
|
||||||
|
Me.BTT_PR_INFO.Image = Global.SCrawler.My.Resources.Resources.InfoPic_32
|
||||||
|
Me.BTT_PR_INFO.Name = "BTT_PR_INFO"
|
||||||
|
Me.BTT_PR_INFO.Padding = New System.Windows.Forms.Padding(0, 0, 3, 0)
|
||||||
|
Me.BTT_PR_INFO.Size = New System.Drawing.Size(19, 17)
|
||||||
|
'
|
||||||
'PR_MAIN
|
'PR_MAIN
|
||||||
'
|
'
|
||||||
Me.PR_MAIN.Name = "PR_MAIN"
|
Me.PR_MAIN.Name = "PR_MAIN"
|
||||||
@@ -503,9 +562,9 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
'
|
'
|
||||||
'USER_CONTEXT
|
'USER_CONTEXT
|
||||||
'
|
'
|
||||||
Me.USER_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_CONTEXT_DOWN, Me.BTT_CONTEXT_DOWN_LIMITED, Me.BTT_CONTEXT_EDIT, Me.BTT_CONTEXT_DELETE, CONTEXT_SEP_1, Me.BTT_CONTEXT_FAV, Me.BTT_CONTEXT_TEMP, Me.BTT_CONTEXT_READY, Me.BTT_CONTEXT_GROUPS, Me.BTT_CONTEXT_ADD_TO_COL, Me.BTT_CONTEXT_COL_MERGE, Me.BTT_CONTEXT_CHANGE_FOLDER, CONTEXT_SEP_2, Me.BTT_CHANGE_IMAGE, CONTEXT_SEP_3, Me.BTT_CONTEXT_OPEN_PATH, CONTEXT_SEP_4, Me.BTT_CONTEXT_OPEN_SITE, CONTEXT_SEP_5, Me.BTT_CONTEXT_INFO})
|
Me.USER_CONTEXT.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_CONTEXT_DOWN, Me.BTT_CONTEXT_DOWN_LIMITED, Me.BTT_CONTEXT_DOWN_DATE_LIMIT, Me.BTT_CONTEXT_EDIT, Me.BTT_CONTEXT_DELETE, CONTEXT_SEP_1, Me.BTT_CONTEXT_FAV, Me.BTT_CONTEXT_TEMP, Me.BTT_CONTEXT_READY, Me.BTT_CONTEXT_GROUPS, Me.BTT_CONTEXT_ADD_TO_COL, Me.BTT_CONTEXT_COL_MERGE, Me.BTT_CONTEXT_CHANGE_FOLDER, CONTEXT_SEP_2, Me.BTT_CHANGE_IMAGE, CONTEXT_SEP_3, Me.BTT_CONTEXT_OPEN_PATH, CONTEXT_SEP_4, Me.BTT_CONTEXT_OPEN_SITE, CONTEXT_SEP_5, Me.BTT_CONTEXT_INFO})
|
||||||
Me.USER_CONTEXT.Name = "USER_CONTEXT"
|
Me.USER_CONTEXT.Name = "USER_CONTEXT"
|
||||||
Me.USER_CONTEXT.Size = New System.Drawing.Size(222, 364)
|
Me.USER_CONTEXT.Size = New System.Drawing.Size(222, 386)
|
||||||
'
|
'
|
||||||
'BTT_CONTEXT_DOWN
|
'BTT_CONTEXT_DOWN
|
||||||
'
|
'
|
||||||
@@ -523,6 +582,13 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_CONTEXT_DOWN_LIMITED.Text = "Download data limited"
|
Me.BTT_CONTEXT_DOWN_LIMITED.Text = "Download data limited"
|
||||||
Me.BTT_CONTEXT_DOWN_LIMITED.ToolTipText = "Download top ... posts"
|
Me.BTT_CONTEXT_DOWN_LIMITED.ToolTipText = "Download top ... posts"
|
||||||
'
|
'
|
||||||
|
'BTT_CONTEXT_DOWN_DATE_LIMIT
|
||||||
|
'
|
||||||
|
Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Image = Global.SCrawler.My.Resources.Resources.StartPic_01_Green_16
|
||||||
|
Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Name = "BTT_CONTEXT_DOWN_DATE_LIMIT"
|
||||||
|
Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Size = New System.Drawing.Size(221, 22)
|
||||||
|
Me.BTT_CONTEXT_DOWN_DATE_LIMIT.Text = "Download data to the date"
|
||||||
|
'
|
||||||
'BTT_CONTEXT_EDIT
|
'BTT_CONTEXT_EDIT
|
||||||
'
|
'
|
||||||
Me.BTT_CONTEXT_EDIT.Image = Global.SCrawler.My.Resources.Resources.PencilPic_01_16
|
Me.BTT_CONTEXT_EDIT.Image = Global.SCrawler.My.Resources.Resources.PencilPic_01_16
|
||||||
@@ -641,14 +707,6 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Me.BTT_TRAY_CLOSE.Size = New System.Drawing.Size(133, 22)
|
Me.BTT_TRAY_CLOSE.Size = New System.Drawing.Size(133, 22)
|
||||||
Me.BTT_TRAY_CLOSE.Text = "Close"
|
Me.BTT_TRAY_CLOSE.Text = "Close"
|
||||||
'
|
'
|
||||||
'BTT_PR_INFO
|
|
||||||
'
|
|
||||||
Me.BTT_PR_INFO.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
|
|
||||||
Me.BTT_PR_INFO.Image = Global.SCrawler.My.Resources.Resources.InfoPic_32
|
|
||||||
Me.BTT_PR_INFO.Name = "BTT_PR_INFO"
|
|
||||||
Me.BTT_PR_INFO.Padding = New System.Windows.Forms.Padding(0, 0, 3, 0)
|
|
||||||
Me.BTT_PR_INFO.Size = New System.Drawing.Size(19, 17)
|
|
||||||
'
|
|
||||||
'MainFrame
|
'MainFrame
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
@@ -676,7 +734,7 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Private WithEvents BTT_ADD_USER As ToolStripButton
|
Private WithEvents BTT_ADD_USER As ToolStripButton
|
||||||
Private WithEvents BTT_DELETE_USER As ToolStripButton
|
Private WithEvents BTT_DELETE_USER As ToolStripButton
|
||||||
Private WithEvents BTT_DOWN_SELECTED As ToolStripButton
|
Private WithEvents BTT_DOWN_SELECTED As ToolStripButton
|
||||||
Private WithEvents BTT_DOWN_ALL As ToolStripButton
|
Private WithEvents MENU_DOWN_ALL As ToolStripDropDownButton
|
||||||
Private WithEvents Toolbar_TOP As ToolStrip
|
Private WithEvents Toolbar_TOP As ToolStrip
|
||||||
Private WithEvents Toolbar_BOTTOM As StatusStrip
|
Private WithEvents Toolbar_BOTTOM As StatusStrip
|
||||||
Private WithEvents PR_MAIN As ToolStripProgressBar
|
Private WithEvents PR_MAIN As ToolStripProgressBar
|
||||||
@@ -733,4 +791,9 @@ Partial Public Class MainFrame : Inherits System.Windows.Forms.Form
|
|||||||
Private WithEvents COL_DEF As ColumnHeader
|
Private WithEvents COL_DEF As ColumnHeader
|
||||||
Private WithEvents MENU_SETTINGS As ToolStripDropDownButton
|
Private WithEvents MENU_SETTINGS As ToolStripDropDownButton
|
||||||
Private WithEvents BTT_PR_INFO As ToolStripStatusLabel
|
Private WithEvents BTT_PR_INFO As ToolStripStatusLabel
|
||||||
|
Private WithEvents BTT_CONTEXT_DOWN_DATE_LIMIT As ToolStripMenuItem
|
||||||
|
Private WithEvents BTT_DOWN_ALL As ToolStripMenuItem
|
||||||
|
Private WithEvents BTT_DOWN_SITE As ToolStripMenuItem
|
||||||
|
Private WithEvents BTT_DOWN_ALL_FULL As ToolStripMenuItem
|
||||||
|
Private WithEvents BTT_DOWN_SITE_FULL As ToolStripMenuItem
|
||||||
End Class
|
End Class
|
||||||
@@ -162,6 +162,9 @@
|
|||||||
<metadata name="MENU_VIEW_SEP_4.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="MENU_VIEW_SEP_4.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="MENU_DOWN_ALL_SEP_1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
<metadata name="Toolbar_TOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="Toolbar_TOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>132, 17</value>
|
<value>132, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ CloseResume:
|
|||||||
Using f As New GlobalSettingsForm
|
Using f As New GlobalSettingsForm
|
||||||
f.ShowDialog()
|
f.ShowDialog()
|
||||||
If f.DialogResult = DialogResult.OK Then
|
If f.DialogResult = DialogResult.OK Then
|
||||||
If Not Settings.MaxLargeImageHeigh = mhl Or Not Settings.MaxSmallImageHeigh = mhs Then RefillList()
|
If (Not Settings.MaxLargeImageHeigh = mhl Or Not Settings.MaxSmallImageHeigh = mhs) And Settings.ViewModeIsPicture Then RefillList()
|
||||||
TrayIcon.Visible = Settings.CloseToTray
|
TrayIcon.Visible = Settings.CloseToTray
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
@@ -309,11 +309,46 @@ CloseResume:
|
|||||||
#End Region
|
#End Region
|
||||||
#Region "Download"
|
#Region "Download"
|
||||||
Private Sub BTT_DOWN_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SELECTED.Click
|
Private Sub BTT_DOWN_SELECTED_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SELECTED.Click
|
||||||
DownloadSelectedUser(False)
|
DownloadSelectedUser(DownUserLimits.None)
|
||||||
End Sub
|
End Sub
|
||||||
|
#Region "Download all"
|
||||||
Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click
|
Private Sub BTT_DOWN_ALL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL.Click
|
||||||
Downloader.AddRange(Settings.Users.Where(Function(u) u.ReadyForDownload))
|
Downloader.AddRange(Settings.Users.Where(Function(u) u.ReadyForDownload))
|
||||||
End Sub
|
End Sub
|
||||||
|
Private Sub BTT_DOWN_SITE_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SITE.Click
|
||||||
|
DownloadSiteFull(True)
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_DOWN_ALL_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_ALL_FULL.Click
|
||||||
|
Downloader.AddRange(Settings.Users)
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_DOWN_SITE_FULL_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_SITE_FULL.Click
|
||||||
|
DownloadSiteFull(False)
|
||||||
|
End Sub
|
||||||
|
Private Sub DownloadSiteFull(ByVal ReadyForDownloadOnly As Boolean)
|
||||||
|
Using f As New SiteSelectionForm(Settings.LatestDownloadedSites.ValuesList)
|
||||||
|
f.ShowDialog()
|
||||||
|
If f.DialogResult = DialogResult.OK Then
|
||||||
|
Settings.LatestDownloadedSites.Clear()
|
||||||
|
Settings.LatestDownloadedSites.AddRange(f.SelectedSites)
|
||||||
|
Settings.LatestDownloadedSites.Update()
|
||||||
|
If f.SelectedSites.Count > 0 Then
|
||||||
|
Downloader.AddRange(Settings.Users.SelectMany(Function(ByVal u As IUserData) As IEnumerable(Of IUserData)
|
||||||
|
If u.IsCollection Then
|
||||||
|
Return DirectCast(u, UserDataBind).Collections.
|
||||||
|
Where(Function(uu) f.SelectedSites.Contains(uu.Site) And
|
||||||
|
(Not ReadyForDownloadOnly Or uu.ReadyForDownload))
|
||||||
|
ElseIf f.SelectedSites.Contains(u.Site) And
|
||||||
|
(Not ReadyForDownloadOnly Or u.ReadyForDownload) Then
|
||||||
|
Return {u}
|
||||||
|
Else
|
||||||
|
Return New IUserData() {}
|
||||||
|
End If
|
||||||
|
End Function))
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
Private Sub BTT_DOWN_VIDEO_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_VIDEO.Click
|
Private Sub BTT_DOWN_VIDEO_Click(sender As Object, e As EventArgs) Handles BTT_DOWN_VIDEO.Click
|
||||||
DownloadVideoByURL()
|
DownloadVideoByURL()
|
||||||
End Sub
|
End Sub
|
||||||
@@ -361,6 +396,7 @@ CloseResume:
|
|||||||
#Region "View Site"
|
#Region "View Site"
|
||||||
Private Sub BTT_SITE_ALL_Click(sender As Object, e As EventArgs) Handles BTT_SITE_ALL.Click
|
Private Sub BTT_SITE_ALL_Click(sender As Object, e As EventArgs) Handles BTT_SITE_ALL.Click
|
||||||
Settings.SelectedSites.Clear()
|
Settings.SelectedSites.Clear()
|
||||||
|
Settings.SelectedSites.Update()
|
||||||
If Not BTT_SITE_ALL.Checked Then RefillList()
|
If Not BTT_SITE_ALL.Checked Then RefillList()
|
||||||
BTT_SITE_ALL.Checked = True
|
BTT_SITE_ALL.Checked = True
|
||||||
BTT_SITE_SPECIFIC.Checked = False
|
BTT_SITE_SPECIFIC.Checked = False
|
||||||
@@ -371,6 +407,7 @@ CloseResume:
|
|||||||
If f.DialogResult = DialogResult.OK Then
|
If f.DialogResult = DialogResult.OK Then
|
||||||
Settings.SelectedSites.Clear()
|
Settings.SelectedSites.Clear()
|
||||||
Settings.SelectedSites.AddRange(f.SelectedSites)
|
Settings.SelectedSites.AddRange(f.SelectedSites)
|
||||||
|
Settings.SelectedSites.Update()
|
||||||
BTT_SITE_SPECIFIC.Checked = Settings.SelectedSites.Count > 0
|
BTT_SITE_SPECIFIC.Checked = Settings.SelectedSites.Count > 0
|
||||||
BTT_SITE_ALL.Checked = Settings.SelectedSites.Count = 0
|
BTT_SITE_ALL.Checked = Settings.SelectedSites.Count = 0
|
||||||
RefillList()
|
RefillList()
|
||||||
@@ -472,7 +509,7 @@ CloseResume:
|
|||||||
End With
|
End With
|
||||||
Settings.LastUpdatedDate = d
|
Settings.LastUpdatedDate = d
|
||||||
End Sub
|
End Sub
|
||||||
Using f As New FDatePickerForm
|
Using f As New FDatePickerForm(Settings.LastUpdatedDate)
|
||||||
f.ShowDialog()
|
f.ShowDialog()
|
||||||
Select Case f.DialogResult
|
Select Case f.DialogResult
|
||||||
Case DialogResult.Abort : snd(Nothing)
|
Case DialogResult.Abort : snd(Nothing)
|
||||||
@@ -487,7 +524,7 @@ CloseResume:
|
|||||||
MyMainLOG_ShowForm(Settings.Design)
|
MyMainLOG_ShowForm(Settings.Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_DONATE_Click(sender As Object, e As EventArgs) Handles BTT_DONATE.Click
|
Private Sub BTT_DONATE_Click(sender As Object, e As EventArgs) Handles BTT_DONATE.Click
|
||||||
Try : Process.Start("https://github.com/AAndyProgram/SCrawler/HowToSupport.md") : Catch : End Try
|
Try : Process.Start("https://github.com/AAndyProgram/SCrawler/blob/main/HowToSupport.md") : Catch : End Try
|
||||||
End Sub
|
End Sub
|
||||||
#Region "List functions"
|
#Region "List functions"
|
||||||
Private _LatestSelected As Integer = -1
|
Private _LatestSelected As Integer = -1
|
||||||
@@ -506,10 +543,13 @@ CloseResume:
|
|||||||
End Sub
|
End Sub
|
||||||
#Region "Context"
|
#Region "Context"
|
||||||
Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click
|
Private Sub BTT_CONTEXT_DOWN_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN.Click
|
||||||
DownloadSelectedUser(False)
|
DownloadSelectedUser(DownUserLimits.None)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_CONTEXT_DOWN_LIMITED_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN_LIMITED.Click
|
Private Sub BTT_CONTEXT_DOWN_LIMITED_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN_LIMITED.Click
|
||||||
DownloadSelectedUser(True)
|
DownloadSelectedUser(DownUserLimits.Number)
|
||||||
|
End Sub
|
||||||
|
Private Sub BTT_CONTEXT_DOWN_DATE_LIMIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_DOWN_DATE_LIMIT.Click
|
||||||
|
DownloadSelectedUser(DownUserLimits.Date)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click
|
Private Sub BTT_CONTEXT_EDIT_Click(sender As Object, e As EventArgs) Handles BTT_CONTEXT_EDIT.Click
|
||||||
EditSelectedUser()
|
EditSelectedUser()
|
||||||
@@ -925,18 +965,20 @@ CloseResume:
|
|||||||
If .Count > 0 AndAlso .ContainsKey(User.Key) Then .RemoveByKey(User.Key)
|
If .Count > 0 AndAlso .ContainsKey(User.Key) Then .RemoveByKey(User.Key)
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub DownloadSelectedUser(ByVal UseLimits As Boolean)
|
Private Enum DownUserLimits : None : Number : [Date] : End Enum
|
||||||
|
Private Sub DownloadSelectedUser(ByVal UseLimits As DownUserLimits)
|
||||||
Dim users As List(Of IUserData) = GetSelectedUserArray()
|
Dim users As List(Of IUserData) = GetSelectedUserArray()
|
||||||
If users.ListExists Then
|
If users.ListExists Then
|
||||||
Dim l%? = Nothing
|
Dim l%? = Nothing
|
||||||
If UseLimits Then
|
Dim d As Date? = Nothing
|
||||||
|
If UseLimits = DownUserLimits.Number Then
|
||||||
Do
|
Do
|
||||||
l = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", "Download limit", 10), AModes.Var, Nothing)
|
l = AConvert(Of Integer)(InputBoxE("Enter top posts limit for downloading:", "Download limit", 10), AModes.Var, Nothing)
|
||||||
If l.HasValue Then
|
If l.HasValue Then
|
||||||
Select Case MsgBoxE(New MMessage($"You are set up downloading top [{l.Value}] posts", "Download limit",
|
Select Case MsgBoxE(New MMessage($"You are set up downloading top [{l.Value}] posts", "Download limit",
|
||||||
{"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index
|
{"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index
|
||||||
Case 0 : Exit Do
|
Case 0 : Exit Do
|
||||||
Case 2 : l = Nothing
|
Case 2 : l = Nothing : Exit Do
|
||||||
Case 3 : GoTo CancelDownloadingOperation
|
Case 3 : GoTo CancelDownloadingOperation
|
||||||
End Select
|
End Select
|
||||||
Else
|
Else
|
||||||
@@ -946,6 +988,32 @@ CloseResume:
|
|||||||
End Select
|
End Select
|
||||||
End If
|
End If
|
||||||
Loop
|
Loop
|
||||||
|
ElseIf UseLimits = DownUserLimits.Date Then
|
||||||
|
Do
|
||||||
|
Using fd As New FDatePickerForm(Nothing)
|
||||||
|
fd.ShowDialog()
|
||||||
|
If fd.DialogResult = DialogResult.OK Then
|
||||||
|
d = fd.SelectedDate
|
||||||
|
ElseIf fd.DialogResult = DialogResult.Abort Then
|
||||||
|
d = Nothing
|
||||||
|
End If
|
||||||
|
End Using
|
||||||
|
If d.HasValue Then
|
||||||
|
Select Case MsgBoxE(New MMessage($"You are set up downloading posts until [{d.Value.Date.ToStringDate(ADateTime.Formats.BaseDate)}]",
|
||||||
|
"Download limit",
|
||||||
|
{"Confirm", "Try again", "Disable limit", "Cancel"}) With {.ButtonsPerRow = 2}).Index
|
||||||
|
Case 0 : Exit Do
|
||||||
|
Case 2 : d = Nothing : Exit Do
|
||||||
|
Case 3 : GoTo CancelDownloadingOperation
|
||||||
|
End Select
|
||||||
|
Else
|
||||||
|
Select Case MsgBoxE({"You are not set up a date limit", "Download limit"},,,, {"Confirm", "Try again", "Cancel"}).Index
|
||||||
|
Case 0 : Exit Do
|
||||||
|
Case 2 : GoTo CancelDownloadingOperation
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
|
||||||
|
Loop
|
||||||
End If
|
End If
|
||||||
If USER_CONTEXT.Visible Then USER_CONTEXT.Hide()
|
If USER_CONTEXT.Visible Then USER_CONTEXT.Hide()
|
||||||
GoTo ResumeDownloadingOperation
|
GoTo ResumeDownloadingOperation
|
||||||
@@ -955,6 +1023,7 @@ CancelDownloadingOperation:
|
|||||||
ResumeDownloadingOperation:
|
ResumeDownloadingOperation:
|
||||||
If users.Count = 1 Then
|
If users.Count = 1 Then
|
||||||
users(0).DownloadTopCount = l
|
users(0).DownloadTopCount = l
|
||||||
|
users(0).DownloadToDate = d
|
||||||
Downloader.Add(users(0))
|
Downloader.Add(users(0))
|
||||||
Else
|
Else
|
||||||
Dim uStr$ = users.Select(Function(u) u.ToString()).ListToString(, vbNewLine)
|
Dim uStr$ = users.Select(Function(u) u.ToString()).ListToString(, vbNewLine)
|
||||||
|
|||||||
@@ -292,8 +292,13 @@ Friend Module MainMod
|
|||||||
For Each p As PluginHost In Settings.Plugins
|
For Each p As PluginHost In Settings.Plugins
|
||||||
d = p.Settings.IsMyImageVideo(URL)
|
d = p.Settings.IsMyImageVideo(URL)
|
||||||
If d.Exists Then
|
If d.Exists Then
|
||||||
um = Settings(d.HostKey).GetSpecialData(URL)
|
um = Settings(d.HostKey).GetSpecialData(URL, Settings.LatestSavingPath.Value, AskForPath)
|
||||||
found = True
|
found = True
|
||||||
|
If um.ListExists Then
|
||||||
|
If AskForPath And Not um(0).SpecialFolder.IsEmptyString And Not p.Settings.IsMyClass Then _
|
||||||
|
Settings.LatestSavingPath.Value = um(0).SpecialFolder
|
||||||
|
If um(0).State = UserMedia.States.Downloaded Then Return True
|
||||||
|
End If
|
||||||
Exit For
|
Exit For
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
|||||||
@@ -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.0")>
|
<Assembly: AssemblyVersion("3.0.0.4")>
|
||||||
<Assembly: AssemblyFileVersion("3.0.0.0")>
|
<Assembly: AssemblyFileVersion("3.0.0.4")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -1,13 +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 Plugin
|
|
||||||
Friend Interface IResponserContainer
|
|
||||||
ReadOnly Property Responser As PersonalUtilities.Tools.WEB.Response
|
|
||||||
End Interface
|
|
||||||
End Namespace
|
|
||||||
@@ -15,6 +15,7 @@ Imports SCrawler.Plugin.Attributes
|
|||||||
Imports System.Reflection
|
Imports System.Reflection
|
||||||
Namespace Plugin.Hosts
|
Namespace Plugin.Hosts
|
||||||
Friend Class PropertyValueHost : Implements IPropertyValue, IComparable(Of PropertyValueHost)
|
Friend Class PropertyValueHost : Implements IPropertyValue, IComparable(Of PropertyValueHost)
|
||||||
|
Friend Const LeftOffsetDefault As Integer = 100
|
||||||
Friend Event OnPropertyUpdateRequested(ByVal Sender As PropertyValueHost)
|
Friend Event OnPropertyUpdateRequested(ByVal Sender As PropertyValueHost)
|
||||||
Private Event ValueChanged As IPropertyValue.ValueChangedEventHandler Implements IPropertyValue.ValueChanged
|
Private Event ValueChanged As IPropertyValue.ValueChangedEventHandler Implements IPropertyValue.ValueChanged
|
||||||
Private _Type As Type
|
Private _Type As Type
|
||||||
@@ -50,13 +51,13 @@ Namespace Plugin.Hosts
|
|||||||
Else
|
Else
|
||||||
DirectCast(Control, CheckBox).Checked = CBool(AConvert(Of Boolean)(Value, False))
|
DirectCast(Control, CheckBox).Checked = CBool(AConvert(Of Boolean)(Value, False))
|
||||||
End If
|
End If
|
||||||
If .LeftOffset > 0 Then Control.Padding = New PaddingE(Control.Padding) With {.Left = Options.LeftOffset}
|
Control.Padding = New PaddingE(Control.Padding) With {.Left = LeftOffset}
|
||||||
Else
|
Else
|
||||||
Control = New TextBoxExtended
|
Control = New TextBoxExtended
|
||||||
With DirectCast(Control, TextBoxExtended)
|
With DirectCast(Control, TextBoxExtended)
|
||||||
.CaptionText = Options.ControlText
|
.CaptionText = Options.ControlText
|
||||||
.CaptionToolTipEnabled = Not Options.ControlToolTip.IsEmptyString
|
.CaptionToolTipEnabled = Not Options.ControlToolTip.IsEmptyString
|
||||||
If Options.LeftOffset > 0 Then .CaptionWidth = Options.LeftOffset
|
.CaptionWidth = LeftOffset
|
||||||
If Not Options.ControlToolTip.IsEmptyString Then .CaptionToolTipText = Options.ControlToolTip : .CaptionToolTipEnabled = True
|
If Not Options.ControlToolTip.IsEmptyString Then .CaptionToolTipText = Options.ControlToolTip : .CaptionToolTipEnabled = True
|
||||||
.Text = CStr(AConvert(Of String)(Value, String.Empty))
|
.Text = CStr(AConvert(Of String)(Value, String.Empty))
|
||||||
With .Buttons
|
With .Buttons
|
||||||
@@ -117,6 +118,19 @@ Namespace Plugin.Hosts
|
|||||||
Friend ReadOnly Name As String
|
Friend ReadOnly Name As String
|
||||||
Private ReadOnly _XmlName As String
|
Private ReadOnly _XmlName As String
|
||||||
Friend ReadOnly Options As PropertyOption
|
Friend ReadOnly Options As PropertyOption
|
||||||
|
Private _LeftOffset As Integer? = Nothing
|
||||||
|
Friend Property LeftOffset As Integer
|
||||||
|
Get
|
||||||
|
If _LeftOffset.HasValue Then
|
||||||
|
Return _LeftOffset
|
||||||
|
Else
|
||||||
|
Return If(Options?.LeftOffset, LeftOffsetDefault)
|
||||||
|
End If
|
||||||
|
End Get
|
||||||
|
Set(ByVal NewOffset As Integer)
|
||||||
|
_LeftOffset = NewOffset
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
#Region "Providers"
|
#Region "Providers"
|
||||||
Friend Property ProviderFieldsChecker As IFormatProvider
|
Friend Property ProviderFieldsChecker As IFormatProvider
|
||||||
Friend Property ProviderValue As IFormatProvider
|
Friend Property ProviderValue As IFormatProvider
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ Imports SCrawler.API.Base
|
|||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
Imports PersonalUtilities.Functions.XML.Base
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
|
Imports PersonalUtilities.Tools.WEB
|
||||||
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
Imports Download = SCrawler.Plugin.ISiteSettings.Download
|
||||||
Namespace Plugin.Hosts
|
Namespace Plugin.Hosts
|
||||||
Friend Class SettingsHost
|
Friend Class SettingsHost
|
||||||
@@ -25,7 +26,7 @@ Namespace Plugin.Hosts
|
|||||||
End Function
|
End Function
|
||||||
Friend Function GetSettingsButtonInternal() As Button
|
Friend Function GetSettingsButtonInternal() As Button
|
||||||
If Not SpecialFormAttribute Is Nothing AndAlso SpecialFormAttribute.SettingsForm Then
|
If Not SpecialFormAttribute Is Nothing AndAlso SpecialFormAttribute.SettingsForm Then
|
||||||
BTT_SETTINGS_INTERNAL = New Button With {.Text = "Other settings", .Dock = DockStyle.Right}
|
BTT_SETTINGS_INTERNAL = New Button With {.Text = "Other settings", .Dock = DockStyle.Right, .Width = 150}
|
||||||
Return BTT_SETTINGS_INTERNAL
|
Return BTT_SETTINGS_INTERNAL
|
||||||
Else
|
Else
|
||||||
Return Nothing
|
Return Nothing
|
||||||
@@ -77,6 +78,16 @@ Namespace Plugin.Hosts
|
|||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
Friend ReadOnly Property HasSpecialOptions As Boolean = False
|
Friend ReadOnly Property HasSpecialOptions As Boolean = False
|
||||||
|
Private ReadOnly _ResponserGetMethod As MethodInfo
|
||||||
|
Friend ReadOnly Property Responser As Response
|
||||||
|
Get
|
||||||
|
If Not _ResponserGetMethod Is Nothing Then
|
||||||
|
Return _ResponserGetMethod.Invoke(Source, Nothing)
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Base properties compatibility"
|
#Region "Base properties compatibility"
|
||||||
Friend ReadOnly Property Temporary As XMLValue(Of Boolean)
|
Friend ReadOnly Property Temporary As XMLValue(Of Boolean)
|
||||||
@@ -128,6 +139,7 @@ Namespace Plugin.Hosts
|
|||||||
Friend Sub New(ByVal Plugin As ISiteSettings, ByRef _XML As XmlFile, ByVal GlobalPath As SFile,
|
Friend Sub New(ByVal Plugin As ISiteSettings, ByRef _XML As XmlFile, ByVal GlobalPath As SFile,
|
||||||
ByRef _Temp As XMLValue(Of Boolean), ByRef _Imgs As XMLValue(Of Boolean), ByRef _Vids As XMLValue(Of Boolean))
|
ByRef _Temp As XMLValue(Of Boolean), ByRef _Imgs As XMLValue(Of Boolean), ByRef _Vids As XMLValue(Of Boolean))
|
||||||
Source = Plugin
|
Source = Plugin
|
||||||
|
Source.Logger = LogConnector
|
||||||
|
|
||||||
PropList = New List(Of PropertyValueHost)
|
PropList = New List(Of PropertyValueHost)
|
||||||
|
|
||||||
@@ -162,7 +174,7 @@ Namespace Plugin.Hosts
|
|||||||
Source.BeginInit()
|
Source.BeginInit()
|
||||||
|
|
||||||
Dim n() As String = {SettingsCLS.Name_Node_Sites, Name}
|
Dim n() As String = {SettingsCLS.Name_Node_Sites, Name}
|
||||||
If If(_XML(n)?.Count, 0) > 0 Then Source.Load(_XML(n).ToKeyValuePair)
|
If If(_XML(n)?.Count, 0) > 0 Then Source.Load(ToKeyValuePair(Of String, EContainer)(_XML(n)))
|
||||||
Dim Members As IEnumerable(Of MemberInfo) = Plugin.GetType.GetTypeInfo.DeclaredMembers
|
Dim Members As IEnumerable(Of MemberInfo) = Plugin.GetType.GetTypeInfo.DeclaredMembers
|
||||||
If Members.ListExists Then
|
If Members.ListExists Then
|
||||||
Dim Updaters As New List(Of MemberInfo)
|
Dim Updaters As New List(Of MemberInfo)
|
||||||
@@ -170,7 +182,12 @@ Namespace Plugin.Hosts
|
|||||||
Dim PropCheckers As New List(Of MemberInfo)
|
Dim PropCheckers As New List(Of MemberInfo)
|
||||||
Dim m As MemberInfo
|
Dim m As MemberInfo
|
||||||
For Each m In Members
|
For Each m In Members
|
||||||
If m.MemberType = MemberTypes.Property Then PropList.Add(New PropertyValueHost(Source, m))
|
If m.MemberType = MemberTypes.Property Then
|
||||||
|
PropList.Add(New PropertyValueHost(Source, m))
|
||||||
|
With DirectCast(m, PropertyInfo)
|
||||||
|
If .PropertyType Is GetType(Response) Then _ResponserGetMethod = .GetMethod
|
||||||
|
End With
|
||||||
|
End If
|
||||||
With m.GetCustomAttributes()
|
With m.GetCustomAttributes()
|
||||||
If .ListExists Then
|
If .ListExists Then
|
||||||
If m.MemberType = MemberTypes.Method Then
|
If m.MemberType = MemberTypes.Method Then
|
||||||
@@ -244,8 +261,10 @@ Namespace Plugin.Hosts
|
|||||||
|
|
||||||
GetUserMediaOnly = New XMLValue(Of Boolean)("GetUserMediaOnly", True, _XML, n)
|
GetUserMediaOnly = New XMLValue(Of Boolean)("GetUserMediaOnly", True, _XML, n)
|
||||||
If PropList.Count > 0 Then
|
If PropList.Count > 0 Then
|
||||||
|
Dim MaxOffset% = Math.Max(PropList.Max(Function(pp) pp.LeftOffset), PropertyValueHost.LeftOffsetDefault)
|
||||||
For Each p As PropertyValueHost In PropList
|
For Each p As PropertyValueHost In PropList
|
||||||
p.SetXmlEnvironment(_XML, n)
|
p.SetXmlEnvironment(_XML, n)
|
||||||
|
p.LeftOffset = MaxOffset
|
||||||
AddHandler p.OnPropertyUpdateRequested, AddressOf PropHost_OnPropertyUpdateRequested
|
AddHandler p.OnPropertyUpdateRequested, AddressOf PropHost_OnPropertyUpdateRequested
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
@@ -263,14 +282,14 @@ Namespace Plugin.Hosts
|
|||||||
If s.Exists Then s.SiteName = Name : s.HostKey = Key
|
If s.Exists Then s.SiteName = Name : s.HostKey = Key
|
||||||
Return s
|
Return s
|
||||||
End Function
|
End Function
|
||||||
Friend Function GetSpecialData(ByVal URL As String) As IEnumerable(Of UserMedia)
|
Friend Function GetSpecialData(ByVal URL As String, ByVal Path As SFile, ByVal AskForPath As Boolean) As IEnumerable(Of UserMedia)
|
||||||
If IsMyClass Then
|
If IsMyClass Then
|
||||||
Return DirectCast(Source, SiteSettingsBase).GetSpecialDataF(URL)
|
Return DirectCast(Source, SiteSettingsBase).GetSpecialDataF(URL)
|
||||||
Else
|
Else
|
||||||
Dim um As IEnumerable(Of IPluginUserMedia) = Source.GetSpecialData(URL)
|
Dim um As IEnumerable(Of PluginUserMedia) = Source.GetSpecialData(URL, Path, AskForPath)
|
||||||
If um.ListExists Then
|
If um.ListExists Then
|
||||||
Dim u As New List(Of UserMedia)
|
Dim u As New List(Of UserMedia)
|
||||||
For Each d As IPluginUserMedia In um : u.Add(New UserMedia(d)) : Next
|
For Each d As PluginUserMedia In um : u.Add(New UserMedia(d)) : Next
|
||||||
Return u
|
Return u
|
||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
|
|||||||
@@ -6,10 +6,12 @@
|
|||||||
'
|
'
|
||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports SCrawler.API.Base
|
|
||||||
Imports PersonalUtilities.Functions.XML
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports SCrawler.API.Base
|
||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
Imports System.Reflection
|
Imports System.Reflection
|
||||||
|
Imports UStates = SCrawler.Plugin.PluginUserMedia.States
|
||||||
|
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
||||||
Namespace Plugin.Hosts
|
Namespace Plugin.Hosts
|
||||||
Friend Class UserDataHost : Inherits UserDataBase
|
Friend Class UserDataHost : Inherits UserDataBase
|
||||||
Private ReadOnly UseInternalDownloader As Boolean
|
Private ReadOnly UseInternalDownloader As Boolean
|
||||||
@@ -27,7 +29,7 @@ Namespace Plugin.Hosts
|
|||||||
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)
|
||||||
If Loading Then
|
If Loading Then
|
||||||
ExternalPlugin.XmlFieldsSet(Container.ToKeyValuePair)
|
ExternalPlugin.XmlFieldsSet(ToKeyValuePair(Of String, EContainer)(Container))
|
||||||
Else
|
Else
|
||||||
Dim fl As List(Of KeyValuePair(Of String, String)) = ExternalPlugin.XmlFieldsGet
|
Dim fl As List(Of KeyValuePair(Of String, String)) = ExternalPlugin.XmlFieldsGet
|
||||||
If fl.ListExists Then
|
If fl.ListExists Then
|
||||||
@@ -51,17 +53,23 @@ Namespace Plugin.Hosts
|
|||||||
.SeparateVideoFolder = SeparateVideoFolderF
|
.SeparateVideoFolder = SeparateVideoFolderF
|
||||||
.DataPath = MyFile.CutPath.PathNoSeparator
|
.DataPath = MyFile.CutPath.PathNoSeparator
|
||||||
.PostsNumberLimit = DownloadTopCount
|
.PostsNumberLimit = DownloadTopCount
|
||||||
|
.PostsDateLimit = DownloadToDate
|
||||||
|
|
||||||
|
.ExistingContentList = New List(Of PluginUserMedia)
|
||||||
|
.TempMediaList = New List(Of PluginUserMedia)
|
||||||
|
.TempPostsList = New List(Of String)
|
||||||
|
|
||||||
If _ContentList.Count > 0 Then ExternalPlugin.ExistingContentList = _ContentList.Select(Function(u) u.PluginUserMedia).ToList
|
If _ContentList.Count > 0 Then ExternalPlugin.ExistingContentList = _ContentList.Select(Function(u) u.PluginUserMedia).ToList
|
||||||
ExternalPlugin.TempPostsList = ListAddList(Nothing, _TempPostsList)
|
ExternalPlugin.TempPostsList = ListAddList(Nothing, _TempPostsList)
|
||||||
|
|
||||||
.GetMedia()
|
.GetMedia()
|
||||||
|
|
||||||
|
_TempPostsList.ListAddList(.TempPostsList, LNC)
|
||||||
If .TempMediaList.ListExists Then _TempMediaList.ListAddList(.TempMediaList.Select(Function(tm) New UserMedia(tm)), LNC)
|
If .TempMediaList.ListExists Then _TempMediaList.ListAddList(.TempMediaList.Select(Function(tm) New UserMedia(tm)), LNC)
|
||||||
|
|
||||||
If Not .Name = Name Then Name = .Name
|
If Not .Name = Name Then Name = .Name
|
||||||
ID = .ID
|
ID = .ID
|
||||||
UserDescription = .UserDescription
|
UserDescriptionUpdate(.UserDescription)
|
||||||
UserExists = .UserExists
|
UserExists = .UserExists
|
||||||
UserSuspended = .UserSuspended
|
UserSuspended = .UserSuspended
|
||||||
End With
|
End With
|
||||||
@@ -69,7 +77,24 @@ Namespace Plugin.Hosts
|
|||||||
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
Protected Overrides Sub ReparseVideo(ByVal Token As CancellationToken)
|
||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadContent(ByVal Token As CancellationToken)
|
||||||
If UseInternalDownloader Then DownloadContentDefault(Token) Else ExternalPlugin.Download()
|
If UseInternalDownloader Then
|
||||||
|
DownloadContentDefault(Token)
|
||||||
|
Else
|
||||||
|
With ExternalPlugin
|
||||||
|
If .TempMediaList.ListExists Then .TempMediaList.Clear()
|
||||||
|
.TempMediaList = New List(Of PluginUserMedia)
|
||||||
|
.TempMediaList.ListAddList(_ContentNew.Select(Function(c) c.PluginUserMedia()))
|
||||||
|
.Download()
|
||||||
|
_ContentNew.Clear()
|
||||||
|
If .TempMediaList.ListExists Then
|
||||||
|
_ContentNew.ListAddList(.TempMediaList.Select(Function(c) New UserMedia(c)))
|
||||||
|
DownloadedPictures(False) = .TempMediaList.LongCount(Function(m) m.DownloadState = UStates.Downloaded And
|
||||||
|
(m.ContentType = UTypes.Picture Or m.ContentType = UTypes.GIF))
|
||||||
|
DownloadedVideos(False) = .TempMediaList.LongCount(Function(m) m.DownloadState = UStates.Downloaded And
|
||||||
|
(m.ContentType = UTypes.Video Or m.ContentType = UTypes.m3u8))
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer
|
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False) As Integer
|
||||||
LogError(ex, Message)
|
LogError(ex, Message)
|
||||||
@@ -82,5 +107,16 @@ Namespace Plugin.Hosts
|
|||||||
Private Sub ExternalPlugin_TotalCountChanged(ByVal Count As Integer)
|
Private Sub ExternalPlugin_TotalCountChanged(ByVal Count As Integer)
|
||||||
Progress.TotalCount += Count
|
Progress.TotalCount += Count
|
||||||
End Sub
|
End Sub
|
||||||
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If disposing And Not disposedValue Then
|
||||||
|
With ExternalPlugin
|
||||||
|
If .ExistingContentList.ListExists Then .ExistingContentList.Clear()
|
||||||
|
If .TempMediaList.ListExists Then .TempMediaList.Clear()
|
||||||
|
If .TempPostsList.ListExists Then .TempPostsList.Clear()
|
||||||
|
.Dispose()
|
||||||
|
End With
|
||||||
|
End If
|
||||||
|
MyBase.Dispose(disposing)
|
||||||
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -271,7 +271,6 @@
|
|||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="PluginsEnvironment\Attributes\AttributesInternal.vb" />
|
<Compile Include="PluginsEnvironment\Attributes\AttributesInternal.vb" />
|
||||||
<Compile Include="PluginsEnvironment\Hosts\IResponserContainer.vb" />
|
|
||||||
<Compile Include="PluginsEnvironment\Hosts\LogHost.vb" />
|
<Compile Include="PluginsEnvironment\Hosts\LogHost.vb" />
|
||||||
<Compile Include="PluginsEnvironment\Hosts\PropertyValueHost.vb" />
|
<Compile Include="PluginsEnvironment\Hosts\PropertyValueHost.vb" />
|
||||||
<Compile Include="PluginsEnvironment\Hosts\PluginHost.vb" />
|
<Compile Include="PluginsEnvironment\Hosts\PluginHost.vb" />
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML)
|
LatestSelectedChannel = New XMLValue(Of String)("LatestSelectedChannel",, MyXML)
|
||||||
LastUpdatedLimit = New XMLValue(Of Date)
|
LastUpdatedLimit = New XMLValue(Of Date)
|
||||||
LastUpdatedLimit.SetExtended("LastUpdatedLimit",, MyXML)
|
LastUpdatedLimit.SetExtended("LastUpdatedLimit",, MyXML)
|
||||||
|
LatestDownloadedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "LatestDownloadedSites", MyXML)
|
||||||
|
|
||||||
SelectedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "SelectedSites", MyXML, {Name_Node_Sites})
|
SelectedSites = New XMLValuesCollection(Of String)(XMLValueBase.ListModes.String, "SelectedSites", MyXML, {Name_Node_Sites})
|
||||||
|
|
||||||
@@ -410,6 +411,7 @@ Friend Class SettingsCLS : Implements IDisposable
|
|||||||
Friend ReadOnly Property LatestSavingPath As XMLValue(Of SFile)
|
Friend ReadOnly Property LatestSavingPath As XMLValue(Of SFile)
|
||||||
Friend ReadOnly Property LatestSelectedLabels As XMLValue(Of String)
|
Friend ReadOnly Property LatestSelectedLabels As XMLValue(Of String)
|
||||||
Friend ReadOnly Property LatestSelectedChannel As XMLValue(Of String)
|
Friend ReadOnly Property LatestSelectedChannel As XMLValue(Of String)
|
||||||
|
Friend ReadOnly Property LatestDownloadedSites As XMLValuesCollection(Of String)
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Channels properties"
|
#Region "Channels properties"
|
||||||
Friend ReadOnly Property ChannelsDefaultReadyForDownload As XMLValue(Of Boolean)
|
Friend ReadOnly Property ChannelsDefaultReadyForDownload As XMLValue(Of Boolean)
|
||||||
|
|||||||
Reference in New Issue
Block a user