Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lista de canais ao vivo vazia no brplay (RaspberryPi 3 + LibreElec 9.2.7+) #161

Closed
renatolfc opened this issue Aug 14, 2021 · 3 comments
Closed

Comments

@renatolfc
Copy link

renatolfc commented Aug 14, 2021

Recentemente assinei GloboPlay + Canais Ao Vivo e comecei a usar o brplay na minha RaspberryPi com LibreElec. Configurei com minhas credenciais e somente com Globo Play habilitado (conforme screenshot abaixo):

image

O que notei é que, dessa forma, a listagem de canais vinha vazia de maneira intermitente.

Inspecionando os logs, vejo que a lista de canais realmente vem vazia:

2021-08-14 07:51:59.469 T:1186980736  NOTICE: [plugin.video.brplay] - []
2021-08-14 07:51:59.469 T:1186980736  NOTICE: [plugin.video.brplay] - No result to display
2021-08-14 07:51:59.469 T:1186980736  NOTICE: [plugin.video.brplay] - Finished Processing

Um pouco antes no log, encontrei o seguinte traceback (que, como veremos adiante, é a causa raiz do problema):

2021-08-14 07:51:59.467 T:1135596416   ERROR: Exception in thread Thread-1:
                                            Traceback (most recent call last):
                                              File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
                                              File "/storage/.kodi/addons/plugin.video.brplay/resources/lib/modules/workers.py", line 19, in run
                                                self._result = self._target(*self._args)
                                              File "/storage/.kodi/addons/plugin.video.brplay/resources/lib/modules/globoplay/scraper_live.py", line 83, in get_live_channels
                                                [live.extend(i.get_result() or []) for i in threads]
                                              File "/storage/.kodi/addons/plugin.video.brplay/resources/lib/modules/globoplay/scraper_live.py", line 630, in get_mais_canais
                                                fanart = title_obj.get('cover', {}).get('landscape', fanart) or fanart
                                            AttributeError: 'NoneType' object has no attribute 'get'

Ok. Parece, então, que alguma suposição não é válida ao tentar buscar o fanart de um canal. Pelo fluxo do código, title_obj é populado a partir do objeto EPG. O EPG imediatamente anterior à exceção no log é este:

{
    u'contentRating': u'L',
    u'description': u'Uma bab\xe1 misteriosa \xe9 contratada para colocar na linha os sete filhos de um vi\xfavo.',
    u'tags': None,
    u'title': {
        u'genres': None,
        u'countries': None,
        u'poster': None,
        u'format': None,
        u'cover': None,
        u'cast': None,
        u'directors': None,
        u'releaseYear': None,
        u'type': None
    },
    u'metadata': u'Nanny McPhee - A Bab\xe1 Encantada',
    u'titleId': u'SmknHTBngG',
    u'durationInMinutes': 114,
    u'startTime': 1628937900,
    u'liveBroadcast': False,
    u'endTime': 1628944799,
    u'name': u'Studio Movie'
}

Ahá! title_obj, portanto, é um dict com todos os valores None! É isso que causa a exceção. O problema é que o código supõe erroneamente que, se um membro do objeto/dict title existe, ele será não-nulo (não-nenhum 😄).

Vendo o fluxo do código, vemos que a mesma suposição é feita para o membro poster e que também falharia nesse caso.

Eu resolvi localmente com um patch simplório, mas efetivo:

--- resources/lib/modules/globoplay/scraper_live.py.old 2021-08-14 08:32:21.147059298 -0300
+++ resources/lib/modules/globoplay/scraper_live.py     2021-08-14 08:31:11.233883856 -0300
@@ -627,8 +627,15 @@

         title = epg.get('name', '')
         description = title_obj.get('description') or epg.get('description', '')
-        fanart = title_obj.get('cover', {}).get('landscape', fanart) or fanart
-        poster = title_obj.get('poster', {}).get('web')
+        try:
+            fanart = title_obj.get('cover', {}).get('landscape', fanart) or fanart
+        except:
+            if not fanart:
+                fanart = ''
+        try:
+            poster = title_obj.get('poster', {}).get('web')
+        except:
+            poster = ''
         thumb = THUMBS.get(str(broadcast.get('transmissionId')))
         thumb = (SNAPSHOT_URL.format(transmission=thumb) + '?=' + str(int(time.time()))) if thumb else fanart

O correto provavelmente seria, ao invés de usar um except cru como esse, capturar AttributeError ou guardar tudo por um ... is not None. No entanto, não tive tempo de fazer isso, dado que a família queria assistir TV. 😅

Acabei fazendo um upload da versão com o patch aplicado em scraper_live.py.txt

@ghost
Copy link

ghost commented Aug 19, 2021

Obrigado por compartilhar, também tinha esse problema. Parece que o autor do plugin anda ocupado e não dando muito atenção aos report da galera. Obrigado novamente, aqui deu certo.

@renatolfc
Copy link
Author

Fico feliz que deu certo, @danilo759.

Quanto ao autor, tenho certeza que ele está fazendo o melhor dele. Manter um add-on deste porte é um trabalho considerável.

Por sorte, temos as issues do github para trocar ideias e soluções. 😅

@olavopeixoto
Copy link
Owner

Obrigado, Renato.
Esse problema foi resolvido no último release. Me diz se funcionou pra vocês.

Quando encontrar algum problema fique a vontade pra mandar um pull request.
Nem sempre tenho tempo pra consertar os problemas prontamente, com a ajuda da comunidade fica mais fácil pra todos.
Abraços.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants