49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
from os import execv, fork
|
|
from sys import stderr
|
|
|
|
from inject import autoparams
|
|
|
|
from ytrssil.bindings import setup_dependencies
|
|
from ytrssil.constants import mpv_options
|
|
from ytrssil.fetch import fetch_new_videos
|
|
from ytrssil.query import query
|
|
from ytrssil.repository import ChannelRepository
|
|
|
|
|
|
class NoVideoSelected(Exception):
|
|
pass
|
|
|
|
|
|
@autoparams()
|
|
def run(repository_manager: ChannelRepository) -> None:
|
|
with repository_manager as repository:
|
|
channels, new_videos = fetch_new_videos()
|
|
selected_videos = query(new_videos)
|
|
if not selected_videos:
|
|
raise NoVideoSelected
|
|
|
|
video_urls = [video.url for video in selected_videos]
|
|
cmd = ['/usr/bin/mpv', *mpv_options, *video_urls]
|
|
if (fork() == 0):
|
|
execv(cmd[0], cmd)
|
|
|
|
for video in selected_videos:
|
|
selected_channel = channels[video.channel_id]
|
|
selected_channel.mark_video_as_watched(video)
|
|
repository.update_video(video, True)
|
|
|
|
|
|
def main() -> int:
|
|
setup_dependencies()
|
|
try:
|
|
run()
|
|
except NoVideoSelected:
|
|
print('No video selected', file=stderr)
|
|
return 1
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|