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)
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()
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)
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
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
def setTvShowName(self, tvshow): """ Setter for the tvshow """ self.Item['tvShow'] = tvshow self.Item['dbTvShow'] = strUtil.remove_special_char( self.Item['tvShow'])
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()
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)
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)
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'])
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
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
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)