aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/object.ex
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-05-21 14:12:10 +0300
committerrinpatch <rinpatch@sdf.org>2019-05-21 14:12:10 +0300
commitaafe30d94e68ccf251c56139d07bda154dde3af9 (patch)
treeeb9044a1cb6878f15225f0a7fddb32f5cb886c27 /lib/pleroma/object.ex
parent3f96b3e4b8114ec1cf924d452907b17c2aea2003 (diff)
downloadpleroma-aafe30d94e68ccf251c56139d07bda154dde3af9.tar.gz
Handle poll votes
Diffstat (limited to 'lib/pleroma/object.ex')
-rw-r--r--lib/pleroma/object.ex30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 740d687a3..a0f7659eb 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -188,4 +188,34 @@ defmodule Pleroma.Object do
_ -> {:error, "Not found"}
end
end
+
+ def increase_vote_count(ap_id, name) do
+ with %Object{} = object <- Object.normalize(ap_id),
+ "Question" <- object.data["type"] do
+ multiple = Map.has_key?(object.data, "anyOf")
+
+ options =
+ (object.data["anyOf"] || object.data["oneOf"] || [])
+ |> Enum.map(fn
+ %{"name" => ^name} = option ->
+ Kernel.update_in(option["replies"]["totalItems"], &(&1 + 1))
+
+ option ->
+ option
+ end)
+
+ data =
+ if multiple do
+ Map.put(object.data, "anyOf", options)
+ else
+ Map.put(object.data, "oneOf", options)
+ end
+
+ object
+ |> Object.change(%{data: data})
+ |> update_and_set_cache()
+ else
+ _ -> :noop
+ end
+ end
end