Merge pull request #567 from arabcoders/dev
fix: forcibly register the NFOMaker PP
This commit is contained in:
commit
0c7ebb66ed
7 changed files with 48 additions and 20 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# flake8: noqa: F401
|
||||
# flake8: noqa: F401, RUF100, W291, I001
|
||||
import sys
|
||||
from typing import Any
|
||||
|
||||
|
|
@ -49,6 +49,7 @@ class _ArchiveProxy:
|
|||
|
||||
class YTDLP(yt_dlp.YoutubeDL):
|
||||
_interrupted = False
|
||||
_registered = False
|
||||
|
||||
def __init__(self, params=None, auto_init=True):
|
||||
# Avoid yt-dlp preloading the archive file by stripping the param first
|
||||
|
|
@ -73,6 +74,15 @@ class YTDLP(yt_dlp.YoutubeDL):
|
|||
pass
|
||||
|
||||
self.archive = _ArchiveProxy(orig_file)
|
||||
if not YTDLP._registered:
|
||||
try:
|
||||
from app.yt_dlp_plugins.postprocessor.nfo_maker import NFOMakerPP
|
||||
from yt_dlp.postprocessor import postprocessors
|
||||
|
||||
postprocessors.value.update({"NFOMakerPP": NFOMakerPP})
|
||||
YTDLP._registered = True
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def _delete_downloaded_files(self, *args, **kwargs) -> None:
|
||||
if self._interrupted:
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ async def add(
|
|||
|
||||
"""
|
||||
_preset: Preset | None = Presets.get_instance().get(item.preset)
|
||||
logs = []
|
||||
|
||||
if item.has_cli():
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -66,9 +66,17 @@ class StatusTracker:
|
|||
|
||||
"""
|
||||
self.info.datetime = str(formatdate(time.time()))
|
||||
self.info.filename = safe_relative_path(filepath, Path(self.download_dir), self.temp_path)
|
||||
self.info.filename = safe_relative_path(filepath, Path(self.download_dir))
|
||||
self.final_update = True
|
||||
self.logger.debug(f"Final file name: '{filepath}'.")
|
||||
try:
|
||||
filepath.relative_to(self.download_dir)
|
||||
except ValueError:
|
||||
self.logger.warning(
|
||||
f"Final file '{filepath}' is outside of the intended download directory '{self.download_dir}'."
|
||||
)
|
||||
self.info.filename = None
|
||||
return
|
||||
|
||||
if filepath.is_file() and filepath.exists():
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -120,6 +120,10 @@ class NFOMakerPP(PostProcessor):
|
|||
return "NFOMaker"
|
||||
|
||||
def run(self, info: dict | None = None) -> tuple[list, dict]:
|
||||
if "fail" == self.mode:
|
||||
msg = "Intentionally failing due to mode=fail."
|
||||
raise Exception(msg)
|
||||
|
||||
if not info:
|
||||
self.report_warning("No info provided to NFO Maker.")
|
||||
return [], {}
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@
|
|||
</td>
|
||||
<td>
|
||||
<div class="progress-bar is-unselectable">
|
||||
<div class="progress-percentage">{{ updateProgress(item) }}</div>
|
||||
<div class="progress-percentage" v-html="updateProgress(item)" />
|
||||
<div class="progress" :style="{ width: percentPipe(item.percent as number) + '%' }"></div>
|
||||
</div>
|
||||
</td>
|
||||
|
|
@ -247,7 +247,7 @@
|
|||
<div class="columns is-multiline is-mobile">
|
||||
<div class="column is-12">
|
||||
<div class="progress-bar is-unselectable">
|
||||
<div class="progress-percentage">{{ updateProgress(item) }}</div>
|
||||
<div class="progress-percentage" v-html="updateProgress(item)" />
|
||||
<div class="progress" :style="{ width: percentPipe(item.percent as number) + '%' }"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -600,7 +600,7 @@ const updateProgress = (item: StoreItem): string => {
|
|||
|
||||
if ('postprocessing' === item.status) {
|
||||
if (item.postprocessor) {
|
||||
return `PP Running: ${item.postprocessor}`
|
||||
return `<i class="fa fa-cog fa-spin"></i> PP: ${item.postprocessor}`
|
||||
}
|
||||
return 'Post-processors are running.'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,22 +75,31 @@ const sources: EmbedSource[] = [
|
|||
url: "https://drive.google.com/file/d/{id}/preview",
|
||||
regex: /https?:\/\/(?:www\.)?drive\.google\.com\/file\/d\/(?<id>[^/?#&]+)/,
|
||||
},
|
||||
{
|
||||
name: "fbc_sites",
|
||||
url: "{domain}/e/{id}",
|
||||
regex: /(?<domain>(.+?))\/(?:api\/tokens|f)\/(?<id>fbc_[A-Za-z0-9_-]{22})\/?/,
|
||||
},
|
||||
]
|
||||
|
||||
const isEmbedable = (url: string): boolean => sources.some(source => source.regex.test(url))
|
||||
|
||||
const getEmbedable = (url: string): string | null => {
|
||||
const source = sources.find(source => source.regex.test(url))
|
||||
if (!source) {
|
||||
return null
|
||||
for (const source of sources) {
|
||||
const match = source.regex.exec(url)
|
||||
if (!match?.groups) {
|
||||
continue
|
||||
}
|
||||
|
||||
const replacements: Record<string, string> = {
|
||||
...match.groups,
|
||||
origin: window.location.origin,
|
||||
}
|
||||
|
||||
return source.url.replace(/\{(\w+)\}/g, (_, key) => replacements[key] ?? `{${key}}`)
|
||||
}
|
||||
|
||||
const match = source.regex.exec(url)
|
||||
if (!match || !match.groups?.id) {
|
||||
return null
|
||||
}
|
||||
|
||||
return source.url.replace(/\{origin\}/g, window.location.origin).replace(/\{id\}/g, match.groups.id)
|
||||
return null
|
||||
}
|
||||
|
||||
export { isEmbedable, getEmbedable }
|
||||
|
|
|
|||
|
|
@ -213,11 +213,7 @@ const encodePath = (item: string): string => {
|
|||
processed = encodeURIComponent(processed)
|
||||
|
||||
const placeholderRegex = new RegExp(`${_PREFIX.replace(/_/g, '_')}(\\d+)${_SUFFIX.replace(/_/g, '_')}`, 'g')
|
||||
processed = processed.replace(placeholderRegex, (_match, index: string) => {
|
||||
return placeholders[parseInt(index)] || ''
|
||||
})
|
||||
|
||||
return processed
|
||||
return processed.replace(placeholderRegex, (_match, index: string) => placeholders[parseInt(index)] || '')
|
||||
}).join('/')
|
||||
}
|
||||
|
||||
|
|
@ -255,7 +251,7 @@ const request = (url: string, options: RequestInit & { timeout?: number } = {}):
|
|||
if (typeof timeout === 'number' && timeout > 0) {
|
||||
controller = new AbortController()
|
||||
fetchOptions.signal = controller.signal
|
||||
timer = setTimeout(() => controller!.abort(`Request timed out.`), timeout*1000)
|
||||
timer = setTimeout(() => controller!.abort(`Request timed out.`), timeout * 1000)
|
||||
}
|
||||
|
||||
return fetch(url.startsWith('/') ? uri(url) : url, fetchOptions).finally(() => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue