Commit Graph

52 Commits

Author SHA1 Message Date
029f25029d Cached Blocklist from your website
* New API endpoint: /api/blocklist where your site can pre-deliver muted
  username lists for users before they enter the chat.
* Image sharing in DMs is allowed if either party is an operator.
2023-07-30 10:32:08 -07:00
f3517bec87 No pictures shared over chat DMs 2023-07-27 22:29:56 -07:00
fbae93d4f9 DMs disclaimer banner 2023-07-27 20:40:16 -07:00
d80f67dd1e Increase idle threshold to 5 minutes 2023-07-23 15:49:04 -07:00
e111899404 Spit and polish
* Add a scrollback buffer option to the chat Settings to trim room history
  so your browser can manage its memory usage
* Update the wording that ChatServer sends to users when the /nsfw command
  has been used on them
* Fix the ordering of active DMs for Chromium browsers so the most recently
  updated DM thread moves to the top of the list
* Show an indicator on videos whether the person you watch also watches
  you back
* Fix the "X" button on the photo modal not functioning correctly
2023-07-22 18:30:45 -07:00
75c7511410 Kick off conflicting usernames + Frontend mobile fixes
* When JWT tokens are used to join the chat and the username conflicts:
  instead of renaming the new user to add a "2" it will disconnect the
  original login (sending a message that they have signed in somewhere
  else and are logged out now)
* When disconnected the text entry box will be greyed out.
* Improvements for the mobile user experience: if you're viewing the
  chat history panel and have unread messages or DMs, a number indicator
  appears on the channels button. It is grey for public channel messages
  or red if any of them are DMs
* Fix the emoji picker drop-down on the first messages of a DM thread
2023-07-17 20:38:07 -07:00
55b17f62c4 Add device picker for webcams and microphones to the settings modal 2023-07-09 12:33:02 -07:00
3a334a8d68 Remove alt text on avatars in case of broken images 2023-07-08 10:52:12 -07:00
b6881919ff Take back emojis and other small tweaks 2023-07-01 11:39:08 -07:00
0612f76979 Can click an emoji to upvote it 2023-06-30 21:55:08 -07:00
f985b0cf2b New emojis 2023-06-30 21:48:09 -07:00
5f4b14ecc4 Emoji reactions 2023-06-30 20:00:21 -07:00
2445d45d3f Video Status Bitflags + Improvements
* Consolidate all the Video flags (active, nsfw, mutual, mutualOpen)
  into a bitmask flag (single integer)
* New video flag for when the source has muted their video, to show a
  crossed out grey mic on their camera for other chatters
* Bugfixes around syncing the mute state for self and other videos when
  videos are opened, closed and opened again
* Profile pictures on the DMs list
2023-06-30 18:42:40 -07:00
b19a4821e4 Message Takebacks 2023-06-24 13:08:15 -07:00
a797bc45da Spit and polish
* Add a distinctly colored title and background for DM threads apart
  from the public channels
* On the Who List, the profile picture is clickable to open profile
  links
* Fix auto-scrolling issues: it won't autoscroll if the new message was
  in a different channel, and when toggling between channels always
  scroll back to the bottom of that channel
2023-06-24 11:12:02 -07:00
2da08aa67a You can not open the camera of someone you have muted 2023-06-14 21:06:57 -07:00
b767620699 Tweak unmute user UX 2023-06-14 20:45:54 -07:00
4be18ea3a2 Add TURN server support 2023-06-13 21:57:31 -07:00
92f1e7ba04 Show user display name on join events 2023-06-12 18:16:27 -07:00
50d7aea39d Chat style updates 2023-06-11 20:33:26 -07:00
58264515f9 Pop-out draggable video support 2023-04-19 22:00:31 -07:00
d6860160f4 Padding fix for message UI 2023-04-18 22:34:45 -07:00
219413ae6d Display names and WIP multiple camera support 2023-04-18 22:18:12 -07:00
45ab63cfba Remember video mutality prefs on localStorage 2023-03-31 20:25:53 -07:00
4f61b8dc1c Slashed out video icon if mutual and you can't follow 2023-03-31 20:12:20 -07:00
4a2fc9c923 Sort the WhoList + Mutual Video options
* The who list now sorts alphabetically instead of random
* New user controls when they share video:
  * Require users to also be sharing before they open ours
  * We auto-open a viewer's video when they open ours
2023-03-31 19:46:42 -07:00
dd9f4b4dd4 Bugfixes with user status 2023-03-28 18:34:50 -07:00
e69449124e Chat status updates 2023-03-28 18:09:13 -07:00
3560e63096 User status and idle detection 2023-03-27 21:13:04 -07:00
b3551cbe9a Font size options 2023-03-24 22:10:44 -07:00
ea4c597cbd Auto-scroll checkbox 2023-03-24 21:56:40 -07:00
6a2657ad49 Minor style fix 2023-03-22 20:27:32 -07:00
4d842247e6 Minor style fix 2023-03-22 20:26:42 -07:00
c5c8d08c7a Boot and Mute
* Users can now boot viewers off their camera. From the viewer's POV the
  booter has just turned off their camera and it will remain "off" for
  the remainder of the booter's session.
* Users can now mute one another: if you mute a user, you will no longer
  see that user's messages or DMs; and the muted user will never see
  your video as being active (like a boot but revokable if you unmute
  later).
2023-03-22 20:21:04 -07:00
08b8435448 Style fix 2023-03-21 21:59:02 -07:00
d819a1181d Photo sharing support 2023-03-21 21:29:24 -07:00
368902e801 Draggable resizable video panels 2023-03-13 21:31:34 -07:00
5f2456103b Style fix for videos: wrap, not scroll 2023-02-28 15:32:14 -08:00
ac55fc2c50 Experiment to see if iOS devices can connect better w/ JWT auth 2023-02-24 16:47:28 -08:00
15ebc42bd3 NSFW Cameras and Moderator Commands 2023-02-10 22:46:39 -08:00
b966f85ecc Spit and polish
* Track the window focus/blur events. Leaving the tab while in a channel
  now means you may still hear sound effects in that channel.
* Add a CORS JSON API /v1/statistics to get details from the server
  about who is online. The CORSHosts whitelist in the settings.toml
  limits domain access to the endpoint.
2023-02-09 23:03:06 -08:00
ca0ad66006 Default WhoList icons for guest users 2023-02-06 15:38:14 -08:00
5456c88e70 Two-channel WebRTC for watching each other 2023-02-06 15:02:23 -08:00
8a639109b2 Spit and polish 2023-02-06 13:52:05 -08:00
9487595e04 Timestamps, Sound Effects & Love 2023-02-06 13:27:29 -08:00
d8de60c990 Volume Controls, Mute/Unmute Video
* Added a top panel to put your video controls in.
* Broadcaster can mute or unmute their own audio input.
* When viewing others' cams, buttons appear to control their video:
  * Their username is displayed in the corner.
  * Mute/unmute button to silence their audio.
  * "X" button to close their camera.
* Button to show what viewers are currently watching your camera.
* Add an "About" page and config for app branding.
* Add dark theme CSS for prefers-dark browsers.
2023-02-05 20:26:00 -08:00
1ecff195ac JWT Token-based Authentication
* Add support for JWT tokens to authenticate users from your external app.
* JWT backed users can have profile pictures, profile URLs, and operator
  status (admin). Note that no operator features exist yet.
* Add WelcomeMessages to settings.toml for default ChatServer messages to
  write to each public channel directed at a new user logging in.
* Markdown support for chat messages!
2023-02-05 17:42:09 -08:00
8f60bdba0e Spit and polish
* Add configuration system and default public channels support
* Add support for multiple channels and DM threads with users,
  with unread badge indicators. DMs rearrange themselves by
  most recently updated on top.
* Responsive CSS to work well on mobile devices.
2023-02-05 00:53:50 -08:00
3f756c5318 Camera connectivity established!
* Two users can activate their cameras locally and then connect them together
  with WebRTC with video and audio support working!
* Limitation: users need to be broadcasting video themselves before they can
  connect to someone's camera. If the offerer doesn't add tracks of their own,
  the SDP offer doesn't request video channels; so even though the answerer
  adds their tracks to the connection, they aren't used by the offerer.
* As currently implemented, the offerer's camera feed will also appear on
  screen for the answerer - every video connection opens the feed both ways.

Compared to the previous commit (where clients shared SDP messages but not
ICE candidates or anything further) the fixes and learnings were:

* The back-end was trying to relay candidate messages, but there was a JSON
  marshalling error (json object casted into a string) - changed the Message
  type to map[string]interface{} and both sides could exchange ICE candidates.
* Both sides needed to add their video tracks to the connection so that there
  was anything of value to be sent over the WebRTC channel.

Other changes:

* Server will send a ping message every minute to connected WebSockets.
2023-02-04 21:00:01 -08:00
5dbe938780 Initial WebRTC Code
* WebRTC pees exchange local/remote descriptions ("offer" and "answer")
* They don't seem to exchange ICE candidates yet
* Some back and forth happens but the final WebRTC stream connection
  isn't established yet.
2023-01-26 22:54:02 -08:00