Browse Source

Merge branch 'master' into develop

pull/1093/head
JackDandy 7 years ago
parent
commit
668c682310
  1. 6
      CHANGES.md
  2. 2
      gui/slick/interfaces/default/history.tmpl
  3. 5
      sickbeard/notifiers/emby.py
  4. 16
      sickbeard/providers/btscene.py
  5. 11
      sickbeard/providers/ettv.py
  6. 12
      sickbeard/providers/generic.py
  7. 9
      sickbeard/providers/pisexy.py
  8. 9
      sickbeard/providers/potuk.py
  9. 18
      sickbeard/webapi.py
  10. 9
      sickbeard/webserve.py

6
CHANGES.md

@ -39,6 +39,12 @@
* Change suppress output warnings from media process scripts * Change suppress output warnings from media process scripts
### 0.15.13 (2018-04-18 13:50:00 UTC)
* Fix API endpoints for sg.exceptions and exceptions
* Change improve searching torrent provider BTScene
### 0.15.12 (2018-04-17 14:10:00 UTC) ### 0.15.12 (2018-04-17 14:10:00 UTC)
* Fix ETTV torrent provider * Fix ETTV torrent provider

2
gui/slick/interfaces/default/history.tmpl

@ -462,7 +462,7 @@
<ol> <ol>
<li>Install the SickGear repo to access its Kodi Add-on <li>Install the SickGear repo to access its Kodi Add-on
<ul> <ul>
<li>in <b class="boldest">Filemanager</b>, add a source for SickGear with <span class="grey-text">&lt;ip&gt;:&lt;port&gt;/kodi/</span> (e.g. <span class="grey-text">192.168.0.10:$sg_port/kodi/</span>)<br> <li>in <b class="boldest">Filemanager</b>, add a source with <span class="grey-text">&lt;ip&gt;:&lt;port&gt;/kodi/</span> (e.g. <span class="grey-text">http://192.168.0.10:$sg_port/kodi/</span>)<br>
and name it for example, <span class="grey-text">SickGear</span>. <em>You will need to allow <span class="highlight-text">Unknown Sources</span> if not already</em> </li> and name it for example, <span class="grey-text">SickGear</span>. <em>You will need to allow <span class="highlight-text">Unknown Sources</span> if not already</em> </li>
<li>in <b class="boldest">System/Add-ons</b>, "<span class="grey-text">Install from zip file</span>", in the folder list, select the <span class="grey-text">SickGear</span> source</li> <li>in <b class="boldest">System/Add-ons</b>, "<span class="grey-text">Install from zip file</span>", in the folder list, select the <span class="grey-text">SickGear</span> source</li>
<li>select the <span class="grey-text">repository.sickgear</span> in the folder listing, and install the repository zip<br> <li>select the <span class="grey-text">repository.sickgear</span> in the folder listing, and install the repository zip<br>

5
sickbeard/notifiers/emby.py

@ -103,7 +103,10 @@ class EmbyNotifier(Notifier):
except (StandardError, Exception): except (StandardError, Exception):
pass pass
if not sock_issue: if not sock_issue:
cs.shutdown(SHUT_RDWR) try:
cs.shutdown(SHUT_RDWR)
except (StandardError, Exception):
pass
return result return result
def _check_config(self, hosts=None, apikeys=None): def _check_config(self, hosts=None, apikeys=None):

16
sickbeard/providers/btscene.py

@ -65,7 +65,7 @@ class BTSceneProvider(generic.TorrentProvider):
'mPblqN2ctQnY', 'vlWduM2 YPtU', 'nYoRXahZPm L', '15PSZuV2 YzR', 'WYrN 2PbsJmb', 'mPblqN2ctQnY', 'vlWduM2 YPtU', 'nYoRXahZPm L', '15PSZuV2 YzR', 'WYrN 2PbsJmb',
'==wZ y9mL sx']], '==wZ y9mL sx']],
]]] ]]]
self.url_vars = {'search': '?q=%s&category=series&order=1', 'browse': 'lastdaycat/type/Series/', self.url_vars = {'search': '?q=%s&order=1', 'browse': 'lastdaycat/type/Series/',
'get': 'torrentdownload.php?id=%s'} 'get': 'torrentdownload.php?id=%s'}
self.url_tmpl = {'config_provider_home_uri': '%(home)s', 'search': '%(vars)s', self.url_tmpl = {'config_provider_home_uri': '%(home)s', 'search': '%(vars)s',
'browse': '%(home)s%(vars)s', 'get': '%(home)s%(vars)s'} 'browse': '%(home)s%(vars)s', 'get': '%(home)s%(vars)s'}
@ -165,5 +165,19 @@ class BTSceneProvider(generic.TorrentProvider):
def _episode_strings(self, ep_obj, **kwargs): def _episode_strings(self, ep_obj, **kwargs):
return super(BTSceneProvider, self)._episode_strings(ep_obj, sep_date='.', **kwargs) return super(BTSceneProvider, self)._episode_strings(ep_obj, sep_date='.', **kwargs)
def get_data(self, url):
result = None
resp = self.get_url(url, timeout=90)
if self.should_skip():
return result
try:
result = resp
if re.search('(?i)\s+html', resp[0:30]):
result = re.findall('(?i)"(magnet:[^"]+?)"', resp)[0]
except IndexError:
pass
return result
provider = BTSceneProvider() provider = BTSceneProvider()

11
sickbeard/providers/ettv.py

@ -134,19 +134,10 @@ class ETTVProvider(generic.TorrentProvider):
return result return result
try: try:
result = re.findall('(?i)"(magnet:[^"]+?)">', html)[0] result = re.findall('(?i)"(magnet:[^"]+?)"', html)[0]
except IndexError: except IndexError:
logger.log('Failed no magnet in response', logger.DEBUG) logger.log('Failed no magnet in response', logger.DEBUG)
return result return result
def get_result(self, episodes, url):
result = None
if url:
result = super(ETTVProvider, self).get_result(episodes, url)
result.get_data_func = self.get_data
return result
provider = ETTVProvider() provider = ETTVProvider()

12
sickbeard/providers/generic.py

@ -667,7 +667,7 @@ class GenericProvider(object):
cache_file = ek.ek(os.path.join, cache_dir, base_name) cache_file = ek.ek(os.path.join, cache_dir, base_name)
self.session.headers['Referer'] = url self.session.headers['Referer'] = url
if cached or helpers.download_file(url, cache_file, session=self.session): if cached or helpers.download_file(url, cache_file, session=self.session, allow_redirects='/it' not in url):
if self._verify_download(cache_file): if self._verify_download(cache_file):
logger.log(u'Downloaded %s result from %s' % (self.name, url)) logger.log(u'Downloaded %s result from %s' % (self.name, url))
@ -1674,3 +1674,13 @@ class TorrentProvider(GenericProvider):
self.ping_skip = ((60*60)/self.ping_freq, None)[self._authorised()] self.ping_skip = ((60*60)/self.ping_freq, None)[self._authorised()]
self._sleep_with_stop(self.ping_freq) self._sleep_with_stop(self.ping_freq)
def get_result(self, episodes, url):
result = None
if url:
result = super(TorrentProvider, self).get_result(episodes, url)
if hasattr(self, 'get_data'):
result.get_data_func = self.get_data
return result

9
sickbeard/providers/pisexy.py

@ -121,14 +121,5 @@ class PiSexyProvider(generic.TorrentProvider):
logger.log('Failed no torrent in response', logger.DEBUG) logger.log('Failed no torrent in response', logger.DEBUG)
return result return result
def get_result(self, episodes, url):
result = None
if url:
result = super(PiSexyProvider, self).get_result(episodes, url)
result.get_data_func = self.get_data
return result
provider = PiSexyProvider() provider = PiSexyProvider()

9
sickbeard/providers/potuk.py

@ -146,15 +146,6 @@ class PotUKProvider(generic.TorrentProvider):
logger.log('Failed no torrent in response', logger.DEBUG) logger.log('Failed no torrent in response', logger.DEBUG)
return result return result
def get_result(self, episodes, url):
result = None
if url:
result = super(PotUKProvider, self).get_result(episodes, url)
result.get_data_func = self.get_data
return result
def ui_string(self, key): def ui_string(self, key):
return ('%s_digest' % self.get_id()) == key and 'use... \'bbuserid=xx; bbpassword=yy\'' or '' return ('%s_digest' % self.get_id()) == key and 'use... \'bbuserid=xx; bbpassword=yy\'' or ''

18
sickbeard/webapi.py

@ -1412,14 +1412,22 @@ class CMD_SickGearExceptions(ApiCall):
""" display scene exceptions for all or a given show """ """ display scene exceptions for all or a given show """
myDB = db.DBConnection(row_type="dict") myDB = db.DBConnection(row_type="dict")
if self.indexerid == None: if self.indexerid is None:
sqlResults = myDB.select("SELECT show_name, indexer_id AS 'indexerid' FROM scene_exceptions") sqlResults = myDB.select("SELECT s.indexer, se.show_name, se.indexer_id AS 'indexerid' "
"FROM scene_exceptions AS se INNER JOIN tv_shows as s "
"ON se.indexer_id == s.indexer_id")
scene_exceptions = {} scene_exceptions = {}
for row in sqlResults: for row in sqlResults:
indexerid = row["indexerid"] indexerid = row["indexerid"]
if not indexerid in scene_exceptions: indexer = row["indexer"]
scene_exceptions[indexerid] = [] if self.sickbeard_call:
scene_exceptions[indexerid].append(row["show_name"]) if indexerid not in scene_exceptions:
scene_exceptions[indexerid] = []
scene_exceptions[indexerid].append(row["show_name"])
else:
if indexerid not in scene_exceptions.get(indexer, {}):
scene_exceptions.setdefault(indexer, {})[indexerid] = []
scene_exceptions.setdefault(indexer, {})[indexerid].append(row["show_name"])
else: else:
showObj = helpers.find_show_by_id(sickbeard.showList, {self.indexer: self.indexerid}) showObj = helpers.find_show_by_id(sickbeard.showList, {self.indexer: self.indexerid})

9
sickbeard/webserve.py

@ -1764,7 +1764,8 @@ class Home(MainHandler):
last_found = ('', ' since %s' % sbdatetime.sbdatetime.fromordinal( last_found = ('', ' since %s' % sbdatetime.sbdatetime.fromordinal(
showObj.last_found_on_indexer).sbfdate())[1 < showObj.last_found_on_indexer] showObj.last_found_on_indexer).sbfdate())[1 < showObj.last_found_on_indexer]
show_message = ( show_message = (
'The master ID of this show has been abandoned%s, ' % last_found 'The master ID of this show has been <span class="addQTip" title="many reasons exist, including: '
+ '<br>show flagged as a duplicate, removed completely... etc">abandoned</span>%s, ' % last_found
+ '<a href="%s/home/editShow?show=%s&tvsrc=0&srcid=%s#core-component-group3">replace it here</a>' % ( + '<a href="%s/home/editShow?show=%s&tvsrc=0&srcid=%s#core-component-group3">replace it here</a>' % (
sickbeard.WEB_ROOT, show, show) sickbeard.WEB_ROOT, show, show)
+ ('', '<br>%s' % show_message)[0 < len(show_message)]) + ('', '<br>%s' % show_message)[0 < len(show_message)])
@ -2238,8 +2239,10 @@ class Home(MainHandler):
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
last_found = ('', ' since %s' % sbdatetime.sbdatetime.fromordinal( last_found = ('', ' since %s' % sbdatetime.sbdatetime.fromordinal(
showObj.last_found_on_indexer).sbfdate())[1 < showObj.last_found_on_indexer] showObj.last_found_on_indexer).sbfdate())[1 < showObj.last_found_on_indexer]
show_message = 'The master ID of this show has been abandoned%s<br>search for ' % last_found + \ show_message = (
'a replacement in the "<b>Related show IDs</b>" section of the "<b>Other</b>" tab' 'The master ID of this show has been <span class="addQTip" title="many reasons exist, including: '
+ '\nshow flagged as a duplicate, removed completely... etc">abandoned</span>%s' % last_found
+ '<br>search for a replacement in the "<b>Related show IDs</b>" section of the "<b>Other</b>" tab')
t.show_message = show_message t.show_message = show_message

Loading…
Cancel
Save