Skip to content

Commit

Permalink
Started work on wat.tv authentication but server down
Browse files Browse the repository at this point in the history
  • Loading branch information
spmjc committed Sep 26, 2015
1 parent d405a45 commit 0695936
Show file tree
Hide file tree
Showing 21 changed files with 64 additions and 45 deletions.
6 changes: 5 additions & 1 deletion resources/language/english/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,11 @@

<string id="30400">Advanced</string>
<string id="30401">Delete catalog cache</string>
<string id="30402">Catalog refresh interval(min)</string>
<string id="30402">Catalog refresh interval(min)</string>

<string id="30500">Accounts</string>
<string id="30501">Wat.tv Login</string>
<string id="30502">Wat.tv Password</string>


<!------------------------------------>
Expand Down
6 changes: 5 additions & 1 deletion resources/language/french/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,11 @@

<string id="30400">Avancé</string>
<string id="30401">Supprimer le cache des catalogues</string>
<string id="30402">Rafraichissement des catalogues (min)</string>
<string id="30402">Rafraichissement des catalogues (min)</string>

<string id="30500">Comptes</string>
<string id="30501">Login Wat.tv</string>
<string id="30502">Mot de passe Wat.tv</string>


<!------------------------------------>
Expand Down
14 changes: 7 additions & 7 deletions resources/lib/channels/allocine.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ def list_shows(channel,folder):

elif folder.find('/')==-1 or folder.find('bandes-annonces')!=-1:
if folder.find('bandes-annonces')!=-1:
filePath=utils.downloadCatalog('http://www.allocine.fr/video%s' % (folder),'allocine%s1.html' % (folder),False)
filePath=utils.downloadCatalog('http://www.allocine.fr/video%s' % (folder),'allocine%s1.html' % (folder),False,{})
else:
filePath=utils.downloadCatalog('http://www.allocine.fr/video/prgcat-%s/' % (folder),'allocine%s1.html' % (folder),False)
filePath=utils.downloadCatalog('http://www.allocine.fr/video/prgcat-%s/' % (folder),'allocine%s1.html' % (folder),False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a').replace('\n', ' ').replace('\r', '')
nbPages=1
pages=re.findall('<li><a href="(.*?)">(.*?)</a></li>', html)
Expand All @@ -39,9 +39,9 @@ def list_shows(channel,folder):

for i in range(1, nbPages+1):
if folder.find('bandes-annonces')!=-1:
filePath=utils.downloadCatalog('http://www.allocine.fr/video%s?page=%s' % (folder,i),'allocine%s%s.html' % (folder,i),False)
filePath=utils.downloadCatalog('http://www.allocine.fr/video%s?page=%s' % (folder,i),'allocine%s%s.html' % (folder,i),False,{})
else:
filePath=utils.downloadCatalog('http://www.allocine.fr/video/prgcat-%s/?page=%s' % (folder,i),'allocine%s%s.html' % (folder,i),False)
filePath=utils.downloadCatalog('http://www.allocine.fr/video/prgcat-%s/?page=%s' % (folder,i),'allocine%s%s.html' % (folder,i),False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a').replace('\n', ' ').replace('\r', '')

images=re.findall('<div class="pos_rel thumbs.*?" > <span class="(.*?)"> <img(.*?)src=\'(.*?)\' /> </span> </div>', html)
Expand All @@ -62,7 +62,7 @@ def list_shows(channel,folder):
shows.append( [channel,item[0], formatTitle(item[1]) ,image ,'folder'] )
j=j+1
else:
filePath=utils.downloadCatalog('http://www.allocine.fr%s' % (folder),'allocine%s.html' % (folder),False)
filePath=utils.downloadCatalog('http://www.allocine.fr%s' % (folder),'allocine%s.html' % (folder),False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a').replace('\n', ' ').replace('\r', '')

seasons=re.findall('<a class="button btn-primary btn-large" href="(.*?)">(.*?)</a>', html)
Expand All @@ -74,7 +74,7 @@ def list_shows(channel,folder):
def list_videos(channel,show_url):
videos=[]

filePath=utils.downloadCatalog('http://www.allocine.fr%s' % (show_url),'allocine%s.html' % (show_url.replace('/','')),False)
filePath=utils.downloadCatalog('http://www.allocine.fr%s' % (show_url),'allocine%s.html' % (show_url.replace('/','')),False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a').replace('\n', ' ').replace('\r', '')

items=re.findall('<h3 class="title "> <a href="/video/video-(.*?)/" itemprop="url">(.*?)</a> </h3>', html)
Expand All @@ -85,7 +85,7 @@ def list_videos(channel,show_url):
return videos

def getVideoURL(channel,idVideo):
filePath=utils.downloadCatalog('http://www.allocine.fr/ws/AcVisiondataV4.ashx?media=%s' % (idVideo),'allocine%s.xml' % (idVideo),False)
filePath=utils.downloadCatalog('http://www.allocine.fr/ws/AcVisiondataV4.ashx?media=%s' % (idVideo),'allocine%s.xml' % (idVideo),False,{})
xml=open(filePath).read()


Expand Down
4 changes: 2 additions & 2 deletions resources/lib/channels/arte.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def list_shows(channel,folder):
shows=[]
d=dict()

filePath=utils.downloadCatalog('http://www.arte.tv/papi/tvguide-flow/sitemap/feeds/videos/F.xml','ARTE.XML',False)
filePath=utils.downloadCatalog('http://www.arte.tv/papi/tvguide-flow/sitemap/feeds/videos/F.xml','ARTE.XML',False,{})
if folder=='none':
xml = open(filePath).read()
url=common.parseDOM(xml, "url")
Expand Down Expand Up @@ -78,7 +78,7 @@ def getVideoURL(channel,video_id):

def list_videos(channel,show_title):
videos=[]
filePath=utils.downloadCatalog('http://www.arte.tv/papi/tvguide-flow/sitemap/feeds/videos/F.xml','ARTE.XML',False)
filePath=utils.downloadCatalog('http://www.arte.tv/papi/tvguide-flow/sitemap/feeds/videos/F.xml','ARTE.XML',False,{})
xml = open(filePath).read()
url=common.parseDOM(xml, "url")

Expand Down
2 changes: 1 addition & 1 deletion resources/lib/channels/canalu.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def list_shows(channel,folder):

def list_videos(channel,id):
videos=[]
filePath=utils.downloadCatalog('http://www.canal-u.tv/themes/format.rss/theme.%s/podcast.1?xts=248546&xtor=RSS-1' % id, 'canalu%s.xml' % id,False)
filePath=utils.downloadCatalog('http://www.canal-u.tv/themes/format.rss/theme.%s/podcast.1?xts=248546&xtor=RSS-1' % id, 'canalu%s.xml' % id,False,{})
xml=open(filePath).read()
items=common.parseDOM(xml, "item")
for i in range(0, len(items)):
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/channels/cherie25.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

def list_shows(channel,folder):
shows = []
filePath = utils.downloadCatalog(url_catalog,'cherie25.html',False)
filePath = utils.downloadCatalog(url_catalog,'cherie25.html',False,{})
html = open(filePath).read().decode("utf-8")
line_s = common.parseDOM(html,"div",attrs={"class":u"line replay magazines"})
for line in line_s :
Expand Down Expand Up @@ -57,7 +57,7 @@ def list_videos(channel,params):
titre = fanart
videos.append([channel,video_url,titre,'',{'Title':titre},'play'])
else :
filePath = utils.downloadCatalog(url_catalog,'cherie25.html',False)
filePath = utils.downloadCatalog(url_catalog,'cherie25.html',False,{})
html = open(filePath).read().decode("utf-8")
line_replay = common.parseDOM(html,"div",attrs={"class":u"line replay magazines"})
for line in line_replay :
Expand Down
6 changes: 3 additions & 3 deletions resources/lib/channels/cplus.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
readyForUse=True

def get_token():
filePath=utils.downloadCatalog('http://service.mycanal.fr/authenticate.json/Android_Tab/1.1?highResolution=1','TokenCPlus.json',False)
filePath=utils.downloadCatalog('http://service.mycanal.fr/authenticate.json/Android_Tab/1.1?highResolution=1','TokenCPlus.json',False,{})
filPrgm=open(filePath).read()
jsoncat = json.loads(filPrgm)
return jsoncat['token']
Expand All @@ -18,7 +18,7 @@ def list_shows(channel,folder):
shows=[]

if folder=='none':
filePath=utils.downloadCatalog('http://service.mycanal.fr/page/'+get_token()+'/1595.json','CPLUS.json',False)
filePath=utils.downloadCatalog('http://service.mycanal.fr/page/'+get_token()+'/1595.json','CPLUS.json',False,{})
filPrgm=open(filePath).read()
jsoncat = json.loads(filPrgm)
strates = jsoncat['strates']
Expand All @@ -28,7 +28,7 @@ def list_shows(channel,folder):
shows.append( [channel,content['onClick']['URLPage'].encode('utf-8'), content['onClick']['displayName'].encode('utf-8'),content['URLImage'].encode('utf-8'),'folder'] )
else:
fileName=folder[folder.find('.json')-4:folder.find('.json')+5]
filePath=utils.downloadCatalog(folder,fileName,False)
filePath=utils.downloadCatalog(folder,fileName,False,{})
filPrgm=open(filePath).read()
jsoncat = json.loads(filPrgm)
strates = jsoncat['strates']
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/channels/france24.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
def list_shows(channel,param):
shows=[]

filePath=utils.downloadCatalog('http://api.france24.com/fr/services/json-rpc/emission_list?databases=f24fr&key=XXX&start=0&limit=30&edition_limit=8','France24.json',False)
filePath=utils.downloadCatalog('http://api.france24.com/fr/services/json-rpc/emission_list?databases=f24fr&key=XXX&start=0&limit=30&edition_limit=8','France24.json',False,{})
filPrgm=open(filePath).read()
jsonParser = json.loads(filPrgm)

Expand All @@ -22,7 +22,7 @@ def list_shows(channel,param):
def list_videos(channel,show):
videos=[]

filePath=utils.downloadCatalog('http://api.france24.com/fr/services/json-rpc/emission_list?databases=f24fr&key=XXX&start=0&limit=30&edition_limit=8','France24.json',False)
filePath=utils.downloadCatalog('http://api.france24.com/fr/services/json-rpc/emission_list?databases=f24fr&key=XXX&start=0&limit=30&edition_limit=8','France24.json',False,{})
filPrgm=open(filePath).read()
jsonParser = json.loads(filPrgm)

Expand Down
5 changes: 2 additions & 3 deletions resources/lib/channels/gulli.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def list_shows(channel,folder):
shows.append( [channel,'series','Series et films','','folder'] )
else:
d=dict()
filePath=utils.downloadCatalog(urlBase + folder,'gulli' + folder +'.html',False)
filePath=utils.downloadCatalog(urlBase + folder,'gulli' + folder +'.html',False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a')

replays = common.parseDOM(html,"div",attrs={"class":"img"})
Expand All @@ -41,7 +41,7 @@ def list_videos(channel,param):
category=param.split('$$')[1]

videos=[]
filePath=utils.downloadCatalog(urlBase + folder,'gulli' + folder +'.html',False)
filePath=utils.downloadCatalog(urlBase + folder,'gulli' + folder +'.html',False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a').replace("\n", " ")
html=' '.join([segment for segment in html.split()])

Expand All @@ -55,7 +55,6 @@ def list_videos(channel,param):
if match:
for t,st,e in match:
title=t + '-' + e.replace('&nbsp;',' ')
print title.encode("utf-8")
#<p> <strong>Atomic Betty</strong> <span> L'âge ingrat <br/> Saison 3&nbsp;Episode 135 </span> </p>
img = re.findall('src="(.*?)"',replay) [0]
infoLabels={ "Title": title}
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/channels/lcp.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def list_shows(channel,folder):
shows.append([channel,'shows',globalvar.LANGUAGE(33011),'','folder'])
shows.append([channel,'reportages',globalvar.LANGUAGE(33010),'','shows'])
else :
filePath = utils.downloadCatalog(url_catalog,'%s.xml'%(channel),False)
filePath = utils.downloadCatalog(url_catalog,'%s.xml'%(channel),False,{})
fileCat = open(filePath).read().replace('\n','').decode('utf-8')
cat = re.findall('<key>'+folder+'</key> +<array> +(.+?) +</array>',fileCat)[0]
shows_s = re.findall('<dict> +(.+?) +</dict>',cat)
Expand All @@ -30,7 +30,7 @@ def list_shows(channel,folder):
def list_videos(channel,params):
videos = []
if params=='reportages' :
filePath = utils.downloadCatalog(url_catalog,'%s.xml'%(channel),False)
filePath = utils.downloadCatalog(url_catalog,'%s.xml'%(channel),False,{})
fileCat = open(filePath).read().replace('\n','').decode('utf-8')
cat = re.findall('<key>'+params+'</key> +<array> +(.+?) +</array>',fileCat)[0]
else :
Expand Down
3 changes: 1 addition & 2 deletions resources/lib/channels/mostviewed.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def list_shows(channel,folder):
def list_videos(channel,param):
videos=[]

filePath=utils.downloadCatalog('https://docs.google.com/spreadsheets/d/%s/pubhtml' % (param),'%s.HTML' % (param),False)
filePath=utils.downloadCatalog('https://docs.google.com/spreadsheets/d/%s/pubhtml' % (param),'%s.HTML' % (param),False,{})
html=open(filePath).read()
match = re.compile(r'<td class="s19" dir="ltr">(.*?)</td><td class="s19" dir="ltr">(.*?)</td><td class="s17" dir="ltr">(.*?)</td>',re.DOTALL).findall(html)
if match:
Expand All @@ -31,7 +31,6 @@ def list_videos(channel,param):
chan= path[3:pIndex]
url=path[pIndex+7:]
infoLabels={ "Title": title,"Plot":cnt + ' ' + globalvar.LANGUAGE(33039).encode('utf-8')}
print cnt
videos.append( [chan, url,title, os.path.join( globalvar.MEDIA, chan +".png"),infoLabels,'play'] )

return videos
4 changes: 2 additions & 2 deletions resources/lib/channels/nrj12.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
def list_shows(channel,folder):
shows=[]

filePath=utils.downloadCatalog('http://www.nrj12.fr/replay-4203/collectionvideo/','NRJ12.html',False)
filePath=utils.downloadCatalog('http://www.nrj12.fr/replay-4203/collectionvideo/','NRJ12.html',False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a')

if folder=='none':
Expand Down Expand Up @@ -53,7 +53,7 @@ def getVideoURL(channel,urlPage):
def list_videos(channel,show):

videos=[]
filePath=utils.downloadCatalog('http://www.nrj12.fr/replay-4203/collectionvideo/','NRJ12.html',False)
filePath=utils.downloadCatalog('http://www.nrj12.fr/replay-4203/collectionvideo/','NRJ12.html',False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a')

line_replay_s = common.parseDOM(html,"div",attrs={"class":"line replay"})
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/channels/pluzz.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

def list_shows(channel,folder):
shows=[]
filePath=utils.downloadCatalog('http://webservices.francetelevisions.fr/catchup/flux/flux_main.zip','Pluzz.zip',False)
filePath=utils.downloadCatalog('http://webservices.francetelevisions.fr/catchup/flux/flux_main.zip','Pluzz.zip',False,{})

if folder=='none':
zf = zipfile.ZipFile(filePath)
Expand Down Expand Up @@ -56,7 +56,7 @@ def getVideoURL(channel,video_URL):
def list_videos(channel,show_title):
videos=[]

filePath=utils.downloadCatalog('http://webservices.francetelevisions.fr/catchup/flux/flux_main.zip','Pluzz.zip',False)
filePath=utils.downloadCatalog('http://webservices.francetelevisions.fr/catchup/flux/flux_main.zip','Pluzz.zip',False,{})

zf = zipfile.ZipFile(filePath)
data = zf.read('catch_up_' + channel + '.json')
Expand Down
4 changes: 2 additions & 2 deletions resources/lib/channels/pluzz2.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
def list_shows(channel,folder):
shows = []
uniqueItem = dict()
filePath = utils.downloadCatalog(channelCatalog % (channel),'%s.json' % (channel),False)
filePath = utils.downloadCatalog(channelCatalog % (channel),'%s.json' % (channel),False,{})
filPrgm = open(filePath).read()
jsonParser = json.loads(filPrgm)
emissions = jsonParser['reponse']['emissions']
Expand All @@ -42,7 +42,7 @@ def list_shows(channel,folder):
def list_videos(channel,folder):
videos = []
uniqueItem = dict()
filePath = utils.downloadCatalog(channelCatalog % (channel),'%s.json' % (channel),False)
filePath = utils.downloadCatalog(channelCatalog % (channel),'%s.json' % (channel),False,{})
filPrgm = open(filePath).read()
jsonParser = json.loads(filPrgm)
emissions = jsonParser['reponse']['emissions']
Expand Down
2 changes: 1 addition & 1 deletion resources/lib/channels/tf1thematiques.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
def list_shows(channel,folder):
shows=[]
for i in range(0, int(globalvar.ADDON.getSetting('tf1ThemePages'))):
filePath=utils.downloadCatalog('http://www.%s.fr/videos?page=%s' % (channel,i),'%s%s.html' % (channel,i),False)
filePath=utils.downloadCatalog('http://www.%s.fr/videos?page=%s' % (channel,i),'%s%s.html' % (channel,i),False,{})
html=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a')

items=re.findall(r'src="(.*?)"/> </a></div> <div class="views-field views-field-title"> <span class="field-content"><a href="(.*?)">(.*?)</a></span>', html.replace('\n', ' ').replace('\r', ''))
Expand Down
6 changes: 2 additions & 4 deletions resources/lib/channels/tntv.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def list_shows(channel,param):
def list_videos(channel,show):
videos=[]

filePath=utils.downloadCatalog('http://tntv.goodbarber.com/apiv3/getItemsByCategorie/6833037/%s/1/%s/' % (show,nbItems),'tntv%s.json' % (show),False)
filePath=utils.downloadCatalog('http://tntv.goodbarber.com/apiv3/getItemsByCategorie/6833037/%s/1/%s/' % (show,nbItems),'tntv%s.json' % (show),False,{})

jsonParser= json.loads(open(filePath).read())
for item in jsonParser['items'] :
Expand All @@ -39,9 +39,7 @@ def list_videos(channel,show):
def getVideoURL(channel,video_id):
urlVideo=''
t=video_id.split('-')
print t[0]
print t[1]
filePath=utils.downloadCatalog('http://tntv.goodbarber.com/apiv3/getItemsByCategorie/6833037/%s/1/%s/' % (t[0],nbItems),'tntv%s.json' % (t[0]),False)
filePath=utils.downloadCatalog('http://tntv.goodbarber.com/apiv3/getItemsByCategorie/6833037/%s/1/%s/' % (t[0],nbItems),'tntv%s.json' % (t[0]),False,{})

jsonParser= json.loads(open(filePath).read())
for item in jsonParser['items'] :
Expand Down
2 changes: 1 addition & 1 deletion resources/lib/channels/toutv.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
def list_shows(channel,param):
shows=[]

filePath=utils.downloadCatalog('http://www.tou.tv/presentation/section/a-z?AkamaiDevice=phone&smallWidth=320&mediumWidth=640&largeWidth=640&isPhone=True','TouTV.json',False)
filePath=utils.downloadCatalog('http://www.tou.tv/presentation/section/a-z?AkamaiDevice=phone&smallWidth=320&mediumWidth=640&largeWidth=640&isPhone=True','TouTV.json',False,{})
filPrgm=open(filePath).read()
jsonParser = json.loads(filPrgm)

Expand Down
6 changes: 2 additions & 4 deletions resources/lib/channels/tv5af.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def list_shows(channel,folder):
dType=dict()
dTitre=dict()

filePath=utils.downloadCatalog('http://www.tv5mondeplusafrique.com/dotscreen/exportAfrique.xml','TV5AF.XML',False)
filePath=utils.downloadCatalog('http://www.tv5mondeplusafrique.com/dotscreen/exportAfrique.xml','TV5AF.XML',False,{})
xml = open(filePath).read()
item=common.parseDOM(xml, "item")
lids = common.parseDOM(xml, "item", ret = "lid")
Expand Down Expand Up @@ -51,7 +51,7 @@ def list_shows(channel,folder):

def list_videos(channel,show_title):
videos=[]
filePath=utils.downloadCatalog('http://www.tv5mondeplusafrique.com/dotscreen/exportAfrique.xml','TV5AF.XML',False)
filePath=utils.downloadCatalog('http://www.tv5mondeplusafrique.com/dotscreen/exportAfrique.xml','TV5AF.XML',False,{})
xml = open(filePath).read()
item=common.parseDOM(xml, "item")
lids = common.parseDOM(xml, "item", ret = "lid")
Expand All @@ -74,8 +74,6 @@ def list_videos(channel,show_title):
durees=common.parseDOM(item[i], "duree")
if len(durees)>0:
sDuree=durees[0]
print sDuree[0:2]
print sDuree[3:5]
duree=int(sDuree[0:2])*60+int(sDuree[3:5])

dates=common.parseDOM(item[i], "dateCreation")
Expand Down
9 changes: 9 additions & 0 deletions resources/lib/channels/wattv.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,18 @@
img = ['wattv']
readyForUse = True

def getToken():
login=globalvar.ADDON.getSetting('watLogin')
pwd=globalvar.ADDON.getSetting('watPwd')
filePath=utils.downloadCatalog('https://www.wat.tv/v4/appmobile/user/authentication','WatAuth.html',False,{'username':'[email protected]','password':'prisju2306'})
jsonFile=open(filePath).read().replace('\xe9', 'e').replace('\xe0', 'a')
print jsonFile

def list_shows(channel,folder):
shows=[]
if folder=='none':
getToken()
shows.append( [channel,'https://www.wat.tv/v4/appmobile/user/subscriptions/channel', 'My Channels','','folder'] )
shows.append( [channel,'http://www.wat.tv/v4/appmobile/theme/61', 'Replay TV','','folder'] )
shows.append( [channel,'http://www.wat.tv/v4/appmobile/theme/1', 'Musique','','folder'] )
shows.append( [channel,'http://www.wat.tv/v4/appmobile/theme/101', 'Humour','','folder'] )
Expand Down
Loading

0 comments on commit 0695936

Please sign in to comment.