Skip to content

Commit

Permalink
- Add Live Stream support.
Browse files Browse the repository at this point in the history
- Fixed quality selection.
- Added notifications for unavailable video and unmet quality restriction.
  • Loading branch information
kapitan-iglu committed Mar 30, 2020
1 parent 85f51b3 commit 8f2a090
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 23 deletions.
10 changes: 6 additions & 4 deletions addon.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,14 @@ def show(link, season):
@plugin.route('/video/<link>')
def video(link):
url = api.get_video_url(link)
plugin.set_resolved_url(url)
if url:
plugin.set_resolved_url(url)

@plugin.route('/stream/<link>')
def stream(link):
@plugin.route('/livestream/<link>')
def livestream(link):
url = api.get_video_url(link, True)
plugin.set_resolved_url(url)
if url:
plugin.set_resolved_url(url)

@plugin.route('/popular/<page>', name='popular', options={'video_type': 'popular'})
@plugin.route('/recent/<page>', name='recent', options={'video_type': 'recent'})
Expand Down
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.mall.tv"
name="Mall.TV"
version="0.0.10"
version="0.0.11"
provider-name="koudi">
<requires>
<import addon="xbmc.python" version="2.1.0" />
Expand Down
4 changes: 4 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2020-03-30 [0.0.11]
* Added Live stream support
* Fixed quality selection
* Added notifications for unavailable video and unmet quality restriction
2019-12-09 [0.0.10]
* Fixed UTF-8 encoded URLs
2019-10-05 [0.0.9]
Expand Down
38 changes: 21 additions & 17 deletions mall.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ def extract_live(self, page):
'label': link.text,
'thumbnail': self.get_thumb_url(card.find('div', {'class': ['video-card__thumbnail', 'lazy']})['data-src']),
'link': link['href'],
'path': self.url_for('stream', link=link['href'].encode('utf-8')),
'path': self.url_for('livestream', link=link['href'].encode('utf-8')),
'info': {
'duration': '',
'mediatype': 'episode',
Expand All @@ -253,31 +253,35 @@ def get_duration(self, val):

return count

def get_video_url(self, link, stream=False):
def get_video_url(self, link, is_live=False):
page = self.get_page(link)

source = page.find('source')

if not source:
main_link = page.find('meta', {'itemprop': 'image'})['content'].replace('retina.jpg', 'index.m3u8')
else:
main_link = source['src']
main_link = source['src'] + '.m3u8'

max_quality = int(self.plugin.get_setting('max_quality'))

if stream == False:
main_link = main_link + '.m3u8'

index_list = requests.get(main_link).text

qualities = re.findall(r'(\d+)/index.m3u8', index_list, flags=re.MULTILINE)
qualities = reversed(sorted(map(int, qualities)))
selected = filter(lambda x: x <= max_quality, qualities)[0]
index_list = requests.get(main_link).text

qualities = re.findall(r'(\d+)/index.m3u8', index_list, flags=re.MULTILINE)
if not len(qualities):
self.plugin.notify(self.plugin.get_string(30021).encode("utf-8"), delay=7000, image=self.plugin._addon.getAddonInfo('icon'))
return None
qualities = reversed(sorted(map(int, qualities)))
max_quality = int(self.plugin.get_setting('max_quality'))
for q in qualities:
selected = q
if selected <= max_quality:
break
self.plugin.log.debug('Selected quality: '+str(selected))
if selected > max_quality:
self.plugin.notify(self.plugin.get_string(30020).encode("utf-8") % (str(max_quality), str(selected)), delay=7000, image=self.plugin._addon.getAddonInfo('icon'))

if is_live == False:
url = '{0}/{1}/index{1}.mp4' if self.plugin.get_setting('format') == 'MP4' else '{0}/{1}/index.m3u8';
url = url.format(main_link.replace('/index.m3u8', ''), selected)
return url.format(main_link.replace('/index.m3u8', ''), selected)
else:
url = '{0}{1}/index.m3u8'
url = url.format(main_link, max_quality)

return url
return url.format(main_link.replace('.m3u8', ''), selected)
3 changes: 3 additions & 0 deletions resources/language/Czech/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@
<string id="30017">Česká</string>
<string id="30018">Slovenská</string>
<string id="30019">Živě</string>
<string id="30020">Kvalita %s není dostupná - přehrává se %s</string>
<string id="30021">Video (ještě) není dostupné</string>
<string id="30022">144</string>
</strings>
3 changes: 3 additions & 0 deletions resources/language/English/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@
<string id="30017">Czech</string>
<string id="30018">Slovak</string>
<string id="30019">Live</string>
<string id="30020">Quality %s not available - playing %s</string>
<string id="30021">Video not (yet) available</string>
<string id="30022">144</string>
</strings>
3 changes: 3 additions & 0 deletions resources/language/Slovak/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,7 @@
<string id="30017">Česká</string>
<string id="30018">Slovenská</string>
<string id="30019">Naživo</string>
<string id="30020">Kvalita %s nedostupná - prehráva sa %s</string>
<string id="30021">Video (ešte) nie je dostupné</string>
<string id="30022">144</string>
</strings>
2 changes: 1 addition & 1 deletion resources/settings.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<settings>
<setting type="lsep" label="30003" />
<setting label="30004" id="max_quality" type="labelenum" lvalues="30009|30008|30007|30006|30005" default="1080" />
<setting label="30004" id="max_quality" type="labelenum" lvalues="30022|30009|30008|30007|30006|30005" default="1080" />
<setting label="30015" id="format" type="labelenum" values="HLS|MP4" default="HLS"/>
<setting label="30016" id="country" type="enum" lvalues="30017|30018" default="0"/>
</settings>

0 comments on commit 8f2a090

Please sign in to comment.