mirror of
https://github.com/dmunozv04/iSponsorBlockTV.git
synced 2025-12-21 06:58:30 +03:00
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
This commit is contained in:
@@ -7,4 +7,4 @@ rich==13.7.1
|
|||||||
ssdp==1.3.0
|
ssdp==1.3.0
|
||||||
textual==0.58.0
|
textual==0.58.0
|
||||||
textual-slider==0.1.1
|
textual-slider==0.1.1
|
||||||
xmltodict==0.13.0
|
xmltodict==0.13.0
|
||||||
|
|||||||
@@ -7,8 +7,9 @@ from . import api_helpers, ytlounge
|
|||||||
|
|
||||||
async def pair_device(web_session):
|
async def pair_device(web_session):
|
||||||
try:
|
try:
|
||||||
lounge_controller = ytlounge.YtLoungeApi("iSponsorBlockTV",
|
lounge_controller = ytlounge.YtLoungeApi(
|
||||||
web_session=web_session)
|
"iSponsorBlockTV", web_session=web_session
|
||||||
|
)
|
||||||
pairing_code = input(
|
pairing_code = input(
|
||||||
"Enter pairing code (found in Settings - Link with TV code): "
|
"Enter pairing code (found in Settings - Link with TV code): "
|
||||||
)
|
)
|
||||||
@@ -45,16 +46,15 @@ def main(config, debug: bool) -> None:
|
|||||||
" \nhttps://github.com/dmunozv04/iSponsorBlockTV/wiki/Migrate-from-V1-to-V2"
|
" \nhttps://github.com/dmunozv04/iSponsorBlockTV/wiki/Migrate-from-V1-to-V2"
|
||||||
)
|
)
|
||||||
if (
|
if (
|
||||||
input(
|
input(
|
||||||
"Do you want to remove the legacy 'atvs' entry (the app won't start"
|
"Do you want to remove the legacy 'atvs' entry (the app won't start"
|
||||||
" with it present)? (y/n) "
|
" with it present)? (y/n) "
|
||||||
)
|
)
|
||||||
== "y"
|
== "y"
|
||||||
):
|
):
|
||||||
del config["atvs"]
|
del config["atvs"]
|
||||||
devices = config.devices
|
devices = config.devices
|
||||||
while not input(
|
while not input(f"Paired with {len(devices)} Device(s). Add more? (y/n) ") == "n":
|
||||||
f"Paired with {len(devices)} Device(s). Add more? (y/n) ") == "n":
|
|
||||||
task = loop.create_task(pair_device(web_session))
|
task = loop.create_task(pair_device(web_session))
|
||||||
loop.run_until_complete(task)
|
loop.run_until_complete(task)
|
||||||
device = task.result()
|
device = task.result()
|
||||||
@@ -68,10 +68,10 @@ def main(config, debug: bool) -> None:
|
|||||||
apikey = input("Enter your API key: ")
|
apikey = input("Enter your API key: ")
|
||||||
else:
|
else:
|
||||||
if (
|
if (
|
||||||
input(
|
input(
|
||||||
"API key only needed for the channel whitelist function. Add it? (y/n) "
|
"API key only needed for the channel whitelist function. Add it? (y/n) "
|
||||||
)
|
)
|
||||||
== "y"
|
== "y"
|
||||||
):
|
):
|
||||||
print(
|
print(
|
||||||
"Get youtube apikey here:"
|
"Get youtube apikey here:"
|
||||||
@@ -82,8 +82,7 @@ def main(config, debug: bool) -> None:
|
|||||||
|
|
||||||
skip_categories = config.skip_categories
|
skip_categories = config.skip_categories
|
||||||
if skip_categories:
|
if skip_categories:
|
||||||
if input(
|
if input("Skip categories already specified. Change them? (y/n) ") == "y":
|
||||||
"Skip categories already specified. Change them? (y/n) ") == "y":
|
|
||||||
categories = input(
|
categories = input(
|
||||||
"Enter skip categories (space or comma sepparated) Options: [sponsor"
|
"Enter skip categories (space or comma sepparated) Options: [sponsor"
|
||||||
" selfpromo exclusive_access interaction poi_highlight intro outro"
|
" selfpromo exclusive_access interaction poi_highlight intro outro"
|
||||||
@@ -107,9 +106,8 @@ def main(config, debug: bool) -> None:
|
|||||||
|
|
||||||
channel_whitelist = config.channel_whitelist
|
channel_whitelist = config.channel_whitelist
|
||||||
if (
|
if (
|
||||||
input(
|
input("Do you want to whitelist any channels from being ad-blocked? (y/n) ")
|
||||||
"Do you want to whitelist any channels from being ad-blocked? (y/n) ")
|
== "y"
|
||||||
== "y"
|
|
||||||
):
|
):
|
||||||
if not apikey:
|
if not apikey:
|
||||||
print(
|
print(
|
||||||
@@ -164,7 +162,7 @@ def main(config, debug: bool) -> None:
|
|||||||
"Do you want to report skipped segments to sponsorblock. Only the segment"
|
"Do you want to report skipped segments to sponsorblock. Only the segment"
|
||||||
" UUID will be sent? (y/n) "
|
" UUID will be sent? (y/n) "
|
||||||
)
|
)
|
||||||
== "n"
|
== "n"
|
||||||
)
|
)
|
||||||
print("Config finished")
|
print("Config finished")
|
||||||
config.save()
|
config.save()
|
||||||
|
|||||||
@@ -336,7 +336,9 @@ class AddDevice(ModalWithClickExit):
|
|||||||
@on(Button.Pressed, "#add-device-pin-add-button")
|
@on(Button.Pressed, "#add-device-pin-add-button")
|
||||||
async def handle_add_device_pin(self) -> None:
|
async def handle_add_device_pin(self) -> None:
|
||||||
self.query_one("#add-device-pin-add-button").disabled = True
|
self.query_one("#add-device-pin-add-button").disabled = True
|
||||||
lounge_controller = ytlounge.YtLoungeApi("iSponsorBlockTV", web_session=self.web_session)
|
lounge_controller = ytlounge.YtLoungeApi(
|
||||||
|
"iSponsorBlockTV", web_session=self.web_session
|
||||||
|
)
|
||||||
pairing_code = self.query_one("#pairing-code-input").value
|
pairing_code = self.query_one("#pairing-code-input").value
|
||||||
pairing_code = int(
|
pairing_code = int(
|
||||||
pairing_code.replace("-", "").replace(" ", "")
|
pairing_code.replace("-", "").replace(" ", "")
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from aiohttp import ClientSession
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import pyytlounge
|
import pyytlounge
|
||||||
|
from aiohttp import ClientSession
|
||||||
|
|
||||||
from .constants import youtube_client_blacklist
|
from .constants import youtube_client_blacklist
|
||||||
|
|
||||||
@@ -10,8 +10,14 @@ create_task = asyncio.create_task
|
|||||||
|
|
||||||
|
|
||||||
class YtLoungeApi(pyytlounge.YtLoungeApi):
|
class YtLoungeApi(pyytlounge.YtLoungeApi):
|
||||||
def __init__(self, screen_id, config=None, api_helper=None, logger=None,
|
def __init__(
|
||||||
web_session: ClientSession = None):
|
self,
|
||||||
|
screen_id,
|
||||||
|
config=None,
|
||||||
|
api_helper=None,
|
||||||
|
logger=None,
|
||||||
|
web_session: ClientSession = None,
|
||||||
|
):
|
||||||
super().__init__("iSponsorBlockTV", logger=logger)
|
super().__init__("iSponsorBlockTV", logger=logger)
|
||||||
if web_session is not None:
|
if web_session is not None:
|
||||||
self.session = web_session # And use the one we passed
|
self.session = web_session # And use the one we passed
|
||||||
@@ -79,13 +85,13 @@ class YtLoungeApi(pyytlounge.YtLoungeApi):
|
|||||||
self.logger.info("Ad has ended, unmuting")
|
self.logger.info("Ad has ended, unmuting")
|
||||||
create_task(self.mute(False, override=True))
|
create_task(self.mute(False, override=True))
|
||||||
elif (
|
elif (
|
||||||
self.skip_ads and data["isSkipEnabled"] == "true"
|
self.skip_ads and data["isSkipEnabled"] == "true"
|
||||||
): # YouTube uses strings for booleans
|
): # YouTube uses strings for booleans
|
||||||
self.logger.info("Ad can be skipped, skipping")
|
self.logger.info("Ad can be skipped, skipping")
|
||||||
create_task(self.skip_ad())
|
create_task(self.skip_ad())
|
||||||
create_task(self.mute(False, override=True))
|
create_task(self.mute(False, override=True))
|
||||||
elif (
|
elif (
|
||||||
self.mute_ads
|
self.mute_ads
|
||||||
): # Seen multiple other adStates, assuming they are all ads
|
): # Seen multiple other adStates, assuming they are all ads
|
||||||
self.logger.info("Ad has started, muting")
|
self.logger.info("Ad has started, muting")
|
||||||
create_task(self.mute(True, override=True))
|
create_task(self.mute(True, override=True))
|
||||||
@@ -96,7 +102,7 @@ class YtLoungeApi(pyytlounge.YtLoungeApi):
|
|||||||
# Gets segments for the next video before it starts playing
|
# Gets segments for the next video before it starts playing
|
||||||
elif event_type == "autoplayUpNext":
|
elif event_type == "autoplayUpNext":
|
||||||
if len(args) > 0 and (
|
if len(args) > 0 and (
|
||||||
vid_id := args[0]["videoId"]
|
vid_id := args[0]["videoId"]
|
||||||
): # if video id is not empty
|
): # if video id is not empty
|
||||||
self.logger.info(f"Getting segments for next video: {vid_id}")
|
self.logger.info(f"Getting segments for next video: {vid_id}")
|
||||||
create_task(self.api_helper.get_segments(vid_id))
|
create_task(self.api_helper.get_segments(vid_id))
|
||||||
@@ -109,13 +115,13 @@ class YtLoungeApi(pyytlounge.YtLoungeApi):
|
|||||||
self.logger.info(f"Getting segments for next video: {vid_id}")
|
self.logger.info(f"Getting segments for next video: {vid_id}")
|
||||||
create_task(self.api_helper.get_segments(vid_id))
|
create_task(self.api_helper.get_segments(vid_id))
|
||||||
elif (
|
elif (
|
||||||
self.skip_ads and data["isSkipEnabled"] == "true"
|
self.skip_ads and data["isSkipEnabled"] == "true"
|
||||||
): # YouTube uses strings for booleans
|
): # YouTube uses strings for booleans
|
||||||
self.logger.info("Ad can be skipped, skipping")
|
self.logger.info("Ad can be skipped, skipping")
|
||||||
create_task(self.skip_ad())
|
create_task(self.skip_ad())
|
||||||
create_task(self.mute(False, override=True))
|
create_task(self.mute(False, override=True))
|
||||||
elif (
|
elif (
|
||||||
self.mute_ads
|
self.mute_ads
|
||||||
): # Seen multiple other adStates, assuming they are all ads
|
): # Seen multiple other adStates, assuming they are all ads
|
||||||
self.logger.info("Ad has started, muting")
|
self.logger.info("Ad has started, muting")
|
||||||
create_task(self.mute(True, override=True))
|
create_task(self.mute(True, override=True))
|
||||||
@@ -126,8 +132,7 @@ class YtLoungeApi(pyytlounge.YtLoungeApi):
|
|||||||
for device in devices:
|
for device in devices:
|
||||||
if device["type"] == "LOUNGE_SCREEN":
|
if device["type"] == "LOUNGE_SCREEN":
|
||||||
device_info = json.loads(device.get("deviceInfo", "{}"))
|
device_info = json.loads(device.get("deviceInfo", "{}"))
|
||||||
if device_info.get("clientName",
|
if device_info.get("clientName", "") in youtube_client_blacklist:
|
||||||
"") in youtube_client_blacklist:
|
|
||||||
self._sid = None
|
self._sid = None
|
||||||
self._gsession = None # Force disconnect
|
self._gsession = None # Force disconnect
|
||||||
|
|
||||||
@@ -139,8 +144,7 @@ class YtLoungeApi(pyytlounge.YtLoungeApi):
|
|||||||
create_task(self.play_video(video_id_saved))
|
create_task(self.play_video(video_id_saved))
|
||||||
elif event_type == "loungeScreenDisconnected":
|
elif event_type == "loungeScreenDisconnected":
|
||||||
data = args[0]
|
data = args[0]
|
||||||
if data[
|
if data["reason"] == "disconnectedByUserScreenInitiated": # Short playing?
|
||||||
"reason"] == "disconnectedByUserScreenInitiated": # Short playing?
|
|
||||||
self.shorts_disconnected = True
|
self.shorts_disconnected = True
|
||||||
|
|
||||||
super()._process_event(event_id, event_type, args)
|
super()._process_event(event_id, event_type, args)
|
||||||
@@ -158,20 +162,17 @@ class YtLoungeApi(pyytlounge.YtLoungeApi):
|
|||||||
mute_str = "true"
|
mute_str = "true"
|
||||||
else:
|
else:
|
||||||
mute_str = "false"
|
mute_str = "false"
|
||||||
if override or not (
|
if override or not (self.volume_state.get("muted", "false") == mute_str):
|
||||||
self.volume_state.get("muted", "false") == mute_str):
|
|
||||||
self.volume_state["muted"] = mute_str
|
self.volume_state["muted"] = mute_str
|
||||||
# YouTube wants the volume when unmuting, so we send it
|
# YouTube wants the volume when unmuting, so we send it
|
||||||
await super()._command(
|
await super()._command(
|
||||||
"setVolume",
|
"setVolume",
|
||||||
{"volume": self.volume_state.get("volume", 100),
|
{"volume": self.volume_state.get("volume", 100), "muted": mute_str},
|
||||||
"muted": mute_str},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def set_auto_play_mode(self, enabled: bool):
|
async def set_auto_play_mode(self, enabled: bool):
|
||||||
await super()._command(
|
await super()._command(
|
||||||
"setAutoplayMode",
|
"setAutoplayMode", {"autoplayMode": "ENABLED" if enabled else "DISABLED"}
|
||||||
{"autoplayMode": "ENABLED" if enabled else "DISABLED"}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def play_video(self, video_id: str) -> bool:
|
async def play_video(self, video_id: str) -> bool:
|
||||||
|
|||||||
Reference in New Issue
Block a user