Usando imagens onebox para miniaturas de tópicos

Por que a API frequentemente falha ao criar miniaturas, mesmo quando imagens grandes o suficiente são baixadas?

Por exemplo, se você colar o seguinte em uma postagem inicial…

Essa onebox baixa uma imagem grande o suficiente com dimensões de 690 x 465:

Ainda assim, nenhuma miniatura foi criada para o tópico.

1 curtida

Isso não depende do tamanho da imagem. Em geral, não extraímos imagens das oneboxes, pois, na maioria dos casos, elas não são úteis para miniaturas. Por exemplo, algo que vemos frequentemente no Meta são links de repositórios do GitHub, como

Ninguém quer que meu rosto seja ampliado e usado como miniatura do tópico :wink:

3 curtidas

Bem, isso é muito específico para o Meta; não temos nenhum link do GitHub em nossa comunidade. Tudo gira em torno de notícias, e imagens de onebox devem ser usadas. Isso limita bastante as miniaturas, apenas por causa desse problema de “rosto” no Meta. Existe alguma maneira de alterar isso e adicionar imagens de oneboxes? Acredito que muitas comunidades não se importam com os “rostos” do GitHub.

3 curtidas

Estou certamente aberto a melhorias aqui. Sei que @merefield também está interessado nessa lógica. A alteração seria necessária no núcleo, e não em um plugin, então vou separar isso em um tópico próprio.

Aqui está a lógica existente:

Talvez pudéssemos adicionar uma classe .no-thumbnail a certos tipos de onebox (por exemplo, GitHub) e, em seguida, ensinar o Discourse a ignorar apenas esses, mantendo as imagens de outros oneboxes.

Vou adicionar a tag pr-welcome a isso, mas certifique-se de descrever um plano neste tópico antes de realizar qualquer trabalho substancial.

5 curtidas

Isso seria ótimo. Atualmente, 90% dos nossos tópicos não recebem miniaturas, embora pudessem ter. E, como dito, essa issue no GitHub é um caso limite muito específico para comunidades de desenvolvedores; a grande maioria de nós não recebe miniaturas para tópicos que certamente poderiam ter, por causa disso.

2 curtidas

Eu concordo totalmente!!! Para o caso de uso de um agregador de notícias ou qualquer outra página focada em republicações, não ter miniaturas relevantes é um problema sério.

Se vocês não integrarem isso em breve, têm alguma ideia de como fazer isso na minha distribuição auto-hospedada?

1 curtida

Sim, atualmente isso não está sendo considerado, pois os ‘rostos’ do GitHub poderiam ser exibidos em comunidades de desenvolvedores como a do Meta, mas a maioria das comunidades não se importa com ‘rostos’ e deseja ter o maior número possível de miniaturas, especialmente quando há imagens de onebox suficientemente grandes disponíveis para a OP.

Esse exemplo do OP funciona bem para as Pré-visualizações da Lista de Tópicos, pois eu uso critérios mais amplos no plugin:

  def extract_images_for_post
    # todas as imagens com um atributo src
    @doc.css("img[src]") -
    # menos emojis
    @doc.css("img.emoji") -
    # menos imagens dentro de citações
    @doc.css(".quote img") -
    # menos ícones de site de onebox
    @doc.css("img.site-icon") -
    # menos avatares de onebox
    @doc.css("img.onebox-avatar") # Critérios mais amplos que o Núcleo do Discourse
  end

fonte: discourse-topic-previews-sidecar/lib/cooked_post_processor_edits.rb at f4332f9742a37827fd6364b2365c45524f1e7faf · merefield/discourse-topic-previews-sidecar · GitHub

1 curtida

Sim, obrigado @merefield, mas usamos apenas o componente de tema do @david, não o TLP TC. Mas provavelmente usarei sua avaliação para corrigir o núcleo se não houver algum avanço ou uma opção fornecida pela @team sobre essa questão.

1 curtida

O render acima é do TLP TC, mas sim, eu uso um plugin de back-end (o tema ‘side car’) para modificar o Ruby :). https://github.com/merefield/discourse-topic-previews/tree/theme_sidecar Agradeço que isso pode não ser uma opção se estiver hospedado.

3 curtidas

Isso está totalmente na mesa, por isso está marcado com pr-welcome :smiley:

Confira esta postagem para um ponto de partida na implementação.

4 curtidas

@merefield Você poderia fazer o PR, por gentileza? Infelizmente, sou completamente novo em Ruby. Ou como é o processo para um PR?

1 curtida

@david Eu ficaria realmente feliz em poder remover essa substituição dos plugins e concordo que uma solução centralizada seria a melhor opção.

3 curtidas

@Terrapop aqui estão as Contributing to Discourse development

Eu seria um assistente mais imediato nisso, mas estou atolado com trabalho de cliente no momento.

2 curtidas

Entendido. Por enquanto, tenho apenas um ambiente de desenvolvimento Docker simples para criar alguns plugins e corrigir falhas básicas. Vou aguardar até que alguém possa analisar isso e, provavelmente, aplicar uma correção por meio da sua avaliação no intervalo.

Um trabalho adequado aqui não é um projeto imaterial, pois você precisará modificar casos de teste e trabalhar nos dois componentes (Discourse e Discourse One-Box). Mas definitivamente vale a pena!

Aliás, Ruby não é nada para se temer depois do Ember :wink:

3 curtidas

Sim, mas isso definitivamente está fora do meu escopo e das minhas capacidades atuais, infelizmente.

1 curtida

Como solução alternativa, costumo copiar e colar a imagem manualmente em um whisper e, em seguida, selecionar a miniatura a partir dela.

Seria melhor se fosse automático, talvez com uma opção de configuração para especificar domínios dos quais as miniaturas não devem ser extraídas de caixas individuais (ou seja, para cobrir o caso do GitHub).

3 curtidas

Concordo. Usamos o snippet do @merefield para substituir o núcleo por um mini-plugin. Mas deveria ser fácil para a equipe do núcleo criar algo pronto para uso. Não ter isso apenas porque alguns têm medo de aparecer com seus rostos no GitHub é apenas preguiça.

1 curtida

Acabei de mesclar FEATURE: Allow onebox images to be used as topic thumbnails (#12050) · discourse/discourse@b770c30 · GitHub, que permite que as imagens do onebox sejam selecionadas como miniaturas de tópicos. Existe uma exceção específica para o onebox do GitHub, e podemos adicionar mais conforme necessário.

(cc @Terrapop @merefield)

10 curtidas