summaryrefslogtreecommitdiff
path: root/plugin.video.catchuptvandmore
diff options
context:
space:
mode:
authorSylvain CECCHETTO <cecchetto.sylvain@me.com>2017-06-03 01:50:45 +0200
committerenen92 <enen92@users.noreply.github.com>2017-06-03 00:50:45 +0100
commit85b0671d028bf0f91b96d6fe19e9ab42b1f22f49 (patch)
treed46e31903b4704739e5b3a527973d7cda6a02eff /plugin.video.catchuptvandmore
parentef4823dcbc136fdc99832f894028f04f38db9f30 (diff)
[plugin.video.catchuptvandmore] 0.1.2 (#1197)
[plugin.video.catchuptvandmore] 0.1.2
Diffstat (limited to 'plugin.video.catchuptvandmore')
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/LICENSE.txt0
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/README.md9
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/addon.py12
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/addon.xml16
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/__init__.py0
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/language/resource.language.en_gb/strings.po56
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/language/resource.language.fr_fr/strings.po52
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/__init__.py0
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/__init__.py0
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/6play.py12
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/__init__.py0
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/arte.py299
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/bfmtv.py16
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/c.py8
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/canalplus.py445
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/gulli.py70
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/itele.py40
-rw-r--r--plugin.video.catchuptvandmore/resources/lib/channels/fr/lequipe.py249
-rw-r--r--plugin.video.catchuptvandmore/resources/lib/channels/fr/nrj.py392
-rw-r--r--plugin.video.catchuptvandmore/resources/lib/channels/fr/numero23.py234
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/pluzz.py533
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/channels/fr/tf1.py264
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/common.py9
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/simpleplugin.py0
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/skeleton.py12
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/lib/utils.py4
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/6ter.pngbin0 -> 100963 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/6ter_fanart.pngbin0 -> 277616 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/arte.pngbin23700 -> 23700 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv.pngbin35775 -> 35775 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv_fanart.pngbin483976 -> 483976 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/c8.pngbin85413 -> 85413 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/c8_fanart.pngbin201320 -> 201320 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus.pngbin23038 -> 23038 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus_fanart.pngbin104838 -> 104838 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/cherie25.pngbin0 -> 65360 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/cstar.pngbin36243 -> 36243 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/cstar_fanart.pngbin128048 -> 128048 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/france2.pngbin53728 -> 53728 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/france2_fanart.pngbin333122 -> 333122 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/france3.pngbin31569 -> 31569 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/france3_fanart.pngbin176208 -> 176208 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/france4.pngbin78093 -> 78093 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/france5.pngbin51222 -> 51222 bytes
-rwxr-xr-xplugin.video.catchuptvandmore/resources/media/channels/fr/france5_fanart.pngbin157085 -> 0 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/franceo.pngbin0 -> 46934 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/gulli.pngbin162929 -> 162929 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/gulli_fanart.pngbin318305 -> 318305 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/hd1.pngbin0 -> 24214 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/hd1_fanart.pngbin0 -> 629402 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/itele.pngbin26801 -> 26801 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/itele_fanart.pngbin85354 -> 85354 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe.pngbin0 -> 32528 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe_fanart.pngbin0 -> 82760 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/m6.pngbin125343 -> 125343 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/m6_fanart.pngbin569115 -> 569115 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12.pngbin73550 -> 73550 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12_fanart.pngbin340086 -> 340086 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/nt1.pngbin178003 -> 178003 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/nt1_fanart.pngbin339900 -> 339900 bytes
-rw-r--r--plugin.video.catchuptvandmore/resources/media/channels/fr/numero23.pngbin0 -> 37779 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/tf1.pngbin38203 -> 38203 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/tf1_fanart.pngbin694530 -> 694530 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/tmc.pngbin25166 -> 25166 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/tmc_fanart.pngbin345299 -> 345299 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/media/channels/fr/w9.pngbin115591 -> 115591 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/screenshots/screenshot-01.jpgbin534015 -> 534015 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/screenshots/screenshot-02.jpgbin543386 -> 543386 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/screenshots/screenshot-03.jpgbin532567 -> 532567 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/screenshots/screenshot-04.jpgbin809400 -> 809400 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/screenshots/screenshot-05.jpgbin849740 -> 849740 bytes
-rw-r--r--[-rwxr-xr-x]plugin.video.catchuptvandmore/resources/settings.xml82
72 files changed, 2181 insertions, 633 deletions
diff --git a/plugin.video.catchuptvandmore/LICENSE.txt b/plugin.video.catchuptvandmore/LICENSE.txt
index 0d6e108..0d6e108 100755..100644
--- a/plugin.video.catchuptvandmore/LICENSE.txt
+++ b/plugin.video.catchuptvandmore/LICENSE.txt
diff --git a/plugin.video.catchuptvandmore/README.md b/plugin.video.catchuptvandmore/README.md
index f4e066d..c4d3ff0 100755..100644
--- a/plugin.video.catchuptvandmore/README.md
+++ b/plugin.video.catchuptvandmore/README.md
@@ -28,6 +28,12 @@ Catch-Up TV & More est compatible avec la dernière version de Kodi (Kodi 17 Kry
- i-Télé
- CStar
- Gulli
+- France Ô
+- HD1
+- L'Équipe
+- 6ter
+- Numéro 23
+- Chérie 25
### Belgique — *Belgium*
- *à venir* — *coming soon*
@@ -38,3 +44,6 @@ Catch-Up TV & More est compatible avec la dernière version de Kodi (Kodi 17 Kry
## Bugs et améliorations — *Bugs and improvements*
Retours de bugs, propositions d'améliorations ou d'ajout de contenus sont les bienvenue ! GitHub ou e-mail.
*Bug reports, suggestions for improvements or content additions are welcome! GitHub or e-mail.*
+
+## French Forum
+<https://forum.mpdb.tv/index.php/topic,35713.0.html>
diff --git a/plugin.video.catchuptvandmore/addon.py b/plugin.video.catchuptvandmore/addon.py
index 6591a5b..229d7d2 100755..100644
--- a/plugin.video.catchuptvandmore/addon.py
+++ b/plugin.video.catchuptvandmore/addon.py
@@ -56,6 +56,7 @@ def root(params):
for category_id, string_id in skeleton.categories.iteritems():
if common.plugin.get_setting(category_id):
last_category_id = category_id
+ last_window_title = _(string_id)
context_menu = []
hide = (
_('Hide'),
@@ -68,13 +69,16 @@ def root(params):
'label': _(string_id),
'url': common.plugin.get_url(
action='list_channels',
- category_id=category_id),
+ category_id=category_id,
+ window_title=_(string_id)
+ ),
'context_menu': context_menu
})
# If only one category is present, directly open this category
if len(listing) == 1:
params['category_id'] = last_category_id
+ params['window_title'] = last_window_title
return list_channels(params)
return common.plugin.create_listing(
@@ -178,7 +182,8 @@ def list_channels(params):
channel_name=channel_name,
channel_module=channel_module,
channel_id=channel_id,
- channel_country=channel_country
+ channel_country=channel_country,
+ window_title=title
),
'context_menu': context_menu
})
@@ -273,4 +278,5 @@ def hide(params):
if __name__ == '__main__':
- common.plugin.run(common.plugin_name)
+ window_title = common.get_window_title()
+ common.plugin.run(window_title)
diff --git a/plugin.video.catchuptvandmore/addon.xml b/plugin.video.catchuptvandmore/addon.xml
index d01f76c..902f222 100755..100644
--- a/plugin.video.catchuptvandmore/addon.xml
+++ b/plugin.video.catchuptvandmore/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.catchuptvandmore"
name="Catch-up TV &amp; More"
- version="0.1.0"
+ version="0.1.2"
provider-name="SylvainCecchetto">
<requires>
<import addon="xbmc.python" version="2.25.0"/>
@@ -26,7 +26,17 @@
<email>catch.up.tv.and.more [AT] gmail [DOT] com</email>
<source>https://github.com/SylvainCecchetto/plugin.video.catchuptvandmore</source>
<news>
-This is the first released with some french channels. More contents will be added, stay tuned!
+[Add channel] RTL-TVI
+[Add channel] 6ter
+[Bug] NRJ 12: No video
+[Improvement] NRJ 12: Add listing for categories and seasons
+[Improvement] France Télévision (pluzz): Add search feature and "last videos" categories
+[Bug] TF1: Video URL failed
+[Bug] Gulli: Doesn't work
+[Add channel] Numéro 23
+[Add channel] Chérie 25
+[Bug] Arte: Doesn't work
+[Bug] Canal+: Bug with subcategories
</news>
<assets>
<icon>icon.png</icon>
@@ -38,4 +48,4 @@ This is the first released with some french channels. More contents will be adde
<screenshot>resources/screenshots/screenshot-05.jpg</screenshot>
</assets>
</extension>
-</addon> \ No newline at end of file
+</addon>
diff --git a/plugin.video.catchuptvandmore/resources/__init__.py b/plugin.video.catchuptvandmore/resources/__init__.py
index e69de29..e69de29 100755..100644
--- a/plugin.video.catchuptvandmore/resources/__init__.py
+++ b/plugin.video.catchuptvandmore/resources/__init__.py
diff --git a/plugin.video.catchuptvandmore/resources/language/resource.language.en_gb/strings.po b/plugin.video.catchuptvandmore/resources/language/resource.language.en_gb/strings.po
index abd4300..0b6f701 100755..100644
--- a/plugin.video.catchuptvandmore/resources/language/resource.language.en_gb/strings.po
+++ b/plugin.video.catchuptvandmore/resources/language/resource.language.en_gb/strings.po
@@ -19,7 +19,7 @@ msgstr ""
# Settings categories (from 30000 to 30009)
msgctxt "#30000"
msgid "Main menu"
-msgstr "Menu principal"
+msgstr ""
msgctxt "#30001"
msgid "Channels"
@@ -29,6 +29,7 @@ msgctxt "#30002"
msgid "Quality and content"
msgstr ""
+
# Settings line separators (from 30010 to 30019)
msgctxt "#30010"
msgid "Hide main menu categories"
@@ -122,6 +123,33 @@ msgctxt "#30081"
msgid "BFM TV: Video quality"
msgstr ""
+msgctxt "#30082"
+msgid "TMC: Show bonus videos"
+msgstr ""
+
+msgctxt "#30083"
+msgid "NT1: Show bonus videos"
+msgstr ""
+
+msgctxt "#30084"
+msgid "HD1: Show bonus videos"
+msgstr ""
+
+msgctxt "#30085"
+msgid "NRJ 12: Video quality"
+msgstr ""
+
+msgctxt "#30086"
+msgid "L'Équipe: Video quality"
+msgstr ""
+
+msgctxt "#30087"
+msgid "TF1: Video quality"
+msgstr ""
+
+msgctxt "#30088"
+msgid "Numéro 23: Video quality"
+msgstr ""
# Others (from 30100 to 30140)
msgctxt "#30100"
@@ -134,4 +162,28 @@ msgstr ""
msgctxt "#30102"
msgid "DRM protected video"
-msgstr "Vidéo protégée par DRM" \ No newline at end of file
+msgstr ""
+
+msgctxt "#30103"
+msgid "Search"
+msgstr ""
+
+msgctxt "#30104"
+msgid "Last videos"
+msgstr ""
+
+msgctxt "#30105"
+msgid "From A to Z"
+msgstr ""
+
+msgctxt "#30106"
+msgid "Ascending"
+msgstr ""
+
+msgctxt "#30107"
+msgid "Descending"
+msgstr ""
+
+msgctxt "#30108"
+msgid "More programs..."
+msgstr "" \ No newline at end of file
diff --git a/plugin.video.catchuptvandmore/resources/language/resource.language.fr_fr/strings.po b/plugin.video.catchuptvandmore/resources/language/resource.language.fr_fr/strings.po
index 00433d9..35ee599 100755..100644
--- a/plugin.video.catchuptvandmore/resources/language/resource.language.fr_fr/strings.po
+++ b/plugin.video.catchuptvandmore/resources/language/resource.language.fr_fr/strings.po
@@ -123,6 +123,34 @@ msgctxt "#30081"
msgid "BFM TV: Video quality"
msgstr "BFM TV : Qualité vidéo"
+msgctxt "#30082"
+msgid "TMC: Show bonus videos"
+msgstr "TMC : Afficher les vidéos bonus"
+
+msgctxt "#30083"
+msgid "NT1: Show bonus videos"
+msgstr "NT1 : Afficher les vidéos bonus"
+
+msgctxt "#30084"
+msgid "HD1: Show bonus videos"
+msgstr "HD1 : Afficher les vidéos bonus"
+
+msgctxt "#30085"
+msgid "NRJ 12: Video quality"
+msgstr "NRJ 12 : Qualité vidéo"
+
+msgctxt "#30086"
+msgid "L'Équipe: Video quality"
+msgstr "L'Équipe : Qualité vidéo"
+
+msgctxt "#30087"
+msgid "TF1: Video quality"
+msgstr "TF1 : Qualité vidéo"
+
+msgctxt "#30088"
+msgid "Numéro 23: Video quality"
+msgstr "Numéro 23 : Qualité vidéo"
+
# Others (from 30100 to 30140)
msgctxt "#30100"
@@ -137,4 +165,28 @@ msgctxt "#30102"
msgid "DRM protected video"
msgstr "Vidéo protégée par DRM"
+msgctxt "#30103"
+msgid "Search"
+msgstr "Rechercher"
+
+msgctxt "#30104"
+msgid "Last videos"
+msgstr "Dernières vidéos"
+
+msgctxt "#30105"
+msgid "From A to Z"
+msgstr "De A à Z"
+
+msgctxt "#30106"
+msgid "Ascending"
+msgstr "Ascendant"
+
+msgctxt "#30107"
+msgid "Descending"
+msgstr "Descendant"
+
+msgctxt "#30108"
+msgid "More programs..."
+msgstr "Plus de programes..."
+
diff --git a/plugin.video.catchuptvandmore/resources/lib/__init__.py b/plugin.video.catchuptvandmore/resources/lib/__init__.py
index e69de29..e69de29 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/__init__.py
+++ b/plugin.video.catchuptvandmore/resources/lib/__init__.py
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/__init__.py b/plugin.video.catchuptvandmore/resources/lib/channels/__init__.py
index e69de29..e69de29 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/__init__.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/__init__.py
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/6play.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/6play.py
index d60ebd0..4a62a9d 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/6play.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/6play.py
@@ -106,7 +106,8 @@ def list_shows(params):
action='channel_entry',
category_id=category_id,
next='list_shows_2',
- title=category_name
+ title=category_name,
+ window_title=category_name
)
})
@@ -155,7 +156,8 @@ def list_shows(params):
program_img=program_img,
program_fanart=program_fanart,
program_desc=program_desc,
- title=program_title
+ title=program_title,
+ window_title=program_title
),
'info': info
})
@@ -193,7 +195,8 @@ def list_shows(params):
action='channel_entry',
next='list_videos',
program_id=params.program_id,
- sub_category_id=sub_category_id
+ sub_category_id=sub_category_id,
+ window_title=sub_category_title
),
'info': info
})
@@ -212,7 +215,8 @@ def list_shows(params):
action='channel_entry',
next='list_videos',
program_id=params.program_id,
- sub_category_id='null'
+ sub_category_id='null',
+ window_title=params.window_title
),
'info': info
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/__init__.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/__init__.py
index e69de29..e69de29 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/__init__.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/__init__.py
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/arte.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/arte.py
index f2b7a2b..02aa6c4 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/arte.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/arte.py
@@ -24,14 +24,14 @@ import json
from resources.lib import utils
from resources.lib import common
-authorization_key = 'Bearer OTE3NjJhOTYwNzQzNWY0MGE0OGI5MGQ0YmVm' \
- 'MWY2Y2JiYzc5NDQzY2IxMmYxYjQ0NDVlYmEyOTBmYjVkMDg3OQ'
+# TODO
+# List emissions
+# Most recent
+# Most viewed
-headers = {'Authorization': authorization_key}
-
-url_categories = 'https://api-cdn.arte.tv/api/opa/v2/categories?' \
- 'language=%s&limit=100&sort=order'
-# Valid languages list : fr|de|en|es|pl
+url_replay = 'https://www.arte.tv/papi/tvguide/videos/' \
+ 'ARTE_PLUS_SEVEN/%s.json?includeLongRights=true'
+# Valid languages: F or D
def channel_entry(params):
@@ -40,49 +40,82 @@ def channel_entry(params):
elif 'list_videos' in params.next:
return list_videos(params)
elif 'play' in params.next:
- return get_video_URL(params)
+ return get_video_url(params)
@common.plugin.cached(common.cache_time)
def list_shows(params):
shows = []
+ emissions_list = []
+ categories = {}
- disered_language = common.plugin.get_setting(
+ desired_language = common.plugin.get_setting(
params.channel_id + '.language')
- if disered_language == 'Auto':
- disered_language = params.channel_country
+ if desired_language == 'Auto':
+ if params.channel_country == 'fr':
+ desired_language = 'F'
+ elif params.channel_country == 'de':
+ desired_language = 'D'
+ elif desired_language == 'fr':
+ desired_language = 'F'
+ elif desired_language == 'de':
+ desired_language = 'D'
+ else:
+ desired_language = 'F'
file_path = utils.download_catalog(
- url_categories % disered_language,
- '%s.json' % params.channel_name,
- specific_headers=headers)
- file_categories = open(file_path).read()
- json_parser = json.loads(file_categories)
-
- for category in json_parser['categories']:
- label = category['label'].encode('utf-8')
- desc = category['description'].encode('utf-8')
- href = category['links']['videos']['href'].encode('utf-8')
- code = category['code'].encode('utf-8')
-
- info = {
- 'video': {
- 'title': label,
- 'plot': desc
- }
- }
+ url_replay % desired_language,
+ '%s_%s.json' % (params.channel_name, desired_language)
+ )
+ file_replay = open(file_path).read()
+ json_parser = json.loads(file_replay)
+
+ for emission in json_parser['paginatedCollectionWrapper']['collection']:
+ emission_dict = {}
+ emission_dict['duration'] = emission['videoDurationSeconds']
+ emission_dict['video_url'] = emission['videoPlayerUrl'].encode('utf-8')
+ emission_dict['image'] = emission['programImage'].encode('utf-8')
+ try:
+ emission_dict['genre'] = emission['genre'].encode('utf-8')
+ except:
+ emission_dict['genre'] = 'Unknown'
+ try:
+ emission_dict['director'] = emission['director'].encode('utf-8')
+ except:
+ emission_dict['director'] = ''
+ emission_dict['production_year'] = emission['productionYear']
+ emission_dict['program_title'] = emission['VTI'].encode('utf-8')
+ try:
+ emission_dict['emission_title'] = emission['VSU'].encode('utf-8')
+ except:
+ emission_dict['emission_title'] = ''
+
+ emission_dict['category'] = emission['VCH'][0]['label'].encode('utf-8')
+ categories[emission_dict['category']] = emission_dict['category']
+ emission_dict['aired'] = emission['VDA'].encode('utf-8')
+ emission_dict['playcount'] = emission['VVI']
+
+ try:
+ emission_dict['desc'] = emission['VDE'].encode('utf-8')
+ except:
+ emission_dict['desc'] = ''
+
+ emissions_list.append(emission_dict)
+
+ with common.plugin.get_storage() as storage:
+ storage['emissions_list'] = emissions_list
+
+ for category in categories.keys():
shows.append({
- 'label': label,
+ 'label': category,
'url': common.plugin.get_url(
action='channel_entry',
- code=code,
- href=href,
- next='list_videos',
- title=label
+ next='list_videos_cat',
+ category=category,
+ window_title=category
),
- 'info': info
})
return common.plugin.create_listing(
@@ -97,107 +130,70 @@ def list_shows(params):
@common.plugin.cached(common.cache_time)
def list_videos(params):
videos = []
-
- params_url = {
- 'geoblockingZone': 'EUR_DE_FR,ALL,SAT,DE_FR',
- 'imageSize': '1920x1080,625x224,940x530,720x406,400x225',
- 'kind': 'SHOW',
- 'limit': '100',
- 'platform': 'ARTEPLUS7',
- 'sort': '-broadcastBegin',
- 'videoLibrary': 'true'
- }
- file_path = utils.download_catalog(
- params.href,
- '%s.json' % (params.channel_name + params.code),
- specific_headers=headers,
- params=params_url)
- file_shows = open(file_path).read()
- json_parser = json.loads(file_shows)
-
- for video in json_parser['videos']:
- title = video['title'].encode('utf-8')
- subtitle = ''
- if video['subtitle'] is not None:
- subtitle = video['subtitle'].encode('utf-8')
-
- original_title = video['originalTitle'].encode('utf-8')
- plotoutline = ''
- if video['shortDescription'] is not None:
- plotoutline = video['shortDescription'].encode('utf-8')
- plot = ''
- if video['fullDescription'] is not None:
- plot = video['fullDescription'].encode('utf-8')
- duration = video['durationSeconds']
- year_prod = video['productionYear']
- genre = video['genrePresse'].encode('utf-8')
- season = video['season']
- episode = video['episode']
- total_episodes = video['totalEpisodes']
- href = video['links']['videoStreams']['href'].encode('utf-8')
- views = video['views']
- director = video['director']
- aired = video['arteSchedulingDay'] # year-mounth-day
- day = aired.split('-')[2]
- mounth = aired.split('-')[1]
- year = aired.split('-')[0]
- date = '.'.join((day, mounth, year))
- fanart = video['mainImage']['url'].encode('utf-8')
- thumb = video['mainImage']['alternateResolutions'][1]['url'].encode('utf-8')
-
- if subtitle:
- title = title + ' - [I]' + subtitle + '[/I]'
-
- info = {
- 'video': {
- 'title': title,
- 'originaltitle': original_title,
- 'plot': plot,
- 'plotoutline': plotoutline,
- 'aired': aired,
- 'date': date,
- 'duration': duration,
- 'year': year_prod,
- 'genre': genre,
- 'season': season,
- 'episode': episode,
- 'playcount': views,
- 'director': director,
- 'mediatype': 'tvshow'
- }
- }
-
- videos.append({
- 'label': title,
- 'fanart': fanart,
- 'thumb': thumb,
- 'url': common.plugin.get_url(
- action='channel_entry',
- next='play',
- href=href,
+ with common.plugin.get_storage() as storage:
+ emissions_list = storage['emissions_list']
+
+ if params.next == 'list_videos_cat':
+ for emission in emissions_list:
+ if emission['category'] == params.category:
+ if emission['emission_title']:
+ title = emission['program_title'] + ' - [I]' + \
+ emission['emission_title'] + '[/I]'
+ else:
+ title = emission['program_title']
+ aired = emission['aired'].split(' ')[0]
+ aired_splited = aired.split('/')
+ day = aired_splited[0]
+ mounth = aired_splited[1]
+ year = aired_splited[2]
+ # date : string (%d.%m.%Y / 01.01.2009)
+ # aired : string (2008-12-07)
+ date = '.'.join((day, mounth, year))
+ aired = '-'.join((year, mounth, day))
+ info = {
+ 'video': {
+ 'title': title,
+ 'plot': emission['desc'],
+ 'aired': aired,
+ 'date': date,
+ 'duration': emission['duration'],
+ 'year': emission['production_year'],
+ 'genre': emission['genre'],
+ 'playcount': emission['playcount'],
+ 'director': emission['director'],
+ 'mediatype': 'tvshow'
+ }
+ }
+
+ videos.append({
+ 'label': title,
+ 'thumb': emission['image'],
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ url=emission['video_url'],
+ ),
+ 'is_playable': True,
+ 'info': info
+ })
+
+ return common.plugin.create_listing(
+ videos,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_DATE,
+ common.sp.xbmcplugin.SORT_METHOD_DURATION,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
+ common.sp.xbmcplugin.SORT_METHOD_GENRE,
+ common.sp.xbmcplugin.SORT_METHOD_PLAYCOUNT,
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED
),
- 'is_playable': True,
- 'info': info
- })
-
- return common.plugin.create_listing(
- videos,
- sort_methods=(
- common.sp.xbmcplugin.SORT_METHOD_DATE,
- common.sp.xbmcplugin.SORT_METHOD_DURATION,
- common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
- common.sp.xbmcplugin.SORT_METHOD_GENRE,
- common.sp.xbmcplugin.SORT_METHOD_PLAYCOUNT,
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED
- ),
- content='tvshows')
+ content='tvshows')
@common.plugin.cached(common.cache_time)
-def get_video_URL(params):
+def get_video_url(params):
file_medias = utils.get_webcontent(
- params.href,
- specific_headers=headers)
+ params.url)
json_parser = json.loads(file_medias)
url_auto = ''
@@ -205,31 +201,22 @@ def get_video_URL(params):
url_hd = ''
url_sd = ''
url_sd_minus = ''
- for video_stream in json_parser['videoStreams']:
- if video_stream['audioSlot'] == 1:
- if video_stream['quality'] == 'AQ' or \
- video_stream['quality'] == 'XQ':
- url_auto = video_stream['url'].encode('utf-8')
-
- elif video_stream['quality'] == 'SQ' and \
- video_stream['mediaType'] == 'mp4' and \
- video_stream['protocol'] == 'HTTP':
- url_hd_plus = video_stream['url'].encode('utf-8')
-
- elif video_stream['quality'] == 'EQ' and \
- video_stream['mediaType'] == 'mp4' and \
- video_stream['protocol'] == 'HTTP':
- url_hd = video_stream['url'].encode('utf-8')
-
- elif video_stream['quality'] == 'HQ' and \
- video_stream['mediaType'] == 'mp4' and \
- video_stream['protocol'] == 'HTTP':
- url_sd = video_stream['url'].encode('utf-8')
-
- elif video_stream['quality'] == 'MQ' and \
- video_stream['mediaType'] == 'mp4' and \
- video_stream['protocol'] == 'HTTP':
- url_sd_minus = video_stream['url'].encode('utf-8')
+ video_streams = json_parser['videoJsonPlayer']['VSR']
+
+ if 'HLS_SQ_1' in video_streams:
+ url_auto = video_streams['HLS_SQ_1']['url'].encode('utf-8')
+
+ if 'HTTP_MP4_SQ_1' in video_streams:
+ url_hd_plus = video_streams['HTTP_MP4_SQ_1']['url'].encode('utf-8')
+
+ if 'HTTP_MP4_EQ_1' in video_streams:
+ url_hd = video_streams['HTTP_MP4_EQ_1']['url'].encode('utf-8')
+
+ if 'HTTP_MP4_HQ_1' in video_streams:
+ url_sd = video_streams['HTTP_MP4_HQ_1']['url'].encode('utf-8')
+
+ if 'HTTP_MP4_MQ_1' in video_streams:
+ url_sd_minus = video_streams['HTTP_MP4_MQ_1']['url'].encode('utf-8')
desired_quality = common.plugin.get_setting(
params.channel_id + '.quality')
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/bfmtv.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/bfmtv.py
index f88615b..7bd7a93 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/bfmtv.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/bfmtv.py
@@ -23,6 +23,7 @@
import json
from resources.lib import utils
from resources.lib import common
+import ast
url_token = 'http://api.nextradiotv.com/bfmtv-applications/'
@@ -85,7 +86,8 @@ def list_shows(params):
category=category,
next='list_videos_1',
title=title,
- page='1'
+ page='1',
+ window_title=title
)
})
@@ -101,6 +103,9 @@ def list_shows(params):
@common.plugin.cached(common.cache_time)
def list_videos(params):
videos = []
+ if 'previous_listing' in params:
+ videos = ast.literal_eval(params['previous_listing'])
+
if params.next == 'list_videos_1':
file_path = utils.download_catalog(
url_show % (
@@ -158,7 +163,10 @@ def list_videos(params):
category=params.category,
next='list_videos_1',
title=title,
- page=str(int(params.page) + 1)
+ page=str(int(params.page) + 1),
+ window_title=params.window_title,
+ update_listing=True,
+ previous_listing=str(videos)
)
})
@@ -172,7 +180,9 @@ def list_videos(params):
common.sp.xbmcplugin.SORT_METHOD_GENRE,
common.sp.xbmcplugin.SORT_METHOD_UNSORTED
),
- content='tvshows')
+ content='tvshows',
+ update_listing='update_listing' in params,
+ )
@common.plugin.cached(common.cache_time)
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/c.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/c.py
index 84d3b2d..07bd241 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/c.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/c.py
@@ -77,7 +77,8 @@ def list_shows(params):
action='channel_entry',
slug=slug,
next='list_shows_2',
- title=title
+ title=title,
+ window_title=title
)
})
@@ -113,7 +114,8 @@ def list_shows(params):
id=id,
videos_recent=videos_recent,
slug=slug,
- title=title
+ title=title,
+ window_title=title
)
})
@@ -199,7 +201,6 @@ def list_videos(params):
content='tvshows')
-
@common.plugin.cached(common.cache_time)
def get_video_URL(params):
file_video = utils.get_webcontent(
@@ -207,4 +208,3 @@ def get_video_URL(params):
)
video_json = json.loads(file_video)
return video_json['main']['MEDIA']['VIDEOS']['HLS'].encode('utf-8')
-
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/canalplus.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/canalplus.py
index 12240ef..d0e7dff 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/canalplus.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/canalplus.py
@@ -24,6 +24,7 @@
import json
from resources.lib import utils
from resources.lib import common
+import ast
url_auth = 'http://service.mycanal.fr/authenticate.json/iphone/' \
@@ -51,78 +52,183 @@ def get_token():
@common.plugin.cached(common.cache_time)
def list_shows(params):
- # Create categories list
shows = []
-
if params.next == 'list_shows_1':
- file_path = utils.download_catalog(
- url_categories % get_token(),
- '%s.json' % (params.channel_name))
- file_categories = open(file_path).read()
- json_categories = json.loads(file_categories)
-
- for strate in json_categories['strates']:
- if strate['type'] == 'textList':
- for content in strate['contents']:
- title = content['title'].encode('utf-8')
- url_page = content['onClick']['URLPage'].encode('utf-8')
-
- shows.append({
- 'label': title,
- 'url': common.plugin.get_url(
- action='channel_entry',
- url_page=url_page,
- next='list_shows_2',
- title=title
- )
- })
-
- shows = common.plugin.create_listing(
- shows,
- sort_methods=(
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
- common.sp.xbmcplugin.SORT_METHOD_LABEL
- )
- )
+ if 'url_page' not in params:
+ params.url_page = url_categories % get_token()
+ if 'title' not in params:
+ params.title = 'root'
+ if 'fanart' in params:
+ fanart = params.fanart
+ else:
+ fanart = ''
- elif params.next == 'list_shows_2':
- # Create category's programs list
file_path = utils.download_catalog(
params.url_page,
- '%s.json' % (params.title))
+ '%s_%s_%s.json' % (
+ params.channel_name,
+ params.title,
+ common.sp.md5(params.url_page).hexdigest()))
file_shows = open(file_path).read()
shows_json = json.loads(file_shows)
+ if 'strates' in shows_json:
+ strates = shows_json['strates']
+ if len(strates) == 1 and 'textList_like' not in params:
+ params['title'] = strates[0]['title'].encode('utf-8')
+ params['next'] = 'list_shows_2'
+ return list_shows(params)
+ elif len(strates) == 2 and 'textList_like' not in params:
+ for strate in strates:
+ if strate['type'].encode('utf-8') != 'carrousel':
+ params['title'] = strate['title'].encode('utf-8')
+ params['next'] = 'list_shows_2'
+ return list_shows(params)
+
+ for strate in strates:
+ if strate['type'] == 'carrousel':
+ for content in strate['contents']:
+ fanart = content['URLImage'].encode('utf-8')
+ # Main categories e.g. Séries, Humour, Sport
+ if 'textList_like' in params and params.textList_like is True:
+ if 'title' in strate and \
+ strate['title'].encode('utf-8') == params.title:
+ for content in strate['contents']:
+ title = content['title'].encode('utf-8')
+ url_page = content[
+ 'onClick']['URLPage'].encode('utf-8')
+ try:
+ subtitle = content['subtitle'].encode('utf-8')
+ except:
+ subtitle = ''
+ try:
+ img = content['URLImage'].encode('utf-8')
+ except:
+ img = ''
+
+ info = {
+ 'video': {
+ 'title': title,
+ 'plot': subtitle,
+ }
+ }
- for strate in shows_json['strates']:
- if strate['type'] == 'contentGrid':
- for content in strate['contents']:
- title = content['title'].encode('utf-8')
- try:
- subtitle = content['subtitle'].encode('utf-8')
- except:
- subtitle = ''
+ shows.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url_page=url_page,
+ next='list_shows_1',
+ title=title,
+ window_title=title,
+ fanart=fanart
+ ),
+ 'info': info
+ })
+ else:
+ if strate['type'] == 'textList':
+ for content in strate['contents']:
+ title = content['title'].encode('utf-8')
+ url_page = content[
+ 'onClick']['URLPage'].encode('utf-8')
+ try:
+ subtitle = content['subtitle'].encode('utf-8')
+ except:
+ subtitle = ''
+ try:
+ img = content['URLImage'].encode('utf-8')
+ except:
+ img = ''
+
+ info = {
+ 'video': {
+ 'title': title,
+ 'plot': subtitle,
+ }
+ }
+
+ shows.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url_page=url_page,
+ next='list_shows_1',
+ title=title,
+ window_title=title,
+ fanart=fanart
+ ),
+ 'info': info
+ })
+ # Videos, e.g. "Ne manquez pas"
+ elif strate['type'] == 'contentGrid':
+ title = strate['title'].encode('utf-8')
+ shows.append({
+ 'label': title,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url_page=params.url_page,
+ next='list_shows_2',
+ title=title,
+ window_title=title,
+ )
+ })
+ # Other levels (subcategories, ...) e.g. "Top emissions"
+ elif strate['type'] == 'contentRow':
+ title = strate['title'].encode('utf-8')
+ shows.append({
+ 'label': title,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url_page=params.url_page,
+ next='list_shows_2',
+ title=title,
+ window_title=title,
+ )
+ })
+ elif 'textList_like' not in params:
+ for content in shows_json['contents']:
+ title = content['title'].encode('utf-8')
+ params['title'] = title
+ params['next'] = 'list_shows_2'
+ return list_shows(params)
+
+ else:
+ for content in shows_json['contents']:
+ title = content['title'].encode('utf-8')
+ url_page = content[
+ 'onClick']['URLPage'].encode('utf-8')
+ try:
+ subtitle = content['subtitle'].encode('utf-8')
+ except:
+ subtitle = ''
+ try:
img = content['URLImage'].encode('utf-8')
- url_page = content['onClick']['URLPage'].encode('utf-8')
+ except:
+ img = ''
- info = {
- 'video': {
- 'title': title,
- 'plot': subtitle,
- }
+ info = {
+ 'video': {
+ 'title': title,
+ 'plot': subtitle,
}
- shows.append({
- 'label': title,
- 'thumb': img,
- 'url': common.plugin.get_url(
- action='channel_entry',
- next='list_shows_3',
- url_page=url_page,
- title=title
- ),
- 'info': info
- })
-
- shows = common.plugin.create_listing(
+ }
+
+ shows.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url_page=url_page,
+ next='list_shows_1',
+ title=title,
+ window_title=title,
+ fanart=fanart
+ ),
+ 'info': info
+ })
+
+ return common.plugin.create_listing(
shows,
sort_methods=(
common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
@@ -130,89 +236,104 @@ def list_shows(params):
)
)
- elif params.next == 'list_shows_3':
- # Check if there is any folder for this program
+ elif params.next == 'list_shows_2':
file_path = utils.download_catalog(
params.url_page,
- '%s.json' % (params.title))
+ '%s_%s_%s.json' % (
+ params.channel_name,
+ params.title,
+ common.sp.md5(params.url_page).hexdigest()))
file_shows = open(file_path).read()
shows_json = json.loads(file_shows)
- if 'strates' not in shows_json or len(shows_json['strates']) <= 2:
- params.next = 'list_videos'
- params.title = 'none'
- params.index_page = 1
- return list_videos(params)
+ if 'strates' in shows_json:
+ strates = shows_json['strates']
+ for strate in strates:
+ if 'title' in strate and \
+ strate['title'].encode('utf-8') == params.title:
+ contents = strate['contents']
else:
- fanart = ''
- for strate in shows_json['strates']:
- if strate['type'] == 'carrousel':
- for content in strate['contents']:
- fanart = content['URLImage'].encode('utf-8')
- elif strate['type'] == 'contentRow':
- title = strate['title'].encode('utf-8')
-
- info = {
- 'video': {
- 'title': title,
- }
- }
-
- shows.append({
- 'label': title,
- 'fanart': fanart,
- 'url': common.plugin.get_url(
- action='channel_entry',
- next='list_videos',
- url_page=params.url_page,
- title=title,
- index_page=1
- ),
- 'info': info
- })
-
- shows = common.plugin.create_listing(
- shows,
- sort_methods=(
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
- common.sp.xbmcplugin.SORT_METHOD_LABEL
- )
- )
-
- return shows
+ contents = shows_json['contents']
+ for content in contents:
+ if 'type' in content and \
+ content['type'].encode('utf-8') == 'quicktime':
+ return list_videos(params)
+ else:
+ params['textList_like'] = True
+ params['title'] = params.title
+ params['next'] = 'list_shows_1'
+ return list_shows(params)
@common.plugin.cached(common.cache_time)
def list_videos(params):
videos = []
+ if 'previous_listing' in params:
+ videos = ast.literal_eval(params['previous_listing'])
file_path = utils.download_catalog(
params.url_page,
- '%s.json' % (params.url_page))
+ '%s_%s_%s.json' % (
+ params.channel_name,
+ params.title,
+ common.sp.md5(params.url_page).hexdigest()))
file_videos = open(file_path).read()
videos_json = json.loads(file_videos)
-
- more_videos = False
- no_strates = False
+ more_videos = True
fanart = ''
- if 'strates' not in videos_json:
- no_strates = True
- else:
+ if 'strates' in videos_json:
for strate in videos_json['strates']:
if strate['type'] == 'carrousel':
for content in strate['contents']:
fanart = content['URLImage'].encode('utf-8')
- if strate['type'] == 'contentRow' or strate['type'] == 'contentGrid':
- if strate['title'].encode('utf-8') == params.title or params.title == 'none':
- if 'URLPage' in strate['paging']:
- url = strate['paging']['URLPage'].encode('utf-8')
- url = url + '&indexPage=' + params.index_page
- params.index_page = int(params.index_page) + 1
- more_videos = True
- file_videos = utils.get_webcontent(url)
- videos_json = json.loads(file_videos)
-
- if more_videos or no_strates:
+
+ # Check if we are in the correct cotegory
+ if 'title' in strate and \
+ strate['title'].encode('utf-8') == params.title:
+
+ # If we have lot of videos ...
+ if 'URLPage' in strate['paging']:
+ url = strate['paging']['URLPage'].encode('utf-8')
+ url = url + '&indexPage=1'
+ params['url_page'] = url
+ params['fanart'] = fanart
+ return list_videos(params)
+
+ # Else show only this videos
+ else:
+ for content in strate['contents']:
+ title = content['title'].encode('utf-8')
+ try:
+ subtitle = content['subtitle'].encode('utf-8')
+ except:
+ subtitle = ''
+ img = content['URLImage'].encode('utf-8')
+ url_media = content['onClick']['URLPage'].encode('utf-8')
+
+ info = {
+ 'video': {
+ 'title': title,
+ 'plot': subtitle,
+ 'mediatype': 'tvshow'
+
+ }
+ }
+
+ videos.append({
+ 'label': title,
+ 'thumb': img,
+ 'fanart': fanart,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ url_media=url_media,
+ url_page=params.url_page,
+ title=title
+ ),
+ 'info': info,
+ 'is_playable': True
+ })
+ else:
if len(videos_json['contents']) == 0:
more_videos = False
for content in videos_json['contents']:
@@ -229,86 +350,54 @@ def list_videos(params):
'title': title,
'plot': subtitle,
'mediatype': 'tvshow'
+
}
}
videos.append({
'label': title,
'thumb': img,
- 'fanart': fanart,
+ 'fanart': params.fanart,
'url': common.plugin.get_url(
action='channel_entry',
next='play',
url_media=url_media,
- url_page=params.url_page,
title=title,
- index_page=params.index_page
+ fanart=params.fanart
),
'info': info,
'is_playable': True
})
- else:
- for strate in videos_json['strates']:
- if strate['type'] == 'contentRow' or strate['type'] == 'contentGrid':
- if strate['title'].encode('utf-8') == params.title or params.title == 'none':
- for content in strate['contents']:
- title = content['title'].encode('utf-8')
- try:
- subtitle = content['subtitle'].encode('utf-8')
- except:
- subtitle = ''
- img = content['URLImage'].encode('utf-8')
- url_media = content['onClick']['URLPage'].encode('utf-8')
- info = {
- 'video': {
- 'title': title,
- 'plot': subtitle,
- 'mediatype': 'tvshow'
- }
- }
+ if more_videos is True:
+ # More videos...
+ current_index_page = int(params.url_page[-1])
+ videos.append({
+ 'fanart': params.fanart,
+ 'label': common.addon.get_localized_string(30100),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_videos',
+ title=params.title,
+ url_page=params.url_page[:-1] + str(
+ current_index_page + 1),
+ update_listing=True,
+ previous_listing=str(videos),
+ fanart=params.fanart
+ ),
- videos.append({
- 'label': title,
- 'thumb': img,
- 'fanart': fanart,
- 'url': common.plugin.get_url(
- action='channel_entry',
- next='play',
- url_media=url_media,
- url_page=params.url_page,
- title=title,
- index_page=params.index_page
- ),
- 'info': info,
- 'is_playable': True
- })
+ })
- if more_videos:
- videos.append({
- 'label': common.addon.get_localized_string(30100),
- 'url': common.plugin.get_url(
- action='channel_entry',
- next='list_videos',
- url_media=url_media,
- title=params.title,
- url_page=params.url_page,
- index_page=params.index_page
- ),
-
- })
-
- videos = common.plugin.create_listing(
+ return common.plugin.create_listing(
videos,
content='tvshows',
sort_methods=(
common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
common.sp.xbmcplugin.SORT_METHOD_LABEL
- )
+ ),
+ update_listing='update_listing' in params
)
- return videos
-
@common.plugin.cached(common.cache_time)
def get_video_URL(params):
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/gulli.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/gulli.py
index b7ab8ee..ac6986d 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/gulli.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/gulli.py
@@ -23,6 +23,7 @@
import json
from resources.lib import utils
from resources.lib import common
+import time
def channel_entry(params):
@@ -34,34 +35,41 @@ def channel_entry(params):
return get_video_URL(params)
+secret_key = '19nBVBxv791Xs'
+
+
+def get_api_key():
+ date = time.strftime("%Y%m%d")
+ key = secret_key + date
+ key = common.sp.md5(key).hexdigest()
+ return 'iphoner_' + key
+
+
categories = {}
categories['Dessins animés'] = 'http://sslreplay.gulli.fr/replay/api?' \
- 'call=%7B%22api_key%22:%22iphoner_a140e' \
- 'e8cb4b10fcd8b12a7fe688b34de%22,%22method' \
- '%22:%22programme.getLatestEpisodes%22,%' \
- '22params%22:%7B%22program_image_thumb%' \
- '22:%5B310,230%5D,%22category_id%22:%22' \
- 'dessins-animes%22%7D%7D'
+ 'call=%%7B%%22api_key%%22:%%22%s%%22,%%22method' \
+ '%%22:%%22programme.getLatestEpisodes%%22,%%' \
+ '22params%%22:%%7B%%22program_image_thumb%%' \
+ '22:%%5B310,230%%5D,%%22category_id%%22:%%22' \
+ 'dessins-animes%%22%%7D%%7D'
categories['Émissions'] = 'https://sslreplay.gulli.fr/replay/api?' \
- 'call=%7B%22api_key%22:%22iphoner_a140e' \
- 'e8cb4b10fcd8b12a7fe688b34de%22,%22method' \
- '%22:%22programme.getLatestEpisodes%22,%' \
- '22params%22:%7B%22program_image_thumb%' \
- '22:%5B310,230%5D,%22category_id%22:%22' \
- 'emissions%22%7D%7D'
+ 'call=%%7B%%22api_key%%22:%%22%s%%22,%%22method' \
+ '%%22:%%22programme.getLatestEpisodes%%22,%%' \
+ '22params%%22:%%7B%%22program_image_thumb%%' \
+ '22:%%5B310,230%%5D,%%22category_id%%22:%%22' \
+ 'emissions%%22%%7D%%7D'
categories['Séries & films'] = 'https://sslreplay.gulli.fr/replay/api?' \
- 'call=%7B%22api_key%22:%22iphoner_a140e' \
- 'e8cb4b10fcd8b12a7fe688b34de%22,%22method' \
- '%22:%22programme.getLatestEpisodes%22,%' \
- '22params%22:%7B%22program_image_thumb%' \
- '22:%5B310,230%5D,%22category_id%22:%22' \
- 'series%22%7D%7D'
+ 'call=%%7B%%22api_key%%22:%%22%s%%22,%%22method' \
+ '%%22:%%22programme.getLatestEpisodes%%22,%%' \
+ '22params%%22:%%7B%%22program_image_thumb%%' \
+ '22:%%5B310,230%%5D,%%22category_id%%22:%%22' \
+ 'series%%22%%7D%%7D'
url_list_show = 'https://sslreplay.gulli.fr/replay/api?call=%%7B%%22api_key' \
- '%%22:%%22iphoner_a140ee8cb4b10fcd8b12a7fe688b34de%%22,%%22' \
+ '%%22:%%22%s%%22,%%22' \
'method%%22:%%22programme.getEpisodesByProgramIds%%22,%%22' \
'params%%22:%%7B%%22program_id_list%%22:%%5B%%22%s%%22%%5D' \
'%%7D%%7D'
@@ -79,9 +87,10 @@ def list_shows(params):
'label': category_title,
'url': common.plugin.get_url(
action='channel_entry',
- category_url=category_url,
+ category_url=category_url % get_api_key(),
next='list_shows_cat',
- title=category_title
+ title=category_title,
+ window_title=category_title
)
})
@@ -114,7 +123,8 @@ def list_shows(params):
action='channel_entry',
program_id=program_id,
next='list_videos',
- title=program_title
+ title=program_title,
+ window_title=program_title
)
})
@@ -132,7 +142,7 @@ def list_videos(params):
videos = []
file_path = utils.download_catalog(
- url_list_show % params.program_id,
+ url_list_show % (get_api_key(), params.program_id),
'%s_%s.json' % (params.channel_name, params.program_id))
file = open(file_path).read()
json_show = json.loads(file)
@@ -148,7 +158,7 @@ def list_videos(params):
episode_number = show['episode_number']
season_number = show['season_number']
# total_episodes_in_season = show['total_episodes_in_season']
- url_ipad = show['url_ipad'].encode('utf-8')
+ url_streaming = show['url_streaming'].encode('utf-8')
# url_streaming = show['url_streaming'].encode('utf-8')
short_desc = show['short_desc'].encode('utf-8')
note = float(show['note'].encode('utf-8')) * 2
@@ -182,7 +192,7 @@ def list_videos(params):
'url': common.plugin.get_url(
action='channel_entry',
next='play',
- url_ipad=url_ipad
+ url_streaming=url_streaming
),
'is_playable': True,
'info': info
@@ -200,4 +210,12 @@ def list_videos(params):
@common.plugin.cached(common.cache_time)
def get_video_URL(params):
- return params.video_urlhd
+ url_root = params.url_streaming.replace('playlist.m3u8', '')
+ m3u8_content = utils.get_webcontent(params.url_streaming)
+ last_url = ''
+
+ for line in m3u8_content.splitlines():
+ if 'm3u8' in line and 'video' in line:
+ last_url = line
+
+ return url_root + last_url
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/itele.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/itele.py
index 0963fb3..3b32c65 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/itele.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/itele.py
@@ -49,7 +49,8 @@ categories = {
url_category_query + 'INSOLITE': 'Insolite'
}
-#@common.plugin.cached(common.cache_time)
+
+@common.plugin.cached(common.cache_time)
def list_shows(params):
# Create categories list
shows = []
@@ -62,7 +63,8 @@ def list_shows(params):
action='channel_entry',
category_url=category_url,
next='list_videos_cat',
- title=category_title
+ title=category_title,
+ window_title=category_title
)
})
@@ -72,7 +74,8 @@ def list_shows(params):
action='channel_entry',
category_url='emissions',
next='list_shows_emissions',
- title='Les Émissions'
+ title='Les Émissions',
+ window_title='Les Émissions'
)
})
@@ -91,7 +94,8 @@ def list_shows(params):
action='channel_entry',
category_url='http://service.itele.fr/iphone/dernieres_emissions?query=',
next='list_videos_cat',
- title='À la Une'
+ title='À la Une',
+ window_title='À la Une'
)
})
@@ -101,7 +105,8 @@ def list_shows(params):
action='channel_entry',
category_url='http://service.itele.fr/iphone/emissions?query=magazines',
next='list_videos_cat',
- title='Magazines'
+ title='Magazines',
+ window_title='Magazines'
)
})
@@ -111,7 +116,8 @@ def list_shows(params):
action='channel_entry',
category_url='http://service.itele.fr/iphone/emissions?query=chroniques',
next='list_videos_cat',
- title='Chroniques'
+ title='Chroniques',
+ window_title='Chroniques'
)
})
@@ -124,6 +130,7 @@ def list_shows(params):
)
+@common.plugin.cached(common.cache_time)
def list_videos(params):
videos = []
if params.next == 'list_videos_cat':
@@ -142,7 +149,17 @@ def list_videos(params):
for video in json_category:
video_id = video['id_pfv'].encode('utf-8')
category = video['category'].encode('utf-8')
- date_time = video['date'].encode('utf-8') # 2017-02-10 22:05:02
+ date_time = video['date'].encode('utf-8')
+ # 2017-02-10 22:05:02
+ date_time = date_time.split(' ')[0]
+ date_splited = date_time.split('-')
+ year = date_splited[0]
+ mounth = date_splited[1]
+ day = date_splited[2]
+ aired = '-'.join((year, mounth, day))
+ date = '.'.join((day, mounth, year))
+ # date : string (%d.%m.%Y / 01.01.2009)
+ # aired : string (2008-12-07)
title = video['title'].encode('utf-8')
description = video['description'].encode('utf-8')
thumb = video['preview169'].encode('utf-8')
@@ -154,10 +171,10 @@ def list_videos(params):
'video': {
'title': title,
'plot': description,
- # 'aired': aired,
- # 'date': date,
+ 'aired': aired,
+ 'date': date,
#'duration': duration,
- #'year': year,
+ 'year': year,
'genre': category,
'mediatype': 'tvshow'
}
@@ -182,11 +199,10 @@ def list_videos(params):
common.sp.xbmcplugin.SORT_METHOD_DATE,
common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
common.sp.xbmcplugin.SORT_METHOD_GENRE,
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
),
content='tvshows')
def get_video_URL(params):
return params.video_urlhd
-
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/lequipe.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/lequipe.py
new file mode 100644
index 0000000..01ea101
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/lequipe.py
@@ -0,0 +1,249 @@
+# -*- coding: utf-8 -*-
+"""
+ Catch-up TV & More
+ Copyright (C) 2017 SylvainCecchetto
+
+ This file is part of Catch-up TV & More.
+
+ Catch-up TV & More is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Catch-up TV & More is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with Catch-up TV & More; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+"""
+
+from bs4 import BeautifulSoup as bs
+from resources.lib import utils
+from resources.lib import common
+import re
+import ast
+
+auth = '?auth=1487366549-2688-mbe66p57-9b64a7bdc99718f9fc20facf756f8be9'
+
+dailymotion_url = 'https://www.dailymotion.com/cdn/manifest/video/'
+
+url_root = 'https://www.lequipe.fr'
+
+categories = {
+ 'https://www.lequipe.fr/lachainelequipe/morevideos/0/': 'Tout',
+ 'https://www.lequipe.fr/lachainelequipe/morevideos/1/': 'L\'Équipe du soir',
+ 'https://www.lequipe.fr/lachainelequipe/morevideos/62/': 'L\'Équipe Type',
+ 'https://www.lequipe.fr/lachainelequipe/morevideos/88/': 'L\'Équipe Enquête',
+ 'https://www.lequipe.fr/lachainelequipe/morevideos/46/': 'Esprit Bleu'
+}
+
+correct_mounth = {
+ 'JANV.': '01',
+ 'FÉVR.': '02',
+ 'MARS.': '03',
+ 'AVRI': '04',
+ 'MAI': '05',
+ 'JUIN': '06',
+ 'JUIL.': '07',
+ 'AOÛT': '08',
+ 'SEPT.': '09',
+ 'OCTO.': '10',
+ 'NOVE.': '11',
+ 'DECE.': '12'
+}
+
+
+def channel_entry(params):
+ if 'list_shows' in params.next:
+ return list_shows(params)
+ elif 'list_videos' in params.next:
+ return list_videos(params)
+ elif 'play' in params.next:
+ return get_video_url(params)
+ else:
+ return None
+
+
+@common.plugin.cached(common.cache_time)
+def list_shows(params):
+ shows = []
+
+ for category_url, category_name in categories.iteritems():
+
+ shows.append({
+ 'label': category_name,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ category_url=category_url,
+ page='1',
+ category_name=category_name,
+ next='list_videos',
+ window_title=category_name
+ )
+ })
+
+ return common.plugin.create_listing(
+ shows,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL))
+
+
+@common.plugin.cached(common.cache_time)
+def list_videos(params):
+ videos = []
+ if 'previous_listing' in params:
+ videos = ast.literal_eval(params['previous_listing'])
+
+
+ url = params.category_url + params.page
+ file_path = utils.download_catalog(
+ url,
+ '%s_%s_%s.html' % (
+ params.channel_name,
+ params.category_name,
+ params.page))
+ root_html = open(file_path).read()
+ root_soup = bs(root_html, 'html.parser')
+
+ category_soup = root_soup.find_all(
+ 'a',
+ class_='colead')
+
+ for program in category_soup:
+ url = program['href'].encode('utf-8')
+
+ title = program.find(
+ 'h2').get_text().encode('utf-8')
+ colead__image = program.find(
+ 'div',
+ class_='colead__image')
+ img = colead__image.find(
+ 'img')['data-src'].encode('utf-8')
+
+ views = colead__image.find(
+ 'span',
+ class_='colead__layerText--topright'
+ ).get_text().encode('utf-8')
+
+ views = [int(s) for s in views.split() if s.isdigit()]
+ views = views[0]
+
+ date = colead__image.find(
+ 'span',
+ class_='colead__layerText--bottomleft'
+ ).get_text().encode('utf-8') # 10 FÉVR. 2017 | 08:20
+ date = date.split(' ')
+ day = date[0]
+ try:
+ mounth = correct_mounth[date[1]]
+ except:
+ mounth = '00'
+ year = date[2]
+
+ date = '.'.join((day, mounth, year))
+ aired = '-'.join((year, mounth, day))
+ # date : string (%d.%m.%Y / 01.01.2009)
+ # aired : string (2008-12-07)
+
+ duration_string = colead__image.find(
+ 'span',
+ class_='colead__layerText--bottomright'
+ ).get_text().encode('utf-8')
+ duration_list = duration_string.split(':')
+ duration = int(duration_list[0]) * 60 + int(duration_list[1])
+
+ info = {
+ 'video': {
+ 'title': title,
+ 'playcount': views,
+ 'aired': aired,
+ 'date': date,
+ 'duration': duration,
+ 'year': year,
+ 'mediatype': 'tvshow'
+ }
+ }
+
+ videos.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ url=url
+ ),
+ 'is_playable': True,
+ 'info': info
+ })
+
+ # More videos...
+ videos.append({
+ 'label': common.addon.get_localized_string(30100),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ category_url=params.category_url,
+ category_name=params.category_name,
+ next='list_videos',
+ page=str(int(params.page) + 1),
+ update_listing=True,
+ previous_listing=str(videos)
+ ),
+ })
+
+ return common.plugin.create_listing(
+ videos,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_PLAYCOUNT,
+ common.sp.xbmcplugin.SORT_METHOD_DATE,
+ common.sp.xbmcplugin.SORT_METHOD_DURATION,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE
+ ),
+ content='tvshows',
+ update_listing='update_listing' in params,
+ )
+
+
+@common.plugin.cached(common.cache_time)
+def get_video_url(params):
+ url = url_root + params.url
+ html_video_equipe = utils.get_webcontent(
+ url)
+
+ url_daily = re.compile(
+ r'<iframe src="//(.*?)"', re.DOTALL).findall(html_video_equipe)[0]
+
+ url_daily = 'http://' + url_daily
+
+ html_daily = utils.get_webcontent(
+ url_daily,)
+
+ html_daily = html_daily.replace('\\', '')
+
+ urls_mp4 = re.compile(
+ r'{"type":"video/mp4","url":"(.*?)"}],"(.*?)":').findall(html_daily)
+
+ for url, quality in urls_mp4:
+ if quality == '480':
+ url_sd = url
+ elif quality == '720':
+ url_hd = url
+ elif quality == '1080':
+ url_hdplus = url
+ url_default = url
+
+ desired_quality = common.plugin.get_setting(
+ params.channel_id + '.quality')
+
+ if desired_quality == 'HD+' and url_hdplus is not None:
+ return url_hdplus
+ elif desired_quality == 'HD' and url_hd is not None:
+ return url_hd
+ elif desired_quality == 'SD' and url_sd is not None:
+ return url_sd
+ else:
+ return url_default
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/nrj.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/nrj.py
new file mode 100644
index 0000000..e038c21
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/nrj.py
@@ -0,0 +1,392 @@
+# -*- coding: utf-8 -*-
+"""
+ Catch-up TV & More
+ Copyright (C) 2017 SylvainCecchetto
+
+ This file is part of Catch-up TV & More.
+
+ Catch-up TV & More is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Catch-up TV & More is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with Catch-up TV & More; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+"""
+
+from resources.lib import utils
+from resources.lib import common
+from bs4 import BeautifulSoup as bs
+
+url_replay = 'http://www.nrj-play.fr/%s/replay'
+# channel_name (nrj12, ...)
+
+url_root = 'http://www.nrj-play.fr'
+
+
+def channel_entry(params):
+ if 'list_shows' in params.next:
+ return list_shows(params)
+ elif 'list_videos' in params.next:
+ return list_videos(params)
+ elif 'play' in params.next:
+ return get_video_url(params)
+ else:
+ return None
+
+
+@common.plugin.cached(common.cache_time)
+def list_shows(params):
+ shows = []
+
+ if 'list_shows_1' in params.next:
+ # Build categories list (Tous les programmes, Séries, ...)
+ file_path = utils.download_catalog(
+ url_replay % params.channel_name,
+ '%s_replay.html' % params.channel_name,
+ )
+ replay_html = open(file_path).read()
+ replay_soup = bs(replay_html, 'html.parser')
+
+ categories_soup = replay_soup.find_all(
+ 'li',
+ class_='subNav-menu-item')
+
+ for category in categories_soup:
+ url_category = category.find('a')['href'].encode('utf-8')
+ title_category = category.find('a').get_text().encode('utf-8')
+
+ shows.append({
+ 'label': title_category,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url_category=url_category,
+ next='list_shows_programs',
+ title_category=title_category,
+ window_title=title_category
+ )
+ })
+
+ elif 'list_shows_programs' in params.next:
+ # Build category's programs list
+ # (Crimes, tellement vrai, Le mad mag, ...)
+ file_path = utils.download_catalog(
+ url_root + params.url_category,
+ '%s_%s_category.html' % (
+ params.channel_name,
+ params.title_category),
+ )
+ category_html = open(file_path).read()
+ category_soup = bs(category_html, 'html.parser')
+
+ programs_soup = category_soup.find_all(
+ 'div',
+ class_='linkProgram')
+
+ for program in programs_soup:
+ title = program.find(
+ 'h2',
+ class_='linkProgram-title').get_text().encode('utf-8')
+
+ title = ' '.join(title.split())
+
+ url = program.find('a')['href'].encode('utf-8')
+ img = program.find('img')['src'].encode('utf-8')
+
+ shows.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_seasons',
+ url_program=url,
+ title_program=title,
+ window_title=title
+ ),
+ })
+
+ elif 'list_shows_seasons' in params.next:
+ file_path = utils.download_catalog(
+ url_root + params.url_program,
+ '%s_%s_program.html' % (
+ params.channel_name,
+ params.title_program),
+ )
+ program_html = open(file_path).read()
+ program_soup = bs(program_html, 'html.parser')
+ program_url = program_soup.find(
+ 'a',
+ class_='pushProgram-link')['href'].encode('utf-8')
+
+ file_path = utils.download_catalog(
+ url_root + program_url,
+ '%s_%s_program_fiche.html' % (
+ params.channel_name,
+ params.title_program),
+ )
+ program_html = open(file_path).read()
+ program_soup = bs(program_html, 'html.parser')
+
+ seasons_soup = program_soup.find(
+ 'ul',
+ class_='seasonsBox-list')
+
+ if seasons_soup is not None:
+ for season in seasons_soup.find_all('li'):
+ title_season = season.find(
+ 'a').get_text().encode('utf-8')
+ season_url = season.find('a')['href'].encode('utf-8')
+
+ shows.append({
+ 'label': title_season,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_season_categories',
+ season_url=season_url,
+ title_program=params.title_program,
+ title_season=title_season,
+ window_title=title_season
+ ),
+ })
+
+ else:
+ params['next'] = 'list_shows_season_categories'
+ params['season_url'] = program_url
+ params['title_program'] = params.title_program
+ params['title_season'] = 'no_season'
+ params['window_title'] = params.window_title
+ return list_shows(params)
+
+ elif 'list_shows_season_categories':
+ # Build program's categories
+ # (Les vidéos, les actus, les bonus, ...)
+ file_path = utils.download_catalog(
+ url_root + params.season_url,
+ '%s_%s_%s_program_season.html' % (
+ params.channel_name,
+ params.title_program,
+ params.title_season),
+ )
+ program_html = open(file_path).read()
+ program_soup = bs(program_html, 'html.parser')
+
+ # We have to find all 'flag-category' tag and all title h2
+
+ season_categories = {}
+ flag_categories_soup = program_soup.find_all(
+ 'a',
+ attrs={'class': 'flag-category'})
+ for flag_category in flag_categories_soup:
+ season_category_title = flag_category.get_text().encode('utf-8')
+ if season_category_title == '':
+ season_category_title = 'No name'
+ season_categories[season_category_title] = 'flag_category'
+
+ titles_h2 = program_soup.find_all(
+ 'h2',
+ attrs={'class': 'title-2'})
+
+ for title_h2 in titles_h2:
+ if 'itemprop' not in title_h2.attrs:
+ separator = title_h2.parent.find(
+ 'div',
+ class_='separator-wrap')
+ if separator:
+ url = separator.find('a')['href'].encode('utf-8')
+ season_categories[title_h2.get_text().encode(
+ 'utf-8')] = url
+
+ for season_category_title, \
+ season_category_url in season_categories.iteritems():
+ shows.append({
+ 'label': season_category_title,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_videos',
+ season_category_url=season_category_url,
+ season_url=params.season_url,
+ season_category_title=season_category_title,
+ page='1',
+ window_title=season_category_title
+ ),
+ })
+
+ return common.plugin.create_listing(
+ shows,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE
+ ),
+ )
+
+
+@common.plugin.cached(common.cache_time)
+def list_videos(params):
+ videos = []
+
+ # flag_category case
+ if 'flag_category' in params.season_category_url:
+ program_html = utils.get_webcontent(
+ url_root + params.season_url
+ )
+ program_soup = bs(program_html, 'html.parser')
+
+ videos_soup = program_soup.find_all(
+ 'div',
+ attrs={'class': 'thumbnail', 'itemprop': 'video'})
+ for video in videos_soup:
+ current_flag_category = video.find(
+ 'a',
+ attrs={'class': 'flag-category'}).get_text().encode('utf-8')
+ if current_flag_category == '':
+ current_flag_category = 'No name'
+ if current_flag_category and current_flag_category \
+ == params.season_category_title:
+
+ title_soup = video.find(
+ 'h3',
+ class_='thumbnail-title')
+ url = title_soup.find('a')['href'].encode('utf-8')
+
+ title = title_soup.get_text().encode('utf-8')
+ title = ' '.join(title.split())
+
+ img = video.find('img')['src'].encode('utf-8')
+ try:
+ date = video.find('time').get_text()
+ date = date.encode('utf-8').split(' ')[1]
+ date_splited = date.split('/')
+ day = date_splited[0]
+ mounth = date_splited[1]
+ year = date_splited[2]
+ # date : string (%d.%m.%Y / 01.01.2009)
+ # aired : string (2008-12-07)
+ date = '.'.join((day, mounth, year))
+ aired = '-'.join((year, mounth, day))
+ except:
+ date = ''
+ aired = ''
+ year = ''
+
+ info = {
+ 'video': {
+ 'title': title,
+ 'aired': aired,
+ 'date': date,
+ 'year': year,
+ 'mediatype': 'tvshow'
+ }
+ }
+
+ videos.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ url_video=url
+ ),
+ 'is_playable': True,
+ 'info': info
+ })
+ # others url case
+ else:
+ program_html = utils.get_webcontent(
+ url_root + params.season_category_url + '?page=' + params.page
+ )
+ program_soup = bs(program_html, 'html.parser')
+
+ videos_soup = program_soup.find_all(
+ 'div',
+ attrs={'class': 'item col-xs-6 col-md-4'})
+ for video in videos_soup:
+
+ title_soup = video.find(
+ 'h3',
+ class_='thumbnail-title')
+ url = title_soup.find('a')['href'].encode('utf-8')
+
+ title = title_soup.get_text().encode('utf-8')
+ title = ' '.join(title.split())
+
+ img = video.find('img')['src'].encode('utf-8')
+ try:
+ date = video.find('time').get_text()
+ date = date.encode('utf-8').split(' ')[1]
+ except:
+ date = video.find('time').get_text().encode('utf-8')
+
+ date_splited = date.split('/')
+ day = date_splited[0]
+ mounth = date_splited[1]
+ year = date_splited[2]
+
+ date = '.'.join((day, mounth, year))
+ aired = '-'.join((year, mounth, day))
+ # date : string (%d.%m.%Y / 01.01.2009)
+ # aired : string (2008-12-07)
+ info = {
+ 'video': {
+ 'title': title,
+ 'aired': aired,
+ 'date': date,
+ 'year': year,
+ 'mediatype': 'tvshow'
+ }
+ }
+
+ videos.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ url_video=url
+ ),
+ 'is_playable': True,
+ 'info': info
+ })
+
+ # More videos...
+ videos.append({
+ 'label': common.addon.get_localized_string(30100),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_videos',
+ season_category_url=params.season_category_url,
+ season_url=params.season_url,
+ season_category_title=params.season_category_title,
+ page=str(int(params.page) + 1),
+ window_title=params.window_title
+ )
+
+ })
+
+ return common.plugin.create_listing(
+ videos,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_DATE,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE
+ ),
+ content='tvshows')
+
+
+@common.plugin.cached(common.cache_time)
+def get_video_url(params):
+ if url_root in params.url_video:
+ url_video = params.url_video
+ else:
+ url_video = url_root + params.url_video
+ video_html = utils.get_webcontent(
+ url_video)
+ video_soup = bs(video_html, 'html.parser')
+ return video_soup.find(
+ 'meta',
+ attrs={'itemprop': 'contentUrl'})['content'].encode('utf-8')
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/numero23.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/numero23.py
new file mode 100644
index 0000000..8f20db7
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/numero23.py
@@ -0,0 +1,234 @@
+# -*- coding: utf-8 -*-
+"""
+ Catch-up TV & More
+ Copyright (C) 2017 SylvainCecchetto
+
+ This file is part of Catch-up TV & More.
+
+ Catch-up TV & More is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ Catch-up TV & More is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with Catch-up TV & More; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+"""
+
+from bs4 import BeautifulSoup as bs
+from resources.lib import utils
+from resources.lib import common
+import ast
+import re
+
+url_root = 'http://www.numero23.fr/replay/'
+
+
+def channel_entry(params):
+ if 'list_shows' in params.next:
+ return list_shows(params)
+ elif 'list_videos' in params.next:
+ return list_videos(params)
+ elif 'play' in params.next:
+ return get_video_url(params)
+ else:
+ return None
+
+
+@common.plugin.cached(common.cache_time)
+def list_shows(params):
+ shows = []
+ if 'previous_listing' in params:
+ shows = ast.literal_eval(params['previous_listing'])
+ unique_item = {}
+ if 'unique_item' in params:
+ unique_item = ast.literal_eval(params['unique_item'])
+
+ if params.next == 'list_shows_1':
+ file_path = utils.download_catalog(
+ url_root,
+ params.channel_name + '.html')
+ root_html = open(file_path).read()
+ root_soup = bs(root_html, 'html.parser')
+
+ categories_soup = root_soup.find(
+ 'div',
+ class_='nav-programs'
+ )
+
+ for category in categories_soup.find_all('a'):
+ category_name = category.find('span').get_text().encode('utf-8')
+ category_url = category['href'].encode('utf-8')
+
+ shows.append({
+ 'label': category_name,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ category_url=category_url,
+ next='list_shows_cat',
+ window_title=category_name,
+ category_name=category_name,
+ page='1'
+ )
+ })
+
+ elif params.next == 'list_shows_cat':
+ url_splited = params.category_url.split('?')
+ url_category = url_splited[0] + 'page/' + \
+ params.page + '/?' + url_splited[1]
+ file_path = utils.download_catalog(
+ url_category,
+ '%s_%s.html' % (params.channel_name, params.category_name)
+ )
+ category_html = open(file_path).read()
+ category_soup = bs(category_html, 'html.parser')
+
+ programs_soup = category_soup.find(
+ 'div',
+ class_='videos replay'
+ )
+ for program in programs_soup.find_all('div', class_='program'):
+ program_name_url = program.find('h3').find('a')
+ program_name = program_name_url.get_text().encode('utf-8')
+ if program_name not in unique_item:
+ unique_item[program_name] = program_name
+ program_url = program_name_url['href'].encode('utf-8')
+ program_img = program.find('img')['src'].encode('utf-8')
+
+ shows.append({
+ 'label': program_name,
+ 'thumb': program_img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ program_url=program_url,
+ next='list_videos',
+ window_title=program_name,
+ program_name=program_name
+ )
+ })
+
+ # More videos...
+ shows.append({
+ 'label': common.addon.get_localized_string(30108),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_cat',
+ page=str(int(params.page) + 1),
+ window_title=params.window_title,
+ update_listing=True,
+ unique_item=str(unique_item),
+ category_url=params.category_url,
+ category_name=params.category_name,
+ previous_listing=str(shows)
+
+ )
+ })
+
+ return common.plugin.create_listing(
+ shows,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL
+ ),
+ update_listing='update_listing' in params,
+ )
+
+
+@common.plugin.cached(common.cache_time)
+def list_videos(params):
+ videos = []
+
+ file_path = utils.download_catalog(
+ params.program_url,
+ '%s_%s.html' % (params.channel_name, params.program_name)
+ )
+ program_html = open(file_path).read()
+ program_soup = bs(program_html, 'html.parser')
+
+ videos_soup = program_soup.find_all('div', class_='box program')
+
+ if len(videos_soup) == 0:
+ videos_soup = program_soup.find_all(
+ 'div', class_='program sticky video')
+
+ for video in videos_soup:
+ video_title = video.find(
+ 'p').get_text().encode('utf-8').replace(
+ '\n', ' ').replace('\r', ' ').rstrip('\r\n')
+ video_img = video.find('img')['src'].encode('utf-8')
+ video_url = video.find('a')['href'].encode('utf-8')
+
+ info = {
+ 'video': {
+ 'title': video_title,
+ 'mediatype': 'tvshow'
+ }
+ }
+
+ videos.append({
+ 'label': video_title,
+ 'thumb': video_img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ video_url=video_url
+ ),
+ 'is_playable': True,
+ 'info': info
+ })
+
+ return common.plugin.create_listing(
+ videos,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE
+ ),
+ content='tvshows')
+
+
+@common.plugin.cached(common.cache_time)
+def get_video_url(params):
+ video_html = utils.get_webcontent(
+ params.video_url
+ )
+ video_soup = bs(video_html, 'html.parser')
+ video_id = video_soup.find(
+ 'div', class_='video')['data-video-id'].encode('utf-8')
+
+ url_daily = 'http://www.dailymotion.com/embed/video/' + video_id
+
+ html_daily = utils.get_webcontent(
+ url_daily,)
+
+ html_daily = html_daily.replace('\\', '')
+
+ urls_mp4 = re.compile(
+ r'{"type":"video/mp4","url":"(.*?)"}],"(.*?)"').findall(html_daily)
+
+ for url, quality in urls_mp4:
+ if quality == '480':
+ url_sd = url
+ elif quality == '720':
+ url_hd = url
+ elif quality == '1080':
+ url_hdplus = url
+ else:
+ continue
+ url_default = url
+
+ desired_quality = common.plugin.get_setting(
+ params.channel_id + '.quality')
+
+ if desired_quality == 'HD+' and url_hdplus is not None:
+ return url_hdplus
+ elif desired_quality == 'HD' and url_hd is not None:
+ return url_hd
+ elif desired_quality == 'SD' and url_sd is not None:
+ return url_sd
+ else:
+ return url_default
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/pluzz.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/pluzz.py
index 2c1ddaf..a64d7d0 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/pluzz.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/pluzz.py
@@ -21,41 +21,91 @@
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""
+# Liste A à Z
+# Si FR3 ou FR1 : Régions
+
+
import json
from resources.lib import utils
from resources.lib import common
-
-channelCatalog = 'http://pluzz.webservices.francetelevisions.fr/' \
- 'pluzz/liste/type/replay/nb/10000/chaine/%s'
-
-showInfo = 'http://webservices.francetelevisions.fr/tools/getInfosOeuvre/v2/' \
- '?idDiffusion=%s&catalogue=Pluzz'
-
-imgURL = 'http://refonte.webservices.francetelevisions.fr%s'
-
-categories = {"france2": "France 2",
- "france3": "France 3",
- "france4": "France 4",
- "france5": "France 5",
- "franceo": "France Ô",
- "guadeloupe": "Guadeloupe 1ère",
- "guyane": "Guyane 1ère",
- "martinique": "Martinique 1ère",
- "mayotte": "Mayotte 1ère",
- "nouvellecaledonie": "Nouvelle Calédonie 1ère",
- "polynesie": "Polynésie 1ère",
- "reunion": "Réunion 1ère",
- "saintpierreetmiquelon": "St-Pierre et Miquelon 1ère",
- "wallisetfutuna": "Wallis et Futuna 1ère",
- "sport": "Sport",
- "info": "Info",
- "documentaire": "Documentaire",
- "seriefiction": "Série & fiction",
- "magazine": "Magazine",
- "jeunesse": "Jeunesse",
- "divertissement": "Divertissement",
- "jeu": "Jeu",
- "culture": "Culture"}
+import ast
+
+channel_catalog = 'http://pluzz.webservices.francetelevisions.fr/' \
+ 'pluzz/liste/type/replay/nb/10000/chaine/%s'
+# channel_catalog = 'https://pluzz.webservices.francetelevisions.fr/' \
+# 'mobile/liste/type/replay/chaine/%s/nb/20/debut/%s'
+# page inc: 20
+
+show_info = 'http://webservices.francetelevisions.fr/tools/' \
+ 'getInfosOeuvre/v2/?idDiffusion=%s&catalogue=Pluzz'
+
+url_img = 'http://refonte.webservices.francetelevisions.fr%s'
+
+url_search = 'https://pluzz.webservices.francetelevisions.fr/' \
+ 'mobile/recherche/nb/20/tri/date/requete/%s/debut/%s'
+
+url_alpha = 'https://pluzz.webservices.francetelevisions.fr/' \
+ 'mobile/liste/type/replay/tri/alpha/sens/%s/nb/100/' \
+ 'debut/%s/lastof/1'
+# sens: asc or desc
+# page inc: 100
+
+categories_display = {
+ "france2": "France 2",
+ "france3": "France 3",
+ "france4": "France 4",
+ "france5": "France 5",
+ "franceo": "France Ô",
+ "guadeloupe": "Guadeloupe 1ère",
+ "guyane": "Guyane 1ère",
+ "martinique": "Martinique 1ère",
+ "mayotte": "Mayotte 1ère",
+ "nouvellecaledonie": "Nouvelle Calédonie 1ère",
+ "polynesie": "Polynésie 1ère",
+ "reunion": "Réunion 1ère",
+ "saintpierreetmiquelon": "St-Pierre et Miquelon 1ère",
+ "wallisetfutuna": "Wallis et Futuna 1ère",
+ "sport": "Sport",
+ "info": "Info",
+ "documentaire": "Documentaire",
+ "seriefiction": "Série & fiction",
+ "magazine": "Magazine",
+ "jeunesse": "Jeunesse",
+ "divertissement": "Divertissement",
+ "jeu": "Jeu",
+ "culture": "Culture"
+}
+
+categories = {
+ 'Toutes catégories': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/chaine/%s/nb/20/debut/%s',
+ 'Info': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/info/nb/20/debut/%s',
+ 'Documentaire': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/documentaire/nb/20/debut/%s',
+ 'Série & Fiction': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/seriefiction/nb/20/debut/%s',
+ 'Magazine': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/magazine/nb/20/debut/%s',
+ 'Culture': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/culture/nb/20/debut/%s',
+ 'Jeunesse': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/jeunesse/nb/20/debut/%s',
+ 'Divertissement': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/divertissement/nb/20/debut/%s',
+ 'Sport': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/sport/nb/20/debut/%s',
+ 'Jeu': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/rubrique/jeu/nb/20/debut/%s',
+ 'Version multilingue (VM)': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/filtre/multilingue/type/replay/nb/20/debut/%s',
+ 'Sous-titrés': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/filtre/soustitrage/type/replay/nb/20/debut/%s',
+ 'Audiodescription (AD)': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/filtre/audiodescription/type/replay/nb/20/debut/%s',
+ 'Tous publics': 'https://pluzz.webservices.francetelevisions.fr/'
+ 'mobile/liste/type/replay/filtre/touspublics/nb/20/debut/%s'
+}
def channel_entry(params):
@@ -65,38 +115,51 @@ def channel_entry(params):
return list_videos(params)
elif 'play' in params.next:
return get_video_URL(params)
+ elif 'search' in params.next:
+ return search(params)
+
+
+@common.plugin.cached(common.cache_time)
+def change_to_nicer_name(original_name):
+ if original_name in categories_display:
+ return categories_display[original_name]
+ return original_name
@common.plugin.cached(common.cache_time)
def list_shows(params):
shows = []
- uniqueItem = dict()
+ if 'previous_listing' in params:
+ shows = ast.literal_eval(params['previous_listing'])
- realChannel = params.channel_name
- if params.channel_name == 'la_1ere':
- realChannel = 'la_1ere_reunion%2C' \
- 'la_1ere_guyane%2C' \
- 'la_1ere_polynesie%2C' \
- 'la_1ere_martinique%2C' \
- 'la_1ere_mayotte%2C' \
- 'la_1ere_nouvellecaledonie%2C' \
- 'la_1ere_guadeloupe%2C' \
- 'la_1ere_wallisetfutuna%2C' \
- 'la_1ere_saintpierreetmiquelon'
-
- url_json = channelCatalog % (realChannel)
- filePath = utils.download_catalog(
- url_json,
- '%s.json' % (params.channel_name))
- filPrgm = open(filePath).read()
- jsonParser = json.loads(filPrgm)
- emissions = jsonParser['reponse']['emissions']
+ unique_item = dict()
+ real_channel = params.channel_name
+ if params.channel_name == 'la_1ere':
+ real_channel = 'la_1ere_reunion%2C' \
+ 'la_1ere_guyane%2C' \
+ 'la_1ere_polynesie%2C' \
+ 'la_1ere_martinique%2C' \
+ 'la_1ere_mayotte%2C' \
+ 'la_1ere_nouvellecaledonie%2C' \
+ 'la_1ere_guadeloupe%2C' \
+ 'la_1ere_wallisetfutuna%2C' \
+ 'la_1ere_saintpierreetmiquelon'
+
+ # Level 0
if params.next == 'list_shows_1':
+ url_json = channel_catalog % (real_channel)
+ file_path = utils.download_catalog(
+ url_json,
+ '%s.json' % (
+ params.channel_name))
+ file_prgm = open(file_path).read()
+ json_parser = json.loads(file_prgm)
+ emissions = json_parser['reponse']['emissions']
for emission in emissions:
rubrique = emission['rubrique'].encode('utf-8')
- if rubrique not in uniqueItem:
- uniqueItem[rubrique] = rubrique
+ if rubrique not in unique_item:
+ unique_item[rubrique] = rubrique
rubrique_title = change_to_nicer_name(rubrique)
shows.append({
@@ -104,32 +167,121 @@ def list_shows(params):
'url': common.plugin.get_url(
action='channel_entry',
rubrique=rubrique,
- next='list_shows_2'
+ next='list_shows_2_cat',
+ window_title=rubrique_title
)
})
- sort_methods = (
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
- common.sp.xbmcplugin.SORT_METHOD_LABEL
- )
-
- shows = common.plugin.create_listing(
- shows,
- sort_methods=sort_methods
- )
-
- elif params.next == 'list_shows_2':
+ # Last videos
+ shows.append({
+ 'label': common.addon.get_localized_string(30104),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_last',
+ page='0',
+ window_title=common.addon.get_localized_string(30104)
+ )
+ })
+
+ # Search
+ shows.append({
+ 'label': common.addon.get_localized_string(30103),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='search',
+ page='0',
+ window_title=common.addon.get_localized_string(30103)
+ )
+ })
+
+ # from A to Z
+ shows.append({
+ 'label': common.addon.get_localized_string(30105),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_from_a_to_z',
+ window_title=common.addon.get_localized_string(30105)
+ )
+ })
+
+ # level 1
+ elif 'list_shows_from_a_to_z' in params.next:
+ shows.append({
+ 'label': common.addon.get_localized_string(30106),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_2_from_a_to_z_categories',
+ page='0',
+ url=url_alpha % ('asc', '%s'),
+ sens='asc',
+ rubrique='no_rubrique',
+ window_title=params.window_title
+ )
+ })
+ shows.append({
+ 'label': common.addon.get_localized_string(30107),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_2_from_a_to_z_categories',
+ page='0',
+ url=url_alpha % ('desc', '%s'),
+ sens='desc',
+ rubrique='no_rubrique',
+ window_title=params.window_title
+ )
+ })
+
+ # level 1
+ elif 'list_shows_last' in params.next:
+ for title, url in categories.iteritems():
+ if 'Toutes catégories' in title:
+ url = url % (params.channel_name, '%s')
+ shows.append({
+ 'label': title,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_videos_last',
+ page='0',
+ url=url,
+ title=title,
+ window_title=title
+ )
+ })
+
+ # level 1 or 2
+ elif 'list_shows_2' in params.next:
+ if 'list_shows_2_cat' in params.next:
+ url_json = channel_catalog % (real_channel)
+ file_path = utils.download_catalog(
+ url_json,
+ '%s.json' % (
+ params.channel_name))
+ elif 'list_shows_2_from_a_to_z_categories' in params.next:
+ url_json = url_alpha % (params.sens, params.page)
+ file_path = utils.download_catalog(
+ url_json,
+ '%s_%s_%s_alpha.json' % (
+ params.channel_name,
+ params.sens,
+ params.page))
+
+ file_prgm = open(file_path).read()
+ json_parser = json.loads(file_prgm)
+ emissions = json_parser['reponse']['emissions']
for emission in emissions:
rubrique = emission['rubrique'].encode('utf-8')
- if rubrique == params.rubrique:
+ chaine_id = emission['chaine_id'].encode('utf-8')
+ if ('from_a_to_z' in params.next and
+ chaine_id == params.channel_name) or \
+ rubrique == params.rubrique:
titre_programme = emission['titre_programme'].encode('utf-8')
if titre_programme != '':
id_programme = emission['id_programme'].encode('utf-8')
if id_programme == '':
id_programme = emission['id_emission'].encode('utf-8')
- if id_programme not in uniqueItem:
- uniqueItem[id_programme] = id_programme
- icon = imgURL % (emission['image_large'])
+ if id_programme not in unique_item:
+ unique_item[id_programme] = id_programme
+ icon = url_img % (emission['image_large'])
genre = emission['genre']
accroche_programme = emission['accroche_programme']
@@ -143,78 +295,154 @@ def list_shows(params):
shows.append({
'label': titre_programme,
'thumb': icon,
+ 'fanart': icon,
'url': common.plugin.get_url(
action='channel_entry',
next='list_videos_1',
id_programme=id_programme,
+ search=False,
+ page='0',
+ window_title=titre_programme,
+ fanart=icon
),
'info': info
})
+ if params.next == 'list_shows_2_from_a_to_z_categories':
+ # More videos...
+ shows.append({
+ 'label': common.addon.get_localized_string(30100),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_shows_2_from_a_to_z_categories',
+ sens=params.sens,
+ page=str(int(params.page) + 100),
+ window_title=params.window_title,
+ rubrique='no_rubrique',
+ update_listing=True,
+ previous_listing=str(shows)
+ )
+ })
- sort_methods = (
+ return common.plugin.create_listing(
+ shows,
+ sort_methods=(
common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
common.sp.xbmcplugin.SORT_METHOD_LABEL
- )
+ ),
+ update_listing='update_listing' in params,
+ )
- shows = common.plugin.create_listing(
- shows,
- sort_methods=sort_methods
- )
- return shows
+@common.plugin.cached(common.cache_time)
+def list_videos(params):
+ videos = []
+ if 'previous_listing' in params:
+ videos = ast.literal_eval(params['previous_listing'])
+
+ if 'search' in params.next:
+ file_path = utils.download_catalog(
+ url_search % (params.query, params.page),
+ '%s_%s_search.json' % (params.channel_name, params.query),
+ force_dl=True
+ )
+ elif 'last' in params.next:
+ file_path = utils.download_catalog(
+ params.url % params.page,
+ '%s_%s_%s_last.json' % (
+ params.channel_name,
+ params.page,
+ params.title)
+ )
-@common.plugin.cached(common.cache_time)
-def change_to_nicer_name(original_name):
- if original_name in categories:
- return categories[original_name]
- return original_name
+ elif 'from_a_to_z' in params.next:
+ file_path = utils.download_catalog(
+ params.url % params.page,
+ '%s_%s_%s_last.json' % (
+ params.channel_name,
+ params.page,
+ params.sens)
+ )
+ else:
+ file_path = utils.download_catalog(
+ channel_catalog % params.channel_name,
+ '%s.json' % params.channel_name
+ )
+ file_prgm = open(file_path).read()
+ json_parser = json.loads(file_prgm)
+ emissions = json_parser['reponse']['emissions']
-@common.plugin.cached(common.cache_time)
-def list_videos(params):
- videos = []
- filePath = utils.download_catalog(
- channelCatalog % (params.channel_name),
- '%s.json' % (params.channel_name)
- )
- filPrgm = open(filePath).read()
- jsonParser = json.loads(filPrgm)
- emissions = jsonParser['reponse']['emissions']
for emission in emissions:
id_programme = emission['id_programme'].encode('utf-8')
if id_programme == '':
id_programme = emission['id_emission'].encode('utf-8')
- if id_programme == params.id_programme:
+ if 'search' in params.next \
+ or 'last' in params.next \
+ or 'from_a_to_z' in params.next \
+ or id_programme == params.id_programme:
title = ''
plot = ''
duration = 0
date = ''
genre = ''
id_diffusion = emission['id_diffusion']
- filPrgm = utils.get_webcontent(
- showInfo % (emission['id_diffusion']))
- if(filPrgm != ''):
- jsonParserShow = json.loads(filPrgm)
- if jsonParserShow['synopsis']:
- plot = jsonParserShow['synopsis'].encode('utf-8')
- if jsonParserShow['diffusion']['date_debut']:
- date = jsonParserShow['diffusion']['date_debut']
+ chaine_id = emission['chaine_id'].encode('utf-8')
+
+ # If we are in search or alpha or last videos cases,
+ # only add channel's shows
+ if 'search' in params.next or\
+ 'from_a_to_z' in params.next or\
+ 'last' in params.next:
+ if chaine_id != params.channel_name:
+ continue
+
+ file_prgm = utils.get_webcontent(
+ show_info % (emission['id_diffusion']))
+ if(file_prgm != ''):
+ json_parserShow = json.loads(file_prgm)
+ if json_parserShow['synopsis']:
+ plot = json_parserShow['synopsis'].encode('utf-8')
+ if json_parserShow['diffusion']['date_debut']:
+ date = json_parserShow['diffusion']['date_debut']
date = date.encode('utf-8')
- if jsonParserShow['real_duration']:
- duration = int(jsonParserShow['real_duration'])
- if jsonParserShow['titre']:
- title = jsonParserShow['titre'].encode('utf-8')
- if jsonParserShow['sous_titre']:
+ if json_parserShow['real_duration']:
+ duration = int(json_parserShow['real_duration'])
+ if json_parserShow['titre']:
+ title = json_parserShow['titre'].encode('utf-8')
+ if json_parserShow['sous_titre']:
title = ' '.join((
title,
'- [I]',
- jsonParserShow['sous_titre'].encode('utf-8'),
+ json_parserShow['sous_titre'].encode('utf-8'),
'[/I]'))
- if jsonParserShow['genre'] != '':
+ if json_parserShow['genre'] != '':
genre = \
- jsonParserShow['genre'].encode('utf-8')
+ json_parserShow['genre'].encode('utf-8')
+
+ episode = 0
+ if 'episode' in json_parserShow:
+ episode = json_parserShow['episode']
+
+ season = 0
+ if 'saison' in json_parserShow:
+ season = json_parserShow['saison']
+
+ cast = []
+ director = ''
+ personnes = json_parserShow['personnes']
+ for personne in personnes:
+ fonctions = ' '.join(
+ x.encode('utf-8') for x in personne['fonctions'])
+ if 'Acteur' in fonctions:
+ cast.append(
+ personne['nom'].encode(
+ 'utf-8') + ' ' + personne['prenom'].encode(
+ 'utf-8'))
+ elif 'Réalisateur' in fonctions:
+ director = personne['nom'].encode(
+ 'utf-8') + ' ' + personne['prenom'].encode('utf-8')
year = int(date[6:10])
day = date[:2]
@@ -223,7 +451,10 @@ def list_videos(params):
aired = '-'.join((str(year), month, day))
# date : string (%d.%m.%Y / 01.01.2009)
# aired : string (2008-12-07)
- image = imgURL % (jsonParserShow['image'])
+
+ # image = url_img % (json_parserShow['image'])
+ image = json_parserShow['image_secure']
+
info = {
'video': {
'title': title,
@@ -233,12 +464,17 @@ def list_videos(params):
'duration': duration,
'year': year,
'genre': genre,
- 'mediatype': 'tvshow'
+ 'mediatype': 'tvshow',
+ 'season': season,
+ 'episode': episode,
+ 'cast': cast,
+ 'director': director
}
}
videos.append({
'label': title,
+ 'fanart': image,
'thumb': image,
'url': common.plugin.get_url(
action='channel_entry',
@@ -249,25 +485,61 @@ def list_videos(params):
'info': info
})
- sort_methods = (
- common.sp.xbmcplugin.SORT_METHOD_DATE,
- common.sp.xbmcplugin.SORT_METHOD_DURATION,
- common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED
- )
+ if 'search' in params.next:
+ # More videos...
+ videos.append({
+ 'label': common.addon.get_localized_string(30100),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='list_videos_search',
+ query=params.query,
+ page=str(int(params.page) + 20),
+ window_title=params.window_title,
+ update_listing=True,
+ previous_listing=str(videos)
+
+ )
+ })
+
+ elif 'last' in params.next:
+ # More videos...
+ videos.append({
+ 'label': common.addon.get_localized_string(30100),
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ url=params.url,
+ next=params.next,
+ page=str(int(params.page) + 20),
+ title=params.title,
+ window_title=params.window_title,
+ update_listing=True,
+ previous_listing=str(videos)
+ )
+
+ })
+
return common.plugin.create_listing(
videos,
- sort_methods=sort_methods,
- content='tvshows')
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_DATE,
+ common.sp.xbmcplugin.SORT_METHOD_DURATION,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
+ common.sp.xbmcplugin.SORT_METHOD_EPISODE
+
+ ),
+ content='tvshows',
+ update_listing='update_listing' in params,
+ )
@common.plugin.cached(common.cache_time)
def get_video_URL(params):
- filPrgm = utils.get_webcontent(showInfo % (params.id_diffusion))
- jsonParser = json.loads(filPrgm)
+ file_prgm = utils.get_webcontent(show_info % (params.id_diffusion))
+ json_parser = json.loads(file_prgm)
url_HD = ''
url_SD = ''
- for video in jsonParser['videos']:
+ for video in json_parser['videos']:
if video['format'] == 'hls_v5_os':
url_HD = video['url']
if video['format'] == 'm3u8-download':
@@ -280,3 +552,20 @@ def get_video_URL(params):
return url_HD
else:
return url_SD
+
+
+def search(params):
+ keyboard = common.sp.xbmc.Keyboard(
+ default='',
+ title='',
+ hidden=False)
+ keyboard.doModal()
+ if keyboard.isConfirmed():
+ query = keyboard.getText()
+ params['next'] = 'list_videos_search'
+ params['page'] = '0'
+ params['query'] = query
+ return list_videos(params)
+
+ else:
+ return None
diff --git a/plugin.video.catchuptvandmore/resources/lib/channels/fr/tf1.py b/plugin.video.catchuptvandmore/resources/lib/channels/fr/tf1.py
index c10c181..ae6053c 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/channels/fr/tf1.py
+++ b/plugin.video.catchuptvandmore/resources/lib/channels/fr/tf1.py
@@ -24,13 +24,24 @@
from bs4 import BeautifulSoup as bs
from resources.lib import utils
from resources.lib import common
+import json
url_root = "http://www.tf1.fr/"
+url_time = 'http://www.wat.tv/servertime2/'
+url_token = 'http://api.wat.tv/services/Delivery'
+
+secret_key = 'W3m0#1mFI'
+app_name = 'sdk/Iphone/1.0'
+version = '2.1.3'
+hosting_application_name = 'com.tf1.applitf1'
+hosting_application_version = '7.0.4'
def channel_entry(params):
if 'list_shows' in params.next:
return list_shows(params)
+ elif 'list_videos_categories' in params.next:
+ return list_videos_categories(params)
elif 'list_videos' in params.next:
return list_videos(params)
elif 'play' in params.next:
@@ -66,15 +77,10 @@ def list_shows(params):
'url': common.plugin.get_url(
action='channel_entry',
category=category_url,
- next='list_shows_2')})
-
- sort_methods = (
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
- common.sp.xbmcplugin.SORT_METHOD_LABEL)
-
- shows = common.plugin.create_listing(
- shows,
- sort_methods=sort_methods)
+ next='list_shows_2',
+ window_title=category_name
+ )
+ })
elif params.next == 'list_shows_2':
programs_soup = root_soup.find(
@@ -104,17 +110,54 @@ def list_shows(params):
'url': common.plugin.get_url(
action='channel_entry',
program_url=program_url,
- next='list_videos')})
+ next='list_videos_categories',
+ window_title=program_name
+ )
+ })
- sort_methods = (
+ return common.plugin.create_listing(
+ shows,
+ sort_methods=(
common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
- common.sp.xbmcplugin.SORT_METHOD_LABEL)
+ common.sp.xbmcplugin.SORT_METHOD_LABEL
+ )
+ )
+
+
+@common.plugin.cached(common.cache_time)
+def list_videos_categories(params):
+ videos_categories = []
+ url = ''.join((
+ url_root,
+ params.program_url,
+ '/videos'))
+ program_html = utils.get_webcontent(url)
+ program_soup = bs(program_html, 'html.parser')
- shows = common.plugin.create_listing(
- shows,
- sort_methods=sort_methods)
+ filters_1_soup = program_soup.find(
+ 'ul',
+ class_='filters_1')
+ for li in filters_1_soup.find_all('li'):
+ category_title = li.get_text().encode('utf-8')
+ category_id = li.find('a')['data-filter'].encode('utf-8')
+ videos_categories.append({
+ 'label': category_title,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ program_url=params.program_url,
+ next='list_videos',
+ window_title=category_title,
+ category_id=category_id
+ )
+ })
+ return common.plugin.create_listing(
+ videos_categories,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL
+ )
+ )
- return shows
@common.plugin.cached(common.cache_time)
@@ -124,7 +167,9 @@ def list_videos(params):
url = ''.join((
url_root,
params.program_url,
- '/videos'))
+ '/videos/',
+ '?filter=',
+ params.category_id))
program_html = utils.get_webcontent(url)
program_soup = bs(program_html, 'html.parser')
@@ -133,91 +178,85 @@ def list_videos(params):
class_='grid')
for li in grid.find_all('li'):
- video_type_string = li.find('strong').get_text().encode('utf-8')
- video_type = video_type_string.lower()
+ video_type_string = li.find('div', class_='description').find('a')['data-xiti-libelle'].encode('utf-8')
+ video_type_string = video_type_string.split('-')[0]
- if 'playlist' not in video_type:
- if 'replay' in video_type or \
- 'video' in video_type or \
- common.plugin.get_setting(params.channel_id + '.bonus'):
+ if 'Playlist' not in video_type_string:
+ title = li.find(
+ 'p',
+ class_='title').get_text().encode('utf-8')
- title = li.find(
+ try:
+ stitle = li.find(
'p',
- class_='title').get_text().encode('utf-8')
+ class_='stitle').get_text().encode('utf-8')
+ except:
+ stitle = ''
- try:
- stitle = li.find(
- 'p',
- class_='stitle').get_text().encode('utf-8')
- except:
- stitle = ''
-
- try:
- duration = li.find(
- 'span',
- attrs={'data-format': 'duration'})
- duration = int(duration.get_text().encode('utf-8'))
- except:
- duration = 0
-
- img = li.find('img')
- try:
- img = img['data-srcset'].encode('utf-8')
- except:
- img = img['srcset'].encode('utf-8')
-
- img = 'http:' + img.split(',')[-1].split(' ')[0]
-
- aired = li.find(
+ try:
+ duration = li.find(
'span',
- attrs={'data-format': None, 'class': 'momentDate'})
- aired = aired.get_text().encode('utf-8')
- aired = aired.split('T')[0]
-
- day = aired.split('-')[2]
- mounth = aired.split('-')[1]
- year = aired.split('-')[0]
- date = '.'.join((day, mounth, year))
- # date : string (%d.%m.%Y / 01.01.2009)
- # aired : string (2008-12-07)
- program_id = li.find('a')['href'].encode('utf-8')
-
- if 'replay' not in video_type and 'video' not in video_type:
- title = title + ' - [I]' + video_type_string + '[/I]'
-
- info = {
- 'video': {
- 'title': title,
- 'plot': stitle,
- 'aired': aired,
- 'date': date,
- 'duration': duration,
- 'year': int(aired[:4]),
- 'mediatype': 'tvshow'
- }
+ attrs={'data-format': 'duration'})
+ duration = int(duration.get_text().encode('utf-8'))
+ except:
+ duration = 0
+
+ img = li.find('img')
+ try:
+ img = img['data-srcset'].encode('utf-8')
+ except:
+ img = img['srcset'].encode('utf-8')
+
+ img = 'http:' + img.split(',')[-1].split(' ')[0]
+
+ # aired = li.find(
+ # 'span',
+ # attrs={'data-format': None, 'class': 'momentDate'})
+ # aired = aired.get_text().encode('utf-8')
+ # aired = aired.split('T')[0]
+ aired = ''
+
+ # day = aired.split('-')[2]
+ # mounth = aired.split('-')[1]
+ # year = aired.split('-')[0]
+ # date = '.'.join((day, mounth, year))
+ date =''
+ # date : string (%d.%m.%Y / 01.01.2009)
+ # aired : string (2008-12-07)
+ program_id = li.find('a')['href'].encode('utf-8')
+
+ info = {
+ 'video': {
+ 'title': title,
+ 'plot': stitle,
+ 'aired': aired,
+ 'date': date,
+ 'duration': duration,
+ #'year': int(aired[:4]),
+ 'mediatype': 'tvshow'
}
+ }
- videos.append({
- 'label': title,
- 'thumb': img,
- 'url': common.plugin.get_url(
- action='channel_entry',
- next='play',
- program_id=program_id,
- ),
- 'is_playable': True,
- 'info': info
- })
+ videos.append({
+ 'label': title,
+ 'thumb': img,
+ 'url': common.plugin.get_url(
+ action='channel_entry',
+ next='play',
+ program_id=program_id,
+ ),
+ 'is_playable': True,
+ 'info': info
+ })
- sort_methods = (
- common.sp.xbmcplugin.SORT_METHOD_DATE,
- common.sp.xbmcplugin.SORT_METHOD_DURATION,
- common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
- common.sp.xbmcplugin.SORT_METHOD_UNSORTED
- )
return common.plugin.create_listing(
videos,
- sort_methods=sort_methods,
+ sort_methods=(
+ common.sp.xbmcplugin.SORT_METHOD_DATE,
+ common.sp.xbmcplugin.SORT_METHOD_DURATION,
+ common.sp.xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE,
+ common.sp.xbmcplugin.SORT_METHOD_UNSORTED
+ ),
content='tvshows')
@@ -235,4 +274,43 @@ def get_video_url(params):
video_id = data_src[-8:]
- return 'http://wat.tv/get/ipad/' + video_id + '.m3u8'
+ timeserver = str(utils.get_webcontent(url_time))
+
+ auth_key = '%s-%s-%s-%s-%s' % (
+ video_id,
+ secret_key,
+ app_name,
+ secret_key,
+ timeserver
+ )
+
+ auth_key = common.sp.md5(auth_key).hexdigest()
+ auth_key = auth_key + '/' + timeserver
+
+ post_data = {
+ 'appName': app_name,
+ 'method': 'getUrl',
+ 'mediaId': video_id,
+ 'authKey': auth_key,
+ 'version': version,
+ 'hostingApplicationName': hosting_application_name,
+ 'hostingApplicationVersion': hosting_application_version
+ }
+
+ url_video = utils.get_webcontent(
+ url=url_token,
+ request_type='post',
+ post_dic=post_data)
+ url_video = json.loads(url_video)
+ url_video = url_video['message'].replace('\\', '')
+
+ desired_quality = common.plugin.get_setting(
+ params.channel_id + '.quality')
+
+ if desired_quality == 'Force HD':
+ try:
+ url_video = url_video.split('&bwmax')[0]
+ except:
+ pass
+
+ return url_video \ No newline at end of file
diff --git a/plugin.video.catchuptvandmore/resources/lib/common.py b/plugin.video.catchuptvandmore/resources/lib/common.py
index 5705b7f..aea8366 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/common.py
+++ b/plugin.video.catchuptvandmore/resources/lib/common.py
@@ -28,3 +28,12 @@ addon = sp.Addon()
cache_time = 10
plugin_name = 'Catch-up TV & More'
+
+
+def get_window_title():
+ query = sp.sys.argv[2][1:]
+ params = plugin.get_params(query)
+ if 'window_title' in params:
+ return params.window_title
+ else:
+ return plugin_name
diff --git a/plugin.video.catchuptvandmore/resources/lib/simpleplugin.py b/plugin.video.catchuptvandmore/resources/lib/simpleplugin.py
index f3b6f9d..f3b6f9d 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/simpleplugin.py
+++ b/plugin.video.catchuptvandmore/resources/lib/simpleplugin.py
diff --git a/plugin.video.catchuptvandmore/resources/lib/skeleton.py b/plugin.video.catchuptvandmore/resources/lib/skeleton.py
index cf1c510..d8546d4 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/skeleton.py
+++ b/plugin.video.catchuptvandmore/resources/lib/skeleton.py
@@ -23,7 +23,7 @@
categories = {
'main_menu.fr': 'French channels'
-# 'main_menu.be': 'Belgian channels'
+ # 'main_menu.be': 'Belgian channels'
}
channels = {
@@ -39,12 +39,18 @@ channels = {
'channels.fr.6play.w9': 'W9',
'channels.fr.tf1.tmc': 'TMC',
'channels.fr.tf1.nt1': 'NT1',
- 'channels.fr.6play.nrj12': 'NRJ 12',
+ 'channels.fr.nrj.nrj12': 'NRJ 12',
'channels.fr.pluzz.france4': 'France 4',
'channels.fr.bfmtv.bfmtv': 'BFM TV',
'channels.fr.itele.itele': 'i-Télé',
'channels.fr.c.cstar': 'CStar',
- 'channels.fr.gulli.gulli': 'Gulli'
+ 'channels.fr.gulli.gulli': 'Gulli',
+ 'channels.fr.pluzz.franceo': 'France Ô',
+ 'channels.fr.tf1.hd1': 'HD1',
+ 'channels.fr.lequipe.lequipe': 'L\'Équipe',
+ 'channels.fr.6play.6ter': '6ter',
+ 'channels.fr.numero23.numero23': 'Numéro 23',
+ 'channels.fr.nrj.cherie25': 'Chérie 25'
}
diff --git a/plugin.video.catchuptvandmore/resources/lib/utils.py b/plugin.video.catchuptvandmore/resources/lib/utils.py
index 7545aa4..5123afb 100755..100644
--- a/plugin.video.catchuptvandmore/resources/lib/utils.py
+++ b/plugin.video.catchuptvandmore/resources/lib/utils.py
@@ -102,7 +102,7 @@ def download_catalog(
r = requests.get(url, headers=headers, params=params)
elif request_type == 'post':
- r = requests.get(
+ r = requests.post(
url, headers=headers, data=post_dic, params=params)
with open(file_path, 'wb') as f:
@@ -141,7 +141,7 @@ def get_webcontent(
r = requests.get(url, headers=headers, params=params)
elif request_type == 'post':
- r = requests.get(url, headers=headers, data=post_dic, params=params)
+ r = requests.post(url, headers=headers, data=post_dic, params=params)
return r.content
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/6ter.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/6ter.png
new file mode 100644
index 0000000..320cf16
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/6ter.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/6ter_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/6ter_fanart.png
new file mode 100644
index 0000000..0fdefb5
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/6ter_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/arte.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/arte.png
index 3c003a2..3c003a2 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/arte.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/arte.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv.png
index 3ca5f2a..3ca5f2a 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv_fanart.png
index 226487f..226487f 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/bfmtv_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/c8.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/c8.png
index e18d86c..e18d86c 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/c8.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/c8.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/c8_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/c8_fanart.png
index 05a9a6c..05a9a6c 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/c8_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/c8_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus.png
index 6829f23..6829f23 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus_fanart.png
index 2a2e3b4..2a2e3b4 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/canalplus_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/cherie25.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/cherie25.png
new file mode 100644
index 0000000..f4f9d60
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/cherie25.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar.png
index 4d3a463..4d3a463 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar_fanart.png
index f7c45db..f7c45db 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/cstar_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france2.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france2.png
index 6f741cd..6f741cd 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france2.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/france2.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france2_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france2_fanart.png
index 8184c2a..8184c2a 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france2_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/france2_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france3.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france3.png
index 3309012..3309012 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france3.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/france3.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france3_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france3_fanart.png
index dede4f8..dede4f8 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france3_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/france3_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france4.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france4.png
index a8a1bba..a8a1bba 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france4.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/france4.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france5.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france5.png
index bc1f6ea..bc1f6ea 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france5.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/france5.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/france5_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/france5_fanart.png
deleted file mode 100755
index 3380814..0000000
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/france5_fanart.png
+++ /dev/null
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/franceo.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/franceo.png
new file mode 100644
index 0000000..b2de049
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/franceo.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli.png
index b2e1522..b2e1522 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli_fanart.png
index 94739ab..94739ab 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/gulli_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/hd1.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/hd1.png
new file mode 100644
index 0000000..c33450f
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/hd1.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/hd1_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/hd1_fanart.png
new file mode 100644
index 0000000..665dc6c
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/hd1_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/itele.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/itele.png
index 2e1d937..2e1d937 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/itele.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/itele.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/itele_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/itele_fanart.png
index 1bca166..1bca166 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/itele_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/itele_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe.png
new file mode 100644
index 0000000..90b5b46
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe_fanart.png
new file mode 100644
index 0000000..bfc2dbe
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/lequipe_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/m6.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/m6.png
index 24852b7..24852b7 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/m6.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/m6.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/m6_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/m6_fanart.png
index f5e8e8e..f5e8e8e 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/m6_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/m6_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12.png
index 0c4c9f4..0c4c9f4 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12_fanart.png
index 848d9c6..848d9c6 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/nrj12_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1.png
index 59c8e33..59c8e33 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1_fanart.png
index bc00729..bc00729 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/nt1_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/numero23.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/numero23.png
new file mode 100644
index 0000000..c6f154f
--- /dev/null
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/numero23.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1.png
index 18b7490..18b7490 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1_fanart.png
index e23d730..e23d730 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/tf1_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc.png
index 2ad9872..2ad9872 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc_fanart.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc_fanart.png
index de8fef7..de8fef7 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc_fanart.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/tmc_fanart.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/media/channels/fr/w9.png b/plugin.video.catchuptvandmore/resources/media/channels/fr/w9.png
index a0c27c4..a0c27c4 100755..100644
--- a/plugin.video.catchuptvandmore/resources/media/channels/fr/w9.png
+++ b/plugin.video.catchuptvandmore/resources/media/channels/fr/w9.png
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-01.jpg b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-01.jpg
index 11c6c33..11c6c33 100755..100644
--- a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-01.jpg
+++ b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-01.jpg
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-02.jpg b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-02.jpg
index da9e325..da9e325 100755..100644
--- a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-02.jpg
+++ b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-02.jpg
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-03.jpg b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-03.jpg
index a5c6b9c..a5c6b9c 100755..100644
--- a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-03.jpg
+++ b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-03.jpg
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-04.jpg b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-04.jpg
index 05ee326..05ee326 100755..100644
--- a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-04.jpg
+++ b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-04.jpg
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-05.jpg b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-05.jpg
index f7d309f..f7d309f 100755..100644
--- a/plugin.video.catchuptvandmore/resources/screenshots/screenshot-05.jpg
+++ b/plugin.video.catchuptvandmore/resources/screenshots/screenshot-05.jpg
Binary files differ
diff --git a/plugin.video.catchuptvandmore/resources/settings.xml b/plugin.video.catchuptvandmore/resources/settings.xml
index 31e8a65..af6fdaa 100755..100644
--- a/plugin.video.catchuptvandmore/resources/settings.xml
+++ b/plugin.video.catchuptvandmore/resources/settings.xml
@@ -6,7 +6,7 @@
<!-- Hide main menu categories -->
<setting label="30010" type="lsep"/>
<setting label="30020" type="bool" id="main_menu.fr" default="true"/>
-<!-- <setting label="30021" type="bool" id="main_menu.be" default="true"/> -->
+ <!-- <setting label="30021" type="bool" id="main_menu.be" default="true"/> -->
</category>
@@ -50,8 +50,8 @@
<setting label="NT1" type="bool" id="channels.fr.tf1.nt1" default="true" visible="eq(-21,true)"/>
<setting label="" type="number" visible="false" id="channels.fr.tf1.nt1.order" default="11"/>
- <setting label="NRJ 12" type="bool" id="channels.fr.6play.nrj12" default="true" visible="eq(-23,true)"/>
- <setting label="" type="number" visible="false" id="channels.fr.6play.nrj12.order" default="12"/>
+ <setting label="NRJ 12" type="bool" id="channels.fr.nrj.nrj12" default="true" visible="eq(-23,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.nrj.nrj12.order" default="12"/>
<setting label="France 4" type="bool" id="channels.fr.pluzz.france4" default="true" visible="eq(-25,true)"/>
<setting label="" type="number" visible="false" id="channels.fr.pluzz.france4.order" default="14"/>
@@ -68,6 +68,23 @@
<setting label="Gulli" type="bool" id="channels.fr.gulli.gulli" default="true" visible="eq(-33,true)"/>
<setting label="" type="number" visible="false" id="channels.fr.gulli.gulli.order" default="18"/>
+ <setting label="France Ô" type="bool" id="channels.fr.pluzz.franceo" default="true" visible="eq(-35,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.pluzz.franceo.order" default="19"/>
+
+ <setting label="HD1" type="bool" id="channels.fr.tf1.hd1" default="true" visible="eq(-37,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.tf1.hd1.order" default="20"/>
+
+ <setting label="L'Équipe" type="bool" id="channels.fr.lequipe.lequipe" default="true" visible="eq(-39,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.lequipe.lequipe.order" default="21"/>
+
+ <setting label="6ter" type="bool" id="channels.fr.6play.6ter" default="true" visible="eq(-41,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.6play.6ter.order" default="22"/>
+
+ <setting label="Numéro 23" type="bool" id="channels.fr.numero23.numero23" default="true" visible="eq(-43,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.numero23.numero23.order" default="23"/>
+
+ <setting label="Chérie 25" type="bool" id="channels.fr.nrj.cherie25" default="true" visible="eq(-45,true)"/>
+ <setting label="" type="number" visible="false" id="channels.fr.nrj.cherie25.order" default="25"/>
<!-- <setting label="30021" type="lsep" subsetting="true" visible="eq(1,true)"/>
<setting label="30021" type="bool" id="main_menu.be" default="true" visible="false"/>
<setting label="RTBF" type="bool" id="channels.be.rtbf.rtbf" default="true" visible="eq(-1,true)"/> -->
@@ -82,38 +99,59 @@
<setting label="30020" type="bool" id="main_menu.fr" default="true" visible="false"/>
<setting label="TF1" type="bool" id="channels.fr.tf1.tf1" default="true" visible="false"/>
- <setting label="30070" type="bool" id="channels.fr.tf1.tf1.bonus" default="true" visible="eq(-1,true) + eq(-2,true)"/>
+ <!-- <setting label="30070" type="bool" id="channels.fr.tf1.tf1.bonus" default="true" visible="eq(-1,true) + eq(-2,true)"/> -->
+ <setting label="30070" type="bool" id="channels.fr.tf1.tf1.bonus" default="true" visible="false"/>
+ <setting label="30087" type="labelenum" id="channels.fr.tf1.tf1.quality" visible="eq(-2,true) + eq(-3,true)" values="Force HD|Auto"/>
<setting label="France 2" type="bool" id="channels.fr.pluzz.france2" default="true" visible="false"/>
- <setting label="30071" type="labelenum" id="channels.fr.pluzz.france2.quality" visible="eq(-1,true) + eq(-4,true)" values="HD|SD"/>
+ <setting label="30071" type="labelenum" id="channels.fr.pluzz.france2.quality" visible="eq(-1,true) + eq(-5,true)" values="HD|SD"/>
<setting label="France 3" type="bool" id="channels.fr.pluzz.france3" default="true" visible="false"/>
- <setting label="30072" type="labelenum" id="channels.fr.pluzz.france3.quality" visible="eq(-1,true) + eq(-6,true)" values="HD|SD"/>
-
- <setting label="France 4" type="bool" id="channels.fr.pluzz.france4" default="true" visible="false"/>
- <setting label="30073" type="labelenum" id="channels.fr.pluzz.france4.quality" visible="eq(-1,true) + eq(-8,true)" values="HD|SD"/>
-
- <setting label="BFM TV" type="bool" id="channels.fr.bfmtv.bfmtv" default="true" visible="false"/>
- <setting label="30081" type="labelenum" id="channels.fr.bfmtv.bfmtv.quality" visible="eq(-1,true) + eq(-10,true)" values="HD+|HD|SD|SD-"/>
+ <setting label="30072" type="labelenum" id="channels.fr.pluzz.france3.quality" visible="eq(-1,true) + eq(-7,true)" values="HD|SD"/>
<setting label="France 5" type="bool" id="channels.fr.pluzz.france5" default="true" visible="false"/>
- <setting label="30074" type="labelenum" id="channels.fr.pluzz.france5.quality" visible="eq(-1,true) + eq(-12,true)" values="HD|SD"/>
-
- <setting label="France Ô" type="bool" id="channels.fr.pluzz.franceo" default="true" visible="false"/>
- <setting label="30075" type="labelenum" id="channels.fr.pluzz.franceo.quality" visible="eq(-1,true) + eq(-14,true)" values="HD|SD"/>
-
+ <setting label="30074" type="labelenum" id="channels.fr.pluzz.france5.quality" visible="eq(-1,true) + eq(-9,true)" values="HD|SD"/>
+
<setting label="M6" type="bool" id="channels.fr.6play.m6" default="true" visible="false"/>
- <setting label="30076" type="labelenum" id="channels.fr.6play.m6.quality" visible="eq(-1,true) + eq(-16,true)" values="Auto|Force HD|Force SD"/>
+ <setting label="30076" type="labelenum" id="channels.fr.6play.m6.quality" visible="eq(-1,true) + eq(-11,true)" values="Auto|Force HD|Force SD"/>
<setting label="Arte" type="bool" id="channels.fr.arte.arte" default="true" visible="false"/>
- <setting label="30079" type="labelenum" id="channels.fr.arte.arte.quality" visible="eq(-1,true) + eq(-18,true)" values="Auto|HD+|HD|SD|SD-"/>
- <setting label="30080" type="labelenum" id="channels.fr.arte.arte.language" visible="eq(-2,true) + eq(-19,true)" values="Auto|fr|de|en|es|pl"/>
+ <setting label="30079" type="labelenum" id="channels.fr.arte.arte.quality" visible="eq(-1,true) + eq(-13,true)" values="Auto|HD+|HD|SD|SD-"/>
+
+ <setting label="30080" type="labelenum" id="channels.fr.arte.arte.language" visible="eq(-2,true) + eq(-14,true)" values="Auto|fr|de"/>
<setting label="W9" type="bool" id="channels.fr.6play.w9" default="true" visible="false"/>
- <setting label="30077" type="labelenum" id="channels.fr.6play.W9.quality" visible="eq(-1,true) + eq(-21,true)" values="Auto|Force HD|Force SD"/>
+ <setting label="30077" type="labelenum" id="channels.fr.6play.W9.quality" visible="eq(-1,true) + eq(-16,true)" values="Auto|Force HD|Force SD"/>
+
+ <setting label="TMC" type="bool" id="channels.fr.tf1.tmc" default="true" visible="false"/>
+ <setting label="30082" type="bool" id="channels.fr.tf1.tmc.bonus" default="true" visible="eq(-1,true) + eq(-18,true)"/>
+
+ <setting label="NT1" type="bool" id="channels.fr.tf1.nt1" default="true" visible="false"/>
+ <setting label="30083" type="bool" id="channels.fr.tf1.nt1.bonus" default="true" visible="eq(-1,true) + eq(-20,true)"/>
+
+ <setting label="NRJ 12" type="bool" id="channels.fr.nrj.nrj12" default="true" visible="false"/>
+ <setting label="30085" type="labelenum" id="channels.fr.nrj.nrj12.quality" visible="eq(-1,true) + eq(-22,true)" values="Auto|Force HD|Force SD"/>
+
+ <setting label="France 4" type="bool" id="channels.fr.pluzz.france4" default="true" visible="false"/>
+ <setting label="30073" type="labelenum" id="channels.fr.pluzz.france4.quality" visible="eq(-1,true) + eq(-24,true)" values="HD|SD"/>
+
+ <setting label="BFM TV" type="bool" id="channels.fr.bfmtv.bfmtv" default="true" visible="false"/>
+ <setting label="30081" type="labelenum" id="channels.fr.bfmtv.bfmtv.quality" visible="eq(-1,true) + eq(-26,true)" values="HD+|HD|SD|SD-"/>
+
+ <setting label="France Ô" type="bool" id="channels.fr.pluzz.franceo" default="true" visible="false"/>
+ <setting label="30075" type="labelenum" id="channels.fr.pluzz.franceo.quality" visible="eq(-1,true) + eq(-28,true)" values="HD|SD"/>
+
+ <setting label="HD1" type="bool" id="channels.fr.tf1.hd1" default="true" visible="false"/>
+ <setting label="30084" type="bool" id="channels.fr.tf1.hd1.bonus" default="true" visible="eq(-1,true) + eq(-30,true)"/>
<setting label="6ter" type="bool" id="channels.fr.6play.6ter" default="true" visible="false"/>
- <setting label="30078" type="labelenum" id="channels.fr.6play.6ter.quality" visible="eq(-1,true) + eq(-23,true)" values="Auto|Force HD|Force SD"/>
+ <setting label="30078" type="labelenum" id="channels.fr.6play.6ter.quality" visible="eq(-1,true) + eq(-32,true)" values="Auto|Force HD|Force SD"/>
+
+ <setting label="L'Équipe" type="bool" id="channels.fr.lequipe.lequipe" default="true" visible="false"/>
+ <setting label="30086" type="labelenum" id="channels.fr.lequipe.lequipe.quality" visible="eq(-1,true) + eq(-34,true)" values="HD+|HD|SD"/>
+
+ <setting label="Numéro 23" type="bool" id="channels.fr.numero23.numero23" default="true" visible="false"/>
+ <setting label="30088" type="labelenum" id="channels.fr.numero23.numero23.quality" visible="eq(-1,true) + eq(-36,true)" values="HD+|HD|SD"/>
<setting label="" type="bool" id="show_hidden_items_information" default="true" visible="false"/>
</category>