Store item content MIME type
This commit is contained in:
parent
198ca0345b
commit
26bfb2e58f
|
@ -141,6 +141,10 @@ label.sidebar-toggle > .oi {
|
|||
display: inline-block;
|
||||
}
|
||||
|
||||
.post-content img {
|
||||
.item-content img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.item-content > .raw-content {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ defmodule Frenzy.Item do
|
|||
|
||||
schema "items" do
|
||||
field :content, :string
|
||||
field :content_type, :string
|
||||
field :date, :utc_datetime
|
||||
field :creator, :string
|
||||
field :guid, :string
|
||||
|
@ -63,6 +64,7 @@ defmodule Frenzy.Item do
|
|||
__meta__: Ecto.Schema.Metadata.t(),
|
||||
id: integer() | nil,
|
||||
content: String.t(),
|
||||
content_type: String.t() | nil,
|
||||
date: DateTime.t(),
|
||||
creator: String.t(),
|
||||
guid: String.t(),
|
||||
|
|
|
@ -11,8 +11,8 @@ defmodule Frenzy.Pipeline.GeminiScrapeStage do
|
|||
Logger.warn("Unable to get Gemini content for #{url}: #{reason}")
|
||||
{:ok, item_params}
|
||||
|
||||
content ->
|
||||
{:ok, %{item_params | content: content}}
|
||||
{content, content_type} ->
|
||||
{:ok, %{item_params | content: content, content_type: content_type}}
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -24,14 +24,21 @@ defmodule Frenzy.Pipeline.GeminiScrapeStage do
|
|||
@impl Stage
|
||||
def default_opts(), do: %{}
|
||||
|
||||
@spec get_content(String.t(), map()) :: {:ok, String.t()} | {:error, term()}
|
||||
@spec get_content(String.t(), map()) :: {String.t(), String.t()} | {:error, term()}
|
||||
def get_content(url, _opts) do
|
||||
case Network.gemini_request(url) do
|
||||
{:error, reason} ->
|
||||
{:error, reason}
|
||||
|
||||
{:ok, %Gemini.Response{body: body}} ->
|
||||
body
|
||||
{:ok, %Gemini.Response{body: body, meta: meta}} ->
|
||||
{body, parse_content_type(meta)}
|
||||
end
|
||||
end
|
||||
|
||||
defp parse_content_type(meta) do
|
||||
meta
|
||||
|> String.split(";")
|
||||
|> hd()
|
||||
|> String.trim()
|
||||
end
|
||||
end
|
||||
|
|
|
@ -32,7 +32,9 @@ defmodule Frenzy.Task.CreateItem do
|
|||
url: url,
|
||||
date: date,
|
||||
creator: "",
|
||||
content: entry.content
|
||||
content: entry.content,
|
||||
# we assume text/html in the feed itself, other stages may alter this
|
||||
content_type: "text/html"
|
||||
}
|
||||
|
||||
feed = Repo.preload(feed, :pipeline)
|
||||
|
|
|
@ -16,6 +16,10 @@
|
|||
<% end %>
|
||||
</div>
|
||||
|
||||
<article class="mt-4">
|
||||
<article class="item-content mt-4">
|
||||
<%= if @item.content_type in [nil, "text/html"] do %>
|
||||
<%= raw(@item.content) %>
|
||||
<% else %>
|
||||
<pre class="raw-content"><%= raw(@item.content) %></pre>
|
||||
<% end %>
|
||||
</article>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
defmodule Frenzy.Repo.Migrations.ItemAddContentType do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
alter table(:items) do
|
||||
add :content_type, :string, default: nil
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue