Merge pull request #261 from arabcoders/dev
restore message about live stream not being live yet.
This commit is contained in:
commit
53d3b3c81d
5 changed files with 50 additions and 7 deletions
11
README.md
11
README.md
|
|
@ -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.
|
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 origin of the project.
|
||||||
|
|
||||||
The project first started as a fork [meTube](https://github.com/alexta69/metube), since then it has been completely
|
The project first started as a fork [meTube](https://github.com/alexta69/metube), since then it has been completely
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@ from .AsyncPool import AsyncPool
|
||||||
from .config import Config
|
from .config import Config
|
||||||
from .DataStore import DataStore
|
from .DataStore import DataStore
|
||||||
from .Download import Download
|
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 .ItemDTO import Item, ItemDTO
|
||||||
from .Presets import Presets
|
from .Presets import Presets
|
||||||
from .Scheduler import Scheduler
|
from .Scheduler import Scheduler
|
||||||
|
|
@ -313,22 +314,21 @@ class DownloadQueue(metaclass=Singleton):
|
||||||
dlInfo: Download = Download(info=dl, info_dict=entry)
|
dlInfo: Download = Download(info=dl, info_dict=entry)
|
||||||
|
|
||||||
if dlInfo.info.live_in or "is_upcoming" == entry.get("live_status"):
|
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
|
NotifyEvent = Events.COMPLETED
|
||||||
log_message = f"{dl.title or dl.id or dl._id}: stream is not live yet."
|
dlInfo.info.status = "not_live"
|
||||||
if dlInfo.info.live_in:
|
dlInfo.info.msg = "Stream is not live yet."
|
||||||
log_message += f" Will start in {dlInfo.info.live_in}."
|
itemDownload = self.done.put(dlInfo)
|
||||||
elif len(entry.get("formats", [])) < 1:
|
elif len(entry.get("formats", [])) < 1:
|
||||||
availability = entry.get("availability", "public")
|
availability = entry.get("availability", "public")
|
||||||
msg = "No formats found."
|
msg = "No formats found."
|
||||||
if "public" != availability:
|
if availability and availability not in ("public",):
|
||||||
msg += f" Availability is set for '{availability}'."
|
msg += f" Availability is set for '{availability}'."
|
||||||
|
|
||||||
dlInfo.info.status = "error"
|
dlInfo.info.status = "error"
|
||||||
dlInfo.info.error = msg
|
dlInfo.info.error = msg
|
||||||
itemDownload = self.done.put(dlInfo)
|
itemDownload = self.done.put(dlInfo)
|
||||||
NotifyEvent = Events.COMPLETED
|
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:
|
elif self.config.allow_manifestless is False and is_manifestless is True:
|
||||||
dlInfo.info.status = "error"
|
dlInfo.info.status = "error"
|
||||||
dlInfo.info.error = "Video is in post-live manifestless mode."
|
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:
|
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."
|
message = f"This url with ID '{id_dict.get('id')}' has been downloaded already and recorded in archive."
|
||||||
LOG.info(message)
|
LOG.info(message)
|
||||||
|
await self._notify.emit(Events.LOG_WARNING, data=event_warning(message))
|
||||||
return {"status": "error", "msg": message}
|
return {"status": "error", "msg": message}
|
||||||
|
|
||||||
started = time.perf_counter()
|
started = time.perf_counter()
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,21 @@ def error(msg: str, data: dict | None = None) -> dict:
|
||||||
return message("error", msg, data)
|
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:
|
def info(msg: str, data: dict | None = None) -> dict:
|
||||||
"""
|
"""
|
||||||
Create an info message.
|
Create an info message.
|
||||||
|
|
@ -87,6 +102,8 @@ class Events:
|
||||||
CLEARED = "cleared"
|
CLEARED = "cleared"
|
||||||
ERROR = "error"
|
ERROR = "error"
|
||||||
LOG_INFO = "log_info"
|
LOG_INFO = "log_info"
|
||||||
|
LOG_WARNING = "log_warning"
|
||||||
|
LOG_ERROR = "log_error"
|
||||||
LOG_SUCCESS = "log_success"
|
LOG_SUCCESS = "log_success"
|
||||||
|
|
||||||
INITIAL_DATA = "initial_data"
|
INITIAL_DATA = "initial_data"
|
||||||
|
|
@ -139,6 +156,8 @@ class Events:
|
||||||
Events.ADDED,
|
Events.ADDED,
|
||||||
Events.ERROR,
|
Events.ERROR,
|
||||||
Events.LOG_INFO,
|
Events.LOG_INFO,
|
||||||
|
Events.LOG_WARNING,
|
||||||
|
Events.LOG_ERROR,
|
||||||
Events.LOG_SUCCESS,
|
Events.LOG_SUCCESS,
|
||||||
Events.COMPLETED,
|
Events.COMPLETED,
|
||||||
Events.CANCELLED,
|
Events.CANCELLED,
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,8 @@ class NotificationEvents:
|
||||||
CLEARED = Events.CLEARED
|
CLEARED = Events.CLEARED
|
||||||
LOG_INFO = Events.LOG_INFO
|
LOG_INFO = Events.LOG_INFO
|
||||||
LOG_SUCCESS = Events.LOG_SUCCESS
|
LOG_SUCCESS = Events.LOG_SUCCESS
|
||||||
|
LOG_WARNING = Events.LOG_WARNING
|
||||||
|
LOG_ERROR = Events.LOG_ERROR
|
||||||
TEST = Events.TEST
|
TEST = Events.TEST
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,16 @@ export const useSocketStore = defineStore('socket', () => {
|
||||||
toast.success(json?.message);
|
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 => {
|
socket.value.on('completed', stream => {
|
||||||
const item = JSON.parse(stream);
|
const item = JSON.parse(stream);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue