parent
aea63436f7
commit
14f24b1839
|
@ -5,12 +5,12 @@ defmodule Mobilizon.GraphQL.Resolvers.Resource do
|
||||||
|
|
||||||
alias Mobilizon.{Actors, Resources, Users}
|
alias Mobilizon.{Actors, Resources, Users}
|
||||||
alias Mobilizon.Actors.Actor
|
alias Mobilizon.Actors.Actor
|
||||||
|
alias Mobilizon.Federation.ActivityPub
|
||||||
alias Mobilizon.Resources.Resource
|
alias Mobilizon.Resources.Resource
|
||||||
alias Mobilizon.Resources.Resource.Metadata
|
alias Mobilizon.Resources.Resource.Metadata
|
||||||
|
alias Mobilizon.Service.RichMedia.Parser
|
||||||
alias Mobilizon.Storage.Page
|
alias Mobilizon.Storage.Page
|
||||||
alias Mobilizon.Users.User
|
alias Mobilizon.Users.User
|
||||||
alias Mobilizon.Federation.ActivityPub
|
|
||||||
alias Mobilizon.Service.RichMedia.Parser
|
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
|
|
|
@ -139,7 +139,7 @@ defmodule Mobilizon.Config do
|
||||||
:enabled
|
:enabled
|
||||||
]
|
]
|
||||||
|
|
||||||
def instance_resource_providers() do
|
def instance_resource_providers do
|
||||||
types = get_in(Application.get_env(:mobilizon, Mobilizon.Service.ResourceProviders), [:types])
|
types = get_in(Application.get_env(:mobilizon, Mobilizon.Service.ResourceProviders), [:types])
|
||||||
|
|
||||||
providers =
|
providers =
|
||||||
|
|
|
@ -2,11 +2,12 @@ defmodule Mobilizon.Resources do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
The Resources context.
|
The Resources context.
|
||||||
"""
|
"""
|
||||||
|
alias Ecto.Adapters.SQL
|
||||||
|
alias Ecto.Multi
|
||||||
alias Mobilizon.Actors
|
alias Mobilizon.Actors
|
||||||
alias Mobilizon.Actors.Actor
|
alias Mobilizon.Actors.Actor
|
||||||
alias Mobilizon.Resources.Resource
|
alias Mobilizon.Resources.Resource
|
||||||
alias Mobilizon.Storage.{Page, Repo}
|
alias Mobilizon.Storage.{Page, Repo}
|
||||||
alias Ecto.Multi
|
|
||||||
|
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
require Logger
|
require Logger
|
||||||
|
@ -172,7 +173,7 @@ defmodule Mobilizon.Resources do
|
||||||
["#{path}/#{title}/", actor_id, old_parent_id]}
|
["#{path}/#{title}/", actor_id, old_parent_id]}
|
||||||
end
|
end
|
||||||
|
|
||||||
Ecto.Adapters.SQL.query!(
|
SQL.query!(
|
||||||
repo,
|
repo,
|
||||||
query,
|
query,
|
||||||
params
|
params
|
||||||
|
|
|
@ -16,6 +16,7 @@ defmodule Mobilizon.Service.RichMedia.Parser do
|
||||||
|
|
||||||
alias Mobilizon.Config
|
alias Mobilizon.Config
|
||||||
alias Mobilizon.Service.RichMedia.Favicon
|
alias Mobilizon.Service.RichMedia.Favicon
|
||||||
|
alias Plug.Conn.Utils
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
defp parsers do
|
defp parsers do
|
||||||
|
@ -26,23 +27,21 @@ defmodule Mobilizon.Service.RichMedia.Parser do
|
||||||
|
|
||||||
@spec parse(String.t()) :: {:ok, map()} | {:error, any()}
|
@spec parse(String.t()) :: {:ok, map()} | {:error, any()}
|
||||||
def parse(url) do
|
def parse(url) do
|
||||||
try do
|
case Cachex.fetch(:rich_media_cache, url, fn _ ->
|
||||||
case Cachex.fetch(:rich_media_cache, url, fn _ ->
|
case parse_url(url) do
|
||||||
case parse_url(url) do
|
{:ok, data} -> {:commit, data}
|
||||||
{:ok, data} -> {:commit, data}
|
{:error, err} -> {:ignore, err}
|
||||||
{:error, err} -> {:ignore, err}
|
end
|
||||||
end
|
end) do
|
||||||
end) do
|
{status, value} when status in [:ok, :commit] ->
|
||||||
{status, value} when status in [:ok, :commit] ->
|
{:ok, value}
|
||||||
{:ok, value}
|
|
||||||
|
|
||||||
{_, err} ->
|
{_, err} ->
|
||||||
{:error, err}
|
{:error, err}
|
||||||
end
|
|
||||||
rescue
|
|
||||||
e ->
|
|
||||||
{:error, "Cachex error: #{inspect(e)}"}
|
|
||||||
end
|
end
|
||||||
|
rescue
|
||||||
|
e ->
|
||||||
|
{:error, "Cachex error: #{inspect(e)}"}
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec parse_url(String.t(), List.t()) :: {:ok, map()} | {:error, any()}
|
@spec parse_url(String.t(), List.t()) :: {:ok, map()} | {:error, any()}
|
||||||
|
@ -154,7 +153,7 @@ defmodule Mobilizon.Service.RichMedia.Parser do
|
||||||
@spec parse_content_disposition(String.t()) :: String.t() | nil
|
@spec parse_content_disposition(String.t()) :: String.t() | nil
|
||||||
defp parse_content_disposition(disposition) do
|
defp parse_content_disposition(disposition) do
|
||||||
with [_, params] <- :binary.split(disposition, ";"),
|
with [_, params] <- :binary.split(disposition, ";"),
|
||||||
%{"name" => _name} = params <- Plug.Conn.Utils.params(params) do
|
%{"name" => _name} = params <- Utils.params(params) do
|
||||||
handle_disposition(params)
|
handle_disposition(params)
|
||||||
else
|
else
|
||||||
_ -> nil
|
_ -> nil
|
||||||
|
|
|
@ -8,12 +8,13 @@ defmodule Mobilizon.Service.RichMedia.Parsers.OGP do
|
||||||
Module to parse OpenGraph data in HTML pages
|
Module to parse OpenGraph data in HTML pages
|
||||||
"""
|
"""
|
||||||
require Logger
|
require Logger
|
||||||
|
alias Mobilizon.Service.RichMedia.Parsers.MetaTagsParser
|
||||||
|
|
||||||
def parse(html, data) do
|
def parse(html, data) do
|
||||||
Logger.debug("Using OpenGraph card parser")
|
Logger.debug("Using OpenGraph card parser")
|
||||||
|
|
||||||
with {:ok, data} <-
|
with {:ok, data} <-
|
||||||
Mobilizon.Service.RichMedia.Parsers.MetaTagsParser.parse(
|
MetaTagsParser.parse(
|
||||||
html,
|
html,
|
||||||
data,
|
data,
|
||||||
"og",
|
"og",
|
||||||
|
|
Loading…
Reference in New Issue