mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-14 15:52:18 +00:00
2024.6.25.0
API.OnlyFans: new dynamic rules updating algo API.Instagram: update settings Feed: add ability to set the last session as the current one; wrong marking data as saved posts when moving a file
This commit is contained in:
14
Changelog.md
14
Changelog.md
@@ -1,3 +1,17 @@
|
|||||||
|
# 2024.6.25.0
|
||||||
|
|
||||||
|
*2024-06-25*
|
||||||
|
|
||||||
|
**ATTENTION! To support downloading of DRM protected videos (OnlyFans), please update OF-Scraper to version [3.10.7](https://github.com/datawhores/OF-Scraper/releases/tag/3.10.7) (download `zip`, not `exe`).**
|
||||||
|
|
||||||
|
- Added
|
||||||
|
- OnlyFans: **new dynamic rules updating algorithm**
|
||||||
|
- Feed: ability to set the last session as the current one
|
||||||
|
- Updated
|
||||||
|
- gallery-dl up to version **1.27.1**
|
||||||
|
- Fixed
|
||||||
|
- Minor bugs
|
||||||
|
|
||||||
# 2024.6.10.0
|
# 2024.6.10.0
|
||||||
|
|
||||||
*2024-06-10*
|
*2024-06-10*
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
BIN
ProgramScreenshots/SettingsSiteOnlyFansAdditional.png
Normal file
BIN
ProgramScreenshots/SettingsSiteOnlyFansAdditional.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2024.6.10.0")>
|
<Assembly: AssemblyVersion("2024.6.25.0")>
|
||||||
<Assembly: AssemblyFileVersion("2024.6.10.0")>
|
<Assembly: AssemblyFileVersion("2024.6.25.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -1194,7 +1194,7 @@ Namespace API.YouTube.Objects
|
|||||||
End With
|
End With
|
||||||
|
|
||||||
If PlaylistCount > 0 And Not CoverDownloaded And Not PlaylistID.IsEmptyString Then DownloadPlaylistCover(PlaylistID, File, UseCookies)
|
If PlaylistCount > 0 And Not CoverDownloaded And Not PlaylistID.IsEmptyString Then DownloadPlaylistCover(PlaylistID, File, UseCookies)
|
||||||
If prExists Then Progress.InformationTemporary = $"Download {MediaType}: post processing"
|
If prExists Then Progress.InformationTemporary = "Downloading: post processing"
|
||||||
_ThumbnailFile = File
|
_ThumbnailFile = File
|
||||||
_ThumbnailFile.Name &= "_thumb"
|
_ThumbnailFile.Name &= "_thumb"
|
||||||
_ThumbnailFile.Extension = "jpg"
|
_ThumbnailFile.Extension = "jpg"
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2024.6.10.0")>
|
<Assembly: AssemblyVersion("2024.6.25.0")>
|
||||||
<Assembly: AssemblyFileVersion("2024.6.10.0")>
|
<Assembly: AssemblyFileVersion("2024.6.25.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -449,8 +449,11 @@ Namespace API.Instagram
|
|||||||
If CInt(SettingsVersion.Value) < 2 Then
|
If CInt(SettingsVersion.Value) < 2 Then
|
||||||
SettingsVersion.Value = 2
|
SettingsVersion.Value = 2
|
||||||
HH_IG_WWW_CLAIM_UPDATE_INTERVAL.Value = 120
|
HH_IG_WWW_CLAIM_UPDATE_INTERVAL.Value = 120
|
||||||
HH_IG_WWW_CLAIM_USE_DEFAULT_ALGO.Value = 1
|
HH_IG_WWW_CLAIM_ALWAYS_ZERO.Value = False
|
||||||
HH_IG_WWW_CLAIM_RESET_EACH_TARGET.Value = 0
|
HH_IG_WWW_CLAIM_RESET_EACH_SESSION.Value = True
|
||||||
|
HH_IG_WWW_CLAIM_RESET_EACH_TARGET.Value = True
|
||||||
|
HH_IG_WWW_CLAIM_USE.Value = True
|
||||||
|
HH_IG_WWW_CLAIM_USE_DEFAULT_ALGO.Value = True
|
||||||
End If
|
End If
|
||||||
MyBase.EndInit()
|
MyBase.EndInit()
|
||||||
End Sub
|
End Sub
|
||||||
|
|||||||
@@ -11,15 +11,6 @@ Namespace API.OnlyFans
|
|||||||
Friend Module Declarations
|
Friend Module Declarations
|
||||||
Friend ReadOnly DateProvider As New ADateTime("O")
|
Friend ReadOnly DateProvider As New ADateTime("O")
|
||||||
Friend ReadOnly RegExPostID As RParams = RParams.DM("(?<=onlyfans\.com/)(\d+)", 0, EDP.ReturnValue)
|
Friend ReadOnly RegExPostID As RParams = RParams.DM("(?<=onlyfans\.com/)(\d+)", 0, EDP.ReturnValue)
|
||||||
Friend ReadOnly OFScraperConfigPatternFile As SFile = $"{SettingsFolderName}\OFScraperConfigPattern.json"
|
Friend Property Rules As DynamicRulesEnv
|
||||||
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 Module
|
||||||
End Namespace
|
End Namespace
|
||||||
6
SCrawler/API/OnlyFans/DynamicRules.txt
Normal file
6
SCrawler/API/OnlyFans/DynamicRules.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
https://github.com/datawhores/onlyfans-dynamic-rules/blob/main/dynamicRules.json
|
||||||
|
https://github.com/riley-access-labs/onlyfans-dynamic-rules-1/blob/main/dynamicRules.json
|
||||||
|
https://github.com/riley-access-labs/onlyfans-dynamic-rules-1/blob/patch-1/dynamicRules.json
|
||||||
|
https://github.com/DATAHOARDERS/dynamic-rules/blob/main/onlyfans.json
|
||||||
|
https://github.com/DIGITALCRIMINAL/dynamic-rules/blob/main/onlyfans.json
|
||||||
|
https://github.com/deviint/onlyfans-dynamic-rules/blob/main/dynamicRules.json
|
||||||
9
SCrawler/API/OnlyFans/DynamicRulesAll.txt
Normal file
9
SCrawler/API/OnlyFans/DynamicRulesAll.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
https://github.com/datawhores/onlyfans-dynamic-rules/blob/main/dynamicRules.json
|
||||||
|
https://github.com/riley-access-labs/onlyfans-dynamic-rules-1/blob/main/dynamicRules.json
|
||||||
|
https://github.com/riley-access-labs/onlyfans-dynamic-rules-1/blob/patch-1/dynamicRules.json
|
||||||
|
https://github.com/DATAHOARDERS/dynamic-rules/blob/main/onlyfans.json
|
||||||
|
https://github.com/DIGITALCRIMINAL/dynamic-rules/blob/main/onlyfans.json
|
||||||
|
https://github.com/deviint/onlyfans-dynamic-rules/blob/main/dynamicRules.json
|
||||||
|
|
||||||
|
https://github.com/SneakyOvis/onlyfans-dynamic-rules/blob/main/rules.json
|
||||||
|
https://github.com/Growik/onlyfans-dynamic-rules/blob/main/rules.json
|
||||||
744
SCrawler/API/OnlyFans/DynamicRulesEnv.vb
Normal file
744
SCrawler/API/OnlyFans/DynamicRulesEnv.vb
Normal file
@@ -0,0 +1,744 @@
|
|||||||
|
' 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
|
||||||
|
Imports PersonalUtilities.Functions.XML
|
||||||
|
Imports PersonalUtilities.Functions.XML.Base
|
||||||
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
|
Imports PersonalUtilities.Tools
|
||||||
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
|
Imports PersonalUtilities.Tools.Web.Clients.Base
|
||||||
|
Imports PersonalUtilities.Tools.Web.Documents.JSON
|
||||||
|
Imports System.Text.RegularExpressions
|
||||||
|
Namespace API.OnlyFans
|
||||||
|
Friend Structure DynamicRulesValue : Implements IComparable(Of DynamicRulesValue), IEquatable(Of DynamicRulesValue), IEContainerProvider
|
||||||
|
#Region "XML names"
|
||||||
|
Private Const Name_UrlRepo As String = "UrlRepo"
|
||||||
|
Private Const Name_UrlRaw As String = "UrlRaw"
|
||||||
|
Private Const Name_UrlLatestCommit As String = "UrlLatestCommit"
|
||||||
|
Private Const Name_UpdatedAt As String = "UpdatedAt"
|
||||||
|
Private Const Name_Broken As String = "Broken"
|
||||||
|
Private Const Name_Exists As String = "Exists"
|
||||||
|
#End Region
|
||||||
|
#Region "Declarations"
|
||||||
|
Friend UrlRepo As String
|
||||||
|
Friend UrlRaw As String
|
||||||
|
Friend UrlLatestCommit As String
|
||||||
|
Friend UpdatedAt As Date
|
||||||
|
Friend Broken As Boolean
|
||||||
|
Friend Exists As Boolean
|
||||||
|
Friend ReadOnly Property Valid As Boolean
|
||||||
|
Get
|
||||||
|
Return Not UrlRepo.IsEmptyString And Not UrlRaw.IsEmptyString
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "Initializers"
|
||||||
|
Friend Sub New(ByVal e As EContainer)
|
||||||
|
UrlRepo = e.Value(Name_UrlRepo)
|
||||||
|
UrlRaw = e.Value(Name_UrlRaw)
|
||||||
|
UrlLatestCommit = e.Value(Name_UrlLatestCommit)
|
||||||
|
UpdatedAt = e.Value(Name_UpdatedAt).ToDateDef(Now.AddYears(-10))
|
||||||
|
Broken = e.Value(Name_Broken).FromXML(Of Boolean)(False)
|
||||||
|
Exists = e.Value(Name_Exists).FromXML(Of Boolean)(True)
|
||||||
|
End Sub
|
||||||
|
Public Shared Widening Operator CType(ByVal e As EContainer) As DynamicRulesValue
|
||||||
|
Return New DynamicRulesValue(e)
|
||||||
|
End Operator
|
||||||
|
Public Shared Widening Operator CType(ByVal rule As DynamicRulesValue) As String
|
||||||
|
Return rule.ToString
|
||||||
|
End Operator
|
||||||
|
#End Region
|
||||||
|
#Region "Base functions"
|
||||||
|
Public Overrides Function GetHashCode() As Integer
|
||||||
|
Return ToString.GetHashCode
|
||||||
|
End Function
|
||||||
|
Public Overrides Function ToString() As String
|
||||||
|
Return UrlRaw
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IComparable Support"
|
||||||
|
Private Function CompareTo(ByVal Other As DynamicRulesValue) As Integer Implements IComparable(Of DynamicRulesValue).CompareTo
|
||||||
|
Return UpdatedAt.CompareTo(Other.UpdatedAt) * -1
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IEquatable Support"
|
||||||
|
Public Overloads Overrides Function Equals(ByVal Obj As Object) As Boolean
|
||||||
|
If Not IsNothing(Obj) Then
|
||||||
|
If TypeOf Obj Is String Then
|
||||||
|
Dim _obj$ = CStr(Obj).StringTrim.StringToLower
|
||||||
|
Return UrlRepo = _obj Or UrlRaw = _obj
|
||||||
|
Else
|
||||||
|
Return Equals(DirectCast(Obj, DynamicRulesValue))
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Friend Overloads Function Equals(ByVal Other As DynamicRulesValue) As Boolean Implements IEquatable(Of DynamicRulesValue).Equals
|
||||||
|
Return UrlRepo = Other.UrlRepo Or UrlRaw = Other.UrlRaw
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IEContainerProvider Support"
|
||||||
|
Private Function ToEContainer(Optional ByVal e As ErrorsDescriber = Nothing) As EContainer Implements IEContainerProvider.ToEContainer
|
||||||
|
Return New EContainer("Rule") From {
|
||||||
|
New EContainer(Name_UrlRepo, UrlRepo),
|
||||||
|
New EContainer(Name_UrlRaw, UrlRaw),
|
||||||
|
New EContainer(Name_UrlLatestCommit, UrlLatestCommit),
|
||||||
|
New EContainer(Name_UpdatedAt, UpdatedAt.ToStringDateDef),
|
||||||
|
New EContainer(Name_Broken, Broken.BoolToInteger),
|
||||||
|
New EContainer(Name_Exists, Exists.BoolToInteger)
|
||||||
|
}
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
End Structure
|
||||||
|
Friend Class DynamicRulesEnv : Implements ICopier, IEnumerable(Of DynamicRulesValue), IMyEnumerator(Of DynamicRulesValue), IDisposable
|
||||||
|
Friend Enum Modes As Integer
|
||||||
|
List = 0
|
||||||
|
Personal = 1
|
||||||
|
End Enum
|
||||||
|
#Region "Constants"
|
||||||
|
Friend Const UpdateIntervalDefault As Integer = 1440 '60 * 24
|
||||||
|
Friend Const DynamicRulesConfigNodeName_URL As String = "DYNAMIC_GENERIC_URL"
|
||||||
|
Friend Const DynamicRulesConfigNodeName_RULES As String = "DYNAMIC_RULE"
|
||||||
|
|
||||||
|
Friend Const DynamicRulesConfig_Mode_NodeName As String = "dynamic-mode-default"
|
||||||
|
'Friend Const DynamicRulesConfig_Mode_NodeValue As String = "generic"
|
||||||
|
|
||||||
|
Friend Const DynamicRulesConfigNodeName_URL_CONST_NAME As String = "RULE_VALUE"
|
||||||
|
#End Region
|
||||||
|
#Region "XML names"
|
||||||
|
Private Const Name_LastUpdateTimeFile As String = "LastUpdateTimeFile"
|
||||||
|
Private Const Name_LastUpdateTimeRules As String = "LastUpdateTimeRules"
|
||||||
|
Private Const Name_ProtectFile As String = "ProtectFile"
|
||||||
|
Private Const Name_UpdateInterval As String = "UpdateInterval"
|
||||||
|
Private Const Name_Mode As String = "Mode"
|
||||||
|
Private Const Name_PersonalRule As String = "PersonalRule"
|
||||||
|
Private Const Name_RulesForceUpdateRequired As String = "RulesForceUpdateRequired"
|
||||||
|
Private Const Name_AddErrorsToLog As String = "AddErrorsToLog"
|
||||||
|
Private Const Name_ConfigLastDateUpdate As String = "ConfigLastDateUpdate"
|
||||||
|
Private Const Name_ConfigAutoUpdate As String = "ConfigAutoUpdate"
|
||||||
|
Private Const Name_RulesConfigManualMode As String = "RulesConfigManualMode"
|
||||||
|
Private Const Name_RulesUpdateConst As String = "RulesUpdateConst"
|
||||||
|
Private Const Name_RulesReplaceConfig As String = "RulesReplaceConfig"
|
||||||
|
#End Region
|
||||||
|
#Region "Declarations"
|
||||||
|
Private ReadOnly Rules As List(Of DynamicRulesValue)
|
||||||
|
Friend ReadOnly Property RulesConstants As Dictionary(Of String, String)
|
||||||
|
#Region "Regex patterns"
|
||||||
|
Private ReadOnly ReplacePattern_RepoToRaw As RParams
|
||||||
|
Private ReadOnly ReplacePattern_RawToRepo As RParams
|
||||||
|
Private ReadOnly ReplacePattern_JsonInfo As RParams
|
||||||
|
Private ReadOnly ConfigRulesExtract As RParams
|
||||||
|
#End Region
|
||||||
|
#Region "Dates"
|
||||||
|
Private LastUpdateTimeFile As Date = Now.AddYears(-1)
|
||||||
|
Private LastUpdateTimeRules As Date = Now.AddYears(-1)
|
||||||
|
#End Region
|
||||||
|
#Region "Files"
|
||||||
|
Friend ReadOnly OFScraperConfigPatternFile As SFile = $"{SettingsFolderName}\OFScraperConfigPattern.json"
|
||||||
|
Friend ReadOnly OFScraperConfigPatternFileConst As SFile = $"{SettingsFolderName}\OFScraperConfigPatternConstants.txt"
|
||||||
|
Friend ReadOnly Property AuthFile As New SFile($"{SettingsFolderName}\OnlyFans_Auth.json")
|
||||||
|
Private ReadOnly DynamicRulesFile As SFile
|
||||||
|
Private ReadOnly DynamicRulesXml As SFile
|
||||||
|
Private Shared ReadOnly Property DynamicRulesFileImpl As SFile
|
||||||
|
Get
|
||||||
|
Return $"{SettingsFolderName}\OnlyFansDynamicRules.txt"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend Shared Sub ValidateRulesFile()
|
||||||
|
Dim f As SFile = DynamicRulesFileImpl
|
||||||
|
If Not f.Exists Then TextSaver.SaveTextToFile(My.Resources.OFResources.DynamicRules, DynamicRulesFileImpl, True)
|
||||||
|
End Sub
|
||||||
|
Friend Property ProtectFile As Boolean = False
|
||||||
|
#End Region
|
||||||
|
Friend Property UpdateInterval As Integer = UpdateIntervalDefault
|
||||||
|
Friend Property Mode As Modes = Modes.List
|
||||||
|
Friend Property PersonalRule As String = String.Empty
|
||||||
|
Friend Property RulesForceUpdateRequired As Boolean = False
|
||||||
|
Friend Property RulesUpdateConst As Boolean = True
|
||||||
|
Friend Property RulesReplaceConfig As Boolean = True
|
||||||
|
Private ReadOnly Responser As New Responser With {.Accept = "application/json"}
|
||||||
|
Private ReadOnly RulesLinesComparer As New FComparer(Of String)(Function(x, y) x.StringToLower = y.StringToLower)
|
||||||
|
Private ReadOnly OFLOG As TextSaver
|
||||||
|
Private ReadOnly OFError As ErrorsDescriber
|
||||||
|
Friend Property AddErrorsToLog As Boolean = True
|
||||||
|
Friend Property NeedToSave As Boolean = False
|
||||||
|
Private ReadOnly Property ConfigAddress As DynamicRulesValue
|
||||||
|
Private ReadOnly Property ConfigConstAddress As DynamicRulesValue
|
||||||
|
Private Property ConfigLastDateUpdate As Date = Now.AddYears(-1)
|
||||||
|
Friend Property ConfigAutoUpdate As Boolean = True
|
||||||
|
Friend Property RulesConfigManualMode As Boolean = True
|
||||||
|
#End Region
|
||||||
|
#Region "Current, Item, Count"
|
||||||
|
Private _CurrentRule As DynamicRulesValue
|
||||||
|
Private _CurrentContainer As EContainer
|
||||||
|
Private _CurrentContainerRulesText As String = String.Empty
|
||||||
|
Friend ReadOnly Property CurrentRule As DynamicRulesValue
|
||||||
|
Get
|
||||||
|
Return _CurrentRule
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property CurrentContainer As EContainer
|
||||||
|
Get
|
||||||
|
Return _CurrentContainer
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property CurrentContainerRulesText As String
|
||||||
|
Get
|
||||||
|
If _CurrentContainerRulesText.IsEmptyString AndAlso AuthFile.Exists Then _
|
||||||
|
_CurrentContainerRulesText = AuthFile.GetText(OFError).StringTrim
|
||||||
|
Return _CurrentContainerRulesText
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property Exists As Boolean
|
||||||
|
Get
|
||||||
|
Return CurrentContainer.ListExists
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Default Friend ReadOnly Property Item(ByVal Index As Integer) As DynamicRulesValue Implements IMyEnumerator(Of DynamicRulesValue).MyEnumeratorObject
|
||||||
|
Get
|
||||||
|
Return Rules(Index)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Friend ReadOnly Property Count As Integer Implements IMyEnumerator(Of DynamicRulesValue).MyEnumeratorCount
|
||||||
|
Get
|
||||||
|
Return Rules.Count
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
#End Region
|
||||||
|
#Region "Initializer"
|
||||||
|
Friend Sub New()
|
||||||
|
Rules = New List(Of DynamicRulesValue)
|
||||||
|
DynamicRulesFile = DynamicRulesFileImpl
|
||||||
|
DynamicRulesXml = DynamicRulesFile
|
||||||
|
DynamicRulesXml.Extension = "xml"
|
||||||
|
ReplacePattern_RepoToRaw = New RParams("(.*github.com/([^/]+)/([^/]+)/blob/(.+))", Nothing, 0,
|
||||||
|
RegexReturn.ReplaceChangeListMatch, EDP.ReturnValue) With {
|
||||||
|
.PatternReplacement = "https://raw.githubusercontent.com/{2}/{3}/{4}"}
|
||||||
|
ReplacePattern_JsonInfo = ReplacePattern_RepoToRaw.Copy
|
||||||
|
ReplacePattern_JsonInfo.PatternReplacement = "https://github.com/{2}/{3}/latest-commit/{4}"
|
||||||
|
ReplacePattern_RawToRepo = ReplacePattern_RepoToRaw.Copy
|
||||||
|
ReplacePattern_RawToRepo.Pattern = "(.*raw.githubusercontent.com/([^/]+)/([^/]+)/([^/]+)/(.+))"
|
||||||
|
ReplacePattern_RawToRepo.PatternReplacement = "https://github.com/{2}/{3}/blob/{4}/{5}"
|
||||||
|
ConfigRulesExtract = RParams.DMS("DYNAMIC_RULE"":(\{.+?\}[\r\n]+)", 1, RegexOptions.Singleline, EDP.ReturnValue)
|
||||||
|
OFLOG = New TextSaver($"LOGs\OF_{Now:yyyyMMdd_HHmmss}.txt") With {.LogMode = True, .AutoSave = True, .AutoClear = True}
|
||||||
|
AddHandler OFLOG.TextSaved, AddressOf OFLOG_TextSaved
|
||||||
|
OFError = New ErrorsDescriber(EDP.SendToLog + EDP.ReturnValue) With {.DeclaredMessage = New MMessage With {.Loggers = {OFLOG}, .Exists = True}}
|
||||||
|
Responser.DeclaredError = OFError
|
||||||
|
Responser.ProcessExceptionDecision =
|
||||||
|
Function(ByVal Status As IResponserStatus, ByVal NullArg As Object, ByVal CurrentError As ErrorsDescriber) As ErrorsDescriber
|
||||||
|
If Status.StatusCode = Net.HttpStatusCode.NotFound Then
|
||||||
|
CurrentError.SendToLogOnlyMessage = True
|
||||||
|
Dim m As MMessage = CurrentError.DeclaredMessage.Clone
|
||||||
|
m.Text = $"Nothing found at URL: {Responser.LatestUrlString}"
|
||||||
|
CurrentError.DeclaredMessage = m
|
||||||
|
Status.ErrorException = New ErrorsDescriberException(m.Text,,, Status.ErrorException) With {.ReplaceMainMessage = True}
|
||||||
|
End If
|
||||||
|
Return CurrentError
|
||||||
|
End Function
|
||||||
|
ConfigAddress = ParseURL("https://github.com/AAndyProgram/SCrawler/blob/main/SCrawler/API/OnlyFans/OFScraperConfigPattern.json")
|
||||||
|
ConfigConstAddress = ParseURL("https://github.com/AAndyProgram/SCrawler/blob/main/SCrawler/API/OnlyFans/OFScraperConfigPatternConstants.txt")
|
||||||
|
RulesConstants = New Dictionary(Of String, String)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Log handlers"
|
||||||
|
Private _OFLOG_ProcessNotify As Boolean = True
|
||||||
|
Private Sub OFLOG_TextSaved(sender As Object, e As EventArgs)
|
||||||
|
If _OFLOG_ProcessNotify And AddErrorsToLog Then _OFLOG_ProcessNotify = False : MyMainLOG = $"The OnlyFans log contains errors: {OFLOG.File}"
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "ParseURL"
|
||||||
|
Private Const SiteGitHub As String = "github.com"
|
||||||
|
Private Const SiteGitHubRaw As String = "raw.githubusercontent.com"
|
||||||
|
Friend Function ParseURL(ByVal URL As String) As DynamicRulesValue
|
||||||
|
URL = URL.StringTrim
|
||||||
|
If Not URL.IsEmptyString Then
|
||||||
|
Dim r As New DynamicRulesValue
|
||||||
|
Dim rGet As Func(Of String, RParams, String) = Function(__url, pattern) DirectCast(RegexReplace(__url, pattern), IEnumerable(Of String)).FirstOrDefault
|
||||||
|
If URL.ToLower.Contains(SiteGitHubRaw) Then
|
||||||
|
r.UrlRaw = URL
|
||||||
|
r.UrlRepo = rGet(URL, ReplacePattern_RawToRepo)
|
||||||
|
ElseIf URL.ToLower.Contains(SiteGitHub) Then
|
||||||
|
r.UrlRepo = URL
|
||||||
|
r.UrlRaw = rGet(URL, ReplacePattern_RepoToRaw)
|
||||||
|
End If
|
||||||
|
|
||||||
|
If r.Valid Then
|
||||||
|
r.UpdatedAt = Now.AddYears(-1)
|
||||||
|
r.UrlLatestCommit = rGet(r.UrlRepo, ReplacePattern_JsonInfo)
|
||||||
|
r.Exists = True
|
||||||
|
Return r
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return Nothing
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "GetFormat"
|
||||||
|
Private Shared ReadOnly Property ConfigNodes As String()
|
||||||
|
Get
|
||||||
|
Return {"advanced_options", "DYNAMIC_RULE"}
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Private Const FormatMidPart As String = ":{0}:{1:x}:"
|
||||||
|
Private ReadOnly FormatExtract As RParams = RParams.DM("(\S+)\s*:\s*\{\s*\d?\s*\}\s*:\s*\{\s*\d?\s*:\s*x\s*\}\s*:\s*(\S+)", 0, RegexReturn.ListByMatch, EDP.ReturnValue)
|
||||||
|
Private ReadOnly ContainerStrConv As New CustomProvider(Function(input) If(ACheck(Of Integer)(input), input, $"""{input}"""))
|
||||||
|
Private ReadOnly ContainerConv As New CustomProvider(Function(ByVal e As Object) As Object
|
||||||
|
With DirectCast(e, EContainer)
|
||||||
|
Dim value$ = String.Empty
|
||||||
|
If .ListExists Then
|
||||||
|
value = .Select(Function(ee) ee(0).Value).ListToStringE(",", ContainerStrConv, False, String.Empty, EDP.ReturnValue)
|
||||||
|
If Not value.IsEmptyString Then value = $"[{value}]"
|
||||||
|
Else
|
||||||
|
value = AConvert(Of String)(.Value, ContainerStrConv, String.Empty, EDP.SendToLog, EDP.ReturnValue)
|
||||||
|
End If
|
||||||
|
If Not value.IsEmptyString Then
|
||||||
|
value = $"""{ .Name}"": {value}"
|
||||||
|
Else
|
||||||
|
value = $"""{ .Name}"": """""
|
||||||
|
End If
|
||||||
|
Return value
|
||||||
|
End With
|
||||||
|
End Function)
|
||||||
|
Friend Shared Function GetFormat(ByVal j As EContainer, Optional ByVal Check As Boolean = False,
|
||||||
|
Optional ByRef CheckResult As Boolean = False,
|
||||||
|
Optional ByVal TryConfig As Boolean = False, Optional ByRef IsConfig As Boolean = False) As String
|
||||||
|
Dim pattern$ = String.Empty
|
||||||
|
With If(TryConfig, j(ConfigNodes), j)
|
||||||
|
If .ListExists Then
|
||||||
|
If Not .Value("format").IsEmptyString Then
|
||||||
|
pattern = .Value("format").Replace("{}", "{0}").Replace("{:x}", "{1:x}")
|
||||||
|
ElseIf Not .Value("prefix").IsEmptyString And Not .Value("suffix").IsEmptyString Then
|
||||||
|
pattern = .Value("prefix") & FormatMidPart & .Value("suffix")
|
||||||
|
ElseIf Not .Value("start").IsEmptyString And Not .Value("end").IsEmptyString Then
|
||||||
|
pattern = .Value("start") & FormatMidPart & .Value("end")
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim result As Boolean = Not pattern.IsEmptyString And .Item("checksum_indexes").ListExists And
|
||||||
|
Not .Value("static_param").IsEmptyString And Not .Value("checksum_constant").IsEmptyString
|
||||||
|
If Check Then CheckResult = result
|
||||||
|
If Not result And Not TryConfig Then Return GetFormat(j, Check, CheckResult, True, IsConfig)
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Return pattern
|
||||||
|
End Function
|
||||||
|
Private Function ConvertAuthText() As String
|
||||||
|
Dim result$ = String.Empty
|
||||||
|
With CurrentContainer
|
||||||
|
If .ListExists Then
|
||||||
|
Dim f$ = GetFormat(.Self)
|
||||||
|
If Not f.IsEmptyString Then
|
||||||
|
Dim l As List(Of String) = RegexReplace(f, FormatExtract)
|
||||||
|
If l.ListExists(3) Then
|
||||||
|
Dim s$ = l(1), e$ = l(2)
|
||||||
|
.Value("format") = s & FormatMidPart & e
|
||||||
|
.Value("prefix") = s
|
||||||
|
.Value("suffix") = e
|
||||||
|
.Value("start") = s
|
||||||
|
.Value("end") = e
|
||||||
|
Dim t$ = .ListToStringE(",", ContainerConv, False)
|
||||||
|
If Not t.IsEmptyString Then t = "{" & t & "}"
|
||||||
|
Return t
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End With
|
||||||
|
Return String.Empty
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "Load, Save"
|
||||||
|
Private Function GetTextLines(ByVal Input As String) As List(Of String)
|
||||||
|
If Not Input.IsEmptyString Then
|
||||||
|
Return ListAddList(Nothing, Input.StringTrim.Split(vbCrLf), LAP.NotContainsOnly, EDP.ReturnValue,
|
||||||
|
CType(Function(inp$) inp.StringTrim, Func(Of Object, Object)))
|
||||||
|
Else
|
||||||
|
Return New List(Of String)
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Private Sub ParseConsts(ByVal Source As String)
|
||||||
|
If Not Source.IsEmptyString Then
|
||||||
|
Dim l As List(Of String) = GetTextLines(Source)
|
||||||
|
Dim v$()
|
||||||
|
If l.ListExists Then
|
||||||
|
RulesConstants.Clear()
|
||||||
|
For Each value$ In l
|
||||||
|
If Not value.IsEmptyString Then
|
||||||
|
v = value.Split("=")
|
||||||
|
If v.ListExists(2) Then RulesConstants.Add(v(0), v(1))
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Const RulesNode As String = "Rules"
|
||||||
|
Private _InitialValuesLoaded As Boolean = False
|
||||||
|
Private Sub LoadInitialValues()
|
||||||
|
If Not _InitialValuesLoaded Then
|
||||||
|
_InitialValuesLoaded = True
|
||||||
|
|
||||||
|
If Not OFScraperConfigPatternFile.Exists Then
|
||||||
|
Dim t$ = Text.Encoding.UTF8.GetString(My.Resources.OFResources.OFScraperConfigPattern)
|
||||||
|
TextSaver.SaveTextToFile(t, OFScraperConfigPatternFile, True)
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not OFScraperConfigPatternFileConst.Exists Then _
|
||||||
|
TextSaver.SaveTextToFile(My.Resources.OFResources.OFScraperConfigPatternConstants, OFScraperConfigPatternFileConst, True)
|
||||||
|
|
||||||
|
If OFScraperConfigPatternFileConst.Exists Then ParseConsts(OFScraperConfigPatternFileConst.GetText(OFError))
|
||||||
|
|
||||||
|
If DynamicRulesXml.Exists Then
|
||||||
|
Rules.Clear()
|
||||||
|
Using x As New XmlFile(DynamicRulesXml, Protector.Modes.All, False) With {.XmlReadOnly = True, .AllowSameNames = True}
|
||||||
|
x.LoadData(OFError)
|
||||||
|
Dim dNull As Date = Now.AddYears(-1)
|
||||||
|
LastUpdateTimeFile = x.Value(Name_LastUpdateTimeFile).ToDateDef(dNull)
|
||||||
|
LastUpdateTimeRules = x.Value(Name_LastUpdateTimeRules).ToDateDef(dNull)
|
||||||
|
ProtectFile = x.Value(Name_ProtectFile).FromXML(Of Boolean)(False)
|
||||||
|
Mode = x.Value(Name_Mode).FromXML(Of Integer)(Modes.List)
|
||||||
|
UpdateInterval = x.Value(Name_UpdateInterval).FromXML(Of Integer)(UpdateIntervalDefault)
|
||||||
|
PersonalRule = x.Value(Name_PersonalRule)
|
||||||
|
RulesForceUpdateRequired = x.Value(Name_RulesForceUpdateRequired).FromXML(Of Boolean)(False)
|
||||||
|
RulesUpdateConst = x.Value(Name_RulesUpdateConst).FromXML(Of Boolean)(True)
|
||||||
|
RulesReplaceConfig = x.Value(Name_RulesReplaceConfig).FromXML(Of Boolean)(True)
|
||||||
|
AddErrorsToLog = x.Value(Name_AddErrorsToLog).FromXML(Of Boolean)(False)
|
||||||
|
ConfigAutoUpdate = x.Value(Name_ConfigAutoUpdate).FromXML(Of Boolean)(True)
|
||||||
|
RulesConfigManualMode = x.Value(Name_RulesConfigManualMode).FromXML(Of Boolean)(True)
|
||||||
|
ConfigLastDateUpdate = x.Value(Name_ConfigLastDateUpdate).ToDateDef(Now.AddYears(-1))
|
||||||
|
If x.Contains(RulesNode) Then Rules.ListAddList(x({RulesNode}), LAP.IgnoreICopier, OFError)
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Friend Sub Save()
|
||||||
|
Using x As New XmlFile With {.AllowSameNames = True, .Name = "DynamicRules"}
|
||||||
|
x.Add(Name_LastUpdateTimeFile, LastUpdateTimeFile.ToStringDateDef)
|
||||||
|
x.Add(Name_LastUpdateTimeRules, LastUpdateTimeRules.ToStringDateDef)
|
||||||
|
x.Add(Name_ProtectFile, ProtectFile.BoolToInteger)
|
||||||
|
x.Add(Name_Mode, CInt(Mode))
|
||||||
|
x.Add(Name_UpdateInterval, UpdateInterval)
|
||||||
|
x.Add(Name_PersonalRule, PersonalRule)
|
||||||
|
x.Add(Name_RulesForceUpdateRequired, RulesForceUpdateRequired.BoolToInteger)
|
||||||
|
x.Add(Name_RulesUpdateConst, RulesUpdateConst.BoolToInteger)
|
||||||
|
x.Add(Name_RulesReplaceConfig, RulesReplaceConfig.BoolToInteger)
|
||||||
|
x.Add(Name_AddErrorsToLog, AddErrorsToLog.BoolToInteger)
|
||||||
|
x.Add(Name_ConfigAutoUpdate, ConfigAutoUpdate.BoolToInteger)
|
||||||
|
x.Add(Name_RulesConfigManualMode, RulesConfigManualMode.BoolToInteger)
|
||||||
|
x.Add(Name_ConfigLastDateUpdate, ConfigLastDateUpdate.ToStringDateDef)
|
||||||
|
If Count > 0 Then
|
||||||
|
Rules.Sort()
|
||||||
|
x.Add(New EContainer(RulesNode))
|
||||||
|
x.Last.AddRange(Rules)
|
||||||
|
End If
|
||||||
|
x.Save(DynamicRulesXml, OFError)
|
||||||
|
End Using
|
||||||
|
If Count > 0 Then
|
||||||
|
Using t As New TextSaver(DynamicRulesFile)
|
||||||
|
Rules.ForEach(Sub(r) If Not r.UrlRepo.IsEmptyString Then t.AppendLine(r.UrlRepo))
|
||||||
|
t.Save(OFError)
|
||||||
|
End Using
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Update"
|
||||||
|
Private _UpdateInProgress As Boolean = False
|
||||||
|
Private _ForcedUpdate As Boolean = False
|
||||||
|
Friend Function Update(ByVal Force As Boolean, Optional ByVal LoadListOnly As Boolean = False) As Boolean
|
||||||
|
Dim skip As Boolean = _UpdateInProgress
|
||||||
|
If skip And _ForcedUpdate Then Force = False
|
||||||
|
_ForcedUpdate = Force
|
||||||
|
While _UpdateInProgress : Threading.Thread.Sleep(200) : End While
|
||||||
|
If Not skip Or Force Then UpdateImpl(Force Or RulesForceUpdateRequired, LoadListOnly)
|
||||||
|
Return Exists
|
||||||
|
End Function
|
||||||
|
Private Sub UpdateImpl(ByVal Force As Boolean, Optional ByVal LoadListOnly As Boolean = False)
|
||||||
|
Try
|
||||||
|
If Not _UpdateInProgress Then
|
||||||
|
_UpdateInProgress = True
|
||||||
|
|
||||||
|
LoadInitialValues()
|
||||||
|
|
||||||
|
Dim r$
|
||||||
|
Dim process As Boolean = False, updated As Boolean = False
|
||||||
|
Dim forceSave As Boolean = RulesForceUpdateRequired Or Not DynamicRulesFile.Exists Or Not DynamicRulesXml.Exists
|
||||||
|
Dim textLocal As List(Of String)
|
||||||
|
Dim i%
|
||||||
|
Dim rule As DynamicRulesValue
|
||||||
|
Dim e As EContainer
|
||||||
|
Dim errDate As Date = Now.AddYears(-1)
|
||||||
|
Dim d As Date?
|
||||||
|
'2024-06-12T12:44:06.000-05:00
|
||||||
|
Dim dateProvider As New ADateTime("yyyy-MM-ddTHH:mm:ss.fff%K")
|
||||||
|
|
||||||
|
RulesForceUpdateRequired = False
|
||||||
|
|
||||||
|
If Not DynamicRulesFile.Exists Then process = True : ValidateRulesFile()
|
||||||
|
|
||||||
|
'update rules list
|
||||||
|
If Not LoadListOnly And (LastUpdateTimeFile.AddMinutes(UpdateInterval) < Now Or process Or Force) Then
|
||||||
|
LastUpdateTimeFile = Now
|
||||||
|
r = Responser.GetResponse("https://raw.githubusercontent.com/AAndyProgram/SCrawler/main/SCrawler/API/OnlyFans/DynamicRules.txt")
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
Dim textWeb As List(Of String) = GetTextLines(r)
|
||||||
|
Dim fileText$
|
||||||
|
If textWeb.ListExists Then
|
||||||
|
Using t As New TextSaver(DynamicRulesFile)
|
||||||
|
If ProtectFile Then
|
||||||
|
fileText = DynamicRulesFile.GetText(OFError)
|
||||||
|
t.Append(fileText)
|
||||||
|
textLocal = GetTextLines(fileText)
|
||||||
|
If textLocal.ListExists Then _
|
||||||
|
textLocal.ForEach(Sub(tt) If Not tt.IsEmptyString AndAlso Not textWeb.Contains(tt, RulesLinesComparer) Then _
|
||||||
|
t.AppendLine(tt) : updated = True) : textLocal.Clear()
|
||||||
|
Else
|
||||||
|
t.Append(r)
|
||||||
|
updated = True
|
||||||
|
End If
|
||||||
|
t.Save(OFError)
|
||||||
|
End Using
|
||||||
|
textWeb.Clear()
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
'update config and consts
|
||||||
|
If Not LoadListOnly AndAlso ConfigAutoUpdate AndAlso ConfigLastDateUpdate.AddMinutes(UpdateInterval) < Now Then
|
||||||
|
Dim __upConf As Boolean = False
|
||||||
|
Dim __dConf As Date = ConfigLastDateUpdate
|
||||||
|
Dim parseConfigFiles As Action(Of DynamicRulesValue, SFile, Boolean) =
|
||||||
|
Sub(ByVal __rule As DynamicRulesValue, ByVal __fileSave As SFile, ByVal isConstFile As Boolean)
|
||||||
|
r = Responser.GetResponse(__rule.UrlLatestCommit)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
e = JsonDocument.Parse(r, OFError)
|
||||||
|
If e.ListExists Then
|
||||||
|
d = AConvert(Of Date)(e.Value("date"), dateProvider, Nothing)
|
||||||
|
Dim dConf As Date = If(d, errDate)
|
||||||
|
If dConf > __dConf Then
|
||||||
|
__dConf = dConf
|
||||||
|
__upConf = True
|
||||||
|
updated = True
|
||||||
|
r = Responser.GetResponse(__rule.UrlRaw)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
TextSaver.SaveTextToFile(r, __fileSave, True, False, OFError)
|
||||||
|
If isConstFile Then ParseConsts(r)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
e.Dispose()
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
'Update consts
|
||||||
|
If RulesUpdateConst Then parseConfigFiles(ConfigConstAddress, OFScraperConfigPatternFileConst, True)
|
||||||
|
'Update config
|
||||||
|
parseConfigFiles(ConfigAddress, OFScraperConfigPatternFile, False)
|
||||||
|
If __upConf Then ConfigLastDateUpdate = Now
|
||||||
|
End If
|
||||||
|
|
||||||
|
'generate rules, update rules dates
|
||||||
|
If LastUpdateTimeRules.AddMinutes(UpdateInterval) < Now Or updated Or Force Or LoadListOnly Then
|
||||||
|
process = True
|
||||||
|
If Mode = Modes.Personal And Not PersonalRule.IsEmptyString Then
|
||||||
|
If Not LoadListOnly Then LastUpdateTimeRules = Now : updated = True
|
||||||
|
Else
|
||||||
|
If Not LoadListOnly Then LastUpdateTimeRules = Now : updated = True
|
||||||
|
textLocal = GetTextLines(DynamicRulesFile.GetText(OFError))
|
||||||
|
If textLocal.ListExists Then
|
||||||
|
For Each url$ In textLocal
|
||||||
|
url = url.StringTrim
|
||||||
|
If Not url.IsEmptyString Then
|
||||||
|
i = IndexOf(url)
|
||||||
|
If i >= 0 Then
|
||||||
|
rule = Rules(i)
|
||||||
|
Else
|
||||||
|
rule = ParseURL(url)
|
||||||
|
If rule.Valid Then
|
||||||
|
i = Add(rule, False, False)
|
||||||
|
Else
|
||||||
|
rule = Nothing
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not LoadListOnly Then
|
||||||
|
If i >= 0 And rule.Valid And Not rule.UrlLatestCommit.IsEmptyString Then
|
||||||
|
r = Responser.GetResponse(rule.UrlLatestCommit)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
e = JsonDocument.Parse(r, OFError)
|
||||||
|
If e.ListExists Then
|
||||||
|
d = AConvert(Of Date)(e.Value("date"), dateProvider, Nothing)
|
||||||
|
rule.UpdatedAt = If(d, errDate)
|
||||||
|
e.Dispose()
|
||||||
|
Else
|
||||||
|
rule.Broken = True
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
rule.Broken = True
|
||||||
|
End If
|
||||||
|
Rules(i) = rule
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Count > 0 Then Rules.Sort()
|
||||||
|
|
||||||
|
'download and load the rule
|
||||||
|
If (LoadListOnly And AuthFile.Exists) Or (Not LoadListOnly And ((updated And Count > 0) Or Not AuthFile.Exists)) Then
|
||||||
|
_CurrentRule = Nothing
|
||||||
|
_CurrentContainer.DisposeIfReady
|
||||||
|
_CurrentContainer = Nothing
|
||||||
|
Dim processRule As Func(Of DynamicRulesValue, Boolean, DialogResult) =
|
||||||
|
Function(ByVal __rule As DynamicRulesValue, ByVal reparseAuth As Boolean) As DialogResult
|
||||||
|
Dim fromAuthFile As Boolean = (LoadListOnly Or reparseAuth) AndAlso AuthFile.Exists
|
||||||
|
If fromAuthFile Then
|
||||||
|
r = AuthFile.GetText(OFError)
|
||||||
|
Else
|
||||||
|
r = GetWebString(__rule.UrlRaw,, OFError)
|
||||||
|
End If
|
||||||
|
Dim j As EContainer = JsonDocument.Parse(r, OFError)
|
||||||
|
Dim checkResult As Boolean = False
|
||||||
|
Dim isConfig As Boolean = False
|
||||||
|
Dim textToSave As String = r
|
||||||
|
If j.ListExists AndAlso Not GetFormat(j, True, checkResult,, isConfig).IsEmptyString AndAlso checkResult Then
|
||||||
|
If isConfig Then textToSave = RegexReplace(r, ConfigRulesExtract)
|
||||||
|
If textToSave.IsEmptyString Then
|
||||||
|
Return DialogResult.Retry
|
||||||
|
Else
|
||||||
|
_CurrentRule = __rule
|
||||||
|
_CurrentContainer = If(isConfig, j(ConfigNodes), j)
|
||||||
|
textToSave = ConvertAuthText()
|
||||||
|
_CurrentContainerRulesText = textToSave
|
||||||
|
If (Not fromAuthFile Or Not textToSave.StringTrim = r.StringTrim) And Not textToSave.IsEmptyString Then
|
||||||
|
TextSaver.SaveTextToFile(textToSave, AuthFile, True, False, OFError)
|
||||||
|
If Not reparseAuth Then processRule(__rule, True)
|
||||||
|
End If
|
||||||
|
Return DialogResult.OK
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return DialogResult.No
|
||||||
|
End Function
|
||||||
|
If Mode = Modes.Personal And Not PersonalRule.IsEmptyString Then
|
||||||
|
processRule(New DynamicRulesValue With {.UrlRepo = PersonalRule, .UrlRaw = PersonalRule}, False)
|
||||||
|
Else
|
||||||
|
For Each rule In Rules
|
||||||
|
If rule.Valid And Not rule.Broken Then
|
||||||
|
Select Case processRule(rule, False)
|
||||||
|
Case DialogResult.Retry : Continue For
|
||||||
|
Case DialogResult.OK : Exit For
|
||||||
|
End Select
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If updated Or forceSave Then Save()
|
||||||
|
|
||||||
|
_UpdateInProgress = False
|
||||||
|
End If
|
||||||
|
Catch ex As Exception
|
||||||
|
ErrorsDescriber.Execute(OFError, ex, "[OnlyFans.DynamicRulesEnv.UpdateImpl]")
|
||||||
|
_UpdateInProgress = False
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Add, IndexOf"
|
||||||
|
Friend Function Add(ByVal Rule As DynamicRulesValue, Optional ByVal AutoSort As Boolean = True, Optional ByVal AutoSave As Boolean = False) As Integer
|
||||||
|
If Rule.Valid Then
|
||||||
|
Dim i% = IndexOf(Rule)
|
||||||
|
If i = -1 Then
|
||||||
|
Rules.Add(Rule)
|
||||||
|
i = Count - 1
|
||||||
|
If AutoSort Then Rules.Sort() : i = IndexOf(Rule)
|
||||||
|
If AutoSave Then Save()
|
||||||
|
End If
|
||||||
|
Return i
|
||||||
|
Else
|
||||||
|
Return -1
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Friend Function RemoveAt(ByVal Index As Integer) As Boolean
|
||||||
|
If Index.ValueBetween(0, Count - 1) Then
|
||||||
|
Rules.RemoveAt(Index)
|
||||||
|
Return True
|
||||||
|
Else
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
Friend Function IndexOf(ByVal URL As String) As Integer
|
||||||
|
If Count > 0 Then
|
||||||
|
URL = URL.StringToLower.Trim
|
||||||
|
Return Rules.FindIndex(Function(r) r.UrlRepo.StringToLower = URL Or r.UrlRaw.StringToLower = URL Or r.UrlLatestCommit.StringToLower = URL)
|
||||||
|
Else
|
||||||
|
Return -1
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "ICopier Support"
|
||||||
|
Friend Overloads Function Copy() As Object Implements ICopier.Copy
|
||||||
|
Return (New DynamicRulesEnv).Copy(Me)
|
||||||
|
End Function
|
||||||
|
Friend Overloads Function Copy(ByVal Source As Object) As Object Implements ICopier.Copy
|
||||||
|
Return Copy(Source, False)
|
||||||
|
End Function
|
||||||
|
Friend Overloads Function Copy(ByVal Source As Object, ByVal UpdateForceProperty As Boolean) As Object
|
||||||
|
If Not Source Is Nothing Then
|
||||||
|
With DirectCast(Source, DynamicRulesEnv)
|
||||||
|
If Not RulesForceUpdateRequired And UpdateForceProperty Then _
|
||||||
|
RulesForceUpdateRequired = Not Rules.ListEquals(.Rules) Or Not Mode = .Mode Or
|
||||||
|
(.Mode = Modes.Personal And Not PersonalRule = .PersonalRule)
|
||||||
|
ProtectFile = .ProtectFile
|
||||||
|
Mode = .Mode
|
||||||
|
UpdateInterval = .UpdateInterval
|
||||||
|
PersonalRule = .PersonalRule
|
||||||
|
If Not RulesForceUpdateRequired Then RulesForceUpdateRequired = .RulesForceUpdateRequired
|
||||||
|
RulesUpdateConst = .RulesUpdateConst
|
||||||
|
RulesReplaceConfig = .RulesReplaceConfig
|
||||||
|
AddErrorsToLog = .AddErrorsToLog
|
||||||
|
ConfigAutoUpdate = .ConfigAutoUpdate
|
||||||
|
RulesConfigManualMode = .RulesConfigManualMode
|
||||||
|
Rules.Clear()
|
||||||
|
If .Count > 0 Then Rules.AddRange(.Rules)
|
||||||
|
End With
|
||||||
|
Return Me
|
||||||
|
Else
|
||||||
|
Return Nothing
|
||||||
|
End If
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IEnumerable Support"
|
||||||
|
Private Function GetEnumerator() As IEnumerator(Of DynamicRulesValue) Implements IEnumerable(Of DynamicRulesValue).GetEnumerator
|
||||||
|
Return New MyEnumerator(Of DynamicRulesValue)(Me)
|
||||||
|
End Function
|
||||||
|
Private Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
|
||||||
|
Return GetEnumerator()
|
||||||
|
End Function
|
||||||
|
#End Region
|
||||||
|
#Region "IDisposable Support"
|
||||||
|
Private disposedValue As Boolean = False
|
||||||
|
Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
If Not disposedValue Then
|
||||||
|
If disposing Then
|
||||||
|
Rules.Clear()
|
||||||
|
_CurrentContainer.DisposeIfReady
|
||||||
|
Responser.DisposeIfReady
|
||||||
|
End If
|
||||||
|
_CurrentContainer = Nothing
|
||||||
|
disposedValue = True
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Protected Overrides Sub Finalize()
|
||||||
|
Dispose(False)
|
||||||
|
MyBase.Finalize()
|
||||||
|
End Sub
|
||||||
|
Friend Overloads Sub Dispose() Implements IDisposable.Dispose
|
||||||
|
Dispose(True)
|
||||||
|
GC.SuppressFinalize(Me)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
24
SCrawler/API/OnlyFans/OFResources.Designer.vb
generated
24
SCrawler/API/OnlyFans/OFResources.Designer.vb
generated
@@ -64,6 +64,20 @@ Namespace My.Resources
|
|||||||
End Set
|
End Set
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized string similar to https://github.com/datawhores/onlyfans-dynamic-rules/blob/main/dynamicRules.json
|
||||||
|
'''https://github.com/riley-access-labs/onlyfans-dynamic-rules-1/blob/main/dynamicRules.json
|
||||||
|
'''https://github.com/riley-access-labs/onlyfans-dynamic-rules-1/blob/patch-1/dynamicRules.json
|
||||||
|
'''https://github.com/DATAHOARDERS/dynamic-rules/blob/main/onlyfans.json
|
||||||
|
'''https://github.com/DIGITALCRIMINAL/dynamic-rules/blob/main/onlyfans.json
|
||||||
|
'''https://github.com/deviint/onlyfans-dynamic-rules/blob/main/dynamicRules.json.
|
||||||
|
'''</summary>
|
||||||
|
Friend Shared ReadOnly Property DynamicRules() As String
|
||||||
|
Get
|
||||||
|
Return ResourceManager.GetString("DynamicRules", resourceCulture)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
'''<summary>
|
'''<summary>
|
||||||
''' Looks up a localized resource of type System.Byte[].
|
''' Looks up a localized resource of type System.Byte[].
|
||||||
'''</summary>
|
'''</summary>
|
||||||
@@ -73,5 +87,15 @@ Namespace My.Resources
|
|||||||
Return CType(obj,Byte())
|
Return CType(obj,Byte())
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
|
'''<summary>
|
||||||
|
''' Looks up a localized string similar to dynamic-mode-default=generic
|
||||||
|
'''RULE_VALUE=DYNAMIC_GENERIC_URL.
|
||||||
|
'''</summary>
|
||||||
|
Friend Shared ReadOnly Property OFScraperConfigPatternConstants() As String
|
||||||
|
Get
|
||||||
|
Return ResourceManager.GetString("OFScraperConfigPatternConstants", resourceCulture)
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@@ -118,7 +118,13 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="DynamicRules" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>DynamicRules.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||||
|
</data>
|
||||||
<data name="OFScraperConfigPattern" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="OFScraperConfigPattern" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>OFScraperConfigPattern.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>OFScraperConfigPattern.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="OFScraperConfigPatternConstants" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>OFScraperConfigPatternConstants.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,65 +1,63 @@
|
|||||||
{
|
{
|
||||||
"config": {
|
"main_profile": "main_profile",
|
||||||
"main_profile": "main_profile",
|
"metadata": "{configpath}/{profile}/.data/{model_username}_{model_id}",
|
||||||
"metadata": "{configpath}/{profile}/.data/{model_username}_{model_id}",
|
"discord": "",
|
||||||
"discord": "",
|
"file_options": {
|
||||||
"file_options": {
|
"save_location": "",
|
||||||
"save_location": "",
|
"dir_format": "",
|
||||||
"dir_format": "",
|
"file_format": "{filename}.{ext}",
|
||||||
"file_format": "{filename}.{ext}",
|
"textlength": 0,
|
||||||
"textlength": 0,
|
"space_replacer": " ",
|
||||||
"space-replacer": " ",
|
"date": "YYYY-MM-DD"
|
||||||
"date": "YYYY-MM-DD"
|
},
|
||||||
},
|
"download_options": {
|
||||||
"download_options": {
|
"file_size_max": 0,
|
||||||
"file_size_limit": 0,
|
"file_size_min": 0,
|
||||||
"file_size_min": 0,
|
"filter": [
|
||||||
"filter": [
|
"Images",
|
||||||
"Images",
|
"Audios",
|
||||||
"Audios",
|
"Videos"
|
||||||
"Videos"
|
],
|
||||||
],
|
"auto_resume": false
|
||||||
"auto_resume": false
|
},
|
||||||
},
|
"binary_options": {
|
||||||
"binary_options": {
|
"mp4decrypt": "",
|
||||||
"mp4decrypt": "",
|
"ffmpeg": ""
|
||||||
"ffmpeg": ""
|
},
|
||||||
},
|
"cdm_options": {
|
||||||
"cdm_options": {
|
"private-key": null,
|
||||||
"private-key": null,
|
"client-id": null,
|
||||||
"client-id": null,
|
"key-mode-default": "cdrm",
|
||||||
"key-mode-default": "cdrm",
|
"keydb_api": ""
|
||||||
"keydb_api": ""
|
},
|
||||||
},
|
"performance_options": {
|
||||||
"performance_options": {
|
"download-sems": 6,
|
||||||
"download-sems": 6,
|
"maxfile-sem": 0,
|
||||||
"maxfile-sem": 0,
|
"threads": 5
|
||||||
"threads": 5
|
},
|
||||||
},
|
"advanced_options": {
|
||||||
"advanced_options": {
|
"code-execution": false,
|
||||||
"code-execution": false,
|
"dynamic-mode-default": "generic",
|
||||||
"dynamic-mode-default": "sneaky",
|
"backend": "aio",
|
||||||
"backend": "aio",
|
"downloadbars": false,
|
||||||
"downloadbars": false,
|
"cache-mode": "sqlite",
|
||||||
"cache-mode": "sqlite",
|
"appendlog": true,
|
||||||
"appendlog": true,
|
"custom": null,
|
||||||
"custom": null,
|
"sanitize_text": false,
|
||||||
"sanitize_text": false,
|
"avatar": true,
|
||||||
"avatar": true,
|
"custom_values": {
|
||||||
"custom_values": {
|
"DYNAMIC_GENERIC_URL": "https://raw.githubusercontent.com/datawhores/onlyfans-dynamic-rules/main/dynamicRules.json",
|
||||||
"SNEAKY": "https://raw.githubusercontent.com/Growik/onlyfans-dynamic-rules/main/rules.json",
|
"CDRM": "https://old.cdrm-project.com/wv"
|
||||||
"CDRM": "https://old.cdrm-project.com/wv"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"responsetype": {
|
|
||||||
"timeline": "Posts",
|
|
||||||
"message": "Messages",
|
|
||||||
"archived": "Archived",
|
|
||||||
"paid": "Messages",
|
|
||||||
"stories": "Stories",
|
|
||||||
"highlights": "Stories",
|
|
||||||
"profile": "Profile",
|
|
||||||
"pinned": "Posts"
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"responsetype": {
|
||||||
|
"timeline": "Posts",
|
||||||
|
"message": "Messages",
|
||||||
|
"archived": "Archived",
|
||||||
|
"paid": "Messages",
|
||||||
|
"stories": "Stories",
|
||||||
|
"highlights": "Stories",
|
||||||
|
"profile": "Profile",
|
||||||
|
"pinned": "Posts"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
dynamic-mode-default=generic
|
||||||
|
RULE_VALUE=DYNAMIC_GENERIC_URL
|
||||||
361
SCrawler/API/OnlyFans/OnlyFansAdvancedSettingsForm.Designer.vb
generated
Normal file
361
SCrawler/API/OnlyFans/OnlyFansAdvancedSettingsForm.Designer.vb
generated
Normal file
@@ -0,0 +1,361 @@
|
|||||||
|
' 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.OnlyFans
|
||||||
|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
|
||||||
|
Partial Friend Class OnlyFansAdvancedSettingsForm : Inherits System.Windows.Forms.Form
|
||||||
|
<System.Diagnostics.DebuggerNonUserCode()>
|
||||||
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
Try
|
||||||
|
If disposing AndAlso components IsNot Nothing Then
|
||||||
|
components.Dispose()
|
||||||
|
End If
|
||||||
|
Finally
|
||||||
|
MyBase.Dispose(disposing)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
Private components As System.ComponentModel.IContainer
|
||||||
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
|
Private Sub InitializeComponent()
|
||||||
|
Me.components = New System.ComponentModel.Container()
|
||||||
|
Dim CONTAINER_MAIN As System.Windows.Forms.ToolStripContainer
|
||||||
|
Dim TP_MAIN As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim ActionButton7 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(OnlyFansAdvancedSettingsForm))
|
||||||
|
Dim ActionButton8 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim ActionButton9 As PersonalUtilities.Forms.Controls.Base.ActionButton = New PersonalUtilities.Forms.Controls.Base.ActionButton()
|
||||||
|
Dim TP_RULES_LIST As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim TP_RULES_LIST_LEFT As System.Windows.Forms.TableLayoutPanel
|
||||||
|
Dim TT_MAIN As System.Windows.Forms.ToolTip
|
||||||
|
Me.TXT_UP_INTERVAL = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.TXT_PERSONAL_RULE = New PersonalUtilities.Forms.Controls.TextBoxExtended()
|
||||||
|
Me.CONTAINER_LIST = New System.Windows.Forms.ToolStripContainer()
|
||||||
|
Me.LIST_RULES = New System.Windows.Forms.ListBox()
|
||||||
|
Me.OPT_RULES_LIST = New System.Windows.Forms.RadioButton()
|
||||||
|
Me.CH_PROTECTED = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_FORCE_UPDATE = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_LOG_ERR = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_UPDATE_CONF = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_UPDATE_RULES_CONST = New System.Windows.Forms.CheckBox()
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE = New System.Windows.Forms.CheckBox()
|
||||||
|
CONTAINER_MAIN = New System.Windows.Forms.ToolStripContainer()
|
||||||
|
TP_MAIN = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TP_RULES_LIST = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TP_RULES_LIST_LEFT = New System.Windows.Forms.TableLayoutPanel()
|
||||||
|
TT_MAIN = New System.Windows.Forms.ToolTip(Me.components)
|
||||||
|
CONTAINER_MAIN.ContentPanel.SuspendLayout()
|
||||||
|
CONTAINER_MAIN.SuspendLayout()
|
||||||
|
TP_MAIN.SuspendLayout()
|
||||||
|
CType(Me.TXT_UP_INTERVAL, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
CType(Me.TXT_PERSONAL_RULE, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||||
|
TP_RULES_LIST.SuspendLayout()
|
||||||
|
Me.CONTAINER_LIST.ContentPanel.SuspendLayout()
|
||||||
|
Me.CONTAINER_LIST.SuspendLayout()
|
||||||
|
TP_RULES_LIST_LEFT.SuspendLayout()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN
|
||||||
|
'
|
||||||
|
'
|
||||||
|
'CONTAINER_MAIN.ContentPanel
|
||||||
|
'
|
||||||
|
CONTAINER_MAIN.ContentPanel.Controls.Add(TP_MAIN)
|
||||||
|
CONTAINER_MAIN.ContentPanel.Size = New System.Drawing.Size(464, 341)
|
||||||
|
CONTAINER_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
CONTAINER_MAIN.LeftToolStripPanelVisible = False
|
||||||
|
CONTAINER_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
|
CONTAINER_MAIN.Name = "CONTAINER_MAIN"
|
||||||
|
CONTAINER_MAIN.RightToolStripPanelVisible = False
|
||||||
|
CONTAINER_MAIN.Size = New System.Drawing.Size(464, 341)
|
||||||
|
CONTAINER_MAIN.TabIndex = 1
|
||||||
|
CONTAINER_MAIN.TopToolStripPanelVisible = False
|
||||||
|
'
|
||||||
|
'TP_MAIN
|
||||||
|
'
|
||||||
|
TP_MAIN.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.[Single]
|
||||||
|
TP_MAIN.ColumnCount = 1
|
||||||
|
TP_MAIN.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_MAIN.Controls.Add(Me.TXT_UP_INTERVAL, 0, 5)
|
||||||
|
TP_MAIN.Controls.Add(Me.TXT_PERSONAL_RULE, 0, 6)
|
||||||
|
TP_MAIN.Controls.Add(TP_RULES_LIST, 0, 7)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_LOG_ERR, 0, 0)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_RULES_REPLACE_CONFIG, 0, 1)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_UPDATE_CONF, 0, 4)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_UPDATE_RULES_CONST, 0, 2)
|
||||||
|
TP_MAIN.Controls.Add(Me.CH_CONFIG_MANUAL_MODE, 0, 3)
|
||||||
|
TP_MAIN.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_MAIN.Location = New System.Drawing.Point(0, 0)
|
||||||
|
TP_MAIN.Name = "TP_MAIN"
|
||||||
|
TP_MAIN.RowCount = 8
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28.0!))
|
||||||
|
TP_MAIN.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_MAIN.Size = New System.Drawing.Size(464, 341)
|
||||||
|
TP_MAIN.TabIndex = 0
|
||||||
|
'
|
||||||
|
'TXT_UP_INTERVAL
|
||||||
|
'
|
||||||
|
ActionButton7.BackgroundImage = CType(resources.GetObject("ActionButton7.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton7.Name = "Refresh"
|
||||||
|
ActionButton7.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Refresh
|
||||||
|
ActionButton8.BackgroundImage = CType(resources.GetObject("ActionButton8.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton8.Name = "Clear"
|
||||||
|
ActionButton8.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear
|
||||||
|
Me.TXT_UP_INTERVAL.Buttons.Add(ActionButton7)
|
||||||
|
Me.TXT_UP_INTERVAL.Buttons.Add(ActionButton8)
|
||||||
|
Me.TXT_UP_INTERVAL.CaptionText = "Dynamic rules update"
|
||||||
|
Me.TXT_UP_INTERVAL.CaptionToolTipEnabled = True
|
||||||
|
Me.TXT_UP_INTERVAL.CaptionToolTipText = "'Dynamic rules' update interval (minutes). Default: 1440"
|
||||||
|
Me.TXT_UP_INTERVAL.CaptionWidth = 120.0R
|
||||||
|
Me.TXT_UP_INTERVAL.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_UP_INTERVAL.Location = New System.Drawing.Point(4, 134)
|
||||||
|
Me.TXT_UP_INTERVAL.Name = "TXT_UP_INTERVAL"
|
||||||
|
Me.TXT_UP_INTERVAL.Size = New System.Drawing.Size(456, 22)
|
||||||
|
Me.TXT_UP_INTERVAL.TabIndex = 5
|
||||||
|
'
|
||||||
|
'TXT_PERSONAL_RULE
|
||||||
|
'
|
||||||
|
Me.TXT_PERSONAL_RULE.AutoShowClearButton = True
|
||||||
|
ActionButton9.BackgroundImage = CType(resources.GetObject("ActionButton9.BackgroundImage"), System.Drawing.Image)
|
||||||
|
ActionButton9.Enabled = False
|
||||||
|
ActionButton9.Name = "Clear"
|
||||||
|
ActionButton9.Tag = PersonalUtilities.Forms.Controls.Base.ActionButton.DefaultButtons.Clear
|
||||||
|
ActionButton9.Visible = False
|
||||||
|
Me.TXT_PERSONAL_RULE.Buttons.Add(ActionButton9)
|
||||||
|
Me.TXT_PERSONAL_RULE.CaptionMode = PersonalUtilities.Forms.Controls.Base.ICaptionControl.Modes.RadioButton
|
||||||
|
Me.TXT_PERSONAL_RULE.CaptionText = "Dynamic rules URL"
|
||||||
|
Me.TXT_PERSONAL_RULE.CaptionToolTipEnabled = True
|
||||||
|
Me.TXT_PERSONAL_RULE.CaptionToolTipText = "Overwrite 'Dynamic rules' with this URL." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Change this value only if you know what" &
|
||||||
|
" you are doing."
|
||||||
|
Me.TXT_PERSONAL_RULE.CaptionWidth = 120.0R
|
||||||
|
Me.TXT_PERSONAL_RULE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.TXT_PERSONAL_RULE.LeaveDefaultButtons = True
|
||||||
|
Me.TXT_PERSONAL_RULE.Location = New System.Drawing.Point(4, 163)
|
||||||
|
Me.TXT_PERSONAL_RULE.Name = "TXT_PERSONAL_RULE"
|
||||||
|
Me.TXT_PERSONAL_RULE.Size = New System.Drawing.Size(456, 22)
|
||||||
|
Me.TXT_PERSONAL_RULE.TabIndex = 6
|
||||||
|
'
|
||||||
|
'TP_RULES_LIST
|
||||||
|
'
|
||||||
|
TP_RULES_LIST.ColumnCount = 2
|
||||||
|
TP_RULES_LIST.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 120.0!))
|
||||||
|
TP_RULES_LIST.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_RULES_LIST.Controls.Add(Me.CONTAINER_LIST, 1, 0)
|
||||||
|
TP_RULES_LIST.Controls.Add(TP_RULES_LIST_LEFT, 0, 0)
|
||||||
|
TP_RULES_LIST.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_RULES_LIST.Location = New System.Drawing.Point(4, 192)
|
||||||
|
TP_RULES_LIST.Name = "TP_RULES_LIST"
|
||||||
|
TP_RULES_LIST.RowCount = 1
|
||||||
|
TP_RULES_LIST.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_RULES_LIST.Size = New System.Drawing.Size(456, 145)
|
||||||
|
TP_RULES_LIST.TabIndex = 7
|
||||||
|
'
|
||||||
|
'CONTAINER_LIST
|
||||||
|
'
|
||||||
|
Me.CONTAINER_LIST.BottomToolStripPanelVisible = False
|
||||||
|
'
|
||||||
|
'CONTAINER_LIST.ContentPanel
|
||||||
|
'
|
||||||
|
Me.CONTAINER_LIST.ContentPanel.Controls.Add(Me.LIST_RULES)
|
||||||
|
Me.CONTAINER_LIST.ContentPanel.Size = New System.Drawing.Size(330, 114)
|
||||||
|
Me.CONTAINER_LIST.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CONTAINER_LIST.LeftToolStripPanelVisible = False
|
||||||
|
Me.CONTAINER_LIST.Location = New System.Drawing.Point(123, 3)
|
||||||
|
Me.CONTAINER_LIST.Name = "CONTAINER_LIST"
|
||||||
|
Me.CONTAINER_LIST.RightToolStripPanelVisible = False
|
||||||
|
Me.CONTAINER_LIST.Size = New System.Drawing.Size(330, 139)
|
||||||
|
Me.CONTAINER_LIST.TabIndex = 1
|
||||||
|
'
|
||||||
|
'LIST_RULES
|
||||||
|
'
|
||||||
|
Me.LIST_RULES.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.LIST_RULES.FormattingEnabled = True
|
||||||
|
Me.LIST_RULES.Location = New System.Drawing.Point(0, 0)
|
||||||
|
Me.LIST_RULES.Name = "LIST_RULES"
|
||||||
|
Me.LIST_RULES.Size = New System.Drawing.Size(330, 114)
|
||||||
|
Me.LIST_RULES.TabIndex = 0
|
||||||
|
'
|
||||||
|
'TP_RULES_LIST_LEFT
|
||||||
|
'
|
||||||
|
TP_RULES_LIST_LEFT.ColumnCount = 1
|
||||||
|
TP_RULES_LIST_LEFT.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_RULES_LIST_LEFT.Controls.Add(Me.OPT_RULES_LIST, 0, 0)
|
||||||
|
TP_RULES_LIST_LEFT.Controls.Add(Me.CH_PROTECTED, 0, 1)
|
||||||
|
TP_RULES_LIST_LEFT.Controls.Add(Me.CH_FORCE_UPDATE, 0, 2)
|
||||||
|
TP_RULES_LIST_LEFT.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
TP_RULES_LIST_LEFT.Location = New System.Drawing.Point(0, 0)
|
||||||
|
TP_RULES_LIST_LEFT.Margin = New System.Windows.Forms.Padding(0)
|
||||||
|
TP_RULES_LIST_LEFT.Name = "TP_RULES_LIST_LEFT"
|
||||||
|
TP_RULES_LIST_LEFT.RowCount = 4
|
||||||
|
TP_RULES_LIST_LEFT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_RULES_LIST_LEFT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_RULES_LIST_LEFT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25.0!))
|
||||||
|
TP_RULES_LIST_LEFT.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
|
||||||
|
TP_RULES_LIST_LEFT.Size = New System.Drawing.Size(120, 145)
|
||||||
|
TP_RULES_LIST_LEFT.TabIndex = 0
|
||||||
|
'
|
||||||
|
'OPT_RULES_LIST
|
||||||
|
'
|
||||||
|
Me.OPT_RULES_LIST.AutoSize = True
|
||||||
|
Me.OPT_RULES_LIST.CheckAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
Me.OPT_RULES_LIST.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.OPT_RULES_LIST.Location = New System.Drawing.Point(3, 3)
|
||||||
|
Me.OPT_RULES_LIST.Margin = New System.Windows.Forms.Padding(3, 3, 0, 3)
|
||||||
|
Me.OPT_RULES_LIST.Name = "OPT_RULES_LIST"
|
||||||
|
Me.OPT_RULES_LIST.Size = New System.Drawing.Size(117, 19)
|
||||||
|
Me.OPT_RULES_LIST.TabIndex = 0
|
||||||
|
Me.OPT_RULES_LIST.TabStop = True
|
||||||
|
Me.OPT_RULES_LIST.Text = "Dynamic rules list"
|
||||||
|
Me.OPT_RULES_LIST.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
TT_MAIN.SetToolTip(Me.OPT_RULES_LIST, "List of dynamic rules sources." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "If selected, the most recently updated source wil" &
|
||||||
|
"l be selected.")
|
||||||
|
Me.OPT_RULES_LIST.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_PROTECTED
|
||||||
|
'
|
||||||
|
Me.CH_PROTECTED.AutoSize = True
|
||||||
|
Me.CH_PROTECTED.CheckAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
Me.CH_PROTECTED.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_PROTECTED.Location = New System.Drawing.Point(3, 28)
|
||||||
|
Me.CH_PROTECTED.Margin = New System.Windows.Forms.Padding(3, 3, 0, 3)
|
||||||
|
Me.CH_PROTECTED.Name = "CH_PROTECTED"
|
||||||
|
Me.CH_PROTECTED.Size = New System.Drawing.Size(117, 19)
|
||||||
|
Me.CH_PROTECTED.TabIndex = 1
|
||||||
|
Me.CH_PROTECTED.Text = "Protected list"
|
||||||
|
Me.CH_PROTECTED.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_PROTECTED, "If checked, the new source will be added, but the rules list will not be overwrit" &
|
||||||
|
"ten by the updated one.")
|
||||||
|
Me.CH_PROTECTED.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_FORCE_UPDATE
|
||||||
|
'
|
||||||
|
Me.CH_FORCE_UPDATE.AutoSize = True
|
||||||
|
Me.CH_FORCE_UPDATE.CheckAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
Me.CH_FORCE_UPDATE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_FORCE_UPDATE.Location = New System.Drawing.Point(3, 53)
|
||||||
|
Me.CH_FORCE_UPDATE.Margin = New System.Windows.Forms.Padding(3, 3, 0, 3)
|
||||||
|
Me.CH_FORCE_UPDATE.Name = "CH_FORCE_UPDATE"
|
||||||
|
Me.CH_FORCE_UPDATE.Size = New System.Drawing.Size(117, 19)
|
||||||
|
Me.CH_FORCE_UPDATE.TabIndex = 2
|
||||||
|
Me.CH_FORCE_UPDATE.Text = "Force update"
|
||||||
|
Me.CH_FORCE_UPDATE.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_FORCE_UPDATE, "Check this if you want to force the rules to update.")
|
||||||
|
Me.CH_FORCE_UPDATE.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_LOG_ERR
|
||||||
|
'
|
||||||
|
Me.CH_LOG_ERR.AutoSize = True
|
||||||
|
Me.CH_LOG_ERR.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_LOG_ERR.Location = New System.Drawing.Point(4, 4)
|
||||||
|
Me.CH_LOG_ERR.Name = "CH_LOG_ERR"
|
||||||
|
Me.CH_LOG_ERR.Size = New System.Drawing.Size(456, 19)
|
||||||
|
Me.CH_LOG_ERR.TabIndex = 0
|
||||||
|
Me.CH_LOG_ERR.Text = "Add dynamic rules errors to the log"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_LOG_ERR, "OnlyFans errors will be added to a separate log." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "A checked checkbox means that e" &
|
||||||
|
"rror notification will be added to the main log.")
|
||||||
|
Me.CH_LOG_ERR.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_RULES_REPLACE_CONFIG
|
||||||
|
'
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.AutoSize = True
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.Location = New System.Drawing.Point(4, 30)
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.Name = "CH_RULES_REPLACE_CONFIG"
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.Size = New System.Drawing.Size(456, 19)
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.TabIndex = 1
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.Text = "Replace rules in OF-Scraper configuration file"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_RULES_REPLACE_CONFIG, "If checked, the dynamic rules (in the config) will be replaced with actual values" &
|
||||||
|
".")
|
||||||
|
Me.CH_RULES_REPLACE_CONFIG.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_UPDATE_CONF
|
||||||
|
'
|
||||||
|
Me.CH_UPDATE_CONF.AutoSize = True
|
||||||
|
Me.CH_UPDATE_CONF.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_UPDATE_CONF.Location = New System.Drawing.Point(4, 108)
|
||||||
|
Me.CH_UPDATE_CONF.Name = "CH_UPDATE_CONF"
|
||||||
|
Me.CH_UPDATE_CONF.Size = New System.Drawing.Size(456, 19)
|
||||||
|
Me.CH_UPDATE_CONF.TabIndex = 4
|
||||||
|
Me.CH_UPDATE_CONF.Text = "Update configuration file during update"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_UPDATE_CONF, "Update the configuration pattern from the site during update.")
|
||||||
|
Me.CH_UPDATE_CONF.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_UPDATE_RULES_CONST
|
||||||
|
'
|
||||||
|
Me.CH_UPDATE_RULES_CONST.AutoSize = True
|
||||||
|
Me.CH_UPDATE_RULES_CONST.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_UPDATE_RULES_CONST.Location = New System.Drawing.Point(4, 56)
|
||||||
|
Me.CH_UPDATE_RULES_CONST.Name = "CH_UPDATE_RULES_CONST"
|
||||||
|
Me.CH_UPDATE_RULES_CONST.Size = New System.Drawing.Size(456, 19)
|
||||||
|
Me.CH_UPDATE_RULES_CONST.TabIndex = 2
|
||||||
|
Me.CH_UPDATE_RULES_CONST.Text = "Update rules constants file during update"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_UPDATE_RULES_CONST, "Update rules constants from the site during update")
|
||||||
|
Me.CH_UPDATE_RULES_CONST.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'CH_CONFIG_MANUAL_MODE
|
||||||
|
'
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.AutoSize = True
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.Dock = System.Windows.Forms.DockStyle.Fill
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.Location = New System.Drawing.Point(4, 82)
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.Name = "CH_CONFIG_MANUAL_MODE"
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.Size = New System.Drawing.Size(456, 19)
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.TabIndex = 3
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.Text = "Dynamic rules 'Manual' mode"
|
||||||
|
TT_MAIN.SetToolTip(Me.CH_CONFIG_MANUAL_MODE, "The rules will be added to the config as is, without using a link.")
|
||||||
|
Me.CH_CONFIG_MANUAL_MODE.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
|
'OnlyFansAdvancedSettingsForm
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.ClientSize = New System.Drawing.Size(464, 341)
|
||||||
|
Me.Controls.Add(CONTAINER_MAIN)
|
||||||
|
Me.Icon = Global.SCrawler.My.Resources.SiteResources.OnlyFansIcon_32
|
||||||
|
Me.KeyPreview = True
|
||||||
|
Me.MinimizeBox = False
|
||||||
|
Me.MinimumSize = New System.Drawing.Size(480, 380)
|
||||||
|
Me.Name = "OnlyFansAdvancedSettingsForm"
|
||||||
|
Me.ShowInTaskbar = False
|
||||||
|
Me.Text = "Settings"
|
||||||
|
CONTAINER_MAIN.ContentPanel.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.ResumeLayout(False)
|
||||||
|
CONTAINER_MAIN.PerformLayout()
|
||||||
|
TP_MAIN.ResumeLayout(False)
|
||||||
|
TP_MAIN.PerformLayout()
|
||||||
|
CType(Me.TXT_UP_INTERVAL, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
CType(Me.TXT_PERSONAL_RULE, System.ComponentModel.ISupportInitialize).EndInit()
|
||||||
|
TP_RULES_LIST.ResumeLayout(False)
|
||||||
|
Me.CONTAINER_LIST.ContentPanel.ResumeLayout(False)
|
||||||
|
Me.CONTAINER_LIST.ResumeLayout(False)
|
||||||
|
Me.CONTAINER_LIST.PerformLayout()
|
||||||
|
TP_RULES_LIST_LEFT.ResumeLayout(False)
|
||||||
|
TP_RULES_LIST_LEFT.PerformLayout()
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private WithEvents TXT_UP_INTERVAL As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents TXT_PERSONAL_RULE As PersonalUtilities.Forms.Controls.TextBoxExtended
|
||||||
|
Private WithEvents CONTAINER_LIST As ToolStripContainer
|
||||||
|
Private WithEvents LIST_RULES As ListBox
|
||||||
|
Private WithEvents OPT_RULES_LIST As RadioButton
|
||||||
|
Private WithEvents CH_PROTECTED As CheckBox
|
||||||
|
Private WithEvents CH_FORCE_UPDATE As CheckBox
|
||||||
|
Private WithEvents CH_LOG_ERR As CheckBox
|
||||||
|
Private WithEvents CH_RULES_REPLACE_CONFIG As CheckBox
|
||||||
|
Private WithEvents CH_UPDATE_CONF As CheckBox
|
||||||
|
Private WithEvents CH_UPDATE_RULES_CONST As CheckBox
|
||||||
|
Private WithEvents CH_CONFIG_MANUAL_MODE As CheckBox
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
186
SCrawler/API/OnlyFans/OnlyFansAdvancedSettingsForm.resx
Normal file
186
SCrawler/API/OnlyFans/OnlyFansAdvancedSettingsForm.resx
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TP_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="ActionButton7.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
|
||||||
|
JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACOElE
|
||||||
|
QVQ4T2P4//8/QczOJyyqHpzfiE0OQwAZC8iqszAzs7CJ69o4BR768V/W2jcGXQ0KB4aFNS3dDQtnrbCb
|
||||||
|
ePCK48wTN1wXXXzge/jXf/clV55zC4hIIatF0cjIyMikElzc57z0wX+XHd/+2+//99/ywP//xlu//tdb
|
||||||
|
+eK/4Zp3/1WTOhYzARViNUAluKjTdf37/0ZTTn9TbdhwXblhwwW1/qOP1Ja9+K8w+95/6cm3/6v2Xvkv
|
||||||
|
qKjniGGAoIqRpW3/4e8S9uGdzFz82gwMDFxAzCxm4ZegtuLDf+VJ1/8rZM25IqLvnM/CximCYYCic1QN
|
||||||
|
v7x2JIwPwyrJ3XNUylddE9G2TWNmZOBDl4czmJiZMSRBmFdSyYyJgUEQmxwIYxWEYXZBCUls4sgYq6CA
|
||||||
|
prWNbtG8nXKeaVPR5XiVjSxEzf0yYXy4BBMLO6eQjoOXZvrkbbazrv53Xf/2v4CSbjBMXkhBl1/CMyNZ
|
||||||
|
qWnvGy5pNQ+YONwAfjXzAOupl/47LLr333L50/96q9/8l23YdES6cO5KuYqVW+R7Tj6SnfP0v4hryjyY
|
||||||
|
HhQDmFjYeHVKFp7WX/Xuv9Kq9/+Vd/z7r7rv/3+l7f//y676DEwDN/9L+BVvYkKLCTgDhNkkVUyVlr74
|
||||||
|
qbbz73/VOTc/qsy89kWx+9h7qbQpJwS1bbOAscGGrB6EUTggLOqf16C55ft/HlnNAFZOXgVWdi4FRgYG
|
||||||
|
VnR1MIwhwMTCyqEQ37qEmZVDFF0OE/9nAACtFF4Ey6OP+wAAAABJRU5ErkJggg==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton8.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
|
tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX
|
||||||
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<data name="ActionButton9.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||||
|
xAAADsQBlSsOGwAAAIZJREFUOE+1j10KwCAMgz2b755xl/IsvnaL2K20UfbDAmEako+ZROSTafjE12Go
|
||||||
|
tbbB43rK5xSAQq1VYFtmeQBoqZTSreVZvgTknM8yyyjA/qodsDF9gspD2Bj6B+DH+NqzhQQAG+POMnSX
|
||||||
|
AFuc5QFgn6ClHh5iOQVAKNixyucB8NY0vG9JOzzyhrdq5IRgAAAAAElFTkSuQmCC
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
<metadata name="TP_RULES_LIST.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TP_RULES_LIST_LEFT.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TP_RULES_LIST_LEFT.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>False</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="TT_MAIN.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
||||||
165
SCrawler/API/OnlyFans/OnlyFansAdvancedSettingsForm.vb
Normal file
165
SCrawler/API/OnlyFans/OnlyFansAdvancedSettingsForm.vb
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
' 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
|
||||||
|
Imports PersonalUtilities.Forms
|
||||||
|
Imports PersonalUtilities.Forms.Controls.Base
|
||||||
|
Imports PersonalUtilities.Forms.Toolbars
|
||||||
|
Namespace API.OnlyFans
|
||||||
|
Friend Class OnlyFansAdvancedSettingsForm
|
||||||
|
#Region "Declarations"
|
||||||
|
Private WithEvents MyDefs As DefaultFormOptions
|
||||||
|
Friend Property CurrentRulesEnv As DynamicRulesEnv
|
||||||
|
Private ReadOnly Property CurrentRulesEnv_LIST As DynamicRulesEnv
|
||||||
|
#End Region
|
||||||
|
#Region "Initializer"
|
||||||
|
Friend Sub New(ByVal rules As DynamicRulesEnv)
|
||||||
|
InitializeComponent()
|
||||||
|
MyDefs = New DefaultFormOptions(Me, Settings.Design)
|
||||||
|
CurrentRulesEnv = rules
|
||||||
|
CurrentRulesEnv_LIST = New DynamicRulesEnv
|
||||||
|
CurrentRulesEnv_LIST.Copy(rules, False)
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Form handlers"
|
||||||
|
Private Sub OnlyFansAdvancedSettingsForm_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
|
With MyDefs
|
||||||
|
.MyViewInitialize()
|
||||||
|
.AddOkCancelToolbar()
|
||||||
|
|
||||||
|
.MyEditToolbar = New EditToolbar(Me,, CONTAINER_LIST.TopToolStripPanel) With {.Buttons = Nothing}
|
||||||
|
.MyEditToolbar.AddThisToolbar()
|
||||||
|
|
||||||
|
With CurrentRulesEnv
|
||||||
|
Select Case .Mode
|
||||||
|
Case DynamicRulesEnv.Modes.List : OPT_RULES_LIST.Checked = True
|
||||||
|
Case DynamicRulesEnv.Modes.Personal : TXT_PERSONAL_RULE.Checked = True
|
||||||
|
End Select
|
||||||
|
CH_LOG_ERR.Checked = .AddErrorsToLog
|
||||||
|
CH_RULES_REPLACE_CONFIG.Checked = .RulesReplaceConfig
|
||||||
|
CH_UPDATE_RULES_CONST.Checked = .RulesUpdateConst
|
||||||
|
CH_CONFIG_MANUAL_MODE.Checked = .RulesConfigManualMode
|
||||||
|
CH_UPDATE_CONF.Checked = .ConfigAutoUpdate
|
||||||
|
TXT_UP_INTERVAL.Text = .UpdateInterval
|
||||||
|
If Not .PersonalRule.IsEmptyString Then TXT_PERSONAL_RULE.Text = .PersonalRule
|
||||||
|
Refill()
|
||||||
|
CH_PROTECTED.Checked = .ProtectFile
|
||||||
|
CH_FORCE_UPDATE.Checked = .RulesForceUpdateRequired
|
||||||
|
End With
|
||||||
|
|
||||||
|
.MyFieldsCheckerE = New FieldsChecker
|
||||||
|
.MyFieldsCheckerE.AddControl(Of Integer)(TXT_UP_INTERVAL, TXT_UP_INTERVAL.CaptionText,,
|
||||||
|
New FieldsCheckerProviderSimple(Function(v) IIf(AConvert(Of Integer)(v, 0, EDP.ReturnValue) > 0, v, Nothing),
|
||||||
|
"The value of [{0}] field must be greater than 0"))
|
||||||
|
.MyFieldsCheckerE.EndLoaderOperations()
|
||||||
|
|
||||||
|
.EndLoaderOperations()
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
Private Sub OnlyFansAdvancedSettingsForm_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
|
||||||
|
CurrentRulesEnv_LIST.Dispose()
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Refill"
|
||||||
|
Private Sub Refill()
|
||||||
|
With CurrentRulesEnv_LIST
|
||||||
|
Dim ls% = _LatestSelected
|
||||||
|
LIST_RULES.Items.Clear()
|
||||||
|
If .Count > 0 Then LIST_RULES.Items.AddRange(.Select(Function(r) r.UrlRepo).Cast(Of Object).ToArray)
|
||||||
|
Dim lim% = LIST_RULES.Items.Count - 1
|
||||||
|
If (ls - 1).ValueBetween(0, lim) Then
|
||||||
|
ls -= 1
|
||||||
|
ElseIf (ls + 1).ValueBetween(0, lim) Then
|
||||||
|
ls += 1
|
||||||
|
End If
|
||||||
|
If ls.ValueBetween(0, lim) Then LIST_RULES.SelectedIndex = ls Else ls = -1
|
||||||
|
_LatestSelected = ls
|
||||||
|
End With
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "OK, Cancel"
|
||||||
|
Private Sub MyDefs_ButtonOkClick(ByVal Sender As Object, ByVal e As KeyHandleEventArgs) Handles MyDefs.ButtonOkClick
|
||||||
|
If MyDefs.MyFieldsChecker.AllParamsOK Then
|
||||||
|
With CurrentRulesEnv
|
||||||
|
.Copy(CurrentRulesEnv_LIST, True)
|
||||||
|
.ProtectFile = CH_PROTECTED.Checked
|
||||||
|
.UpdateInterval = AConvert(Of Integer)(TXT_UP_INTERVAL.Text, DynamicRulesEnv.UpdateIntervalDefault)
|
||||||
|
.Mode = If(TXT_PERSONAL_RULE.Checked, DynamicRulesEnv.Modes.Personal, DynamicRulesEnv.Modes.List)
|
||||||
|
.PersonalRule = TXT_PERSONAL_RULE.Text
|
||||||
|
.RulesReplaceConfig = CH_RULES_REPLACE_CONFIG.Checked
|
||||||
|
.RulesUpdateConst = CH_UPDATE_RULES_CONST.Checked
|
||||||
|
.RulesConfigManualMode = CH_CONFIG_MANUAL_MODE.Checked
|
||||||
|
.ConfigAutoUpdate = CH_UPDATE_CONF.Checked
|
||||||
|
.AddErrorsToLog = CH_LOG_ERR.Checked
|
||||||
|
If CH_FORCE_UPDATE.Checked Then .RulesForceUpdateRequired = True
|
||||||
|
.NeedToSave = True
|
||||||
|
End With
|
||||||
|
MyDefs.CloseForm()
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Add, Delete"
|
||||||
|
Private Sub MyDefs_ButtonAddClick(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonAddClick
|
||||||
|
Const msgTitle$ = "Add a rule"
|
||||||
|
Dim i%
|
||||||
|
Dim rule As DynamicRulesValue
|
||||||
|
Dim r$ = InputBoxE("Enter a valid rules URL:", msgTitle)
|
||||||
|
If Not r.IsEmptyString Then
|
||||||
|
rule = Rules.ParseURL(r)
|
||||||
|
If rule.Valid Then
|
||||||
|
i = CurrentRulesEnv_LIST.IndexOf(r)
|
||||||
|
If i >= 0 Then
|
||||||
|
MsgBoxE({$"The rule you entered already exists:{vbCr}{rule.UrlRepo}", msgTitle}, vbCritical)
|
||||||
|
Else
|
||||||
|
CurrentRulesEnv_LIST.Add(rule, False, False)
|
||||||
|
Refill()
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
MsgBoxE({$"The rule you entered has an incompatible format:{vbCr}{r}", msgTitle}, vbCritical)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
Private Sub MyDefs_ButtonDeleteClickE(ByVal Sender As Object, ByVal e As EditToolbarEventArgs) Handles MyDefs.ButtonDeleteClickE
|
||||||
|
If _LatestSelected.ValueBetween(0, LIST_RULES.Items.Count - 1) Then
|
||||||
|
Dim r$ = LIST_RULES.Items(_LatestSelected)
|
||||||
|
If MsgBoxE({$"Are you sure you want to delete the following rule?{vbCr}{r}", "Delete a rule"}, vbExclamation,,, {"Process", "Cancel"}) = 0 Then
|
||||||
|
If CurrentRulesEnv_LIST.RemoveAt(_LatestSelected) Then
|
||||||
|
LIST_RULES.Items.RemoveAt(_LatestSelected)
|
||||||
|
Refill()
|
||||||
|
Else
|
||||||
|
MsgBoxE({$"The following rule cannot be deleted:{vbCr}{r}", "Delete a rule"}, vbCritical)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "Options"
|
||||||
|
Private Sub TXT_UP_INTERVAL_ActionOnButtonClick(ByVal Sender As Object, ByVal e As ActionButtonEventArgs) Handles TXT_UP_INTERVAL.ActionOnButtonClick
|
||||||
|
If e.DefaultButton = ActionButton.DefaultButtons.Refresh Then TXT_UP_INTERVAL.Text = DynamicRulesEnv.UpdateIntervalDefault
|
||||||
|
End Sub
|
||||||
|
Private Sub TXT_PERSONAL_RULE_ActionOnCheckedChange(ByVal Sender As Object, ByVal e As EventArgs, ByVal Checked As Boolean) Handles TXT_PERSONAL_RULE.ActionOnCheckedChange
|
||||||
|
Mode_CheckedChanged()
|
||||||
|
End Sub
|
||||||
|
Private Sub OPT_RULES_LIST_CheckedChanged(sender As Object, e As EventArgs)
|
||||||
|
Mode_CheckedChanged()
|
||||||
|
End Sub
|
||||||
|
Private Sub Mode_CheckedChanged()
|
||||||
|
Dim e As Boolean = TXT_PERSONAL_RULE.Checked
|
||||||
|
TXT_PERSONAL_RULE.Enabled(False) = e
|
||||||
|
CONTAINER_LIST.Enabled = Not e
|
||||||
|
CH_PROTECTED.Enabled = Not e
|
||||||
|
CH_FORCE_UPDATE.Enabled = Not e
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
#Region "List handlers"
|
||||||
|
Private _LatestSelected As Integer = -1
|
||||||
|
Private Sub LIST_RULES_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LIST_RULES.SelectedIndexChanged
|
||||||
|
_LatestSelected = LIST_RULES.SelectedIndex
|
||||||
|
End Sub
|
||||||
|
#End Region
|
||||||
|
End Class
|
||||||
|
End Namespace
|
||||||
@@ -9,13 +9,12 @@
|
|||||||
Imports SCrawler.API.Base
|
Imports SCrawler.API.Base
|
||||||
Imports SCrawler.Plugin
|
Imports SCrawler.Plugin
|
||||||
Imports SCrawler.Plugin.Attributes
|
Imports SCrawler.Plugin.Attributes
|
||||||
Imports PersonalUtilities.Forms
|
|
||||||
Imports PersonalUtilities.Tools.Web.Clients
|
Imports PersonalUtilities.Tools.Web.Clients
|
||||||
Imports PersonalUtilities.Tools.Web.Cookies
|
Imports PersonalUtilities.Tools.Web.Cookies
|
||||||
Imports PersonalUtilities.Functions.RegularExpressions
|
Imports PersonalUtilities.Functions.RegularExpressions
|
||||||
Imports DN = SCrawler.API.Base.DeclaredNames
|
Imports DN = SCrawler.API.Base.DeclaredNames
|
||||||
Namespace API.OnlyFans
|
Namespace API.OnlyFans
|
||||||
<Manifest("AndyProgram_OnlyFans"), SavedPosts, SpecialForm(False), SeparatedTasks(1)>
|
<Manifest("AndyProgram_OnlyFans"), SavedPosts, SpecialForm(False), SpecialForm(True), SeparatedTasks(1)>
|
||||||
Friend Class SiteSettings : Inherits SiteSettingsBase
|
Friend Class SiteSettings : Inherits SiteSettingsBase
|
||||||
#Region "Declarations"
|
#Region "Declarations"
|
||||||
#Region "Categories"
|
#Region "Categories"
|
||||||
@@ -74,30 +73,6 @@ Namespace API.OnlyFans
|
|||||||
Return String.Empty
|
Return String.Empty
|
||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Rules"
|
|
||||||
<PXML("LastDateUpdated")> Private ReadOnly Property LastDateUpdated_XML As PropertyValue
|
|
||||||
Friend Property LastDateUpdated As Date
|
|
||||||
Get
|
|
||||||
Return LastDateUpdated_XML.Value
|
|
||||||
End Get
|
|
||||||
Set(ByVal d As Date)
|
|
||||||
LastDateUpdated_XML.Value = d
|
|
||||||
End Set
|
|
||||||
End Property
|
|
||||||
<PropertyOption(ControlText:="Use old authorization rules",
|
|
||||||
ControlToolTip:="Use old dynamic rules (from 'DATAHOARDERS') or new ones (from 'DIGITALCRIMINALS')." & vbCr &
|
|
||||||
"Change this value only if you know what you are doing.", IsAuth:=True), PXML, PClonable>
|
|
||||||
Friend ReadOnly Property UseOldAuthRules As PropertyValue
|
|
||||||
<PropertyOption(ControlText:="Dynamic rules update", ControlToolTip:="'Dynamic rules' update interval (minutes). Default: 1440",
|
|
||||||
LeftOffset:=110, IsAuth:=True), PXML, PClonable>
|
|
||||||
Friend ReadOnly Property DynamicRulesUpdateInterval As PropertyValue
|
|
||||||
<Provider(NameOf(DynamicRulesUpdateInterval), FieldsChecker:=True)>
|
|
||||||
Private ReadOnly Property DynamicRulesUpdateIntervalProvider As IFormatProvider
|
|
||||||
<PropertyOption(ControlText:="Dynamic rules",
|
|
||||||
ControlToolTip:="Overwrite 'Dynamic rules' with this URL" & vbCr &
|
|
||||||
"Change this value only if you know what you are doing.", IsAuth:=True), PXML, PClonable>
|
|
||||||
Friend ReadOnly Property DynamicRules As PropertyValue
|
|
||||||
#End Region
|
|
||||||
#Region "OFScraper"
|
#Region "OFScraper"
|
||||||
<PClonable, PXML("OFScraperPath")> Private ReadOnly Property OFScraperPath_XML As PropertyValue
|
<PClonable, PXML("OFScraperPath")> Private ReadOnly Property OFScraperPath_XML As PropertyValue
|
||||||
<PropertyOption(ControlText:="OF-Scraper path", ControlToolTip:="The path to the 'ofscraper.exe'", Category:=CAT_OFS)>
|
<PropertyOption(ControlText:="OF-Scraper path", ControlToolTip:="The path to the 'ofscraper.exe'", Category:=CAT_OFS)>
|
||||||
@@ -150,7 +125,10 @@ Namespace API.OnlyFans
|
|||||||
Friend Sub New(ByVal AccName As String, ByVal Temp As Boolean)
|
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)
|
MyBase.New("OnlyFans", ".onlyfans.com", AccName, Temp, My.Resources.SiteResources.OnlyFansIcon_32, My.Resources.SiteResources.OnlyFansPic_32)
|
||||||
|
|
||||||
CheckOFSConfig()
|
If Rules Is Nothing Then
|
||||||
|
Rules = New DynamicRulesEnv
|
||||||
|
Rules.Update(False, True)
|
||||||
|
End If
|
||||||
|
|
||||||
_AllowUserAgentUpdate = False
|
_AllowUserAgentUpdate = False
|
||||||
|
|
||||||
@@ -184,13 +162,6 @@ Namespace API.OnlyFans
|
|||||||
DownloadHighlights = New PropertyValue(True)
|
DownloadHighlights = New PropertyValue(True)
|
||||||
DownloadChatMedia = New PropertyValue(True)
|
DownloadChatMedia = New PropertyValue(True)
|
||||||
|
|
||||||
LastDateUpdated_XML = New PropertyValue(Now.AddYears(-1), GetType(Date))
|
|
||||||
'URGENT: OF [UseOldAuthRules = True]
|
|
||||||
UseOldAuthRules = New PropertyValue(True)
|
|
||||||
DynamicRulesUpdateInterval = New PropertyValue(60 * 24)
|
|
||||||
DynamicRulesUpdateIntervalProvider = New FieldsCheckerProviderSimple(Function(v) IIf(AConvert(Of Integer)(v, 0) > 0, v, Nothing),
|
|
||||||
"The value of [{0}] field must be greater than 0")
|
|
||||||
DynamicRules = New PropertyValue(String.Empty, GetType(String))
|
|
||||||
OFScraperPath_XML = New PropertyValue(String.Empty, GetType(String))
|
OFScraperPath_XML = New PropertyValue(String.Empty, GetType(String))
|
||||||
If ACheck(OFScraperPath_XML.Value) Then
|
If ACheck(OFScraperPath_XML.Value) Then
|
||||||
Dim f As SFile = OFScraperPath_XML.Value
|
Dim f As SFile = OFScraperPath_XML.Value
|
||||||
@@ -218,21 +189,28 @@ Namespace API.OnlyFans
|
|||||||
End Function
|
End Function
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Update"
|
#Region "Update"
|
||||||
Private __UseOldAuthRules As Boolean = True
|
|
||||||
Private __DynamicRules As String = String.Empty
|
|
||||||
Friend Overrides Sub BeginUpdate()
|
Friend Overrides Sub BeginUpdate()
|
||||||
__UseOldAuthRules = UseOldAuthRules.Value
|
_TempSettingsEnv.DisposeIfReady
|
||||||
__DynamicRules = AConvert(Of String)(DynamicRules.Value, String.Empty)
|
_TempSettingsEnv = Nothing
|
||||||
MyBase.BeginUpdate()
|
MyBase.BeginUpdate()
|
||||||
End Sub
|
End Sub
|
||||||
Friend Overrides Sub Update()
|
Friend Overrides Sub Update()
|
||||||
If _SiteEditorFormOpened Then
|
If _SiteEditorFormOpened Then
|
||||||
If Not __UseOldAuthRules = CBool(UseOldAuthRules.Value) Or Not AEquals(Of String)(__DynamicRules, DynamicRules.Value) Then _
|
|
||||||
LastDateUpdated = Now.AddYears(-1)
|
|
||||||
Responser.Cookies.Changed = False
|
Responser.Cookies.Changed = False
|
||||||
|
If If(_TempSettingsEnv?.NeedToSave, False) Then Rules.Copy(_TempSettingsEnv, True) : Rules.Save()
|
||||||
End If
|
End If
|
||||||
MyBase.Update()
|
MyBase.Update()
|
||||||
End Sub
|
End Sub
|
||||||
|
Friend Overrides Sub EndUpdate()
|
||||||
|
_TempSettingsEnv.DisposeIfReady
|
||||||
|
_TempSettingsEnv = Nothing
|
||||||
|
MyBase.EndUpdate()
|
||||||
|
End Sub
|
||||||
|
Private _TempSettingsEnv As DynamicRulesEnv = Nothing
|
||||||
|
Friend Overrides Sub OpenSettingsForm()
|
||||||
|
If _TempSettingsEnv Is Nothing Then _TempSettingsEnv = New DynamicRulesEnv : _TempSettingsEnv.Copy(Rules, False)
|
||||||
|
Using f As New OnlyFansAdvancedSettingsForm(_TempSettingsEnv) : f.ShowDialog() : End Using
|
||||||
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Download"
|
#Region "Download"
|
||||||
Friend Overrides Function BaseAuthExists() As Boolean
|
Friend Overrides Function BaseAuthExists() As Boolean
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ Namespace API.OnlyFans
|
|||||||
End Sub
|
End Sub
|
||||||
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
Protected Overrides Sub DownloadDataF(ByVal Token As CancellationToken)
|
||||||
Try
|
Try
|
||||||
|
_DownloadingException_AuthFileUpdate = False
|
||||||
If Not MySettings.SessionAborted Then
|
If Not MySettings.SessionAborted Then
|
||||||
ValidateOFScraper()
|
ValidateOFScraper()
|
||||||
_AbsMediaIndex = 0
|
_AbsMediaIndex = 0
|
||||||
@@ -537,45 +538,16 @@ Namespace API.OnlyFans
|
|||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Auth"
|
#Region "Auth"
|
||||||
Private ReadOnly Property AuthFile As SFile
|
Private Function UpdateSignature(ByVal Path As String) As Boolean
|
||||||
Get
|
|
||||||
Dim f As SFile = MySettings.Responser.File
|
|
||||||
f.Name &= "_Auth"
|
|
||||||
f.Extension = "json"
|
|
||||||
Return f
|
|
||||||
End Get
|
|
||||||
End Property
|
|
||||||
Private Function UpdateSignature(ByVal Path As String, Optional ByVal ForceUpdateAuth As Boolean = False,
|
|
||||||
Optional ByVal Round As Integer = 0) As Boolean
|
|
||||||
Try
|
Try
|
||||||
If UpdateAuthFile(ForceUpdateAuth) Then
|
If Not Rules.Update(False) Then Rules.Update(True)
|
||||||
|
If Rules.Exists Then
|
||||||
Const nullMsg$ = "The auth parameter(s) is null"
|
Const nullMsg$ = "The auth parameter(s) is null"
|
||||||
Const formatMidPart$ = ":{0}:{1:x}:"
|
Dim j As EContainer = Rules.CurrentContainer
|
||||||
Dim j As EContainer
|
|
||||||
Try
|
|
||||||
j = JsonDocument.Parse(AuthFile.GetText)
|
|
||||||
Catch jex As Exception
|
|
||||||
If Round = 0 Then
|
|
||||||
AuthFile.Delete()
|
|
||||||
UpdateAuthFile(True)
|
|
||||||
Return UpdateSignature(Path, ForceUpdateAuth, Round + 1)
|
|
||||||
Else
|
|
||||||
MySettings.SessionAborted = True
|
|
||||||
Return False
|
|
||||||
End If
|
|
||||||
End Try
|
|
||||||
If Not j Is Nothing Then
|
If Not j Is Nothing Then
|
||||||
Dim pattern$ = j.Value("format")
|
Dim pattern$ = DynamicRulesEnv.GetFormat(j)
|
||||||
|
|
||||||
If Not pattern.IsEmptyString Then
|
If pattern.IsEmptyString Then Throw New ArgumentNullException("format", nullMsg)
|
||||||
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
|
Dim li%() = j("checksum_indexes").Select(Function(e) CInt(e(0).Value)).ToArray
|
||||||
|
|
||||||
@@ -599,42 +571,16 @@ Namespace API.OnlyFans
|
|||||||
Responser.Headers.Add(HeaderSign, sign)
|
Responser.Headers.Add(HeaderSign, sign)
|
||||||
Responser.Headers.Add(HeaderTime, t)
|
Responser.Headers.Add(HeaderTime, t)
|
||||||
|
|
||||||
j.Dispose()
|
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
|
Else
|
||||||
|
MySettings.SessionAborted = True
|
||||||
End If
|
End If
|
||||||
Return False
|
Return False
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, $"{ToStringForLog()}: UpdateSignature", False)
|
Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, $"{ToStringForLog()}: UpdateSignature", False)
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
Private Function UpdateAuthFile(ByVal Force As Boolean) As Boolean
|
|
||||||
Const urlOld$ = "https://raw.githubusercontent.com/DATAHOARDERS/dynamic-rules/main/onlyfans.json"
|
|
||||||
Const urlNew$ = "https://raw.githubusercontent.com/DIGITALCRIMINALS/dynamic-rules/main/onlyfans.json"
|
|
||||||
Try
|
|
||||||
If MySettings.LastDateUpdated.AddMinutes(CInt(MySettings.DynamicRulesUpdateInterval.Value)) < Now Or Not AuthFile.Exists Or Force Then
|
|
||||||
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("end").IsEmptyString)
|
|
||||||
If Not r.IsEmptyString Then
|
|
||||||
Using j As EContainer = JsonDocument.Parse(r, EDP.ReturnValue)
|
|
||||||
If j.ListExists Then
|
|
||||||
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
|
|
||||||
End Using
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
Return AuthFile.Exists
|
|
||||||
Catch ex As Exception
|
|
||||||
Return ErrorsDescriber.Execute(EDP.SendToLog + EDP.ReturnValue, ex, $"{ToStringForLog()}: UpdateAuthFile", False)
|
|
||||||
End Try
|
|
||||||
End Function
|
|
||||||
Private Function GetHashSha1(ByVal Input As String) As String
|
Private Function GetHashSha1(ByVal Input As String) As String
|
||||||
Dim s As New Security.Cryptography.SHA1CryptoServiceProvider
|
Dim s As New Security.Cryptography.SHA1CryptoServiceProvider
|
||||||
Dim inputBytes() As Byte = System.Text.Encoding.UTF8.GetBytes(Input)
|
Dim inputBytes() As Byte = System.Text.Encoding.UTF8.GetBytes(Input)
|
||||||
@@ -666,35 +612,51 @@ Namespace API.OnlyFans
|
|||||||
Private Function OFS_CreateConfig() As SFile
|
Private Function OFS_CreateConfig() As SFile
|
||||||
Try
|
Try
|
||||||
Const confMainPattern$ = "{0}"": ""([^""]*)"""
|
Const confMainPattern$ = "{0}"": ""([^""]*)"""
|
||||||
|
Const confMainPatternRulesManual$ = "DYNAMIC_RULE"": (""[^""]*"")"
|
||||||
If OFSCache Is Nothing Then OFSCache = If(IsSingleObjectDownload, Settings.Cache.NewInstance, CreateCache())
|
If OFSCache Is Nothing Then OFSCache = If(IsSingleObjectDownload, Settings.Cache.NewInstance, CreateCache())
|
||||||
Dim currentCache As CacheKeeper = OFSCache.NewInstance
|
Dim currentCache As CacheKeeper = OFSCache.NewInstance
|
||||||
currentCache.Validate()
|
currentCache.Validate()
|
||||||
Dim cacheRoot As SFile = currentCache.NewPath
|
Dim cacheRoot As SFile = currentCache.NewPath
|
||||||
cacheRoot.Exists(SFO.Path, True, EDP.ThrowException)
|
cacheRoot.Exists(SFO.Path, True, EDP.ThrowException)
|
||||||
Dim f As SFile = OFScraperConfigPatternFile
|
Dim f As SFile = Rules.OFScraperConfigPatternFile
|
||||||
Dim configText$
|
Dim configText$
|
||||||
CheckOFSConfig()
|
|
||||||
If f.Exists Then
|
If f.Exists Then
|
||||||
Dim replaceValue$ = String.Empty
|
Dim replaceValue$ = String.Empty
|
||||||
Dim rp As RParams = RParams.DMS(String.Empty, 1, RegexReturn.Replace, RegexOptions.IgnoreCase,
|
Dim rp As RParams = RParams.DMS(String.Empty, 1, RegexReturn.Replace, RegexOptions.IgnoreCase,
|
||||||
CType(Function(input) replaceValue, Func(Of String, String)), String.Empty, EDP.ReturnValue)
|
CType(Function(input) replaceValue, Func(Of String, String)), String.Empty, EDP.ReturnValue)
|
||||||
Dim ff As SFile
|
Dim ff As SFile
|
||||||
configText = f.GetText
|
configText = f.GetText
|
||||||
Dim updateConf As Action(Of String, String) = Sub(ByVal patternValue As String, ByVal __replaceValue As String)
|
Dim updateConf As Action(Of String, String, Boolean) =
|
||||||
rp.Pattern = String.Format(confMainPattern, patternValue)
|
Sub(ByVal patternValue As String, ByVal __replaceValue As String, ByVal __isRules As Boolean)
|
||||||
rp.Nothing = configText
|
rp.Pattern = String.Format(IIf(__isRules, confMainPatternRulesManual, confMainPattern), patternValue)
|
||||||
replaceValue = __replaceValue
|
rp.Nothing = configText
|
||||||
configText = RegexReplace(configText, rp)
|
replaceValue = __replaceValue
|
||||||
End Sub
|
configText = RegexReplace(configText, rp)
|
||||||
|
End Sub
|
||||||
If Not configText.IsEmptyString Then
|
If Not configText.IsEmptyString Then
|
||||||
updateConf("save_location", cacheRoot.PathNoSeparator.Replace("\", "/"))
|
updateConf("save_location", cacheRoot.PathNoSeparator.Replace("\", "/"), False)
|
||||||
If ACheck(MySettings.OFScraperMP4decrypt.Value) Then
|
If ACheck(MySettings.OFScraperMP4decrypt.Value) Then
|
||||||
ff = CStr(MySettings.OFScraperMP4decrypt.Value)
|
ff = CStr(MySettings.OFScraperMP4decrypt.Value)
|
||||||
If ff.Exists Then updateConf("mp4decrypt", ff.ToString.Replace("\", "/"))
|
If ff.Exists Then updateConf("mp4decrypt", ff.ToString.Replace("\", "/"), False)
|
||||||
|
End If
|
||||||
|
If Settings.FfmpegFile.Exists Then updateConf("ffmpeg", Settings.FfmpegFile.File.ToString.Replace("\", "/"), False)
|
||||||
|
updateConf("key-mode-default", CStr(MySettings.KeyModeDefault.Value).IfNullOrEmpty(SiteSettings.KeyModeDefault_Default), False)
|
||||||
|
updateConf("keydb_api", CStr(MySettings.Keydb_Api.Value), False)
|
||||||
|
If Rules.RulesReplaceConfig Then
|
||||||
|
If Rules.RulesConfigManualMode Then
|
||||||
|
updateConf(DynamicRulesEnv.DynamicRulesConfig_Mode_NodeName, "manual", False)
|
||||||
|
configText = configText.Replace(DynamicRulesEnv.DynamicRulesConfigNodeName_URL, DynamicRulesEnv.DynamicRulesConfigNodeName_RULES)
|
||||||
|
updateConf(DynamicRulesEnv.DynamicRulesConfigNodeName_RULES, Rules.CurrentContainerRulesText, True)
|
||||||
|
Else
|
||||||
|
Dim confUrlNode$ = If(Rules.RulesConstants.ContainsKey(DynamicRulesEnv.DynamicRulesConfigNodeName_URL_CONST_NAME),
|
||||||
|
Rules.RulesConstants(DynamicRulesEnv.DynamicRulesConfigNodeName_URL_CONST_NAME),
|
||||||
|
DynamicRulesEnv.DynamicRulesConfigNodeName_URL)
|
||||||
|
updateConf(DynamicRulesEnv.DynamicRulesConfigNodeName_URL, Rules.CurrentRule.UrlRaw, False)
|
||||||
|
configText = configText.Replace(DynamicRulesEnv.DynamicRulesConfigNodeName_URL, confUrlNode)
|
||||||
|
If Rules.RulesConstants.ContainsKey(DynamicRulesEnv.DynamicRulesConfig_Mode_NodeName) Then _
|
||||||
|
updateConf(DynamicRulesEnv.DynamicRulesConfig_Mode_NodeName, Rules.RulesConstants(DynamicRulesEnv.DynamicRulesConfig_Mode_NodeName), False)
|
||||||
|
End If
|
||||||
End If
|
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 = currentCache
|
||||||
f.Name = "config"
|
f.Name = "config"
|
||||||
f.Extension = "json"
|
f.Extension = "json"
|
||||||
@@ -788,7 +750,7 @@ Namespace API.OnlyFans
|
|||||||
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False,
|
Protected Overrides Function DownloadingException(ByVal ex As Exception, ByVal Message As String, Optional ByVal FromPE As Boolean = False,
|
||||||
Optional ByVal EObj As Object = Nothing) As Integer
|
Optional ByVal EObj As Object = Nothing) As Integer
|
||||||
If Responser.StatusCode = Net.HttpStatusCode.BadRequest Then '400
|
If Responser.StatusCode = Net.HttpStatusCode.BadRequest Then '400
|
||||||
If Not _DownloadingException_AuthFileUpdate AndAlso UpdateAuthFile(True) Then
|
If Not _DownloadingException_AuthFileUpdate AndAlso Rules.Update(True) Then
|
||||||
_DownloadingException_AuthFileUpdate = True
|
_DownloadingException_AuthFileUpdate = True
|
||||||
Return 2
|
Return 2
|
||||||
Else
|
Else
|
||||||
|
|||||||
77
SCrawler/Download/Feed/DownloadFeedForm.Designer.vb
generated
77
SCrawler/Download/Feed/DownloadFeedForm.Designer.vb
generated
@@ -45,6 +45,8 @@ Namespace DownloadObjects
|
|||||||
Me.BTT_LOAD_SESSION_CHOOSE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_LOAD_SESSION_CHOOSE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_COPY_TO = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_COPY_TO = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_MOVE_TO = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_MOVE_TO = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_COPY_SPEC_TO = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_MOVE_SPEC_TO = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_LOAD_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_LOAD_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_LOAD_SPEC = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_LOAD_SPEC = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_FEED_ADD_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_FEED_ADD_FAV = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
@@ -61,6 +63,7 @@ Namespace DownloadObjects
|
|||||||
Me.BTT_CURR_SESSION_SET = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CURR_SESSION_SET = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_MERGE_SESSIONS = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_MERGE_SESSIONS = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CLEAR_DAILY = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CLEAR_DAILY = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
|
Me.BTT_RESET_DAILY = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_MERGE_FEEDS = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_MERGE_FEEDS = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CHECK_ALL = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CHECK_ALL = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_CHECK_NONE = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CHECK_NONE = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
@@ -72,9 +75,7 @@ Namespace DownloadObjects
|
|||||||
Me.BTT_DOWN_SELECTED = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_DOWN_SELECTED = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_REFRESH = New System.Windows.Forms.ToolStripButton()
|
Me.BTT_REFRESH = New System.Windows.Forms.ToolStripButton()
|
||||||
Me.TP_DATA = New System.Windows.Forms.TableLayoutPanel()
|
Me.TP_DATA = New System.Windows.Forms.TableLayoutPanel()
|
||||||
Me.BTT_COPY_SPEC_TO = New System.Windows.Forms.ToolStripMenuItem()
|
Me.BTT_CURR_SESSION_SET_LAST = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.BTT_MOVE_SPEC_TO = New System.Windows.Forms.ToolStripMenuItem()
|
|
||||||
Me.BTT_RESET_DAILY = New System.Windows.Forms.ToolStripMenuItem()
|
|
||||||
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
SEP_1 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
SEP_2 = New System.Windows.Forms.ToolStripSeparator()
|
||||||
MENU_VIEW = New System.Windows.Forms.ToolStripDropDownButton()
|
MENU_VIEW = New System.Windows.Forms.ToolStripDropDownButton()
|
||||||
@@ -168,6 +169,11 @@ Namespace DownloadObjects
|
|||||||
MENU_LOAD_SEP_8.Name = "MENU_LOAD_SEP_8"
|
MENU_LOAD_SEP_8.Name = "MENU_LOAD_SEP_8"
|
||||||
MENU_LOAD_SEP_8.Size = New System.Drawing.Size(349, 6)
|
MENU_LOAD_SEP_8.Size = New System.Drawing.Size(349, 6)
|
||||||
'
|
'
|
||||||
|
'MENU_LOAD_SEP_9
|
||||||
|
'
|
||||||
|
MENU_LOAD_SEP_9.Name = "MENU_LOAD_SEP_9"
|
||||||
|
MENU_LOAD_SEP_9.Size = New System.Drawing.Size(349, 6)
|
||||||
|
'
|
||||||
'ToolbarTOP
|
'ToolbarTOP
|
||||||
'
|
'
|
||||||
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
Me.ToolbarTOP.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
|
||||||
@@ -181,7 +187,7 @@ Namespace DownloadObjects
|
|||||||
'
|
'
|
||||||
Me.MENU_LOAD_SESSION.AutoToolTip = False
|
Me.MENU_LOAD_SESSION.AutoToolTip = False
|
||||||
Me.MENU_LOAD_SESSION.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
|
Me.MENU_LOAD_SESSION.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
|
||||||
Me.MENU_LOAD_SESSION.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_LOAD_SESSION_CURRENT, Me.BTT_LOAD_SESSION_LAST, Me.BTT_LOAD_SESSION_CHOOSE, MENU_LOAD_SEP_0, Me.BTT_COPY_TO, Me.BTT_MOVE_TO, MENU_LOAD_SEP_1, Me.BTT_COPY_SPEC_TO, Me.BTT_MOVE_SPEC_TO, MENU_LOAD_SEP_2, Me.BTT_LOAD_FAV, Me.BTT_LOAD_SPEC, MENU_LOAD_SEP_3, Me.BTT_FEED_ADD_FAV, Me.BTT_FEED_ADD_FAV_REMOVE, Me.BTT_FEED_REMOVE_FAV, MENU_LOAD_SEP_4, Me.BTT_FEED_ADD_SPEC, Me.BTT_FEED_ADD_SPEC_REMOVE, Me.BTT_FEED_REMOVE_SPEC, MENU_LOAD_SEP_5, Me.BTT_FEED_CLEAR_FAV, Me.BTT_FEED_CLEAR_SPEC, Me.BTT_FEED_DELETE_SPEC, Me.BTT_FEED_DELETE_DAILY_LIST, Me.BTT_FEED_DELETE_DAILY_DATE, MENU_LOAD_SEP_6, Me.BTT_CURR_SESSION_SET, Me.BTT_MERGE_SESSIONS, Me.BTT_CLEAR_DAILY, Me.BTT_RESET_DAILY, MENU_LOAD_SEP_7, Me.BTT_MERGE_FEEDS, MENU_LOAD_SEP_8, Me.BTT_CHECK_ALL, Me.BTT_CHECK_NONE, MENU_LOAD_SEP_9, Me.BTT_VIEW_SAVE, Me.BTT_VIEW_LOAD})
|
Me.MENU_LOAD_SESSION.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.BTT_LOAD_SESSION_CURRENT, Me.BTT_LOAD_SESSION_LAST, Me.BTT_LOAD_SESSION_CHOOSE, MENU_LOAD_SEP_0, Me.BTT_COPY_TO, Me.BTT_MOVE_TO, MENU_LOAD_SEP_1, Me.BTT_COPY_SPEC_TO, Me.BTT_MOVE_SPEC_TO, MENU_LOAD_SEP_2, Me.BTT_LOAD_FAV, Me.BTT_LOAD_SPEC, MENU_LOAD_SEP_3, Me.BTT_FEED_ADD_FAV, Me.BTT_FEED_ADD_FAV_REMOVE, Me.BTT_FEED_REMOVE_FAV, MENU_LOAD_SEP_4, Me.BTT_FEED_ADD_SPEC, Me.BTT_FEED_ADD_SPEC_REMOVE, Me.BTT_FEED_REMOVE_SPEC, MENU_LOAD_SEP_5, Me.BTT_FEED_CLEAR_FAV, Me.BTT_FEED_CLEAR_SPEC, Me.BTT_FEED_DELETE_SPEC, Me.BTT_FEED_DELETE_DAILY_LIST, Me.BTT_FEED_DELETE_DAILY_DATE, MENU_LOAD_SEP_6, Me.BTT_CURR_SESSION_SET, Me.BTT_CURR_SESSION_SET_LAST, Me.BTT_MERGE_SESSIONS, Me.BTT_CLEAR_DAILY, Me.BTT_RESET_DAILY, MENU_LOAD_SEP_7, Me.BTT_MERGE_FEEDS, MENU_LOAD_SEP_8, Me.BTT_CHECK_ALL, Me.BTT_CHECK_NONE, MENU_LOAD_SEP_9, Me.BTT_VIEW_SAVE, Me.BTT_VIEW_LOAD})
|
||||||
Me.MENU_LOAD_SESSION.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24
|
Me.MENU_LOAD_SESSION.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24
|
||||||
Me.MENU_LOAD_SESSION.ImageTransparentColor = System.Drawing.Color.Magenta
|
Me.MENU_LOAD_SESSION.ImageTransparentColor = System.Drawing.Color.Magenta
|
||||||
Me.MENU_LOAD_SESSION.Name = "MENU_LOAD_SESSION"
|
Me.MENU_LOAD_SESSION.Name = "MENU_LOAD_SESSION"
|
||||||
@@ -223,6 +229,24 @@ Namespace DownloadObjects
|
|||||||
Me.BTT_MOVE_TO.Size = New System.Drawing.Size(352, 22)
|
Me.BTT_MOVE_TO.Size = New System.Drawing.Size(352, 22)
|
||||||
Me.BTT_MOVE_TO.Text = "Move checked to..."
|
Me.BTT_MOVE_TO.Text = "Move checked to..."
|
||||||
'
|
'
|
||||||
|
'BTT_COPY_SPEC_TO
|
||||||
|
'
|
||||||
|
Me.BTT_COPY_SPEC_TO.AutoToolTip = True
|
||||||
|
Me.BTT_COPY_SPEC_TO.Image = Global.SCrawler.My.Resources.Resources.PastePic_32
|
||||||
|
Me.BTT_COPY_SPEC_TO.Name = "BTT_COPY_SPEC_TO"
|
||||||
|
Me.BTT_COPY_SPEC_TO.Size = New System.Drawing.Size(352, 22)
|
||||||
|
Me.BTT_COPY_SPEC_TO.Text = "Copy feed/session files to..."
|
||||||
|
Me.BTT_COPY_SPEC_TO.ToolTipText = "Copy all the files of the loaded feed/session to..."
|
||||||
|
'
|
||||||
|
'BTT_MOVE_SPEC_TO
|
||||||
|
'
|
||||||
|
Me.BTT_MOVE_SPEC_TO.AutoToolTip = True
|
||||||
|
Me.BTT_MOVE_SPEC_TO.Image = Global.SCrawler.My.Resources.Resources.CutPic_48
|
||||||
|
Me.BTT_MOVE_SPEC_TO.Name = "BTT_MOVE_SPEC_TO"
|
||||||
|
Me.BTT_MOVE_SPEC_TO.Size = New System.Drawing.Size(352, 22)
|
||||||
|
Me.BTT_MOVE_SPEC_TO.Text = "Move feed/session files to..."
|
||||||
|
Me.BTT_MOVE_SPEC_TO.ToolTipText = "Move all the files of the loaded feed/session to..."
|
||||||
|
'
|
||||||
'BTT_LOAD_FAV
|
'BTT_LOAD_FAV
|
||||||
'
|
'
|
||||||
Me.BTT_LOAD_FAV.Image = Global.SCrawler.My.Resources.Resources.HeartPic_32
|
Me.BTT_LOAD_FAV.Image = Global.SCrawler.My.Resources.Resources.HeartPic_32
|
||||||
@@ -342,6 +366,15 @@ Namespace DownloadObjects
|
|||||||
Me.BTT_CLEAR_DAILY.Text = "Clear session"
|
Me.BTT_CLEAR_DAILY.Text = "Clear session"
|
||||||
Me.BTT_CLEAR_DAILY.ToolTipText = "Clear current session"
|
Me.BTT_CLEAR_DAILY.ToolTipText = "Clear current session"
|
||||||
'
|
'
|
||||||
|
'BTT_RESET_DAILY
|
||||||
|
'
|
||||||
|
Me.BTT_RESET_DAILY.AutoToolTip = True
|
||||||
|
Me.BTT_RESET_DAILY.Image = Global.SCrawler.My.Resources.Resources.RefreshPic_24
|
||||||
|
Me.BTT_RESET_DAILY.Name = "BTT_RESET_DAILY"
|
||||||
|
Me.BTT_RESET_DAILY.Size = New System.Drawing.Size(352, 22)
|
||||||
|
Me.BTT_RESET_DAILY.Text = "Reset current session"
|
||||||
|
Me.BTT_RESET_DAILY.ToolTipText = "A new file will be created for the current session"
|
||||||
|
'
|
||||||
'BTT_MERGE_FEEDS
|
'BTT_MERGE_FEEDS
|
||||||
'
|
'
|
||||||
Me.BTT_MERGE_FEEDS.AutoToolTip = True
|
Me.BTT_MERGE_FEEDS.AutoToolTip = True
|
||||||
@@ -443,37 +476,12 @@ Namespace DownloadObjects
|
|||||||
Me.TP_DATA.Size = New System.Drawing.Size(484, 436)
|
Me.TP_DATA.Size = New System.Drawing.Size(484, 436)
|
||||||
Me.TP_DATA.TabIndex = 1
|
Me.TP_DATA.TabIndex = 1
|
||||||
'
|
'
|
||||||
'MENU_LOAD_SEP_9
|
'BTT_CURR_SESSION_SET_LAST
|
||||||
'
|
'
|
||||||
MENU_LOAD_SEP_9.Name = "MENU_LOAD_SEP_9"
|
Me.BTT_CURR_SESSION_SET_LAST.Image = Global.SCrawler.My.Resources.Resources.ArrowDownPic_Blue_24
|
||||||
MENU_LOAD_SEP_9.Size = New System.Drawing.Size(349, 6)
|
Me.BTT_CURR_SESSION_SET_LAST.Name = "BTT_CURR_SESSION_SET_LAST"
|
||||||
'
|
Me.BTT_CURR_SESSION_SET_LAST.Size = New System.Drawing.Size(352, 22)
|
||||||
'BTT_COPY_SPEC_TO
|
Me.BTT_CURR_SESSION_SET_LAST.Text = "Set last download session as current session"
|
||||||
'
|
|
||||||
Me.BTT_COPY_SPEC_TO.AutoToolTip = True
|
|
||||||
Me.BTT_COPY_SPEC_TO.Image = Global.SCrawler.My.Resources.Resources.PastePic_32
|
|
||||||
Me.BTT_COPY_SPEC_TO.Name = "BTT_COPY_SPEC_TO"
|
|
||||||
Me.BTT_COPY_SPEC_TO.Size = New System.Drawing.Size(352, 22)
|
|
||||||
Me.BTT_COPY_SPEC_TO.Text = "Copy feed/session files to..."
|
|
||||||
Me.BTT_COPY_SPEC_TO.ToolTipText = "Copy all the files of the loaded feed/session to..."
|
|
||||||
'
|
|
||||||
'BTT_MOVE_SPEC_TO
|
|
||||||
'
|
|
||||||
Me.BTT_MOVE_SPEC_TO.AutoToolTip = True
|
|
||||||
Me.BTT_MOVE_SPEC_TO.Image = Global.SCrawler.My.Resources.Resources.CutPic_48
|
|
||||||
Me.BTT_MOVE_SPEC_TO.Name = "BTT_MOVE_SPEC_TO"
|
|
||||||
Me.BTT_MOVE_SPEC_TO.Size = New System.Drawing.Size(352, 22)
|
|
||||||
Me.BTT_MOVE_SPEC_TO.Text = "Move feed/session files to..."
|
|
||||||
Me.BTT_MOVE_SPEC_TO.ToolTipText = "Move all the files of the loaded feed/session to..."
|
|
||||||
'
|
|
||||||
'BTT_RESET_DAILY
|
|
||||||
'
|
|
||||||
Me.BTT_RESET_DAILY.AutoToolTip = True
|
|
||||||
Me.BTT_RESET_DAILY.Image = Global.SCrawler.My.Resources.Resources.RefreshPic_24
|
|
||||||
Me.BTT_RESET_DAILY.Name = "BTT_RESET_DAILY"
|
|
||||||
Me.BTT_RESET_DAILY.Size = New System.Drawing.Size(352, 22)
|
|
||||||
Me.BTT_RESET_DAILY.Text = "Reset current session"
|
|
||||||
Me.BTT_RESET_DAILY.ToolTipText = "A new file will be created for the current session"
|
|
||||||
'
|
'
|
||||||
'DownloadFeedForm
|
'DownloadFeedForm
|
||||||
'
|
'
|
||||||
@@ -534,5 +542,6 @@ Namespace DownloadObjects
|
|||||||
Private WithEvents BTT_COPY_SPEC_TO As ToolStripMenuItem
|
Private WithEvents BTT_COPY_SPEC_TO As ToolStripMenuItem
|
||||||
Private WithEvents BTT_MOVE_SPEC_TO As ToolStripMenuItem
|
Private WithEvents BTT_MOVE_SPEC_TO As ToolStripMenuItem
|
||||||
Private WithEvents BTT_RESET_DAILY As ToolStripMenuItem
|
Private WithEvents BTT_RESET_DAILY As ToolStripMenuItem
|
||||||
|
Private WithEvents BTT_CURR_SESSION_SET_LAST As ToolStripMenuItem
|
||||||
End Class
|
End Class
|
||||||
End Namespace
|
End Namespace
|
||||||
@@ -162,10 +162,10 @@
|
|||||||
<metadata name="MENU_LOAD_SEP_8.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="MENU_LOAD_SEP_8.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="ToolbarTOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>17, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="MENU_LOAD_SEP_9.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="MENU_LOAD_SEP_9.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="ToolbarTOP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
||||||
@@ -515,17 +515,21 @@ Namespace DownloadObjects
|
|||||||
f = Downloader.FilesSessionActual(False)
|
f = Downloader.FilesSessionActual(False)
|
||||||
End If
|
End If
|
||||||
If f.Exists Then
|
If f.Exists Then
|
||||||
If SelectedMode >= 0 Then
|
If GetSessionFile Then
|
||||||
If SelectedMode = FeedModes.Saved Then LoadedSessionName = f.Name
|
If Not Downloader.FilesSessionActual(False) = f Then SessionFile = f
|
||||||
FeedChangeMode(SelectedMode)
|
Else
|
||||||
|
If SelectedMode >= 0 Then
|
||||||
|
If SelectedMode = FeedModes.Saved Then LoadedSessionName = f.Name
|
||||||
|
FeedChangeMode(SelectedMode)
|
||||||
|
End If
|
||||||
|
DataList.Clear()
|
||||||
|
x = New XmlFile(f,, False) With {.AllowSameNames = True, .XmlReadOnly = True}
|
||||||
|
x.LoadData()
|
||||||
|
If x.Count > 0 Then DataList.ListAddList(x, lcr)
|
||||||
|
x.Dispose()
|
||||||
|
CleanDataList()
|
||||||
|
RefillList(False, False)
|
||||||
End If
|
End If
|
||||||
DataList.Clear()
|
|
||||||
x = New XmlFile(f,, False) With {.AllowSameNames = True, .XmlReadOnly = True}
|
|
||||||
x.LoadData()
|
|
||||||
If x.Count > 0 Then DataList.ListAddList(x, lcr)
|
|
||||||
x.Dispose()
|
|
||||||
CleanDataList()
|
|
||||||
RefillList(False, False)
|
|
||||||
End If
|
End If
|
||||||
Else
|
Else
|
||||||
m.Text = "Saved sessions not found"
|
m.Text = "Saved sessions not found"
|
||||||
@@ -553,6 +557,7 @@ Namespace DownloadObjects
|
|||||||
Dim data As IEnumerable(Of UserMediaD) = Nothing
|
Dim data As IEnumerable(Of UserMediaD) = Nothing
|
||||||
Dim dd As UserMediaD
|
Dim dd As UserMediaD
|
||||||
Dim __user As UserInfo
|
Dim __user As UserInfo
|
||||||
|
Dim __isSavedPosts As Boolean
|
||||||
Dim data_files As IEnumerable(Of SFile) = Nothing
|
Dim data_files As IEnumerable(Of SFile) = Nothing
|
||||||
Dim new_files As New List(Of SFile)
|
Dim new_files As New List(Of SFile)
|
||||||
Dim mm As UserMediaD
|
Dim mm As UserMediaD
|
||||||
@@ -671,8 +676,9 @@ Namespace DownloadObjects
|
|||||||
__user = mm.UserInfo
|
__user = mm.UserInfo
|
||||||
mm_data = mm.Data
|
mm_data = mm.Data
|
||||||
mm_data.File = df
|
mm_data.File = df
|
||||||
mm = New UserMediaD(mm_data, If(moveOptions.ReplaceUserProfile_Profile, mm.User), mm.Session, mm.Date) With {.IsSavedPosts = mm.IsSavedPosts}
|
__isSavedPosts = mm.IsSavedPosts And moveOptions.ReplaceUserProfile_Profile Is Nothing
|
||||||
If moveOptions.ReplaceUserProfile_Profile Is Nothing And mm.IsSavedPosts Then mm.UserInfo = __user
|
mm = New UserMediaD(mm_data, If(moveOptions.ReplaceUserProfile_Profile, mm.User), mm.Session, mm.Date) With {.IsSavedPosts = __isSavedPosts}
|
||||||
|
If __isSavedPosts Then mm.UserInfo = __user
|
||||||
Downloader.Files(indx) = mm
|
Downloader.Files(indx) = mm
|
||||||
downloaderFilesUpdated = True
|
downloaderFilesUpdated = True
|
||||||
End If
|
End If
|
||||||
@@ -701,8 +707,9 @@ Namespace DownloadObjects
|
|||||||
__user = mm.UserInfo
|
__user = mm.UserInfo
|
||||||
mm_data = mm.Data
|
mm_data = mm.Data
|
||||||
mm_data.File = df
|
mm_data.File = df
|
||||||
mm = New UserMediaD(mm_data, If(moveOptions.ReplaceUserProfile_Profile, mm.User), mm.Session, mm.Date) With {.IsSavedPosts = mm.IsSavedPosts}
|
__isSavedPosts = mm.IsSavedPosts And moveOptions.ReplaceUserProfile_Profile Is Nothing
|
||||||
If moveOptions.ReplaceUserProfile_Profile Is Nothing And mm.IsSavedPosts Then mm.UserInfo = __user
|
mm = New UserMediaD(mm_data, If(moveOptions.ReplaceUserProfile_Profile, mm.User), mm.Session, mm.Date) With {.IsSavedPosts = __isSavedPosts}
|
||||||
|
If __isSavedPosts Then mm.UserInfo = __user
|
||||||
sessionData(indx) = mm
|
sessionData(indx) = mm
|
||||||
sesFilesReplaced = True
|
sesFilesReplaced = True
|
||||||
If DataList.Count > 0 Then
|
If DataList.Count > 0 Then
|
||||||
@@ -922,10 +929,10 @@ Namespace DownloadObjects
|
|||||||
End Sub
|
End Sub
|
||||||
#End Region
|
#End Region
|
||||||
#Region "Sessions set, merge, clear"
|
#Region "Sessions set, merge, clear"
|
||||||
Private Sub BTT_CURR_SESSION_SET_Click(sender As Object, e As EventArgs) Handles BTT_CURR_SESSION_SET.Click
|
Private Sub BTT_CURR_SESSION_SET_Click(sender As Object, e As EventArgs) Handles BTT_CURR_SESSION_SET.Click, BTT_CURR_SESSION_SET_LAST.Click
|
||||||
Try
|
Try
|
||||||
Dim f As SFile = Nothing
|
Dim f As SFile = Nothing
|
||||||
SessionChooser(False,,,, True, f)
|
SessionChooser(sender Is BTT_CURR_SESSION_SET_LAST,,,, True, f)
|
||||||
If Not f.IsEmptyString AndAlso f.Exists Then
|
If Not f.IsEmptyString AndAlso f.Exists Then
|
||||||
Downloader.FilesLoadLastSession(f)
|
Downloader.FilesLoadLastSession(f)
|
||||||
FeedChangeMode(FeedModes.Current)
|
FeedChangeMode(FeedModes.Current)
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ Namespace DownloadObjects
|
|||||||
Else
|
Else
|
||||||
user = Item.User
|
user = Item.User
|
||||||
End If
|
End If
|
||||||
|
If isSaved Then isSaved = Item.UserInfo.Equals(DirectCast(user, UserDataBase).User)
|
||||||
If Not If(user?.IsSubscription, False) Then
|
If Not If(user?.IsSubscription, False) Then
|
||||||
Item = New UserMediaD(data, user, Item.Session, Item.Date) With {.IsSavedPosts = isSaved}
|
Item = New UserMediaD(data, user, Item.Session, Item.Date) With {.IsSavedPosts = isSaved}
|
||||||
Result = True
|
Result = True
|
||||||
@@ -176,9 +177,10 @@ Namespace DownloadObjects
|
|||||||
Dim m As UserMediaD = Items(indx)
|
Dim m As UserMediaD = Items(indx)
|
||||||
Dim mm As UserMedia = m.Data
|
Dim mm As UserMedia = m.Data
|
||||||
Dim user As UserInfo = m.UserInfo
|
Dim user As UserInfo = m.UserInfo
|
||||||
|
Dim __isSavedPosts As Boolean = m.IsSavedPosts And MCTOptions.ReplaceUserProfile_Profile Is Nothing
|
||||||
mm.File = NewFile
|
mm.File = NewFile
|
||||||
m = New UserMediaD(mm, If(MCTOptions.ReplaceUserProfile_Profile, m.User), m.Session, m.Date) With {.IsSavedPosts = m.IsSavedPosts}
|
m = New UserMediaD(mm, If(MCTOptions.ReplaceUserProfile_Profile, m.User), m.Session, m.Date) With {.IsSavedPosts = __isSavedPosts}
|
||||||
If MCTOptions.ReplaceUserProfile_Profile Is Nothing And m.IsSavedPosts Then m.UserInfo = user
|
If __isSavedPosts Then m.UserInfo = user
|
||||||
Items(indx) = m
|
Items(indx) = m
|
||||||
_FilesUpdated = True
|
_FilesUpdated = True
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ Friend Class MainFrameObjects : Implements INotificator
|
|||||||
AddHandler .TextAdded, AddressOf ProgramLog_TextAdded
|
AddHandler .TextAdded, AddressOf ProgramLog_TextAdded
|
||||||
AddHandler .TextCleared, AddressOf ProgramLog_TextCleared
|
AddHandler .TextCleared, AddressOf ProgramLog_TextCleared
|
||||||
End With
|
End With
|
||||||
|
UpdateLogButton()
|
||||||
End Sub
|
End Sub
|
||||||
#Region "Users"
|
#Region "Users"
|
||||||
Friend Sub FocusUser(ByVal Key As String, Optional ByVal ActivateForm As Boolean = False)
|
Friend Sub FocusUser(ByVal Key As String, Optional ByVal ActivateForm As Boolean = False)
|
||||||
|
|||||||
@@ -83,6 +83,9 @@ Friend Module MainMod
|
|||||||
<Extension> Friend Function ToStringDateDef(ByVal _Date As Date) As String
|
<Extension> Friend Function ToStringDateDef(ByVal _Date As Date) As String
|
||||||
Return ToStringDateDef(_DateN:=_Date)
|
Return ToStringDateDef(_DateN:=_Date)
|
||||||
End Function
|
End Function
|
||||||
|
<Extension> Friend Function ToDateDef(ByVal DateStr As String, Optional ByVal NothingArg As Object = Nothing) As Object
|
||||||
|
Return AConvert(Of Date)(DateStr, DateTimeDefaultProvider, NothingArg)
|
||||||
|
End Function
|
||||||
Friend ReadOnly SessionDateTimeProvider As New ADateTime("yyyyMMdd_HHmmss")
|
Friend ReadOnly SessionDateTimeProvider As New ADateTime("yyyyMMdd_HHmmss")
|
||||||
Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan}
|
Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan}
|
||||||
Friend ReadOnly LogConnector As New LogHost
|
Friend ReadOnly LogConnector As New LogHost
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
|
|||||||
' by using the '*' as shown below:
|
' by using the '*' as shown below:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("2024.6.10.0")>
|
<Assembly: AssemblyVersion("2024.6.25.0")>
|
||||||
<Assembly: AssemblyFileVersion("2024.6.10.0")>
|
<Assembly: AssemblyFileVersion("2024.6.25.0")>
|
||||||
<Assembly: NeutralResourcesLanguage("en")>
|
<Assembly: NeutralResourcesLanguage("en")>
|
||||||
|
|||||||
@@ -208,11 +208,18 @@
|
|||||||
<Compile Include="API\Mastodon\SiteSettings.vb" />
|
<Compile Include="API\Mastodon\SiteSettings.vb" />
|
||||||
<Compile Include="API\Mastodon\UserData.vb" />
|
<Compile Include="API\Mastodon\UserData.vb" />
|
||||||
<Compile Include="API\OnlyFans\Declarations.vb" />
|
<Compile Include="API\OnlyFans\Declarations.vb" />
|
||||||
|
<Compile Include="API\OnlyFans\DynamicRulesEnv.vb" />
|
||||||
<Compile Include="API\OnlyFans\OFResources.Designer.vb">
|
<Compile Include="API\OnlyFans\OFResources.Designer.vb">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
<DependentUpon>OFResources.resx</DependentUpon>
|
<DependentUpon>OFResources.resx</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="API\OnlyFans\OnlyFansAdvancedSettingsForm.Designer.vb">
|
||||||
|
<DependentUpon>OnlyFansAdvancedSettingsForm.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="API\OnlyFans\OnlyFansAdvancedSettingsForm.vb">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="API\OnlyFans\SiteSettings.vb" />
|
<Compile Include="API\OnlyFans\SiteSettings.vb" />
|
||||||
<Compile Include="API\OnlyFans\UserData.vb" />
|
<Compile Include="API\OnlyFans\UserData.vb" />
|
||||||
<Compile Include="API\OnlyFans\UserExchangeOptions.vb" />
|
<Compile Include="API\OnlyFans\UserExchangeOptions.vb" />
|
||||||
@@ -542,6 +549,9 @@
|
|||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>OFResources.Designer.vb</LastGenOutput>
|
<LastGenOutput>OFResources.Designer.vb</LastGenOutput>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="API\OnlyFans\OnlyFansAdvancedSettingsForm.resx">
|
||||||
|
<DependentUpon>OnlyFansAdvancedSettingsForm.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="API\Reddit\RedditViewSettingsForm.resx">
|
<EmbeddedResource Include="API\Reddit\RedditViewSettingsForm.resx">
|
||||||
<DependentUpon>RedditViewSettingsForm.vb</DependentUpon>
|
<DependentUpon>RedditViewSettingsForm.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -784,6 +794,9 @@
|
|||||||
<None Include="Content\Pictures\SitePictures\FacebookPic_37.png" />
|
<None Include="Content\Pictures\SitePictures\FacebookPic_37.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Content Include="API\OnlyFans\DynamicRules.txt" />
|
||||||
|
<Content Include="API\OnlyFans\DynamicRulesAll.txt" />
|
||||||
|
<Content Include="API\OnlyFans\OFScraperConfigPatternConstants.txt" />
|
||||||
<Content Include="Content\Pictures\CutPic_48.png" />
|
<Content Include="Content\Pictures\CutPic_48.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||||
|
|||||||
Reference in New Issue
Block a user