From 93ea2a55acd4c4727ed44e8f5b3211caacc0126c Mon Sep 17 00:00:00 2001 From: Andy <88590076+AAndyProgram@users.noreply.github.com> Date: Thu, 6 Jun 2024 05:49:50 +0300 Subject: [PATCH] 2024.6.6.0 YT VideoOptionsForm: file path is cleared when the cancel button is clicked (browse button); remove the context menu when the right clicking on browse button; add 'ButtonRC' class SCrawler API.OnlyFans: add check config to the SiteSettings; update config; add 'Keydb_Api' property; reset 'LastDateUpdated' when rules change; add support 'prefix/suffix' and 'start/end' to support other rules formats DownloadFeedForm: update 'BTT_CURR_SESSION_SET_Click' function TDownloader: update 'FilesLoadLastSession' function --- Changelog.md | 16 ++++++++++ ProgramScreenshots/SettingsSiteOnlyFans.png | Bin 31255 -> 32243 bytes SCrawler.YouTube/Controls/ButtonRC.vb | 23 ++++++++++++++ .../Controls/VideoOptionsForm.Designer.vb | 8 ++--- SCrawler.YouTube/Controls/VideoOptionsForm.vb | 2 +- SCrawler.YouTube/My Project/AssemblyInfo.vb | 4 +-- SCrawler.YouTube/SCrawler.YouTube.vbproj | 3 ++ .../My Project/AssemblyInfo.vb | 4 +-- SCrawler/API/OnlyFans/Declarations.vb | 10 ++++++ .../API/OnlyFans/OFScraperConfigPattern.json | 8 +++-- SCrawler/API/OnlyFans/SiteSettings.vb | 27 +++++++++++++++- SCrawler/API/OnlyFans/UserData.vb | 29 ++++++++++++------ SCrawler/Download/Feed/DownloadFeedForm.vb | 19 +++--------- SCrawler/Download/TDownloader.vb | 2 +- SCrawler/My Project/AssemblyInfo.vb | 4 +-- Tools/DeleteGDLTempFiles.bat | 24 +++++++++++++++ 16 files changed, 144 insertions(+), 39 deletions(-) create mode 100644 SCrawler.YouTube/Controls/ButtonRC.vb create mode 100644 Tools/DeleteGDLTempFiles.bat diff --git a/Changelog.md b/Changelog.md index 92b66d8..ba1b3dc 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,19 @@ +# 2024.6.6.0 + +*2024-06-06* + +**ATTENTION!** +1. **To support downloading of DRM protected videos (OnlyFans), please update OF-Scraper to version [3.10](https://github.com/datawhores/OF-Scraper/releases/tag/3.10) (download `zip`, not `exe`).** +2. **If there is a `OFScraperConfigPattern.json` file in the SCrawler settings folder, replace the text of the file with [this text](https://github.com/AAndyProgram/SCrawler/blob/main/SCrawler/API/OnlyFans/OFScraperConfigPattern.json).** +3. **Set the value to `Dynamic rules` (in the site settings) = `https://raw.githubusercontent.com/Growik/onlyfans-dynamic-rules/main/rules.json`.** + +- Added + - OnlyFans: new OF-Scraper option (`keydb_api`) + - Minor improvements +- Fixed + - OnlyFans: **data is not downloading** + - Minor bugs + # 2024.6.4.0 *2024-06-04* diff --git a/ProgramScreenshots/SettingsSiteOnlyFans.png b/ProgramScreenshots/SettingsSiteOnlyFans.png index f4186d772af60cf9914e606acef5aef8e8a9fab8..7aa9a9c025549ee091e671ef25bb763cae4fc2f6 100644 GIT binary patch literal 32243 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 R1H;h2X{cz!3zaY5{(rK88W;co literal 31255 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

E!3^wP>Oa>mX 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%0D^yp8LUE3sMj1M$Tzv8f?>& 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 X##4HK$+Z}V{_VJyAw2)+nH&EH%D4Of diff --git a/SCrawler.YouTube/Controls/ButtonRC.vb b/SCrawler.YouTube/Controls/ButtonRC.vb new file mode 100644 index 0000000..b307230 --- /dev/null +++ b/SCrawler.YouTube/Controls/ButtonRC.vb @@ -0,0 +1,23 @@ +' Copyright (C) Andy https://github.com/AAndyProgram +' This program is free software: you can redistribute it and/or modify +' it under the terms of the GNU General Public License as published by +' the Free Software Foundation, either version 3 of the License, or +' (at your option) any later version. +' +' This program is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY +Namespace API.YouTube.Controls + Public Class ButtonRC : Inherits Button + Private Const WM_CONTEXTMENU As Integer = 123 '&H7B + Private Const WM_CANCELMODE As Integer = 31 '&H1F + Private Const WM_INITMENUPOPUP As Integer = 279 '&H117 + Private Const SMTO_NOTIMEOUTIFNOTHUNG As Integer = 8 + Protected Overrides Sub WndProc(ByRef m As Message) + If m.Msg = WM_CONTEXTMENU Or m.Msg = WM_CANCELMODE Or m.Msg = WM_INITMENUPOPUP Or m.Msg = SMTO_NOTIMEOUTIFNOTHUNG Then + m.Result = IntPtr.Zero + Else + MyBase.WndProc(m) + End If + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/SCrawler.YouTube/Controls/VideoOptionsForm.Designer.vb b/SCrawler.YouTube/Controls/VideoOptionsForm.Designer.vb index 56673c8..569e768 100644 --- a/SCrawler.YouTube/Controls/VideoOptionsForm.Designer.vb +++ b/SCrawler.YouTube/Controls/VideoOptionsForm.Designer.vb @@ -65,11 +65,11 @@ Namespace API.YouTube.Controls Me.LBL_TIME = New System.Windows.Forms.Label() Me.LBL_URL = New System.Windows.Forms.LinkLabel() Me.TXT_FILE = New PersonalUtilities.Forms.Controls.ComboBoxExtended() - Me.BTT_BROWSE = New System.Windows.Forms.Button() + Me.BTT_BROWSE = New SCrawler.API.YouTube.Controls.ButtonRC() Me.BTT_DOWN = New System.Windows.Forms.Button() Me.BTT_CANCEL = New System.Windows.Forms.Button() Me.CMB_PLS = New PersonalUtilities.Forms.Controls.ComboBoxExtended() - Me.BTT_PLS_BROWSE = New System.Windows.Forms.Button() + Me.BTT_PLS_BROWSE = New SCrawler.API.YouTube.Controls.ButtonRC() Me.OPT_VIDEO = New System.Windows.Forms.RadioButton() Me.OPT_AUDIO = New System.Windows.Forms.RadioButton() Me.LBL_AUDIO_CODEC = New System.Windows.Forms.Label() @@ -912,13 +912,13 @@ Namespace API.YouTube.Controls Private WithEvents TXT_SUBS_ADDIT As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_EXTRA_AUDIO_FORMATS As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents TXT_FILE As PersonalUtilities.Forms.Controls.ComboBoxExtended - Private WithEvents BTT_BROWSE As Button + Private WithEvents BTT_BROWSE As SCrawler.API.YouTube.Controls.ButtonRC Private WithEvents BTT_DOWN As Button Private WithEvents BTT_CANCEL As Button Private WithEvents TP_HEADER_INFO_2 As TableLayoutPanel Private WithEvents TXT_FPS As PersonalUtilities.Forms.Controls.TextBoxExtended Private WithEvents CMB_PLS As PersonalUtilities.Forms.Controls.ComboBoxExtended - Private WithEvents BTT_PLS_BROWSE As Button + Private WithEvents BTT_PLS_BROWSE As SCrawler.API.YouTube.Controls.ButtonRC Private WithEvents TXT_AUDIO_BITRATE As PersonalUtilities.Forms.Controls.TextBoxExtended End Class End Namespace \ No newline at end of file diff --git a/SCrawler.YouTube/Controls/VideoOptionsForm.vb b/SCrawler.YouTube/Controls/VideoOptionsForm.vb index a24283f..605a482 100644 --- a/SCrawler.YouTube/Controls/VideoOptionsForm.vb +++ b/SCrawler.YouTube/Controls/VideoOptionsForm.vb @@ -610,7 +610,7 @@ Namespace API.YouTube.Controls $"Video|{AvailableVideoFormats.Select(Function(vf) $"*.{vf.ToLower}").ListToString(";")}" & $"|Audio|{AvailableAudioFormats.Select(Function(af) $"*.{af.ToLower}").ListToString(";")}" f = SFile.SaveAs(f, "Select the destination of the video file",, ext, sPattern, EDP.ReturnValue) - f.Extension = ext + If Not f.IsEmptyString Then f.Extension = ext End If #Enable Warning f = CleanFileName(f) diff --git a/SCrawler.YouTube/My Project/AssemblyInfo.vb b/SCrawler.YouTube/My Project/AssemblyInfo.vb index 9c8577a..f936c5c 100644 --- a/SCrawler.YouTube/My Project/AssemblyInfo.vb +++ b/SCrawler.YouTube/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler.YouTube/SCrawler.YouTube.vbproj b/SCrawler.YouTube/SCrawler.YouTube.vbproj index 8d6d304..75d3904 100644 --- a/SCrawler.YouTube/SCrawler.YouTube.vbproj +++ b/SCrawler.YouTube/SCrawler.YouTube.vbproj @@ -115,6 +115,9 @@ + + Component + ChannelTabsChooserForm.vb diff --git a/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb b/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb index 8940716..867e77c 100644 --- a/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb +++ b/SCrawler.YouTubeDownloader/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/SCrawler/API/OnlyFans/Declarations.vb b/SCrawler/API/OnlyFans/Declarations.vb index be70fd4..b6d6532 100644 --- a/SCrawler/API/OnlyFans/Declarations.vb +++ b/SCrawler/API/OnlyFans/Declarations.vb @@ -11,5 +11,15 @@ Namespace API.OnlyFans Friend Module Declarations Friend ReadOnly DateProvider As New ADateTime("O") Friend ReadOnly RegExPostID As RParams = RParams.DM("(?<=onlyfans\.com/)(\d+)", 0, EDP.ReturnValue) + Friend ReadOnly OFScraperConfigPatternFile As SFile = $"{SettingsFolderName}\OFScraperConfigPattern.json" + Friend Function CheckOFSConfig() As Boolean + If Not OFScraperConfigPatternFile.Exists Then + Dim t$ = Text.Encoding.UTF8.GetString(My.Resources.OFResources.OFScraperConfigPattern) + TextSaver.SaveTextToFile(t, OFScraperConfigPatternFile, True) + Return OFScraperConfigPatternFile.Exists + Else + Return True + End If + End Function End Module End Namespace \ No newline at end of file diff --git a/SCrawler/API/OnlyFans/OFScraperConfigPattern.json b/SCrawler/API/OnlyFans/OFScraperConfigPattern.json index 98780e4..fb702f7 100644 --- a/SCrawler/API/OnlyFans/OFScraperConfigPattern.json +++ b/SCrawler/API/OnlyFans/OFScraperConfigPattern.json @@ -38,14 +38,18 @@ }, "advanced_options": { "code-execution": false, - "dynamic-mode-default": "deviint", + "dynamic-mode-default": "sneaky", "backend": "aio", "downloadbars": false, "cache-mode": "sqlite", "appendlog": true, "custom": null, "sanitize_text": false, - "avatar": true + "avatar": true, + "custom_values": { + "SNEAKY": "https://raw.githubusercontent.com/Growik/onlyfans-dynamic-rules/main/rules.json", + "CDRM": "https://old.cdrm-project.com/wv" + } }, "responsetype": { "timeline": "Posts", diff --git a/SCrawler/API/OnlyFans/SiteSettings.vb b/SCrawler/API/OnlyFans/SiteSettings.vb index 0922b9c..a3e49fe 100644 --- a/SCrawler/API/OnlyFans/SiteSettings.vb +++ b/SCrawler/API/OnlyFans/SiteSettings.vb @@ -133,12 +133,25 @@ Namespace API.OnlyFans End If End Get End Property + Private ReadOnly Property Keydb_Api_XML As PropertyValue + + Friend ReadOnly Property Keydb_Api As PropertyValue + Get + If Not DefaultInstance Is Nothing Then + Return DirectCast(DefaultInstance, SiteSettings).Keydb_Api_XML + Else + Return Keydb_Api_XML + End If + End Get + End Property #End Region #End Region #Region "Initializer" Friend Sub New(ByVal AccName As String, ByVal Temp As Boolean) MyBase.New("OnlyFans", ".onlyfans.com", AccName, Temp, My.Resources.SiteResources.OnlyFansIcon_32, My.Resources.SiteResources.OnlyFansPic_32) + CheckOFSConfig() + _AllowUserAgentUpdate = False With Responser @@ -192,6 +205,7 @@ Namespace API.OnlyFans End If OFScraperMP4decrypt_XML = New PropertyValue(String.Empty, GetType(String)) KeyModeDefault_XML = New PropertyValue(KeyModeDefault_Default) + Keydb_Api_XML = New PropertyValue(String.Empty, GetType(String)) UserRegex = RParams.DMS(String.Format(UserRegexDefaultPattern, "onlyfans.com/"), 1, EDP.ReturnValue) UrlPatternUser = "https://onlyfans.com/{0}" @@ -204,8 +218,19 @@ Namespace API.OnlyFans End Function #End Region #Region "Update" + Private __UseOldAuthRules As Boolean = True + Private __DynamicRules As String = String.Empty + Friend Overrides Sub BeginUpdate() + __UseOldAuthRules = UseOldAuthRules.Value + __DynamicRules = AConvert(Of String)(DynamicRules.Value, String.Empty) + MyBase.BeginUpdate() + End Sub Friend Overrides Sub Update() - If _SiteEditorFormOpened Then Responser.Cookies.Changed = False + If _SiteEditorFormOpened Then + If Not __UseOldAuthRules = CBool(UseOldAuthRules.Value) Or Not AEquals(Of String)(__DynamicRules, DynamicRules.Value) Then _ + LastDateUpdated = LastDateUpdated.AddYears(-1) + Responser.Cookies.Changed = False + End If MyBase.Update() End Sub #End Region diff --git a/SCrawler/API/OnlyFans/UserData.vb b/SCrawler/API/OnlyFans/UserData.vb index 61f0602..3dff87a 100644 --- a/SCrawler/API/OnlyFans/UserData.vb +++ b/SCrawler/API/OnlyFans/UserData.vb @@ -549,7 +549,8 @@ Namespace API.OnlyFans Optional ByVal Round As Integer = 0) As Boolean Try If UpdateAuthFile(ForceUpdateAuth) Then - Const nullMsg$ = "The auth parameter is null" + Const nullMsg$ = "The auth parameter(s) is null" + Const formatMidPart$ = ":{0}:{1:x}:" Dim j As EContainer Try j = JsonDocument.Parse(AuthFile.GetText) @@ -565,8 +566,16 @@ Namespace API.OnlyFans End Try If Not j Is Nothing Then Dim pattern$ = j.Value("format") - If pattern.IsEmptyString Then Throw New ArgumentNullException("format", nullMsg) - pattern = pattern.Replace("{}", "{0}").Replace("{:x}", "{1:x}") + + If Not pattern.IsEmptyString Then + pattern = pattern.Replace("{}", "{0}").Replace("{:x}", "{1:x}") + ElseIf Not j.Value("prefix").IsEmptyString And Not j.Value("suffix").IsEmptyString Then + pattern = j.Value("prefix") & formatMidPart & j.Value("suffix") + ElseIf Not j.Value("start").IsEmptyString And Not j.Value("end").IsEmptyString Then + pattern = j.Value("start") & formatMidPart & j.Value("end") + Else + Throw New ArgumentNullException("format", nullMsg) + End If Dim li%() = j("checksum_indexes").Select(Function(e) CInt(e(0).Value)).ToArray @@ -607,10 +616,14 @@ Namespace API.OnlyFans Dim r$ = GetWebString(If(ACheck(Of String)(MySettings.DynamicRules.Value), CStr(MySettings.DynamicRules.Value), IIf(MySettings.UseOldAuthRules.Value, urlOld, urlNew)),, EDP.ReturnValue) + Dim checkFormat As Func(Of EContainer, Boolean) = + Function(jj) Not jj.Value("format").IsEmptyString OrElse + (Not jj.Value("prefix").IsEmptyString And Not jj.Value("suffix").IsEmptyString) OrElse + (Not jj.Value("start").IsEmptyString And Not jj.Value("start").IsEmptyString) If Not r.IsEmptyString Then Using j As EContainer = JsonDocument.Parse(r, EDP.ReturnValue) If j.ListExists Then - If Not j.Value("format").IsEmptyString And j("checksum_indexes").ListExists And + If checkFormat(j) And j("checksum_indexes").ListExists And Not j.Value("static_param").IsEmptyString And Not j.Value("checksum_constant").IsEmptyString Then _ TextSaver.SaveTextToFile(r, AuthFile, True, False, EDP.ThrowException) : MySettings.LastDateUpdated = Now End If @@ -658,12 +671,9 @@ Namespace API.OnlyFans currentCache.Validate() Dim cacheRoot As SFile = currentCache.NewPath cacheRoot.Exists(SFO.Path, True, EDP.ThrowException) - Dim f As SFile = $"{SettingsFolderName}\OFScraperConfigPattern.json" + Dim f As SFile = OFScraperConfigPatternFile Dim configText$ - If Not f.Exists Then - configText = Text.Encoding.UTF8.GetString(My.Resources.OFResources.OFScraperConfigPattern) - TextSaver.SaveTextToFile(configText, f, True) - End If + CheckOFSConfig() If f.Exists Then Dim replaceValue$ = String.Empty Dim rp As RParams = RParams.DMS(String.Empty, 1, RegexReturn.Replace, RegexOptions.IgnoreCase, @@ -684,6 +694,7 @@ Namespace API.OnlyFans End If If Settings.FfmpegFile.Exists Then updateConf("ffmpeg", Settings.FfmpegFile.File.ToString.Replace("\", "/")) updateConf("key-mode-default", CStr(MySettings.KeyModeDefault.Value).IfNullOrEmpty(SiteSettings.KeyModeDefault_Default)) + updateConf("keydb_api", CStr(MySettings.Keydb_Api.Value)) f = currentCache f.Name = "config" f.Extension = "json" diff --git a/SCrawler/Download/Feed/DownloadFeedForm.vb b/SCrawler/Download/Feed/DownloadFeedForm.vb index 22ce038..7c0fff1 100644 --- a/SCrawler/Download/Feed/DownloadFeedForm.vb +++ b/SCrawler/Download/Feed/DownloadFeedForm.vb @@ -913,21 +913,10 @@ Namespace DownloadObjects Try Dim f As SFile = Nothing SessionChooser(False,,,, True, f) - If f.Exists Then - Using x As New XmlFile(f, Protector.Modes.All, False) With {.AllowSameNames = True, .XmlReadOnly = True} - x.LoadData() - If x.Count > 0 Then - With Downloader - .Files.Clear() - .Files.ListAddList(x, LAP.NotContainsOnly, LAP.IgnoreICopier) - .FilesLoadLastSession(f) - End With - FeedChangeMode(FeedModes.Current) - RefillList(True, False) - Else - MsgBoxE({"There is no data in the selected session", "Replace current session"}, vbCritical) - End If - End Using + If Not f.IsEmptyString AndAlso f.Exists Then + Downloader.FilesLoadLastSession(f) + FeedChangeMode(FeedModes.Current) + RefillList(True, False) End If Catch ex As Exception ErrorsDescriber.Execute(EDP.LogMessageValue, ex, "Replace current session") diff --git a/SCrawler/Download/TDownloader.vb b/SCrawler/Download/TDownloader.vb index c4a5802..c89c07c 100644 --- a/SCrawler/Download/TDownloader.vb +++ b/SCrawler/Download/TDownloader.vb @@ -177,7 +177,7 @@ Namespace DownloadObjects Using x As New XmlFile(files.Last, Protector.Modes.All, False) With {.AllowSameNames = True, .XmlReadOnly = True} x.LoadData() If x.Count > 0 Then __files.ListAddList(x, LAP.IgnoreICopier) - If __files.Count > 0 AndAlso (settingValue = 0 OrElse + If __files.Count > 0 AndAlso (settingValue = 0 OrElse ssfExists OrElse (startTime - {lastDate, __files.Max(Function(f) f.Date)}.Max).TotalMinutes <= settingValue) Then _Session = __files.Max(Function(f) f.Session) Me.Files.AddRange(__files) diff --git a/SCrawler/My Project/AssemblyInfo.vb b/SCrawler/My Project/AssemblyInfo.vb index 95ece00..50ab392 100644 --- a/SCrawler/My Project/AssemblyInfo.vb +++ b/SCrawler/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/Tools/DeleteGDLTempFiles.bat b/Tools/DeleteGDLTempFiles.bat new file mode 100644 index 0000000..e7d6048 --- /dev/null +++ b/Tools/DeleteGDLTempFiles.bat @@ -0,0 +1,24 @@ +REM https://superuser.com/a/577640/1410018 + +@echo off + +set dirname=_MEI +set usewildcard=true +set found=false +if %usewildcard% == true ( + set dirname=*%dirname%* +) +set directorytosearch=%UserProfile%\AppData\Local\Temp +echo Searching for %dirname% in %directorytosearch% + +for /d %%i in (%directorytosearch%\%dirname%) do ( + IF EXIST %%i ( + set found=true + echo Deleting the folder %%i + rmdir /s /q "%%i" + ) +) + +if NOT "%found%" == "true" ( + echo No directories were found with the name of %dirname% +) \ No newline at end of file