:stylesheet: style.css = CAMU - Self-Hosted Media Streamer & Archiver image::design_diagram.svg[Diagram,820] Breif on Components ------------------- Server ~~~~~~ The server is the main hub responsible for all handling user account related functions and state, as well as managing the network of all other individual components. User Accounts ^^^^^^^^^^^^^ Users accounts contain 4 main concepts: lists, media lists, history, and settings. * *Lists*: Transient lists of media connected to a user-defined set of sinks. Resources retrived via browse/search instances get added to a list for playback. A list's set of active sinks can be changed on the fly. * *Collections*: A more organized way to collect related media. They are stored to the user's account and therefore saved to the disk. * *Packs*: [Working Idea] A more defined collection of media. Possibly being more detailed, for broader consumption, and/or archival. Something that should be easy to share. * *History*: A detailed history that tracks what a user played and when. Also saved to a user's account. * *Settings*: Various per-user settings. For example, tag blacklist, start/stop times per resource, skip settings per collection (album tracks). Node ~~~~ Nodes can be seen as distributed resource managers for the server. They each contain up to 3 main parts: A source manager and/or database, then a resource host. A node can have one or both of a source manager and database but a node without either is useless. Source Manager ^^^^^^^^^^^^^^ A source manager implements any or all of browsing, searching, and custom resource actions. A big point of a source manager is to be able to work entirely behind a proxy. Some examples of sources may include a social media website, filesystem directory, dvd drive, or radio antenna. An example of browsing could be Apple Music's "New Music". An example of searching, Youtube search. A custom action could be liking a post on Twitter. Database ^^^^^^^^ Stores resources along with as much metadata as possible. Simply used to retrive resources locally instead of going through the source manager. Resource Host ^^^^^^^^^^^^^ Hosts node-local resources for the server to use for streaming. Should support anything a source manager can give it. Client ~~~~~~ Clients are the only way a user interacts with the rest of the network besides the special case of play, pause, skip and seek which can be done from a sink. libclient ^^^^^^^^^ C library that integrates with the rest of the code-base to abstract communicating with the server as a client. Sink ~~~~ A sink's only purpose is to be a minimal, yet optimal, way to view the entries in a list. libsink ^^^^^^^ C library that abstracts communicating with the server as a sink in a platform- and environment-independent way. // vim: set syntax=asciidoc: