update copyright years to 2019
[akkoma] / lib / pleroma / uploaders / uploader.ex
index 8ef82b4ef4dcae2735ec64eccb566aae389669f4..0959d7a3ec28f44e668104c41a3322155d36fc95 100644 (file)
@@ -1,3 +1,7 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Pleroma.Uploaders.Uploader do
   @moduledoc """
   Defines the contract to put and get an uploaded file to any backend.
@@ -16,20 +20,25 @@ defmodule Pleroma.Uploaders.Uploader do
 
   Returns:
 
+  * `:ok` which assumes `{:ok, upload.path}`
   * `{:ok, spec}` where spec is:
     * `{:file, filename :: String.t}` to handle reads with `get_file/1` (recommended)
 
-      This allows to correctly proxy or redirect requests to the backend, while allowing to migrate backends without breaking any URL.
-
-    * `{url, url :: String.t}` to bypass `get_file/2` and use the `url` directly in the activity.
+    This allows to correctly proxy or redirect requests to the backend, while allowing to migrate backends without breaking any URL.
+  * `{url, url :: String.t}` to bypass `get_file/2` and use the `url` directly in the activity.
   * `{:error, String.t}` error information if the file failed to be saved to the backend.
 
+
   """
-  @callback put_file(
-              name :: String.t(),
-              uuid :: String.t(),
-              file :: File.t(),
-              content_type :: String.t(),
-              options :: Map.t()
-            ) :: {:ok, {:file, String.t()} | {:url, String.t()}} | {:error, String.t()}
+  @callback put_file(Pleroma.Upload.t()) ::
+              :ok | {:ok, {:file | :url, String.t()}} | {:error, String.t()}
+
+  @spec put_file(module(), Pleroma.Upload.t()) ::
+          {:ok, {:file | :url, String.t()}} | {:error, String.t()}
+  def put_file(uploader, upload) do
+    case uploader.put_file(upload) do
+      :ok -> {:ok, {:file, upload.path}}
+      other -> other
+    end
+  end
 end