Skip to content

Commit

Permalink
Allow to rent media using tickets
Browse files Browse the repository at this point in the history
  • Loading branch information
pablouser1 committed Dec 8, 2021
1 parent aea81a3 commit 9185688
Show file tree
Hide file tree
Showing 11 changed files with 95 additions and 27 deletions.
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.filmin" name="Filmin" version="1.3.3" provider-name="pablouser1">
<addon id="plugin.video.filmin" name="Filmin" version="1.3.4" provider-name="pablouser1">
<requires>
<import addon="xbmc.python" version="3.0.0" />
<import addon="script.module.requests" version="2.22.0+matrix.1" />
Expand Down
4 changes: 4 additions & 0 deletions resources/language/resource.language.en_gb/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,9 @@ msgid "Sync progress with Filmin"
msgstr ""

msgctxt "#40010"
msgid "Allow renting media with tickets"
msgstr ""

msgctxt "#40011"
msgid "Enable Up Next integration"
msgstr ""
4 changes: 4 additions & 0 deletions resources/language/resource.language.es_es/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,9 @@ msgid "Sync progress with Filmin"
msgstr "Sincronizar progreso con Filmin"

msgctxt "#40010"
msgid "Allow renting media with tickets"
msgstr "Permitir alquilar contenido usando tickets"

msgctxt "#40011"
msgid "Enable Up Next integration"
msgstr "Habilitar integración con Up Next"
14 changes: 14 additions & 0 deletions resources/lib/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ def logout(self):
def setToken(self, token: str):
self.s.headers["Authorization"] = f'Bearer {token}'

def user(self):
res = self.makeRequest(endpoint='/user')
return res['data']

def genres(self):
res = self.makeRequest(endpoint='/genres')
return res['data']
Expand All @@ -60,6 +64,7 @@ def catalog(self, item_type: str = '', genre: int = -1, subgenre: int = -1):

res = self.makeRequest(endpoint='/media/catalog', query=query)
return res['data']

def search(self, term: str)-> list:
res = self.makeRequest(endpoint='/searcher', query={
'q': term
Expand All @@ -68,6 +73,10 @@ def search(self, term: str)-> list:
# Return only allowed items (tvshows, movies...)
return filter(lambda item: 'type' in item, res['data'])

def purchased(self)-> list:
res = self.makeRequest(endpoint='/user/purchased/medias')
return res['data']

def highlighteds(self)-> list:
items = []
res = self.makeRequest(endpoint='/highlighteds/home')
Expand Down Expand Up @@ -126,6 +135,11 @@ def episodes(self, item_id: int, season_id: int):

return items

def useTicket(self, item_id: int):
self.makeRequest(endpoint='/user/tickets/activate', method=Methods.POST, body={
'id': item_id
})

def getStreams(self, item_id: int):
versions = []
res = self.makeRequest(endpoint=f'/version/{item_id}')
Expand Down
3 changes: 3 additions & 0 deletions resources/lib/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ def getToken(self)-> dict:
'access': access
}

def canBuy()-> bool:
return self.addon.getSettingBool('tickets')

def setAuth(self, access_token: str, refresh_token: str, username: str):
self.addon.setSettingString('access_token', access_token)
self.addon.setSettingString('refresh_token', refresh_token)
Expand Down
64 changes: 40 additions & 24 deletions resources/lib/player/handler.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
from xbmcgui import Dialog, ListItem
from xbmcplugin import setResolvedUrl
from ..common import api, _HANDLE
from ..common import api, config, _HANDLE
from ..helpers.listitem import setInfoVideo
from .player import Player
from ..user import User
from ..exceptions.DRMException import DRMException
from ..exceptions.StreamException import StreamException

class Play():
PROTOCOL = 'mpd'
DRM = 'com.widevine.alpha'
item = {}
canWatch = True
bought = False

def __init__(self, el_id: int):
self.item = api.getMediaSimple(el_id)
self.canWatch = len(self.item['user_data']['can_watch']['data']) > 0

def buyMedia(self):
user = User()
self.bought = Dialog().yesno('Tickets', f'This content is not avaiable. Do you want to rent it using a ticket? You have {user.tickets} tickets left')
if self.bought:
api.useTicket(self.item['id'])

def versionPicker(self)-> dict:
"""
Expand All @@ -39,27 +49,33 @@ def streamPicker(self, version_id: int)-> dict:
return streams[0]

def start(self):
version = self.versionPicker()
subtitles_api = version['subtitles']['data']
# Subtitles
subtitles = []
for subtitle in subtitles_api:
subtitles.append(subtitle['subtitleFiles']['data'][0]['path'])
if not self.canWatch and config.canBuy():
self.buyMedia()

if self.canWatch or self.bought:
version = self.versionPicker()
subtitles_api = version['subtitles']['data']
# Subtitles
subtitles = []
for subtitle in subtitles_api:
subtitles.append(subtitle['subtitleFiles']['data'][0]['path'])

stream = self.streamPicker(version['id'])
play_item = setInfoVideo(stream['src'], self.item)
play_item.setSubtitles(subtitles)
# Add DRM config
if stream["drm"]:
import inputstreamhelper # pylint: disable=import-error
is_helper = inputstreamhelper.Helper(self.PROTOCOL, drm=self.DRM)
if is_helper.check_inputstream():
play_item.setProperty('inputstream', is_helper.inputstream_addon)
play_item.setProperty('inputstream.adaptive.manifest_type', self.PROTOCOL)
play_item.setProperty('inputstream.adaptive.license_type', self.DRM)
play_item.setProperty('inputstream.adaptive.license_key', stream['license_url'] + '||R{SSM}|')
else:
raise DRMException()
# Start playing
setResolvedUrl(_HANDLE, True, play_item)
Player().play(stream['src'], play_item)
stream = self.streamPicker(version['id'])
play_item = setInfoVideo(stream['src'], self.item)
play_item.setSubtitles(subtitles)
# Add DRM config
if stream["drm"]:
import inputstreamhelper # pylint: disable=import-error
is_helper = inputstreamhelper.Helper(self.PROTOCOL, drm=self.DRM)
if is_helper.check_inputstream():
play_item.setProperty('inputstream', is_helper.inputstream_addon)
play_item.setProperty('inputstream.adaptive.manifest_type', self.PROTOCOL)
play_item.setProperty('inputstream.adaptive.license_type', self.DRM)
play_item.setProperty('inputstream.adaptive.license_key', stream['license_url'] + '||R{SSM}|')
else:
raise DRMException()
# Start playing
setResolvedUrl(_HANDLE, True, play_item)
Player().play(stream['src'], play_item)
else:
Dialog().ok('Eror', 'This item is not available')
8 changes: 8 additions & 0 deletions resources/lib/user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from .common import api
class User:
id = 0
tickets = 0
def __init__(self):
res = api.user()
self.id = res['id']
self.tickets = len(res['tickets']['data'])
4 changes: 4 additions & 0 deletions resources/lib/views/MainMenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ class MainMenu(Base):
"id": "catalog",
"title": "Catalog"
},
{
"id": "purchased",
"title": "Purchased"
},
{
"id": "highlighteds",
"title": "Highlighteds"
Expand Down
9 changes: 9 additions & 0 deletions resources/lib/views/Purchased.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from .Base import Base
from ..common import api

class Purchased(Base):
path = 'purchased'
mixed = True

def setItems(self):
self.items = api.purchased()
3 changes: 2 additions & 1 deletion resources/lib/views/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from .Search import Search
from .Catalog import Catalog
from .Purchased import Purchased
from .Highlighteds import Highlighteds
from .Collections import Collections
from .Collection import Collection
Expand All @@ -12,5 +13,5 @@
All views available
"""
views = [
Search, Catalog, Highlighteds, Collections, Collection, Watching, Playlists, Playlist, Seasons, Episodes
Search, Catalog, Purchased, Highlighteds, Collections, Collection, Watching, Playlists, Playlist, Seasons, Episodes
]
7 changes: 6 additions & 1 deletion resources/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@
<default>false</default>
<control type="toggle"/>
</setting>
<setting id="upnext" type="boolean" label="40010">
<setting id="tickets" type="boolean" label="40010">
<level>0</level>
<default>false</default>
<control type="toggle"/>
</setting>
<setting id="upnext" type="boolean" label="40011">
<level>0</level>
<default>false</default>
<control type="toggle"/>
Expand Down

0 comments on commit 9185688

Please sign in to comment.