diff options
Diffstat (limited to 'lib/mix/tasks')
| -rw-r--r-- | lib/mix/tasks/pleroma/config.ex | 9 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/instance.ex | 4 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/notification_settings.ex | 18 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/refresh_counter_cache.ex | 49 | ||||
| -rw-r--r-- | lib/mix/tasks/pleroma/user.ex | 4 | 
5 files changed, 56 insertions, 28 deletions
diff --git a/lib/mix/tasks/pleroma/config.ex b/lib/mix/tasks/pleroma/config.ex index f1b3a8766..904c5a74b 100644 --- a/lib/mix/tasks/pleroma/config.ex +++ b/lib/mix/tasks/pleroma/config.ex @@ -52,6 +52,7 @@ defmodule Mix.Tasks.Pleroma.Config do    defp do_migrate_to_db(config_file) do      if File.exists?(config_file) do +      shell_info("Migrating settings from file: #{Path.expand(config_file)}")        Ecto.Adapters.SQL.query!(Repo, "TRUNCATE config;")        Ecto.Adapters.SQL.query!(Repo, "ALTER SEQUENCE config_id_seq RESTART;") @@ -82,7 +83,7 @@ defmodule Mix.Tasks.Pleroma.Config do    defp migrate_from_db(opts) do      if Pleroma.Config.get([:configurable_from_database]) do -      env = opts[:env] || "prod" +      env = opts[:env] || Pleroma.Config.get(:env)        config_path =          if Pleroma.Config.get(:release) do @@ -104,6 +105,10 @@ defmodule Mix.Tasks.Pleroma.Config do        :ok = File.close(file)        System.cmd("mix", ["format", config_path]) + +      shell_info( +        "Database configuration settings have been exported to config/#{env}.exported_from_db.secret.exs" +      )      else        migration_error()      end @@ -111,7 +116,7 @@ defmodule Mix.Tasks.Pleroma.Config do    defp migration_error do      shell_error( -      "Migration is not allowed in config. You can change this behavior by setting `configurable_from_database` to true." +      "Migration is not allowed in config. You can change this behavior by setting `config :pleroma, configurable_from_database: true`"      )    end diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex index 86409738a..91440b453 100644 --- a/lib/mix/tasks/pleroma/instance.ex +++ b/lib/mix/tasks/pleroma/instance.ex @@ -145,7 +145,7 @@ defmodule Mix.Tasks.Pleroma.Instance do            options,            :uploads_dir,            "What directory should media uploads go in (when using the local uploader)?", -          Pleroma.Config.get([Pleroma.Uploaders.Local, :uploads]) +          Config.get([Pleroma.Uploaders.Local, :uploads])          )          |> Path.expand() @@ -154,7 +154,7 @@ defmodule Mix.Tasks.Pleroma.Instance do            options,            :static_dir,            "What directory should custom public files be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)?", -          Pleroma.Config.get([:instance, :static_dir]) +          Config.get([:instance, :static_dir])          )          |> Path.expand() diff --git a/lib/mix/tasks/pleroma/notification_settings.ex b/lib/mix/tasks/pleroma/notification_settings.ex index 7d65f0587..00f5ba7bf 100644 --- a/lib/mix/tasks/pleroma/notification_settings.ex +++ b/lib/mix/tasks/pleroma/notification_settings.ex @@ -3,8 +3,8 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do    @moduledoc """    Example: -  > mix pleroma.notification_settings --privacy-option=false --nickname-users="parallel588"  # set false only for parallel588 user -  > mix pleroma.notification_settings --privacy-option=true # set true for all users +  > mix pleroma.notification_settings --hide-notification-contents=false --nickname-users="parallel588"  # set false only for parallel588 user +  > mix pleroma.notification_settings --hide-notification-contents=true # set true for all users    """ @@ -19,16 +19,16 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do        OptionParser.parse(          args,          strict: [ -          privacy_option: :boolean, +          hide_notification_contents: :boolean,            email_users: :string,            nickname_users: :string          ]        ) -    privacy_option = Keyword.get(options, :privacy_option) +    hide_notification_contents = Keyword.get(options, :hide_notification_contents) -    if not is_nil(privacy_option) do -      privacy_option +    if not is_nil(hide_notification_contents) do +      hide_notification_contents        |> build_query(options)        |> Pleroma.Repo.update_all([])      end @@ -36,15 +36,15 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do      shell_info("Done")    end -  defp build_query(privacy_option, options) do +  defp build_query(hide_notification_contents, options) do      query =        from(u in Pleroma.User,          update: [            set: [              notification_settings:                fragment( -                "jsonb_set(notification_settings, '{privacy_option}', ?)", -                ^privacy_option +                "jsonb_set(notification_settings, '{hide_notification_contents}', ?)", +                ^hide_notification_contents                )            ]          ] diff --git a/lib/mix/tasks/pleroma/refresh_counter_cache.ex b/lib/mix/tasks/pleroma/refresh_counter_cache.ex index 15b4dbfa6..efcbaa3b1 100644 --- a/lib/mix/tasks/pleroma/refresh_counter_cache.ex +++ b/lib/mix/tasks/pleroma/refresh_counter_cache.ex @@ -17,30 +17,53 @@ defmodule Mix.Tasks.Pleroma.RefreshCounterCache do    def run([]) do      Mix.Pleroma.start_pleroma() -    ["public", "unlisted", "private", "direct"] -    |> Enum.each(fn visibility -> -      count = status_visibility_count_query(visibility) -      name = "status_visibility_#{visibility}" -      CounterCache.set(name, count) -      Mix.Pleroma.shell_info("Set #{name} to #{count}") +    instances = +      Activity +      |> distinct([a], true) +      |> select([a], fragment("split_part(?, '/', 3)", a.actor)) +      |> Repo.all() + +    instances +    |> Enum.with_index(1) +    |> Enum.each(fn {instance, i} -> +      counters = instance_counters(instance) +      CounterCache.set(instance, counters) + +      Mix.Pleroma.shell_info( +        "[#{i}/#{length(instances)}] Setting #{instance} counters: #{inspect(counters)}" +      )      end)      Mix.Pleroma.shell_info("Done")    end -  defp status_visibility_count_query(visibility) do +  defp instance_counters(instance) do +    counters = %{"public" => 0, "unlisted" => 0, "private" => 0, "direct" => 0} +      Activity -    |> where( +    |> where([a], fragment("(? ->> 'type'::text) = 'Create'", a.data)) +    |> where([a], fragment("split_part(?, '/', 3) = ?", a.actor, ^instance)) +    |> select( +      [a], +      {fragment( +         "activity_visibility(?, ?, ?)", +         a.actor, +         a.recipients, +         a.data +       ), count(a.id)} +    ) +    |> group_by(        [a],        fragment( -        "activity_visibility(?, ?, ?) = ?", +        "activity_visibility(?, ?, ?)",          a.actor,          a.recipients, -        a.data, -        ^visibility +        a.data        )      ) -    |> where([a], fragment("(? ->> 'type'::text) = 'Create'", a.data)) -    |> Repo.aggregate(:count, :id, timeout: :timer.minutes(30)) +    |> Repo.all(timeout: :timer.minutes(30)) +    |> Enum.reduce(counters, fn {visibility, count}, acc -> +      Map.put(acc, visibility, count) +    end)    end  end diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index bca7e87bf..01824aa18 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -232,7 +232,7 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{} = user <- User.get_cached_by_nickname(nickname) do        user = user |> User.tag(tags) -      shell_info("Tags of #{user.nickname}: #{inspect(tags)}") +      shell_info("Tags of #{user.nickname}: #{inspect(user.tags)}")      else        _ ->          shell_error("Could not change user tags for #{nickname}") @@ -245,7 +245,7 @@ defmodule Mix.Tasks.Pleroma.User do      with %User{} = user <- User.get_cached_by_nickname(nickname) do        user = user |> User.untag(tags) -      shell_info("Tags of #{user.nickname}: #{inspect(tags)}") +      shell_info("Tags of #{user.nickname}: #{inspect(user.tags)}")      else        _ ->          shell_error("Could not change user tags for #{nickname}")  | 
