mirror of
https://github.com/AAndyProgram/SCrawler.git
synced 2026-03-14 15:52:18 +00:00
IPluginContentProvider: add 'ProgressPreChanged' and 'ProgressPreMaximumChanged' events YT.MediaItem: change folder opening on double click YT.VideoListForm: change the icon for the 'Download' button Add advanced progress Add user metrics calculation UserDataBase: fix GIF hash bug Instagram: heic to jpg Mastodon.SiteSettings: add the main domain to the list of domains with saving the settings Mastodon.UserData: handle 'Forbidden' error; fix bug in parsing non-user posts Pinterest: remove cookies requirement for saved posts PornHub: fix resolutions issue; add 'DownloadUHD' option Reddit: fix missing images bug; fix broken images bug; update container parsing function MainFrame: fix collection pointing bug
132 lines
5.7 KiB
VB.net
132 lines
5.7 KiB
VB.net
' Copyright (C) 2023 Andy https://github.com/AAndyProgram
|
|
' This program is free software: you can redistribute it and/or modify
|
|
' it under the terms of the GNU General Public License as published by
|
|
' the Free Software Foundation, either version 3 of the License, or
|
|
' (at your option) any later version.
|
|
'
|
|
' This program is distributed in the hope that it will be useful,
|
|
' but WITHOUT ANY WARRANTY
|
|
Imports System.Runtime.CompilerServices
|
|
Imports PersonalUtilities.Functions.XML.Objects
|
|
Imports PersonalUtilities.Functions.RegularExpressions
|
|
Imports PersonalUtilities.Forms.Toolbars
|
|
Imports PersonalUtilities.Tools
|
|
Imports PersonalUtilities.Tools.Web
|
|
Imports SCrawler.API.Base
|
|
Imports SCrawler.Plugin.Hosts
|
|
Imports SCrawler.DownloadObjects
|
|
Friend Module MainMod
|
|
Friend Settings As SettingsCLS
|
|
Friend Const SettingsFolderName As String = XML.XmlFile.SettingsFolder
|
|
Friend ReadOnly LinkPattern As RParams = RParams.DMS("[htps:]{0,6}[/]{0,2}(.+)", 1)
|
|
Friend ReadOnly FilesPattern As RParams = RParams.DM("[^\./]+?\.\w+", 1, EDP.ReturnValue)
|
|
Friend Delegate Sub NotificationEventHandler(ByVal Sender As SettingsCLS.NotificationObjects, ByVal Message As String)
|
|
Friend Const LVI_TempOption As String = "Temp"
|
|
Friend Const LVI_FavOption As String = "Favorite"
|
|
Friend Const LVI_CollectionOption As String = "Collection"
|
|
Friend Sub ExecuteCommand(ByVal Obj As XMLValueAttribute(Of String, Boolean))
|
|
Try
|
|
If Obj.Attribute And Not Obj.IsEmptyString Then
|
|
Using b As New BatchExecutor With {.RedirectStandardError = True}
|
|
With b
|
|
.Execute({Obj.Value}, EDP.SendToLog + EDP.ThrowException)
|
|
If .HasError Or Not .ErrorOutput.IsEmptyString Then Throw New Exception(.ErrorOutput, .ErrorException)
|
|
End With
|
|
End Using
|
|
End If
|
|
Catch ex As Exception
|
|
ErrorsDescriber.Execute(EDP.SendToLog, ex, $"[{Obj.Name}] command: [{Obj.Value}]")
|
|
End Try
|
|
End Sub
|
|
Friend Enum ViewModes As Integer
|
|
IconLarge = View.LargeIcon
|
|
IconSmall = View.SmallIcon
|
|
List = View.Tile
|
|
Details = View.Details
|
|
End Enum
|
|
Friend Enum ShowingModes As Integer
|
|
All = 0
|
|
Regular = 20
|
|
Temporary = 50
|
|
Favorite = 100
|
|
Labels = 500
|
|
NoLabels = 1000
|
|
Deleted = 10000
|
|
Suspended = 12000
|
|
End Enum
|
|
Friend Enum ShowingDates As Integer
|
|
[Off] = 0
|
|
[Not] = 1
|
|
[In] = 2
|
|
End Enum
|
|
Friend Enum FileNameReplaceMode As Integer
|
|
None = 0
|
|
Replace = 1
|
|
Add = 2
|
|
End Enum
|
|
Friend Enum UsageModel As Integer
|
|
[Default] = 0
|
|
Virtual = 1
|
|
End Enum
|
|
Friend Downloader As TDownloader
|
|
Friend InfoForm As DownloadedInfoForm
|
|
Friend VideoDownloader As STDownloader.VideoDownloaderForm
|
|
Friend UserListLoader As ListImagesLoader
|
|
Friend MyProgressForm As ActiveDownloadingProgress
|
|
Friend MainFrameObj As MainFrameObjects
|
|
Friend ReadOnly DateTimeDefaultProvider As New ADateTime(ADateTime.Formats.BaseDateTime)
|
|
Friend ReadOnly FeedVideoLengthProvider As New ADateTime("hh\:mm\:ss") With {.TimeParseMode = ADateTime.TimeModes.TimeSpan}
|
|
Friend ReadOnly UserExistsPredicate As New FPredicate(Of IUserData)(Function(u) u.Exists)
|
|
Friend ReadOnly LogConnector As New LogHost
|
|
Friend DefaultUserAgent As String = String.Empty
|
|
#Region "File name operations"
|
|
Friend FileDateAppenderProvider As IFormatProvider
|
|
''' <summary>File, Date</summary>
|
|
Friend FileDateAppenderPattern As String
|
|
Friend Class NumberedFile : Inherits SFileNumbers
|
|
Friend Sub New(ByVal f As SFile)
|
|
FileName = f.Name
|
|
NumberProvider = New ANumbers With {.Format = ANumbers.Formats.NumberGroup, .GroupSize = 5}
|
|
End Sub
|
|
End Class
|
|
#End Region
|
|
Friend Property MainProgress As MyProgressExt
|
|
Friend Function GetLviGroupName(ByVal Host As SettingsHost, ByVal IsCollection As Boolean) As ListViewGroup()
|
|
Dim l As New List(Of ListViewGroup)
|
|
Dim t$
|
|
t = GetLviGroupName(Host, False, True, IsCollection)
|
|
l.Add(New ListViewGroup(t, t))
|
|
t = GetLviGroupName(Host, False, False, IsCollection)
|
|
l.Add(New ListViewGroup(t, t))
|
|
t = GetLviGroupName(Host, True, False, IsCollection)
|
|
l.Add(New ListViewGroup(t, t))
|
|
Return l.ToArray
|
|
End Function
|
|
Friend Function GetLviGroupName(ByVal Host As SettingsHost, ByVal Temp As Boolean, ByVal Fav As Boolean, ByVal IsCollection As Boolean) As String
|
|
Dim Opt$ = String.Empty
|
|
If Temp Then
|
|
Opt = LVI_TempOption
|
|
ElseIf Fav Then
|
|
Opt = LVI_FavOption
|
|
End If
|
|
If Not Opt.IsEmptyString Then Opt = $" ({Opt})"
|
|
If IsCollection Then
|
|
Return $"{LVI_CollectionOption}{Opt}"
|
|
Else
|
|
Return $"{If(Host?.Name, String.Empty)}{Opt}"
|
|
End If
|
|
End Function
|
|
<Extension> Friend Function GetGroupsLabels(Of T As Groups.IGroup)(ByVal Groups As IEnumerable(Of T)) As List(Of String)
|
|
If Groups.ListExists Then
|
|
Return ListAddList(Nothing, Groups.SelectMany(Function(g) g.Labels), LAP.NotContainsOnly).
|
|
ListAddList(Groups.SelectMany(Function(g) g.LabelsExcluded), LAP.NotContainsOnly)
|
|
Else
|
|
Return Nothing
|
|
End If
|
|
End Function
|
|
Friend Sub CheckVersion(ByVal Force As Boolean)
|
|
If Settings.CheckUpdatesAtStart Or Force Then _
|
|
GitHub.DefaultVersionChecker(My.Application.Info.Version, "AAndyProgram", "SCrawler",
|
|
Settings.LatestVersion.Value, Settings.ShowNewVersionNotification.Value, Force)
|
|
End Sub
|
|
End Module |