Пример #1
0
 def updateHistory(self, name, url, seektime, percent, isComplete, tvshow=False, season=False, episode=False):
     name = strUtil.remove_special_char(name)
     if tvshow and tvshow != '':
         tvshow = strUtil.remove_special_char(tvshow)
     if self.findHistory(name, url, tvshow, season, episode) is not None:
         clause_value = "name = '%s'" % (name)
         
         #if url:
         #    clause_value = clause_value + " AND url = '%s'" % (url)
         if tvshow:
             clause_value = clause_value + " AND tvshow = '%s'" % (tvshow)
         if season:
             clause_value = clause_value + " AND season = '%s'" % (season)
         if episode:
             clause_value = clause_value + " AND episode = '%s'" % (episode)
             
         sql_update = "UPDATE history SET seektime = '%s', percent = %s, isComplete = %s WHERE %s" % (seektime,percent,isComplete,clause_value) 
         
         self.dbCursor.execute(sql_update)
         try:
             self.db.commit() 
             
             xbmc.log("Update success in db",xbmc.LOGINFO)
         except Exception, e:
             xbmc.log("Error during update execution in db with query : "+sql_update,xbmc.LOGERROR)
Пример #2
0
def isEquals(str1, str2):

    str1 = strUtil.remove_special_char(str1)
    str1 = strUtil.deleteAccent(str1)

    str2 = strUtil.remove_special_char(str2)
    str2 = strUtil.deleteAccent(str2)

    return str1.upper() == str2.upper()
Пример #3
0
 def createHistory(self,name, url, seektime, percent, isComplete, tvshow='', season='', episode=''):
     name = strUtil.remove_special_char(name)
     if tvshow and tvshow != '':
         tvshow = strUtil.remove_special_char(tvshow)
     # ___ Insert value
     sql_insert = "INSERT INTO history VALUES ( '%s', '%s', '%s', %s, %s, '%s', '%s', '%s')" % (name, url, seektime, percent, isComplete, tvshow, season, episode)
     
     self.dbCursor.execute(sql_insert)
     
     try:
         self.db.commit() 
         
         xbmc.log("Insert success in db with sql "+sql_insert,xbmc.LOGINFO)
     except Exception, e:
         xbmc.log("Error during insertion execution in db with query : "+sql_insert,xbmc.LOGERROR)
Пример #4
0
    def getLastTvShow(self, streamItem=False):
        """
            Method to get all last tv show
            @return a list of StreamItem
        """
        href = '/'
        # ___ Initialize the list to return
        elementList = []

        # ___ Get the response
        response = self.openPage(href)
        if response and response.getcode() == 200:
            content = response.read()

            linksPattern = re.compile(
                '(.*)(window\.__NUXT__=)(.*?)(;</script>)(.*)', re.DOTALL)
            match = linksPattern.match(content)
            if match is not None:
                jsonEl = json.loads(match.group(3))

                for movie in jsonEl['data'][0]['nouveaux']['series']:

                    title = movie['name']

                    href = '/series/' + strUtil.remove_special_char(
                        title).replace(' ', '-').lower() + '-' + str(
                            movie['customID']) + '.html'
                    year = movie['releaseYear']
                    quality = movie['quality']
                    langClass = movie['language']
                    lang = None
                    subtitle = None
                    if langClass == 'vf':
                        lang = 'FR'
                    else:
                        lang = 'VO'
                        subtitle = 'FR'

                    title = strUtil.cleanTitle(title)
                    title = strUtil.deleteAccent(title)
                    self.__LOGGER__.log("Clean title: " + str(title),
                                        xbmc.LOGDEBUG)

                    # __ Create the element
                    element = StreamItem(title)
                    element.setHref(href)
                    element.setYear(year)
                    element.setQuality(quality)
                    element.setLang(lang)
                    if subtitle is not None:
                        element.setSubTitle(subtitle)
                    element.setSourceId(self.ID)
                    element.setId(str(movie['customID']))
                    element.setIconImage(movie['poster'])
                    element.setTvShowName(title)
                    element.setType(StreamItem.TYPE_TVSHOW)
                    element.setAction(StreamItem.ACTION_DISPLAY_SEASONS)
                    elementList.append(element)

        return elementList
Пример #5
0
    def getTvShowSeasons(self, tvShowStreamItem):
        """
            Method to get the seasons list of a tv show
            @return a list of StreamItem
        """

        # ___ Initialize the list to return
        elementList = []

        # ___ Get the response
        response = self.openPage(tvShowStreamItem.getHref())
        if response and response.getcode() == 200:
            content = response.read()
            linksPattern = re.compile(
                '(.*)(window\.__NUXT__=)(.*?)(;</script>)(.*)', re.DOTALL)
            match = linksPattern.match(content)
            if match is not None:
                jsonEl = json.loads(match.group(3))

                for season in jsonEl['data'][0]['data']['seasons']:

                    # __ Create the element
                    href = '/series/' + strUtil.remove_special_char(
                        tvShowStreamItem.getTvShowName()).replace(
                            ' ', '-').lower() + '-saison-' + str(
                                season['number']) + '-' + str(
                                    tvShowStreamItem.getId()) + '.html'
                    element = tvShowStreamItem.copy()
                    element.setSeason(season['number'])
                    element.setAction(StreamItem.ACTION_DISPLAY_EPISODES)
                    element.setHref(href)
                    element.determineSeasonTitle()
                    elementList.append(element)

        return elementList
Пример #6
0
 def setTvShowName(self, tvshow):
     """
         Setter for the tvshow
     """
     self.Item['tvShow'] = tvshow
     self.Item['dbTvShow'] = strUtil.remove_special_char(
         self.Item['tvShow'])
Пример #7
0
    def setTitle(self, title):
        """
            Setter for the title
        """

        self.Item[
            'title'] = title  #strUtil.unescapeHtml(title) #strUtil.normalize(title)
        self.Item['dbTitle'] = strUtil.deleteAccent(
            strUtil.remove_special_char(self.Item['title']))

        self.regenerateKodiTitle()
Пример #8
0
 def findHistory(self, name, url=False, tvshow=False, season=False, episode=False):
     name = strUtil.remove_special_char(name)
     if tvshow and tvshow != '':
         tvshow = strUtil.remove_special_char(tvshow)
         
     clause_value = "name = '%s'" % (name)      
     
     #if url:
     #   clause_value = clause_value + " AND url = '%s'" % (url)
     if tvshow:
         clause_value = clause_value + " AND tvshow = '%s'" % (tvshow)
     if season:
         clause_value = clause_value + " AND season = '%s'" % (season)
     if episode:
         clause_value = clause_value + " AND episode = '%s'" % (episode)
     
     sql_search = "SELECT * FROM history WHERE %s" % (clause_value)
     
     print sql_search
     
     try:
         self.dbCursor.execute(sql_search)
         result = self.dbCursor.fetchall() 
         if len(result) > 0: 
             resultJSON = { 'name':result[0][0],
                            'url':result[0][1],
                            'seektime':result[0][2],
                            'percent':result[0][3],
                            'isComplete':result[0][4],
                            'tvshow':result[0][5],
                            'season':result[0][6],
                            'episode':result[0][7]
                         }
             
             xbmc.log("Find %s success in db" % (clause_value),xbmc.LOGINFO)
             return resultJSON
         
     except Exception, e:
         print str(e)
         xbmc.log("Error during select execution in db with query : "+sql_search,xbmc.LOGERROR)
Пример #9
0
 def deleteHistory(self, name, url = False, tvshow=False, season=False, episode=False):
     name = strUtil.remove_special_char(name)
     if tvshow and tvshow != '':
         tvshow = strUtil.remove_special_char(tvshow)
     clause_value = "name = '%s'" % (name)
     
     #if url:
     #    clause_value = clause_value + " AND url = '%s'" % (url)
     if tvshow:
         clause_value = clause_value + " AND tvshow = '%s'" % (tvshow)
     if season:
         clause_value = clause_value + " AND season = '%s'" % (season)
     if episode:
         clause_value = clause_value + " AND episode = '%s'" % (episode)
         
     sql_delete = "DELETE FROM history  WHERE %s" % (clause_value)
     
     self.dbCursor.execute(sql_delete)
     try:
         self.db.commit() 
         
         xbmc.log("Delete success in db",xbmc.LOGINFO)
     except Exception, e:
         xbmc.log("Error during delete execution in db with query : "+sql_delete,xbmc.LOGERROR)
Пример #10
0
    def determineSeasonTitle(self):
        """
            Method to set the title from the tvShow and the season
        """
        try:
            if int(self.Item['season']) > 0 and int(self.Item['season']) < 10:
                self.Item['title'] = self.Item['tvShow'] + " - S0" + str(
                    self.Item['season'])
            elif int(self.Item['season']) > 0 and int(
                    self.Item['season']) >= 10:
                self.Item['title'] = self.Item['tvShow'] + " - S" + str(
                    self.Item['season'])
            else:
                self.Item['title'] = self.Item['tvShow']
        except:
            self.Item['title'] = self.Item['tvShow']

        self.Item['dbTitle'] = strUtil.remove_special_char(self.Item['title'])
Пример #11
0
    def getMovieList(self, streamItem=False):
        """
            Method to get a list of movie
            @return a list of StreamItem        
        """
        href = '/categories/films/page/1'
        page = 1
        if streamItem and streamItem.isPage():
            page = streamItem.getPage()
            href = streamItem.getHref()

        # ___ Initialize the list to return
        elementList = []

        # ___ Get the response
        response = self.openPage(href)
        if response and response.getcode() == 200:
            content = response.read()

            linksPattern = re.compile(
                '(.*)(window\.__NUXT__=)(.*?)(;</script>)(.*)', re.DOTALL)
            match = linksPattern.match(content)
            if match is not None:
                jsonEl = json.loads(match.group(3))

                for movie in jsonEl['data'][0]['elements']:

                    href = '/films/' + strUtil.remove_special_char(
                        movie['name']).replace(' ', '-').lower() + '-' + str(
                            movie['customID']) + '.html'
                    year = movie['releaseYear']
                    quality = movie['quality']
                    langClass = movie['language']
                    lang = None
                    subtitle = None
                    if langClass == 'vf':
                        lang = 'FR'
                    else:
                        lang = 'VO'
                        subtitle = 'FR'

                    title = strUtil.cleanTitle(movie['name'])
                    title = strUtil.deleteAccent(title)
                    self.__LOGGER__.log("Clean title: " + str(title),
                                        xbmc.LOGDEBUG)

                    # __ Create the element
                    element = StreamItem(title)
                    element.setHref(href)
                    element.setYear(year)
                    element.setQuality(quality)
                    element.setLang(lang)
                    if subtitle is not None:
                        element.setSubTitle(subtitle)
                    element.setAction(StreamItem.ACTION_DISPLAY_LINKS)
                    element.setType(StreamItem.TYPE_MOVIE)
                    element.setSourceId(self.ID)
                    element.setId(str(movie['customID']))
                    element.setIconImage(movie['poster'])
                    elementList.append(element)

                if streamItem:
                    element = streamItem.copy()
                    page = page + 1
                    element.setType(StreamItem.TYPE_PAGE)
                    element.setPage(page)
                    element.setTitle('Page ' + str(element.getPage()))
                    element.setHref('/categories/films/page/' + str(page))
                    elementList.append(element)
                else:
                    page = page + 1
                    element = StreamItem('Page ' + str(element.getPage()))
                    element.setType(StreamItem.TYPE_PAGE)
                    element.setPage(page)
                    element.setTitle('Page ' + str(element.getPage()))
                    element.setAction(StreamItem.ACTION_DISPLAY_TYPE_LIST)
                    element.setSubType(StreamItem.SUBTYPE_LIST)
                    element.setHref('/categories/films/page/' + str(page))
                    elementList.append(element)

        return elementList
Пример #12
0
    def getMoviesItemFromContent(self, content, filter=False):
        """
            Method to get movie list
            @param content: the html content
            @return the StreamItem list
        """
        elementList = []

        itemsPattern = re.compile(
            '(.*)(window\.__NUXT__=)(.*?)(;</script>)(.*)', re.DOTALL)
        match = itemsPattern.match(content)
        if match is not None:
            jsonEl = json.loads(match.group(3))

            if not filter or filter == StreamItem.TYPE_MOVIE:

                for item in jsonEl['data'][0]['films']:
                    title = item['name']

                    href = '/films/' + strUtil.remove_special_char(
                        title).replace(' ', '-').lower() + '-' + str(
                            item['customID']) + '.html'
                    year = item['releaseYear']
                    quality = item['quality']
                    langClass = item['language']
                    lang = None
                    subtitle = None
                    if langClass == 'vf':
                        lang = 'FR'
                    else:
                        lang = 'VO'
                        subtitle = 'FR'

                    title = strUtil.cleanTitle(title)
                    self.__LOGGER__.log("Clean title: " + str(title),
                                        xbmc.LOGDEBUG)

                    # __ Create the element
                    element = StreamItem(title)
                    element.setHref(href)
                    element.setYear(year)
                    element.setQuality(quality)
                    element.setLang(lang)
                    element.setAction(StreamItem.ACTION_DISPLAY_LINKS)
                    element.setType(StreamItem.TYPE_MOVIE)
                    element.setSourceId(self.ID)
                    element.setId(str(item['customID']))
                    element.setIconImage(item['poster'])
                    type = StreamItem.TYPE_MOVIE
                    elementList.append(element)

            elif filter == StreamItem.TYPE_TVSHOW:
                for item in jsonEl['data'][0]['series']:
                    title = item['name']

                    href = '/series/' + strUtil.remove_special_char(
                        title).replace(' ', '-').lower() + '-' + str(
                            item['customID']) + '.html'
                    year = item['releaseYear']
                    quality = item['quality']
                    langClass = item['language']
                    lang = None
                    subtitle = None
                    if langClass == 'vf':
                        lang = 'FR'
                    else:
                        lang = 'VO'
                        subtitle = 'FR'

                    title = strUtil.cleanTitle(title)
                    self.__LOGGER__.log("Clean title: " + str(title),
                                        xbmc.LOGDEBUG)

                    # __ Create the element
                    element = StreamItem(title)
                    element.setHref(href)
                    element.setYear(year)
                    element.setQuality(quality)
                    element.setLang(lang)
                    element.setSourceId(self.ID)
                    element.setId(str(item['customID']))
                    element.setIconImage(item['poster'])
                    element.setTvShowName(title)
                    element.setType(StreamItem.TYPE_TVSHOW)
                    element.setAction(StreamItem.ACTION_DISPLAY_SEASONS)
                    type = StreamItem.TYPE_TVSHOW
                    elementList.append(element)

        # For every post, get title and topicLink
        """       
        movies = soup.findAll('div',{ 'class':'column is-one-quarter-desktop is-half-mobile'})
                
        
        for index in range(0,len(movies)):
            
            movie = movies[index]
            
            title = movie.find('img',{'class':'image-fix'})['alt'].encode('UTF-8')
            title = strUtil.unescapeHtml(str(title))
                    
            self.__LOGGER__.log("Finded title: "+title,xbmc.LOGDEBUG)
            href = movie.find('a')['href']
            year = strUtil.getYearFromTitle(title) 
            quality = movie.find('div',{'class':re.compile('(media-content)(.*)')}).text.encode('UTF-8')
            langClass = movie.find('img',{'class':'language-image'})['src']
            lang = None
            subtitle = None
            if langClass == '/vf.png':
                lang = 'FR'
            else:
                lang = 'VO'
                subtitle = 'FR'
            title = strUtil.cleanTitle(title)                
            self.__LOGGER__.log("Clean title: "+str(title),xbmc.LOGDEBUG)     
            
            # __ Create the element
            element = StreamItem(title)
            element.setHref(href)                
            element.setYear(year)             
            element.setQuality(quality)             
            element.setLang(lang)
            element.setAction(StreamItem.ACTION_DISPLAY_LINKS)
            element.setType(StreamItem.TYPE_MOVIE)  
            element.setSourceId(self.ID)  
            element.setIconImage(movie.find('img')['src'])
            type = StreamItem.TYPE_MOVIE
            
            tvshowPattern = re.compile("(/series/)(.*)")
            print href
            match = tvshowPattern.match(href)
            if match is not None: 
                element.setTvShowName(title)   
                element.setType(StreamItem.TYPE_TVSHOW)
                element.setAction(StreamItem.ACTION_DISPLAY_SEASONS)   
                type = StreamItem.TYPE_TVSHOW  
                            
            # __ Add the element to the list
            if not filter:
                elementList.append(element)
            elif type == int(filter):
                elementList.append(element)
        """
        return elementList
Пример #13
0
    def closePopup(self):
        """
            Method to close the current popup and search link
        """

        streamItem = StreamItem(strUtil.remove_special_char(self.title))
        streamItem.setType(StreamItem.TYPE_MOVIE)
        streamItem.setAction(StreamItem.ACTION_MORE_LINKS)
        streamItem.setIconImage(self.thumbnail)

        self.close()

        progress = xbmcgui.DialogProgress()
        progress.create(constant.__addon__.getLocalizedString(70006),
                        constant.__addon__.getLocalizedString(70007))

        listItems = sources.getMoreLinks(
            constant.__addon__.getSetting('default_stream_src'), streamItem,
            True)
        for item in listItems:
            item.setMetadata(streamItem.getMetadata())

        # ___ Update the list of elements
        selectItems = []
        if listItems is not None and len(listItems) > 0:
            if progress is not None:
                progress.update(0,
                                constant.__addon__.getLocalizedString(70008))
            listItems = metadata.getMetadataForList(StreamItem.TYPE_MOVIE,
                                                    listItems, progress)

            for index in range(0, len(listItems)):
                item = listItems[index]
                item.regenerateKodiTitle()
                selectItems.append(item.getKodiTitle())

        if progress is not None:
            progress.close()

        # ___ Display all StreamItem
        dialog = xbmcgui.Dialog()
        result = dialog.select(constant.__addon__.getLocalizedString(80030),
                               selectItems)
        error = False
        while result > -1 or error:
            result = -1
            # ___ Resolve url
            playableUrl = False
            progress = xbmcgui.DialogProgress()
            progress.create(constant.__addon__.getLocalizedString(70006),
                            constant.__addon__.getLocalizedString(70009))
            try:
                playableUrl = urlresolver.resolve(listItems[result].getHref())
            except:
                # ___ If the url is not resolved, display link choice again.
                error = True
                listItems[result].setKOLinkStatus()
                listItems[result].regenerateKodiTitle()
                selectItems[result] = listItems[result].getKodiTitle()
                result = dialog.select(
                    constant.__addon__.getLocalizedString(80030), selectItems)
            progress.close()

            # ___If the url is resolved, display the the list of possibilities (Open in web browser, Play, Download or Download & Play )
            if playableUrl != False and isinstance(playableUrl, unicode):
                listItems[result].setPlayableUrl(playableUrl)
                player.playVideo(listItems[result])
            else:
                # ___ If the url is not resolved, display link choice again.
                error = False
                listItems[result].setKOLinkStatus()
                listItems[result].regenerateKodiTitle()
                selectItems[result] = listItems[result].getKodiTitle()
                result = dialog.select(
                    constant.__addon__.getLocalizedString(80030), selectItems)