iv_subscribes.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from multiprocessing.pool import ThreadPool
  2. from threading import Thread
  3. from os.path import exists
  4. from invidious import *
  5. import requests
  6. import time
  7. import sys
  8. from plugins.plugin import Plugin
  9. sys.path.append("..")
  10. from src.video import Video as RVideo
  11. from src.channel import Channel
  12. from src.playlist import Playlist
  13. from src.utils import *
  14. from src.config import Config
  15. from src.history import History
  16. class InvidiousSubscriptions(Plugin):
  17. def __init__(self, history: History=History(), config: Config=Config()) -> None:
  18. super().__init__(history, config)
  19. self.history = history
  20. self.config = config
  21. self.name = "[+] Invidious: Subscriptions"
  22. self.category = "Invidious"
  23. if exists(self.config.subs_path): self.SUBS_LIST = [i.strip('\n').split(',')[0] for i in open(self.config.subs_path)]
  24. else: self.SUBS_LIST = []
  25. self.subscriptions = list()
  26. self.sorted_sub_videos = list()
  27. self.subs = list()
  28. self.params = {}
  29. self.flag = "-isb"
  30. self.full_flag = "--ivsubs"
  31. self.flag_help = "show all subscribed channels"
  32. self.flag_action = "store_true"
  33. def load_subscription(self, authorId=""):
  34. chn = self.invidious.get_channel(authorId)
  35. while chn == None:
  36. time.sleep(1)
  37. chn = self.invidious.get_channel(authorId)
  38. chn.convert(Channel)
  39. self.subscriptions.append(chn)
  40. def load_subscriptions(self):
  41. #if len(self.subscriptions) > 0: return False
  42. self.subscriptions.clear()
  43. self.invidious.update_mirrors()
  44. pool = ThreadPool(processes=10)
  45. pool.map(self.load_subscription, self.SUBS_LIST)
  46. self.subscriptions = sort_channels_by_link_list(self.subscriptions, self.SUBS_LIST)
  47. def get_subscriptions(self):
  48. self.load_subscriptions()
  49. subs = list()
  50. for sub in self.subscriptions:
  51. channel = sub
  52. latestVideos = list()
  53. for video in channel.latestVideos:
  54. if video == None: continue
  55. video.convert(RVideo)
  56. video.url = self.invidious.get_working_mirror() + "/watch?v=" + video.videoId
  57. video.isWatched = video.in_history(self.history)
  58. latestVideos.append(video.to_json())
  59. channel.latestVideos = latestVideos
  60. subs.append(channel.to_json())
  61. return subs
  62. def get_items(self, params):
  63. return self.get_subscriptions()