Commit Graph

128 Commits (master)

Author SHA1 Message Date
Noah 08b8435448 Style fix 2023-03-21 21:59:02 -07:00
Noah d819a1181d Photo sharing support 2023-03-21 21:29:24 -07:00
Noah a23f5080d5 Skip unread indicators for ChatServer messages 2023-03-16 19:02:59 -07:00
Noah 368902e801 Draggable resizable video panels 2023-03-13 21:31:34 -07:00
Noah 5f2456103b Style fix for videos: wrap, not scroll 2023-02-28 15:32:14 -08:00
Noah 4397006186 Stringify WebRTC candidate/sdp payloads 2023-02-24 17:42:38 -08:00
Noah ac55fc2c50 Experiment to see if iOS devices can connect better w/ JWT auth 2023-02-24 16:47:28 -08:00
Noah 03c3dd4f2e Don't try to reconnect to chat forever 2023-02-19 21:36:36 -08:00
Noah 77a376452b Flesh out the help page a bit more 2023-02-12 16:43:35 -08:00
Noah b02ad52f8f Externalize links sent in chat 2023-02-11 16:02:48 -08:00
Noah 15ebc42bd3 NSFW Cameras and Moderator Commands 2023-02-10 22:46:39 -08:00
Noah 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
Noah f7b9e026a0 CSS fix for Safari 2023-02-08 21:30:01 -08:00
Noah be2fc0c026 Safer AudioContext access 2023-02-08 21:23:08 -08:00
Noah a55b4b2b49 A bit more logging to debug WebSocket issues 2023-02-08 20:01:06 -08:00
Noah ca0ad66006 Default WhoList icons for guest users 2023-02-06 15:38:14 -08:00
Noah 19d576783d Style fixes and more README documentation 2023-02-06 15:34:10 -08:00
Noah 5456c88e70 Two-channel WebRTC for watching each other 2023-02-06 15:02:23 -08:00
Noah 8a639109b2 Spit and polish 2023-02-06 13:52:05 -08:00
Noah e84cc146ad Cleanup JS console logs 2023-02-06 13:33:09 -08:00
Noah 9487595e04 Timestamps, Sound Effects & Love 2023-02-06 13:27:29 -08:00
Noah 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
Noah 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
Noah 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
Noah 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
Noah 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
Noah 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
Noah b627fe0ffa Initial commit 2023-01-10 22:38:48 -08:00