├── .gitattributes ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ ├── feature_request.md │ └── plugin_add.md ├── .gitignore ├── CONTRIBUTING.md ├── Changelog.md ├── FAQ.md ├── HowToSupport.md ├── LICENSE ├── Plugins.md ├── ProgramScreenshots ├── AppYouTube.png ├── AppYouTubeMusic.png ├── AppYouTubePlaylist.png ├── AppYouTubePlaylistParser.png ├── AppYouTubeSettings.png ├── AppYouTubeVideo.png ├── BugReport.png ├── Channels.png ├── ChannelsStats.png ├── ChannelsStats2.png ├── CreateUserClear.png ├── DownloadInfo.png ├── FeedMoveCopyTo.png ├── FeedWindow.png ├── FeedWindowItemContext.png ├── FeedWindowSessionContext.png ├── GroupCreating.png ├── Labels.png ├── LocationsChanger.png ├── MainContext.png ├── MainWindow.png ├── MainWindowGroups.png ├── MainWindowPause.png ├── MainWindowView.png ├── MissingPosts.png ├── SavedPosts.png ├── SearchUsers.png ├── SettingsAutoDownloader.png ├── SettingsGlobalBasis.png ├── SettingsGlobalBehavior.png ├── SettingsGlobalChannels.png ├── SettingsGlobalDefaults.png ├── SettingsGlobalDesign.png ├── SettingsGlobalDownloader.png ├── SettingsGlobalDownloading.png ├── SettingsGlobalEnvironment.png ├── SettingsGlobalFeed.png ├── SettingsGlobalHeaders.png ├── SettingsGlobalNotifications.png ├── SettingsRedditView.png ├── SettingsScheduler.png ├── SettingsSiteBluesky.png ├── SettingsSiteFacebook.png ├── SettingsSiteInstagram.png ├── SettingsSiteInstagramData.png ├── SettingsSiteJustForFans.png ├── SettingsSiteLPSG.png ├── SettingsSiteMastodon.png ├── SettingsSiteMastodonAdditional.png ├── SettingsSiteOnlyFans.png ├── SettingsSiteOnlyFansAdditional.png ├── SettingsSitePinterest.png ├── SettingsSitePornHub.png ├── SettingsSiteRedGifs.png ├── SettingsSiteReddit.png ├── SettingsSiteThisVid.png ├── SettingsSiteThreads.png ├── SettingsSiteTikTok.png ├── SettingsSiteTwitter.png ├── SettingsSiteXHamster.png ├── SettingsSiteXvideos.png ├── SettingsSiteXvideosAdditional.png ├── SettingsSiteYouTube.png ├── SettingsTwitterUser.png ├── TrayContextMenu.png ├── UserDefaultQueryOptions.png └── UserMetrics.png ├── ProgramsComparison.md ├── README.md ├── SCrawler.Plugin.LPSG ├── .editorconfig ├── Content │ ├── Icons │ │ └── Icon32.ico │ └── Pictures │ │ └── IconPic_32.png ├── Declarations.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings ├── SCrawler.Plugin.LPSG.vbproj ├── SiteSettings.vb └── UserData.vb ├── SCrawler.Plugin.XVIDEOS ├── .editorconfig ├── Content │ ├── Icons │ │ └── Icon32.ico │ └── Pictures │ │ └── IconPic32.png ├── Declarations.vb ├── M3U8.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings ├── SCrawler.Plugin.XVIDEOS.vbproj ├── SettingsForm.Designer.vb ├── SettingsForm.resx ├── SettingsForm.vb ├── SiteSettings.vb └── UserData.vb ├── SCrawler.PluginProvider ├── .editorconfig ├── Attributes │ └── Attributes.vb ├── Interfaces │ ├── IDownloadableMedia.vb │ ├── IPluginContentProvider.vb │ └── ISiteSettings.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings ├── ObjectInterfaces │ ├── ILogProvider.vb │ ├── IPropertyProvider.vb │ └── IThrower.vb ├── Objects │ ├── ExchangeOptions.vb │ ├── ExitException.vb │ ├── PluginUserMedia.vb │ ├── PropertyData.vb │ └── PropertyValue.vb └── SCrawler.PluginProvider.vbproj ├── SCrawler.Shared ├── .editorconfig ├── Content │ ├── Icons │ │ └── FilterIcon.ico │ └── Images │ │ └── FilterPic.png ├── Functions.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings └── SCrawler.Shared.vbproj ├── SCrawler.Updater ├── .editorconfig ├── App.config ├── Content │ └── Icons │ │ └── RainbowIcon_48.ico ├── MainMod.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ ├── Settings.settings │ └── app.manifest └── SCrawler.Updater.vbproj ├── SCrawler.YouTube ├── .editorconfig ├── App.config ├── Attributes │ └── GridVisibleAttribute.vb ├── Base │ ├── Structures.vb │ ├── TableControlsProcessor.vb │ ├── YouTubeFunctions.vb │ └── YouTubeSettings.vb ├── Content │ ├── Icons │ │ ├── YouTubeIcon_32.ico │ │ └── YouTubeMusicIcon_32.ico │ └── Pictures │ │ ├── ArrowDownPic_Blue_24.png │ │ ├── AudioMusic_32.png │ │ ├── ClockPic_16.png │ │ ├── HeartPic_32.png │ │ ├── ImagePic_32.png │ │ ├── InfoPic_32.png │ │ ├── LinkPic_32.png │ │ ├── MailPic_16.png │ │ ├── RulerPic_32.png │ │ ├── SettingsPic_16.bmp │ │ ├── StartPic_Green_16.png │ │ ├── VideoCamera_32.png │ │ ├── YouTubeMusicPic_96.png │ │ └── YouTubePic_96.png ├── Controls │ ├── ButtonRC.vb │ ├── ChannelTabsChooserForm.Designer.vb │ ├── ChannelTabsChooserForm.resx │ ├── ChannelTabsChooserForm.vb │ ├── FilterForm.Designer.vb │ ├── FilterForm.resx │ ├── FilterForm.vb │ ├── MusicPlaylistsForm.Designer.vb │ ├── MusicPlaylistsForm.resx │ ├── MusicPlaylistsForm.vb │ ├── ParsingProgressForm.Designer.vb │ ├── ParsingProgressForm.resx │ ├── ParsingProgressForm.vb │ ├── PlayListParserForm.Designer.vb │ ├── PlayListParserForm.resx │ ├── PlayListParserForm.vb │ ├── PlaylistArrayForm.Designer.vb │ ├── PlaylistArrayForm.resx │ ├── PlaylistArrayForm.vb │ ├── VideoOption.Designer.vb │ ├── VideoOption.resx │ ├── VideoOption.vb │ ├── VideoOptionsForm.Designer.vb │ ├── VideoOptionsForm.resx │ ├── VideoOptionsForm.vb │ └── YTDataFilter.vb ├── Declarations.vb ├── Downloader │ ├── DownloadLocationsCollection.vb │ ├── IDownloaderSettings.vb │ ├── MediaItem.Designer.vb │ ├── MediaItem.resx │ ├── MediaItem.vb │ ├── Notificator.vb │ ├── STDownloaderDeclarations.vb │ ├── VideoListForm.Designer.vb │ ├── VideoListForm.resx │ └── VideoListForm.vb ├── Editors │ ├── BugReporterForm.Designer.vb │ ├── BugReporterForm.resx │ └── BugReporterForm.vb ├── MainModShared.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ └── Settings.settings ├── Objects │ ├── Channel.vb │ ├── IYouTubeMediaContainer.vb │ ├── PlayList.vb │ ├── Track.vb │ ├── Video.vb │ └── YouTubeMediaContainerBase.vb ├── SCrawler.YouTube.vbproj ├── SiteYouTube.Designer.vb └── SiteYouTube.resx ├── SCrawler.YouTubeDownloader ├── .editorconfig ├── App.config ├── Content │ └── Icons │ │ ├── ArrowDownIcon_Orange_24.ico │ │ └── RainbowIcon_48.ico ├── MainFrame.Designer.vb ├── MainFrame.resx ├── MainFrame.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ ├── Settings.settings │ └── app.manifest └── SCrawler.YouTubeDownloader.vbproj ├── SCrawler.sln ├── SCrawler ├── .editorconfig ├── API │ ├── Base │ │ ├── Declarations.vb │ │ ├── DeclaredNames.vb │ │ ├── DownDetector.vb │ │ ├── EditorExchangeOptionsBase.vb │ │ ├── GDL.vb │ │ ├── IUserData.vb │ │ ├── M3U8Base.vb │ │ ├── ProfileSaved.vb │ │ ├── SiteSettingsBase.vb │ │ ├── Structures.vb │ │ ├── TokenBatch.vb │ │ ├── UserDataBase.vb │ │ └── YTDLP.vb │ ├── BaseObjects │ │ ├── DomainsContainer.vb │ │ ├── InternalSettingsForm.Designer.vb │ │ ├── InternalSettingsForm.resx │ │ ├── InternalSettingsForm.vb │ │ ├── SplitCollectionUserInfo.vb │ │ ├── SplitCollectionUserInfoChangePathsForm.Designer.vb │ │ ├── SplitCollectionUserInfoChangePathsForm.resx │ │ ├── SplitCollectionUserInfoChangePathsForm.vb │ │ ├── SplitCollectionUserInfoPathForm.Designer.vb │ │ ├── SplitCollectionUserInfoPathForm.resx │ │ └── SplitCollectionUserInfoPathForm.vb │ ├── Bluesky │ │ ├── Declarations.vb │ │ ├── M3U8.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── Facebook │ │ ├── Declarations.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ ├── Gfycat │ │ └── Envir.vb │ ├── Imgur │ │ └── Envir.vb │ ├── Instagram │ │ ├── Declarations.vb │ │ ├── EditorExchangeOptions.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.GQL.vb │ │ └── UserData.vb │ ├── JustForFans │ │ ├── Declarations.vb │ │ ├── M3U8.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── LPSG │ │ ├── Declarations.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── Mastodon │ │ ├── Credentials.vb │ │ ├── Declarations.vb │ │ ├── EditorExchangeOptions.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── OnlyFans │ │ ├── Declarations.vb │ │ ├── DynamicRules.txt │ │ ├── DynamicRulesAll.txt │ │ ├── DynamicRulesEnv.vb │ │ ├── OFResources.Designer.vb │ │ ├── OFResources.resx │ │ ├── OFScraperConfigPattern.json │ │ ├── OFScraperConfigPatternConstants.txt │ │ ├── OnlyFansAdvancedSettingsForm.Designer.vb │ │ ├── OnlyFansAdvancedSettingsForm.resx │ │ ├── OnlyFansAdvancedSettingsForm.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ ├── PathPlugin │ │ ├── Declarations.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── Pinterest │ │ ├── Declarations.vb │ │ ├── EditorExchangeOptions.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── PornHub │ │ ├── Declarations.vb │ │ ├── M3U8.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ ├── Reddit │ │ ├── Channel.vb │ │ ├── ChannelsCollection.vb │ │ ├── Declarations.vb │ │ ├── IChannelLimits.vb │ │ ├── IRedditView.vb │ │ ├── M3U8.vb │ │ ├── RedditViewSettingsForm.Designer.vb │ │ ├── RedditViewSettingsForm.resx │ │ ├── RedditViewSettingsForm.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── Redgifs │ │ ├── Declarations.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── ThisVid │ │ ├── Declarations.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ ├── ThreadsNet │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── TikTok │ │ ├── Declarations.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ ├── Twitter │ │ ├── Declarations.vb │ │ ├── EditorExchangeOptions.vb │ │ ├── SiteSettings.vb │ │ └── UserData.vb │ ├── UserDataBind.vb │ ├── XVIDEOS │ │ ├── Declarations.vb │ │ ├── M3U8.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ ├── Xhamster │ │ ├── Declarations.vb │ │ ├── M3U8.vb │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ └── UserExchangeOptions.vb │ └── YouTube │ │ ├── SiteSettings.vb │ │ ├── UserData.vb │ │ ├── UserExchangeOptions.vb │ │ ├── YTPreProgress.vb │ │ └── YTSettings_Internal.vb ├── App.config ├── Channels │ ├── ChannelViewForm.Designer.vb │ ├── ChannelViewForm.resx │ ├── ChannelViewForm.vb │ ├── ChannelsStatsForm.Designer.vb │ ├── ChannelsStatsForm.resx │ └── ChannelsStatsForm.vb ├── Content │ ├── Icons │ │ ├── ArrowDownIcon_Blue_24.ico │ │ ├── BookmarkIcon_32.ico │ │ ├── GroupByIcon_16.ico │ │ ├── RSSIcon_32.ico │ │ ├── RainbowIcon_48.ico │ │ ├── SettingsIcon_48.ico │ │ ├── SiteIcons │ │ │ ├── BlueskyIcon_32.ico │ │ │ ├── FacebookIcon_32.ico │ │ │ ├── InstagramIcon_32.ico │ │ │ ├── JFFIcon_64.ico │ │ │ ├── LPSGIcon_48.ico │ │ │ ├── MastodonIcon_48.ico │ │ │ ├── OnlyFansIcon_32.ico │ │ │ ├── PinterestIcon_32.ico │ │ │ ├── PornHubIcon_16.ico │ │ │ ├── RedGifsIcon_32.ico │ │ │ ├── RedditIcon_128.ico │ │ │ ├── ThisVidIcon_16.ico │ │ │ ├── ThreadsIcon_192.ico │ │ │ ├── TikTokIcon_32.ico │ │ │ ├── TwitterIconNew_32.ico │ │ │ ├── TwitterIcon_32.ico │ │ │ ├── XhamsterIcon_32.ico │ │ │ └── XvideosIcon_48.ico │ │ ├── TagIcon_32.ico │ │ └── UsersIcon_32.ico │ └── Pictures │ │ ├── ApplicationPic_16.png │ │ ├── ArrowDownPic_Blue_24.png │ │ ├── BookmarkBlack_16.png │ │ ├── BrushToolPic_16.png │ │ ├── CutPic_48.png │ │ ├── DBPic_32.png │ │ ├── DeletePic_24.png │ │ ├── FindPic_16.png │ │ ├── FolderPic_32.png │ │ ├── GlobePic_32.png │ │ ├── HeartPic_32.png │ │ ├── InfoPic_32.png │ │ ├── MessagePic_16.png │ │ ├── OkPic_32.png │ │ ├── PastePic_32.png │ │ ├── Pause_Blue_16.png │ │ ├── PencilPic_16.png │ │ ├── PicturePic_32.png │ │ ├── PinPic_32.png │ │ ├── PlusPic_24.png │ │ ├── RSSPic_512.png │ │ ├── RefreshPic_24.png │ │ ├── ScriptPic_32.png │ │ ├── SettingsPic_16.bmp │ │ ├── SitePictures │ │ ├── BlueskyPic_32.png │ │ ├── FacebookPic_37.png │ │ ├── InstagramPic_76.png │ │ ├── JFFPic_76.png │ │ ├── LPSGPic_32.png │ │ ├── MastodonPic_48.png │ │ ├── OnlyFansPic_32.png │ │ ├── PinterestPic_48.png │ │ ├── PornHubPic_16.png │ │ ├── RedGifsPic_32.png │ │ ├── RedditPic_512.png │ │ ├── ThisVidPic_16.png │ │ ├── TikTokPic_192.png │ │ ├── XhamsterPic_32.png │ │ └── XvideosPic_32.png │ │ ├── StarPic_24.png │ │ ├── StartPic_Green_16.png │ │ ├── StopPic_32.png │ │ └── TagPic_24.png ├── Download │ ├── ActiveDownloadingProgress.Designer.vb │ ├── ActiveDownloadingProgress.resx │ ├── ActiveDownloadingProgress.vb │ ├── Automation │ │ ├── AutoDownloader.vb │ │ ├── AutoDownloaderEditorForm.Designer.vb │ │ ├── AutoDownloaderEditorForm.resx │ │ ├── AutoDownloaderEditorForm.vb │ │ ├── AutoDownloaderPauseButtons.vb │ │ ├── Scheduler.vb │ │ ├── SchedulerEditorForm.Designer.vb │ │ ├── SchedulerEditorForm.resx │ │ └── SchedulerEditorForm.vb │ ├── DownloadProgress.vb │ ├── DownloadSavedPostsForm.Designer.vb │ ├── DownloadSavedPostsForm.resx │ ├── DownloadSavedPostsForm.vb │ ├── DownloadedInfoForm.Designer.vb │ ├── DownloadedInfoForm.resx │ ├── DownloadedInfoForm.vb │ ├── Feed │ │ ├── DownloadFeedForm.Designer.vb │ │ ├── DownloadFeedForm.resx │ │ ├── DownloadFeedForm.vb │ │ ├── FeedCopyToForm.Designer.vb │ │ ├── FeedCopyToForm.resx │ │ ├── FeedCopyToForm.vb │ │ ├── FeedFilter.vb │ │ ├── FeedFilterForm.Designer.vb │ │ ├── FeedFilterForm.resx │ │ ├── FeedFilterForm.vb │ │ ├── FeedMedia.Designer.vb │ │ ├── FeedMedia.resx │ │ ├── FeedMedia.vb │ │ ├── FeedMoveCopyTo.vb │ │ ├── FeedSpecial.vb │ │ ├── FeedSpecialCollection.vb │ │ ├── FeedVideo.Designer.vb │ │ ├── FeedVideo.resx │ │ ├── FeedVideo.vb │ │ └── FeedView.vb │ ├── Groups │ │ ├── DownloadGroup.vb │ │ ├── DownloadGroupCollection.vb │ │ ├── GroupDefaults.vb │ │ ├── GroupEditorForm.Designer.vb │ │ ├── GroupEditorForm.resx │ │ ├── GroupEditorForm.vb │ │ ├── GroupListForm.Designer.vb │ │ ├── GroupListForm.resx │ │ ├── GroupListForm.vb │ │ ├── GroupParameters.vb │ │ └── GroupUsersViewer.vb │ ├── MissingPostsForm.Designer.vb │ ├── MissingPostsForm.resx │ ├── MissingPostsForm.vb │ ├── STDownloader │ │ ├── Declarations.vb │ │ ├── DownloaderUrlForm.Designer.vb │ │ ├── DownloaderUrlForm.resx │ │ ├── DownloaderUrlForm.vb │ │ ├── DownloaderUrlsArrForm.Designer.vb │ │ ├── DownloaderUrlsArrForm.resx │ │ ├── DownloaderUrlsArrForm.vb │ │ ├── VideoDownloaderForm.Designer.vb │ │ ├── VideoDownloaderForm.resx │ │ └── VideoDownloaderForm.vb │ ├── TDownloader.vb │ ├── UserDownloadQueueForm.Designer.vb │ ├── UserDownloadQueueForm.resx │ ├── UserDownloadQueueForm.vb │ └── WebClient2.vb ├── Editors │ ├── CollectionEditorForm.Designer.vb │ ├── CollectionEditorForm.resx │ ├── CollectionEditorForm.vb │ ├── ColorPicker.Designer.vb │ ├── ColorPicker.resx │ ├── ColorPicker.vb │ ├── ColorPickerInternalForm.Designer.vb │ ├── ColorPickerInternalForm.resx │ ├── ColorPickerInternalForm.vb │ ├── DataColor.vb │ ├── GlobalLocationsChooserForm.Designer.vb │ ├── GlobalLocationsChooserForm.resx │ ├── GlobalLocationsChooserForm.vb │ ├── GlobalSettingsForm.Designer.vb │ ├── GlobalSettingsForm.resx │ ├── GlobalSettingsForm.vb │ ├── LabelsForm.Designer.vb │ ├── LabelsForm.resx │ ├── LabelsForm.vb │ ├── SiteDefaults.vb │ ├── SiteEditorForm.Designer.vb │ ├── SiteEditorForm.resx │ ├── SiteEditorForm.vb │ ├── SiteSelectionForm.Designer.vb │ ├── SiteSelectionForm.resx │ ├── SiteSelectionForm.vb │ ├── UserCreatorForm.Designer.vb │ ├── UserCreatorForm.resx │ ├── UserCreatorForm.vb │ ├── UsersInfoForm.Designer.vb │ ├── UsersInfoForm.resx │ └── UsersInfoForm.vb ├── GlobalSuppressions.vb ├── LabelsKeeper.vb ├── ListImagesLoader.vb ├── MainFrame.Designer.vb ├── MainFrame.resx ├── MainFrame.vb ├── MainFrameObjects.vb ├── MainMod.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ ├── Settings.settings │ └── app.manifest ├── MyProgressExt.vb ├── PluginsEnvironment │ ├── Attributes │ │ └── Attributes.vb │ └── Hosts │ │ ├── DownloadableMediaHost.vb │ │ ├── LogHost.vb │ │ ├── PluginHost.vb │ │ ├── PropertyValueHost.vb │ │ ├── SettingsHost.vb │ │ ├── SettingsHostCollection.vb │ │ └── UserDataHost.vb ├── SCrawler.vbproj ├── SettingsCLS.vb ├── SiteResources.Designer.vb ├── SiteResources.resx ├── ToolStripKeysButton.vb ├── UserBan.vb ├── UserFinder.vb ├── UserImage.vb ├── UserInfo.vb ├── UserSearchForm.Designer.vb ├── UserSearchForm.resx ├── UserSearchForm.vb └── packages.config └── Tools ├── ArchiveSCrawlerUsersDataFiles.bat ├── DeleteGDLTempFiles.bat └── NET.FrameworkVersion.ps1 /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Declare files that will always have CRLF line endings on checkout. 5 | *.md text eol=crlf -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: #andyprogram 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: ['https://github.com/AAndyProgram/SCrawler/blob/main/HowToSupport.md'] 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. **Profile URL**: 16 | 2. **Post URL**: 17 | 3. Do something 18 | 4. See error 19 | 20 |
21 | Log data 22 |
23 | 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.
24 | 
25 |
26 | 27 | **Expected behavior** 28 | A clear and concise description of what you expected to happen. 29 | 30 | **Screenshots** 31 | If applicable, add screenshots to help explain your problem. 32 | 33 | **Release information:** 34 | 35 | **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).** 36 | - OS: [e.g. Windows 10, Windows 11] 37 | - Architecture: [e.g. x86, x64] 38 | - Version: [e.g. 2023.3.5.0] 39 | - NET.Framework version: 40 | - ffmpeg version (command `ffmpeg -version`): 41 | - yt-dlp version (command `yt-dlp --version`): 42 | - gallery-dl version (command `gallery-dl --version`): 43 | - cURL version (command `curl --version`): 44 | 45 | **Additional context** 46 | Add any other context about the problem here. 47 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[REQUEST]" 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/plugin_add.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: I developed a plugin for SCrawler 3 | about: I developed a plugin for SCrawler. Add plugin to plugin list. 4 | title: "[NEW PLUGIN]" 5 | labels: 'New Plugin' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Plugin address: 11 | Plugin name: 12 | Plugin site: -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributor's Guide 2 | 3 | Follow these steps to contribute: 4 | 1. Find an [issue](https://github.com/AAndyProgram/SCrawler/issues) that needs assistance. 5 | 1. Let me know you're working on this by posting a comment on this issue. 6 | 1. If you find a bug in the code, please provide a link to the file and line number. 7 | 1. If you have a code change suggestion, you can post a replacement code block. 8 | 9 | # How to report a problem 10 | 11 | **[Read here](https://github.com/AAndyProgram/SCrawler/blob/main/FAQ.md#how-to-report-a-problem)** 12 | 13 | # How to build from source 14 | 1. Delete the `PersonalUtilities` project from the solution. 15 | 1. Delete the `PersonalUtilities.Notifications` project from the solution. 16 | 1. The following libraries must be added to project references with the '**Copy to output folder**' option: 17 | - `PersonalUtilities.dll` 18 | - `PersonalUtilities.Notifications.dll` 19 | - `Microsoft.Toolkit.Uwp.Notifications.dll` 20 | - `System.ValueTuple.dll` 21 | 1. Import `PersonalUtilities.Functions` for the whole project. 22 | 23 | **Always use the correct libraries. You must download libraries from the same release date as the code commit date.** 24 | 25 | # How to request a new site 26 | 27 | **I'm currently not accepting requests to develop new sites.** 28 | 29 | 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. 30 | 1. If you don't find anything, create a new issue with your request. 31 | 32 | # Requirements for new site requests 33 | 34 | **Attention! I'll add a new site only if I'm interested. I also have a life, and any development takes time.** 35 | 36 | - Post a link to the site's API 37 | - Post request URLs **without OAuth** authentication 38 | - Post a **complete cURL** request which provides the required information (JSON is better) 39 | 40 | **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. 41 | 42 | If I'm interested in a site you want to add, it may be added in future releases. 43 | 44 | # Sites I will never develop 45 | - Tumblr -------------------------------------------------------------------------------- /HowToSupport.md: -------------------------------------------------------------------------------- 1 | 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. 2 | 3 | You can support the program by: 4 | - **Bitcoin**: BC1Q0NH839FT5TA44DD7L7RLR97XDQAG9V8D6N7XET 5 | - :repeat: make a post about my program on your profile (Reddit, Twitter, Instagram and any other social networks) 6 | - :speech_balloon: tell your friends about the program 7 | - :heart: like the program on this site: https://alternativeto.net/software/scrawler/about/ 8 | - :heart: like the program on this site: https://www.softpedia.com/get/Internet/Download-Managers/Social-networks-crawler.shtml 9 | - suggest my program as an alternative ([on this site](https://alternativeto.net/software/scrawler/about/)) to any program you have used before 10 | 11 | I would be very grateful for any support! :blush: 12 | -------------------------------------------------------------------------------- /Plugins.md: -------------------------------------------------------------------------------- 1 | You can create a plugin for any site you want. **To create a plugin, read [this guide](https://github.com/AAndyProgram/SCrawler/wiki/Plugins).** 2 | 3 | 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. 4 | 5 | ---- 6 | 7 | List of available plugins: 8 | 9 | Tools: 10 | - [image2post](https://github.com/unknown81311/SCrawler-image2post) by @unknown81311: **get reddit post URL from file.** -------------------------------------------------------------------------------- /ProgramScreenshots/AppYouTube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/AppYouTube.png -------------------------------------------------------------------------------- /ProgramScreenshots/AppYouTubeMusic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/AppYouTubeMusic.png -------------------------------------------------------------------------------- /ProgramScreenshots/AppYouTubePlaylist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/AppYouTubePlaylist.png -------------------------------------------------------------------------------- /ProgramScreenshots/AppYouTubePlaylistParser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/AppYouTubePlaylistParser.png -------------------------------------------------------------------------------- /ProgramScreenshots/AppYouTubeSettings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/AppYouTubeSettings.png -------------------------------------------------------------------------------- /ProgramScreenshots/AppYouTubeVideo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/AppYouTubeVideo.png -------------------------------------------------------------------------------- /ProgramScreenshots/BugReport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/BugReport.png -------------------------------------------------------------------------------- /ProgramScreenshots/Channels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/Channels.png -------------------------------------------------------------------------------- /ProgramScreenshots/ChannelsStats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/ChannelsStats.png -------------------------------------------------------------------------------- /ProgramScreenshots/ChannelsStats2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/ChannelsStats2.png -------------------------------------------------------------------------------- /ProgramScreenshots/CreateUserClear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/CreateUserClear.png -------------------------------------------------------------------------------- /ProgramScreenshots/DownloadInfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/DownloadInfo.png -------------------------------------------------------------------------------- /ProgramScreenshots/FeedMoveCopyTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/FeedMoveCopyTo.png -------------------------------------------------------------------------------- /ProgramScreenshots/FeedWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/FeedWindow.png -------------------------------------------------------------------------------- /ProgramScreenshots/FeedWindowItemContext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/FeedWindowItemContext.png -------------------------------------------------------------------------------- /ProgramScreenshots/FeedWindowSessionContext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/FeedWindowSessionContext.png -------------------------------------------------------------------------------- /ProgramScreenshots/GroupCreating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/GroupCreating.png -------------------------------------------------------------------------------- /ProgramScreenshots/Labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/Labels.png -------------------------------------------------------------------------------- /ProgramScreenshots/LocationsChanger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/LocationsChanger.png -------------------------------------------------------------------------------- /ProgramScreenshots/MainContext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/MainContext.png -------------------------------------------------------------------------------- /ProgramScreenshots/MainWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/MainWindow.png -------------------------------------------------------------------------------- /ProgramScreenshots/MainWindowGroups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/MainWindowGroups.png -------------------------------------------------------------------------------- /ProgramScreenshots/MainWindowPause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/MainWindowPause.png -------------------------------------------------------------------------------- /ProgramScreenshots/MainWindowView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/MainWindowView.png -------------------------------------------------------------------------------- /ProgramScreenshots/MissingPosts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/MissingPosts.png -------------------------------------------------------------------------------- /ProgramScreenshots/SavedPosts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SavedPosts.png -------------------------------------------------------------------------------- /ProgramScreenshots/SearchUsers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SearchUsers.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsAutoDownloader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsAutoDownloader.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalBasis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalBasis.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalBehavior.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalBehavior.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalChannels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalChannels.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalDefaults.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalDefaults.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalDesign.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalDesign.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalDownloader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalDownloader.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalDownloading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalDownloading.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalEnvironment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalEnvironment.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalFeed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalFeed.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalHeaders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalHeaders.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsGlobalNotifications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsGlobalNotifications.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsRedditView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsRedditView.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsScheduler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsScheduler.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteBluesky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteBluesky.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteFacebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteFacebook.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteInstagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteInstagram.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteInstagramData.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteInstagramData.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteJustForFans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteJustForFans.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteLPSG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteLPSG.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteMastodon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteMastodon.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteMastodonAdditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteMastodonAdditional.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteOnlyFans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteOnlyFans.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteOnlyFansAdditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteOnlyFansAdditional.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSitePinterest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSitePinterest.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSitePornHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSitePornHub.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteRedGifs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteRedGifs.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteReddit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteReddit.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteThisVid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteThisVid.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteThreads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteThreads.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteTikTok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteTikTok.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteTwitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteTwitter.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteXHamster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteXHamster.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteXvideos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteXvideos.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteXvideosAdditional.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteXvideosAdditional.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsSiteYouTube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsSiteYouTube.png -------------------------------------------------------------------------------- /ProgramScreenshots/SettingsTwitterUser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/SettingsTwitterUser.png -------------------------------------------------------------------------------- /ProgramScreenshots/TrayContextMenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/TrayContextMenu.png -------------------------------------------------------------------------------- /ProgramScreenshots/UserDefaultQueryOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/UserDefaultQueryOptions.png -------------------------------------------------------------------------------- /ProgramScreenshots/UserMetrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/ProgramScreenshots/UserMetrics.png -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/Content/Icons/Icon32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Plugin.LPSG/Content/Icons/Icon32.ico -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/Content/Pictures/IconPic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Plugin.LPSG/Content/Pictures/IconPic_32.png -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/Declarations.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2022 Andy 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports PersonalUtilities.Functions.RegularExpressions 10 | Friend Module Declarations 11 | Friend ReadOnly Property PhotoRegEx As RParams = RParams.DM("(https://www.lpsg.com/attachments)(.+?)(?="")", 0, RegexReturn.List) 12 | Friend ReadOnly Property PhotoRegExExt As New RParams("img.data.src=""(/proxy[^""]+?)""", Nothing, 1, RegexReturn.List) With { 13 | .Converter = Function(Input) $"https://www.lpsg.com/{SymbolsConverter.HTML.Decode(Input)}"} 14 | Friend ReadOnly Property NextPageRegex As RParams = RParams.DMS(" 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | 1 9 | true 10 | 11 | -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.Plugin.LPSG/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/Content/Icons/Icon32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Plugin.XVIDEOS/Content/Icons/Icon32.ico -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/Content/Pictures/IconPic32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Plugin.XVIDEOS/Content/Pictures/IconPic32.png -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/Declarations.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2022 Andy 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports PersonalUtilities.Functions.RegularExpressions 10 | Friend Module Declarations 11 | Friend ReadOnly Property M3U8Regex As RParams = RParams.DM("http.+?.m3u8.*?(?=')", 0) 12 | Friend ReadOnly Property VideoTitleRegex As RParams = RParams.DMS("html5player.setVideoTitle\('(.+)(?='\);)", 1) 13 | Friend ReadOnly Property VideoID As RParams = RParams.DMS(".*?www.xvideos.com/(video\d+).*", 1) 14 | Friend ReadOnly Property M3U8Reparse As RParams = RParams.DM("NAME=""(\d+).*?""[\r\n]*?(.+)(?=(|[\r\n]+?))", 0, RegexReturn.List) 15 | Friend ReadOnly Property M3U8Appender As RParams = RParams.DM("(.+)(?=/.+?\.m3u8.*?)", 0) 16 | End Module -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | 1 9 | true 10 | 11 | -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.Plugin.XVIDEOS/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler.PluginProvider/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Interfaces/IDownloadableMedia.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Interface IDownloadableMedia : Inherits IUserMedia, IDisposable 11 | Event CheckedChange As EventHandler 12 | Event ThumbnailChanged As EventHandler 13 | Event StateChanged As EventHandler 14 | ReadOnly Property SiteIcon As Drawing.Image 15 | ReadOnly Property Site As String 16 | ReadOnly Property SiteKey As String 17 | Property AccountName As String 18 | Property ThumbnailUrl As String 19 | Property ThumbnailFile As String 20 | Property Title As String 21 | Property Size As Integer 22 | Property Duration As TimeSpan 23 | Property Progress As Object 24 | ReadOnly Property HasError As Boolean 25 | ReadOnly Property Exists As Boolean 26 | Property Checked As Boolean 27 | Property Instance As IPluginContentProvider 28 | Sub Download(ByVal UseCookies As Boolean, ByVal Token As Threading.CancellationToken) 29 | Sub Delete(ByVal RemoveFiles As Boolean) 30 | Sub Load(ByVal File As String) 31 | Sub Save() 32 | Overloads Function ToString() As String 33 | Overloads Function ToString(ByVal ForMediaItem As Boolean) As String 34 | End Interface 35 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Interfaces/IPluginContentProvider.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Interface IPluginContentProvider : Inherits IDisposable 11 | Event ProgressChanged(ByVal Value As Integer) 12 | Event ProgressMaximumChanged(ByVal Value As Integer, ByVal Add As Boolean) 13 | Event ProgressPreChanged As ProgressChangedEventHandler 14 | Event ProgressPreMaximumChanged As ProgressMaximumChangedEventHandler 15 | Property Thrower As IThrower 16 | Property LogProvider As ILogProvider 17 | Property Settings As ISiteSettings 18 | Property AccountName As String 19 | Property Name As String 20 | Property NameTrue As String 21 | Property ID As String 22 | Property Options As String 23 | Property ParseUserMediaOnly As Boolean 24 | Property UserDescription As String 25 | Property ExistingContentList As List(Of IUserMedia) 26 | Property TempPostsList As List(Of String) 27 | Property TempMediaList As List(Of IUserMedia) 28 | Property UserExists As Boolean 29 | Property UserSuspended As Boolean 30 | Property IsSavedPosts As Boolean 31 | Property IsSubscription As Boolean 32 | Property SeparateVideoFolder As Boolean 33 | Property DataPath As String 34 | Property PostsNumberLimit As Integer? 35 | Property DownloadDateFrom As Date? 36 | Property DownloadDateTo As Date? 37 | Function ExchangeOptionsGet() As Object 38 | Sub ExchangeOptionsSet(ByVal Obj As Object) 39 | Sub XmlFieldsSet(ByVal Fields As List(Of KeyValuePair(Of String, String))) 40 | Function XmlFieldsGet() As List(Of KeyValuePair(Of String, String)) 41 | Sub GetMedia(ByVal Token As Threading.CancellationToken) 42 | Sub Download(ByVal Token As Threading.CancellationToken) 43 | Sub DownloadSingleObject(ByVal Data As IDownloadableMedia, ByVal Token As Threading.CancellationToken) 44 | Sub ResetHistoryData() 45 | End Interface 46 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Interfaces/ISiteSettings.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports System.Drawing 10 | Namespace Plugin 11 | Public Interface ISiteSettings : Inherits IDisposable 12 | Enum Download As Integer 13 | Main = 0 14 | SavedPosts = 1 15 | SingleObject = 2 16 | End Enum 17 | ReadOnly Property Icon As Icon 18 | ReadOnly Property Image As Image 19 | ReadOnly Property Site As String 20 | Property CMDEncoding As String 21 | Property EnvironmentPrograms As IEnumerable(Of String) 22 | Property UserAgentDefault As String 23 | Sub EnvironmentProgramsUpdated() 24 | Property AccountName As String 25 | Property Temporary As Boolean 26 | Property DefaultInstance As ISiteSettings 27 | ReadOnly Property SubscriptionsAllowed As Boolean 28 | Property Logger As ILogProvider 29 | Function GetUserUrl(ByVal User As IPluginContentProvider) As String 30 | Function IsMyUser(ByVal UserURL As String) As ExchangeOptions 31 | Function IsMyImageVideo(ByVal URL As String) As ExchangeOptions 32 | Function GetInstance(ByVal What As Download) As IPluginContentProvider 33 | Function GetSingleMediaInstance(ByVal URL As String, ByVal OutputFile As String) As IDownloadableMedia 34 | Function GetUserPostUrl(ByVal User As IPluginContentProvider, ByVal Media As IUserMedia) As String 35 | #Region "Initialization" 36 | Sub BeginInit() 37 | Sub EndInit() 38 | Sub BeginUpdate() 39 | Sub EndUpdate() 40 | Sub BeginEdit() 41 | Sub EndEdit() 42 | #End Region 43 | #Region "Site availability" 44 | Property AvailableText As String 45 | Function Available(ByVal What As Download, ByVal Silent As Boolean) As Boolean 46 | Function ReadyToDownload(ByVal What As Download) As Boolean 47 | #End Region 48 | #Region "Downloading" 49 | Sub DownloadStarted(ByVal What As Download) 50 | Sub BeforeStartDownload(ByVal User As Object, ByVal What As Download) 51 | Sub AfterDownload(ByVal User As Object, ByVal What As Download) 52 | Sub DownloadDone(ByVal What As Download) 53 | #End Region 54 | Function Clone(ByVal Full As Boolean) As ISiteSettings 55 | Sub Delete() 56 | Overloads Sub Update() 57 | Overloads Sub Update(ByVal Source As ISiteSettings) 58 | Sub Reset() 59 | Sub OpenSettingsForm() 60 | Sub UserOptions(ByRef Options As Object, ByVal OpenForm As Boolean) 61 | End Interface 62 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /SCrawler.PluginProvider/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | 1 9 | true 10 | 11 | -------------------------------------------------------------------------------- /SCrawler.PluginProvider/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.PluginProvider/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler.PluginProvider/ObjectInterfaces/ILogProvider.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Interface ILogProvider 11 | Overloads Sub Add(ByVal Message As String) 12 | Overloads Sub Add(ByVal ex As Exception, ByVal Message As String, 13 | Optional ByVal ShowMainMsg As Boolean = False, Optional ByVal ShowErrorMsg As Boolean = False, 14 | Optional ByVal SendToLog As Boolean = True) 15 | End Interface 16 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/ObjectInterfaces/IPropertyProvider.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Interface IPropertyProvider : Inherits IFormatProvider 11 | Property PropertyName As String 12 | End Interface 13 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/ObjectInterfaces/IThrower.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Interface IThrower 11 | Sub ThrowAny() 12 | End Interface 13 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Objects/ExchangeOptions.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Structure ExchangeOptions 11 | Public UserName As String 12 | Public SiteName As String 13 | Public HostKey As String 14 | Public Options As String 15 | Public Exists As Boolean 16 | Public Sub New(ByVal Site As String, ByVal Name As String) 17 | UserName = Name 18 | SiteName = Site 19 | Exists = Not String.IsNullOrEmpty(Name) And Not String.IsNullOrWhiteSpace(Name) 20 | End Sub 21 | End Structure 22 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Objects/ExitException.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | ''' Represents errors that occur during downloading to be thrown to the root downloading function. 11 | Public Class ExitException : Inherits Exception 12 | ''' Add only the message to the log, without adding a . Default: . 13 | ''' if only the message should be added to the log; otherwise the stack trace will also be added. 14 | Public Property SimpleLogLine As Boolean = True 15 | ''' Don't add a message to the log. Default: . 16 | ''' 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. 17 | Public Property Silent As Boolean = False 18 | ''' Initializes a new instance of the class. 19 | Public Sub New() 20 | End Sub 21 | ''' Initializes a new instance of the class with a specified error message. 22 | ''' The message that describes the error. 23 | Public Sub New(ByVal Message As String) 24 | MyBase.New(Message) 25 | End Sub 26 | ''' 27 | ''' Initializes a new instance of the class with a specified error message 28 | ''' and a reference to the inner exception that is the cause of this exception. 29 | ''' 30 | ''' The error message that explains the reason for the exception. 31 | ''' The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. 32 | Public Sub New(ByVal Message As String, ByVal InnerException As Exception) 33 | MyBase.New(Message, InnerException) 34 | End Sub 35 | End Class 36 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Objects/PluginUserMedia.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Delegate Sub ProgressChange(ByVal Value As Double?, ByVal Maximum As Double?, ByVal Information As String) 11 | Public Enum UserMediaTypes As Integer 12 | Undefined = 0 13 | Picture = 1 14 | Video = 2 15 | Audio = 200 16 | Text = 4 17 | VideoPre = 10 18 | AudioPre = 215 19 | GIF = 50 20 | m3u8 = 100 21 | End Enum 22 | Public Enum UserMediaStates As Integer 23 | Unknown = 0 24 | Tried = 1 25 | Downloaded = 2 26 | Skipped = 3 27 | Missing = 4 28 | End Enum 29 | Public Structure PluginUserMedia : Implements IUserMedia 30 | Public Property ContentType As UserMediaTypes Implements IUserMedia.ContentType 31 | Public Property URL As String Implements IUserMedia.URL 32 | Public Property URL_BASE As String Implements IUserMedia.URL_BASE 33 | Public Property MD5 As String Implements IUserMedia.MD5 34 | Public Property File As String Implements IUserMedia.File 35 | Public Property DownloadState As UserMediaStates Implements IUserMedia.DownloadState 36 | Public Property PostID As String Implements IUserMedia.PostID 37 | Public Property PostDate As Date? Implements IUserMedia.PostDate 38 | Public Property PostText As String Implements IUserMedia.PostText 39 | Public Property PostTextFile As String Implements IUserMedia.PostTextFile 40 | Public Property PostTextFileSpecialFolder As Boolean Implements IUserMedia.PostTextFileSpecialFolder 41 | Public Property SpecialFolder As String Implements IUserMedia.SpecialFolder 42 | Public Property Attempts As Integer Implements IUserMedia.Attempts 43 | Public Property [Object] As Object Implements IUserMedia.Object 44 | End Structure 45 | Public Interface IUserMedia 46 | Property ContentType As UserMediaTypes 47 | Property URL As String 48 | Property URL_BASE As String 49 | Property MD5 As String 50 | Property File As String 51 | Property DownloadState As UserMediaStates 52 | Property PostID As String 53 | Property PostDate As Date? 54 | Property PostText As String 55 | Property PostTextFile As String 56 | Property PostTextFileSpecialFolder As Boolean 57 | Property SpecialFolder As String 58 | Property Attempts As Integer 59 | Property [Object] As Object 60 | End Interface 61 | End Namespace -------------------------------------------------------------------------------- /SCrawler.PluginProvider/Objects/PropertyData.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace Plugin 10 | Public Structure PropertyData 11 | Public ReadOnly Name As String 12 | Public ReadOnly Value As Object 13 | Public Sub New(ByVal Name As String, ByVal Value As Object) 14 | Me.Name = Name 15 | Me.Value = Value 16 | End Sub 17 | End Structure 18 | End Namespace -------------------------------------------------------------------------------- /SCrawler.Shared/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.Shared/Content/Icons/FilterIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Shared/Content/Icons/FilterIcon.ico -------------------------------------------------------------------------------- /SCrawler.Shared/Content/Images/FilterPic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Shared/Content/Images/FilterPic.png -------------------------------------------------------------------------------- /SCrawler.Shared/Functions.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace [Shared] 10 | Public Module Functions 11 | Public Const NewReleaseFolderName As String = "__NewRelease" 12 | Public Function GetCurrentMaxVer(Optional ByVal Path As SFile = Nothing) As Version 13 | Try 14 | If Path.IsEmptyString Then Path = Application.StartupPath.CSFileP 15 | If Path.Exists(SFO.Path, False) Then 16 | Dim versions As New List(Of Version) 17 | Dim v As FileVersionInfo 18 | With SFile.GetFiles(Path, "*.exe",, EDP.ReturnValue).ListIfNothing.Where(Function(f) f.Name = "SCrawler" Or f.Name = "YouTubeDownloader") 19 | If .ListExists Then 20 | For Each f As SFile In .Self 21 | v = FileVersionInfo.GetVersionInfo(f) 22 | versions.Add(New Version(v.ProductVersion)) 23 | Next 24 | End If 25 | End With 26 | If versions.Count > 0 Then Return versions.Max 27 | End If 28 | Catch 29 | End Try 30 | Return Nothing 31 | End Function 32 | End Module 33 | End Namespace -------------------------------------------------------------------------------- /SCrawler.Shared/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /SCrawler.Shared/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | 1 9 | true 10 | 11 | -------------------------------------------------------------------------------- /SCrawler.Shared/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.Shared/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler.Updater/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.Updater/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /SCrawler.Updater/Content/Icons/RainbowIcon_48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.Updater/Content/Icons/RainbowIcon_48.ico -------------------------------------------------------------------------------- /SCrawler.Updater/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /SCrawler.Updater/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | false 4 | false 5 | 0 6 | true 7 | 0 8 | 2 9 | true 10 | 11 | -------------------------------------------------------------------------------- /SCrawler.Updater/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.Updater/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler.YouTube/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.YouTube/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /SCrawler.YouTube/Attributes/GridVisibleAttribute.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace API.YouTube.Attributes 10 | 11 | Public Class GridVisibleAttribute : Inherits Attribute 12 | Private ReadOnly NonAppMode As Boolean = True 13 | Public Sub New() 14 | End Sub 15 | Public Sub New(ByVal NonAppMode As Boolean) 16 | Me.NonAppMode = NonAppMode 17 | End Sub 18 | Public Overrides Function Equals(ByVal Obj As Object) As Boolean 19 | If Not Obj Is Nothing AndAlso TypeOf Obj Is GridVisibleAttribute Then 20 | If NonAppMode Then 21 | Return DirectCast(Obj, GridVisibleAttribute).NonAppMode 22 | Else 23 | Return True 24 | End If 25 | Else 26 | Return False 27 | End If 28 | End Function 29 | End Class 30 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Base/TableControlsProcessor.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace API.YouTube.Controls 10 | Friend Class TableControlsProcessor 11 | Private ReadOnly Property TP_CONTROLS As TableLayoutPanel 12 | Friend Sub New(ByRef TP As TableLayoutPanel) 13 | TP_CONTROLS = TP 14 | End Sub 15 | Private _LatestSelected As Integer = -1 16 | Friend Sub MediaItem_Click(ByVal Sender As Object, ByVal e As EventArgs) 17 | Try 18 | _LatestSelected = TP_CONTROLS.GetPositionFromControl(Sender).Row 19 | DirectCast(Sender, Control).Focus() 20 | Catch ex As Exception 21 | _LatestSelected = -1 22 | End Try 23 | End Sub 24 | Friend Sub MediaItem_KeyDown(ByVal Sender As Object, ByVal e As KeyEventArgs) 25 | Try 26 | If e.KeyCode = Keys.Down Or e.KeyCode = Keys.Up Then 27 | Dim newPosition% = _LatestSelected + IIf(e.KeyCode = Keys.Down, 1, -1) 28 | If newPosition < 0 Then newPosition = 0 29 | If newPosition <> _LatestSelected Then 30 | Dim cnt As DownloadObjects.STDownloader.MediaItem = TP_CONTROLS.GetControlFromPosition(0, newPosition) 31 | If Not cnt Is Nothing Then cnt.PerformClick() 32 | End If 33 | End If 34 | Catch 35 | End Try 36 | End Sub 37 | End Class 38 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Icons/YouTubeIcon_32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Icons/YouTubeIcon_32.ico -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Icons/YouTubeMusicIcon_32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Icons/YouTubeMusicIcon_32.ico -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/ArrowDownPic_Blue_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/ArrowDownPic_Blue_24.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/AudioMusic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/AudioMusic_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/ClockPic_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/ClockPic_16.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/HeartPic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/HeartPic_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/ImagePic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/ImagePic_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/InfoPic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/InfoPic_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/LinkPic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/LinkPic_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/MailPic_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/MailPic_16.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/RulerPic_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/RulerPic_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/SettingsPic_16.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/SettingsPic_16.bmp -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/StartPic_Green_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/StartPic_Green_16.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/VideoCamera_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/VideoCamera_32.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/YouTubeMusicPic_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/YouTubeMusicPic_96.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Content/Pictures/YouTubePic_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTube/Content/Pictures/YouTubePic_96.png -------------------------------------------------------------------------------- /SCrawler.YouTube/Controls/ButtonRC.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace API.YouTube.Controls 10 | Public Class ButtonRC : Inherits Button 11 | Private Const WM_CONTEXTMENU As Integer = 123 '&H7B 12 | Private Const WM_CANCELMODE As Integer = 31 '&H1F 13 | Private Const WM_INITMENUPOPUP As Integer = 279 '&H117 14 | Private Const SMTO_NOTIMEOUTIFNOTHUNG As Integer = 8 15 | Protected Overrides Sub WndProc(ByRef m As Message) 16 | If m.Msg = WM_CONTEXTMENU Or m.Msg = WM_CANCELMODE Or m.Msg = WM_INITMENUPOPUP Or m.Msg = SMTO_NOTIMEOUTIFNOTHUNG Then 17 | m.Result = IntPtr.Zero 18 | Else 19 | MyBase.WndProc(m) 20 | End If 21 | End Sub 22 | End Class 23 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Controls/PlaylistArrayForm.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports PersonalUtilities.Forms 10 | Imports PersonalUtilities.Functions.XML 11 | Imports PersonalUtilities.Functions.XML.Base 12 | Namespace API.YouTube.Controls 13 | Friend Class PlaylistArrayForm : Implements IDesignXMLContainer 14 | Private WithEvents MyDefs As DefaultFormOptions 15 | Friend Property DesignXML As EContainer Implements IDesignXMLContainer.DesignXML 16 | Private Property DesignXMLNodes As String() Implements IDesignXMLContainer.DesignXMLNodes 17 | Private Property DesignXMLNodeName As String Implements IDesignXMLContainer.DesignXMLNodeName 18 | Friend ReadOnly Property URLs As List(Of String) 19 | Get 20 | If Not TXT_URLS.Text.IsEmptyString Then 21 | Return ListAddList(Nothing, TXT_URLS.Text.StringFormatLines.StringToList(Of String)(vbNewLine), 22 | LAP.NotContainsOnly, EDP.ReturnValue, CType(Function(Input$) Input.StringTrim, Func(Of Object, Object))).ListIfNothing 23 | Else 24 | Return New List(Of String) 25 | End If 26 | End Get 27 | End Property 28 | Friend ReadOnly Property IsOneArtist As Boolean 29 | Get 30 | Return CH_PLS_ONE.Checked 31 | End Get 32 | End Property 33 | Friend Sub New() 34 | InitializeComponent() 35 | MyDefs = New DefaultFormOptions(Me) 36 | End Sub 37 | Private Sub PlaylistArrayForm_Load(sender As Object, e As EventArgs) Handles Me.Load 38 | With MyDefs 39 | .MyViewInitialize() 40 | .AddOkCancelToolbar() 41 | .EndLoaderOperations() 42 | End With 43 | End Sub 44 | Private Sub PlaylistArrayForm_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 45 | If e.KeyCode = Keys.O And e.Control Then 46 | Using f As New PlayListParserForm With {.DesignXML = DesignXML} 47 | f.ShowDialog() 48 | If f.DialogResult = DialogResult.OK Then TXT_URLS.Text = f.PlayLists.ListToString(vbNewLine, EDP.ReturnValue) 49 | End Using 50 | e.Handled = True 51 | End If 52 | End Sub 53 | End Class 54 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Downloader/IDownloaderSettings.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace DownloadObjects.STDownloader 10 | Public Interface IDownloaderSettings 11 | ReadOnly Property ShowNotifications As Boolean 12 | ReadOnly Property ShowNotificationsEveryDownload As Boolean 13 | ReadOnly Property MaxJobsCount As Integer 14 | ReadOnly Property DownloadAutomatically As Boolean 15 | ReadOnly Property RemoveDownloadedAutomatically As Boolean 16 | ReadOnly Property OnItemDoubleClick As DoubleClickBehavior 17 | ReadOnly Property OpenFolderInOtherProgram As Boolean 18 | ReadOnly Property OpenFolderInOtherProgram_Command As String 19 | ReadOnly Property OutputPathAskForName As Boolean 20 | ReadOnly Property OutputPathAutoAddPaths As Boolean 21 | ReadOnly Property CreateUrlFiles As Boolean 22 | ReadOnly Property ENVIR_FFMPEG As SFile 23 | ReadOnly Property ENVIR_YTDLP As SFile 24 | ReadOnly Property ENVIR_GDL As SFile 25 | ReadOnly Property ENVIR_CURL As SFile 26 | End Interface 27 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Downloader/Notificator.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports PersonalUtilities.Tools.Notifications 10 | Namespace DownloadObjects.STDownloader 11 | Public Interface INotificator 12 | Sub Clear() 13 | Sub ShowNotification(ByVal Text As String, ByVal Image As SFile) 14 | End Interface 15 | Friend Class YTNotificator : Implements INotificator 16 | Private WithEvents Notificator As NotificationsManager 17 | Private ReadOnly Property SourceForm As Form 18 | Friend Sub New(ByRef Source As Form) 19 | Notificator = New NotificationsManager 20 | SourceForm = Source 21 | End Sub 22 | Friend Sub Clear() Implements INotificator.Clear 23 | Notificator.Clear() 24 | End Sub 25 | Friend Sub ShowNotification(ByVal Text As String, ByVal Image As SFile) Implements INotificator.ShowNotification 26 | If MyDownloaderSettings.ShowNotifications Then Notification.ShowNotification(Text,,, Image) 27 | End Sub 28 | Private Sub Notificator_OnClicked(ByVal Key As String) Handles Notificator.OnClicked 29 | SourceForm.FormShowS 30 | End Sub 31 | End Class 32 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Downloader/STDownloaderDeclarations.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace DownloadObjects.STDownloader 10 | Public Module STDownloaderDeclarations 11 | Public Const DownloaderDataFolder As String = "Settings\DownloaderData\" 12 | Public Enum DoubleClickBehavior As Integer 13 | None = SFO.None 14 | Folder = SFO.Path 15 | File = SFO.File 16 | End Enum 17 | Public Property MyNotificator As INotificator 18 | Public Property MyDownloaderSettings As IDownloaderSettings 19 | End Module 20 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | -------------------------------------------------------------------------------- /SCrawler.YouTube/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | true 4 | Form1 5 | false 6 | 0 7 | true 8 | 0 9 | 0 10 | true 11 | 12 | -------------------------------------------------------------------------------- /SCrawler.YouTube/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.YouTube/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler.YouTube/Objects/PlayList.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports PersonalUtilities.Functions.XML 10 | Imports PersonalUtilities.Forms.Toolbars 11 | Namespace API.YouTube.Objects 12 | Public Class PlayList : Inherits YouTubeMediaContainerBase 13 | Public Sub New() 14 | _ObjectType = Base.YouTubeMediaType.PlayList 15 | End Sub 16 | Public Overrides Function ToString(ByVal ForMediaItem As Boolean) As String 17 | Dim t$ = String.Empty 18 | Dim s$ = SizeStr 19 | Dim __title$ = $" - {Title}" 20 | If Not s.IsEmptyString Then s = $" [{s}]" 21 | If Not PlaylistTitle.IsEmptyString And Not ForMediaItem Then t = $"{PlaylistTitle} - " 22 | Dim c% = {Count, ElementsNumber}.Max 23 | If IsMusic Then 24 | If c <= 1 Then t &= "Single" Else t &= "Album" 25 | Else 26 | t &= "Playlist" 27 | End If 28 | If Not PlaylistTitle.IsEmptyString And Not ForMediaItem Then t &= $" - {PlaylistTitle}" 29 | If PlaylistTitle = Title Then __title = String.Empty 30 | If ForMediaItem Then 31 | Return $"{t} ({c}){__title}" 32 | Else 33 | Return $"{t} ({c}){__title} ({AConvert(Of String)(Duration, TimeToStringProvider)}){s}" 34 | End If 35 | End Function 36 | Public Overrides Function Parse(ByVal Container As EContainer, ByVal Path As SFile, ByVal IsMusic As Boolean, 37 | Optional ByVal Token As Threading.CancellationToken = Nothing, Optional ByVal Progress As IMyProgress = Nothing) As Boolean 38 | _MediaType = IIf(IsMusic, Plugin.UserMediaTypes.Audio, Plugin.UserMediaTypes.Video) 39 | _ObjectType = Base.YouTubeMediaType.PlayList 40 | Me.IsMusic = IsMusic 41 | Return ParseFiles(Path, IsMusic, Token, Progress) 42 | End Function 43 | End Class 44 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTube/Objects/Video.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports SCrawler.API.YouTube.Base 10 | Imports PersonalUtilities.Functions.XML 11 | Imports PersonalUtilities.Forms.Toolbars 12 | Namespace API.YouTube.Objects 13 | Public Class Video : Inherits YouTubeMediaContainerBase 14 | Public Sub New() 15 | _ObjectType = YouTubeMediaType.Single 16 | _MediaType = Plugin.UserMediaTypes.Video 17 | End Sub 18 | Public Overrides Function ToString(ByVal ForMediaItem As Boolean) As String 19 | Return Title 20 | End Function 21 | Public Overrides Function Parse(ByVal Container As EContainer, ByVal Path As SFile, ByVal IsMusic As Boolean, 22 | Optional ByVal Token As Threading.CancellationToken = Nothing, Optional ByVal Progress As IMyProgress = Nothing) As Boolean 23 | _MediaType = Plugin.UserMediaTypes.Video 24 | _ObjectType = YouTubeMediaType.Single 25 | Me.IsMusic = IsMusic 26 | Return MyBase.Parse(Container, Path, IsMusic, Token, Progress) 27 | End Function 28 | End Class 29 | End Namespace -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.vb] 2 | # Modifier preferences 3 | 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 -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/Content/Icons/ArrowDownIcon_Orange_24.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTubeDownloader/Content/Icons/ArrowDownIcon_Orange_24.ico -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/Content/Icons/RainbowIcon_48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AAndyProgram/SCrawler/ff0c4587eb31731b140c260999c3b60c13fe976c/SCrawler.YouTubeDownloader/Content/Icons/RainbowIcon_48.ico -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | 'NOTE: This file is auto-generated; do not modify it directly. To make changes, 18 | ' or if you encounter build errors in this file, go to the Project Designer 19 | ' (go to Project Properties or double-click the My Project node in 20 | ' Solution Explorer), and make changes on the Application tab. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = false 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.SCrawler.MainFrame 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | true 4 | MainFrame 5 | false 6 | 0 7 | true 8 | 0 9 | true 10 | -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System.Resources 2 | Imports System 3 | Imports System.Reflection 4 | Imports System.Runtime.InteropServices 5 | 6 | ' General Information about an assembly is controlled through the following 7 | ' set of attributes. Change these attribute values to modify the information 8 | ' associated with an assembly. 9 | 10 | ' Review the values of the assembly attributes 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 22 | 23 | 24 | ' Version information for an assembly consists of the following four values: 25 | ' 26 | ' Major Version 27 | ' Minor Version 28 | ' Build Number 29 | ' Revision 30 | ' 31 | ' You can specify all the values or you can default the Build and Revision Numbers 32 | ' by using the '*' as shown below: 33 | ' 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SCrawler.YouTubeDownloader/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SCrawler/API/Base/EditorExchangeOptionsBase.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports SCrawler.Plugin.Attributes 10 | Imports DN = SCrawler.API.Base.DeclaredNames 11 | Namespace API.Base 12 | Friend Class EditorExchangeOptionsBase 13 | Friend Overridable Property SiteKey As String 14 | 15 | Friend Overridable Property UserName As String = String.Empty 16 | 17 | Friend Overridable Property DownloadText As Boolean = False 18 | 19 | Friend Overridable Property DownloadTextPosts As Boolean = False 20 | 21 | Friend Overridable Property DownloadTextSpecialFolder As Boolean = False 22 | Friend Sub New(ByVal u As UserDataBase) 23 | UserName = u.NameTrue(True) 24 | DownloadText = u.DownloadText 25 | DownloadTextPosts = u.DownloadTextPosts 26 | DownloadTextSpecialFolder = u.DownloadTextSpecialFolder 27 | End Sub 28 | Friend Sub New(ByVal s As SiteSettingsBase) 29 | DownloadText = s.DownloadText.Value 30 | DownloadTextPosts = s.DownloadTextPosts.Value 31 | DownloadTextSpecialFolder = s.DownloadTextSpecialFolder.Value 32 | End Sub 33 | Friend Sub New() 34 | End Sub 35 | Protected _ApplyBase_Name As Boolean = True 36 | Protected _ApplyBase_Text As Boolean = True 37 | Friend Sub ApplyBase(ByRef u As UserDataBase) 38 | If _ApplyBase_Name Then u.NameTrue = UserName 39 | If _ApplyBase_Text Then 40 | u.DownloadText = DownloadText 41 | u.DownloadTextPosts = DownloadTextPosts 42 | u.DownloadTextSpecialFolder = DownloadTextSpecialFolder 43 | End If 44 | End Sub 45 | End Class 46 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/Base/GDL.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace API.Base.GDL 10 | Friend Class GDLBatch : Inherits TokenBatch 11 | Friend Const UrlLibStart As String = "[urllib3.connectionpool][debug]" 12 | Friend Const UrlTextStart As String = UrlLibStart & " https" 13 | Friend Sub New(ByVal _Token As Threading.CancellationToken) 14 | MyBase.New(_Token) 15 | MainProcessName = "gallery-dl" 16 | ChangeDirectory(Settings.GalleryDLFile.File) 17 | End Sub 18 | Protected Overrides Async Sub OutputDataReceiver(ByVal Sender As Object, ByVal e As DataReceivedEventArgs) 19 | If Not ProcessKilled Then 20 | MyBase.OutputDataReceiver(Sender, e) 21 | Await Validate(e.Data) 22 | End If 23 | End Sub 24 | End Class 25 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/Base/TokenBatch.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports System.Threading 10 | Imports PersonalUtilities.Tools 11 | Namespace API.Base 12 | Friend Class TokenBatch : Inherits BatchExecutor 13 | Friend Property TempPostsList As List(Of String) 14 | Protected ReadOnly Token As CancellationToken 15 | Friend Property DebugMode As Boolean = False 16 | Friend Sub New(ByVal _Token As CancellationToken) 17 | MyBase.New(True) 18 | Token = _Token 19 | End Sub 20 | Public Overrides Sub Create() 21 | If TempPostsList Is Nothing Then TempPostsList = New List(Of String) 22 | MyBase.Create() 23 | End Sub 24 | Protected Overrides Async Sub OutputDataReceiver(ByVal Sender As Object, ByVal e As DataReceivedEventArgs) 25 | MyBase.OutputDataReceiver(Sender, e) 26 | Await Task.Run(Sub() 27 | #If DEBUG Then 28 | If DebugMode Then Debug.WriteLineIf(Not e.Data.IsEmptyString, $"Out: {e.Data}") 29 | #End If 30 | If Token.IsCancellationRequested Then Kill() 31 | End Sub) 32 | End Sub 33 | Protected Overrides Async Sub ErrorDataReceiver(ByVal Sender As Object, ByVal e As DataReceivedEventArgs) 34 | MyBase.ErrorDataReceiver(Sender, e) 35 | Await Task.Run(Sub() 36 | #If DEBUG Then 37 | If DebugMode Then Debug.WriteLineIf(Not e.Data.IsEmptyString, $"Err: {e.Data}") 38 | #End If 39 | If Token.IsCancellationRequested Then Kill() 40 | End Sub) 41 | End Sub 42 | Protected Overridable Async Function Validate(ByVal Value As String) As Task 43 | If Not ProcessKilled AndAlso Await Task.Run(Of Boolean)(Function() Token.IsCancellationRequested OrElse 44 | (Not Value.IsEmptyString AndAlso 45 | TempPostsList.Exists(Function(v) Value.Contains(v)))) Then Kill() 46 | End Function 47 | End Class 48 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/Base/YTDLP.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace API.Base.YTDLP 10 | Friend Class YTDLPBatch : Inherits GDL.GDLBatch 11 | Friend Sub New(ByVal _Token As Threading.CancellationToken) 12 | MyBase.New(_Token) 13 | Commands.Clear() 14 | MainProcessName = Settings.YtdlpFile.File.Name '"yt-dlp" 15 | ChangeDirectory(Settings.YtdlpFile.File) 16 | End Sub 17 | End Class 18 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/BaseObjects/SplitCollectionUserInfo.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Namespace API.Base 10 | Friend Structure SplitCollectionUserInfo 11 | Friend UserOrig As UserInfo 12 | Friend UserNew As UserInfo 13 | Friend Changed As Boolean 14 | Friend ReadOnly Property SameDrive As Boolean 15 | Get 16 | Return GetUserDrive(UserOrig) = GetUserDrive(UserNew) 17 | End Get 18 | End Property 19 | Private Shared Function GetUserDrive(ByVal User As UserInfo) As String 20 | Dim u As UserInfo = User 21 | If u.File.IsEmptyString Then u.UpdateUserFile() 22 | Return u.File.Segments.FirstOrDefault.StringToLower 23 | End Function 24 | Public Overrides Function ToString() As String 25 | Return $"[{UserOrig.File.CutPath.PathWithSeparator}] -> [{UserNew.File.CutPath.PathWithSeparator}]" 26 | End Function 27 | End Structure 28 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/Bluesky/Declarations.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports PersonalUtilities.Functions.RegularExpressions 10 | Namespace API.Bluesky 11 | Friend Module Declarations 12 | Friend Const BlueskySiteKey As String = "AndyProgram_Bluesky" 13 | Friend ReadOnly DateProvider As New ADateTime("yyyy-MM-ddTHH:mm:ss.FFF%K") 14 | Friend ReadOnly RegEx_PlayLists As RParams = RParams.DM("RESOLUTION=\d+x(\d+)\s*(\S+)", 0, RegexReturn.List, EDP.ReturnValue) 15 | Friend ReadOnly RegEx_FilePattern As RParams = RParams.DM("(.+?)(\.|@)(gif|m3u8|[^/\?\&]+)", 0, RegexReturn.ListByMatch, EDP.ReturnValue) 16 | Friend ReadOnly RegEx_SinglePostPattern As RParams = RParams.DM("profile/([^/]+)/post/([^/\?\&]+)", 0, RegexReturn.ListByMatch, EDP.ReturnValue) 17 | End Module 18 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/Bluesky/M3U8.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports System.Threading 10 | Imports SCrawler.API.Base 11 | Imports PersonalUtilities.Forms.Toolbars 12 | Imports PersonalUtilities.Tools.Web.Clients 13 | Imports PersonalUtilities.Functions.RegularExpressions 14 | Namespace API.Bluesky 15 | Friend NotInheritable Class M3U8 16 | Private Sub New() 17 | End Sub 18 | Private Shared Function GetUrlsList(ByVal URL As String) As List(Of String) 19 | Using resp As New Responser With {.AllowAutoRedirect = False} 20 | Dim r$ = resp.GetResponse(URL) 21 | If Not r.IsEmptyString Then 22 | Dim file$ = String.Empty, appender$ 23 | Dim files As List(Of Sizes) = RegexFields(Of Sizes)(r, {RegEx_PlayLists}, {1, 2}) 24 | If files.ListExists Then files.RemoveAll(Function(ff) ff.Value = 0 Or ff.Data.IsEmptyString) 25 | If files.ListExists Then 26 | files.Sort() 27 | file = files(0).Data 28 | appender = URL.Replace(URL.Split("/").Last, String.Empty) 29 | file = M3U8Base.CreateUrl(appender, file) 30 | If Not file.IsEmptyString Then 31 | r = resp.GetResponse(file) 32 | If Not r.IsEmptyString Then 33 | Dim l As List(Of String) = RegexReplace(r, M3U8Declarations.TsFilesRegEx) 34 | If l.ListExists Then 35 | appender = file.Replace(file.Split("/").Last, String.Empty) 36 | For i% = 0 To l.Count - 1 : l(i) = M3U8Base.CreateUrl(appender, l(i)) : Next 37 | Return l 38 | End If 39 | End If 40 | End If 41 | End If 42 | End If 43 | End Using 44 | Return Nothing 45 | End Function 46 | Friend Shared Function Download(ByVal URL As String, ByVal Destination As SFile, ByVal Token As CancellationToken, 47 | ByVal Progress As MyProgress, ByVal UsePreProgress As Boolean) As SFile 48 | Return M3U8Base.Download(GetUrlsList(URL), Destination,, Token, Progress, UsePreProgress) 49 | End Function 50 | End Class 51 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/Facebook/UserExchangeOptions.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports SCrawler.Plugin.Attributes 10 | Namespace API.Facebook 11 | Friend Class UserExchangeOptions 12 | 13 | Friend Property ParsePhotoBlock As Boolean = True 14 | 15 | Friend Property ParseVideoBlock As Boolean = True 16 | 17 | Friend Property ParseReelsBlock As Boolean = False 18 | 19 | Friend Property ParseStoriesBlock As Boolean = True 20 | Private ReadOnly Property MySettings As SiteSettings 21 | Friend Sub New(ByVal u As UserData) 22 | MySettings = u.HostCollection.Default.Source 23 | ParsePhotoBlock = u.ParsePhotoBlock 24 | ParseVideoBlock = u.ParseVideoBlock 25 | ParseReelsBlock = u.ParseReelsBlock 26 | ParseStoriesBlock = u.ParseStoriesBlock 27 | End Sub 28 | Friend Sub New(ByVal s As SiteSettings) 29 | MySettings = s 30 | ParsePhotoBlock = s.ParsePhotoBlock.Value 31 | ParseVideoBlock = s.ParseVideoBlock.Value 32 | ParseReelsBlock = s.ParseReelsBlock.Value 33 | ParseStoriesBlock = s.ParseStoriesBlock.Value 34 | End Sub 35 | End Class 36 | End Namespace -------------------------------------------------------------------------------- /SCrawler/API/JustForFans/Declarations.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2023 Andy https://github.com/AAndyProgram 2 | ' This program is free software: you can redistribute it and/or modify 3 | ' it under the terms of the GNU General Public License as published by 4 | ' the Free Software Foundation, either version 3 of the License, or 5 | ' (at your option) any later version. 6 | ' 7 | ' This program is distributed in the hope that it will be useful, 8 | ' but WITHOUT ANY WARRANTY 9 | Imports System.Text.RegularExpressions 10 | Imports PersonalUtilities.Functions.RegularExpressions 11 | Namespace API.JustForFans 12 | Friend Module Declarations 13 | Friend Const NamePhotoLarge As String = "expandable" 14 | Friend Const NamePhotoSmall As String = "galThumb" 15 | Private Const PostDateUrlPattern As String = "\]*?location.href='([^']+)[^\>]*?\>([^\<]+?)\<" 16 | Friend ReadOnly RegexUser As RParams = RParams.DMS("GetStats2\(UserID\)\{\s*var Hash = '([^']+)'[;\s/]*(var Hash = '([^']+)'|)", 1) 17 | Friend ReadOnly RegexVideoBlock As RParams = 18 | RParams.DM("((\
]*?id=""([^""]+)[^\>]*?\>)\s*\
]*?\>[^\<\>]*?\\s*\
)", 19 | 0, RegexReturn.List, RegexOptions.Singleline, RegexOptions.IgnoreCase, EDP.ReturnValue) 20 | Friend ReadOnly Regex_Video As RParams = RParams.DMS("