forked from Glimesh/glimesh.tv
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchannel_settings_live.ex
More file actions
119 lines (107 loc) · 3.75 KB
/
channel_settings_live.ex
File metadata and controls
119 lines (107 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
defmodule GlimeshWeb.UserSettings.Components.ChannelSettingsLive do
use GlimeshWeb, :live_view
alias Glimesh.ChannelCategories
alias Glimesh.Interactive
alias Glimesh.Streams
@impl true
def mount(_params, %{"channel" => channel} = session, socket) do
if session["locale"], do: Gettext.put_locale(session["locale"])
{:ok,
socket
|> put_flash(:info, nil)
|> put_flash(:error, nil)
|> assign(:stream_key, Streams.get_stream_key(channel))
|> assign(:channel_hours, Streams.get_channel_hours(channel))
|> assign(:channel_changeset, session["channel_changeset"])
|> assign(:categories, session["categories"])
|> assign(:channel, channel)
|> assign(:category, channel.category)
|> assign(
:subcategory_label,
ChannelCategories.get_subcategory_label(channel.category)
)
|> assign(
:subcategory_placeholder,
ChannelCategories.get_subcategory_select_label_description(channel.category)
)
|> assign(
:subcategory_attribution,
Glimesh.ChannelCategories.get_subcategory_attribution(channel.category)
)
|> assign(
:existing_subcategory,
if(channel.subcategory, do: channel.subcategory.name, else: "")
)
|> assign(:existing_tags, Enum.map_join(channel.tags, ", ", fn tag -> tag.name end))
|> assign(:route, session["route"])
|> assign(:user, session["user"])
|> assign(:delete_route, session["delete_route"])
|> assign(:channel_delete_disabled, session["channel_delete_disabled"])}
end
@impl true
def handle_event(
"change_channel",
%{"_target" => ["channel", "category_id"], "channel" => channel},
socket
) do
category = ChannelCategories.get_category_by_id!(channel["category_id"])
{:noreply,
socket
|> assign(:category, category)
|> assign(
:subcategory_label,
ChannelCategories.get_subcategory_label(category)
)
|> assign(
:subcategory_placeholder,
ChannelCategories.get_subcategory_select_label_description(category)
)
|> assign(
:subcategory_attribution,
Glimesh.ChannelCategories.get_subcategory_attribution(category)
)
|> assign(:existing_subcategory, "")
|> assign(:existing_tags, "")
|> assign(:current_category_id, channel["category_id"])}
end
def handle_event("change_channel", _params, socket) do
{:noreply, socket}
end
def handle_event("replace_interactive", _params, socket) do
#This has to run before a new project is uploaded. Removes the previous project
Enum.each(socket.assigns.channel.interactive_project, fn e ->
Interactive.delete({e.file_name, socket.assigns.channel})
end)
{:noreply, socket}
end
@impl true
def handle_event("rotate_stream_key", _params, socket) do
with :ok <-
Bodyguard.permit(
Streams,
:update_channel,
socket.assigns.channel.user,
socket.assigns.channel
) do
case Streams.rotate_stream_key(socket.assigns.channel.user, socket.assigns.channel) do
{:ok, channel} ->
{:noreply,
socket
|> put_flash(
:info,
"Stream key reset, make sure to update your streaming client with the new key."
)
|> assign(:stream_key, Streams.get_stream_key(channel))
|> assign(:channel_changeset, Streams.Channel.changeset(channel))}
{:error, _changeset} ->
{:noreply, socket}
end
end
end
def search_categories(query, socket) do
ChannelCategories.tagify_search_for_subcategories(socket.assigns.category, query)
end
def search_tags(query, socket) do
ChannelCategories.tagify_search_for_tags(socket.assigns.category, query)
end
end