comments and code refactoring
This commit is contained in:
@@ -40,7 +40,7 @@ import { useI18n } from '../hooks/useI18n'
|
|||||||
import { useRPC } from '../hooks/useRPC'
|
import { useRPC } from '../hooks/useRPC'
|
||||||
import { CliArguments } from '../lib/argsParser'
|
import { CliArguments } from '../lib/argsParser'
|
||||||
import type { DLMetadata } from '../types'
|
import type { DLMetadata } from '../types'
|
||||||
import { isValidURL, toFormatArgs } from '../utils'
|
import { toFormatArgs } from '../utils'
|
||||||
import ExtraDownloadOptions from './ExtraDownloadOptions'
|
import ExtraDownloadOptions from './ExtraDownloadOptions'
|
||||||
|
|
||||||
const Transition = forwardRef(function Transition(
|
const Transition = forwardRef(function Transition(
|
||||||
@@ -166,7 +166,6 @@ const DownloadDialog: FC<Props> = ({ open, onClose, onDownloadStart }) => {
|
|||||||
|
|
||||||
file
|
file
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.filter(u => isValidURL(u))
|
|
||||||
.forEach(u => sendUrl(u))
|
.forEach(u => sendUrl(u))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,17 +20,10 @@ export function validateDomain(url: string): boolean {
|
|||||||
return urlRegex.test(url) || name === 'localhost' && slugRegex.test(slug)
|
return urlRegex.test(url) || name === 'localhost' && slugRegex.test(slug)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isValidURL(url: string): boolean {
|
export const ellipsis = (str: string, lim: number) =>
|
||||||
let urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)/
|
str.length > lim
|
||||||
return urlRegex.test(url)
|
? `${str.substring(0, lim)}...`
|
||||||
}
|
: str
|
||||||
|
|
||||||
export function ellipsis(str: string, lim: number): string {
|
|
||||||
if (str) {
|
|
||||||
return str.length > lim ? `${str.substring(0, lim)}...` : str
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
export function toFormatArgs(codes: string[]): string {
|
export function toFormatArgs(codes: string[]): string {
|
||||||
if (codes.length > 1) {
|
if (codes.length > 1) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package internal
|
|||||||
|
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
|
// Used to unmarshall yt-dlp progress
|
||||||
type ProgressTemplate struct {
|
type ProgressTemplate struct {
|
||||||
Percentage string `json:"percentage"`
|
Percentage string `json:"percentage"`
|
||||||
Speed float32 `json:"speed"`
|
Speed float32 `json:"speed"`
|
||||||
@@ -9,6 +10,7 @@ type ProgressTemplate struct {
|
|||||||
Eta float32 `json:"eta"`
|
Eta float32 `json:"eta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Defines where and how the download needs to be saved
|
||||||
type DownloadOutput struct {
|
type DownloadOutput struct {
|
||||||
Path string
|
Path string
|
||||||
Filename string
|
Filename string
|
||||||
@@ -92,6 +94,7 @@ type SetCookiesRequest struct {
|
|||||||
Cookies string `json:"cookies"`
|
Cookies string `json:"cookies"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// represents a user defined collection of yt-dlp arguments
|
||||||
type CustomTemplate struct {
|
type CustomTemplate struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ func (p *Process) Start() {
|
|||||||
p.Logger.Info("progress",
|
p.Logger.Info("progress",
|
||||||
slog.String("id", p.getShortId()),
|
slog.String("id", p.getShortId()),
|
||||||
slog.String("url", p.Url),
|
slog.String("url", p.Url),
|
||||||
slog.String("percentege", progress.Percentage),
|
slog.String("percentage", progress.Percentage),
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -8,6 +8,15 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
File base logger with log-rotate capabilities.
|
||||||
|
The rotate process must be initiated from an external goroutine.
|
||||||
|
|
||||||
|
After rotation the previous logs file are compressed with gzip algorithm.
|
||||||
|
|
||||||
|
The rotated log follows this naming: [filename].UTC time.gz
|
||||||
|
*/
|
||||||
|
|
||||||
// implements io.Writer interface
|
// implements io.Writer interface
|
||||||
type LogRotateWriter struct {
|
type LogRotateWriter struct {
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
|
|||||||
@@ -6,6 +6,17 @@ import (
|
|||||||
"github.com/reactivex/rxgo/v2"
|
"github.com/reactivex/rxgo/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Logger implementation using the observable pattern.
|
||||||
|
Implements io.Writer interface.
|
||||||
|
|
||||||
|
The observable is an event source which drops everythigng unless there's
|
||||||
|
a subscriber connected.
|
||||||
|
|
||||||
|
The observer implementatios are a http ServerSentEvents handler and a
|
||||||
|
websocket one in handler.go
|
||||||
|
*/
|
||||||
|
|
||||||
var (
|
var (
|
||||||
logsChan = make(chan rxgo.Item, 100)
|
logsChan = make(chan rxgo.Item, 100)
|
||||||
logsObservable = rxgo.
|
logsObservable = rxgo.
|
||||||
|
|||||||
@@ -26,10 +26,12 @@ func DirectoryTree() (*[]string, error) {
|
|||||||
children []Node
|
children []Node
|
||||||
}
|
}
|
||||||
|
|
||||||
rootPath := config.Instance().DownloadPath
|
var (
|
||||||
|
rootPath = config.Instance().DownloadPath
|
||||||
|
|
||||||
stack := internal.NewStack[Node]()
|
stack = internal.NewStack[Node]()
|
||||||
flattened := make([]string, 0)
|
flattened = make([]string, 0)
|
||||||
|
)
|
||||||
|
|
||||||
stack.Push(Node{path: rootPath})
|
stack.Push(Node{path: rootPath})
|
||||||
|
|
||||||
@@ -37,14 +39,16 @@ func DirectoryTree() (*[]string, error) {
|
|||||||
|
|
||||||
for stack.IsNotEmpty() {
|
for stack.IsNotEmpty() {
|
||||||
current := stack.Pop().Value
|
current := stack.Pop().Value
|
||||||
|
|
||||||
children, err := os.ReadDir(current.path)
|
children, err := os.ReadDir(current.path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, entry := range children {
|
for _, entry := range children {
|
||||||
childPath := filepath.Join(current.path, entry.Name())
|
var (
|
||||||
childNode := Node{path: childPath}
|
childPath = filepath.Join(current.path, entry.Name())
|
||||||
|
childNode = Node{path: childPath}
|
||||||
|
)
|
||||||
if entry.IsDir() {
|
if entry.IsDir() {
|
||||||
current.children = append(current.children, childNode)
|
current.children = append(current.children, childNode)
|
||||||
stack.Push(childNode)
|
stack.Push(childNode)
|
||||||
|
|||||||
Reference in New Issue
Block a user