mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-02-17 11:04:22 +01:00
plumb in spoiler execution to image loading endpoints
This commit is contained in:
parent
e6950c70c1
commit
1d23b9be55
22 changed files with 175 additions and 36 deletions
|
@ -116,7 +116,7 @@ defmodule Philomena.SpoilerExecutor do
|
||||||
{id, :complex}
|
{id, :complex}
|
||||||
|
|
||||||
matched_tags ->
|
matched_tags ->
|
||||||
matched_tags
|
{id, matched_tags}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ defmodule PhilomenaWeb.ActivityController do
|
||||||
}
|
}
|
||||||
|
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -102,6 +103,12 @@ defmodule PhilomenaWeb.ActivityController do
|
||||||
user
|
user
|
||||||
)
|
)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
[images, top_scoring, watched, featured_image]
|
||||||
|
)
|
||||||
|
|
||||||
render(
|
render(
|
||||||
conn,
|
conn,
|
||||||
"index.html",
|
"index.html",
|
||||||
|
@ -114,6 +121,7 @@ defmodule PhilomenaWeb.ActivityController do
|
||||||
streams: streams,
|
streams: streams,
|
||||||
topics: topics,
|
topics: topics,
|
||||||
interactions: interactions,
|
interactions: interactions,
|
||||||
|
spoilers: spoilers,
|
||||||
layout_class: "layout--wide"
|
layout_class: "layout--wide"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule PhilomenaWeb.DuplicateReportController do
|
||||||
|
|
||||||
alias Philomena.DuplicateReports
|
alias Philomena.DuplicateReports
|
||||||
alias Philomena.DuplicateReports.DuplicateReport
|
alias Philomena.DuplicateReports.DuplicateReport
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
@ -30,9 +31,16 @@ defmodule PhilomenaWeb.DuplicateReportController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(duplicate_reports, &[&1.image, &1.duplicate_of_image])
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Duplicate Reports",
|
title: "Duplicate Reports",
|
||||||
duplicate_reports: duplicate_reports,
|
duplicate_reports: duplicate_reports,
|
||||||
|
spoilers: spoilers,
|
||||||
layout_class: "layout--wide"
|
layout_class: "layout--wide"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule PhilomenaWeb.FingerprintProfile.SourceChangeController do
|
||||||
use PhilomenaWeb, :controller
|
use PhilomenaWeb, :controller
|
||||||
|
|
||||||
alias Philomena.SourceChanges.SourceChange
|
alias Philomena.SourceChanges.SourceChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -15,10 +16,17 @@ defmodule PhilomenaWeb.FingerprintProfile.SourceChangeController do
|
||||||
|> preload([:user, image: [:user, :tags]])
|
|> preload([:user, image: [:user, :tags]])
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(source_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Source Changes for Fingerprint `#{fingerprint}'",
|
title: "Source Changes for Fingerprint `#{fingerprint}'",
|
||||||
fingerprint: fingerprint,
|
fingerprint: fingerprint,
|
||||||
source_changes: source_changes
|
source_changes: source_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule PhilomenaWeb.FingerprintProfile.TagChangeController do
|
||||||
use PhilomenaWeb, :controller
|
use PhilomenaWeb, :controller
|
||||||
|
|
||||||
alias Philomena.TagChanges.TagChange
|
alias Philomena.TagChanges.TagChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -16,10 +17,17 @@ defmodule PhilomenaWeb.FingerprintProfile.TagChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(tag_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Tag Changes for Fingerprint `#{fingerprint}'",
|
title: "Tag Changes for Fingerprint `#{fingerprint}'",
|
||||||
fingerprint: fingerprint,
|
fingerprint: fingerprint,
|
||||||
tag_changes: tag_changes
|
tag_changes: tag_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
alias PhilomenaWeb.NotificationCountPlug
|
alias PhilomenaWeb.NotificationCountPlug
|
||||||
alias Philomena.Elasticsearch
|
alias Philomena.Elasticsearch
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Galleries.Gallery
|
alias Philomena.Galleries.Gallery
|
||||||
alias Philomena.Galleries
|
alias Philomena.Galleries
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
@ -33,9 +34,16 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
Gallery |> preload([:creator, thumbnail: :tags])
|
Gallery |> preload([:creator, thumbnail: :tags])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(galleries, & &1.thumbnail)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Galleries",
|
title: "Galleries",
|
||||||
galleries: galleries,
|
galleries: galleries,
|
||||||
|
spoilers: spoilers,
|
||||||
layout_class: "layout--wide"
|
layout_class: "layout--wide"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -58,8 +66,6 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
|
|
||||||
{gallery_prev, gallery_next} = prev_next_page_images(conn, query)
|
{gallery_prev, gallery_next} = prev_next_page_images(conn, query)
|
||||||
|
|
||||||
interactions = Interactions.user_interactions([images, gallery_prev, gallery_next], user)
|
|
||||||
|
|
||||||
watching = Galleries.subscribed?(gallery, user)
|
watching = Galleries.subscribed?(gallery, user)
|
||||||
|
|
||||||
prev_image = if gallery_prev, do: [gallery_prev], else: []
|
prev_image = if gallery_prev, do: [gallery_prev], else: []
|
||||||
|
@ -70,6 +76,9 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
|
|
||||||
Galleries.clear_notification(gallery, user)
|
Galleries.clear_notification(gallery, user)
|
||||||
|
|
||||||
|
interactions = Interactions.user_interactions(gallery_images, user)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, gallery_images)
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> NotificationCountPlug.call([])
|
|> NotificationCountPlug.call([])
|
||||||
|> Map.put(:params, params)
|
|> Map.put(:params, params)
|
||||||
|
@ -83,7 +92,8 @@ defmodule PhilomenaWeb.GalleryController do
|
||||||
gallery_next: gallery_next,
|
gallery_next: gallery_next,
|
||||||
gallery_images: gallery_images,
|
gallery_images: gallery_images,
|
||||||
images: images,
|
images: images,
|
||||||
interactions: interactions
|
interactions: interactions,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule PhilomenaWeb.Image.RelatedController do
|
||||||
|
|
||||||
alias PhilomenaWeb.ImageLoader
|
alias PhilomenaWeb.ImageLoader
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
|
|
||||||
plug PhilomenaWeb.CanaryMapPlug, index: :show
|
plug PhilomenaWeb.CanaryMapPlug, index: :show
|
||||||
|
@ -59,12 +60,14 @@ defmodule PhilomenaWeb.Image.RelatedController do
|
||||||
)
|
)
|
||||||
|
|
||||||
interactions = Interactions.user_interactions(images, user)
|
interactions = Interactions.user_interactions(images, user)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, images)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "##{image.id} - Related Images",
|
title: "##{image.id} - Related Images",
|
||||||
layout_class: "wide",
|
layout_class: "wide",
|
||||||
images: images,
|
images: images,
|
||||||
interactions: interactions
|
interactions: interactions,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@ defmodule PhilomenaWeb.Image.ReportingController do
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.DuplicateReports.DuplicateReport
|
alias Philomena.DuplicateReports.DuplicateReport
|
||||||
alias Philomena.DuplicateReports
|
alias Philomena.DuplicateReports
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -26,11 +27,18 @@ defmodule PhilomenaWeb.Image.ReportingController do
|
||||||
%DuplicateReport{}
|
%DuplicateReport{}
|
||||||
|> DuplicateReports.change_duplicate_report()
|
|> DuplicateReports.change_duplicate_report()
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(dupe_reports, &[&1.image, &1.duplicate_of_image])
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "show.html",
|
render(conn, "show.html",
|
||||||
layout: false,
|
layout: false,
|
||||||
image: image,
|
image: image,
|
||||||
dupe_reports: dupe_reports,
|
dupe_reports: dupe_reports,
|
||||||
changeset: changeset
|
changeset: changeset,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule PhilomenaWeb.Image.SourceChangeController do
|
||||||
|
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.SourceChanges.SourceChange
|
alias Philomena.SourceChanges.SourceChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -19,10 +20,17 @@ defmodule PhilomenaWeb.Image.SourceChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(source_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Source Changes on Image #{image.id}",
|
title: "Source Changes on Image #{image.id}",
|
||||||
image: image,
|
image: image,
|
||||||
source_changes: source_changes
|
source_changes: source_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule PhilomenaWeb.Image.TagChangeController do
|
||||||
|
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.TagChanges.TagChange
|
alias Philomena.TagChanges.TagChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -20,10 +21,17 @@ defmodule PhilomenaWeb.Image.TagChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(tag_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Tag Changes on Image #{image.id}",
|
title: "Tag Changes on Image #{image.id}",
|
||||||
image: image,
|
image: image,
|
||||||
tag_changes: tag_changes
|
tag_changes: tag_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ defmodule PhilomenaWeb.ImageController do
|
||||||
Galleries.Gallery
|
Galleries.Gallery
|
||||||
}
|
}
|
||||||
|
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
alias Philomena.Comments
|
alias Philomena.Comments
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
|
@ -37,12 +38,14 @@ defmodule PhilomenaWeb.ImageController do
|
||||||
{:ok, {images, _tags}} = ImageLoader.search_string(conn, "created_at.lte:3 minutes ago")
|
{:ok, {images, _tags}} = ImageLoader.search_string(conn, "created_at.lte:3 minutes ago")
|
||||||
|
|
||||||
interactions = Interactions.user_interactions(images, conn.assigns.current_user)
|
interactions = Interactions.user_interactions(images, conn.assigns.current_user)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, images)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Images",
|
title: "Images",
|
||||||
layout_class: "layout--wide",
|
layout_class: "layout--wide",
|
||||||
images: images,
|
images: images,
|
||||||
interactions: interactions
|
interactions: interactions,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -66,6 +69,7 @@ defmodule PhilomenaWeb.ImageController do
|
||||||
|> TextileRenderer.render_one(conn)
|
|> TextileRenderer.render_one(conn)
|
||||||
|
|
||||||
interactions = Interactions.user_interactions([image], conn.assigns.current_user)
|
interactions = Interactions.user_interactions([image], conn.assigns.current_user)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, [image])
|
||||||
|
|
||||||
comment_changeset =
|
comment_changeset =
|
||||||
%Comment{}
|
%Comment{}
|
||||||
|
@ -89,6 +93,7 @@ defmodule PhilomenaWeb.ImageController do
|
||||||
interactions: interactions,
|
interactions: interactions,
|
||||||
watching: watching,
|
watching: watching,
|
||||||
layout_class: "layout--wide",
|
layout_class: "layout--wide",
|
||||||
|
spoilers: spoilers,
|
||||||
title: "##{image.id} - #{image.tag_list_cache}"
|
title: "##{image.id} - #{image.tag_list_cache}"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule PhilomenaWeb.IpProfile.SourceChangeController do
|
||||||
use PhilomenaWeb, :controller
|
use PhilomenaWeb, :controller
|
||||||
|
|
||||||
alias Philomena.SourceChanges.SourceChange
|
alias Philomena.SourceChanges.SourceChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -17,10 +18,17 @@ defmodule PhilomenaWeb.IpProfile.SourceChangeController do
|
||||||
|> preload([:user, image: [:user, :tags]])
|
|> preload([:user, image: [:user, :tags]])
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(source_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Source Changes for IP `#{ip}'",
|
title: "Source Changes for IP `#{ip}'",
|
||||||
ip: ip,
|
ip: ip,
|
||||||
source_changes: source_changes
|
source_changes: source_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule PhilomenaWeb.IpProfile.TagChangeController do
|
||||||
use PhilomenaWeb, :controller
|
use PhilomenaWeb, :controller
|
||||||
|
|
||||||
alias Philomena.TagChanges.TagChange
|
alias Philomena.TagChanges.TagChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -18,10 +19,17 @@ defmodule PhilomenaWeb.IpProfile.TagChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(tag_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Tag Changes for IP `#{ip}'",
|
title: "Tag Changes for IP `#{ip}'",
|
||||||
ip: ip,
|
ip: ip,
|
||||||
tag_changes: tag_changes
|
tag_changes: tag_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ defmodule PhilomenaWeb.Profile.SourceChangeController do
|
||||||
alias Philomena.Users.User
|
alias Philomena.Users.User
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.SourceChanges.SourceChange
|
alias Philomena.SourceChanges.SourceChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -29,10 +30,17 @@ defmodule PhilomenaWeb.Profile.SourceChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(source_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Source Changes for User `#{user.name}'",
|
title: "Source Changes for User `#{user.name}'",
|
||||||
user: user,
|
user: user,
|
||||||
source_changes: source_changes
|
source_changes: source_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@ defmodule PhilomenaWeb.Profile.TagChangeController do
|
||||||
alias Philomena.Users.User
|
alias Philomena.Users.User
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.TagChanges.TagChange
|
alias Philomena.TagChanges.TagChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -25,10 +26,17 @@ defmodule PhilomenaWeb.Profile.TagChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(tag_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Tag Changes for User `#{user.name}'",
|
title: "Tag Changes for User `#{user.name}'",
|
||||||
user: user,
|
user: user,
|
||||||
tag_changes: tag_changes
|
tag_changes: tag_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ defmodule PhilomenaWeb.ProfileController do
|
||||||
alias Philomena.Galleries.Gallery
|
alias Philomena.Galleries.Gallery
|
||||||
alias Philomena.Posts.Post
|
alias Philomena.Posts.Post
|
||||||
alias Philomena.Comments.Comment
|
alias Philomena.Comments.Comment
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
alias Philomena.Tags.Tag
|
alias Philomena.Tags.Tag
|
||||||
alias Philomena.UserIps.UserIp
|
alias Philomena.UserIps.UserIp
|
||||||
|
@ -137,8 +138,11 @@ defmodule PhilomenaWeb.ProfileController do
|
||||||
|
|
||||||
statistics = calculate_statistics(user)
|
statistics = calculate_statistics(user)
|
||||||
|
|
||||||
interactions =
|
images = [recent_uploads, recent_faves, recent_artwork]
|
||||||
Interactions.user_interactions([recent_uploads, recent_faves, recent_artwork], current_user)
|
|
||||||
|
interactions = Interactions.user_interactions(images, current_user)
|
||||||
|
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, images)
|
||||||
|
|
||||||
forced = user.forced_filter
|
forced = user.forced_filter
|
||||||
|
|
||||||
|
@ -153,6 +157,7 @@ defmodule PhilomenaWeb.ProfileController do
|
||||||
"show.html",
|
"show.html",
|
||||||
user: user,
|
user: user,
|
||||||
interactions: interactions,
|
interactions: interactions,
|
||||||
|
spoilers: spoilers,
|
||||||
commission_information: commission_information,
|
commission_information: commission_information,
|
||||||
recent_artwork: recent_artwork,
|
recent_artwork: recent_artwork,
|
||||||
recent_uploads: recent_uploads,
|
recent_uploads: recent_uploads,
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule PhilomenaWeb.Search.ReverseController do
|
||||||
use PhilomenaWeb, :controller
|
use PhilomenaWeb, :controller
|
||||||
|
|
||||||
alias PhilomenaWeb.ImageReverse
|
alias PhilomenaWeb.ImageReverse
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
|
|
||||||
plug PhilomenaWeb.ScraperCachePlug
|
plug PhilomenaWeb.ScraperCachePlug
|
||||||
plug PhilomenaWeb.ScraperPlug, params_key: "image", params_name: "image"
|
plug PhilomenaWeb.ScraperPlug, params_key: "image", params_name: "image"
|
||||||
|
@ -12,8 +13,9 @@ defmodule PhilomenaWeb.Search.ReverseController do
|
||||||
|
|
||||||
def create(conn, %{"image" => image_params}) when is_map(image_params) do
|
def create(conn, %{"image" => image_params}) when is_map(image_params) do
|
||||||
images = ImageReverse.images(image_params)
|
images = ImageReverse.images(image_params)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, images)
|
||||||
|
|
||||||
render(conn, "index.html", title: "Reverse Search", images: images)
|
render(conn, "index.html", title: "Reverse Search", images: images, spoilers: spoilers)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create(conn, _params) do
|
def create(conn, _params) do
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule PhilomenaWeb.SearchController do
|
||||||
|
|
||||||
alias PhilomenaWeb.ImageLoader
|
alias PhilomenaWeb.ImageLoader
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
|
|
||||||
def index(conn, params) do
|
def index(conn, params) do
|
||||||
user = conn.assigns.current_user
|
user = conn.assigns.current_user
|
||||||
|
@ -10,6 +11,7 @@ defmodule PhilomenaWeb.SearchController do
|
||||||
case ImageLoader.search_string(conn, params["q"], include_hits: custom_ordering?(conn)) do
|
case ImageLoader.search_string(conn, params["q"], include_hits: custom_ordering?(conn)) do
|
||||||
{:ok, {images, tags}} ->
|
{:ok, {images, tags}} ->
|
||||||
interactions = Interactions.user_interactions(images, user)
|
interactions = Interactions.user_interactions(images, user)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, images)
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> render("index.html",
|
|> render("index.html",
|
||||||
|
@ -18,6 +20,7 @@ defmodule PhilomenaWeb.SearchController do
|
||||||
tags: tags,
|
tags: tags,
|
||||||
search_query: params["q"],
|
search_query: params["q"],
|
||||||
interactions: interactions,
|
interactions: interactions,
|
||||||
|
spoilers: spoilers,
|
||||||
layout_class: "layout--wide"
|
layout_class: "layout--wide"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ defmodule PhilomenaWeb.Tag.TagChangeController do
|
||||||
|
|
||||||
alias Philomena.Tags.Tag
|
alias Philomena.Tags.Tag
|
||||||
alias Philomena.TagChanges.TagChange
|
alias Philomena.TagChanges.TagChange
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Ecto.Query
|
import Ecto.Query
|
||||||
|
|
||||||
|
@ -20,10 +21,17 @@ defmodule PhilomenaWeb.Tag.TagChangeController do
|
||||||
|> order_by(desc: :created_at)
|
|> order_by(desc: :created_at)
|
||||||
|> Repo.paginate(conn.assigns.scrivener)
|
|> Repo.paginate(conn.assigns.scrivener)
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
Enum.map(tag_changes, & &1.image)
|
||||||
|
)
|
||||||
|
|
||||||
render(conn, "index.html",
|
render(conn, "index.html",
|
||||||
title: "Tag Changes for Tag `#{tag.name}'",
|
title: "Tag Changes for Tag `#{tag.name}'",
|
||||||
tag: tag,
|
tag: tag,
|
||||||
tag_changes: tag_changes
|
tag_changes: tag_changes,
|
||||||
|
spoilers: spoilers
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ defmodule PhilomenaWeb.TagController do
|
||||||
alias Philomena.Elasticsearch
|
alias Philomena.Elasticsearch
|
||||||
alias Philomena.{Tags, Tags.Tag}
|
alias Philomena.{Tags, Tags.Tag}
|
||||||
alias PhilomenaWeb.TextileRenderer
|
alias PhilomenaWeb.TextileRenderer
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Interactions
|
alias Philomena.Interactions
|
||||||
|
|
||||||
plug PhilomenaWeb.RecodeParameterPlug, [name: "id"] when action in [:show]
|
plug PhilomenaWeb.RecodeParameterPlug, [name: "id"] when action in [:show]
|
||||||
|
@ -57,6 +58,7 @@ defmodule PhilomenaWeb.TagController do
|
||||||
{images, _tags} = ImageLoader.query(conn, %{term: %{"namespaced_tags.name" => tag.name}})
|
{images, _tags} = ImageLoader.query(conn, %{term: %{"namespaced_tags.name" => tag.name}})
|
||||||
|
|
||||||
interactions = Interactions.user_interactions(images, user)
|
interactions = Interactions.user_interactions(images, user)
|
||||||
|
spoilers = SpoilerExecutor.execute_spoiler(conn.assigns.compiled_spoiler, images)
|
||||||
|
|
||||||
body = TextileRenderer.render_one(%{body: tag.description || ""}, conn)
|
body = TextileRenderer.render_one(%{body: tag.description || ""}, conn)
|
||||||
|
|
||||||
|
@ -78,6 +80,7 @@ defmodule PhilomenaWeb.TagController do
|
||||||
tags: [{tag, body, dnp_entries}],
|
tags: [{tag, body, dnp_entries}],
|
||||||
search_query: search_query,
|
search_query: search_query,
|
||||||
interactions: interactions,
|
interactions: interactions,
|
||||||
|
spoilers: spoilers,
|
||||||
images: images,
|
images: images,
|
||||||
layout_class: "layout--wide",
|
layout_class: "layout--wide",
|
||||||
title: "#{tag.name} - Tags"
|
title: "#{tag.name} - Tags"
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule PhilomenaWeb.ImageFilterPlug do
|
||||||
import Plug.Conn
|
import Plug.Conn
|
||||||
import Philomena.Search.String
|
import Philomena.Search.String
|
||||||
|
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Images.Query
|
alias Philomena.Images.Query
|
||||||
|
|
||||||
# No options
|
# No options
|
||||||
|
@ -14,7 +15,7 @@ defmodule PhilomenaWeb.ImageFilterPlug do
|
||||||
forced = defaults(conn.assigns[:forced_filter])
|
forced = defaults(conn.assigns[:forced_filter])
|
||||||
|
|
||||||
tag_exclusion = %{terms: %{tag_ids: filter.hidden_tag_ids ++ forced.hidden_tag_ids}}
|
tag_exclusion = %{terms: %{tag_ids: filter.hidden_tag_ids ++ forced.hidden_tag_ids}}
|
||||||
query_spoiler = invalid_filter_guard(user, filter.spoilered_complex_str)
|
query_spoiler = SpoilerExecutor.compile_spoiler(user, filter)
|
||||||
|
|
||||||
query_exclusion = %{
|
query_exclusion = %{
|
||||||
bool: %{
|
bool: %{
|
||||||
|
@ -32,8 +33,7 @@ defmodule PhilomenaWeb.ImageFilterPlug do
|
||||||
}
|
}
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> assign(:compiled_complex_filter, query_exclusion)
|
|> assign(:compiled_spoiler, query_spoiler)
|
||||||
|> assign(:compiled_complex_spoiler, query_spoiler)
|
|
||||||
|> assign(:compiled_filter, query)
|
|> assign(:compiled_filter, query)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
defmodule PhilomenaWeb.TextileRenderer do
|
defmodule PhilomenaWeb.TextileRenderer do
|
||||||
alias Philomena.Textile.Parser
|
alias Philomena.Textile.Parser
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
|
alias Philomena.SpoilerExecutor
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
import Phoenix.HTML
|
import Phoenix.HTML
|
||||||
import Phoenix.HTML.Link
|
import Phoenix.HTML.Link
|
||||||
|
@ -17,7 +18,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
opts = %{image_transform: &Camo.Image.image_url/1}
|
opts = %{image_transform: &Camo.Image.image_url/1}
|
||||||
parsed = Enum.map(posts, &Parser.parse(opts, &1.body))
|
parsed = Enum.map(posts, &Parser.parse(opts, &1.body))
|
||||||
|
|
||||||
images =
|
{images, spoilers} =
|
||||||
parsed
|
parsed
|
||||||
|> Enum.flat_map(fn tree ->
|
|> Enum.flat_map(fn tree ->
|
||||||
tree
|
tree
|
||||||
|
@ -29,7 +30,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
[]
|
[]
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|> find_images
|
|> find_images(conn)
|
||||||
|
|
||||||
parsed
|
parsed
|
||||||
|> Enum.map(fn tree ->
|
|> Enum.map(fn tree ->
|
||||||
|
@ -38,7 +39,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
{:text, text} ->
|
{:text, text} ->
|
||||||
text
|
text
|
||||||
|> replacement_entities()
|
|> replacement_entities()
|
||||||
|> replacement_images(conn, images)
|
|> replacement_images(conn, spoilers, images)
|
||||||
|
|
||||||
{_k, markup} ->
|
{_k, markup} ->
|
||||||
markup
|
markup
|
||||||
|
@ -59,7 +60,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
|> String.replace("'", "’")
|
|> String.replace("'", "’")
|
||||||
end
|
end
|
||||||
|
|
||||||
defp replacement_images(t, conn, images) do
|
defp replacement_images(t, conn, spoilers, images) do
|
||||||
t
|
t
|
||||||
|> String.replace(~r|>>(\d+)([pts])?|, fn match ->
|
|> String.replace(~r|>>(\d+)([pts])?|, fn match ->
|
||||||
# Stupid, but the method doesn't give us capture group information
|
# Stupid, but the method doesn't give us capture group information
|
||||||
|
@ -78,6 +79,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
Phoenix.View.render(@image_view, "_image_target.html",
|
Phoenix.View.render(@image_view, "_image_target.html",
|
||||||
image: image,
|
image: image,
|
||||||
size: :medium,
|
size: :medium,
|
||||||
|
spoilers: spoilers,
|
||||||
conn: conn
|
conn: conn
|
||||||
)
|
)
|
||||||
|> safe_to_string()
|
|> safe_to_string()
|
||||||
|
@ -86,6 +88,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
Phoenix.View.render(@image_view, "_image_target.html",
|
Phoenix.View.render(@image_view, "_image_target.html",
|
||||||
image: image,
|
image: image,
|
||||||
size: :small,
|
size: :small,
|
||||||
|
spoilers: spoilers,
|
||||||
conn: conn
|
conn: conn
|
||||||
)
|
)
|
||||||
|> safe_to_string()
|
|> safe_to_string()
|
||||||
|
@ -94,6 +97,7 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
Phoenix.View.render(@image_view, "_image_target.html",
|
Phoenix.View.render(@image_view, "_image_target.html",
|
||||||
image: image,
|
image: image,
|
||||||
size: :thumb_small,
|
size: :thumb_small,
|
||||||
|
spoilers: spoilers,
|
||||||
conn: conn
|
conn: conn
|
||||||
)
|
)
|
||||||
|> safe_to_string()
|
|> safe_to_string()
|
||||||
|
@ -105,24 +109,32 @@ defmodule PhilomenaWeb.TextileRenderer do
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp find_images(text_segments) do
|
defp find_images(text_segments, conn) do
|
||||||
text_segments
|
text_segments
|
||||||
|> Enum.flat_map(fn t ->
|
|> Enum.flat_map(fn t ->
|
||||||
Regex.scan(~r|>>(\d+)|, t, capture: :all_but_first)
|
Regex.scan(~r|>>(\d+)|, t, capture: :all_but_first)
|
||||||
|> Enum.map(fn [first] -> String.to_integer(first) end)
|
|> Enum.map(fn [first] -> String.to_integer(first) end)
|
||||||
|> Enum.filter(&(&1 < 2_147_483_647))
|
|> Enum.filter(&(&1 < 2_147_483_647))
|
||||||
end)
|
end)
|
||||||
|> load_images()
|
|> load_images(conn)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp load_images([]), do: %{}
|
defp load_images([], _conn), do: {%{}, %{}}
|
||||||
|
|
||||||
defp load_images(ids) do
|
defp load_images(ids, conn) do
|
||||||
Image
|
images =
|
||||||
|> where([i], i.id in ^ids)
|
Image
|
||||||
|> where([i], i.hidden_from_users == false)
|
|> where([i], i.id in ^ids)
|
||||||
|> preload(:tags)
|
|> where([i], i.hidden_from_users == false)
|
||||||
|> Repo.all()
|
|> preload(:tags)
|
||||||
|> Map.new(&{&1.id, &1})
|
|> Repo.all()
|
||||||
|
|
||||||
|
spoilers =
|
||||||
|
SpoilerExecutor.execute_spoiler(
|
||||||
|
conn.assigns.compiled_spoiler,
|
||||||
|
images
|
||||||
|
)
|
||||||
|
|
||||||
|
{Map.new(images, &{&1.id, &1}), spoilers}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue