finalizing removed features
This commit is contained in:
parent
db57d6de11
commit
ed4bb1e440
8 changed files with 16 additions and 44 deletions
23
FAQ.md
23
FAQ.md
|
|
@ -18,7 +18,6 @@ or the `environment:` section in `compose.yaml` file.
|
|||
| YTP_CONFIG_PATH | Path to where the config files will be stored. | `/config` |
|
||||
| YTP_TEMP_PATH | Path to where tmp files are stored. | `/tmp` |
|
||||
| YTP_TEMP_KEEP | Whether to keep the Individual video temp directory or remove it | `false` |
|
||||
| YTP_KEEP_ARCHIVE | Keep history of downloaded videos | `true` |
|
||||
| YTP_HOST | Which IP address to bind to | `0.0.0.0` |
|
||||
| YTP_PORT | Which port to bind to | `8081` |
|
||||
| YTP_LOG_LEVEL | Log level | `info` |
|
||||
|
|
@ -27,7 +26,6 @@ or the `environment:` section in `compose.yaml` file.
|
|||
| YTP_ACCESS_LOG | Whether to log access to the web server | `true` |
|
||||
| YTP_DEBUG | Whether to turn on debug mode | `false` |
|
||||
| YTP_DEBUGPY_PORT | The port to use for the debugpy debugger | `5678` |
|
||||
| YTP_SOCKET_TIMEOUT | The timeout for the yt-dlp socket connection variable | `30` |
|
||||
| YTP_EXTRACT_INFO_TIMEOUT | The timeout for extracting video information | `70` |
|
||||
| YTP_DB_FILE | The path to the SQLite database file | `{config_path}/ytptube.db` |
|
||||
| YTP_UI_UPDATE_TITLE | Whether to update the title of the page with the current stats | `true` |
|
||||
|
|
@ -196,27 +194,6 @@ you and also enable the fallback by using the follow extractor args
|
|||
Use this alternative extractor args in case the extractor fails to get the pot tokens from the bgutil provider server.
|
||||
For more information please visit [bgutil-ytdlp-pot-provider](https://github.com/Brainicism/bgutil-ytdlp-pot-provider) project.
|
||||
|
||||
# How to set global settings for yt-dlp?
|
||||
|
||||
You can create a file named `ytdlp.cli` in the `/config` folder, and add your desired global settings there.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> We strongly recommend to use presets instead of global settings, as presets are more convenient.
|
||||
|
||||
The `ytdlp.cli` file usage is deprecated and likely will be removed in `v1.0.0` release.
|
||||
|
||||
# Updating yt-dlp
|
||||
|
||||
The engine which powers the actual video downloads in YTPTube is [yt-dlp](https://github.com/yt-dlp/yt-dlp). Since video
|
||||
sites regularly updated, frequent updates of yt-dlp are required to keep up.
|
||||
|
||||
We have added the `YTP_YTDLP_AUTO_UPDATE` environment variable, which is enabled by default. This feature allows the
|
||||
container to automatically update `yt-dlp` to the latest version whenever the container starts. If a new version is
|
||||
available, it will be downloaded and applied automatically. To disable this automatic update, set the
|
||||
`YTP_YTDLP_AUTO_UPDATE` environment variable to `false`.
|
||||
|
||||
We will no longer release new versions of YTPTube for every new version of yt-dlp.
|
||||
|
||||
# Troubleshooting and submitting issues
|
||||
|
||||
Before asking a question or submitting an issue for YTPTube, please remember that YTPTube is only a thin wrapper for
|
||||
|
|
|
|||
|
|
@ -180,7 +180,6 @@ class Download:
|
|||
try:
|
||||
params: dict = (
|
||||
self.info.get_ytdlp_opts()
|
||||
.add({"break_on_existing": True})
|
||||
.add(
|
||||
config={
|
||||
"color": "no_color",
|
||||
|
|
|
|||
|
|
@ -413,7 +413,7 @@ class DownloadQueue(metaclass=Singleton):
|
|||
|
||||
try:
|
||||
_item: Download = self.done.get(key=entry.get("id"), url=entry.get("webpage_url") or entry.get("url"))
|
||||
err_msg: str = f"Item '{_item.info.id}' - '{_item.info.title}' already exists. Removing from history."
|
||||
err_msg: str = f"Removing {_item.info.name()} from history list."
|
||||
LOG.warning(err_msg)
|
||||
await self.clear([_item.info._id], remove_file=False)
|
||||
except KeyError:
|
||||
|
|
@ -423,7 +423,7 @@ class DownloadQueue(metaclass=Singleton):
|
|||
_item: Download = self.queue.get(
|
||||
key=str(entry.get("id")), url=str(entry.get("webpage_url") or entry.get("url"))
|
||||
)
|
||||
err_msg: str = f"Item ID '{_item.info.id}' - '{_item.info.title}' already in download queue."
|
||||
err_msg: str = f"Item {_item.info.name()} is already in download queue."
|
||||
LOG.info(err_msg)
|
||||
return {"status": "error", "msg": err_msg}
|
||||
except KeyError:
|
||||
|
|
@ -977,7 +977,7 @@ class DownloadQueue(metaclass=Singleton):
|
|||
|
||||
if entry.info.status not in ("finished", "skip", "cancelled"):
|
||||
if not entry.info.error:
|
||||
entry.info.error = f"Download failed with status '{entry.info.status}'."
|
||||
entry.info.error = f"Download ended with unexpected status '{entry.info.status}'."
|
||||
entry.info.status = "error"
|
||||
except Exception as e:
|
||||
entry.info.status = "error"
|
||||
|
|
@ -1005,9 +1005,11 @@ class DownloadQueue(metaclass=Singleton):
|
|||
if entry.info.status == "finished" and entry.info.filename:
|
||||
nTitle = "Download Completed"
|
||||
nMessage = f"Completed '{entry.info.title}' download."
|
||||
if entry.info.is_archivable and not entry.info.is_archived:
|
||||
entry.info.is_archived = True
|
||||
|
||||
_tasks.append(self._notify.emit(Events.ITEM_COMPLETED, data=entry.info, title=nTitle, message=nMessage))
|
||||
|
||||
await asyncio.sleep(0.5)
|
||||
self.done.put(entry)
|
||||
_tasks.append(
|
||||
self._notify.emit(
|
||||
|
|
@ -1115,7 +1117,6 @@ class DownloadQueue(metaclass=Singleton):
|
|||
)
|
||||
)
|
||||
except Exception as e:
|
||||
item.info.archive_status()
|
||||
self.done.put(item)
|
||||
LOG.exception(e)
|
||||
LOG.error(f"Failed to retry item '{item_ref}'. {e!s}")
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ REMOVE_KEYS: list = [
|
|||
|
||||
YTDLP_INFO_CLS: YTDLP = None
|
||||
|
||||
ALLOWED_SUBS_EXTENSIONS: tuple[str, str, str] = (".srt", ".vtt", ".ass")
|
||||
ALLOWED_SUBS_EXTENSIONS: set[str] = {".srt", ".vtt", ".ass"}
|
||||
|
||||
FILES_TYPE: list = [
|
||||
{"rx": re.compile(r"\.(avi|ts|mkv|mp4|mp3|mpv|ogm|m4v|webm|m4b)$", re.IGNORECASE), "type": "video"},
|
||||
|
|
|
|||
|
|
@ -386,23 +386,18 @@ class Config:
|
|||
|
||||
opts_file: Path = Path(self.config_path) / "ytdlp.cli"
|
||||
if opts_file.exists() and opts_file.stat().st_size > 2:
|
||||
LOG.error("The global config file 'ytdlp.cli' file is deprecated and will be removed in future releases.")
|
||||
LOG.warning(
|
||||
"Usage of 'ytdlp.cli' global config file is deprecated and will be removed in future releases. please migrate to presets."
|
||||
)
|
||||
with open(opts_file) as f:
|
||||
self.ytdlp_cli = f.read().strip()
|
||||
if self.ytdlp_cli:
|
||||
self._ytdlp_cli_mutable = self.ytdlp_cli
|
||||
try:
|
||||
removed_options: list = []
|
||||
arg_converter(args=self.ytdlp_cli, level=True, removed_options=removed_options)
|
||||
if len(removed_options) > 0:
|
||||
LOG.warning(
|
||||
"Removed the following options: '%s' from '%s'", ", ".join(removed_options), opts_file
|
||||
)
|
||||
arg_converter(args=self.ytdlp_cli, level=True)
|
||||
except Exception as e:
|
||||
msg = f"Failed to parse yt-dlp cli options from '{opts_file}'. '{e!s}'."
|
||||
raise ValueError(msg) from e
|
||||
else:
|
||||
LOG.warning(f"Empty yt-dlp custom options file '{opts_file}'.")
|
||||
|
||||
self._ytdlp_cli_mutable += f"\n--socket-timeout {self.socket_timeout}"
|
||||
|
||||
|
|
@ -513,8 +508,8 @@ class Config:
|
|||
Returns:
|
||||
dict: The yt-dlp command line options.
|
||||
|
||||
Todo:
|
||||
Rename to get_ytdlp_opts() to match the system.
|
||||
Deprecated:
|
||||
Usage of global ytdlp.cli file is deprecated, please use presets instead.
|
||||
|
||||
"""
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ from pathlib import Path
|
|||
from yt_dlp.networking.impersonate import ImpersonateTarget
|
||||
from yt_dlp.utils import DateRange
|
||||
|
||||
from .ItemDTO import ItemDTO
|
||||
|
||||
|
||||
class Encoder(json.JSONEncoder):
|
||||
"""
|
||||
|
|
@ -16,6 +14,8 @@ class Encoder(json.JSONEncoder):
|
|||
"""
|
||||
|
||||
def default(self, o):
|
||||
from .ItemDTO import ItemDTO
|
||||
|
||||
if isinstance(o, Path):
|
||||
return str(o)
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,6 @@ class YoutubeHandler:
|
|||
has_items = True
|
||||
|
||||
if archive_id in YoutubeHandler.queued:
|
||||
LOG.debug(f"Item '{vid}' is already queued for download. Skipping.")
|
||||
continue
|
||||
|
||||
items.append({"id": vid, "url": url, "title": title, "published": published, "archive_id": archive_id})
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@
|
|||
The <strong>Basic mode</strong> (which limited the interface to the new download form) is being removed.
|
||||
Everything except what is available behind configurable flag will become part of the standard interface.
|
||||
</li>
|
||||
<li>The <strong>archive.manual.log</strong> feature has been removed.</li>
|
||||
</ul>
|
||||
<p>
|
||||
These changes help reduce confusion from multiple sources of truth. Going forward, <strong>presets</strong>
|
||||
|
|
|
|||
Loading…
Reference in a new issue