diff options
author | href <href@random.sh> | 2021-09-03 04:04:21 +0200 |
---|---|---|
committer | href <href@random.sh> | 2021-09-03 04:04:21 +0200 |
commit | 5399fc818cf821c75f9f19fd00bf7905ba7fe7e3 (patch) | |
tree | 00408724f9778cc7323b1459782a762626d39b6a /lib/irc/user_track.ex | |
parent | assets.. (diff) |
various fixes, web client wip, pubsub events
Diffstat (limited to 'lib/irc/user_track.ex')
-rw-r--r-- | lib/irc/user_track.ex | 21 |
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 |