summaryrefslogtreecommitdiff
path: root/lib/irc/user_track.ex
diff options
context:
space:
mode:
authorhref <href@random.sh>2021-09-03 04:04:21 +0200
committerhref <href@random.sh>2021-09-03 04:04:21 +0200
commit5399fc818cf821c75f9f19fd00bf7905ba7fe7e3 (patch)
tree00408724f9778cc7323b1459782a762626d39b6a /lib/irc/user_track.ex
parentassets.. (diff)
various fixes, web client wip, pubsub events
Diffstat (limited to 'lib/irc/user_track.ex')
-rw-r--r--lib/irc/user_track.ex21
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/irc/user_track.ex b/lib/irc/user_track.ex
index 5e1c3a3..4b1ee67 100644
--- a/lib/irc/user_track.ex
+++ b/lib/irc/user_track.ex
@@ -183,7 +183,7 @@ defmodule IRC.UserTrack do
user = if user = find_by_nick(sender.network, nick) do
%User{user | username: uname, host: host, privileges: Map.put(user.privileges || %{}, channel, privileges)}
else
- user = %User{network: sender.network, nick: nick, username: uname, host: host, privileges: %{channel => privileges}}
+ user = %User{id: IRC.UserTrack.Id.large_id, network: sender.network, nick: nick, username: uname, host: host, privileges: %{channel => privileges}}
account = IRC.Account.lookup(user).id
user = %User{user | account: account}
@@ -197,6 +197,8 @@ defmodule IRC.UserTrack do
Storage.op(fn(ets) ->
:ets.insert(ets, User.to_tuple(user))
end)
+
+ IRC.Connection.publish_event({sender.network, channel}, %{type: :join, user_id: user.id, account_id: user.account})
end
#def joined(network, channel, nick, privileges) do
@@ -235,6 +237,8 @@ defmodule IRC.UserTrack do
account = IRC.Account.lookup(user, false) || old_account
user = %User{user | nick: new_nick, account: account.id, nicks: [old_nick|user.nicks]}
Storage.insert(User.to_tuple(user))
+ channels = for {channel, _} <- user.privileges, do: channel
+ IRC.Connection.publish_event(network, %{type: :nick, user_id: user.id, account_id: account.id, nick: new_nick, old_nick: old_nick})
end
end
@@ -247,9 +251,11 @@ defmodule IRC.UserTrack do
user = %User{user | privileges: Map.put(user.privileges, channel, privs)}
Storage.insert(User.to_tuple(user))
+ IRC.Connection.publish_event({network, channel}, %{type: :privileges, user_id: user.id, account_id: user.account, added: add, removed: remove})
end
end
+ # XXX: Reason
def parted(channel, %{network: network, nick: nick}) do
parted(network, channel, nick)
end
@@ -265,16 +271,21 @@ defmodule IRC.UserTrack do
if Enum.count(privs) > 0 do
user = %User{user | privileges: privs}
Storage.insert(User.to_tuple(user))
+ IRC.Connection.publish_event({network, channel}, %{type: :part, user_id: user.id, account_id: user.account, reason: nil})
else
+ IRC.Connection.publish_event(network, %{type: :quit, user_id: user.id, account_id: user.account, reason: "Left all known channels"})
Storage.delete(user.id)
end
end
end
- def quitted(sender) do
+ def quitted(sender, reason) do
if user = find_by_nick(sender.network, sender.nick) do
if user.account do
- for({channel, _} <- user.privileges, do: IRC.Membership.touch(user.account, sender.network, channel))
+ for {channel, _} <- user.privileges do
+ IRC.Membership.touch(user.account, sender.network, channel)
+ end
+ IRC.Connection.publish_event(sender.network, %{type: :quit, user_id: user.id, account_id: user.account, reason: reason})
end
Storage.delete(user.id)
end
@@ -288,4 +299,8 @@ defmodule IRC.UserTrack do
%User{user | last_active: last_active}
end
+ defp userchans(%{privileges: privileges}) do
+ for({chan, _} <- privileges, do: chan)
+ end
+
end