예제 #1
0
class SnipsPlex:
    def __init__(self, baseurl, token):

        self.plex = PlexServer(baseurl, token)
        self.top = None
        self.recent = None

    def setup_cc(self, cast):
        chromecasts = pychromecast.get_chromecasts()
        #match = process.extractOne(cast, sdict.keys())
        ccs = {}
        for cc in chromecasts:
            ccs[cc.device.friendly_name] = cc
        match = process.extractOne(cast, ccs.keys())
        self.cc = ccs[match[0]]
        pxr = px.PlexController()
        self.cc.register_handler(pxr)
        token = self.plex.query(
            '/security/token?type=delegation&scope=all').attrib['token']
        pxr.namespace = 'urn:x-cast:com.google.cast.sse'
        return pxr

    def get_mc(self, cast):
        chromecasts = pychromecast.get_chromecasts()
        # match = process.extractOne(cast, sdict.keys())
        ccs = {}
        for cc in chromecasts:
            ccs[cc.device.friendly_name] = cc
        match = process.extractOne(cast, ccs.keys())
        cc = ccs[match[0]]
        mc = cc.media_controller
        return mc

    def Get_movie_list(self):
        mlist = []
        movies = self.plex.library.section('Movies').all()
        for video in movies:
            mlist.append(video.title)
        return mlist

    def Get_tv_list(self):
        TVlist = []
        TV = self.plex.library.section('TV Shows').all()
        for video in TV:
            TVlist.append(video.title)
        return TVlist

    def List_OnDeck(self):
        dlist = []
        ondeck = self.plex.library.onDeck()
        for show in ondeck:
            dlist.append(show.grandparentTitle)
        return dlist

    def Dict_OnDeck(self):
        ddict = {}
        ondeck = self.plex.library.onDeck()
        for show in ondeck:
            ddict[show.grandparentTitle] = show
        return ddict

    def Dict_Movies(self):
        mdict = {}
        movies = self.plex.library.section('Movies').all()
        for movie in movies:
            mdict[movie.title] = movie
        return mdict

    def playTVonDeck(self, show, cast):
        sdict = self.Dict_OnDeck()
        match = process.extractOne(show, sdict.keys())
        ep = sdict[match[0]]
        tv = self.setup_cc(cast)
        tv.play_media(ep, self.plex)

    def play_movie(self, movie, cast):
        mdict = self.Dict_Movies()
        match = process.extractOne(movie, mdict.keys())
        ep = mdict[match[0]]
        tv = self.setup_cc(cast)
        tv.play_media(ep, self.plex)

    def recomend_movie(self, i):
        if not self.top:
            self.top = self.get_top_unwatched_movie()
        if not self.recent:
            self.recent = self.recent_unwatched_movie()

        if i % 2 == 0:
            if i > 0:
                i = i / 2 - 1
            return self.top[int(i)]
        else:
            i = (i + 1) / 2 - 1
            return self.recent[int(i)]

    def get_top_unwatched_movie(self):
        mdict = self.Dict_Movies()
        sort = sorted(mdict.items(),
                      key=lambda x: x[1].rating
                      if isinstance(x[1].rating, float) else 0,
                      reverse=True)
        list = []
        for m in sort:
            if m[1].viewCount == 0:
                list.append(m[0])
        return list

    def recent_unwatched_movie(self):
        mdict = self.Dict_Movies()
        sort = sorted(mdict.items(), key=lambda x: x[1].addedAt, reverse=True)
        list = []
        for m in sort:
            if m[1].viewCount == 0:
                list.append(m[0])
        return list