Merge pull request #261 from arabcoders/dev

restore message about live stream not being live yet.
This commit is contained in:
Abdulmohsen 2025-04-21 20:53:59 +03:00 committed by GitHub
commit 53d3b3c81d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 50 additions and 7 deletions

View file

@ -280,6 +280,17 @@ inside the `/config` directory named `yt-dlp` so, the path will be `/config/yt-d
Once you have installed the plugins, restart the container and the plugins will be auto-loaded on demand.
# How to load random backgrounds from WatchState or any other source?
YTPTube can be configured to pull random background images from different sources, including `WatchState` which is another
project of mine, simply change the `YTP_PICTURES_BACKENDS` environment variable to the following url
```env
YTP_PICTURES_BACKENDS=https://watchstate.ip/v1/api/system/images/background?apikey=[api_key]
```
Where `[api_key]` is the api key you get from your WatchState instance.
# The origin of the project.
The project first started as a fork [meTube](https://github.com/alexta69/metube), since then it has been completely

View file

@ -18,7 +18,8 @@ from .AsyncPool import AsyncPool
from .config import Config
from .DataStore import DataStore
from .Download import Download
from .Events import EventBus, Events, info
from .Events import EventBus, Events
from .Events import warning as event_warning
from .ItemDTO import Item, ItemDTO
from .Presets import Presets
from .Scheduler import Scheduler
@ -313,22 +314,21 @@ class DownloadQueue(metaclass=Singleton):
dlInfo: Download = Download(info=dl, info_dict=entry)
if dlInfo.info.live_in or "is_upcoming" == entry.get("live_status"):
dlInfo.info.status = "not_live"
itemDownload = self.done.put(dlInfo)
NotifyEvent = Events.COMPLETED
log_message = f"{dl.title or dl.id or dl._id}: stream is not live yet."
if dlInfo.info.live_in:
log_message += f" Will start in {dlInfo.info.live_in}."
dlInfo.info.status = "not_live"
dlInfo.info.msg = "Stream is not live yet."
itemDownload = self.done.put(dlInfo)
elif len(entry.get("formats", [])) < 1:
availability = entry.get("availability", "public")
msg = "No formats found."
if "public" != availability:
if availability and availability not in ("public",):
msg += f" Availability is set for '{availability}'."
dlInfo.info.status = "error"
dlInfo.info.error = msg
itemDownload = self.done.put(dlInfo)
NotifyEvent = Events.COMPLETED
await self._notify.emit(Events.LOG_WARNING, data=event_warning(msg))
elif self.config.allow_manifestless is False and is_manifestless is True:
dlInfo.info.status = "error"
dlInfo.info.error = "Video is in post-live manifestless mode."
@ -416,6 +416,7 @@ class DownloadQueue(metaclass=Singleton):
if downloaded is True and id_dict:
message = f"This url with ID '{id_dict.get('id')}' has been downloaded already and recorded in archive."
LOG.info(message)
await self._notify.emit(Events.LOG_WARNING, data=event_warning(message))
return {"status": "error", "msg": message}
started = time.perf_counter()

View file

@ -25,6 +25,21 @@ def error(msg: str, data: dict | None = None) -> dict:
return message("error", msg, data)
def warning(msg: str, data: dict | None = None) -> dict:
"""
Create an error message.
Args:
msg (str): The message.
data (dict|None): The data to include in the message.
Returns:
dict : The message wrapped in a dictionary.
"""
return message("warning", msg, data)
def info(msg: str, data: dict | None = None) -> dict:
"""
Create an info message.
@ -87,6 +102,8 @@ class Events:
CLEARED = "cleared"
ERROR = "error"
LOG_INFO = "log_info"
LOG_WARNING = "log_warning"
LOG_ERROR = "log_error"
LOG_SUCCESS = "log_success"
INITIAL_DATA = "initial_data"
@ -139,6 +156,8 @@ class Events:
Events.ADDED,
Events.ERROR,
Events.LOG_INFO,
Events.LOG_WARNING,
Events.LOG_ERROR,
Events.LOG_SUCCESS,
Events.COMPLETED,
Events.CANCELLED,

View file

@ -96,6 +96,8 @@ class NotificationEvents:
CLEARED = Events.CLEARED
LOG_INFO = Events.LOG_INFO
LOG_SUCCESS = Events.LOG_SUCCESS
LOG_WARNING = Events.LOG_WARNING
LOG_ERROR = Events.LOG_ERROR
TEST = Events.TEST
@staticmethod

View file

@ -52,6 +52,16 @@ export const useSocketStore = defineStore('socket', () => {
toast.success(json?.message);
});
socket.value.on('log_warning', stream => {
const json = JSON.parse(stream);
toast.warning(json?.message);
});
socket.value.on('log_error', stream => {
const json = JSON.parse(stream);
toast.error(json?.message);
});
socket.value.on('completed', stream => {
const item = JSON.parse(stream);