Commit Graph

82 Commits

Author SHA1 Message Date
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
a23f5080d5 Skip unread indicators for ChatServer messages 2023-03-16 19:02:59 -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
4397006186 Stringify WebRTC candidate/sdp payloads 2023-02-24 17:42:38 -08:00
ac55fc2c50 Experiment to see if iOS devices can connect better w/ JWT auth 2023-02-24 16:47:28 -08:00
03c3dd4f2e Don't try to reconnect to chat forever 2023-02-19 21:36:36 -08:00
77a376452b Flesh out the help page a bit more 2023-02-12 16:43:35 -08:00
b02ad52f8f Externalize links sent in chat 2023-02-11 16:02:48 -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
f7b9e026a0 CSS fix for Safari 2023-02-08 21:30:01 -08:00
be2fc0c026 Safer AudioContext access 2023-02-08 21:23:08 -08:00
a55b4b2b49 A bit more logging to debug WebSocket issues 2023-02-08 20:01:06 -08:00
b82ca3d34b Add demo link to README 2023-02-06 15:40:27 -08:00
ca0ad66006 Default WhoList icons for guest users 2023-02-06 15:38:14 -08:00
19d576783d Style fixes and more README documentation 2023-02-06 15:34:10 -08:00
5456c88e70 Two-channel WebRTC for watching each other 2023-02-06 15:02:23 -08:00
11cd2c821b Add screenshot and update README 2023-02-06 14:21:08 -08:00
8a639109b2 Spit and polish 2023-02-06 13:52:05 -08:00
e84cc146ad Cleanup JS console logs 2023-02-06 13:33:09 -08:00
9487595e04 Timestamps, Sound Effects & Love 2023-02-06 13:27:29 -08:00
4810d95a65 Cleanup 2023-02-05 22:16:36 -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
4f93c27651 Progress on Chat Server
* Reworked full screen CSS layout for the chat.html, still using Bulma
  components with some custom CSS Grid.
* Duplicate username handling: server can push a new username to change
  the client's selection.
* Who List sync between clients.
* Local video casting works so far - plays back your camera in the local
  feed. Your video broadcasting boolean is synced to backend, which
  lights up the video button in the Who List.
2023-01-26 20:34:58 -08:00
b627fe0ffa Initial commit 2023-01-10 22:38:48 -08:00