--- a/src/mediaserver/contentdirectory.hxx
+++ b/src/mediaserver/contentdirectory.hxx
@@ -28,12 +28,49 @@
using namespace UPnPP;
+// Content Directory service
+//
+// The actual work is done by separate plugins (CDPlugin interface),
+// depending of where the data comes from (streaming service, e.g,
+// Tidal, Qobuz, or local file store - uprcl). There is currently a
+// single implementation of CDPlugin (PlgWithSlave) for which most of
+// the differentiated work is done by a Python subprocess specific to
+// the backend.
+//
+// The CDPluginServices interface provides some service callbacks to
+// the implementations.
+//
+// The class is responsible for generating the root directory,
+// according to what services are enabled. For deeper directories, the
+// dispatch to the right service is performed according to the first
+// element in the object ID (e.g. $qobuz$).
+//
+// Accordingly, the media access also depends on the type of backend,
+// and some media URIs are also formed in order to be dispatchable
+// (e.g. http://xxx/qobuz/...). Some also point directly to a server
+// implemented by the plugin. Depending on the service, either
+// redirection or proxying is used to supply the data stream.
+//
+// We also have a special operation mode where the browsing is done by
+// the CP and we are only used for accessing the streams (see
+// constructor comment).
class ContentDirectory : public UPnPProvider::UpnpService,
public CDPluginServices {
public:
- // Enabled==false : used for ohcredentials, no services locally
- // enabled, force some initializations
+
+ // Constructor.
+ //
+ // Enabled==false: means that no content directory service is
+ // actually needed. No service will be enabled, but we perform
+ // some initializations. This is used in conjunction with
+ // OHCredentials. The Control Point (typ. Kazoo) does the
+ // browsing, and sends tidal://xx or qobuz://xx URIs to
+ // OHPlaylist. The URI contain the service trackid, and are
+ // translated by OHPlaylist/OHCredentials into the form which is
+ // generated when this class does the browsing. The data access is
+ // then performed as if the URIs had been generated by us.
ContentDirectory(MediaServer *dev, bool enabled);
+
~ContentDirectory();
/// Return plugin based on path prefix
@@ -44,11 +81,6 @@
/// these as host/port
virtual std::string getupnpaddr(CDPlugin *);
virtual int getupnpport(CDPlugin *);
-
- /// Add a virtual directory and set file operation interface. path
- /// must be equal or begin with the pathprefix.
- virtual bool setfileops(CDPlugin *, const std::string& path,
- UPnPProvider::VirtualDir::FileOps ops);
virtual std::string getfname();