feat: make mpv player better

This commit is contained in:
Benex254
2024-08-07 12:57:59 +03:00
parent 8d962b1ccd
commit 0a11c0f779

View File

@@ -39,7 +39,9 @@ class MpvPlayer(object):
translation_type = config.translation_type
anime_provider = config.anime_provider
# next or prev
if type == "next":
self.mpv_player.print_text("Fetching next episode")
next_episode = episodes.index(episode_number) + 1
if next_episode >= len(episodes):
next_episode = len(episodes) - 1
@@ -47,12 +49,14 @@ class MpvPlayer(object):
episode_number = anilist_config.episode_number
config.update_watch_history(anime_id, episodes[next_episode])
else:
self.mpv_player.print_text("Fetching previous episode")
prev_episode = episodes.index(episode_number) - 1
if prev_episode <= 0:
prev_episode = 0
anilist_config.episode_number = episodes[prev_episode]
episode_number = anilist_config.episode_number
config.update_watch_history(anime_id, episodes[prev_episode])
# update episode progress
if config.user and episode_number:
AniList.update_anime_list(
{
@@ -60,6 +64,7 @@ class MpvPlayer(object):
"progress": episode_number,
}
)
# get them juicy streams
episode_streams = anime_provider.get_episode_streams(
anime,
episode_number,
@@ -70,9 +75,9 @@ class MpvPlayer(object):
self.mpv_player.print_text("No streams were found")
return None
# always select the first
selected_server = next(episode_streams)
self.current_media_title = selected_server["episode_title"]
self.mpv_player.script_message(f"{self.current_media_title}")
links = selected_server["links"]
if quality > len(links) - 1:
quality = config.quality = len(links) - 1
@@ -87,12 +92,17 @@ class MpvPlayer(object):
self.anime_provider = anime_provider
self.anilist_config = anilist_config
self.config = config
self.last_stop_time: str = "0"
self.last_total_time: str = "0"
self.last_stop_time_secs = 0
self.last_total_time_secs = 0
self.current_media_title = ""
mpv_player = mpv.MPV(
config=True,
input_default_bindings=True,
input_vo_keyboard=True,
osc=True,
ytdl=True,
)
mpv_player.title = title
@@ -103,6 +113,16 @@ class MpvPlayer(object):
mpv_player.loadfile(url, options=f"title={self.current_media_title}")
mpv_player.title = self.current_media_title
# TODO: select episode from mpv
#
# @mpv_player.on_key_press("shift+e")
# def _episodes():
# mpv_player
# url = self.get_episode("next")
# if url:
# mpv_player.loadfile(url, options=f"title={self.current_media_title}")
# mpv_player.title = self.current_media_title
@mpv_player.on_key_press("shift+p")
def _previous_episode():
url = self.get_episode("previous")
@@ -115,6 +135,7 @@ class MpvPlayer(object):
if len(args) > 1:
value = args[1]
if value is not None:
self.last_stop_time_secs = value
self.last_stop_time = format_time(value)
@mpv_player.property_observer("time-remaining")
@@ -122,10 +143,43 @@ class MpvPlayer(object):
if len(args) > 1:
value = args[1]
if value is not None:
value += self.last_stop_time_secs
self.last_total_time = format_time(value)
print(self.last_total_time)
# TODO: custom skip functionality based on chapterskip.
#
# @mpv_player.property_observer("chapter-number")
# def chapterskip(_, current_chapter: int):
# mpv_player
# chapters = mpv_player..get_property_native("chapter-list")
# skipped={"1":1}
# skip = false
# for i, chapter in enumerate(chapters):
# if (not options.skip_once or not skipped[i]) and matches(i, chapter.title):
# if i == current_chapter + 1 or skip == i - 1:
# if skip:
# skipped[skip] = true
# skip = i
# elif skip:
# mpv_player.set_property("time-pos", chapter.time)
# skipped[skip] = true
# return
# if skip:
# if mpv_player.get_property_native("playlist-count") == mpv_player.get_property_native("playlist-pos-1"):
# return self.mpv_player.set_property("time-pos", mpv_player.get_property_native("duration"))
# mpv_player.command("playlist-next")
#
mpv_player.observe_property("time-pos", handle_time_start_update)
mpv_player.observe_property("time-remaining", handle_time_remaining_update)
# mpv_player.observe_property("chapter-number", chapterskip)
# mpv_player.register_event("file-loaded", function() skipped = {} end)
self.mpv_player = mpv_player
return mpv_player
# mpv_player.register_event("file-loaded", function() skipped = {} end)
self.mpv_player = mpv_player
return mpv_player