Merge branch 'feature/integration_tesla' into 'develop'
[akkoma] / lib / pleroma / uploaders / local.ex
index 39dca49c9ade14819942dbed86aea8de5f41b02b..434a6b51585689c83c317ed087fe089b7f146654 100644 (file)
@@ -3,45 +3,32 @@ defmodule Pleroma.Uploaders.Local do
 
   alias Pleroma.Web
 
-  def put_file(name, uuid, tmpfile, _content_type, should_dedupe) do
-    upload_folder = get_upload_path(uuid, should_dedupe)
-    url_path = get_url(name, uuid, should_dedupe)
-
-    File.mkdir_p!(upload_folder)
+  def get_file(_) do
+    {:ok, {:static_dir, upload_path()}}
+  end
 
-    result_file = Path.join(upload_folder, name)
+  def put_file(upload) do
+    {local_path, file} =
+      case Enum.reverse(String.split(upload.path, "/", trim: true)) do
+        [file] ->
+          {upload_path(), file}
 
-    if File.exists?(result_file) do
-      File.rm!(tmpfile)
-    else
-      File.cp!(tmpfile, result_file)
-    end
-
-    url_path
-  end
+        [file | folders] ->
+          path = Path.join([upload_path()] ++ Enum.reverse(folders))
+          File.mkdir_p!(path)
+          {path, file}
+      end
 
-  def upload_path do
-    settings = Application.get_env(:pleroma, Pleroma.Uploaders.Local)
-    Keyword.fetch!(settings, :uploads)
-  end
+    result_file = Path.join(local_path, file)
 
-  defp get_upload_path(uuid, should_dedupe) do
-    if should_dedupe do
-      upload_path()
-    else
-      Path.join(upload_path(), uuid)
+    unless File.exists?(result_file) do
+      File.cp!(upload.tempfile, result_file)
     end
-  end
 
-  defp get_url(name, uuid, should_dedupe) do
-    if should_dedupe do
-      url_for(:cow_uri.urlencode(name))
-    else
-      url_for(Path.join(uuid, :cow_uri.urlencode(name)))
-    end
+    :ok
   end
 
-  defp url_for(file) do
-    "#{Web.base_url()}/media/#{file}"
+  def upload_path do
+    Pleroma.Config.get!([__MODULE__, :uploads])
   end
 end