Compare commits
121 Commits
3.0.0.7
...
2024.1.26.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52a43b9207 | ||
|
|
5bc559c448 | ||
|
|
b37f641582 | ||
|
|
e00dfec701 | ||
|
|
94edf23570 | ||
|
|
0246af9b69 | ||
|
|
c458f1cd1d | ||
|
|
e3da1bf1d3 | ||
|
|
dde024276b | ||
|
|
7a33c02497 | ||
|
|
5bd79ff3c2 | ||
|
|
3268bca0d3 | ||
|
|
1455a31879 | ||
|
|
64d6e6b28c | ||
|
|
da7cddc720 | ||
|
|
72be6b09ff | ||
|
|
3a0837a1b0 | ||
|
|
0657f3d195 | ||
|
|
c92314d8e8 | ||
|
|
d99243ce46 | ||
|
|
3dae40b696 | ||
|
|
ee0c773c37 | ||
|
|
ebe5f0ca01 | ||
|
|
a540aded68 | ||
|
|
0ec617c1dc | ||
|
|
45adf735a7 | ||
|
|
496c9487cd | ||
|
|
96705f1c59 | ||
|
|
f08a5f9259 | ||
|
|
95cbb6aeb1 | ||
|
|
5af0dcc46e | ||
|
|
f5789862ba | ||
|
|
12c02580f6 | ||
|
|
6def34d5e9 | ||
|
|
831d9a5a09 | ||
|
|
326e61a968 | ||
|
|
61903afe3f | ||
|
|
fa3f39b905 | ||
|
|
c76fd7f918 | ||
|
|
66085e0d95 | ||
|
|
0a1602b453 | ||
|
|
adf788781d | ||
|
|
77711965c0 | ||
|
|
7f1ac6f512 | ||
|
|
f4eb33d8da | ||
|
|
77443cedc4 | ||
|
|
a446df1f66 | ||
|
|
0026e905a4 | ||
|
|
f8116fd048 | ||
|
|
8d33fdc8f3 | ||
|
|
dab94acc32 | ||
|
|
c61c817585 | ||
|
|
3ea59a6acd | ||
|
|
2a60ace18f | ||
|
|
f0014d2874 | ||
|
|
28ae44f0ae | ||
|
|
1b1226025a | ||
|
|
58927b3113 | ||
|
|
df06a86651 | ||
|
|
bade8666d5 | ||
|
|
c70caa0035 | ||
|
|
ac532dbc6f | ||
|
|
82ef4f4410 | ||
|
|
d34414359c | ||
|
|
e51debc027 | ||
|
|
938042ea9e | ||
|
|
abdef81e5f | ||
|
|
e868c2e694 | ||
|
|
b2a9b22478 | ||
|
|
db9e2cfb88 | ||
|
|
85d8df96ca | ||
|
|
6ca90f0489 | ||
|
|
2a780a3acf | ||
|
|
290b5c4586 | ||
|
|
f5e68a7032 | ||
|
|
ece573dd40 | ||
|
|
1f1148020c | ||
|
|
fc226d549a | ||
|
|
602771d982 | ||
|
|
3e472b4f2b | ||
|
|
30c3fe3b68 | ||
|
|
38c81b7a0b | ||
|
|
0fb6add751 | ||
|
|
5d64b8c7ce | ||
|
|
aabf6d62ab | ||
|
|
03487185c5 | ||
|
|
f0686bbc8e | ||
|
|
bdc7321331 | ||
|
|
7d169acebc | ||
|
|
f5c156b8e5 | ||
|
|
d91ee72eaa | ||
|
|
4e9de23b60 | ||
|
|
129558c262 | ||
|
|
a3e79eb4bc | ||
|
|
eb28255de3 | ||
|
|
92be0994ae | ||
|
|
9567b0a367 | ||
|
|
c28c0e1ba3 | ||
|
|
86771eee94 | ||
|
|
02e8a15ae3 | ||
|
|
443ab329d5 | ||
|
|
a16bb8de90 | ||
|
|
0af5e6f8d4 | ||
|
|
54ffe10f71 | ||
|
|
e0dc66e0da | ||
|
|
ab020d9b5f | ||
|
|
4ba1624edf | ||
|
|
f3d956f33f | ||
|
|
4a5e050201 | ||
|
|
dd272c6f6d | ||
|
|
fbcda1ae75 | ||
|
|
9e87369c9b | ||
|
|
cc3618a50e | ||
|
|
33b9e9cfc6 | ||
|
|
26dca2246e | ||
|
|
60b459e217 | ||
|
|
f491e03812 | ||
|
|
418f44edfd | ||
|
|
075a2b9b80 | ||
|
|
20c74ec8f1 | ||
|
|
0594e77e0b |
3
.gitattributes
vendored
@@ -1,2 +1,5 @@
|
|||||||
# Auto detect text files and perform LF normalization
|
# Auto detect text files and perform LF normalization
|
||||||
* text=auto
|
* text=auto
|
||||||
|
|
||||||
|
# Declare files that will always have CRLF line endings on checkout.
|
||||||
|
*.md text eol=crlf
|
||||||
4
.github/FUNDING.yml
vendored
@@ -3,11 +3,11 @@
|
|||||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||||
patreon: # Replace with a single Patreon username
|
patreon: # Replace with a single Patreon username
|
||||||
open_collective: # Replace with a single Open Collective username
|
open_collective: # Replace with a single Open Collective username
|
||||||
ko_fi: andyprogram
|
ko_fi: #andyprogram
|
||||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||||
liberapay: # Replace with a single Liberapay username
|
liberapay: # Replace with a single Liberapay username
|
||||||
issuehunt: # Replace with a single IssueHunt username
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
otechie: # Replace with a single Otechie username
|
otechie: # Replace with a single Otechie username
|
||||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||||
custom: ['https://blockchair.com/bitcoin/address/BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET']
|
custom: ['https://github.com/AAndyProgram/SCrawler/blob/main/HowToSupport.md']
|
||||||
|
|||||||
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -12,12 +12,17 @@ A clear and concise description of what the bug is.
|
|||||||
|
|
||||||
**To Reproduce**
|
**To Reproduce**
|
||||||
Steps to reproduce the behavior:
|
Steps to reproduce the behavior:
|
||||||
1. Profile URL:
|
1. **Profile URL**:
|
||||||
2. Do something
|
2. **Post URL**:
|
||||||
3. See error
|
3. Do something
|
||||||
|
4. See error
|
||||||
|
|
||||||
**Log data**
|
<details>
|
||||||
If the program log contains any data.
|
<summary>Log data</summary>
|
||||||
|
<pre>
|
||||||
|
If the program log contains any data, replace this line with the log data. If the program log does not contain any data, write here about.
|
||||||
|
</pre>
|
||||||
|
</details>
|
||||||
|
|
||||||
**Expected behavior**
|
**Expected behavior**
|
||||||
A clear and concise description of what you expected to happen.
|
A clear and concise description of what you expected to happen.
|
||||||
@@ -25,11 +30,17 @@ A clear and concise description of what you expected to happen.
|
|||||||
**Screenshots**
|
**Screenshots**
|
||||||
If applicable, add screenshots to help explain your problem.
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
**Release information (please complete the following information):**
|
**Release information:**
|
||||||
- OS [e.g. Windows 10, Windows 11]
|
|
||||||
- Architecture [e.g. x86, x64]
|
**Please complete the following information or replace the following text with data copied from SCrawler (click the top right info button in the main window, then the `Environment` button, then the `Copy` button, and paste the copied text here).**
|
||||||
- Version [e.g. 2.0.0.0]
|
- OS: [e.g. Windows 10, Windows 11]
|
||||||
- NET.Framework version
|
- Architecture: [e.g. x86, x64]
|
||||||
|
- Version: [e.g. 2023.3.5.0]
|
||||||
|
- NET.Framework version:
|
||||||
|
- ffmpeg version (command `ffmpeg -version`):
|
||||||
|
- yt-dlp version (command `yt-dlp --version`):
|
||||||
|
- gallery-dl version (command `gallery-dl --version`):
|
||||||
|
- cURL version (command `curl --version`):
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|||||||
4
.github/ISSUE_TEMPLATE/plugin_add.md
vendored
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: Add plugin
|
name: I developed a plugin for SCrawler
|
||||||
about: Add plugin to plugin list
|
about: I developed a plugin for SCrawler. Add plugin to plugin list.
|
||||||
title: "[NEW PLUGIN]"
|
title: "[NEW PLUGIN]"
|
||||||
labels: 'New Plugin'
|
labels: 'New Plugin'
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|||||||
5
.gitignore
vendored
@@ -9,8 +9,8 @@
|
|||||||
*.user
|
*.user
|
||||||
*.userosscache
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
ffmpeg.exe
|
.obsidian/
|
||||||
ToDo.txt
|
BugReporterFormDiscordWebHook.vb
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
*.userprefs
|
*.userprefs
|
||||||
@@ -33,7 +33,6 @@ bld/
|
|||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
[Ll]og/
|
[Ll]og/
|
||||||
[Ll]ogs/
|
[Ll]ogs/
|
||||||
ffmpeg/
|
|
||||||
Info/
|
Info/
|
||||||
|
|
||||||
# Visual Studio 2015/2017 cache/options directory
|
# Visual Studio 2015/2017 cache/options directory
|
||||||
|
|||||||
@@ -3,39 +3,40 @@
|
|||||||
I welcome requests! Follow these steps to contribute:
|
I welcome requests! Follow these steps to contribute:
|
||||||
|
|
||||||
1. Find an [issue](https://github.com/AAndyProgram/SCrawler/issues) that needs assistance.
|
1. Find an [issue](https://github.com/AAndyProgram/SCrawler/issues) that needs assistance.
|
||||||
2. Let me know you are working on it by posting a comment on the issue.
|
1. Let me know you are working on it by posting a comment on the issue.
|
||||||
3. If you find an error in the code, please provide a link to the file and the line number.
|
1. If you find an error in the code, please provide a link to the file and the line number.
|
||||||
4. If you have a suggestion to change the code, you can post a block of code to replace. I don't currently have time to learn pull requests, so it might work this way.
|
1. If you have a code change suggestion, you can post a replacement code block. I also accept pull requests.
|
||||||
|
|
||||||
# How to build from source
|
# How to build from source
|
||||||
|
1. Delete the `PersonalUtilities` project from the solution.
|
||||||
|
1. Delete the `PersonalUtilities.Notifications` project from the solution.
|
||||||
|
1. The following libraries must be added to project references with the '**Copy to output folder**' option:
|
||||||
|
- `PersonalUtilities.dll`
|
||||||
|
- `PersonalUtilities.Notifications.dll`
|
||||||
|
- `Microsoft.Toolkit.Uwp.Notifications.dll`
|
||||||
|
- `System.ValueTuple.dll`
|
||||||
|
1. Import `PersonalUtilities.Functions` for the whole project.
|
||||||
|
|
||||||
1. Delete the "PersonalUtilities" project from the solution.
|
**Always use the correct libraries. You must download libraries from the same release date as the code commit date.**
|
||||||
2. Add the latest version of the "PersonalUtilities.dll" library (from the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest)).
|
|
||||||
3. Import PersonalUtilities.Functions for the whole project.
|
|
||||||
|
|
||||||
**Always use the correct "PersonalUtilities.dll" library. You must download this library from the release of the code you downloaded.**
|
|
||||||
|
|
||||||
# How to request a new site
|
# How to request a new site
|
||||||
|
|
||||||
1. Check [issues](https://github.com/AAndyProgram/SCrawler/issues) (open and [closed](https://github.com/AAndyProgram/SCrawler/issues?q=is%3Aissue+is%3Aclosed)) and [discussions](https://github.com/AAndyProgram/SCrawler/discussions) to find your issue. Perhaps I have already answered your request.
|
**I'm currently not accepting requests to develop new sites.**
|
||||||
2. If you don't find anything, create a new issue with your request. I usually reply as soon as possible (within the next few hours).
|
|
||||||
- If I'm interested in a site you want to add, it may be added in future releases.
|
|
||||||
- If the site has an API that does not require authorization, it may be added in the coming releases.
|
|
||||||
- You can make it faster by posting a link to the API. **I don't use OAuth authentication** in my application, so if it's not too hard to make a new parsing algorithm **without OAuth** authorization, I can start developing it in the coming days. Otherwise, I need time to figure out how to do it.
|
|
||||||
- If the site does not have an API that does not require authorization, this may take some time.
|
|
||||||
- If you will be posting request urls **without OAuth** authentication, I might consider adding your site if I have time.
|
|
||||||
- If I'm **not** interested in the site you want to add, you can pay to have it added by making a donation of approximately $10. **But before that, you still need to create an issue. If I'm not interested, you can offer me a deal to develop it for money. I'll check the site you want to add, check the availability of the API and tell you how much time I need to develop it and the price. If you agree, I will do it.** [](https://ko-fi.com/andyprogram)
|
|
||||||
|
|
||||||
|
1. Check [issues](https://github.com/AAndyProgram/SCrawler/issues) (open and [closed](https://github.com/AAndyProgram/SCrawler/issues?q=is%3Aissue+is%3Aclosed)) and [discussions](https://github.com/AAndyProgram/SCrawler/discussions) to find your issue. Perhaps I have already answered your request.
|
||||||
|
1. If you don't find anything, create a new issue with your request. I usually reply as soon as possible (within the next few hours).
|
||||||
|
|
||||||
|
# Requirements for new site requests
|
||||||
|
|
||||||
|
**Attention! I'll add a new site only if I'm interested. I also have a life, and any development takes time.**
|
||||||
|
|
||||||
|
- Post a link to the site's API
|
||||||
|
- Post request URLs **without OAuth** authentication
|
||||||
|
- Post a **complete cURL** request which provides the required information (JSON is better)
|
||||||
|
|
||||||
|
**I don't use OAuth authentication** in my application, so if it's not too hard to make a new parsing algorithm **without OAuth** authorization, I can start developing it in the coming days. Otherwise, I need time to figure out how to do it.
|
||||||
|
|
||||||
|
If I'm interested in a site you want to add, it may be added in future releases.
|
||||||
|
|
||||||
# Sites I will never develop
|
# Sites I will never develop
|
||||||
|
- Tumblr
|
||||||
- Facebook
|
|
||||||
|
|
||||||
# Sites requested by users
|
|
||||||
|
|
||||||
- TikTok
|
|
||||||
- API for receiving data without authorization was not found. Therefore, I don't have time to start developing this site parsing algorithm. If anyone knows of requests that may collect data without OAuth authentication, please let me know.
|
|
||||||
|
|
||||||
# Contact me
|
|
||||||
|
|
||||||
[](https://matrix.to/#/@andyprogram:matrix.org)
|
|
||||||
927
Changelog.md
43
FAQ.md
@@ -14,11 +14,7 @@ Any other questions I will keep in this file.
|
|||||||
|
|
||||||
A: https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies
|
A: https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies
|
||||||
|
|
||||||
----
|
<!---**ATTENTION! If you need to use cookies but cannot import them, I highly recommend that you don't use SCrawler and use another program. Don't create issues, discussions, or write to me on Discord. Any issue or discussion about cookies will be deleted immediately without a response. Any user who asks me about cookies on Discord will be banned.**--->
|
||||||
|
|
||||||
#### Q: **I can't copy cookies.**
|
|
||||||
|
|
||||||
A: Use the mouse. Don't use ```Ctrl``` + ```A```!
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
@@ -30,19 +26,22 @@ A: This is a GUI program.
|
|||||||
|
|
||||||
#### Q: **Will CLI be added in the future?**
|
#### Q: **Will CLI be added in the future?**
|
||||||
|
|
||||||
A: I do not think so.
|
A: NO.
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
#### Q: **I want to add "...." site. How to request.**
|
#### Q: **I want to add "...." site. How to request.**
|
||||||
|
|
||||||
A: How to request a new site you can read [here](CONTRIBUTING.md#how-to-request-a-new-site)
|
<!---A: How to request a new site you can read [here](CONTRIBUTING.md#how-to-request-a-new-site)--->
|
||||||
|
**I'm currently not accepting requests to develop new sites.**
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
#### Q: **Twitter/Instagram download failed.**
|
#### Q: **Site download failed.**
|
||||||
|
|
||||||
A: Check your credentials. Both of these sites require cookies. Check your [Twitter tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) and [Instagram settings](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram-settings). If all settings are set, but nothing works, go to [create a new issue](https://github.com/AAndyProgram/SCrawler/issues). Don't forget to attach the LOG.
|
A: Check your credentials and **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**. If all settings are set, but nothing works, go to [create a new issue](https://github.com/AAndyProgram/SCrawler/issues). Don't forget to attach the LOG.
|
||||||
|
|
||||||
|
**ATTENTION! Issues without URLs will be closed without a response!**
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
@@ -78,7 +77,7 @@ A: The program stored posts IDs in users' folders. For the first time, the progr
|
|||||||
|
|
||||||
#### Q: **How to redownload all data**
|
#### Q: **How to redownload all data**
|
||||||
|
|
||||||
A: Double-click on the user you want to redownload. In the opened window open folder setting. Delete the files ending with ```_Data.xml``` and ```_Posts.txt```. Download this user again.
|
A: Double-click on the user you want to redownload. In the opened window open folder setting. Delete the files ending with ```_Data.xml``` and ```_Posts.txt```. Restart SCrawler. Download this user again.
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
@@ -94,6 +93,28 @@ A: Just add that user back to the program. In the dialog box that opens, click o
|
|||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
#### Q: **Why don't you answer how it works**
|
||||||
|
|
||||||
|
A: Because **I don't want to**. I don't want to waste my time explaining things that are already covered in the **[GUIDE](https://github.com/AAndyProgram/SCrawler/wiki)**! If you didn't bother to read the guide, why would I waste my time?! ALL FUNCTIONALITY IS DESCRIBED IN THE GUIDE. Before publishing a new release, I update the guide. If you don't respect my work, I don't waste my time.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
#### Q: **You lost me. Your program is too complicated.**
|
||||||
|
|
||||||
|
A: **I'm fine with that**. If the program is difficult for you or you can't configure it, I can only suggest you find another (easier) program. I really don't mind! The program is free. I am develop SCrawler for myself and publish on GitHub because people found my program useful. If someone can't use it or doesn't like it, I'm fine.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
#### Q: **I can't configure something**
|
||||||
|
|
||||||
|
A: I can only [suggest](#q-you-lost-me-your-program-is-too-complicated) you find another (easier) program.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
#### Q: **Can you add a step-by-step guide or video on how to use the program?**
|
#### Q: **Can you add a step-by-step guide or video on how to use the program?**
|
||||||
|
|
||||||
A: **NO**! I will not do it. If you want, you can create a video tutorial and send it to me. Then I add it. All options and what each option does described on the wiki. The wiki also contains a description of all settings and how-to configure them. For complex settings, there is a steep-by-steep guide. Read the [main](README.md) information and [GUIDE](https://github.com/AAndyProgram/SCrawler/wiki/) and you won't have any problems. I have developed a program with an intuitive interface. There is a Settings button, download buttons, a context menu that drops down when a user is clicked, and other controls. Anyone can use it.
|
A: **NO! NEVER!** The guide fully covers all the functionality of SCrawler! If you don't respect my work, I don't waste my time. If you want, you can create a video tutorial and send it to me. Then I add it. All options and what each option does described on the wiki. The wiki also contains a description of all settings and how-to configure them. For complex settings, there is a steep-by-steep guide. Read the [main](README.md) information and [GUIDE](https://github.com/AAndyProgram/SCrawler/wiki/) and you won't have any problems. I have developed a program with an intuitive interface. There is a Settings button, download buttons, a context menu that drops down when a user is clicked, and other controls. Anyone can use it.
|
||||||
|
|
||||||
|
**The following video shows how to add credentials:**
|
||||||
|
|
||||||
|
[](https://www.youtube.com/watch?v=XDn7zG4I700)
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
Your support is very valuable to me. Any support is greatly appreciated. Your support encourages me to make new features, update the program, add new sites, etc.
|
Your support is very valuable to me. Any support is greatly appreciated. Your support encourages me to make new features, update the program, add new sites, etc.
|
||||||
|
|
||||||
You can support the program by:
|
You can support the program by:
|
||||||
- **Bitcoin**: bitcoin:BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET
|
- **Bitcoin**: BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET
|
||||||
- :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/
|
||||||
|
- :heart: like the program on this site: https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml
|
||||||
- suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before
|
- suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before
|
||||||
|
|
||||||
I would be very grateful for any support! :blush:
|
I would be very grateful for any support! :blush:
|
||||||
|
<!---:heavy_dollar_sign: make a donation on this site: https://ko-fi.com/andyprogram--->
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
|
You can create a plugin for any site you want. **To create a plugin, read [this guide](https://github.com/AAndyProgram/SCrawler/wiki/Plugins).**
|
||||||
|
|
||||||
|
If you've created a plugin, you can create a [new issue](https://github.com/AAndyProgram/SCrawler/issues/new?assignees=&labels=New+Plugin&projects=&template=plugin_add.md&title=%5BNEW+PLUGIN%5D) and I'll add your plugin to the list below.
|
||||||
|
|
||||||
List of available plugins:
|
List of available plugins:
|
||||||
- LPSG
|
|
||||||
- XVIDEOS
|
|
||||||
|
|
||||||
Tools:
|
Tools:
|
||||||
- [image2post](https://github.com/unknown81311/SCrawler-image2post) by @unknown81311: **get reddit post URL from file.**
|
- [image2post](https://github.com/unknown81311/SCrawler-image2post) by @unknown81311: **get reddit post URL from file.**
|
||||||
BIN
ProgramScreenshots/AppYouTube.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
ProgramScreenshots/AppYouTubeMusic.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
ProgramScreenshots/AppYouTubePlaylist.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
ProgramScreenshots/AppYouTubePlaylistParser.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
ProgramScreenshots/AppYouTubeSettings.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
ProgramScreenshots/AppYouTubeVideo.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
ProgramScreenshots/BugReport.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
BIN
ProgramScreenshots/FeedWindow.png
Normal file
|
After Width: | Height: | Size: 491 KiB |
BIN
ProgramScreenshots/FeedWindowItemContext.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
ProgramScreenshots/FeedWindowSessionContext.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
ProgramScreenshots/GroupCreating.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
ProgramScreenshots/LocationsChanger.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 369 KiB After Width: | Height: | Size: 359 KiB |
|
Before Width: | Height: | Size: 377 KiB |
BIN
ProgramScreenshots/MainWindowGroups.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
ProgramScreenshots/MainWindowPause.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ProgramScreenshots/MainWindowView.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
ProgramScreenshots/MissingPosts.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 39 KiB |
BIN
ProgramScreenshots/SearchUsers.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 10 KiB |
BIN
ProgramScreenshots/SettingsAutoDownloader.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
ProgramScreenshots/SettingsGlobalBasis.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
ProgramScreenshots/SettingsGlobalBehavior.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ProgramScreenshots/SettingsGlobalChannels.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ProgramScreenshots/SettingsGlobalDefaults.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ProgramScreenshots/SettingsGlobalDesign.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
ProgramScreenshots/SettingsGlobalDownloader.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
ProgramScreenshots/SettingsGlobalDownloading.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
ProgramScreenshots/SettingsGlobalEnvironment.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
ProgramScreenshots/SettingsGlobalFeed.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
ProgramScreenshots/SettingsGlobalNotifications.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 7.7 KiB |
BIN
ProgramScreenshots/SettingsScheduler.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
ProgramScreenshots/SettingsSiteFacebook.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
ProgramScreenshots/SettingsSiteInstagram.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
ProgramScreenshots/SettingsSiteJustForFans.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
ProgramScreenshots/SettingsSiteLPSG.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
ProgramScreenshots/SettingsSiteMastodon.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
ProgramScreenshots/SettingsSiteMastodonAdditional.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ProgramScreenshots/SettingsSiteOnlyFans.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
ProgramScreenshots/SettingsSitePinterest.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
ProgramScreenshots/SettingsSitePornHub.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
ProgramScreenshots/SettingsSiteRedGifs.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
ProgramScreenshots/SettingsSiteReddit.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
ProgramScreenshots/SettingsSiteThisVid.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
ProgramScreenshots/SettingsSiteThreads.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
ProgramScreenshots/SettingsSiteTikTok.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
ProgramScreenshots/SettingsSiteTwitter.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
ProgramScreenshots/SettingsSiteXHamster.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
ProgramScreenshots/SettingsSiteXvideos.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
ProgramScreenshots/SettingsSiteXvideosAdditional.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
ProgramScreenshots/SettingsSiteYouTube.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
ProgramScreenshots/SettingsTwitterUser.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
ProgramScreenshots/TrayContextMenu.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
ProgramScreenshots/UserDefaultQueryOptions.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
ProgramScreenshots/UserMetrics.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
@@ -1,10 +1,69 @@
|
|||||||
|
# yt-dlp
|
||||||
|
|
||||||
|
https://github.com/yt-dlp/yt-dlp/
|
||||||
|
|
||||||
|
**Great powerful CLI tool that supports hundreds of sites.**
|
||||||
|
|
||||||
|
SCrawler has advanced user management, collections, labels, groups, automatic downloads, a beautiful view, GUI, the ability to add plugins for other sites and much more. Just try it and compare.
|
||||||
|
|
||||||
|
# gallery-dl
|
||||||
|
|
||||||
|
https://github.com/mikf/gallery-dl
|
||||||
|
|
||||||
|
**Great powerful CLI tool that supports hundreds of sites.**
|
||||||
|
|
||||||
|
SCrawler has advanced user management, collections, labels, groups, automatic downloads, a beautiful view, GUI, the ability to add plugins for other sites and much more. Just try it and compare.
|
||||||
|
|
||||||
|
# 4K Video Downloader
|
||||||
|
|
||||||
|
https://www.4kdownload.com/-plbrz/video-downloader
|
||||||
|
|
||||||
|
| Option | SCrawler | 4K Video Downloader |
|
||||||
|
| ---- | ---- | ---- |
|
||||||
|
| User managament | **Advanced** | No |
|
||||||
|
| Automatic downloads | **Yes** | No |
|
||||||
|
| Downloading groups | **Yes** | No |
|
||||||
|
| Labeling users | **Yes** | No |
|
||||||
|
| Filtering | **Yes** | No |
|
||||||
|
| Collections | **Yes** | No |
|
||||||
|
| Specific user folders | **Yes** | No |
|
||||||
|
| Favorite / Temporary user options | **Yes** | No |
|
||||||
|
| Plugins support | **Yes** | No |
|
||||||
|
| Download single video | **Unlimited** | 30 videos per day *(unlimited starts from 12 EUR)* |
|
||||||
|
| Download videos per channel | **Unlimited** | 5 free *(unlimited starts from 12 EUR)* |
|
||||||
|
| Download videos per playlist | **Unlimited** | 10 free *(unlimited starts from 12 EUR)* |
|
||||||
|
| Download video subtitles | **Any for free**: single video, playlist, user/channel, album, etc| Free for single video |
|
||||||
|
| The number of subtitles you can download for a video | **All of them** | Up to 10 |
|
||||||
|
| Convert subtitles to additional formats | **Yes** | No |
|
||||||
|
| Support LRC format | **Yes** | No |
|
||||||
|
| Select audio codec for audio/video | **Yes** | No |
|
||||||
|
| Extract and convert additional audio tracks for video | **Yes** | No |
|
||||||
|
| Simultaneous downloads | **Unlimited** | 1 free, 3 for 12 EUR, 7 for 43 EUR|
|
||||||
|
| Private YouTube content download | **Free** | Only in paid plans *starts from 12 EUR* |
|
||||||
|
| **Paid** | **No** | Yes |
|
||||||
|
| **Free options** | **The program is completely free** | Only **30** videos per day, 5 from a channel, 10 from a playlist |
|
||||||
|
| Permitted Commercial Use | **Yes** | Starting from 43 EUR |
|
||||||
|
| Automatic Subscriptions Update | **Free** | Paid (43 EUR) |
|
||||||
|
| Posts and Captions Export | No | Paid (43 EUR) |
|
||||||
|
| Advertisements free | **No ADs at all for free** | Paid (43 EUR) |
|
||||||
|
| Operating Systems | Windows 10+ | Windows 7+, MacOS 10.13+, Ubuntu x64 |
|
||||||
|
| Select want content type to download | **Yes** | No |
|
||||||
|
| Instagram support | **Yes** | No |
|
||||||
|
| Twitter support | **Yes** | No |
|
||||||
|
| Reddit support | **Yes** | No |
|
||||||
|
| Other sites support | **Yes** | No |
|
||||||
|
| Still supported | Yes | Yes |
|
||||||
|
|
||||||
# 4K Stogram
|
# 4K Stogram
|
||||||
|
|
||||||
https://www.4kdownload.com/products/product-stogram
|
<!---https://www.4kdownload.com/products/product-stogram--->
|
||||||
|
https://www.4kdownload.com/-ad0p9/stogram
|
||||||
|
|
||||||
| Option | SCrawler | 4K Stogram |
|
| Option | SCrawler | 4K Stogram |
|
||||||
| ---- | ---- | ---- |
|
| ---- | ---- | ---- |
|
||||||
| User managament | **Advanced** | Primitive |
|
| User managament | **Advanced** | Primitive |
|
||||||
|
| Automatic downloads | **Yes** | No |
|
||||||
|
| Downloading groups | **Yes** | No |
|
||||||
| Labeling users | **Yes** | No |
|
| Labeling users | **Yes** | No |
|
||||||
| Filtering | **Yes** | No |
|
| Filtering | **Yes** | No |
|
||||||
| Collections | **Yes** | No |
|
| Collections | **Yes** | No |
|
||||||
@@ -16,20 +75,20 @@ https://www.4kdownload.com/products/product-stogram
|
|||||||
| Download posts by location | No | **Yes** |
|
| Download posts by location | No | **Yes** |
|
||||||
| Save Private Instagram Content with Permission| Yes | Yes |
|
| Save Private Instagram Content with Permission| Yes | Yes |
|
||||||
| Download Instagram Stories and Highlights | Yes | Yes |
|
| Download Instagram Stories and Highlights | Yes | Yes |
|
||||||
| See Others Instagram Feed As Your Own | No | **Yes** |
|
| See Others Instagram Feed As Your Own | Yes | Yes |
|
||||||
| Download Instagram Video Posts | Yes | Yes |
|
| Download Instagram Video Posts | Yes | Yes |
|
||||||
| Backup Your Instagram Account | Yes | Yes |
|
| Backup Your Instagram Account | Yes | Yes |
|
||||||
| Save Instagram Posts by Date | No (only limited download) | **Yes** |
|
| Save Instagram Posts by Date | Yes | Yes |
|
||||||
| Download Instagram Saved Posts | Yes | Yes |
|
| Download Instagram Saved Posts | Yes | Yes |
|
||||||
| Download Instagram Tagged Posts | Yes | Yes |
|
| Download Instagram Tagged Posts | Yes | Yes |
|
||||||
| Export and import subscriptions | No | **Yes** |
|
| Export and import subscriptions | No | **Yes** |
|
||||||
| **Paid** | **No** | Yes |
|
| **Paid** | **No** | Yes |
|
||||||
| **Free options** | **The program is completely free** | Only **ONE** profile downloading and only **200 posts** per day |
|
| **Free options** | **The program is completely free** | Only **ONE** profile downloading and only **200 posts** per day |
|
||||||
| Permitted Commercial Use | **Yes** | Starting from 43.56 EUR |
|
| Permitted Commercial Use | **Yes** | Starting from 43 EUR |
|
||||||
| Automatic Subscriptions Update | **Free** | Paid (43.56 EUR) |
|
| Automatic Subscriptions Update | **Free** | Paid (43 EUR) |
|
||||||
| Posts and Captions Export | No | Paid (43.56 EUR) |
|
| Posts and Captions Export | No | Paid (43 EUR) |
|
||||||
| Advertisements free | **No ADs at all for free** | Paid (14.52) |
|
| Advertisements free | **No ADs at all for free** | Paid (18 EUR) |
|
||||||
| Operating Systems | Windows 7+ | Windows 7+, MacOS 10.13+, Ubuntu x64 |
|
| Operating Systems | Windows 10+ | Windows 7+, MacOS 10.13+, Ubuntu x64 |
|
||||||
| Select want content type to download | **Yes** | No |
|
| Select want content type to download | **Yes** | No |
|
||||||
| Instagram support | Yes | Yes |
|
| Instagram support | Yes | Yes |
|
||||||
| Twitter support | **Yes** | No |
|
| Twitter support | **Yes** | No |
|
||||||
@@ -44,6 +103,8 @@ https://github.com/RipMeApp/ripme
|
|||||||
| Option | SCrawler | RipMeApp |
|
| Option | SCrawler | RipMeApp |
|
||||||
| ---- | ---- | ---- |
|
| ---- | ---- | ---- |
|
||||||
| User managament | **Advanced** | No |
|
| User managament | **Advanced** | No |
|
||||||
|
| Automatic downloads | **Yes** | No |
|
||||||
|
| Downloading groups | **Yes** | No |
|
||||||
| Labeling users | **Yes** | No |
|
| Labeling users | **Yes** | No |
|
||||||
| Filtering | **Yes** | No |
|
| Filtering | **Yes** | No |
|
||||||
| Collections | **Yes** | No |
|
| Collections | **Yes** | No |
|
||||||
@@ -62,17 +123,9 @@ https://github.com/RipMeApp/ripme
|
|||||||
| Export and import subscriptions | No | No |
|
| Export and import subscriptions | No | No |
|
||||||
| **Paid** | **No** | **No** |
|
| **Paid** | **No** | **No** |
|
||||||
| **Free options** | The program is completely free | The program is completely free, but site limits are not declared |
|
| **Free options** | The program is completely free | The program is completely free, but site limits are not declared |
|
||||||
| Operating Systems | Windows 7+ | Windows, MacOS, Linux |
|
| Operating Systems | Windows 10+ | Windows, MacOS, Linux |
|
||||||
| 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 | 15+ 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.
|
|
||||||
230
README.md
@@ -1,92 +1,157 @@
|
|||||||
# Social networks crawler
|
<!-- # :rainbow_flag: Happy LGBT Pride Month :tada:
|
||||||
|
-->
|
||||||
|
# 🏳️🌈 Social networks crawler 🏳️🌈
|
||||||
|
|
||||||
[](https://github.com/AAndyProgram/SCrawler/releases/latest)
|
[](https://github.com/AAndyProgram/SCrawler/releases/latest)
|
||||||
[](https://github.com/AAndyProgram/SCrawler/)
|
[](https://github.com/AAndyProgram/SCrawler/blob/main/LICENSE)
|
||||||
|
[](https://discord.gg/uFNUXvFFmg)
|
||||||
|
[](https://github.com/AAndyProgram/SCrawler/releases)
|
||||||
[](FAQ.md)
|
[](FAQ.md)
|
||||||
[](https://github.com/AAndyProgram/SCrawler/wiki)
|
[](https://github.com/AAndyProgram/SCrawler/wiki)
|
||||||
[](HowToSupport.md)
|
[](HowToSupport.md)
|
||||||
|
:eu:
|
||||||
|
:greece:
|
||||||
|
|
||||||
A program to download photo and video from [any site](#supported-sites) (e.g. Reddit, Twitter, Instagram).
|
A program to download photo and video from [any site](#supported-sites) (e.g. YouTube, YouTube Music, OnlyFans, Reddit, Twitter, Mastodon, Instagram, Threads, Facebook, TikTok, RedGifs, JustForFans, PornHub, XHamster, XVIDEOS, ThisVid, LPSG, Pinterest).
|
||||||
|
|
||||||
Do you like this program? Consider adding to my coffee fund by making a donation to show your support. :blush:
|
**If you like SCrawler, please like the program on [this site](https://alternativeto.net/software/scrawler/about/) and/or [this](https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml)**
|
||||||
|
<!---Do you like this program? Consider adding to my coffee fund by making a donation to show your support. :blush:
|
||||||
|
[](https://ko-fi.com/andyprogram)--->
|
||||||
|
**Bitcoin**: BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET
|
||||||
|
|
||||||
[](https://ko-fi.com/andyprogram)
|
[](https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml#status)
|
||||||
|
|
||||||
**Bitcoin**: bitcoin:BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET
|
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
[**YouTube standalone application:**](https://github.com/AAndyProgram/SCrawler/wiki/YouTube-downloader)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
# What can program do:
|
# What can program do:
|
||||||
- Download pictures and videos from users' profiles and subreddits:
|
- Download pictures and videos from users' profiles and subreddits:
|
||||||
- Reddit images;
|
- YouTube videos, shorts, community feeds, users, artists, playlists, music, tracks;
|
||||||
- Reddit galleries of images;
|
- Reddit images, galleries of images, videos, saved posts;
|
||||||
- Redgifs hosted videos (https://www.redgifs.com/);
|
- Redgifs videos (https://www.redgifs.com/);
|
||||||
- Reddit hosted videos (downloading Reddit hosted video is going through ffmpeg (**ffmpeg only works with the x64 program**));
|
- Twitter images and videos, saved (bookmarked) posts;
|
||||||
- Twitter images and videos;
|
- OnlyFans images and videos, saved (bookmarked) posts;
|
||||||
- Instagram images and videos.
|
- JustForFans images and videos, saved (bookmarked) posts;
|
||||||
- Imgur images, galleries and videos
|
- Mastodon images and videos, saved (bookmarked) posts;
|
||||||
- Gfycat videos
|
- Instagram images and videos, tagged posts, stories, saved posts;
|
||||||
|
- Threads images and videos;
|
||||||
|
- Facebook images and videos, stories, saved posts;
|
||||||
|
- TikTok videos;
|
||||||
|
- Pinterest boards, users, saved posts;
|
||||||
|
- Imgur images, galleries and videos;
|
||||||
|
- Gfycat videos;
|
||||||
|
- PornHub images, videos, save (liked) posts, search queries, search categories;
|
||||||
|
- XHamster images, videos, saved posts, search queries, search categories, search tags;
|
||||||
|
- XVIDEOS videos, saved posts, search queries, search categories;
|
||||||
|
- ThisVid images, videos, saved posts, search queries, search categories, search tags;
|
||||||
- [Other](#supported-sites) supported sites
|
- [Other](#supported-sites) supported sites
|
||||||
- Parse [channel and view data](https://github.com/AAndyProgram/SCrawler/wiki/Channels).
|
- Parse [Reddit channel and view data](https://github.com/AAndyProgram/SCrawler/wiki/Channels)
|
||||||
- Download [saved Reddit and Instagram posts](https://github.com/AAndyProgram/SCrawler/wiki/Home#saved-posts).
|
- Download [saved posts](https://github.com/AAndyProgram/SCrawler/wiki/Home#saved-posts)
|
||||||
- Add users from parsed channel.
|
- Add users from parsed channel
|
||||||
- **Advanced user management.**
|
- **Advanced user management**
|
||||||
- Labeling users.
|
- **Automation** ([downloading data automatically](https://github.com/AAndyProgram/SCrawler/wiki/Settings#automation) every ```X``` minutes)
|
||||||
- Adding users to favorites and temporary.
|
- **Feed** ([feed](https://github.com/AAndyProgram/SCrawler/wiki#feed) of downloaded media files and subscriptions posts)
|
||||||
- Filter exists users by label or group.
|
- Multiple accounts support
|
||||||
|
- Labeling users
|
||||||
|
- Create [download groups](https://github.com/AAndyProgram/SCrawler/wiki/Settings#download-groups)
|
||||||
|
- Adding users to favorites and temporary
|
||||||
|
- Adding users and search queries in the **Subscription** mode (download post preview, but do not download the media file)
|
||||||
|
- [Filter exists users](https://github.com/AAndyProgram/SCrawler/wiki#view) by label or group
|
||||||
- Selection of media types you want to download (images only, videos only, both)
|
- Selection of media types you want to download (images only, videos only, both)
|
||||||
- Download a special video, image or gallery
|
- [Download a special video](https://github.com/AAndyProgram/SCrawler/wiki#download-separate-video), image or gallery
|
||||||
- Making collections (grouping users into collections)
|
- Making [collections](https://github.com/AAndyProgram/SCrawler/wiki#collections) (grouping users into collections)
|
||||||
- Specifying a user folder (for downloading data to another location)
|
- Specifying a user folder (for downloading data to another location)
|
||||||
- Changing user icons
|
- Changing user icons
|
||||||
- Changing view modes
|
- Changing [view modes](https://github.com/AAndyProgram/SCrawler/wiki#view)
|
||||||
- ...and many others...
|
- ...and many others...
|
||||||
|
|
||||||
# Supported sites
|
# Supported sites
|
||||||
|
- **YouTube**
|
||||||
|
- **YouTube Music**
|
||||||
- **Reddit**
|
- **Reddit**
|
||||||
- **Twitter**
|
- **Twitter**
|
||||||
|
- **OnlyFans**
|
||||||
|
- **Mastodon**
|
||||||
- **Instagram**
|
- **Instagram**
|
||||||
|
- **Threads**
|
||||||
|
- **Facebook**
|
||||||
|
- JustForFans
|
||||||
|
- TikTok
|
||||||
- RedGifs
|
- RedGifs
|
||||||
|
- Pinterest
|
||||||
- Imgur
|
- Imgur
|
||||||
- Gfycat
|
- Gfycat
|
||||||
- LPSG
|
- LPSG
|
||||||
- XVIDEOS
|
- **PornHub**
|
||||||
|
- **XHamster**
|
||||||
|
- **XVIDEOS**
|
||||||
|
- **ThisVid**
|
||||||
- [Other sites](Plugins.md)
|
- [Other sites](Plugins.md)
|
||||||
|
|
||||||
# How does it works:
|
**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**
|
||||||
|
|
||||||
|
# How it works
|
||||||
|
|
||||||
First, the program downloads the full profile. After the program downloads only new posts. The program remembers downloaded posts.
|
First, the program downloads the full profile. After the program downloads only new posts. The program remembers downloaded posts.
|
||||||
|
|
||||||
## Reddit
|
|
||||||
|
|
||||||
The program parses all user posts, obtain MD5 images hash and compares them with existing ones to remove duplicates. Then the media will be downloaded.
|
|
||||||
|
|
||||||
## Other sites
|
|
||||||
|
|
||||||
The program parses all user posts and compares file names with existing ones to remove duplicates. Then the media will be downloaded.
|
|
||||||
|
|
||||||
You can read about Instagram restrictions [here](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram-limits)
|
|
||||||
|
|
||||||
## How to request a new site
|
## How to request a new site
|
||||||
|
|
||||||
Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about
|
<!---Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about--->
|
||||||
|
**I'm currently not accepting requests to develop new sites.**
|
||||||
|
|
||||||
# Requirements
|
# Requirements
|
||||||
|
|
||||||
- Windows 7, 8, 9, 10, 11 with NET Framework 4.6.1 or higher (v4.6.1 must be installed). You can check version compatibility with this [tool](Tools/NET.FrameworkVersion.ps1).
|
- Windows 10, 11 with NET Framework 4.6.1 or higher (v4.6.1 must be installed). You can check version compatibility with this [tool](Tools/NET.FrameworkVersion.ps1).
|
||||||
- Authorization [cookies](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-set-up-cookies) and [tokens](https://github.com/AAndyProgram/SCrawler/wiki/Settings#how-to-find-twitter-tokens) for Twitter (if you want to download data from Twitter)
|
- **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**
|
||||||
- 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.**
|
|
||||||
|
|
||||||
# Guide
|
# Guide
|
||||||
|
|
||||||
|
- [Main window](https://github.com/AAndyProgram/SCrawler/wiki)
|
||||||
|
- [Users](https://github.com/AAndyProgram/SCrawler/wiki/Users)
|
||||||
|
- [Add/Edit/Delete users](https://github.com/AAndyProgram/SCrawler/wiki/Users)
|
||||||
|
- [Collections](https://github.com/AAndyProgram/SCrawler/wiki#collections)
|
||||||
|
- [User operations](https://github.com/AAndyProgram/SCrawler/wiki#context-menu)
|
||||||
|
- [User labels](https://github.com/AAndyProgram/SCrawler/wiki/Users#labels)
|
||||||
|
- **[DOWNLOAD](https://github.com/AAndyProgram/SCrawler/wiki#download)**
|
||||||
|
- [Automation](https://github.com/AAndyProgram/SCrawler/wiki/Settings#automation)
|
||||||
|
- [Download groups](https://github.com/AAndyProgram/SCrawler/wiki/Settings#download-groups)
|
||||||
|
- [Downloading information](https://github.com/AAndyProgram/SCrawler/wiki#info)
|
||||||
|
- [Reddit channels](https://github.com/AAndyProgram/SCrawler/wiki/Channels)
|
||||||
|
- [Saved posts](https://github.com/AAndyProgram/SCrawler/wiki#saved-posts)
|
||||||
|
- [View modes, filters](https://github.com/AAndyProgram/SCrawler/wiki#view)
|
||||||
|
- **[SETTINGS](https://github.com/AAndyProgram/SCrawler/wiki/Settings)**
|
||||||
|
- **[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**
|
||||||
|
- [Reddit](https://github.com/AAndyProgram/SCrawler/wiki/Settings#reddit)
|
||||||
|
- [Twitter](https://github.com/AAndyProgram/SCrawler/wiki/Settings#twitter)
|
||||||
|
- [OnlyFans](https://github.com/AAndyProgram/SCrawler/wiki/Settings#onlyfans)
|
||||||
|
- [Mastodon](https://github.com/AAndyProgram/SCrawler/wiki/Settings#mastodon)
|
||||||
|
- [Instagram](https://github.com/AAndyProgram/SCrawler/wiki/Settings#instagram)
|
||||||
|
- [Threads](https://github.com/AAndyProgram/SCrawler/wiki/Settings#threads)
|
||||||
|
- [Facebook](https://github.com/AAndyProgram/SCrawler/wiki/Settings#facebook)
|
||||||
|
- [JustForFans](https://github.com/AAndyProgram/SCrawler/wiki/Settings#justforfans)
|
||||||
|
- [TikTok](https://github.com/AAndyProgram/SCrawler/wiki/Settings#tiktok)
|
||||||
|
- [RedGifs](https://github.com/AAndyProgram/SCrawler/wiki/Settings#redgifs)
|
||||||
|
- [YouTube](https://github.com/AAndyProgram/SCrawler/wiki/Settings#youtube)
|
||||||
|
- [Pinterest](https://github.com/AAndyProgram/SCrawler/wiki/Settings#Pinterest)
|
||||||
|
- [PornHub](https://github.com/AAndyProgram/SCrawler/wiki/Settings#pornhub)
|
||||||
|
- [XHamster](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xhamster)
|
||||||
|
- [XVIDEOS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#xvideos)
|
||||||
|
- [ThisVid](https://github.com/AAndyProgram/SCrawler/wiki/Settings#thisvid)
|
||||||
|
- [LPSG](https://github.com/AAndyProgram/SCrawler/wiki/Settings#lpsg)
|
||||||
|
|
||||||
**Full guide you can find [here](https://github.com/AAndyProgram/SCrawler/wiki)**
|
**Full guide you can find [here](https://github.com/AAndyProgram/SCrawler/wiki)**
|
||||||
|
|
||||||
|
**Video on how to configure**
|
||||||
|
|
||||||
|
[](https://www.youtube.com/watch?v=XDn7zG4I700)
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
**Just unzip the program archive to any folder, copy the file ```ffmpeg.exe``` into it and enjoy.** :blush:
|
**Just download the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest), unzip the program archive to any folder and enjoy.** :blush:
|
||||||
|
|
||||||
**Don't put program in the ```Program Files``` system folder (this is portable program and program settings are stored in the program folder)**
|
**Don't put program in the ```Program Files``` system folder (this is portable program and program settings are stored in the program folder)**
|
||||||
|
|
||||||
@@ -94,53 +159,60 @@ Read [here](CONTRIBUTING.md#how-to-request-a-new-site) about
|
|||||||
|
|
||||||
Just download [latest](https://github.com/AAndyProgram/SCrawler/releases/latest) version and unpack it into the program folder. **Before starting a new version, I recommend making a backup copy of the program settings folder.**
|
Just download [latest](https://github.com/AAndyProgram/SCrawler/releases/latest) version and unpack it into the program folder. **Before starting a new version, I recommend making a backup copy of the program settings folder.**
|
||||||
|
|
||||||
# How to build from source
|
# [How to build from source](CONTRIBUTING.md#how-to-build-from-source)
|
||||||
|
|
||||||
1. Delete the "PersonalUtilities" project from the solution.
|
# [How to make a plugin](https://github.com/AAndyProgram/SCrawler/wiki/Plugins)
|
||||||
1. Add the latest version of the "PersonalUtilities.dll" library (from the [latest release](https://github.com/AAndyProgram/SCrawler/releases/latest)).
|
|
||||||
1. Import PersonalUtilities.Functions for the whole project.
|
|
||||||
|
|
||||||
# How to make a plugin
|
# [How to support](HowToSupport.md)
|
||||||
|
|
||||||
Read about how to make plugin [here](https://github.com/AAndyProgram/SCrawler/wiki/Plugins).
|
|
||||||
|
|
||||||
# How to support
|
|
||||||
|
|
||||||
Read more about how to support the program [here](HowToSupport.md).
|
|
||||||
|
|
||||||
# Settings and usage
|
# Settings and usage
|
||||||
|
|
||||||
The program has an intuitive interface.
|
The program has an intuitive interface.
|
||||||
|
|
||||||
You need to set up authorization for Twitter and Instagram:
|
**[SITES REQUIREMENTS](https://github.com/AAndyProgram/SCrawler/wiki/Settings#sites-requirements)**
|
||||||
- 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**.
|
[](https://www.youtube.com/watch?v=XDn7zG4I700)
|
||||||
|
|
||||||
You can add users by patterns:
|
Just add a user profile and **click the ```Download``` button**.
|
||||||
- https://www.instagram.com/SomeUserName
|
|
||||||
- https://twitter.com/SomeUserName
|
|
||||||
- https://reddit.com/user/SomeUserName
|
|
||||||
- https://reddit.com/r/SomeSubredditName
|
|
||||||
- https://www.redgifs.com/users/SomeUserName
|
|
||||||
- u/SomeUserName
|
|
||||||
- r/SomeSubredditName
|
|
||||||
- SomeUserName (in this case, you need to select the user's site)
|
|
||||||
- SomeSubredditName
|
|
||||||
|
|
||||||
Read more about adding users and subreddits [here](https://github.com/AAndyProgram/SCrawler/wiki/Users)
|
```mermaid
|
||||||
|
stateDiagram
|
||||||
|
Start: Add site credentials
|
||||||
|
What: What would I like to do
|
||||||
|
DownUser: Download user
|
||||||
|
DownVideo: Download video
|
||||||
|
AUser: Add user (1)
|
||||||
|
OVIF: Open standalone downloader (2)
|
||||||
|
AVideo: Add video url
|
||||||
|
F5: Press 'F5' or click the download button
|
||||||
|
[*]-->Start
|
||||||
|
Start-->What
|
||||||
|
What-->DownUser
|
||||||
|
What-->DownVideo
|
||||||
|
DownUser-->AUser
|
||||||
|
DownVideo-->OVIF
|
||||||
|
OVIF-->AVideo
|
||||||
|
AVideo-->F5
|
||||||
|
AUser-->F5
|
||||||
|
F5-->[*]
|
||||||
|
```
|
||||||
|
1. Press `Insert` or click the `Download` button ([read more here](https://github.com/AAndyProgram/SCrawler/wiki#users-list), [hot keys](https://github.com/AAndyProgram/SCrawler/wiki#hot-keys))
|
||||||
|
2. Click the `Download` button, then `Standalone downloader` ([read more here](https://github.com/AAndyProgram/SCrawler/wiki#download-separate-video))
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
# Using program as just video downloader
|
|
||||||
|
|
||||||
Create a shortcut for the program. Open shortcut properties. In the ```Shortcut``` tab, in the ```Target``` field, just add the letter ```v``` at the end across the space.
|
|
||||||
|
|
||||||
Example: ```D:\Programs\SCrawler\SCrawler.exe v```
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
# Contact me
|
# Contact me
|
||||||
|
|
||||||
[](https://matrix.to/#/@andyprogram:matrix.org)
|
Discord server: https://discord.gg/uFNUXvFFmg
|
||||||
|
|
||||||
|
<!--
|
||||||
|
[e-mail](mailto:andyprogram@proton.me): andyprogram@proton.me
|
||||||
|
|
||||||
|
Matrix (Element): https://matrix.to/#/@andyprogram:matrix.org
|
||||||
|
|
||||||
|
Discord (contact the developer): andyprogram
|
||||||
|
|
||||||
|
Discord server: https://discord.gg/uFNUXvFFmg
|
||||||
|
|
||||||
|
[Wire](https://account.wire.com/user-profile/?id=93985052-cf2c-4b72-ac75-bbe3231cf544): @andyprogram
|
||||||
|
-->
|
||||||
|
|||||||
@@ -30,19 +30,5 @@ Friend Module Declarations
|
|||||||
Friend ReadOnly Property FileRegExExt As New RParams(FileUrlRegexDefault, 0, Nothing, InputForbidRemover)
|
Friend ReadOnly Property FileRegExExt As New RParams(FileUrlRegexDefault, 0, Nothing, InputForbidRemover)
|
||||||
Friend ReadOnly Property FileRegExExt2 As New RParams("([^/]+?)(?=(\Z|&))", 0, Nothing, InputForbidRemover)
|
Friend ReadOnly Property FileRegExExt2 As New RParams("([^/]+?)(?=(\Z|&))", 0, Nothing, InputForbidRemover)
|
||||||
Friend ReadOnly Property FileExistsRegEx As RParams = RParams.DMS(FileUrlRegexDefault, 2)
|
Friend ReadOnly Property FileExistsRegEx As RParams = RParams.DMS(FileUrlRegexDefault, 2)
|
||||||
Private Class PUMComparer : Implements IEqualityComparer, IEqualityComparer(Of PluginUserMedia)
|
Friend ReadOnly TempListAddParams As New ListAddParams(LAP.NotContainsOnly) With {.Comparer = New FComparer(Of PluginUserMedia)(Function(x, y) x.URL = y.URL)}
|
||||||
Private Overloads Function Equals(ByVal x As PluginUserMedia, ByVal y As PluginUserMedia) As Boolean Implements IEqualityComparer(Of PluginUserMedia).Equals
|
|
||||||
Return x.URL = y.URL
|
|
||||||
End Function
|
|
||||||
Private Function IEqualityComparer_Equals(ByVal x As Object, ByVal y As Object) As Boolean Implements IEqualityComparer.Equals
|
|
||||||
Return DirectCast(x, PluginUserMedia).URL = DirectCast(y, PluginUserMedia).URL
|
|
||||||
End Function
|
|
||||||
Private Overloads Function GetHashCode(ByVal Obj As Object) As Integer Implements IEqualityComparer.GetHashCode
|
|
||||||
Throw New NotImplementedException()
|
|
||||||
End Function
|
|
||||||
Private Overloads Function GetHashCode(ByVal Obj As PluginUserMedia) As Integer Implements IEqualityComparer(Of PluginUserMedia).GetHashCode
|
|
||||||
Throw New NotImplementedException()
|
|
||||||
End Function
|
|
||||||
End Class
|
|
||||||
Friend ReadOnly TempListAddParams As New ListAddParams(LAP.NotContainsOnly) With {.Comparer = New PUMComparer}
|
|
||||||
End Module
|
End Module
|
||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.0.0.2")>
|
<Assembly: AssemblyVersion("2022.10.12.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.0.2")>
|
<Assembly: AssemblyFileVersion("2022.10.12.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
.LoadSettings()
|
.LoadSettings()
|
||||||
Else
|
Else
|
||||||
.CookiesDomain = "www.lpsg.com"
|
.CookiesDomain = "www.lpsg.com"
|
||||||
.Cookies = New CookieKeeper("www.lpsg.com")
|
.Cookies = New CookieKeeper(.CookiesDomain)
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
End Sub
|
End Sub
|
||||||
@@ -54,6 +54,10 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Update"
|
#Region "Update"
|
||||||
|
Public Sub BeginEdit() Implements ISiteSettings.BeginEdit
|
||||||
|
End Sub
|
||||||
|
Public Sub EndEdit() Implements ISiteSettings.EndEdit
|
||||||
|
End Sub
|
||||||
Public Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
Public Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub EndUpdate() Implements ISiteSettings.EndUpdate
|
Public Sub EndUpdate() Implements ISiteSettings.EndUpdate
|
||||||
@@ -81,7 +85,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Else
|
Else
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End If
|
End If
|
||||||
Catch ex As Exception
|
Catch
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
@@ -91,10 +95,13 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData
|
Public Function GetSpecialData(ByVal URL As String, ByVal Path As String, ByVal AskForPath As Boolean) As IEnumerable(Of PluginUserMedia) Implements ISiteSettings.GetSpecialData
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
Public Function Available(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.Available
|
Public Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available
|
||||||
Return True
|
Return If(Responser.Cookies?.Count, 0) > 0
|
||||||
End Function
|
End Function
|
||||||
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
Public Function GetUserPostUrl(ByVal UserID As String, ByVal PostID As String) As String Implements ISiteSettings.GetUserPostUrl
|
||||||
|
Return String.Empty
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
@@ -38,7 +38,8 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
||||||
Public Property DataPath As String Implements IPluginContentProvider.DataPath
|
Public Property DataPath As String Implements IPluginContentProvider.DataPath
|
||||||
Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit
|
Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit
|
||||||
Public Property PostsDateLimit As Date? Implements IPluginContentProvider.PostsDateLimit
|
Public Property DownloadDateFrom As Date? Implements IPluginContentProvider.DownloadDateFrom
|
||||||
|
Public Property DownloadDateTo As Date? Implements IPluginContentProvider.DownloadDateTo
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Interface exchange options"
|
#Region "Interface exchange options"
|
||||||
Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet
|
Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet
|
||||||
@@ -95,7 +96,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
If Responser.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then
|
If Responser.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then
|
||||||
LogProvider.Add("LPSG not available")
|
LogProvider.Add("LPSG not available")
|
||||||
Else
|
Else
|
||||||
LogProvider.Add(ex, "[LPSG.UserData.GetMedia]")
|
LogProvider.Add(ex, $"[LPSG.UserData.GetMedia({Name})]")
|
||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
End Sub
|
End Sub
|
||||||
@@ -152,7 +153,8 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
If Responser.Client.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then
|
If Responser.Client.StatusCode = Net.HttpStatusCode.ServiceUnavailable Then
|
||||||
LogProvider.Add("LPSG not available")
|
LogProvider.Add("LPSG not available")
|
||||||
Else
|
Else
|
||||||
m.DownloadState = UStates.Skipped
|
m.DownloadState = UStates.Missing
|
||||||
|
m.Attempts += 1
|
||||||
End If
|
End If
|
||||||
End Try
|
End Try
|
||||||
RaiseEvent ProgressChanged(1)
|
RaiseEvent ProgressChanged(1)
|
||||||
|
|||||||
@@ -47,8 +47,7 @@ Friend NotInheritable Class M3U8
|
|||||||
CachePath.Delete(SFO.Path, SFODelete.None, EDP.None)
|
CachePath.Delete(SFO.Path, SFODelete.None, EDP.None)
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Friend Shared Function Download(ByVal URL As String, ByVal Appender As String, ByVal ffmpegFile As SFile, ByVal f As SFile,
|
Friend Shared Function Download(ByVal URL As String, ByVal Appender As String, ByVal ffmpegFile As SFile, ByVal f As SFile, ByRef Logger As ILogProvider) As SFile
|
||||||
ByRef Logger As ILogProvider) As SFile
|
|
||||||
Try
|
Try
|
||||||
If Not URL.IsEmptyString Then
|
If Not URL.IsEmptyString Then
|
||||||
Using w As New WebClient
|
Using w As New WebClient
|
||||||
@@ -62,7 +61,7 @@ Friend NotInheritable Class M3U8
|
|||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If Not ex.HelpLink = 1 Then Logger.Add(ex, "[M3U8.Download]")
|
If Not ex.HelpLink = 1 Then Logger.Add(ex, $"[M3U8.Download({URL}, {Appender}, {ffmpegFile}, {f})]")
|
||||||
Throw ex
|
Throw ex
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.0.0.2")>
|
<Assembly: AssemblyVersion("2022.10.12.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.0.2")>
|
<Assembly: AssemblyFileVersion("2022.10.12.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
53
SCrawler.Plugin.XVIDEOS/SettingsForm.Designer.vb
generated
@@ -25,14 +25,9 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SettingsForm))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SettingsForm))
|
||||||
Me.LIST_DOMAINS = New System.Windows.Forms.ListBox()
|
Me.LIST_DOMAINS = New System.Windows.Forms.ListBox()
|
||||||
Me.ToolbarTOP = New System.Windows.Forms.ToolStrip()
|
|
||||||
Me.BTT_ADD = New System.Windows.Forms.ToolStripButton()
|
|
||||||
Me.BTT_DELETE = New System.Windows.Forms.ToolStripButton()
|
|
||||||
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
CONTAINER_MAIN.TopToolStripPanel.SuspendLayout()
|
|
||||||
CONTAINER_MAIN.SuspendLayout()
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
Me.ToolbarTOP.SuspendLayout()
|
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN
|
'CONTAINER_MAIN
|
||||||
@@ -41,7 +36,7 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
'CONTAINER_MAIN.ContentPanel
|
'CONTAINER_MAIN.ContentPanel
|
||||||
'
|
'
|
||||||
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_DOMAINS)
|
CONTAINER_MAIN.ContentPanel.Controls.Add(Me.LIST_DOMAINS)
|
||||||
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 266)
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(384, 291)
|
||||||
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
@@ -50,52 +45,15 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
CONTAINER_MAIN.Size = New System.Drawing.Size(384, 291)
|
CONTAINER_MAIN.Size = New System.Drawing.Size(384, 291)
|
||||||
CONTAINER_MAIN.TabIndex = 0
|
CONTAINER_MAIN.TabIndex = 0
|
||||||
'
|
'
|
||||||
'CONTAINER_MAIN.TopToolStripPanel
|
|
||||||
'
|
|
||||||
CONTAINER_MAIN.TopToolStripPanel.Controls.Add(Me.ToolbarTOP)
|
|
||||||
'
|
|
||||||
'LIST_DOMAINS
|
'LIST_DOMAINS
|
||||||
'
|
'
|
||||||
Me.LIST_DOMAINS.Dock = System.Windows.Forms.DockStyle.Fill
|
Me.LIST_DOMAINS.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
Me.LIST_DOMAINS.FormattingEnabled = True
|
Me.LIST_DOMAINS.FormattingEnabled = True
|
||||||
Me.LIST_DOMAINS.Location = New System.Drawing.Point(0, 0)
|
Me.LIST_DOMAINS.Location = New System.Drawing.Point(0, 0)
|
||||||
Me.LIST_DOMAINS.Name = "LIST_DOMAINS"
|
Me.LIST_DOMAINS.Name = "LIST_DOMAINS"
|
||||||
Me.LIST_DOMAINS.Size = New System.Drawing.Size(384, 266)
|
Me.LIST_DOMAINS.Size = New System.Drawing.Size(384, 291)
|
||||||
Me.LIST_DOMAINS.TabIndex = 0
|
Me.LIST_DOMAINS.TabIndex = 0
|
||||||
'
|
'
|
||||||
'ToolbarTOP
|
|
||||||
'
|
|
||||||
Me.ToolbarTOP.Dock = System.Windows.Forms.DockStyle.None
|
|
||||||
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
|
||||||
Me.ToolbarTOP.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_ADD, Me.BTT_DELETE})
|
|
||||||
Me.ToolbarTOP.Location = New System.Drawing.Point(0, 0)
|
|
||||||
Me.ToolbarTOP.Name = "ToolbarTOP"
|
|
||||||
Me.ToolbarTOP.Size = New System.Drawing.Size(384, 25)
|
|
||||||
Me.ToolbarTOP.Stretch = True
|
|
||||||
Me.ToolbarTOP.TabIndex = 0
|
|
||||||
'
|
|
||||||
'BTT_ADD
|
|
||||||
'
|
|
||||||
Me.BTT_ADD.AutoToolTip = False
|
|
||||||
Me.BTT_ADD.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer))
|
|
||||||
Me.BTT_ADD.ForeColor = System.Drawing.Color.DarkGreen
|
|
||||||
Me.BTT_ADD.Image = CType(resources.GetObject("BTT_ADD.Image"), System.Drawing.Image)
|
|
||||||
Me.BTT_ADD.ImageTransparentColor = System.Drawing.Color.Magenta
|
|
||||||
Me.BTT_ADD.Name = "BTT_ADD"
|
|
||||||
Me.BTT_ADD.Size = New System.Drawing.Size(49, 22)
|
|
||||||
Me.BTT_ADD.Text = "Add"
|
|
||||||
'
|
|
||||||
'BTT_DELETE
|
|
||||||
'
|
|
||||||
Me.BTT_DELETE.AutoToolTip = False
|
|
||||||
Me.BTT_DELETE.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer))
|
|
||||||
Me.BTT_DELETE.ForeColor = System.Drawing.Color.Maroon
|
|
||||||
Me.BTT_DELETE.Image = CType(resources.GetObject("BTT_DELETE.Image"), System.Drawing.Image)
|
|
||||||
Me.BTT_DELETE.ImageTransparentColor = System.Drawing.Color.Magenta
|
|
||||||
Me.BTT_DELETE.Name = "BTT_DELETE"
|
|
||||||
Me.BTT_DELETE.Size = New System.Drawing.Size(60, 22)
|
|
||||||
Me.BTT_DELETE.Text = "Delete"
|
|
||||||
'
|
|
||||||
'SettingsForm
|
'SettingsForm
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
@@ -112,18 +70,11 @@ Partial Public Class SettingsForm : Inherits System.Windows.Forms.Form
|
|||||||
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
|
||||||
Me.Text = "Settings"
|
Me.Text = "Settings"
|
||||||
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
CONTAINER_MAIN.TopToolStripPanel.ResumeLayout(False)
|
|
||||||
CONTAINER_MAIN.TopToolStripPanel.PerformLayout()
|
|
||||||
CONTAINER_MAIN.ResumeLayout(False)
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
CONTAINER_MAIN.PerformLayout()
|
CONTAINER_MAIN.PerformLayout()
|
||||||
Me.ToolbarTOP.ResumeLayout(False)
|
|
||||||
Me.ToolbarTOP.PerformLayout()
|
|
||||||
Me.ResumeLayout(False)
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private WithEvents LIST_DOMAINS As Windows.Forms.ListBox
|
Private WithEvents LIST_DOMAINS As Windows.Forms.ListBox
|
||||||
Private WithEvents ToolbarTOP As Windows.Forms.ToolStrip
|
|
||||||
Private WithEvents BTT_ADD As Windows.Forms.ToolStripButton
|
|
||||||
Private WithEvents BTT_DELETE As Windows.Forms.ToolStripButton
|
|
||||||
End Class
|
End Class
|
||||||
@@ -120,60 +120,7 @@
|
|||||||
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="ToolbarTOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>17, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="BTT_ADD.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
|
||||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAN+SURBVEhLrZVZSFRRGMdvKa6oE5Y1bpTtRY2pJYk3ayyd
|
|
||||||
xgrvaDXlQotLKVqSo7QR2QIREUX0EgUSET1V9NTyYBHt6ZTOqNPY7DomWNbriX/fuYzkg2jY/eAPM5zD
|
|
||||||
//+d7/7OvcJkFXIlqDX0ahDGE18LbJt6cSOtWWTaDhGbPonQdZEsIrY7cuWQwLapFzfZ9FlkES8ERL8W
|
|
||||||
EPteQMLHYFR69coFUNcs5o2AWe+nYW5HKFK7otHkL1IuoKBbZLzzFHMo0qwxWN8zG2eHSpULkGxalmIO
|
|
||||||
w2qrCvm2eJr/AlwZrlIuYN9XHcuwqKC3JWC3czGqXKm4OVKvXMARTyHTfUlEmWspatxp9D8Ld0ZM/xYw
|
|
||||||
EeejMnkMv0tdS1DnzkBzv4jT/jy0fm/EzLvhE0p9P7JV7jB3lHHiu6BHhMGmRbkjH3WebTjq245z/nL6
|
|
||||||
nYFjvnVo8efjzKAOrcONuD1skoNuDNfj8lAFWgZL0OQrphEWoMa1E+oHkZADuHn0K2L8rYDEjhBoCENO
|
|
||||||
itSXgr2u5TjkycTx/g1koMP5Qb0ccHogj8xEVLlTsaNvIXJ750BjiUZSewhU5LPTIv0N4J1zc76osUTR
|
|
||||||
ZjWKAuaHvZk44dPijF9HAXk4OaCFyZdNzyIde5zLUGifh5yeOKzoikJ8RzBU7wSE06Us+jQmoMAqIpnM
|
|
||||||
U6mDXJtaxrDSrUGDdw2O9a/HCTI96suByZuNw57VqKa1MtcybLXPxTo6qWzeHgx+Gbn5tCcCpHdjAnbZ
|
|
||||||
NmKtNZYwTESJYwnq6WE2EinNZMhNj3izZDXQqKppJJymLfZkZHfHYWlnJNQfghBFIw5rEyA8Jj2ggJdj
|
|
||||||
Ag769cw0ZGAtP8rYhZH97NLPanbpVxW7/PMAu/atlnSQzNeg0qWB0bkIensSmj3lqHUaf1d4ilipU2LG
|
|
||||||
LxIzWCUmfSZ9JL2VmBzAMR0PsVHxTbeGmlmleyWMjoXYTKfMpNPWuI3y2oTimE5WfOP1bw1sBz2X/N4E
|
|
||||||
pNONnm8Oxx6HQTYJbJt6cZOLAzUsrzdeftHxt2kskbLbFpjx/xY3OeWtYKssMUgkUmYQzvzbUDzK+f8W
|
|
||||||
N6l3lbCk9lCoCMOI5wKCnhIlZgUD9tkNjJuHUefTOYaPKOCNggEl3RILp84FukDCQ9I9CnihYEBxpySP
|
|
||||||
hNiWL5DURnqmVACxzI3G1aScC8If1IGynvf45pQAAAAASUVORK5CYII=
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="BTT_DELETE.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
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">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAIAKgIAABGDgAAMDAAAAEA
|
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAIAKgIAABGDgAAMDAAAAEA
|
||||||
|
|||||||
@@ -8,28 +8,24 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports PersonalUtilities.Forms.Toolbars
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
Imports PersonalUtilities.Forms
|
Imports PersonalUtilities.Forms
|
||||||
Public Class SettingsForm : Implements IOkCancelToolbar
|
Public Class SettingsForm
|
||||||
Private ReadOnly MyDefs As DefaultFormProps
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
Private ReadOnly Property Settings As SiteSettings
|
Private ReadOnly Property Settings As SiteSettings
|
||||||
Friend Sub New(ByRef s As SiteSettings)
|
Friend Sub New(ByRef s As SiteSettings, ByRef Design As XML.XmlFile)
|
||||||
InitializeComponent()
|
InitializeComponent()
|
||||||
MyDefs = New DefaultFormProps
|
|
||||||
Settings = s
|
Settings = s
|
||||||
|
MyDefs = New DefaultFormOptions(Me, Design)
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub SettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Private Sub SettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Try
|
|
||||||
With MyDefs
|
With MyDefs
|
||||||
.MyViewInitialize(Me, Settings.Design, True)
|
.MyViewInitialize(True)
|
||||||
|
.AddEditToolbar({EditToolbar.ControlItem.Add, EditToolbar.ControlItem.Delete})
|
||||||
.AddOkCancelToolbar()
|
.AddOkCancelToolbar()
|
||||||
.DelegateClosingChecker()
|
|
||||||
If Settings.Domains.Count > 0 Then Settings.Domains.ForEach(Sub(d) LIST_DOMAINS.Items.Add(d))
|
If Settings.Domains.Count > 0 Then Settings.Domains.ForEach(Sub(d) LIST_DOMAINS.Items.Add(d))
|
||||||
.EndLoaderOperations()
|
.EndLoaderOperations()
|
||||||
End With
|
End With
|
||||||
Catch ex As Exception
|
|
||||||
MyDefs.InvokeLoaderError(ex)
|
|
||||||
End Try
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttOK() Implements IOkCancelToolbar.ToolbarBttOK
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
Settings.Domains.Clear()
|
Settings.Domains.Clear()
|
||||||
With LIST_DOMAINS
|
With LIST_DOMAINS
|
||||||
If .Items.Count > 0 Then
|
If .Items.Count > 0 Then
|
||||||
@@ -39,10 +35,7 @@ Public Class SettingsForm : Implements IOkCancelToolbar
|
|||||||
Settings.UpdateDomains()
|
Settings.UpdateDomains()
|
||||||
MyDefs.CloseForm()
|
MyDefs.CloseForm()
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub ToolbarBttCancel() Implements IOkCancelToolbar.ToolbarBttCancel
|
Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonAddClick
|
||||||
MyDefs.CloseForm(Windows.Forms.DialogResult.Cancel)
|
|
||||||
End Sub
|
|
||||||
Private Sub BTT_ADD_Click(sender As Object, e As EventArgs) Handles BTT_ADD.Click
|
|
||||||
Dim nd$ = InputBoxE("Enter a new domain using the pattern [xvideos.com]:", "New domain")
|
Dim nd$ = InputBoxE("Enter a new domain using the pattern [xvideos.com]:", "New domain")
|
||||||
If Not nd.IsEmptyString Then
|
If Not nd.IsEmptyString Then
|
||||||
If Not LIST_DOMAINS.Items.Contains(nd) Then
|
If Not LIST_DOMAINS.Items.Contains(nd) Then
|
||||||
@@ -52,11 +45,10 @@ Public Class SettingsForm : Implements IOkCancelToolbar
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub BTT_DELETE_Click(sender As Object, e As EventArgs) Handles BTT_DELETE.Click
|
Private Sub MyDefs_ButtonDeleteClickE(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonDeleteClickE
|
||||||
If _LatestSelected.ValueBetween(0, LIST_DOMAINS.Items.Count - 1) Then
|
If _LatestSelected.ValueBetween(0, LIST_DOMAINS.Items.Count - 1) Then
|
||||||
Dim n$ = LIST_DOMAINS.Items(_LatestSelected)
|
Dim n$ = LIST_DOMAINS.Items(_LatestSelected)
|
||||||
If MsgBoxE({$"Are you sure you want to delete the [{n}] domain?",
|
If MsgBoxE({$"Are you sure you want to delete the [{n}] domain?", "Removing domains"}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||||
"Removing domains"}, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
|
||||||
LIST_DOMAINS.Items.RemoveAt(_LatestSelected)
|
LIST_DOMAINS.Items.RemoveAt(_LatestSelected)
|
||||||
MsgBoxE($"Domain [{n}] removed")
|
MsgBoxE($"Domain [{n}] removed")
|
||||||
Else
|
Else
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Property Logger As ILogProvider Implements ISiteSettings.Logger
|
Public Property Logger As ILogProvider Implements ISiteSettings.Logger
|
||||||
#Region "M3U8"
|
#Region "M3U8"
|
||||||
Private ReadOnly OS64 As Boolean
|
Private ReadOnly OS64 As Boolean
|
||||||
Private ReadOnly FfmpegExists As Boolean
|
Friend ReadOnly FfmpegExists As Boolean
|
||||||
Friend ReadOnly FfmpegFile As SFile
|
Friend ReadOnly FfmpegFile As SFile
|
||||||
Friend ReadOnly Property UseM3U8 As Boolean
|
Friend ReadOnly Property UseM3U8 As Boolean
|
||||||
Get
|
Get
|
||||||
@@ -41,7 +41,6 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public ReadOnly Property Responser As Response
|
Public ReadOnly Property Responser As Response
|
||||||
Private Const DomainsDefault As String = "xvideos.com|xnxx.com"
|
Private Const DomainsDefault As String = "xvideos.com|xnxx.com"
|
||||||
Private _Initialized As Boolean = False
|
Private _Initialized As Boolean = False
|
||||||
Friend Design As XmlFile
|
|
||||||
Public Sub New()
|
Public Sub New()
|
||||||
Responser = New Response($"Settings\Responser_{Site}.xml")
|
Responser = New Response($"Settings\Responser_{Site}.xml")
|
||||||
With Responser
|
With Responser
|
||||||
@@ -78,12 +77,12 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
If Not ACheck(SiteDomains.Value) Then SiteDomains.Value = DomainsDefault
|
If Not ACheck(SiteDomains.Value) Then SiteDomains.Value = DomainsDefault
|
||||||
Domains.ListAddList(CStr(SiteDomains.Value).Split("|"), LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
Domains.ListAddList(CStr(SiteDomains.Value).Split("|"), LAP.NotContainsOnly, LAP.ClearBeforeAdd)
|
||||||
Domains.ListAddList(DomainsDefault.Split("|"), LAP.NotContainsOnly)
|
Domains.ListAddList(DomainsDefault.Split("|"), LAP.NotContainsOnly)
|
||||||
SiteDomains.Value = Domains.ListToString(, "|")
|
SiteDomains.Value = Domains.ListToString("|")
|
||||||
_DomainsUpdateInProgress = False
|
_DomainsUpdateInProgress = False
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
#Region "Downloading"
|
#Region "Downloading"
|
||||||
Public Function Available(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.Available
|
Public Function Available(ByVal What As ISiteSettings.Download, ByVal Silent As Boolean) As Boolean Implements ISiteSettings.Available
|
||||||
Return UseM3U8
|
Return UseM3U8
|
||||||
End Function
|
End Function
|
||||||
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
Public Function ReadyToDownload(ByVal What As ISiteSettings.Download) As Boolean Implements ISiteSettings.ReadyToDownload
|
||||||
@@ -98,6 +97,10 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Sub DownloadDone(ByVal What As ISiteSettings.Download) Implements ISiteSettings.DownloadDone
|
Public Sub DownloadDone(ByVal What As ISiteSettings.Download) Implements ISiteSettings.DownloadDone
|
||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
|
Public Sub BeginEdit() Implements ISiteSettings.BeginEdit
|
||||||
|
End Sub
|
||||||
|
Public Sub EndEdit() Implements ISiteSettings.EndEdit
|
||||||
|
End Sub
|
||||||
Public Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
Public Sub BeginUpdate() Implements ISiteSettings.BeginUpdate
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub EndUpdate() Implements ISiteSettings.EndUpdate
|
Public Sub EndUpdate() Implements ISiteSettings.EndUpdate
|
||||||
@@ -109,10 +112,8 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
Public Sub Reset() Implements ISiteSettings.Reset
|
Public Sub Reset() Implements ISiteSettings.Reset
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub OpenSettingsForm() Implements ISiteSettings.OpenSettingsForm
|
Public Sub OpenSettingsForm() Implements ISiteSettings.OpenSettingsForm
|
||||||
Using f As New SettingsForm(Me)
|
Using Design As New XmlFile("Settings\Design_XVIDEOS.xml")
|
||||||
Design = New XmlFile("Settings\Design_XVIDEOS.xml")
|
Using f As New SettingsForm(Me, Design) : f.ShowDialog() : End Using
|
||||||
f.ShowDialog()
|
|
||||||
Design.Dispose()
|
|
||||||
End Using
|
End Using
|
||||||
End Sub
|
End Sub
|
||||||
Public Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
Public Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) Implements ISiteSettings.UserOptions
|
||||||
@@ -182,4 +183,7 @@ Public Class SiteSettings : Implements ISiteSettings
|
|||||||
End If
|
End If
|
||||||
Return Nothing
|
Return Nothing
|
||||||
End Function
|
End Function
|
||||||
|
Public Function GetUserPostUrl(ByVal UserID As String, ByVal PostID As String) As String Implements ISiteSettings.GetUserPostUrl
|
||||||
|
Return String.Empty
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
@@ -14,8 +14,8 @@ Imports UStates = SCrawler.Plugin.PluginUserMedia.States
|
|||||||
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
Imports UTypes = SCrawler.Plugin.PluginUserMedia.Types
|
||||||
Public Class UserData : Implements IPluginContentProvider
|
Public Class UserData : Implements IPluginContentProvider
|
||||||
#Region "Interface declarations"
|
#Region "Interface declarations"
|
||||||
Public Event ProgressChanged(Count As Integer) Implements IPluginContentProvider.ProgressChanged
|
Public Event ProgressChanged(ByVal Count As Integer) Implements IPluginContentProvider.ProgressChanged
|
||||||
Public Event TotalCountChanged(Count As Integer) Implements IPluginContentProvider.TotalCountChanged
|
Public Event TotalCountChanged(ByVal Count As Integer) Implements IPluginContentProvider.TotalCountChanged
|
||||||
Public Property Thrower As IThrower Implements IPluginContentProvider.Thrower
|
Public Property Thrower As IThrower Implements IPluginContentProvider.Thrower
|
||||||
Public Property LogProvider As ILogProvider Implements IPluginContentProvider.LogProvider
|
Public Property LogProvider As ILogProvider Implements IPluginContentProvider.LogProvider
|
||||||
Public Property ESettings As ISiteSettings Implements IPluginContentProvider.Settings
|
Public Property ESettings As ISiteSettings Implements IPluginContentProvider.Settings
|
||||||
@@ -37,7 +37,8 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
Public Property SeparateVideoFolder As Boolean Implements IPluginContentProvider.SeparateVideoFolder
|
||||||
Public Property DataPath As String Implements IPluginContentProvider.DataPath
|
Public Property DataPath As String Implements IPluginContentProvider.DataPath
|
||||||
Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit
|
Public Property PostsNumberLimit As Integer? Implements IPluginContentProvider.PostsNumberLimit
|
||||||
Public Property PostsDateLimit As Date? Implements IPluginContentProvider.PostsDateLimit
|
Public Property DownloadDateFrom As Date? Implements IPluginContentProvider.DownloadDateFrom
|
||||||
|
Public Property DownloadDateTo As Date? Implements IPluginContentProvider.DownloadDateTo
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Interface exchange options"
|
#Region "Interface exchange options"
|
||||||
Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet
|
Public Sub ExchangeOptionsSet(ByVal Obj As Object) Implements IPluginContentProvider.ExchangeOptionsSet
|
||||||
@@ -56,14 +57,21 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
Private Property Responser As Response
|
Private Property Responser As Response
|
||||||
Public Sub GetMedia() Implements IPluginContentProvider.GetMedia
|
Public Sub GetMedia() Implements IPluginContentProvider.GetMedia
|
||||||
Try
|
Try
|
||||||
If Not Settings.UseM3U8 Then LogProvider.Add("File [ffmpeg.exe] not found") : Exit Sub
|
If Not Settings.UseM3U8 Then
|
||||||
|
If Settings.FfmpegExists Then
|
||||||
|
LogProvider.Add($"XVIDEOS [{Name}]: The plugin only works with x64 OS.")
|
||||||
|
Else
|
||||||
|
LogProvider.Add($"XVIDEOS [{Name}]: File [ffmpeg.exe] not found")
|
||||||
|
End If
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
If Not Responser Is Nothing Then Responser.Dispose()
|
If Not Responser Is Nothing Then Responser.Dispose()
|
||||||
Responser = New Response
|
Responser = New Response
|
||||||
Responser.Copy(Settings.Responser)
|
Responser.Copy(Settings.Responser)
|
||||||
|
|
||||||
Dim NextPage% = 0
|
Dim NextPage% = 0
|
||||||
Dim r$
|
Dim r$
|
||||||
Dim j As EContainer, jj As EContainer
|
Dim jj As EContainer
|
||||||
Dim e As ErrorsDescriber = EDP.ThrowException
|
Dim e As ErrorsDescriber = EDP.ThrowException
|
||||||
Dim user$ = Settings.GetUserUrl(Name, False)
|
Dim user$ = Settings.GetUserUrl(Name, False)
|
||||||
Dim p As PluginUserMedia
|
Dim p As PluginUserMedia
|
||||||
@@ -74,8 +82,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
r = Responser.GetResponse($"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}",, e)
|
r = Responser.GetResponse($"https://www.xvideos.com/{user}/videos/new/{If(NextPage = 0, String.Empty, NextPage)}",, e)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
If Not EnvirSet Then UserExists = True : UserSuspended = False : EnvirSet = True
|
||||||
j = JsonDocument.Parse(r).XmlIfNothing
|
With JsonDocument.Parse(r).XmlIfNothing
|
||||||
With j
|
|
||||||
If .Contains("videos") Then
|
If .Contains("videos") Then
|
||||||
With .Item("videos")
|
With .Item("videos")
|
||||||
If .Count > 0 Then
|
If .Count > 0 Then
|
||||||
@@ -86,9 +93,12 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
.URL = $"https://www.xvideos.com{jj.Value("u")}"
|
.URL = $"https://www.xvideos.com{jj.Value("u")}"
|
||||||
}
|
}
|
||||||
If Not p.PostID.IsEmptyString And Not jj.Value("u").IsEmptyString Then
|
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
|
If Not TempPostsList.Contains(p.PostID) Then TempPostsList.Add(p.PostID) : TempMediaList.Add(p) Else .Dispose() : Exit Do
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
|
Else
|
||||||
|
.Dispose()
|
||||||
|
Exit Do
|
||||||
End If
|
End If
|
||||||
End With
|
End With
|
||||||
Else
|
Else
|
||||||
@@ -105,9 +115,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
If TempMediaList.Count > 0 Then
|
If TempMediaList.Count > 0 Then
|
||||||
For i% = 0 To TempMediaList.Count - 1
|
For i% = 0 To TempMediaList.Count - 1
|
||||||
Thrower.ThrowAny()
|
Thrower.ThrowAny()
|
||||||
With TempMediaList(i)
|
With TempMediaList(i) : TempMediaList(i) = GetVideoData(.URL, Responser, Settings.DownloadUHD.Value, .PostID, LogProvider) : End With
|
||||||
TempMediaList(i) = GetVideoData(.URL, Responser, Settings.DownloadUHD.Value, .PostID, LogProvider)
|
|
||||||
End With
|
|
||||||
Next
|
Next
|
||||||
TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
TempMediaList.RemoveAll(Function(m) m.URL.IsEmptyString)
|
||||||
End If
|
End If
|
||||||
@@ -149,7 +157,7 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
Dim t$ = RegexReplace(r, VideoTitleRegex)
|
Dim t$ = RegexReplace(r, VideoTitleRegex)
|
||||||
r = resp.GetResponse(m,, EDP.ThrowException)
|
r = resp.GetResponse(m,, EDP.ThrowException)
|
||||||
If Not r.IsEmptyString Then
|
If Not r.IsEmptyString Then
|
||||||
Dim ls As List(Of VSize) = FNF.RegexFields(Of VSize)(r, {M3U8Reparse}, {1, 2})
|
Dim ls As List(Of VSize) = RegexFields(Of VSize)(r, {M3U8Reparse}, {1, 2})
|
||||||
If ls.ListExists And Not DownloadUHD Then ls.RemoveAll(Function(v) v.Size > 1080)
|
If ls.ListExists And Not DownloadUHD Then ls.RemoveAll(Function(v) v.Size > 1080)
|
||||||
If ls.ListExists Then
|
If ls.ListExists Then
|
||||||
ls.Sort()
|
ls.Sort()
|
||||||
@@ -203,7 +211,8 @@ Public Class UserData : Implements IPluginContentProvider
|
|||||||
m.File = f
|
m.File = f
|
||||||
m.DownloadState = UStates.Downloaded
|
m.DownloadState = UStates.Downloaded
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
m.DownloadState = UStates.Skipped
|
m.DownloadState = UStates.Missing
|
||||||
|
m.Attempts += 1
|
||||||
End Try
|
End Try
|
||||||
TempMediaList(i) = m
|
TempMediaList(i) = m
|
||||||
RaiseEvent ProgressChanged(1)
|
RaiseEvent ProgressChanged(1)
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[*.vb]
|
[*.vb]
|
||||||
# Modifier preferences
|
# 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/>
|
file_header_template = Copyright (C) Andy https://github.com/AAndyProgram\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/>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -32,6 +32,10 @@ Namespace Plugin.Attributes
|
|||||||
Public Property AllowNull As Boolean = True
|
Public Property AllowNull As Boolean = True
|
||||||
''' <summary>Offset the control from the left border of the form.<br/>Default: 100</summary>
|
''' <summary>Offset the control from the left border of the form.<br/>Default: 100</summary>
|
||||||
Public Property LeftOffset As Integer = 100
|
Public Property LeftOffset As Integer = 100
|
||||||
|
''' <summary>This control is an information label.<br/>Default: <see langword="False"/></summary>
|
||||||
|
Public Property IsInformationLabel As Boolean = False
|
||||||
|
''' <summary>Label text alignment.<br/>Default: <see cref="Drawing.ContentAlignment.TopCenter"/></summary>
|
||||||
|
Public Property LabelTextAlign As Drawing.ContentAlignment = Drawing.ContentAlignment.TopCenter
|
||||||
''' <summary>This is an authorization property</summary>
|
''' <summary>This is an authorization property</summary>
|
||||||
Public Property IsAuth As Boolean = False
|
Public Property IsAuth As Boolean = False
|
||||||
''' <summary>Initialize a new property option attribute</summary>
|
''' <summary>Initialize a new property option attribute</summary>
|
||||||
@@ -40,6 +44,16 @@ Namespace Plugin.Attributes
|
|||||||
Name = PropertyName
|
Name = PropertyName
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
|
''' <summary>Set the dependent fields that need to be updated when this property is changed internally.</summary>
|
||||||
|
<AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class DependentFields : Inherits Attribute
|
||||||
|
Public ReadOnly Fields As String()
|
||||||
|
Public Sub New(ByVal Field As String)
|
||||||
|
Fields = {Field}
|
||||||
|
End Sub
|
||||||
|
Public Sub New(ByVal Fields As String())
|
||||||
|
Me.Fields = Fields
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
''' <summary>Store property value in settings XML file</summary>
|
''' <summary>Store property value in settings XML file</summary>
|
||||||
<AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class PXML : Inherits Attribute
|
<AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class PXML : Inherits Attribute
|
||||||
Public ReadOnly ElementName As String
|
Public ReadOnly ElementName As String
|
||||||
@@ -49,19 +63,28 @@ Namespace Plugin.Attributes
|
|||||||
ElementName = XMLElementName
|
ElementName = XMLElementName
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
|
''' <summary>Attribute to disable some properties for host use</summary>
|
||||||
|
<AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class DoNotUse : Inherits Attribute
|
||||||
|
Public ReadOnly Value As Boolean = True
|
||||||
|
Public Sub New()
|
||||||
|
End Sub
|
||||||
|
Public Sub New(ByVal Value As Boolean)
|
||||||
|
Me.Value = Value
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
''' <summary>Special property updater</summary>
|
''' <summary>Special property updater</summary>
|
||||||
<AttributeUsage(AttributeTargets.Method, AllowMultiple:=True, Inherited:=False)> Public NotInheritable Class PropertyUpdater : Inherits Attribute
|
<AttributeUsage(AttributeTargets.Method, AllowMultiple:=True, Inherited:=False)> Public NotInheritable Class PropertyUpdater : Inherits Attribute
|
||||||
Public ReadOnly Name As String
|
Public ReadOnly Name As String
|
||||||
Public ReadOnly Dependencies As String()
|
Public ReadOnly Arguments As String()
|
||||||
''' <inheritdoc cref="PropertyUpdater.New(String, String())"/>
|
''' <inheritdoc cref="PropertyUpdater.New(String, String())"/>
|
||||||
Public Sub New(ByVal UpdatingPropertyName As String)
|
Public Sub New(ByVal UpdatingPropertyName As String)
|
||||||
Name = UpdatingPropertyName
|
Name = UpdatingPropertyName
|
||||||
End Sub
|
End Sub
|
||||||
''' <summary>Initialize a new PropertyUpdater attribute</summary>
|
''' <summary>Initialize a new PropertyUpdater attribute</summary>
|
||||||
''' <param name="UpdatingPropertyName">The name of the property to be updated</param>
|
''' <param name="UpdatingPropertyName">The name of the property to be updated</param>
|
||||||
Public Sub New(ByVal UpdatingPropertyName As String, ByVal Dependent As String())
|
Public Sub New(ByVal UpdatingPropertyName As String, ByVal Arguments As String())
|
||||||
Name = UpdatingPropertyName
|
Name = UpdatingPropertyName
|
||||||
Dependencies = Dependent
|
Me.Arguments = Arguments
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
''' <summary>Plugin key</summary>
|
''' <summary>Plugin key</summary>
|
||||||
@@ -93,6 +116,8 @@ Namespace Plugin.Attributes
|
|||||||
''' <see langword="False"/> - only for conversion
|
''' <see langword="False"/> - only for conversion
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Public FieldsChecker As Boolean = False
|
Public FieldsChecker As Boolean = False
|
||||||
|
''' <summary>Interaction with changing text field. Default: <see langword="False"/></summary>
|
||||||
|
Public Interaction As Boolean = False
|
||||||
''' <summary>Initialize a new Provider attribute. <see cref="IFormatProvider"/> is only allowed</summary>
|
''' <summary>Initialize a new Provider attribute. <see cref="IFormatProvider"/> is only allowed</summary>
|
||||||
''' <param name="PropertyName">The name of the property for which this provider is used</param>
|
''' <param name="PropertyName">The name of the property for which this provider is used</param>
|
||||||
Public Sub New(ByVal PropertyName As String)
|
Public Sub New(ByVal PropertyName As String)
|
||||||
@@ -125,13 +150,26 @@ Namespace Plugin.Attributes
|
|||||||
''' Predefined task counter.<br/>
|
''' Predefined task counter.<br/>
|
||||||
''' <see cref="TaskCounter"/> will take precedence if it is defined.
|
''' <see cref="TaskCounter"/> will take precedence if it is defined.
|
||||||
''' </param>
|
''' </param>
|
||||||
Public Sub New(Optional ByVal JobsCount As Integer = -1)
|
Public Sub New(Optional ByVal TasksCount As Integer = -1)
|
||||||
TasksCount = JobsCount
|
Me.TasksCount = TasksCount
|
||||||
End Sub
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
''' <summary>A property attribute that specifies how many users should be downloaded at the same time in one thread</summary>
|
''' <summary>A property attribute that specifies how many users should be downloaded at the same time in one thread</summary>
|
||||||
<AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class TaskCounter : Inherits Attribute
|
<AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class TaskCounter : Inherits Attribute
|
||||||
End Class
|
End Class
|
||||||
|
''' <remarks>
|
||||||
|
''' This attribute cannot be combined with <see cref="SeparatedTasks"/>.
|
||||||
|
''' If set to <see cref="SeparatedTasks"/>, this attribute will be ignored
|
||||||
|
''' </remarks>
|
||||||
|
''' <inheritdoc cref="SeparatedTasks"/>
|
||||||
|
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class TaskGroup : Inherits Attribute
|
||||||
|
Public ReadOnly Name As String
|
||||||
|
''' <summary>Initialize a new TaskGroup attribute.</summary>
|
||||||
|
''' <param name="Name">Group name</param>
|
||||||
|
Public Sub New(ByVal Name As String)
|
||||||
|
Me.Name = Name
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
''' <summary>This attribute indicates that the plugin has a SavedPosts environment</summary>
|
''' <summary>This attribute indicates that the plugin has a SavedPosts environment</summary>
|
||||||
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class SavedPosts : Inherits Attribute
|
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=False)> Public NotInheritable Class SavedPosts : Inherits Attribute
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
35
SCrawler.PluginProvider/Interfaces/IDownloadableMedia.vb
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Namespace Plugin
|
||||||
|
Public Interface IDownloadableMedia : Inherits IUserMedia, IDisposable
|
||||||
|
Event CheckedChange As EventHandler
|
||||||
|
Event ThumbnailChanged As EventHandler
|
||||||
|
Event StateChanged As EventHandler
|
||||||
|
ReadOnly Property SiteIcon As Drawing.Image
|
||||||
|
ReadOnly Property Site As String
|
||||||
|
ReadOnly Property SiteKey As String
|
||||||
|
Property AccountName As String
|
||||||
|
Property ThumbnailUrl As String
|
||||||
|
Property ThumbnailFile As String
|
||||||
|
Property Title As String
|
||||||
|
Property Size As Integer
|
||||||
|
Property Duration As TimeSpan
|
||||||
|
Property Progress As Object
|
||||||
|
ReadOnly Property HasError As Boolean
|
||||||
|
ReadOnly Property Exists As Boolean
|
||||||
|
Property Checked As Boolean
|
||||||
|
Property Instance As IPluginContentProvider
|
||||||
|
Sub Download(ByVal UseCookies As Boolean, ByVal Token As Threading.CancellationToken)
|
||||||
|
Sub Delete(ByVal RemoveFiles As Boolean)
|
||||||
|
Sub Load(ByVal File As String)
|
||||||
|
Sub Save()
|
||||||
|
Overloads Function ToString() As String
|
||||||
|
Overloads Function ToString(ByVal ForMediaItem As Boolean) As String
|
||||||
|
End Interface
|
||||||
|
End Namespace
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -8,30 +8,37 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Namespace Plugin
|
Namespace Plugin
|
||||||
Public Interface IPluginContentProvider : Inherits IDisposable
|
Public Interface IPluginContentProvider : Inherits IDisposable
|
||||||
Event ProgressChanged(ByVal Count As Integer)
|
Event ProgressChanged(ByVal Value As Integer)
|
||||||
Event TotalCountChanged(ByVal Count As Integer)
|
Event ProgressMaximumChanged(ByVal Value As Integer, ByVal Add As Boolean)
|
||||||
|
Event ProgressPreChanged As ProgressChangedEventHandler
|
||||||
|
Event ProgressPreMaximumChanged As ProgressMaximumChangedEventHandler
|
||||||
Property Thrower As IThrower
|
Property Thrower As IThrower
|
||||||
Property LogProvider As ILogProvider
|
Property LogProvider As ILogProvider
|
||||||
Property Settings As ISiteSettings
|
Property Settings As ISiteSettings
|
||||||
|
Property AccountName As String
|
||||||
Property Name As String
|
Property Name As String
|
||||||
Property ID As String
|
Property ID As String
|
||||||
|
Property Options As String
|
||||||
Property ParseUserMediaOnly As Boolean
|
Property ParseUserMediaOnly As Boolean
|
||||||
Property UserDescription As String
|
Property UserDescription As String
|
||||||
Property ExistingContentList As List(Of PluginUserMedia)
|
Property ExistingContentList As List(Of IUserMedia)
|
||||||
Property TempPostsList As List(Of String)
|
Property TempPostsList As List(Of String)
|
||||||
Property TempMediaList As List(Of PluginUserMedia)
|
Property TempMediaList As List(Of IUserMedia)
|
||||||
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 IsSubscription 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?
|
Property DownloadDateFrom As Date?
|
||||||
|
Property DownloadDateTo 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)))
|
||||||
Function XmlFieldsGet() As List(Of KeyValuePair(Of String, String))
|
Function XmlFieldsGet() As List(Of KeyValuePair(Of String, String))
|
||||||
Sub GetMedia()
|
Sub GetMedia(ByVal Token As Threading.CancellationToken)
|
||||||
Sub Download()
|
Sub Download(ByVal Token As Threading.CancellationToken)
|
||||||
|
Sub DownloadSingleObject(ByVal Data As IDownloadableMedia, ByVal Token As Threading.CancellationToken)
|
||||||
End Interface
|
End Interface
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -8,32 +8,37 @@
|
|||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Imports System.Drawing
|
Imports System.Drawing
|
||||||
Namespace Plugin
|
Namespace Plugin
|
||||||
Public Interface ISiteSettings
|
Public Interface ISiteSettings : Inherits IDisposable
|
||||||
Enum Download As Integer
|
Enum Download As Integer
|
||||||
Main = 0
|
Main = 0
|
||||||
SavedPosts = 1
|
SavedPosts = 1
|
||||||
Channel = 2
|
SingleObject = 2
|
||||||
End Enum
|
End Enum
|
||||||
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 AccountName As String
|
||||||
|
Property Temporary As Boolean
|
||||||
|
Property DefaultInstance As ISiteSettings
|
||||||
|
ReadOnly Property SubscriptionsAllowed As Boolean
|
||||||
Property Logger As ILogProvider
|
Property Logger As ILogProvider
|
||||||
Function GetUserUrl(ByVal UserName As String, ByVal Channel As Boolean) As String
|
Function GetUserUrl(ByVal User As IPluginContentProvider) 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, 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"
|
Function GetSingleMediaInstance(ByVal URL As String, ByVal OutputFile As String) As IDownloadableMedia
|
||||||
Sub Load(ByVal XMLValues As IEnumerable(Of KeyValuePair(Of String, String)))
|
Function GetUserPostUrl(ByVal User As IPluginContentProvider, ByVal Media As IUserMedia) As String
|
||||||
#End Region
|
|
||||||
#Region "Initialization"
|
#Region "Initialization"
|
||||||
Sub BeginInit()
|
Sub BeginInit()
|
||||||
Sub EndInit()
|
Sub EndInit()
|
||||||
Sub BeginUpdate()
|
Sub BeginUpdate()
|
||||||
Sub EndUpdate()
|
Sub EndUpdate()
|
||||||
|
Sub BeginEdit()
|
||||||
|
Sub EndEdit()
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Site availability"
|
#Region "Site availability"
|
||||||
Function Available(ByVal What As Download) As Boolean
|
Property AvailableText As String
|
||||||
|
Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean
|
||||||
Function ReadyToDownload(ByVal What As Download) As Boolean
|
Function ReadyToDownload(ByVal What As Download) As Boolean
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Downloading"
|
#Region "Downloading"
|
||||||
@@ -42,7 +47,10 @@ 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()
|
Function Clone(ByVal Full As Boolean) As ISiteSettings
|
||||||
|
Sub Delete()
|
||||||
|
Overloads Sub Update()
|
||||||
|
Overloads Sub Update(ByVal Source As ISiteSettings)
|
||||||
Sub Reset()
|
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)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyDescription("Plugin provider for SCrawler")>
|
<Assembly: AssemblyDescription("Plugin provider for SCrawler")>
|
||||||
<Assembly: AssemblyCompany("AndyProgram")>
|
<Assembly: AssemblyCompany("AndyProgram")>
|
||||||
<Assembly: AssemblyProduct("SCrawler.PluginProvider")>
|
<Assembly: AssemblyProduct("SCrawler.PluginProvider")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2022")>
|
<Assembly: AssemblyCopyright("Copyright © 2024")>
|
||||||
<Assembly: AssemblyTrademark("AndyProgram")>
|
<Assembly: AssemblyTrademark("AndyProgram")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("3.0.0.2")>
|
<Assembly: AssemblyVersion("2023.11.24.0")>
|
||||||
<Assembly: AssemblyFileVersion("3.0.0.2")>
|
<Assembly: AssemblyFileVersion("2023.11.24.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -11,6 +11,6 @@ Namespace Plugin
|
|||||||
Overloads Sub Add(ByVal Message As String)
|
Overloads Sub Add(ByVal Message As String)
|
||||||
Overloads Sub Add(ByVal ex As Exception, ByVal Message As String,
|
Overloads Sub Add(ByVal ex As Exception, ByVal Message As String,
|
||||||
Optional ByVal ShowMainMsg As Boolean = False, Optional ByVal ShowErrorMsg As Boolean = False,
|
Optional ByVal ShowMainMsg As Boolean = False, Optional ByVal ShowErrorMsg As Boolean = False,
|
||||||
Optional ByVal SendInLog As Boolean = True)
|
Optional ByVal SendToLog As Boolean = True)
|
||||||
End Interface
|
End Interface
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -6,7 +6,8 @@
|
|||||||
'
|
'
|
||||||
' This program is distributed in the hope that it will be useful,
|
' This program is distributed in the hope that it will be useful,
|
||||||
' but WITHOUT ANY WARRANTY
|
' but WITHOUT ANY WARRANTY
|
||||||
Namespace Plugin.Attributes
|
Namespace Plugin
|
||||||
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=False, Inherited:=False)> Friend NotInheritable Class UseClassAsIs : Inherits Attribute
|
Public Interface IPropertyProvider : Inherits IFormatProvider
|
||||||
End Class
|
Property PropertyName As String
|
||||||
|
End Interface
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -11,15 +11,12 @@ Namespace Plugin
|
|||||||
Public UserName As String
|
Public UserName As String
|
||||||
Public SiteName As String
|
Public SiteName As String
|
||||||
Public HostKey As String
|
Public HostKey As String
|
||||||
Public IsChannel As Boolean
|
Public Options As String
|
||||||
Public Exists As Boolean
|
Public Exists As Boolean
|
||||||
Public Sub New(ByVal Site As String, ByVal _Name As String)
|
Public Sub New(ByVal Site As String, ByVal Name As String)
|
||||||
UserName = _Name
|
UserName = Name
|
||||||
SiteName = Site
|
SiteName = Site
|
||||||
End Sub
|
Exists = Not String.IsNullOrEmpty(Name) And Not String.IsNullOrWhiteSpace(Name)
|
||||||
Public Sub New(ByVal Site As String, ByVal _Name As String, ByVal _IsChannel As Boolean)
|
|
||||||
Me.New(Site, _Name)
|
|
||||||
IsChannel = _IsChannel
|
|
||||||
End Sub
|
End Sub
|
||||||
End Structure
|
End Structure
|
||||||
End Namespace
|
End Namespace
|
||||||
36
SCrawler.PluginProvider/Objects/ExitException.vb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
|
' This program is free software: you can redistribute it and/or modify
|
||||||
|
' it under the terms of the GNU General Public License as published by
|
||||||
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
|
' (at your option) any later version.
|
||||||
|
'
|
||||||
|
' This program is distributed in the hope that it will be useful,
|
||||||
|
' but WITHOUT ANY WARRANTY
|
||||||
|
Namespace Plugin
|
||||||
|
''' <summary>Represents errors that occur during downloading to be thrown to the root downloading function.</summary>
|
||||||
|
Public Class ExitException : Inherits Exception
|
||||||
|
''' <summary>Add only the message to the log, without adding a <see cref="StackTrace"/>. Default: <see langword="True"/>.</summary>
|
||||||
|
''' <returns><see langword="True"/> if only the message should be added to the log; otherwise the stack trace will also be added.</returns>
|
||||||
|
Public Property SimpleLogLine As Boolean = True
|
||||||
|
''' <summary>Don't add a message to the log. Default: <see langword="False"/>.</summary>
|
||||||
|
''' <returns><see langword="True"/> if the error is exit-only and there is no need to add a message to the log; otherwise add a message to the log.</returns>
|
||||||
|
Public Property Silent As Boolean = False
|
||||||
|
''' <summary>Initializes a new instance of the <see cref="ExitException"/> class.</summary>
|
||||||
|
Public Sub New()
|
||||||
|
End Sub
|
||||||
|
''' <summary>Initializes a new instance of the <see cref="ExitException"/> class with a specified error message.</summary>
|
||||||
|
''' <param name="Message">The message that describes the error.</param>
|
||||||
|
Public Sub New(ByVal Message As String)
|
||||||
|
MyBase.New(Message)
|
||||||
|
End Sub
|
||||||
|
''' <summary>
|
||||||
|
''' Initializes a new instance of the <see cref="ExitException"/> class with a specified error message
|
||||||
|
''' and a reference to the inner exception that is the cause of this exception.
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="Message">The error message that explains the reason for the exception.</param>
|
||||||
|
''' <param name="InnerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
|
||||||
|
Public Sub New(ByVal Message As String, ByVal InnerException As Exception)
|
||||||
|
MyBase.New(Message, InnerException)
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
' Copyright (C) 2022 Andy
|
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
||||||
' This program is free software: you can redistribute it and/or modify
|
' 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
|
' it under the terms of the GNU General Public License as published by
|
||||||
' the Free Software Foundation, either version 3 of the License, or
|
' the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -7,24 +7,49 @@
|
|||||||
' 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 Structure PluginUserMedia
|
Public Delegate Sub ProgressChange(ByVal Value As Double?, ByVal Maximum As Double?, ByVal Information As String)
|
||||||
Enum Types As Integer
|
Public Enum UserMediaTypes As Integer
|
||||||
Undefined = 0
|
Undefined = 0
|
||||||
[Picture] = 1
|
Picture = 1
|
||||||
[Video] = 2
|
Video = 2
|
||||||
[Text] = 3
|
Audio = 200
|
||||||
|
Text = 4
|
||||||
VideoPre = 10
|
VideoPre = 10
|
||||||
|
AudioPre = 215
|
||||||
GIF = 50
|
GIF = 50
|
||||||
m3u8 = 100
|
m3u8 = 100
|
||||||
End Enum
|
End Enum
|
||||||
Enum States As Integer : Unknown = 0 : Tried = 1 : Downloaded = 2 : Skipped = 3 : End Enum
|
Public Enum UserMediaStates As Integer
|
||||||
Public ContentType As Integer
|
Unknown = 0
|
||||||
Public URL As String
|
Tried = 1
|
||||||
Public MD5 As String
|
Downloaded = 2
|
||||||
Public File As String
|
Skipped = 3
|
||||||
Public DownloadState As Integer
|
Missing = 4
|
||||||
Public PostID As String
|
End Enum
|
||||||
Public PostDate As Date?
|
Public Structure PluginUserMedia : Implements IUserMedia
|
||||||
Public SpecialFolder As String
|
Public Property ContentType As UserMediaTypes Implements IUserMedia.ContentType
|
||||||
|
Public Property URL As String Implements IUserMedia.URL
|
||||||
|
Public Property URL_BASE As String Implements IUserMedia.URL_BASE
|
||||||
|
Public Property MD5 As String Implements IUserMedia.MD5
|
||||||
|
Public Property File As String Implements IUserMedia.File
|
||||||
|
Public Property DownloadState As UserMediaStates Implements IUserMedia.DownloadState
|
||||||
|
Public Property PostID As String Implements IUserMedia.PostID
|
||||||
|
Public Property PostDate As Date? Implements IUserMedia.PostDate
|
||||||
|
Public Property SpecialFolder As String Implements IUserMedia.SpecialFolder
|
||||||
|
Public Property Attempts As Integer Implements IUserMedia.Attempts
|
||||||
|
Public Property [Object] As Object Implements IUserMedia.Object
|
||||||
End Structure
|
End Structure
|
||||||
|
Public Interface IUserMedia
|
||||||
|
Property ContentType As UserMediaTypes
|
||||||
|
Property URL As String
|
||||||
|
Property URL_BASE As String
|
||||||
|
Property MD5 As String
|
||||||
|
Property File As String
|
||||||
|
Property DownloadState As UserMediaStates
|
||||||
|
Property PostID As String
|
||||||
|
Property PostDate As Date?
|
||||||
|
Property SpecialFolder As String
|
||||||
|
Property Attempts As Integer
|
||||||
|
Property [Object] As Object
|
||||||
|
End Interface
|
||||||
End Namespace
|
End Namespace
|
||||||