mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-30 14:57:59 +01:00
add firehose API
This commit is contained in:
parent
2a7dc2fe88
commit
8ef94e912b
9 changed files with 53 additions and 6 deletions
|
@ -63,7 +63,8 @@ config :canary,
|
||||||
config :philomena, PhilomenaWeb.Endpoint,
|
config :philomena, PhilomenaWeb.Endpoint,
|
||||||
url: [host: "localhost"],
|
url: [host: "localhost"],
|
||||||
secret_key_base: "xZYTon09JNRrj8snd7KL31wya4x71jmo5aaSSRmw1dGjWLRmEwWMTccwxgsGFGjM",
|
secret_key_base: "xZYTon09JNRrj8snd7KL31wya4x71jmo5aaSSRmw1dGjWLRmEwWMTccwxgsGFGjM",
|
||||||
render_errors: [view: PhilomenaWeb.ErrorView, accepts: ~w(html json)]
|
render_errors: [view: PhilomenaWeb.ErrorView, accepts: ~w(html json)],
|
||||||
|
pubsub_server: Philomena.PubSub
|
||||||
|
|
||||||
config :phoenix, :template_engines,
|
config :phoenix, :template_engines,
|
||||||
slim: PhoenixSlime.Engine,
|
slim: PhoenixSlime.Engine,
|
||||||
|
|
|
@ -70,6 +70,7 @@ server {
|
||||||
proxy_temp_file_write_size 64k;
|
proxy_temp_file_write_size 64k;
|
||||||
|
|
||||||
# Configuration for Phoenix WS
|
# Configuration for Phoenix WS
|
||||||
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
proxy_set_header Connection "upgrade";
|
proxy_set_header Connection "upgrade";
|
||||||
}
|
}
|
||||||
|
|
16
lib/philomena_web/channels/firehose_channel.ex
Normal file
16
lib/philomena_web/channels/firehose_channel.ex
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
defmodule PhilomenaWeb.FirehoseChannel do
|
||||||
|
use Phoenix.Channel
|
||||||
|
|
||||||
|
def join("firehose", _params, socket) do
|
||||||
|
{:ok, socket}
|
||||||
|
end
|
||||||
|
|
||||||
|
def join(_room, _params, _socket) do
|
||||||
|
{:error, %{reason: "not_found"}}
|
||||||
|
end
|
||||||
|
|
||||||
|
# Don't allow the connected client to send any messages to the socket
|
||||||
|
def handle_in(message, _params, socket) do
|
||||||
|
{:stop, :shutdown, socket}
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,8 +1,8 @@
|
||||||
defmodule PhilomenaWeb.UserSocket do
|
defmodule PhilomenaWeb.UserSocket do
|
||||||
use Phoenix.Socket
|
use Phoenix.Socket
|
||||||
|
|
||||||
## Channels
|
# Channels
|
||||||
# channel "room:*", PhilomenaWeb.RoomChannel
|
channel "firehose", PhilomenaWeb.FirehoseChannel
|
||||||
|
|
||||||
# Socket params are passed from the client and can
|
# Socket params are passed from the client and can
|
||||||
# be used to verify and authenticate a user. After
|
# be used to verify and authenticate a user. After
|
||||||
|
|
|
@ -63,6 +63,12 @@ defmodule PhilomenaWeb.Image.CommentController do
|
||||||
|
|
||||||
case Comments.create_comment(image, attributes, comment_params) do
|
case Comments.create_comment(image, attributes, comment_params) do
|
||||||
{:ok, %{comment: comment}} ->
|
{:ok, %{comment: comment}} ->
|
||||||
|
PhilomenaWeb.Endpoint.broadcast!(
|
||||||
|
"firehose",
|
||||||
|
"comment:create",
|
||||||
|
PhilomenaWeb.Api.Json.CommentView.render("show.json", %{comment: comment})
|
||||||
|
)
|
||||||
|
|
||||||
Comments.notify_comment(comment)
|
Comments.notify_comment(comment)
|
||||||
Comments.reindex_comment(comment)
|
Comments.reindex_comment(comment)
|
||||||
Images.reindex_image(conn.assigns.image)
|
Images.reindex_image(conn.assigns.image)
|
||||||
|
|
|
@ -12,7 +12,7 @@ defmodule PhilomenaWeb.Image.SourceController do
|
||||||
plug PhilomenaWeb.CaptchaPlug
|
plug PhilomenaWeb.CaptchaPlug
|
||||||
plug PhilomenaWeb.UserAttributionPlug
|
plug PhilomenaWeb.UserAttributionPlug
|
||||||
plug PhilomenaWeb.CanaryMapPlug, update: :edit_metadata
|
plug PhilomenaWeb.CanaryMapPlug, update: :edit_metadata
|
||||||
plug :load_and_authorize_resource, model: Image, id_name: "image_id"
|
plug :load_and_authorize_resource, model: Image, id_name: "image_id", preload: [:tags, :user]
|
||||||
|
|
||||||
def update(conn, %{"image" => image_params}) do
|
def update(conn, %{"image" => image_params}) do
|
||||||
attributes = conn.assigns.attributes
|
attributes = conn.assigns.attributes
|
||||||
|
@ -21,6 +21,12 @@ defmodule PhilomenaWeb.Image.SourceController do
|
||||||
|
|
||||||
case Images.update_source(image, attributes, image_params) do
|
case Images.update_source(image, attributes, image_params) do
|
||||||
{:ok, %{image: image}} ->
|
{:ok, %{image: image}} ->
|
||||||
|
PhilomenaWeb.Endpoint.broadcast!(
|
||||||
|
"firehose",
|
||||||
|
"image:update",
|
||||||
|
PhilomenaWeb.Api.Json.ImageView.render("show.json", %{image: image, interactions: []})
|
||||||
|
)
|
||||||
|
|
||||||
changeset = Images.change_image(image)
|
changeset = Images.change_image(image)
|
||||||
|
|
||||||
source_change_count =
|
source_change_count =
|
||||||
|
|
|
@ -14,7 +14,7 @@ defmodule PhilomenaWeb.Image.TagController do
|
||||||
plug PhilomenaWeb.CaptchaPlug
|
plug PhilomenaWeb.CaptchaPlug
|
||||||
plug PhilomenaWeb.UserAttributionPlug
|
plug PhilomenaWeb.UserAttributionPlug
|
||||||
plug PhilomenaWeb.CanaryMapPlug, update: :edit_metadata
|
plug PhilomenaWeb.CanaryMapPlug, update: :edit_metadata
|
||||||
plug :load_and_authorize_resource, model: Image, id_name: "image_id"
|
plug :load_and_authorize_resource, model: Image, id_name: "image_id", preload: [:tags, :user]
|
||||||
|
|
||||||
def update(conn, %{"image" => image_params}) do
|
def update(conn, %{"image" => image_params}) do
|
||||||
attributes = conn.assigns.attributes
|
attributes = conn.assigns.attributes
|
||||||
|
@ -22,6 +22,12 @@ defmodule PhilomenaWeb.Image.TagController do
|
||||||
|
|
||||||
case Images.update_tags(image, attributes, image_params) do
|
case Images.update_tags(image, attributes, image_params) do
|
||||||
{:ok, %{image: {image, added_tags, removed_tags}}} ->
|
{:ok, %{image: {image, added_tags, removed_tags}}} ->
|
||||||
|
PhilomenaWeb.Endpoint.broadcast!(
|
||||||
|
"firehose",
|
||||||
|
"image:update",
|
||||||
|
PhilomenaWeb.Api.Json.ImageView.render("show.json", %{image: image, interactions: []})
|
||||||
|
)
|
||||||
|
|
||||||
Comments.reindex_comments(image)
|
Comments.reindex_comments(image)
|
||||||
Images.reindex_image(image)
|
Images.reindex_image(image)
|
||||||
Tags.reindex_tags(added_tags ++ removed_tags)
|
Tags.reindex_tags(added_tags ++ removed_tags)
|
||||||
|
|
|
@ -108,6 +108,12 @@ defmodule PhilomenaWeb.ImageController do
|
||||||
|
|
||||||
case Images.create_image(attributes, image_params) do
|
case Images.create_image(attributes, image_params) do
|
||||||
{:ok, %{image: image}} ->
|
{:ok, %{image: image}} ->
|
||||||
|
PhilomenaWeb.Endpoint.broadcast!(
|
||||||
|
"firehose",
|
||||||
|
"image:create",
|
||||||
|
PhilomenaWeb.Api.Json.ImageView.render("show.json", %{image: image, interactions: []})
|
||||||
|
)
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_flash(:info, "Image created successfully.")
|
|> put_flash(:info, "Image created successfully.")
|
||||||
|> redirect(to: Routes.image_path(conn, :show, image))
|
|> redirect(to: Routes.image_path(conn, :show, image))
|
||||||
|
|
|
@ -45,6 +45,12 @@ defmodule PhilomenaWeb.Api.Json.ImageView do
|
||||||
end
|
end
|
||||||
|
|
||||||
def render("image.json", %{conn: conn, image: %{hidden_from_users: false} = image}) do
|
def render("image.json", %{conn: conn, image: %{hidden_from_users: false} = image}) do
|
||||||
|
result = render_one(image, PhilomenaWeb.Api.Json.ImageView, "image.json", %{image: image})
|
||||||
|
|
||||||
|
Map.put(result, :spoilered, ImageView.filter_or_spoiler_hits?(conn, image))
|
||||||
|
end
|
||||||
|
|
||||||
|
def render("image.json", %{image: %{hidden_from_users: false} = image}) do
|
||||||
%{
|
%{
|
||||||
id: image.id,
|
id: image.id,
|
||||||
created_at: image.created_at,
|
created_at: image.created_at,
|
||||||
|
@ -74,7 +80,6 @@ defmodule PhilomenaWeb.Api.Json.ImageView do
|
||||||
source_url: image.source_url,
|
source_url: image.source_url,
|
||||||
view_url: ImageView.pretty_url(image, false, false),
|
view_url: ImageView.pretty_url(image, false, false),
|
||||||
representations: ImageView.thumb_urls(image, false),
|
representations: ImageView.thumb_urls(image, false),
|
||||||
spoilered: ImageView.filter_or_spoiler_hits?(conn, image),
|
|
||||||
thumbnails_generated: image.thumbnails_generated,
|
thumbnails_generated: image.thumbnails_generated,
|
||||||
processed: image.processed,
|
processed: image.processed,
|
||||||
deletion_reason: nil,
|
deletion_reason: nil,
|
||||||
|
|
Loading…
Reference in a new issue