diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/mix/tasks/pleroma/database.ex | 24 | ||||
| -rw-r--r-- | lib/pleroma/activity_expiration.ex | 12 | 
2 files changed, 27 insertions, 9 deletions
| diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex index 82e2abdcb..d57e59b11 100644 --- a/lib/mix/tasks/pleroma/database.ex +++ b/lib/mix/tasks/pleroma/database.ex @@ -10,6 +10,7 @@ defmodule Mix.Tasks.Pleroma.Database do    alias Pleroma.User    require Logger    require Pleroma.Constants +  import Ecto.Query    import Mix.Pleroma    use Mix.Task @@ -53,8 +54,6 @@ defmodule Mix.Tasks.Pleroma.Database do    end    def run(["prune_objects" | args]) do -    import Ecto.Query -      {options, [], []} =        OptionParser.parse(          args, @@ -94,8 +93,6 @@ defmodule Mix.Tasks.Pleroma.Database do    end    def run(["fix_likes_collections"]) do -    import Ecto.Query -      start_pleroma()      from(object in Object, @@ -130,4 +127,23 @@ defmodule Mix.Tasks.Pleroma.Database do      Maintenance.vacuum(args)    end + +  def run(["ensure_expiration"]) do +    start_pleroma() +    days = Pleroma.Config.get([:mrf_activity_expiration, :days], 365) + +    Pleroma.Activity +    |> join(:left, [a], u in assoc(a, :expiration)) +    |> where(local: true) +    |> where([a, u], is_nil(u)) +    |> Pleroma.RepoStreamer.chunk_stream(100) +    |> Stream.each(fn activities -> +      Enum.each(activities, fn activity -> +        expires_at = Timex.shift(activity.inserted_at, days: days) + +        Pleroma.ActivityExpiration.create(activity, expires_at, false) +      end) +    end) +    |> Stream.run() +  end  end diff --git a/lib/pleroma/activity_expiration.ex b/lib/pleroma/activity_expiration.ex index db9c88d84..7cc9668b3 100644 --- a/lib/pleroma/activity_expiration.ex +++ b/lib/pleroma/activity_expiration.ex @@ -20,11 +20,11 @@ defmodule Pleroma.ActivityExpiration do      field(:scheduled_at, :naive_datetime)    end -  def changeset(%ActivityExpiration{} = expiration, attrs) do +  def changeset(%ActivityExpiration{} = expiration, attrs, validate_scheduled_at) do      expiration      |> cast(attrs, [:scheduled_at])      |> validate_required([:scheduled_at]) -    |> validate_scheduled_at() +    |> validate_scheduled_at(validate_scheduled_at)    end    def get_by_activity_id(activity_id) do @@ -33,9 +33,9 @@ defmodule Pleroma.ActivityExpiration do      |> Repo.one()    end -  def create(%Activity{} = activity, scheduled_at) do +  def create(%Activity{} = activity, scheduled_at, validate_scheduled_at \\ true) do      %ActivityExpiration{activity_id: activity.id} -    |> changeset(%{scheduled_at: scheduled_at}) +    |> changeset(%{scheduled_at: scheduled_at}, validate_scheduled_at)      |> Repo.insert()    end @@ -49,7 +49,9 @@ defmodule Pleroma.ActivityExpiration do      |> Repo.all()    end -  def validate_scheduled_at(changeset) do +  def validate_scheduled_at(changeset, false), do: changeset + +  def validate_scheduled_at(changeset, true) do      validate_change(changeset, :scheduled_at, fn _, scheduled_at ->        if not expires_late_enough?(scheduled_at) do          [scheduled_at: "an ephemeral activity must live for at least one hour"] | 
