aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSachin Joshi <satchin.joshi@gmail.com>2019-07-19 11:43:42 +0545
committerSachin Joshi <satchin.joshi@gmail.com>2019-07-19 11:43:42 +0545
commitde9906ad56bd25d6c8c38bef1307192df2e95445 (patch)
treed84786cb8cf3361684c982d2109feccb7a42aaef /lib
parent18234cc44e6bc989e3e3cf15714c54b4fa05b9dd (diff)
downloadpleroma-de9906ad56bd25d6c8c38bef1307192df2e95445.tar.gz
change the structure of image ttl parsar
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/rich_media/parser.ex36
-rw-r--r--lib/pleroma/web/rich_media/parsers/ttl/aws_signed_url.ex10
-rw-r--r--lib/pleroma/web/rich_media/parsers/ttl/ttl.ex3
3 files changed, 27 insertions, 22 deletions
diff --git a/lib/pleroma/web/rich_media/parser.ex b/lib/pleroma/web/rich_media/parser.ex
index ba8dc6f2a..b69b2be61 100644
--- a/lib/pleroma/web/rich_media/parser.ex
+++ b/lib/pleroma/web/rich_media/parser.ex
@@ -35,17 +35,17 @@ defmodule Pleroma.Web.RichMedia.Parser do
@doc """
Set the rich media cache based on the expiration time of image.
- Define a module that has `run` function
+ Adopt behaviour `Pleroma.Web.RichMedia.Parser.TTL`
## Example
defmodule MyModule do
- def run(data, url) do
+ @behaviour Pleroma.Web.RichMedia.Parser.TTL
+ def ttl(data, url) do
image_url = Map.get(data, :image)
# do some parsing in the url and get the ttl of the image
- # ttl is unix time
- ttl = parse_ttl_from_url(image_url)
- Cachex.expire_at(:rich_media_cache, url, ttl * 1000)
+ # and return ttl is unix time
+ parse_ttl_from_url(image_url)
end
end
@@ -55,22 +55,26 @@ defmodule Pleroma.Web.RichMedia.Parser do
ttl_setters: [MyModule]
"""
def set_ttl_based_on_image({:ok, data}, url) do
- case Cachex.ttl(:rich_media_cache, url) do
- {:ok, nil} ->
- modules = Pleroma.Config.get([:rich_media, :ttl_setters])
-
- if Enum.count(modules) > 0 do
- Enum.each(modules, & &1.run(data, url))
- end
-
- {:ok, data}
-
+ with {:ok, nil} <- Cachex.ttl(:rich_media_cache, url) do
+ ttl = get_ttl_from_image(data, url)
+ Cachex.expire_at(:rich_media_cache, url, ttl * 1000)
+ {:ok, data}
+ else
_ ->
{:ok, data}
end
end
- def set_ttl_based_on_image(data, _url), do: data
+ defp get_ttl_from_image(data, url) do
+ Pleroma.Config.get([:rich_media, :ttl_setters])
+ |> Enum.reduce({:ok, nil}, fn
+ module, {:ok, _ttl} ->
+ module.ttl(data, url)
+
+ _, error ->
+ error
+ end)
+ end
defp parse_url(url) do
try do
diff --git a/lib/pleroma/web/rich_media/parsers/ttl/aws_signed_url.ex b/lib/pleroma/web/rich_media/parsers/ttl/aws_signed_url.ex
index d57107939..014c0935f 100644
--- a/lib/pleroma/web/rich_media/parsers/ttl/aws_signed_url.ex
+++ b/lib/pleroma/web/rich_media/parsers/ttl/aws_signed_url.ex
@@ -1,5 +1,8 @@
defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl do
- def run(data, url) do
+ @behaviour Pleroma.Web.RichMedia.Parser.TTL
+
+ @impl Pleroma.Web.RichMedia.Parser.TTL
+ def ttl(data, _url) do
image = Map.get(data, :image)
if is_aws_signed_url(image) do
@@ -7,7 +10,6 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl do
|> parse_query_params()
|> format_query_params()
|> get_expiration_timestamp()
- |> set_ttl(url)
end
end
@@ -47,8 +49,4 @@ defmodule Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl do
Timex.to_unix(date) + String.to_integer(Map.get(params, "X-Amz-Expires"))
end
-
- defp set_ttl(ttl, url) do
- Cachex.expire_at(:rich_media_cache, url, ttl * 1000)
- end
end
diff --git a/lib/pleroma/web/rich_media/parsers/ttl/ttl.ex b/lib/pleroma/web/rich_media/parsers/ttl/ttl.ex
new file mode 100644
index 000000000..6b3ec6d30
--- /dev/null
+++ b/lib/pleroma/web/rich_media/parsers/ttl/ttl.ex
@@ -0,0 +1,3 @@
+defmodule Pleroma.Web.RichMedia.Parser.TTL do
+ @callback ttl(Map.t(), String.t()) :: {:ok, Integer.t()} | {:error, String.t()}
+end