Problema com Onebox e Youtube

ex.

A miniatura do YouTube não aparece na Lista de Tópicos, por exemplo, no tema Fakebook ou no plugin TLP.

Passos para Reproduzir (STR):

Publique um vídeo do YouTube, mude para o tema Fakebook e a miniatura não aparecerá.

Solução Alternativa:

Reconstrua o post e a miniatura aparecerá. No entanto, como os usuários esperam que a miniatura apareça imediatamente, sem intervenção da equipe, essa não é uma boa solução.

Mais Informações:

Topic.image_url parece estar como nil.

Isso parece ter sido quebrado recentemente, após o início de agosto… Acredito que funcionava antes de 5 de agosto (mas não tenho certeza de quando exatamente quebrou). Percebi que isso coincide aproximadamente com uma nova versão do Onebox…

Testei isso em uma build anterior e o problema não estava presente, o que descarta respostas og do YouTube. Além disso, o tema Fakebook apresenta o mesmo comportamento que o plugin TLP, descartando o plugin TLP. Portanto, suspeito que seja uma regressão recente no Discourse ou no Onebox.

Isso é um problema real para os usuários dos Pré-visualizações da Lista de Tópicos.

4 curtidas

Atualização: fiz um Git Bisect e parece que este é o commit problemático:

3 curtidas
diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index ac16eb82c16..46050a69e40 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -28,7 +28,7 @@ def initialize(post, opts = {})
     @cooking_options = @cooking_options.symbolize_keys
 
     @doc = Nokogiri::HTML::fragment(post.cook(post.raw, @cooking_options))
-    @has_oneboxes = post.post_analyzer.found_oneboxes?
+    @has_oneboxes = @doc.css("aside.onebox").count > 0
     @size_cache = {}

@nbianca por que não estamos mais usando o método post.post_analyzer.found_oneboxes? aqui?

Todos os oneboxes que usam oembed ou iframe falharão no novo modo de seletor CSS, o que também faz com que nosso detector de Onebox seja diferente em toda a base de código.

4 curtidas

Concordo, @nbianca. Isso parece uma mudança extremamente frágil. Por que esse método foi selecionado?

2 curtidas

O problema era que o First Onebox era concedido para qualquer link postado, independentemente de ser ou não um Onebox. Isso ocorre porque o PrettyText adiciona class="onebox" a todos os links e, em seguida, o Oneboxer tenta analisar todos os links com a classe onebox.

A alteração que fiz verifica se o documento final possui algum Onebox (Oneboxes são aside com a classe onebox). Vou dar outra olhada para ver o que está quebrado e por que, e retornarei com uma alteração que corrija ambos os problemas.

7 curtidas

Fiz algumas melhorias aqui e criei este PR.

Acabei de testar a versão 2.3.2 e não parece que links do YouTube definem o atributo image_url do tópico. O motivo é que a imagem é extraída do atributo src de uma tag img, mas quando um vídeo do YouTube é vinculado, há um <div> com um atributo CSS background-image.

Tem certeza de que image_url costumava ser definido?

5 curtidas

Obrigado por verificar isso. Vou checar do meu lado e retorno.

@nbianca, desculpe, isso pode ser uma combinação de dois problemas.

Funciona com o plugin TLP antes e até este commit:

Após este commit, falha com o TLP.

Concordo com você que, para o YouTube, essa propriedade não é preenchida por padrão.

Parece que o TLP fazia um trabalho melhor com suas substituições, mas dependia de algo que agora foi alterado.

FYI, as substituições relevantes estão aqui: https://github.com/angusmcleod/discourse-topic-previews/blob/master/lib/cooked_post_processor_edits.rb

Acho que precisarei fazer mais algumas análises, mas parece que houve mudanças suficientes para quebrar o TLP.

Vou investigar isso um pouco mais e reverter novamente. Infelizmente, posso não ter oportunidade nos próximos dias.

1 curtida

Não vejo como aquele commit pode quebrar o plugin TLP :thinking: Tem 100% de certeza da sua bisect?

1 curtida

Muito estranho que o bisect tenha encontrado uma alteração no cooked_post_processor… Vou verificar novamente e reverter.

Sim, confirmado:

Com este commit, falha: 7c83d2eeb261ac676a8320e6a704752c56fd242e
Com este commit anterior, está tudo certo: 922c40f87cdceb8197dd61361334e0def23f13d5

1 curtida

O problema foi corrigido aqui:

7 curtidas